bloom_remit_client 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/.travis.yml +6 -2
  4. data/CHANGELOG.md +8 -0
  5. data/README.md +3 -7
  6. data/bloom_remit_client.gemspec +1 -0
  7. data/lib/bloom_remit_client/client.rb +78 -22
  8. data/lib/bloom_remit_client/coercers/path.rb +11 -0
  9. data/lib/bloom_remit_client/concerns/has_base_authentification.rb +15 -0
  10. data/lib/bloom_remit_client/models/credit.rb +12 -0
  11. data/lib/bloom_remit_client/models/recipient.rb +17 -0
  12. data/lib/bloom_remit_client/models/remittance.rb +22 -0
  13. data/lib/bloom_remit_client/requests/base.rb +49 -0
  14. data/lib/bloom_remit_client/requests/billers/list.rb +21 -0
  15. data/lib/bloom_remit_client/requests/credit/history.rb +18 -0
  16. data/lib/bloom_remit_client/requests/credit/list.rb +18 -0
  17. data/lib/bloom_remit_client/requests/payments/create.rb +29 -0
  18. data/lib/bloom_remit_client/requests/rate/show.rb +26 -0
  19. data/lib/bloom_remit_client/requests/recipients/create.rb +30 -0
  20. data/lib/bloom_remit_client/requests/remittances/create.rb +30 -0
  21. data/lib/bloom_remit_client/requests/requests_sender.rb +27 -0
  22. data/lib/bloom_remit_client/requests/senders/create.rb +27 -0
  23. data/lib/bloom_remit_client/requests/url_builder.rb +51 -0
  24. data/lib/bloom_remit_client/requests.rb +18 -0
  25. data/lib/bloom_remit_client/responses/base.rb +31 -0
  26. data/lib/bloom_remit_client/responses/billers/list.rb +17 -0
  27. data/lib/bloom_remit_client/responses/payments/create.rb +17 -0
  28. data/lib/bloom_remit_client/responses/recipients/create.rb +20 -0
  29. data/lib/bloom_remit_client/responses/remittances/create.rb +20 -0
  30. data/lib/bloom_remit_client/responses/senders/create.rb +21 -0
  31. data/lib/bloom_remit_client/version.rb +1 -1
  32. data/lib/bloom_remit_client.rb +40 -13
  33. metadata +39 -10
  34. data/lib/bloom_remit_client/requests/base_request.rb +0 -29
  35. data/lib/bloom_remit_client/requests/billers_request.rb +0 -17
  36. data/lib/bloom_remit_client/requests/create_payment_request.rb +0 -30
  37. data/lib/bloom_remit_client/requests/create_sender_request.rb +0 -23
  38. data/lib/bloom_remit_client/responses/base_response.rb +0 -29
  39. data/lib/bloom_remit_client/responses/billers_response.rb +0 -13
  40. data/lib/bloom_remit_client/responses/create_payment_response.rb +0 -13
  41. data/lib/bloom_remit_client/responses/create_sender_response.rb +0 -17
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b495a3723c43ccd6610bdb0ae206f2297e699418
4
- data.tar.gz: 4e12b293dff3d7bee1f544822bfb7651e1768683
3
+ metadata.gz: 7aa72dd929a84719317015b974e91bd7a94cf50c
4
+ data.tar.gz: d46e17cc17b58475aace9fa894dbe77f5f2a1d20
5
5
  SHA512:
6
- metadata.gz: 8bda2caaa2476659fe3045c3e9730071d1dc1bb34ac1f10bbd6cdd1cde528aaa9595115912210ab516742ad1219d4ef16b1b139effc8c89b0a2ad890ab8f5973
7
- data.tar.gz: 2094b42c7637fa67025fb494d1a0c293353ce951f0aef87b35992ee128070b99bf45591de25aa412b02eec749aa479c409a2b56f74249ea0438e798daf750776
6
+ metadata.gz: 198399971aef5c0fd6ce5edd5ecebb8765930e6634af69241802a88bee378ccb2e17e33cdff39d4daedd1c4ab92022c1d73c413a88070359c7425a506cfb52eb
7
+ data.tar.gz: 28e0e4d2492a0b6c1d98eb837c08fcbda124a7d5df36f35d427ad0a84839dd5760131066c4432ee1285c85dedc04d37c623f01225f2cb5f6f0618242f7400595
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby-2.3.0
1
+ ruby-2.3.1
data/.travis.yml CHANGED
@@ -1,5 +1,9 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
- - 2.3.0
5
- before_install: gem install bundler -v 1.12.5
4
+ - 2.3.1
5
+ before_install:
6
+ - gem install bundler -v 1.12.5
7
+ before_script:
8
+ - cp spec/config.yml{.sample,}
9
+ script: bundle exec rspec spec
data/CHANGELOG.md CHANGED
@@ -2,6 +2,14 @@
2
2
  All notable changes to this project will be documented in this file.
