From 46598fba0d6e7b38d39f1d986b4be683b2a6c182 Mon Sep 17 00:00:00 2001 From: Felipe Lima Date: Mon, 20 Sep 2021 21:49:12 -0300 Subject: [PATCH 1/2] Add support for resolving charges --- Gemfile.lock | 60 +++++++++++++++++++ coinbase_commerce.gemspec | 2 +- lib/coinbase_commerce/api_resources/charge.rb | 8 +++ lib/coinbase_commerce/client.rb | 2 +- spec/api_resources/charge_spec.rb | 11 ++++ 5 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 Gemfile.lock diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..452fa8d --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,60 @@ +PATH + remote: . + specs: + coinbase_commerce (0.8.7) + faraday (~> 1.0.0) + +GEM + remote: https://rubygems.org/ + specs: + addressable (2.8.0) + public_suffix (>= 2.0.2, < 5.0) + byebug (11.1.3) + coderay (1.1.3) + crack (0.4.5) + rexml + diff-lcs (1.4.4) + faraday (1.0.1) + multipart-post (>= 1.2, < 3) + hashdiff (1.0.1) + method_source (1.0.0) + multipart-post (2.1.1) + pry (0.13.1) + coderay (~> 1.1) + method_source (~> 1.0) + pry-byebug (3.9.0) + byebug (~> 11.0) + pry (~> 0.13.0) + public_suffix (4.0.6) + rake (13.0.6) + rexml (3.2.5) + rspec (3.10.0) + rspec-core (~> 3.10.0) + rspec-expectations (~> 3.10.0) + rspec-mocks (~> 3.10.0) + rspec-core (3.10.1) + rspec-support (~> 3.10.0) + rspec-expectations (3.10.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-mocks (3.10.2) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-support (3.10.2) + webmock (3.14.0) + addressable (>= 2.8.0) + crack (>= 0.3.2) + hashdiff (>= 0.4.0, < 2.0.0) + +PLATFORMS + arm64-darwin-20 + +DEPENDENCIES + coinbase_commerce! + pry-byebug + rake + rspec + webmock + +BUNDLED WITH + 2.2.26 diff --git a/coinbase_commerce.gemspec b/coinbase_commerce.gemspec index 17e3386..6207998 100644 --- a/coinbase_commerce.gemspec +++ b/coinbase_commerce.gemspec @@ -19,7 +19,7 @@ Gem::Specification.new do |gem| gem.test_files = gem.files.grep(%r{^(spec|gem|features)/}) gem.require_paths = ["lib"] - gem.add_dependency("faraday", "~> 0.10") + gem.add_dependency("faraday", "~> 1.0.0") gem.add_development_dependency "rake" gem.add_development_dependency "rspec" diff --git a/lib/coinbase_commerce/api_resources/charge.rb b/lib/coinbase_commerce/api_resources/charge.rb index 0faa222..cd6fb56 100644 --- a/lib/coinbase_commerce/api_resources/charge.rb +++ b/lib/coinbase_commerce/api_resources/charge.rb @@ -9,6 +9,14 @@ class Charge < Base::APIResource # class constants OBJECT_NAME = "charge".freeze RESOURCE_PATH = "charges".freeze + + def resolve + values = serialize_params(self) + values.delete(:id) + resp = @client.request(:post, "#{self.class::RESOURCE_PATH}/#{self[:id]}/resolve", self) + initialize_from(resp.data) + self + end end end end diff --git a/lib/coinbase_commerce/client.rb b/lib/coinbase_commerce/client.rb index 3d8fb69..f9ea5dd 100644 --- a/lib/coinbase_commerce/client.rb +++ b/lib/coinbase_commerce/client.rb @@ -104,7 +104,7 @@ def execute_request_with_rescues(api_base) resp = yield rescue StandardError => e case e - when Faraday::ClientError + when Faraday::ServerError, Faraday::ClientError if e.response Errors.handle_error_response(e.response) else diff --git a/spec/api_resources/charge_spec.rb b/spec/api_resources/charge_spec.rb index 10eca35..31feafe 100644 --- a/spec/api_resources/charge_spec.rb +++ b/spec/api_resources/charge_spec.rb @@ -16,4 +16,15 @@ .with(query: {limit: 5}).to_return(body: JSON.generate(data: [mock_list])) @client.charge.list(limit: 5) end + + it 'resolves a charge' do + stub_request(:post, "#{@api_base}#{CoinbaseCommerce::APIResources::Charge::RESOURCE_PATH}") + .with(body: {:id => "id_value", :key => "key_value"}) + .to_return(body: {data: {id: "id_value", key: "key_value"}}.to_json) + charge = @client.charge.create(id: "id_value", key: "key_value") + stub_request(:post, "#{@api_base}#{CoinbaseCommerce::APIResources::Charge::RESOURCE_PATH}/id_value/resolve") + .with(body: {:id => "id_value", :key => "key_value"}) + .to_return(body: {data: {id: "id_value", key: "key_value"}}.to_json) + charge.resolve + end end From debe2aa6ac46c69282bd5f3bb057374338d1c16b Mon Sep 17 00:00:00 2001 From: Pedram Date: Sun, 26 Nov 2023 21:35:29 -0500 Subject: [PATCH 2/2] Update faraday --- Gemfile.lock | 15 ++++++++++++--- coinbase_commerce.gemspec | 3 ++- lib/coinbase_commerce/client.rb | 8 +++++--- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 452fa8d..8f17aa1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -2,20 +2,27 @@ PATH remote: . specs: coinbase_commerce (0.8.7) - faraday (~> 1.0.0) + faraday (~> 2.7.0) + faraday-multipart (~> 1.0.4) GEM remote: https://rubygems.org/ specs: addressable (2.8.0) public_suffix (>= 2.0.2, < 5.0) + base64 (0.2.0) byebug (11.1.3) coderay (1.1.3) crack (0.4.5) rexml diff-lcs (1.4.4) - faraday (1.0.1) - multipart-post (>= 1.2, < 3) + faraday (2.7.12) + base64 + faraday-net_http (>= 2.0, < 3.1) + ruby2_keywords (>= 0.0.4) + faraday-multipart (1.0.4) + multipart-post (~> 2) + faraday-net_http (3.0.2) hashdiff (1.0.1) method_source (1.0.0) multipart-post (2.1.1) @@ -41,6 +48,7 @@ GEM diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.10.0) rspec-support (3.10.2) + ruby2_keywords (0.0.5) webmock (3.14.0) addressable (>= 2.8.0) crack (>= 0.3.2) @@ -48,6 +56,7 @@ GEM PLATFORMS arm64-darwin-20 + arm64-darwin-22 DEPENDENCIES coinbase_commerce! diff --git a/coinbase_commerce.gemspec b/coinbase_commerce.gemspec index 6207998..43852bc 100644 --- a/coinbase_commerce.gemspec +++ b/coinbase_commerce.gemspec @@ -19,7 +19,8 @@ Gem::Specification.new do |gem| gem.test_files = gem.files.grep(%r{^(spec|gem|features)/}) gem.require_paths = ["lib"] - gem.add_dependency("faraday", "~> 1.0.0") + gem.add_dependency("faraday", "~> 2.7.0") + gem.add_dependency 'faraday-multipart', '~> 1.0.4' gem.add_development_dependency "rake" gem.add_development_dependency "rspec" diff --git a/lib/coinbase_commerce/client.rb b/lib/coinbase_commerce/client.rb index f9ea5dd..e877f5d 100644 --- a/lib/coinbase_commerce/client.rb +++ b/lib/coinbase_commerce/client.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'faraday/multipart' + module CoinbaseCommerce BASE_API_URL = "https://api.commerce.coinbase.com/" API_VERSION = "2018-03-22" @@ -17,9 +19,9 @@ def initialize(options = {}) @api_ver = options[:api_ver] || API_VERSION # create client obj @conn = Faraday.new do |c| - c.use Faraday::Request::Multipart - c.use Faraday::Request::UrlEncoded - c.use Faraday::Response::RaiseError + c.request :multipart + c.request :url_encoded + c.response :raise_error c.adapter Faraday.default_adapter end end