diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..8f17aa1 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,69 @@ +PATH + remote: . + specs: + coinbase_commerce (0.8.7) + 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 (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) + 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) + ruby2_keywords (0.0.5) + webmock (3.14.0) + addressable (>= 2.8.0) + crack (>= 0.3.2) + hashdiff (>= 0.4.0, < 2.0.0) + +PLATFORMS + arm64-darwin-20 + arm64-darwin-22 + +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..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", "~> 0.10") + 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/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..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 @@ -104,7 +106,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