3
3
  This project adheres to [Semantic Versioning](http://semver.org/).
4
4
 
5
+ ## [0.5.0] - 2016-09-15
6
+ ### Changed
7
+ - Structure of files to more easily add new endpoints
8
+
9
+ ### Added
10
+ - `rates` endpoint
11
+ - Add method to create remittances
12
+
5
13
  ## [0.4.0] - 2016-09-01
6
14
  ### Added
7
15
  - Made response `#success` a virtus attribute, so that it can be set in factories
data/README.md CHANGED
@@ -1,8 +1,6 @@
1
1
  # BloomRemitClient
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/bloom_remit_client`. To experiment with that code, run `bin/console` for an interactive prompt.
4
-
5
- TODO: Delete this and the text above, and describe your gem
3
+ Ruby wrapper for BloomRemit's API.
6
4
 
7
5
  ## Installation
8
6
 
@@ -22,7 +20,7 @@ Or install it yourself as:
22
20
 
23
21
  ## Usage
24
22
 
25
- TODO: Write usage instructions here
23
+ See `spec/functional` for examples.
26
24
 
27
25
  ## Factories
28
26
 
@@ -36,10 +34,8 @@ To make testing easier, you may `require 'bloom_remit_client/factories'` in your
36
34
 
37
35
  ## Contributing
38
36
 
39
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/bloom_remit_client. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
40
-
37
+ Bug reports and pull requests are welcome on GitHub at https://github.com/imacchiato/bloom_remit_client. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
41
38
 
42
39
  ## License
43
40
 
44
41
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
45
-
@@ -29,6 +29,7 @@ Gem::Specification.new do |spec|
29
29
  spec.add_dependency "activemodel"
30
30
  spec.add_dependency "activesupport"
31
31
  spec.add_dependency "httparty"
32
+ spec.add_dependency "addressable"
32
33
 
33
34
  spec.add_development_dependency "bundler", "~> 1.12"
34
35
  spec.add_development_dependency "rake", "~> 10.0"
@@ -1,40 +1,96 @@
1
+ # frozen_string_literal: true
1
2
  module BloomRemitClient
2
3
  class Client
3
-
4
4
  include Virtus.model
5
- attribute :token, String
6
- attribute :secret, String
5
+ include ActiveModel::Validations
6
+
7
+ attribute :api_token, String
8
+ attribute :api_secret, String
7
9
  attribute :agent_id, String
8
- attribute :url, String
9
10
 
10
- include ActiveModel::Validations
11
- validates :token, :secret, :agent_id, :url, presence: true
11
+ validates :api_token, :api_secret, presence: true
12
+
13
+ # GET
14
+ # /api/v1/partners/:api_token/credits
15
+ # Parameters: none
16
+ def credits(params = {})
17
+ request_params = params.merge(access_params)
18
+ Requests::Credit::List.new(request_params).()
19
+ end
20
+
21
+ # GET
22
+ # /api/v1/partners/:api_token/credits/history
23
+ # Parameters: none
24
+ def credits_history(params = {})
25
+ request_params = params.merge(access_params)
26
+ Requests::Credit::History.new(request_params).()
27
+ end
12
28
 
13
- def billers
14
- request = BillersRequest.new(default_opts)
15
- raw_response = request.()
16
- BillersResponse.new(raw_response: raw_response)
29
+ # GET
30
+ # /api/v1/rates
31
+ # Parameters:
32
+ # partner_id:
33
+ # String, required
34
+ # API token
35
+ # api_secret:
36
+ # String, required
37
+ # currency:
38
+ # One of: [USDPHP, USDUSD, USDKRW, USDAUD, USDCAD, USDJPY, USDNZD, USDSGD, USDHKD,
39
+ # USDCNY, USDEUR, USDVND, USDSAR, USDTWD, USDQAR, USDKWD, USDAED, USDGBP,
40
+ # USDMYR, USDINR, USDIDR, USDBTC],
41
+ # optional
42
+ def rates(params = {})
43
+ request_params = params.merge(access_params)
44
+ Requests::Rate::Show.new(request_params).()
17
45
  end
18
46
 
19
- def create_sender(opts)
20
- request = CreateSenderRequest.new(default_opts.merge(sender: opts))
21
- raw_response = request.()
22
- CreateSenderResponse.new(raw_response: raw_response)
47
+ def billers(params={})
48
+ request_params = params.merge(access_params)
49
+ raw_response = Requests::Billers::List.new(request_params).()
50
+ Responses::Billers::List.new(raw_response: raw_response)
23
51
  end
24
52
 
25
- def create_payment(opts)
26
- params = default_opts.
27
- merge(sender_id: opts.delete(:sender_id)).
28
- merge(payment: opts)
29
- request = CreatePaymentRequest.new(params)
30
- CreatePaymentResponse.new(raw_response: request.())
53
+ def create_sender(sender_params={})
54
+ params = {sender: sender_params}
55
+ request_params = params.merge(default_params).merge(access_params)
56
+ raw_response = Requests::Senders::Create.new(request_params).()
57
+ Responses::Senders::Create.new(raw_response: raw_response)
58
+ end
59
+
60
+ def create_payment(payment_params={})
61
+ params = {payment: payment_params}.
62
+ merge(sender_id: payment_params[:sender_id])
63
+ request_params = params.merge(default_params).merge(access_params)
64
+ raw_response = Requests::Payments::Create.new(request_params).()
65
+ Responses::Payments::Create.new(raw_response: raw_response)
66
+ end
67
+
68
+ def create_recipient(recipient_params={})
69
+ params = {recipient: recipient_params}.
70
+ merge(sender_id: recipient_params[:sender_id])
71
+ request_params = params.merge(default_params).merge(access_params)
72
+ raw_response = Requests::Recipients::Create.new(request_params).()
73
+ Responses::Recipients::Create.new(raw_response: raw_response)
74
+ end
75
+
76
+ def create_remittance(remittance_params={})
77
+ params = {remittance: remittance_params}.
78
+ merge(sender_id: remittance_params[:sender_id]).
79
+ merge(recipient_id: remittance_params[:recipient_id])
80
+ request_params = params.merge(default_params).merge(access_params)
81
+ raw_response = Requests::Remittances::Create.new(request_params).()
82
+ Responses::Remittances::Create.new(raw_response: raw_response)
31
83
  end
32
84
 
33
85
  private
34
86
 
35
- def default_opts
36
- attributes.slice(:token, :secret, :url, :agent_id)
87
+ # Should overwrite any other `:api_token`, `:api_secret`
88
+ def access_params
89
+ @access_params ||= attributes.slice(:api_token, :api_secret)
37
90
  end
38
91
 
92
+ def default_params
93
+ @default_params ||= attributes.slice(:agent_id)
94
+ end
39
95
  end
40
96
  end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+ module BloomRemitClient
3
+ module Coercers
4
+ class Path < Virtus::Attribute
5
+ def coerce(value)
6
+ return value if !value.is_a?(String) || value[0] == '/'
7
+ "/#{value}"
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+ module BloomRemitClient
3
+ module Concerns
4
+ module HasBaseAuthentification
5
+ def self.included(base)
6
+ base.class_eval do
7
+ attribute :api_token, String
8
+ attribute :api_secret, String
9
+
10
+ validates :api_token, :api_secret, presence: true
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+ module BloomRemitClient
3
+ class Credit
4
+ PATH = '/api/v1/partners/:api_token/credits'
5
+ include Virtus.model
6
+ include ActiveModel::Validations
7
+
8
+ def call
9
+ to_h
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,17 @@
1
+ module BloomRemitClient
2
+ class Recipient
3
+
4
+ include Virtus.model
5
+ attribute :id, String
6
+ attribute :first_name, String
7
+ attribute :last_name, String
8
+ attribute :mobile, String
9
+ attribute :email, String
10
+ attribute :address, String
11
+ attribute :city, String
12
+ attribute :state, String
13
+ attribute :country, String
14
+ attribute :postal_code, String
15
+
16
+ end
17
+ end
@@ -0,0 +1,22 @@
1
+ module BloomRemitClient
2
+ class Remittance
3
+
4
+ include Virtus.model
5
+ attribute :id, String
6
+ attribute :recipient_id, String
7
+ attribute :orig_currency, String
8
+ attribute :dest_currency, String
9
+ attribute :paid_in_orig_currency, Float
10
+ attribute :receivable_in_dest_currency, Float
11
+ attribute :status, String
12
+ attribute :payout_method, String
13
+ attribute :partner_id, String
14
+ attribute :flat_fee_in_orig_currency, Float
15
+ attribute :forex_margin, Float
16
+ attribute :account_name, String
17
+ attribute :account_number, String
18
+ attribute :callback_url, String
19
+ attribute :sender_id, String
20
+
21
+ end
22
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+ module BloomRemitClient
3
+ module Requests
4
+ class Base
5
+ include Virtus.model
6
+ include ActiveModel::Validations
7
+ include Concerns::HasBaseAuthentification
8
+
9
+ def call
10
+ RequestsSender.new(params).()
11
+ end
12
+
13
+ def params
14
+ {
15
+ type: type,
16
+ body: body,
17
+ url: {
18
+ host: ::BloomRemitClient.host,
19
+ path: path,
20
+ query_params: query_params
21
+ }
22
+ }
23
+ end
24
+
25
+ private
26
+
27
+ def type
28
+ raise NotImplementedError, 'For subclass only!'
29
+ end
30
+
31
+ def path
32
+ raise NotImplementedError, 'For subclass only!'
33
+ end
34
+
35
+ def body
36
+ return unless body_params.present?
37
+ body_params.to_json
38
+ end
39
+
40
+ def body_params
41
+ {}
42
+ end
43
+
44
+ def query_params
45
+ attributes.slice(:api_secret)
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,21 @@
1
+ module BloomRemitClient
2
+ module Requests
3
+ module Billers
4
+ class List < Base
5
+
6
+ PATH = "/api/v2/billers.json"
7
+
8
+ private
9
+
10
+ def type
11
+ Requests::GET
12
+ end
13
+
14
+ def path
15
+ PATH
16
+ end
17
+
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+ module BloomRemitClient
3
+ module Requests
4
+ module Credit
5
+ class History < Requests::Base
6
+ private
7
+
8
+ def type
9
+ Requests::GET
10
+ end
11
+
12
+ def path
13
+ Requests.normalize_path(::BloomRemitClient::Credit::PATH, attributes.slice(:api_token), 'history')
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+ module BloomRemitClient
3
+ module Requests
4
+ module Credit
5
+ class List < Requests::Base
6
+ private
7
+
8
+ def type
9
+ Requests::GET
10
+ end
11
+
12
+ def path
13
+ Requests.normalize_path(::BloomRemitClient::Credit::PATH, attributes.slice(:api_token))
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,29 @@
1
+ module BloomRemitClient
2
+ module Requests
3
+ module Payments
4
+ class Create < Base
5
+
6
+ PATH = "/api/v2/payments.json"
7
+
8
+ attribute :payment, Hash
9
+ attribute :sender_id, String
10
+ attribute :agent_id, String
11
+
12
+ private
13
+
14
+ def path
15
+ PATH
16
+ end
17
+
18
+ def type
19
+ POST
20
+ end
21
+
22
+ def body_params
23
+ attributes.slice(*%i[api_token agent_id sender_id payment])
24
+ end
25
+
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+ module BloomRemitClient
3
+ module Requests
4
+ module Rate
5
+ class Show < Requests::Base
6
+ PATH = '/api/v1/rates'
7
+
8
+ attribute :currency, String
9
+
10
+ private
11
+
12
+ def type
13
+ Requests::GET
14
+ end
15
+
16
+ def path
17
+ PATH
18
+ end
19
+
20
+ def query_params
21
+ attributes.slice(:api_secret, :currency).merge(partner_id: api_token)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,30 @@
1
+ module BloomRemitClient
2
+ module Requests
3
+ module Recipients
4
+ class Create < Base
5
+
6
+ PATH = "/api/v1/partners/:api_token/senders/:sender_id/recipients.json"
7
+
8
+ attribute :recipient, Hash
9
+ attribute :agent_id, String
10
+ attribute :sender_id, String
11
+
12
+ private
13
+
14
+ def path
15
+ PATH.gsub(":api_token", self.api_token).
16
+ gsub(":sender_id", self.sender_id)
17
+ end
18
+
19
+ def type
20
+ POST
21
+ end
22
+
23
+ def body_params
24
+ attributes.slice(*%i[agent_id recipient])
25
+ end
26
+
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,30 @@
1
+ module BloomRemitClient
2
+ module Requests
3
+ module Remittances
4
+ class Create < Base
5
+
6
+ PATH = "/api/v1//partners/:api_token/senders/:sender_id/remittances.json"
7
+
8
+ attribute :remittance, Hash
9
+ attribute :sender_id, String
10
+ attribute :recipient_id, String
11
+
12
+ private
13
+
14
+ def path
15
+ PATH.gsub(":api_token", self.api_token).
16
+ gsub(":sender_id", self.sender_id)
17
+ end
18
+
19
+ def type
20
+ POST
21
+ end
22
+
23
+ def body_params
24
+ attributes.slice(*%i[recipient_id remittance])
25
+ end
26
+
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+ module BloomRemitClient
3
+ module Requests
4
+ class RequestsSender
5
+ include Virtus.model
6
+ include ActiveModel::Validations
7
+
8
+ attribute :type, String
9
+ attribute :body, String
10
+ attribute :headers, Hash, lazy: true, default: ->(object, attribute) { RequestsSender.default_headers }
11
+ attribute :url, Requests::UrlBuilder
12
+
13
+ validates :type, presence: true, inclusion: Requests::REQUEST_TYPES
14
+
15
+ def self.default_headers
16
+ @default_headers ||= {
17
+ 'Content-Type' => Requests::CONTENT_TYPE_JSON_UTF8,
18
+ 'Accept' => Requests::CONTENT_TYPE_JSON
19
+ }
20
+ end
21
+
22
+ def call
23
+ HTTParty.send(type, url.(), body: body, headers: headers)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,27 @@
1
+ module BloomRemitClient
2
+ module Requests
3
+ module Senders
4
+ class Create < Base
5
+
6
+ PATH = "/api/v1/partners/:token/senders.json"
7
+
8
+ attribute :sender, Hash
9
+
10
+ private
11
+
12
+ def path
13
+ PATH.gsub(":token", self.api_token)
14
+ end
15
+
16
+ def type
17
+ POST
18
+ end
19
+
20
+ def body_params
21
+ { sender: sender }
22
+ end
23
+
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+ module BloomRemitClient
3
+ module Requests
4
+ class UrlBuilder
5
+ require 'addressable/uri'
6
+ include Virtus.model
7
+ include ActiveModel::Validations
8
+
9
+ attribute :scheme, String, default: 'https'
10
+ attribute :subdomain, String
11
+ attribute :userinfo, String
12
+ attribute :path, Coercers::Path
13
+ attribute :host, String
14
+ attribute :port, Integer
15
+ attribute :query, String
16
+ attribute :query_params, Hash, default: {}
17
+ attribute :fragment, String
18
+
19
+ validates :path, :host, :scheme, presence: true
20
+ validates :scheme, inclusion: ['https', 'http']
21
+
22
+ def call
23
+ builder.build(to_h).to_s
24
+ end
25
+
26
+ def host
27
+ return super unless subdomain.present?
28
+ "#{subdomain}.#{super}"
29
+ end
30
+
31
+ def query
32
+ super || build_query
33
+ end
34
+
35
+ private
36
+
37
+ def builder
38
+ case scheme
39
+ when 'http'
40
+ URI::HTTP
41
+ when 'https'
42
+ URI::HTTPS
43
+ end
44
+ end
45
+
46
+ def build_query
47
+ Addressable::URI.new(query_values: query_params).query
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+ module BloomRemitClient
3
+ module Requests
4
+ PATH_PARAM_REGEX = /\:[^\/|\?|\#|$]*/
5
+ GET = 'get'
6
+ POST = 'post'
7
+ PUT = 'put'
8
+ DELETE = 'delete'
9
+ REQUEST_TYPES = [GET, POST, PUT, DELETE].freeze
10
+ CONTENT_TYPE_JSON_UTF8 = 'application/json;charset=UTF-8'
11
+ CONTENT_TYPE_JSON = 'application/json'
12
+
13
+ def self.normalize_path(path, params, postfix = nil)
14
+ normalized_path = path.gsub(PATH_PARAM_REGEX) { |e| params[e.delete(':').to_sym] }
15
+ postfix ? "#{normalized_path}/#{postfix}" : normalized_path
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,31 @@
1
+ module BloomRemitClient
2
+ module Responses
3
+ class Base
4
+
5
+ include Virtus.model
6
+ attribute :raw_response, Object
7
+ attribute(:body, Coercers::IndifferentHash, {
8
+ lazy: true,
9
+ default: :default_body,
10
+ })
11
+ attribute :success, Boolean, lazy: true, default: :default_success
12
+
13
+ private
14
+
15
+ def default_success
16
+ raw_response.success?
17
+ end
18
+
19
+ def default_body
20
+ json = JSON.parse(raw_response.body)
21
+
22
+ if json.is_a?(Array)
23
+ json.map(&:with_indifferent_access)
24
+ else
25
+ json.with_indifferent_access
26
+ end
27
+ end
28
+
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,17 @@
1
+ module BloomRemitClient
2
+ module Responses
3
+ module Billers
4
+ class List < Base
5
+
6
+ attribute :billers, Array, lazy: true, default: :default_billers
7
+
8
+ private
9
+
10
+ def default_billers
11
+ body.map { |hash| Biller.new(hash) }
12
+ end
13
+
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module BloomRemitClient
2
+ module Responses
3
+ module Payments
4
+ class Create < Base
5
+
6
+ attribute :payment, Object, lazy: true, default: :default_payment
7
+
8
+ private
9
+
10
+ def default_payment
11
+ Payment.new(body[:payment])
12
+ end
13
+
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,20 @@
1
+ module BloomRemitClient
2
+ module Responses
3
+ module Recipients
4
+ class Create < Base
5
+
6
+ attribute(:recipient, Object, {
7
+ lazy: true,
8
+ default: :default_recipient,
9
+ })
10
+
11
+ private
12
+
13
+ def default_recipient
14
+ Recipient.new(body[:recipient])
15
+ end
16
+
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ module BloomRemitClient
2
+ module Responses
3
+ module Remittances
4
+ class Create < Base
5
+
6
+ attribute(:remittance, Object, {
7
+ lazy: true,
8
+ default: :default_remittance,
9
+ })
10
+
11
+ private
12
+
13
+ def default_remittance
14
+ Remittance.new(body[:remittance])
15
+ end
16
+
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,21 @@
1
+ module BloomRemitClient
2
+ module Responses
3
+ module Senders
4
+ class Create < Base
5
+
6
+ attribute :sender, Object, lazy: true, default: :default_sender
7
+
8
+ def success?
9
+ raw_response.success?
10
+ end
11
+
12
+ private
13
+
14
+ def default_sender
15
+ User.new(body[:sender])
16
+ end
17
+
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,3 +1,3 @@
1
1
  module BloomRemitClient
2
- VERSION = "0.4.0"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -1,29 +1,56 @@
1
+ # frozen_string_literal: true
1
2
  require 'virtus'
2
3
  require 'httparty'
3
4
  require 'active_model'
4
5
  require 'active_support/core_ext/hash/indifferent_access'
5
6
  require 'active_support/core_ext/object/try'
6
7
  require 'bloom_remit_client/coercers/indifferent_hash'
8
+ require 'bloom_remit_client/coercers/path'
9
+ require 'bloom_remit_client/concerns/has_base_authentification'
7
10
  require "bloom_remit_client/version"
8
11
  require "bloom_remit_client/client"
9
12
  require "bloom_remit_client/models/biller"
10
13
  require "bloom_remit_client/models/user"
11
14
  require "bloom_remit_client/models/payment"
12
- require "bloom_remit_client/requests/base_request"
13
- require "bloom_remit_client/requests/billers_request"
14
- require "bloom_remit_client/requests/create_sender_request"
15
- require "bloom_remit_client/requests/create_payment_request"
16
- require "bloom_remit_client/responses/base_response"
17
- require "bloom_remit_client/responses/billers_response"
18
- require "bloom_remit_client/responses/create_sender_response"
19
- require "bloom_remit_client/responses/create_payment_response"
15
+ require "bloom_remit_client/models/remittance"
16
+ require "bloom_remit_client/models/credit"
17
+ require "bloom_remit_client/models/recipient"
18
+ require "bloom_remit_client/requests"
19
+ require "bloom_remit_client/requests/url_builder"
20
+ require "bloom_remit_client/requests/requests_sender"
21
+ require "bloom_remit_client/requests/base"
22
+ require "bloom_remit_client/requests/credit/list"
23
+ require "bloom_remit_client/requests/credit/history"
24
+ require "bloom_remit_client/requests/rate/show"
25
+ require "bloom_remit_client/requests/billers/list"
26
+ require "bloom_remit_client/requests/senders/create"
27
+ require "bloom_remit_client/requests/payments/create"
28
+ require "bloom_remit_client/requests/remittances/create"
29
+ require "bloom_remit_client/requests/recipients/create"
30
+ require "bloom_remit_client/responses/base"
31
+ require "bloom_remit_client/responses/billers/list"
32
+ require "bloom_remit_client/responses/senders/create"
33
+ require "bloom_remit_client/responses/payments/create"
34
+ require "bloom_remit_client/responses/remittances/create"
35
+ require "bloom_remit_client/responses/recipients/create"
20
36
 
21
37
  module BloomRemitClient
38
+ PRODUCTION = 'api.bloom.solutions'
39
+ STAGING = 'bloomremit-staging.herokuapp.com'
22
40
 
23
- def self.new(*args)
24
- client = Client.new(*args)
25
- raise ArgumentError, client.errors.full_messages if client.invalid?
26
- client
27
- end
41
+ class << self
42
+ attr_accessor :sandbox
43
+ attr_writer :host
44
+
45
+ def new(*args)
46
+ client = Client.new(*args)
47
+ raise ArgumentError, client.errors.full_messages if client.invalid?
48
+ client
49
+ end
28
50
 
51
+ def host
52
+ return @host if @host
53
+ sandbox ? STAGING : PRODUCTION
54
+ end
55
+ end
29
56
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bloom_remit_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ramon Tayag
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-09-01 00:00:00.000000000 Z
11
+ date: 2016-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: addressable
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: bundler
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -175,18 +189,33 @@ files:
175
189
  - lib/bloom_remit_client.rb
176
190
  - lib/bloom_remit_client/client.rb
177
191
  - lib/bloom_remit_client/coercers/indifferent_hash.rb
192
+ - lib/bloom_remit_client/coercers/path.rb
193
+ - lib/bloom_remit_client/concerns/has_base_authentification.rb
178
194
  - lib/bloom_remit_client/factories.rb
179
195
  - lib/bloom_remit_client/models/biller.rb
196
+ - lib/bloom_remit_client/models/credit.rb
180
197
  - lib/bloom_remit_client/models/payment.rb
198
+ - lib/bloom_remit_client/models/recipient.rb
199
+ - lib/bloom_remit_client/models/remittance.rb
181
200
  - lib/bloom_remit_client/models/user.rb
182
- - lib/bloom_remit_client/requests/base_request.rb
183
- - lib/bloom_remit_client/requests/billers_request.rb
184
- - lib/bloom_remit_client/requests/create_payment_request.rb
185
- - lib/bloom_remit_client/requests/create_sender_request.rb
186
- - lib/bloom_remit_client/responses/base_response.rb
187
- - lib/bloom_remit_client/responses/billers_response.rb
188
- - lib/bloom_remit_client/responses/create_payment_response.rb
189
- - lib/bloom_remit_client/responses/create_sender_response.rb
201
+ - lib/bloom_remit_client/requests.rb
202
+ - lib/bloom_remit_client/requests/base.rb
203
+ - lib/bloom_remit_client/requests/billers/list.rb
204
+ - lib/bloom_remit_client/requests/credit/history.rb
205
+ - lib/bloom_remit_client/requests/credit/list.rb
206
+ - lib/bloom_remit_client/requests/payments/create.rb
207
+ - lib/bloom_remit_client/requests/rate/show.rb
208
+ - lib/bloom_remit_client/requests/recipients/create.rb
209
+ - lib/bloom_remit_client/requests/remittances/create.rb
210
+ - lib/bloom_remit_client/requests/requests_sender.rb
211
+ - lib/bloom_remit_client/requests/senders/create.rb
212
+ - lib/bloom_remit_client/requests/url_builder.rb
213
+ - lib/bloom_remit_client/responses/base.rb
214
+ - lib/bloom_remit_client/responses/billers/list.rb
215
+ - lib/bloom_remit_client/responses/payments/create.rb
216
+ - lib/bloom_remit_client/responses/recipients/create.rb
217
+ - lib/bloom_remit_client/responses/remittances/create.rb
218
+ - lib/bloom_remit_client/responses/senders/create.rb
190
219
  - lib/bloom_remit_client/version.rb
191
220
  homepage: https://github.com/imacchiato/bloom_remit_client-ruby
192
221
  licenses:
@@ -1,29 +0,0 @@
1
- module BloomRemitClient
2
- class BaseRequest
3
-
4
- include Virtus.model
5
- attribute :token, String
6
- attribute :secret, String
7
- attribute :url, String
8
- attribute :agent_id, String
9
- attribute :path, String, lazy: true, default: :default_path
10
- attribute :endpoint, String, lazy: true, default: :default_endpoint
11
-
12
- include ActiveModel::Validations
13
- validates :token, :secret, :url, :path, presence: true
14
-
15
- def call
16
- HTTParty.get(self.endpoint)
17
- end
18
-
19
- private
20
-
21
- def default_endpoint
22
- return nil if self.url.nil?
23
- uri = URI.parse(self.url)
24
- uri.path = path
25
- uri.to_s
26
- end
27
-
28
- end
29
- end
@@ -1,17 +0,0 @@
1
- module BloomRemitClient
2
- class BillersRequest < BaseRequest
3
-
4
- PATH = "/api/v2/billers.json"
5
-
6
- def call
7
- HTTParty.get(self.endpoint)
8
- end
9
-
10
- private
11
-
12
- def default_path
13
- PATH
14
- end
15
-
16
- end
17
- end
@@ -1,30 +0,0 @@
1
- module BloomRemitClient
2
- class CreatePaymentRequest < BaseRequest
3
-
4
- PATH = "/api/v2/payments.json"
5
-
6
- attribute :payment, Hash
7
- attribute :sender_id, String
8
-
9
- def call
10
- HTTParty.post(self.endpoint, body: params)
11
- end
12
-
13
- private
14
-
15
- def default_path
16
- PATH
17
- end
18
-
19
- def params
20
- {
21
- api_token: token,
22
- api_secret: secret,
23
- agent_id: agent_id,
24
- sender_id: sender_id,
25
- payment: payment,
26
- }
27
- end
28
-
29
- end
30
- end
@@ -1,23 +0,0 @@
1
- module BloomRemitClient
2
- class CreateSenderRequest < BaseRequest
3
-
4
- PATH = "/api/v1/partners/:token/senders.json"
5
-
6
- attribute :sender, Hash
7
-
8
- def call
9
- HTTParty.post(self.endpoint, body: params)
10
- end
11
-
12
- private
13
-
14
- def default_path
15
- PATH.gsub(":token", self.token)
16
- end
17
-
18
- def params
19
- { api_secret: secret, sender: sender }
20
- end
21
-
22
- end
23
- end
@@ -1,29 +0,0 @@
1
- module BloomRemitClient
2
- class BaseResponse
3
-
4
- include Virtus.model
5
- attribute :raw_response, Object
6
- attribute(:body, Coercers::IndifferentHash, {
7
- lazy: true,
8
- default: :default_body,
9
- })
10
- attribute :success, Boolean, lazy: true, default: :default_success
11
-
12
- private
13
-
14
- def default_success
15
- raw_response.success?
16
- end
17
-
18
- def default_body
19
- json = JSON.parse(raw_response.body)
20
-
21
- if json.is_a?(Array)
22
- json.map(&:with_indifferent_access)
23
- else
24
- json.with_indifferent_access
25
- end
26
- end
27
-
28
- end
29
- end
@@ -1,13 +0,0 @@
1
- module BloomRemitClient
2
- class BillersResponse < BaseResponse
3
-
4
- attribute :billers, Array, lazy: true, default: :default_billers
5
-
6
- private
7
-
8
- def default_billers
9
- body.map { |hash| Biller.new(hash) }
10
- end
11
-
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- module BloomRemitClient
2
- class CreatePaymentResponse < BaseResponse
3
-
4
- attribute :payment, Object, lazy: true, default: :default_payment
5
-
6
- private
7
-
8
- def default_payment
9
- Payment.new(body[:payment])
10
- end
11
-
12
- end
13
- end
@@ -1,17 +0,0 @@
1
- module BloomRemitClient
2
- class CreateSenderResponse < BaseResponse
3
-
4
- attribute :sender, Object, lazy: true, default: :default_sender
5
-
6
- def success?
7
- raw_response.success?
8
- end
9
-
10
- private
11
-
12
- def default_sender
13
- User.new(body[:sender])
14
- end
15
-
16
- end
17
- end