NewMonarch-remit 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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