tylerhunt-remit 0.0.1 → 0.0.4

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 (48) hide show
  1. data/LICENSE +1 -1
  2. data/README.markdown +91 -0
  3. data/lib/remit.rb +51 -41
  4. data/lib/remit/common.rb +16 -16
  5. data/lib/remit/data_types.rb +59 -2
  6. data/lib/remit/error_codes.rb +118 -0
  7. data/lib/remit/get_pipeline.rb +65 -7
  8. data/lib/remit/ipn_request.rb +49 -0
  9. data/lib/remit/{cancel_token.rb → operations/cancel_token.rb} +1 -1
  10. data/lib/remit/{discard_results.rb → operations/discard_results.rb} +1 -1
  11. data/lib/remit/{fund_prepaid.rb → operations/fund_prepaid.rb} +6 -6
  12. data/lib/remit/{get_account_activity.rb → operations/get_account_activity.rb} +1 -1
  13. data/lib/remit/{get_account_balance.rb → operations/get_account_balance.rb} +0 -0
  14. data/lib/remit/{get_all_credit_instruments.rb → operations/get_all_credit_instruments.rb} +0 -0
  15. data/lib/remit/{get_all_prepaid_instruments.rb → operations/get_all_prepaid_instruments.rb} +0 -0
  16. data/lib/remit/{get_debt_balance.rb → operations/get_debt_balance.rb} +1 -1
  17. data/lib/remit/{get_outstanding_debt_balance.rb → operations/get_outstanding_debt_balance.rb} +0 -0
  18. data/lib/remit/{get_payment_instruction.rb → operations/get_payment_instruction.rb} +1 -1
  19. data/lib/remit/{get_prepaid_balance.rb → operations/get_prepaid_balance.rb} +1 -1
  20. data/lib/remit/{get_results.rb → operations/get_results.rb} +4 -3
  21. data/lib/remit/{get_token_by_caller.rb → operations/get_token_by_caller.rb} +0 -0
  22. data/lib/remit/{get_token_usage.rb → operations/get_token_usage.rb} +1 -1
  23. data/lib/remit/{get_tokens.rb → operations/get_tokens.rb} +0 -0
  24. data/lib/remit/{get_total_prepaid_liability.rb → operations/get_total_prepaid_liability.rb} +0 -0
  25. data/lib/remit/{get_transaction.rb → operations/get_transaction.rb} +1 -1
  26. data/lib/remit/{install_payment_instruction.rb → operations/install_payment_instruction.rb} +3 -3
  27. data/lib/remit/operations/pay.rb +35 -0
  28. data/lib/remit/{refund.rb → operations/refund.rb} +6 -8
  29. data/lib/remit/{reserve.rb → operations/reserve.rb} +6 -6
  30. data/lib/remit/{retry_transaction.rb → operations/retry_transaction.rb} +1 -1
  31. data/lib/remit/{settle.rb → operations/settle.rb} +2 -2
  32. data/lib/remit/{settle_debt.rb → operations/settle_debt.rb} +6 -6
  33. data/lib/remit/{subscribe_for_caller_notification.rb → operations/subscribe_for_caller_notification.rb} +2 -2
  34. data/lib/remit/{unsubscribe_for_caller_notification.rb → operations/unsubscribe_for_caller_notification.rb} +1 -1
  35. data/lib/remit/{write_off_debt.rb → operations/write_off_debt.rb} +4 -4
  36. data/lib/remit/pipeline_response.rb +52 -0
  37. data/spec/{get_account_activity_spec.rb → integrations/get_account_activity_spec.rb} +4 -4
  38. data/spec/{get_tokens_spec.rb → integrations/get_tokens_spec.rb} +3 -3
  39. data/spec/integrations/integrations_helper.rb +8 -0
  40. data/spec/spec_helper.rb +20 -10
  41. data/spec/{get_pipeline_spec.rb → units/get_pipeline_spec.rb} +83 -24
  42. data/spec/units/get_results_spec.rb +49 -0
  43. data/spec/units/ipn_request_spec.rb +32 -0
  44. data/spec/units/pay_spec.rb +133 -0
  45. data/spec/units/units_helper.rb +4 -0
  46. metadata +49 -45
  47. data/README +0 -38
  48. data/lib/remit/pay.rb +0 -34
