From 91d5c5fd50a813050d10dec33cae54587a18b676 Mon Sep 17 00:00:00 2001 From: Chris Maddern Date: Tue, 28 Mar 2017 22:18:42 -0400 Subject: [PATCH 1/5] Add Customers resource --- CHANGELOG.md | 3 +++ lib/button/client.rb | 4 +++- lib/button/resources/customers.rb | 21 +++++++++++++++++ lib/button/version.rb | 2 +- test/button/resources/customers_test.rb | 31 +++++++++++++++++++++++++ 5 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 lib/button/resources/customers.rb create mode 100644 test/button/resources/customers_test.rb diff --git a/CHANGELOG.md b/CHANGELOG.md index 6fb3490..736ad66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +3.0.0 March 29, 2017 + - Add `Customers` resource + 2.0.0 January 6, 2017 - Add `Accounts` resource - Add `Merchants` resource diff --git a/lib/button/client.rb b/lib/button/client.rb index 4e01669..dd4ad43 100644 --- a/lib/button/client.rb +++ b/lib/button/client.rb @@ -1,4 +1,5 @@ require 'button/resources/accounts' +require 'button/resources/customers' require 'button/resources/merchants' require 'button/resources/orders' require 'button/errors' @@ -26,6 +27,7 @@ def initialize(api_key, config = {}) config_with_defaults = merge_defaults(config) @accounts = Accounts.new(api_key, config_with_defaults) + @customers = Customers.new(api_key, config_with_defaults) @merchants = Merchants.new(api_key, config_with_defaults) @orders = Orders.new(api_key, config_with_defaults) end @@ -41,7 +43,7 @@ def merge_defaults(config) } end - attr_reader :accounts, :merchants, :orders + attr_reader :accounts, :customers, :merchants, :orders private :merge_defaults end end diff --git a/lib/button/resources/customers.rb b/lib/button/resources/customers.rb new file mode 100644 index 0000000..d240b62 --- /dev/null +++ b/lib/button/resources/customers.rb @@ -0,0 +1,21 @@ +require 'button/resources/resource' + +module Button + # https://www.usebutton.com/developers/api-reference/ + # + class Customers < Resource + def path(customer_id = nil) + return "/v1/customers/#{customer_id}" if customer_id + '/v1/customers' + end + + # Create a Customer + # + # @param [Hash] customer the customer to create + # @return [Button::Response] the API response + # + def create(customer) + api_post(path, customer) + end + end +end diff --git a/lib/button/version.rb b/lib/button/version.rb index fce692e..ca94af9 100644 --- a/lib/button/version.rb +++ b/lib/button/version.rb @@ -1,3 +1,3 @@ module Button - VERSION = '2.0.0'.freeze + VERSION = '3.0.0'.freeze end diff --git a/test/button/resources/customers_test.rb b/test/button/resources/customers_test.rb new file mode 100644 index 0000000..244410e --- /dev/null +++ b/test/button/resources/customers_test.rb @@ -0,0 +1,31 @@ +require File.expand_path('../../../test_helper', __FILE__) + +class CustomersTest < Test::Unit::TestCase + def setup + @customers = Button::Customers.new( + 'sk-XXX', + secure: true, + timeout: nil, + hostname: 'api.usebutton.com', + port: 443 + ) + + @headers = { + 'Authorization' => 'Basic c2stWFhYOg==', + 'User-Agent' => Button::Resource::USER_AGENT + } + end + + def teardown + WebMock.reset! + end + + def test_create + stub_request(:post, 'https://api.usebutton.com/v1/customers') + .with(body: '{"id":"1234"}', headers: @headers) + .to_return(status: 200, body: '{ "meta": { "status": "ok" }, "object": { "id": "1234" } }') + + response = @customers.create(id: '1234') + assert_equal(response.data[:id], '1234') + end +end From 2c79952ff5092d6fc9e60bbfe34da6d831d54ef3 Mon Sep 17 00:00:00 2001 From: Chris Maddern Date: Tue, 28 Mar 2017 22:39:37 -0400 Subject: [PATCH 2/5] Add Customer README entry --- README.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/README.md b/README.md index 7810580..bd8a55e 100644 --- a/README.md +++ b/README.md @@ -80,6 +80,7 @@ The supported options are as follows: We currently expose the following resources to manage: * [`Accounts`](#accounts) +* [`Customers`](#customers) * [`Merchants`](#merchants) * [`Orders`](#orders) @@ -127,6 +128,24 @@ while !cursor.nil? do end ``` +### Customers + +##### Create + +```ruby +require 'button' + +client = Button::Client.new('sk-XXX') + +response = client.customers.create({ + id: 'internal-customer-id', + email_sha256: 'a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3' +}) + +puts response +# => Button::Response(id: internal-customer-id, email_sha256: a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3) +``` + ### Merchants ##### all From 06dfeed6d833eb2a05c67ad900ab985109a8eb81 Mon Sep 17 00:00:00 2001 From: Chris Maddern Date: Wed, 29 Mar 2017 11:37:12 -0400 Subject: [PATCH 3/5] Update version in README --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 736ad66..f443902 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -3.0.0 March 29, 2017 +2.1.0 March 29, 2017 - Add `Customers` resource 2.0.0 January 6, 2017 From 1e801e28fef769ccf5aeb3bca1e413988335b79d Mon Sep 17 00:00:00 2001 From: Chris Maddern Date: Wed, 29 Mar 2017 11:37:27 -0400 Subject: [PATCH 4/5] Update Version in version.rb --- lib/button/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/button/version.rb b/lib/button/version.rb index ca94af9..63bb9a7 100644 --- a/lib/button/version.rb +++ b/lib/button/version.rb @@ -1,3 +1,3 @@ module Button - VERSION = '3.0.0'.freeze + VERSION = '2.1.0'.freeze end From ea484a820000f5aae90430e6690f4b99d288e409 Mon Sep 17 00:00:00 2001 From: Chris Maddern Date: Wed, 29 Mar 2017 11:37:47 -0400 Subject: [PATCH 5/5] Fix formatting in Changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f443902..7636e34 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,5 @@ 2.1.0 March 29, 2017 - - Add `Customers` resource + - Add `Customers` resource 2.0.0 January 6, 2017 - Add `Accounts` resource