lib/stone/siclos/client.rb in stone-ruby-0.0.2 vs lib/stone/siclos/client.rb in stone-ruby-0.1.0
- old
+ new
@@ -1,10 +1,9 @@
+# frozen_string_literal: true
+
module Stone::Siclos
module Client
-
- TOKEN_KEY = :siclos_token
-
autoload :Token, 'stone/siclos/client/token'
autoload :Establishment, 'stone/siclos/client/establishment'
autoload :Recipient, 'stone/siclos/client/recipient'
autoload :Pos, 'stone/siclos/client/pos'
autoload :PreTransaction, 'stone/siclos/client/pre_transaction'
@@ -13,117 +12,119 @@
autoload :Danfe, 'stone/siclos/client/danfe'
autoload :ClaimCheck, 'stone/siclos/client/claim_check'
autoload :Webhook, 'stone/siclos/client/webhook'
class Response
+ attr_reader :data
+ attr_reader :code
+
def initialize(code, data)
@code = code
@data = JSON.parse(data, symbolize_names: true)
raise_exception unless @data[:success]
end
- attr_reader :data
- attr_reader :code
def success?
@data[:success]
end
private
+
def raise_exception
return unless Stone.config.siclos.use_exception
raise Stone::Siclos::Error, "#{@data[:error]} - #{@data[:msg]}"
end
end
class Base
-
- def initialize(_token = Stone.config.siclos.api_key)
- @token = RequestLocals.store[TOKEN_KEY] || _token
+ def initialize(token = Stone.config.siclos.api_key)
+ @token = token
end
def parse_endpoint(path)
path = path[1..-1] if path.starts_with?('/')
endpoint = Stone.config.siclos.api_endpoint
endpoint = "#{endpoint}/" unless endpoint.end_with?('/')
URI.join(endpoint, path)
end
+ def remove_blank_values(data)
+ object = data.respond_to?(:attributes) ? data.attributes : data
+ object.each_with_object({}) do |(k, v), new_hash|
+ unless v.blank? && v != false
+ if v.respond_to?(:attributes)
+ new_hash[k] = remove_blank_values(v.attributes)
+ next
+ end
+
+ new_hash[k] = v.is_a?(Hash) ? remove_blank_values(v) : v
+ end
+ end
+ end
+
def request(method, path, data = nil, params = nil)
response = Typhoeus::Request.new(
parse_endpoint(path),
method: method,
- body: data ? data.to_json : nil,
+ body: data ? remove_blank_values(data).to_json : nil,
params: params,
- headers: {
- :'Content-Type'=> 'application/json',
- :Authorization => "Bearer #{@token}"
- }
+ headers: { 'Content-Type': 'application/json', Authorization: "Bearer #{@token}" }
).run
Response.new(response.response_code, response.response_body)
end
end
class << self
+ attr_reader :authentication_token
+
def token
@token ||= Token.new
end
def establishment
- @establishment ||= Establishment.new
+ @establishment ||= Establishment.new(@authentication_token)
end
def recipient
- @recipient ||= Recipient.new
+ @recipient ||= Recipient.new(@authentication_token)
end
def pos
- @pos ||= Pos.new
+ @pos ||= Pos.new(@authentication_token)
end
def pre_transaction
- @pre_transaction ||= PreTransaction.new
+ @pre_transaction ||= PreTransaction.new(@authentication_token)
end
def transaction
- @transaction ||= Transaction.new
+ @transaction ||= Transaction.new(@authentication_token)
end
def finance
- @finance ||= Finance.new
+ @finance ||= Finance.new(@authentication_token)
end
def danfe
- @danfe ||= Danfe.new
+ @danfe ||= Danfe.new(@authentication_token)
end
def claim_check
- @claim_check ||= ClaimCheck.new
+ @claim_check ||= ClaimCheck.new(@authentication_token)
end
def webhook
- @webhook ||= Webhook.new
+ @webhook ||= Webhook.new(@authentication_token)
end
def with_token
- clear_token
- authentication_token = token.token
+ token_result = token.token
+ raise Stone::Siclos::Error::TokenError, token_result.data[:msg] unless token_result.success?
- if authentication_token.success?
- RequestLocals.store[TOKEN_KEY] = authentication_token.data[:token]
- result = yield(self)
- result
- else
- raise Stone::Siclos::Error::TokenError, authentication_token.data[:msg]
- end
- ensure
- clear_token
- end
-
- private
-
- def clear_token
- RequestLocals.store[TOKEN_KEY] = nil
+ @authentication_token = token_result.data[:token]
+ result = yield(self)
+ result
end
end
end
end