@@ -33,12 +33,12 @@ module Remit
33
33
  attr_reader :api
34
34
 
35
35
  parameter :pipeline_name
36
- parameter :return_URL
36
+ parameter :return_url
37
37
  parameter :caller_key
38
+ parameter :version
38
39
 
39
- def initialize(api, pipeline, options)
40
+ def initialize(api, options)
40
41
  @api = api
41
- @pipeline = pipeline
42
42
 
43
43
  options.each do |k,v|
44
44
  self.send("#{k}=", v)
@@ -46,7 +46,7 @@ module Remit
46
46
  end
47
47
 
48
48
  def url
49
- uri = URI.parse(@pipeline)
49
+ uri = URI.parse(@api.pipeline_url)
50
50
 
51
51
  query = {}
52
52
  self.class.parameters.each do |p|
@@ -61,7 +61,7 @@ module Remit
61
61
  # Remove any unused optional parameters
62
62
  query.reject! { |key, value| value.nil? }
63
63
 
64
- uri.query = SignedQuery.new(@api.pipeline, @api.secret_key, query).to_s
64
+ uri.query = SignedQuery.new(@api.pipeline_url, @api.secret_key, query).to_s
65
65
  uri.to_s
66
66
  end
67
67
  end
@@ -72,6 +72,48 @@ module Remit
72
72
  parameter :payment_method
73
73
  parameter :transaction_amount
74
74
  parameter :recipient_token
75
+
76
+ def pipeline_name
77
+ Remit::PipelineName::SINGLE_USE
78
+ end
79
+ end
80
+
81
+ class MultiUsePipeline < Pipeline
82
+ parameter :caller_reference
83
+ parameter :payment_reason
84
+ parameter :recipient_token_list
85
+ parameter :amount_type
86
+ parameter :transaction_amount
87
+ parameter :validity_start
88
+ parameter :validity_expiry
89
+ parameter :payment_method
90
+ parameter :global_amount_limit
91
+ parameter :usage_limit_type_1
92
+ parameter :usage_limit_period_1
93
+ parameter :usage_limit_value_1
94
+ parameter :usage_limit_type_2
95
+ parameter :usage_limit_period_2
96
+ parameter :usage_limit_value_2
97
+ parameter :is_recipient_cobranding
98
+
99
+ def pipeline_name
100
+ Remit::PipelineName::MULTI_USE
101
+ end
102
+ end
103
+
104
+ class RecipientPipeline < Pipeline
105
+ parameter :caller_reference
106
+ parameter :validity_start # Time or seconds from Epoch
107
+ parameter :validity_expiry # Time or seconds from Epoch
108
+ parameter :payment_method
109
+ parameter :recipient_pays_fee
110
+ parameter :caller_reference_refund
111
+ parameter :max_variable_fee
112
+ parameter :max_fixed_fee
113
+
114
+ def pipeline_name
115
+ Remit::PipelineName::RECIPIENT
116
+ end
75
117
  end
76
118
 
77
119
  class RecurringUsePipeline < Pipeline
@@ -82,7 +124,11 @@ module Remit
82
124
  parameter :validity_start # Time or seconds from Epoch
83
125
  parameter :validity_expiry # Time or seconds from Epoch
84
126
  parameter :payment_method
85
- parameter :recurring_period
127
+ parameter :recurring_period
128
+
129
+ def pipeline_name
130
+ Remit::PipelineName::RECURRING
131
+ end
86
132
  end
87
133
 
88
134
  class PostpaidPipeline < Pipeline
@@ -100,11 +146,23 @@ module Remit
100
146
  parameter :usage_limit_type2
101
147
  parameter :usage_limit_period2
102
148
  parameter :usage_limit_value2
149
+
150
+ def pipeline_name
151
+ Remit::PipelineName::SETUP_POSTPAID
152
+ end
103
153
  end
104
154
 
105
155
  def get_single_use_pipeline(options)
