NewMonarch-remit 0.0.1

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 (46) hide show
  1. data/LICENSE +20 -0
  2. data/README +79 -0
  3. data/lib/remit.rb +133 -0
  4. data/lib/remit/cancel_token.rb +18 -0
  5. data/lib/remit/common.rb +87 -0
  6. data/lib/remit/data_types.rb +164 -0
  7. data/lib/remit/discard_results.rb +18 -0
  8. data/lib/remit/error_codes.rb +116 -0
  9. data/lib/remit/fund_prepaid.rb +31 -0
  10. data/lib/remit/get_account_activity.rb +60 -0
  11. data/lib/remit/get_account_balance.rb +29 -0
  12. data/lib/remit/get_all_credit_instruments.rb +18 -0
  13. data/lib/remit/get_all_prepaid_instruments.rb +18 -0
  14. data/lib/remit/get_debt_balance.rb +23 -0
  15. data/lib/remit/get_outstanding_debt_balance.rb +22 -0
  16. data/lib/remit/get_payment_instruction.rb +21 -0
  17. data/lib/remit/get_pipeline.rb +181 -0
  18. data/lib/remit/get_prepaid_balance.rb +23 -0
  19. data/lib/remit/get_results.rb +27 -0
  20. data/lib/remit/get_token_by_caller.rb +19 -0
  21. data/lib/remit/get_token_usage.rb +18 -0
  22. data/lib/remit/get_tokens.rb +20 -0
  23. data/lib/remit/get_total_prepaid_liability.rb +22 -0
  24. data/lib/remit/get_transaction.rb +42 -0
  25. data/lib/remit/install_payment_instruction.rb +22 -0
  26. data/lib/remit/ipn_request.rb +56 -0
  27. data/lib/remit/pay.rb +35 -0
  28. data/lib/remit/pipeline_response.rb +62 -0
  29. data/lib/remit/refund.rb +38 -0
  30. data/lib/remit/reserve.rb +30 -0
  31. data/lib/remit/retry_transaction.rb +18 -0
  32. data/lib/remit/settle.rb +20 -0
  33. data/lib/remit/settle_debt.rb +30 -0
  34. data/lib/remit/subscribe_for_caller_notification.rb +18 -0
  35. data/lib/remit/unsubscribe_for_caller_notification.rb +17 -0
  36. data/lib/remit/write_off_debt.rb +28 -0
  37. data/spec/integrations/get_account_activity_spec.rb +36 -0
  38. data/spec/integrations/get_tokens_spec.rb +38 -0
  39. data/spec/integrations/integrations_helper.rb +8 -0
  40. data/spec/spec_helper.rb +40 -0
  41. data/spec/units/get_pipeline_spec.rb +165 -0
  42. data/spec/units/get_results_spec.rb +47 -0
  43. data/spec/units/ipn_request_spec.rb +34 -0
  44. data/spec/units/pay_spec.rb +70 -0
  45. data/spec/units/units_helper.rb +4 -0
  46. metadata +115 -0
