Skip to content

Commit 009ac26

Browse files
authored
Merge pull request #13 from button/chris/customers_api
Add Customers resouce to Rubygem
2 parents d05f698 + ea484a8 commit 009ac26

6 files changed

Lines changed: 78 additions & 2 deletions

File tree

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
2.1.0 March 29, 2017
2+
- Add `Customers` resource
3+
14
2.0.0 January 6, 2017
25
- Add `Accounts` resource
36
- Add `Merchants` resource

README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ The supported options are as follows:
8080
We currently expose the following resources to manage:
8181

8282
* [`Accounts`](#accounts)
83+
* [`Customers`](#customers)
8384
* [`Merchants`](#merchants)
8485
* [`Orders`](#orders)
8586

@@ -127,6 +128,24 @@ while !cursor.nil? do
127128
end
128129
```
129130

131+
### Customers
132+
133+
##### Create
134+
135+
```ruby
136+
require 'button'
137+
138+
client = Button::Client.new('sk-XXX')
139+
140+
response = client.customers.create({
141+
id: 'internal-customer-id',
142+
email_sha256: 'a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3'
143+
})
144+
145+
puts response
146+
# => Button::Response(id: internal-customer-id, email_sha256: a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3)
147+
```
148+
130149
### Merchants
131150

132151
##### all

lib/button/client.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
require 'button/resources/accounts'
2+
require 'button/resources/customers'
23
require 'button/resources/merchants'
34
require 'button/resources/orders'
45
require 'button/errors'
@@ -26,6 +27,7 @@ def initialize(api_key, config = {})
2627
config_with_defaults = merge_defaults(config)
2728

2829
@accounts = Accounts.new(api_key, config_with_defaults)
30+
@customers = Customers.new(api_key, config_with_defaults)
2931
@merchants = Merchants.new(api_key, config_with_defaults)
3032
@orders = Orders.new(api_key, config_with_defaults)
3133
end
@@ -41,7 +43,7 @@ def merge_defaults(config)
4143
}
4244
end
4345

44-
attr_reader :accounts, :merchants, :orders
46+
attr_reader :accounts, :customers, :merchants, :orders
4547
private :merge_defaults
4648
end
4749
end

lib/button/resources/customers.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
require 'button/resources/resource'
2+
3+
module Button
4+
# https://www.usebutton.com/developers/api-reference/
5+
#
6+
class Customers < Resource
7+
def path(customer_id = nil)
8+
return "/v1/customers/#{customer_id}" if customer_id
9+
'/v1/customers'
10+
end
11+
12+
# Create a Customer
13+
#
14+
# @param [Hash] customer the customer to create
15+
# @return [Button::Response] the API response
16+
#
17+
def create(customer)
18+
api_post(path, customer)
19+
end
20+
end
21+
end

lib/button/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
module Button
2-
VERSION = '2.0.0'.freeze
2+
VERSION = '2.1.0'.freeze
33
end
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
require File.expand_path('../../../test_helper', __FILE__)
2+
3+
class CustomersTest < Test::Unit::TestCase
4+
def setup
5+
@customers = Button::Customers.new(
6+
'sk-XXX',
7+
secure: true,
8+
timeout: nil,
9+
hostname: 'api.usebutton.com',
10+
port: 443
11+
)
12+
13+
@headers = {
14+
'Authorization' => 'Basic c2stWFhYOg==',
15+
'User-Agent' => Button::Resource::USER_AGENT
16+
}
17+
end
18+
19+
def teardown
20+
WebMock.reset!
21+
end
22+
23+
def test_create
24+
stub_request(:post, 'https://api.usebutton.com/v1/customers')
25+
.with(body: '{"id":"1234"}', headers: @headers)
26+
.to_return(status: 200, body: '{ "meta": { "status": "ok" }, "object": { "id": "1234" } }')
27+
28+
response = @customers.create(id: '1234')
29+
assert_equal(response.data[:id], '1234')
30+
end
31+
end

0 commit comments

Comments
 (0)