106
156
  self.get_pipeline(SingleUsePipeline, options)
107
157
  end
158
+
159
+ def get_multi_use_pipeline(options)
160
+ self.get_pipeline(MultiUsePipeline, options)
161
+ end
162
+
163
+ def get_recipient_pipeline(options)
164
+ self.get_pipeline(RecipientPipeline, options)
165
+ end
108
166
 
109
167
  def get_recurring_use_pipeline(options)
110
168
  self.get_pipeline(RecurringUsePipeline, options)
@@ -115,7 +173,7 @@ module Remit
115
173
  end
116
174
 
117
175
  def get_pipeline(pipeline_subclass, options)
118
- pipeline = pipeline_subclass.new(self, @pipeline, {
176
+ pipeline = pipeline_subclass.new(self, {
119
177
  :caller_key => @access_key
120
178
  }.merge(options))
121
179
  end
@@ -0,0 +1,49 @@
1
+ require 'base64'
2
+ require 'openssl/digest'
3
+
4
+ module Remit
5
+ # Encapsulates the logic for IPN request validation and attribute retrieval.
6
+ #
7
+ # Note: if your responses from Amazon are not validating, please pass the
8
+ # :version parameter to your original CBUI request.
9
+ class IpnRequest
10
+ # Signature key name used by AmazonFPS IPNs
11
+ SIGNATURE_KEY = 'signature'
12
+
13
+ # +params+ should be your controllers request parameters.
14
+ def initialize(params, secret_key)
15
+ raise ArgumentError, "Expected the request params hash, received: #{params.inspect}" unless params.kind_of?(Hash)
16
+ @params = strip_keys_from(params, 'action', 'controller')
17
+ @supplied_signature = @params.delete(SIGNATURE_KEY)
18
+ @secret_key = secret_key
19
+ end
20
+
21
+ def valid?
22
+ return false unless @supplied_signature
23
+ generate_signature_for(@params) == @supplied_signature
24
+ end
25
+
26
+ def method_missing(method, *args) #:nodoc:
27
+ if @params.has_key?(method.to_s)
28
+ @params[method.to_s]
29
+ else
30
+ super(method, *args)
31
+ end
32
+ end
33
+
34
+ def generate_signature_for(params)
35
+ query = params.sort_by { |k,v| k.downcase }
36
+ digest = OpenSSL::Digest::Digest.new('sha1')
37
+ hmac = OpenSSL::HMAC.digest(digest, @secret_key, query.to_s)
38
+ encoded = Base64.encode64(hmac).chomp
39
+ end
40
+ private :generate_signature_for
41
+
42
+ def strip_keys_from(params, *ignore_keys)
43
+ parsed = params.dup
44
+ ignore_keys.each { |key| parsed.delete(key) }
45
+ parsed
46
+ end
47
+ private :strip_keys_from
48
+ end
49
+ end
@@ -4,7 +4,7 @@ module Remit
4
4
  module CancelToken
5
5
  class Request < Remit::Request
6
6
  action :CancelToken
7
- parameter :token_id
7
+ parameter :token_id, :required => true
8
8
  parameter :reason_text
9
9
  end
10
10
 
@@ -4,7 +4,7 @@ module Remit
4
4
  module DiscardResults
5
5
  class Request < Remit::Request
6
6
  action :DiscardResults
7
- parameter :transaction_ids
7
+ parameter :transaction_ids, :required => true
8
8
  end
9
9
 
10
10
  class Response < Remit::Response
@@ -6,17 +6,17 @@ module Remit
6
6
  action :FundPrepaid
7
7
  parameter :transaction_ids
8
8
  parameter :caller_description
9
- parameter :caller_reference
10
- parameter :caller_token_id
11
- parameter :charge_fee_to
12
- parameter :funding_amount
9
+ parameter :caller_reference, :required => true
10
+ parameter :caller_token_id, :required => true
11
+ parameter :charge_fee_to, :required => true
12
+ parameter :funding_amount, :type => Remit::RequestTypes::Amount, :required => true
13
13
  parameter :meta_data
14
- parameter :prepaid_instrument_id
14
+ parameter :prepaid_instrument_id, :required => true
15
15
  parameter :recipient_description
16
16
  parameter :recipient_reference
17
17
  parameter :sender_description
18
18
  parameter :sender_reference
19
- parameter :sender_token_id
19
+ parameter :sender_token_id, :required => true
20
20
  parameter :transaction_date
21
21
  end
22
22
 
@@ -4,7 +4,7 @@ module Remit
4
4
  module GetAccountActivity
5
5
  class Request < Remit::Request
6
6
  action :GetAccountActivity
7
- parameter :start_date
7
+ parameter :start_date, :required => true
8
8
  parameter :end_date
9
9
  parameter :max_batch_size
10
10
  parameter :sort_order_by_date
@@ -4,7 +4,7 @@ module Remit
4
4
  module GetDebtBalance
5
5
  class Request < Remit::Request
6
6
  action :GetDebtBalance
7
- parameter :credit_instrument_id
7
+ parameter :credit_instrument_id, :required => true
8
8
  end
9
9
 
10
10
  class Response < Remit::Response
@@ -4,7 +4,7 @@ module Remit
4
4
  module GetPaymentInstruction
5
5
  class Request < Remit::Request
6
6
  action :GetPaymentInstruction
7
- parameter :token_id
7
+ parameter :token_id, :required => true
8
8
  end
9
9
 
10
10
  class Response < Remit::Response
@@ -4,7 +4,7 @@ module Remit
4
4
  module GetPrepaidBalance
5
5
  class Request < Remit::Request
6
6
  action :GetPrepaidBalance
7
- parameter :prepaid_instrument_id
7
+ parameter :prepaid_instrument_id, :required => true
8
8
  end
9
9
 
10
10
  class Response < Remit::Response
@@ -11,12 +11,13 @@ module Remit
11
11
  class Response < Remit::Response
12
12
  class TransactionResults < Remit::BaseResponse
13
13
  parameter :transaction_id
14
- parameter :operation_type
14
+ parameter :operation_type, :element => :operation
15
15
  parameter :caller_reference
16
- parameter :transaction_status
16
+ parameter :transaction_status, :element => :status
17
17
  end
18
18
 
19
- parameter :transaction_results, :type => TransactionResults
19
+ parameter :transaction_results, :collection => TransactionResults
20
+ parameter :number_pending, :type => :integer
20
21
  end
21
22
 
22
23
  def get_results(request = Request.new)
@@ -4,7 +4,7 @@ module Remit
4
4
  module GetTokenUsage
5
5
  class Request < Remit::Request
6
6
  action :GetTokenUsage
7
- parameter :token_id
7
+ parameter :token_id, :required => true
8
8
  end
9
9
 
10
10
  class Response < Remit::Response
@@ -4,7 +4,7 @@ module Remit
4
4
  module GetTransaction
5
5
  class Request < Remit::Request
6
6
  action :GetTransaction
7
- parameter :transaction_id
7
+ parameter :transaction_id, :required => true
8
8
  end
9
9
 
10
10
  class Response < Remit::Response
@@ -4,10 +4,10 @@ module Remit
4
4
  module InstallPaymentInstruction
5
5
  class Request < Remit::Request
6
6
  action :InstallPaymentInstruction
7
- parameter :payment_instruction
8
- parameter :caller_reference
7
+ parameter :payment_instruction, :required => true
8
+ parameter :caller_reference, :required => true
9
9
  parameter :token_friendly_name
10
- parameter :token_type
10
+ parameter :token_type, :required => true
11
11
  parameter :payment_reason
12
12
  end
13
13
 
@@ -0,0 +1,35 @@
1
+ require 'remit/common'
2
+
3
+ module Remit
4
+ module Pay
5
+ class Request < Remit::Request
6
+ action :Pay
7
+ parameter :caller_description
8
+ parameter :caller_reference, :required => true
9
+ parameter :caller_token_id, :required => true
10
+ parameter :charge_fee_to, :required => true
11
+ parameter :descriptor_policy, :type => Remit::RequestTypes::DescriptorPolicy
12
+ parameter :marketplace_fixed_fee, :type => Remit::RequestTypes::Amount
13
+ parameter :marketplace_variable_fee
14
+ parameter :meta_data
15
+ parameter :recipient_description
16
+ parameter :recipient_reference
17
+ parameter :recipient_token_id, :required => true
18
+ parameter :sender_description
19
+ parameter :sender_reference
20
+ parameter :sender_token_id, :required => true
21
+ parameter :temporary_decline_policy, :type => Remit::RequestTypes::TemporaryDeclinePolicy
22
+ parameter :transaction_amount, :type => Remit::RequestTypes::Amount, :required => true
23
+ parameter :transaction_date
24
+ end
25
+
26
+ class Response < Remit::Response
27
+ parser :rexml
28
+ parameter :transaction_response, :namespace => 'ns3', :type => TransactionResponse
29
+ end
30
+
31
+ def pay(request = Request.new)
32
+ call(request, Response)
33
+ end
34
+ end
35
+ end
@@ -5,26 +5,24 @@ module Remit
5
5
  class Request < Remit::Request
6
6
  action :Refund
7
7
  parameter :caller_description
8
- parameter :caller_reference
9
- parameter :caller_token_id
10
- parameter :charge_fee_to
8
+ parameter :caller_reference, :required => true
9
+ parameter :caller_token_id, :required => true
10
+ parameter :charge_fee_to, :required => true
11
11
  parameter :meta_data
12
12
  parameter :refund_amount, :type => Remit::RequestTypes::Amount
13
13
  parameter :refund_recipient_description
14
14
  parameter :refund_recipient_reference
15
15
  parameter :refund_sender_description
16
16
  parameter :refund_sender_reference
17
- parameter :refund_sender_token_id
17
+ parameter :refund_sender_token_id, :required => true
18
18
  parameter :transaction_date
19
- parameter :transaction_id
20
-
21
-
19
+ parameter :transaction_id, :required => true
20
+
22
21
  # The RefundAmount parameter has multiple components. It is specified on the query string like
23
22
  # so: RefundAmount.Amount=XXX&RefundAmount.CurrencyCode=YYY
24
23
  def convert_complex_key(key, parameter)
25
24
  "#{convert_key(key).to_s}.#{convert_key(parameter).to_s}"
26
25
  end
27
-
28
26
  end
29
27
 
30
28
  class Response < Remit::Response
@@ -4,15 +4,15 @@ module Remit
4
4
  module Reserve
5
5
  class Request < Remit::Request
6
6
  action :Reserve
7
- parameter :recipient_token_id
8
- parameter :sender_token_id
9
- parameter :caller_token_id
7
+ parameter :recipient_token_id, :required => true
8
+ parameter :sender_token_id, :required => true
9
+ parameter :caller_token_id, :required => true
10
10
  parameter :sender_reference
11
11
  parameter :recipient_reference
12
- parameter :caller_reference
12
+ parameter :caller_reference, :required => true
13
13
  parameter :transaction_date
14
- parameter :transaction_amount
15
- parameter :charge_fee_to
14
+ parameter :transaction_amount, :type => Remit::RequestTypes::Amount, :required => true
15
+ parameter :charge_fee_to, :required => true
16
16
  parameter :sender_description
17
17
  parameter :recipient_description
18
18
  parameter :caller_description
@@ -4,7 +4,7 @@ module Remit
4
4
  module RetryTransaction
5
5
  class Request < Remit::Request
6
6
  action :RetryTransaction
7
- parameter :original_transaction_id
7
+ parameter :original_transaction_id, :required => true
8
8
  end
9
9
 
10
10
  class Response < Remit::Response
@@ -4,8 +4,8 @@ module Remit
4
4
  module Settle
5
5
  class Request < Remit::Request
6
6
  action :Settle
7
- parameter :settlement_amount
8
- parameter :transaction_id
7
+ parameter :reserve_transaction_id, :required => true
8
+ parameter :transaction_amount, :type => Remit::RequestTypes::Amount
9
9
  parameter :transaction_date
10
10
  end
11
11