@@ -0,0 +1,23 @@
1
+ require 'remit/common'
2
+
3
+ module Remit
4
+ module GetPrepaidBalance
5
+ class Request < Remit::Request
6
+ action :GetPrepaidBalance
7
+ parameter :prepaid_instrument_id
8
+ end
9
+
10
+ class Response < Remit::Response
11
+ class PrepaidBalance < Remit::BaseResponse
12
+ parameter :available_balance, :type => Amount
13
+ parameter :pending_in_balance, :type => Amount
14
+ end
15
+
16
+ parameter :prepaid_balance, :type => PrepaidBalance
17
+ end
18
+
19
+ def get_prepaid_balance(request = Request.new)
20
+ call(request, Response)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,27 @@
1
+ require 'remit/common'
2
+
3
+ module Remit
4
+ module GetResults
5
+ class Request < Remit::Request
6
+ action :GetResults
7
+ parameter :operation
8
+ parameter :max_results_count
9
+ end
10
+
11
+ class Response < Remit::Response
12
+ class TransactionResults < Remit::BaseResponse
13
+ parameter :transaction_id
14
+ parameter :operation_type, :element => :operation
15
+ parameter :caller_reference
16
+ parameter :transaction_status, :element => :status
17
+ end
18
+
19
+ parameter :transaction_results, :collection => TransactionResults
20
+ parameter :number_pending, :type => :integer
21
+ end
22
+
23
+ def get_results(request = Request.new)
24
+ call(request, Response)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,19 @@
1
+ require 'remit/common'
2
+
3
+ module Remit
4
+ module GetTokenByCaller
5
+ class Request < Remit::Request
6
+ action :GetTokenByCaller
7
+ parameter :caller_reference
8
+ parameter :token_id
9
+ end
10
+
11
+ class Response < Remit::Response
12
+ parameter :token, :type => Token
13
+ end
14
+
15
+ def get_token_by_caller(request = Request.new)
16
+ call(request, Response)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,18 @@
1
+ require 'remit/common'
2
+
3
+ module Remit
4
+ module GetTokenUsage
5
+ class Request < Remit::Request
6
+ action :GetTokenUsage
7
+ parameter :token_id
8
+ end
9
+
10
+ class Response < Remit::Response
11
+ parameter :token_usage_limits, :type => TokenUsageLimit
12
+ end
13
+
14
+ def get_token_usage(request = Request.new)
15
+ call(request, Response)
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,20 @@
1
+ require 'remit/common'
2
+
3
+ module Remit
4
+ module GetTokens
5
+ class Request < Remit::Request
6
+ action :GetTokens
7
+ parameter :caller_reference
8
+ parameter :token_friendly_name
9
+ parameter :token_status
10
+ end
11
+
12
+ class Response < Remit::Response
13
+ parameter :tokens, :collection => Token
14
+ end
15
+
16
+ def get_tokens(request = Request.new)
17
+ call(request, Response)
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,22 @@
1
+ require 'remit/common'
2
+
3
+ module Remit
4
+ module GetTotalPrepaidLiability
5
+ class Request < Remit::Request
6
+ action :GetTotalPrepaidLiability
7
+ end
8
+
9
+ class Response < Remit::Response
10
+ class OutstandingPrepaidLiability < Remit::BaseResponse
11
+ parameter :outstanding_balance, :type => Amount
12
+ parameter :panding_in_balance, :type => Amount
13
+ end
14
+
15
+ parameter :outstanding_prepaid_liability, :type => OutstandingPrepaidLiability
16
+ end
17
+
18
+ def get_total_prepaid_liability(request = Request.new)
19
+ call(request, Response)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,42 @@
1
+ require 'remit/common'
2
+
3
+ module Remit
4
+ module GetTransaction
5
+ class Request < Remit::Request
6
+ action :GetTransaction
7
+ parameter :transaction_id
8
+ end
9
+
10
+ class Response < Remit::Response
11
+ class TransactionDetail < Remit::BaseResponse
12
+ parameter :caller_name
13
+ parameter :caller_token_id
14
+ parameter :caller_transaction_date, :type => :time
15
+ parameter :date_completed, :type => :time
16
+ parameter :date_received, :type => :time
17
+ parameter :error_code
18
+ parameter :error_message
19
+ parameter :fees, :type => Amount
20
+ parameter :meta_data
21
+ parameter :operation
22
+ parameter :payment_method
23
+ parameter :recipient_name
24
+ parameter :recipient_token_id
25
+ parameter :related_transactions
26
+ parameter :sender_name
27
+ parameter :sender_token_id
28
+ parameter :status
29
+ parameter :status_history
30
+ parameter :transaction_amount, :type => Amount
31
+ parameter :transaction_id
32
+ parameter :transaction_parts
33
+ end
34
+
35
+ parameter :transaction, :type => TransactionDetail
36
+ end
37
+
38
+ def get_transaction(request = Request.new)
39
+ call(request, Response)
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,22 @@
1
+ require 'remit/common'
2
+
3
+ module Remit
4
+ module InstallPaymentInstruction
5
+ class Request < Remit::Request
6
+ action :InstallPaymentInstruction
7
+ parameter :payment_instruction
8
+ parameter :caller_reference
9
+ parameter :token_friendly_name
10
+ parameter :token_type
11
+ parameter :payment_reason
12
+ end
13
+
14
+ class Response < Remit::Response
15
+ parameter :token_id
16
+ end
17
+
18
+ def install_payment_instruction(request)
19
+ call(request, Response)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,56 @@
1
+ require 'base64'
2
+ require 'openssl/digest'
3
+
4
+ module Remit
5
+
6
+ ##
7
+ # Encapsulates the logic for IPN request validation and attribute retrieval.
8
+ #
9
+ class IpnRequest
10
+
11
+ # Signature key name used by AmazonFPS IPNs
12
+ SIGNATURE_KEY = 'signature'
13
+
14
+ ##
15
+ # +params+ should be your controllers request parameters.
16
+ #
17
+ def initialize(params, secret_key)
18
+ raise ArgumentError, "Expected the request params hash, received: #{params.inspect}" unless params.kind_of?(Hash)
19
+ @params = strip_keys_from(params, 'action', 'controller')
20
+ @supplied_signature = @params.delete(SIGNATURE_KEY)
21
+ @secret_key = secret_key
22
+ end
23
+
24
+ def valid?
25
+ return false unless @supplied_signature
26
+ generate_signature_for(@params) == @supplied_signature
27
+ end
28
+
29
+ def method_missing(method, *args) #:nodoc:
30
+ if @params.has_key?(method.to_s)
31
+ @params[method.to_s]
32
+ else
33
+ super(method, *args)
34
+ end
35
+ end
36
+
37
+
38
+ private
39
+
40
+
41
+ def generate_signature_for(params)
42
+ query = params.sort_by { |k,v| k.downcase }
43
+ digest = OpenSSL::Digest::Digest.new('sha1')
44
+ hmac = OpenSSL::HMAC.digest(digest, @secret_key, query.to_s)
45
+ encoded = Base64.encode64(hmac).chomp
46
+ end
47
+
48
+ def strip_keys_from(params, *ignore_keys)
49
+ parsed = params.dup
50
+ ignore_keys.each { |key| parsed.delete(key) }
51
+ parsed
52
+ end
53
+
54
+ end
55
+
56
+ end
data/lib/remit/pay.rb ADDED
@@ -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
9
+ parameter :caller_token_id
10
+ parameter :charge_fee_to
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
18
+ parameter :sender_description
19
+ parameter :sender_reference
20
+ parameter :sender_token_id
21
+ parameter :temporary_decline_policy, :type => Remit::RequestTypes::TemporaryDeclinePolicy
22
+ parameter :transaction_amount, :type => Remit::RequestTypes::Amount
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
@@ -0,0 +1,62 @@
1
+ module Remit
2
+
3
+ class PipelineResponse
4
+
5
+ def initialize(uri, secret_key)
6
+ @uri = URI.parse(uri)
7
+ @secret_key = secret_key
8
+ end
9
+
10
+ ##
11
+ # Returns +true+ if the response is correctly signed (awsSignature).
12
+ #
13
+ #--
14
+ # The unescape_value method is used here because the awsSignature value
15
+ # pulled from the request is filtered through the same method.
16
+ #++
17
+ #
18
+ def valid?
19
+ return false unless given_signature
20
+ Relax::Query.unescape_value(correct_signature) == given_signature
21
+ end
22
+
23
+ ##
24
+ # Returns +true+ if the response returns a successful state.
25
+ #
26
+ def successful?
27
+ [
28
+ Remit::PipelineStatusCode::SUCCESS_ABT,
29
+ Remit::PipelineStatusCode::SUCCESS_ACH,
30
+ Remit::PipelineStatusCode::SUCCESS_CC,
31
+ Remit::PipelineStatusCode::SUCCESS_RECIPIENT_TOKEN_INSTALLED
32
+ ].include?(request_query[:status])
33
+ end
34
+
35
+
36
+ def method_missing(method, *args) #:nodoc:
37
+ if request_query.has_key?(method.to_sym)
38
+ request_query[method.to_sym]
39
+ else
40
+ super
41
+ end
42
+ end
43
+
44
+
45
+ private
46
+
47
+
48
+ def request_query(reload = false)
49
+ @query ||= Remit::SignedQuery.parse(@uri, @secret_key, @uri.query || '')
50
+ end
51
+
52
+ def given_signature
53
+ request_query[:awsSignature]
54
+ end
55
+
56
+ def correct_signature
57
+ Remit::SignedQuery.new(@uri.path, @secret_key, request_query).sign
58
+ end
59
+
60
+ end
61
+
62
+ end
@@ -0,0 +1,38 @@
1
+ require 'remit/common'
2
+
3
+ module Remit
4
+ module Refund
5
+ class Request < Remit::Request
6
+ action :Refund
7
+ parameter :caller_description
8
+ parameter :caller_reference
9
+ parameter :caller_token_id
10
+ parameter :charge_fee_to
11
+ parameter :meta_data
12
+ parameter :refund_amount, :type => Remit::RequestTypes::Amount
13
+ parameter :refund_recipient_description
14
+ parameter :refund_recipient_reference
15
+ parameter :refund_sender_description
16
+ parameter :refund_sender_reference
17
+ parameter :refund_sender_token_id
18
+ parameter :transaction_date
19
+ parameter :transaction_id
20
+
21
+
22
+ # The RefundAmount parameter has multiple components. It is specified on the query string like
23
+ # so: RefundAmount.Amount=XXX&RefundAmount.CurrencyCode=YYY
24
+ def convert_complex_key(key, parameter)
25
+ "#{convert_key(key).to_s}.#{convert_key(parameter).to_s}"
26
+ end
27
+
28
+ end
29
+
30
+ class Response < Remit::Response
31
+ parameter :transaction_response, :type => TransactionResponse
32
+ end
33
+
34
+ def refund(request = Request.new)
35
+ call(request, Response)
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,30 @@
1
+ require 'remit/common'
2
+
3
+ module Remit
4
+ module Reserve
5
+ class Request < Remit::Request
6
+ action :Reserve
7
+ parameter :recipient_token_id
8
+ parameter :sender_token_id
9
+ parameter :caller_token_id
10
+ parameter :sender_reference
11
+ parameter :recipient_reference
12
+ parameter :caller_reference
13
+ parameter :transaction_date
14
+ parameter :transaction_amount
15
+ parameter :charge_fee_to
16
+ parameter :sender_description
17
+ parameter :recipient_description
18
+ parameter :caller_description
19
+ parameter :meta_data
20
+ end
21
+
22
+ class Response < Remit::Response
23
+ parameter :transaction_response, :type => TransactionResponse
24
+ end
25
+
26
+ def reserve(request = Request.new)
27
+ call(request, Response)
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,18 @@
1
+ require 'remit/common'
2
+
3
+ module Remit
4
+ module RetryTransaction
5
+ class Request < Remit::Request
6
+ action :RetryTransaction
7
+ parameter :original_transaction_id
8
+ end
9
+
10
+ class Response < Remit::Response
11
+ parameter :transaction_response, :type => TransactionResponse
12
+ end
13
+
14
+ def retry_transaction(request = Request.new)
15
+ call(request, Response)
16
+ end
17
+ end
18
+ end