harleytt-simplepay 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. data/History.txt +25 -0
  2. data/Manifest.txt +50 -0
  3. data/README.rdoc +127 -0
  4. data/Rakefile +25 -0
  5. data/lib/simplepay.rb +27 -0
  6. data/lib/simplepay/authentication.rb +41 -0
  7. data/lib/simplepay/constants.rb +64 -0
  8. data/lib/simplepay/errors.rb +16 -0
  9. data/lib/simplepay/helpers/form_helper.rb +29 -0
  10. data/lib/simplepay/helpers/notification_helper.rb +54 -0
  11. data/lib/simplepay/helpers/rails_helper.rb +40 -0
  12. data/lib/simplepay/rails.rb +9 -0
  13. data/lib/simplepay/service.rb +133 -0
  14. data/lib/simplepay/services/donation.rb +91 -0
  15. data/lib/simplepay/services/marketplace.rb +89 -0
  16. data/lib/simplepay/services/marketplace_policy.rb +54 -0
  17. data/lib/simplepay/services/standard.rb +58 -0
  18. data/lib/simplepay/services/subscription.rb +96 -0
  19. data/lib/simplepay/support.rb +16 -0
  20. data/lib/simplepay/support/amount.rb +55 -0
  21. data/lib/simplepay/support/billing_frequency.rb +14 -0
  22. data/lib/simplepay/support/boolean.rb +28 -0
  23. data/lib/simplepay/support/currency.rb +21 -0
  24. data/lib/simplepay/support/epoch.rb +39 -0
  25. data/lib/simplepay/support/field.rb +147 -0
  26. data/lib/simplepay/support/interval.rb +143 -0
  27. data/lib/simplepay/support/simple_amount.rb +37 -0
  28. data/lib/simplepay/support/subscription_period.rb +25 -0
  29. data/script/console +10 -0
  30. data/script/destroy +14 -0
  31. data/script/generate +14 -0
  32. data/simplepay.gemspec +41 -0
  33. data/test/simplepay/helpers/test_notifier.rb +32 -0
  34. data/test/simplepay/services/test_donation.rb +85 -0
  35. data/test/simplepay/services/test_marketplace.rb +85 -0
  36. data/test/simplepay/services/test_marketplace_policy.rb +52 -0
  37. data/test/simplepay/services/test_standard.rb +71 -0
  38. data/test/simplepay/services/test_subscription.rb +109 -0
  39. data/test/simplepay/support/test_amount.rb +46 -0
  40. data/test/simplepay/support/test_billing_frequency.rb +43 -0
  41. data/test/simplepay/support/test_boolean.rb +17 -0
  42. data/test/simplepay/support/test_epoch.rb +34 -0
  43. data/test/simplepay/support/test_field.rb +99 -0
  44. data/test/simplepay/support/test_interval.rb +92 -0
  45. data/test/simplepay/support/test_simple_amount.rb +28 -0
  46. data/test/simplepay/support/test_subscription_period.rb +49 -0
  47. data/test/simplepay/test_authentication.rb +25 -0
  48. data/test/simplepay/test_service.rb +118 -0
  49. data/test/test_helper.rb +87 -0
  50. data/test/test_simplepay.rb +11 -0
  51. metadata +184 -0
@@ -0,0 +1,37 @@
1
+ require 'bigdecimal'
2
+
3
+ module Simplepay
4
+ module Support
5
+
6
+ ##
7
+ # In new Amazon API requests the amount does not include the currency, SimpleAmount is used for this, for now.
8
+ #
9
+ # At the present time, Amazon only uses USD.
10
+ #
11
+ class SimpleAmount
12
+
13
+ attr_reader :amount
14
+
15
+ def initialize(amount)
16
+ self.amount = amount
17
+ end
18
+
19
+
20
+ ##
21
+ # Sets the amount of the currency value, such as "1" for 1 USD. This
22
+ # amount cannot be negative.
23
+ #
24
+ def amount=(amount)
25
+ raise(ArgumentError, "Amount cannot be nil") unless amount
26
+ raise(ArgumentError, "Amount cannot be negative") if amount < 0
27
+ @amount = BigDecimal.new(amount.to_s)
28
+ end
29
+
30
+ def to_s
31
+ "#{'%0.2f' % amount}"
32
+ end
33
+
34
+ end
35
+
36
+ end
37
+ end
@@ -0,0 +1,25 @@
1
+ require 'simplepay/support/interval'
2
+
3
+ module Simplepay
4
+ module Support
5
+
6
+ class SubscriptionPeriod < Interval
7
+ ALLOWED_INTERVALS = Simplepay::Intervals + ['forever']
8
+
9
+ # Limited to 3 digits.
10
+ ALLOWED_QUANTITY_RANGE = (1...1000)
11
+
12
+ ##
13
+ # See Simplepay::Support::Interval.to_s for more information.
14
+ #
15
+ # If the subscription lasts "forever" then Amazon does not need an
16
+ # interval string.
17
+ #
18
+ def to_s
19
+ super unless interval == 'forever'
20
+ end
21
+
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # File: script/console
3
+ irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
4
+
5
+ libs = " -r irb/completion"
6
+ # Perhaps use a console_lib to store any extra methods I may want available in the cosole
7
+ # libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
8
+ libs << " -r #{File.dirname(__FILE__) + '/../lib/simplepay.rb'}"
9
+ puts "Loading simplepay gem"
10
+ exec "#{irb} #{libs} --simple-prompt"
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/destroy'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Destroy.new.run(ARGV)
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/generate'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Generate.new.run(ARGV)
@@ -0,0 +1,41 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{harleytt-simplepay}
5
+ s.version = "0.2.2"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Nathaniel E. Bibler"]
9
+ s.date = %q{2009-06-07}
10
+ s.description = %q{This gem provides a Rails interface to the Amazon Simple Pay payment service.}
11
+ s.email = ["gem@nathanielbibler.com"]
12
+ s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.rdoc"]
13
+ s.files = ["History.txt", "Manifest.txt", "README.rdoc", "Rakefile", "lib/simplepay.rb", "lib/simplepay/authentication.rb", "lib/simplepay/constants.rb", "lib/simplepay/errors.rb", "lib/simplepay/helpers/form_helper.rb", "lib/simplepay/helpers/notification_helper.rb", "lib/simplepay/helpers/rails_helper.rb", "lib/simplepay/rails.rb", "lib/simplepay/service.rb", "lib/simplepay/services/donation.rb", "lib/simplepay/services/marketplace.rb", "lib/simplepay/services/marketplace_policy.rb", "lib/simplepay/services/standard.rb", "lib/simplepay/services/subscription.rb", "lib/simplepay/support.rb", "lib/simplepay/support/amount.rb", "lib/simplepay/support/billing_frequency.rb", "lib/simplepay/support/boolean.rb", "lib/simplepay/support/currency.rb", "lib/simplepay/support/epoch.rb", "lib/simplepay/support/field.rb", "lib/simplepay/support/interval.rb", "lib/simplepay/support/simple_amount.rb", "lib/simplepay/support/subscription_period.rb", "script/console", "script/destroy", "script/generate", "simplepay.gemspec", "test/simplepay/helpers/test_notifier.rb", "test/simplepay/services/test_donation.rb", "test/simplepay/services/test_marketplace.rb", "test/simplepay/services/test_marketplace_policy.rb", "test/simplepay/services/test_standard.rb", "test/simplepay/services/test_subscription.rb", "test/simplepay/support/test_amount.rb", "test/simplepay/support/test_billing_frequency.rb", "test/simplepay/support/test_boolean.rb", "test/simplepay/support/test_epoch.rb", "test/simplepay/support/test_field.rb", "test/simplepay/support/test_interval.rb", "test/simplepay/support/test_subscription_period.rb", "test/simplepay/test_authentication.rb", "test/simplepay/test_service.rb", "test/test_helper.rb", "test/test_simplepay.rb"]
14
+ s.has_rdoc = true
15
+ s.homepage = %q{http://simplepay.rubyforge.org}
16
+ s.rdoc_options = ["--main", "README.rdoc"]
17
+ s.require_paths = ["lib"]
18
+ s.rubyforge_project = %q{simplepay}
19
+ s.rubygems_version = %q{1.3.2}
20
+ s.summary = %q{This gem provides a Rails interface to the Amazon Simple Pay payment service.}
21
+ s.test_files = ["test/simplepay/helpers/test_notifier.rb", "test/simplepay/services/test_donation.rb", "test/simplepay/services/test_marketplace.rb", "test/simplepay/services/test_marketplace_policy.rb", "test/simplepay/services/test_standard.rb", "test/simplepay/services/test_subscription.rb", "test/simplepay/support/test_amount.rb", "test/simplepay/support/test_billing_frequency.rb", "test/simplepay/support/test_boolean.rb", "test/simplepay/support/test_epoch.rb", "test/simplepay/support/test_field.rb", "test/simplepay/support/test_interval.rb", "test/simplepay/support/test_simple_amount.rb", "test/simplepay/support/test_subscription_period.rb", "test/simplepay/test_authentication.rb", "test/simplepay/test_service.rb", "test/test_helper.rb", "test/test_simplepay.rb"]
22
+
23
+ if s.respond_to? :specification_version then
24
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
25
+ s.specification_version = 3
26
+
27
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
28
+ s.add_runtime_dependency(%q<activesupport>, [">= 2.0.2"])
29
+ s.add_development_dependency(%q<newgem>, [">= 1.3.0"])
30
+ s.add_development_dependency(%q<hoe>, [">= 1.8.0"])
31
+ else
32
+ s.add_dependency(%q<activesupport>, [">= 2.0.2"])
33
+ s.add_dependency(%q<newgem>, [">= 1.3.0"])
34
+ s.add_dependency(%q<hoe>, [">= 1.8.0"])
35
+ end
36
+ else
37
+ s.add_dependency(%q<activesupport>, [">= 2.0.2"])
38
+ s.add_dependency(%q<newgem>, [">= 1.3.0"])
39
+ s.add_dependency(%q<hoe>, [">= 1.8.0"])
40
+ end
41
+ end
@@ -0,0 +1,32 @@
1
+ require File.dirname(__FILE__) + '/../../test_helper'
2
+ require "simplepay/helpers/notification_helper"
3
+
4
+ class TestNotificationClass
5
+ include Simplepay::Helpers::NotificationHelper
6
+
7
+ def testing(request_hash = {})
8
+ valid_simplepay_request?(request_hash)
9
+ end
10
+ end
11
+
12
+ class Simplepay::Helpers::TestNotificationHelper < Test::Unit::TestCase
13
+
14
+ context 'Simplepay::Helpers::NotificationHelper' do
15
+
16
+ setup do
17
+ @notifier = TestNotificationClass.new
18
+ end
19
+
20
+ should 'defer to Simplepay::Authentication.authentic?' do
21
+ Simplepay::Authentication.expects(:authentic?).with({:test => 'testing'}, 'signed').returns(true)
22
+ assert @notifier.testing({:test => 'testing', :signature => 'signed'})
23
+ end
24
+
25
+ should 'work with string hash keys' do
26
+ Simplepay::Authentication.expects(:authentic?).with({:test => 'testing'}, 'signed').returns(true)
27
+ assert @notifier.testing({"test" => 'testing', "signature" => 'signed'})
28
+ end
29
+
30
+ end
31
+
32
+ end
@@ -0,0 +1,85 @@
1
+ require File.dirname(__FILE__) + '/../../test_helper'
2
+ require 'simplepay/services/donation'
3
+
4
+ class Simplepay::Services::TestDonation < Test::Unit::TestCase
5
+
6
+ def self.model_class; Simplepay::Services::Donation; end
7
+
8
+ context 'Simplepay::Services::Donation' do
9
+
10
+ should_have_service_field :access_key,
11
+ :as => 'accessKey',
12
+ :required => true
13
+
14
+ should_have_service_field :signature,
15
+ :as => 'signature',
16
+ :required => true
17
+
18
+ should_have_service_field :account_id,
19
+ :as => 'amazonPaymentsAccountId',
20
+ :required => true
21
+
22
+ should_have_service_field :description,
23
+ :as => 'description',
24
+ :required => true
25
+
26
+ should_have_service_field :amount,
27
+ :as => 'amount',
28
+ :required => true,
29
+ :class => Simplepay::Support::Amount
30
+
31
+ should_have_service_field :recipient_email,
32
+ :as => 'recipientEmail',
33
+ :required => false
34
+
35
+ should_have_service_field :fixed_marketplace_fee,
36
+ :as => 'fixedMarketplaceFee',
37
+ :required => false,
38
+ :class => Simplepay::Support::Amount
39
+
40
+ should_have_service_field :variable_marketplace_fee,
41
+ :as => 'variableMarketplaceFee',
42
+ :required => false
43
+
44
+ should_have_service_field :cobranding_style,
45
+ :as => 'cobrandingStyle',
46
+ :required => true
47
+
48
+ should_have_service_field :reference_id,
49
+ :as => 'referenceId',
50
+ :required => false
51
+
52
+ should_have_service_field :immediate_return,
53
+ :as => 'immediateReturn',
54
+ :required => false,
55
+ :class => Simplepay::Support::Boolean
56
+
57
+ should_have_service_field :collect_shipping_address,
58
+ :as => 'collectShippingAddress',
59
+ :required => false,
60
+ :class => Simplepay::Support::Boolean
61
+
62
+ should_have_service_field :process_immediately,
63
+ :as => 'processImmediate',
64
+ :required => false,
65
+ :class => Simplepay::Support::Boolean
66
+
67
+ should_have_service_field :return_url,
68
+ :as => 'returnUrl',
69
+ :required => false
70
+
71
+ should_have_service_field :abandon_url,
72
+ :as => 'abandonUrl',
73
+ :required => false
74
+
75
+ should_have_service_field :ipn_url,
76
+ :as => 'ipnUrl',
77
+ :required => false
78
+
79
+ should_have_service_field :donation_widget,
80
+ :as => 'isDonationWidget',
81
+ :required => true
82
+
83
+ end
84
+
85
+ end
@@ -0,0 +1,85 @@
1
+ require File.dirname(__FILE__) + '/../../test_helper'
2
+ require 'simplepay/services/marketplace'
3
+
4
+ class Simplepay::Services::TestMarketplace < Test::Unit::TestCase
5
+
6
+ def self.model_class; Simplepay::Services::Marketplace; end
7
+
8
+ context 'Simplepay::Services::Marketplace' do
9
+
10
+ should_have_service_field :access_key,
11
+ :as => 'accessKey',
12
+ :required => true
13
+
14
+ should_have_service_field :signature,
15
+ :as => 'signature',
16
+ :required => true
17
+
18
+ should_have_service_field :account_id,
19
+ :as => 'amazonPaymentsAccountId',
20
+ :required => true
21
+
22
+ should_have_service_field :description,
23
+ :as => 'description',
24
+ :required => true
25
+
26
+ should_have_service_field :amount,
27
+ :as => 'amount',
28
+ :required => true,
29
+ :class => Simplepay::Support::Amount
30
+
31
+ should_have_service_field :recipient_email,
32
+ :as => 'recipientEmail',
33
+ :required => true
34
+
35
+ should_have_service_field :fixed_marketplace_fee,
36
+ :as => 'fixedMarketplaceFee',
37
+ :required => true,
38
+ :class => Simplepay::Support::Amount
39
+
40
+ should_have_service_field :variable_marketplace_fee,
41
+ :as => 'variableMarketplaceFee',
42
+ :required => true
43
+
44
+ should_have_service_field :cobranding_style,
45
+ :as => 'cobrandingStyle',
46
+ :required => true
47
+
48
+ should_have_service_field :reference_id,
49
+ :as => 'referenceId',
50
+ :required => false
51
+
52
+ should_have_service_field :immediate_return,
53
+ :as => 'immediateReturn',
54
+ :required => false,
55
+ :class => Simplepay::Support::Boolean
56
+
57
+ should_have_service_field :collect_shipping_address,
58
+ :as => 'collectShippingAddress',
59
+ :required => false,
60
+ :class => Simplepay::Support::Boolean
61
+
62
+ should_have_service_field :process_immediately,
63
+ :as => 'processImmediate',
64
+ :required => false,
65
+ :class => Simplepay::Support::Boolean
66
+
67
+ should_have_service_field :return_url,
68
+ :as => 'returnUrl',
69
+ :required => false
70
+
71
+ should_have_service_field :abandon_url,
72
+ :as => 'abandonUrl',
73
+ :required => false
74
+
75
+ should_have_service_field :ipn_url,
76
+ :as => 'ipnUrl',
77
+ :required => false
78
+
79
+ should_have_service_field :donation_widget,
80
+ :as => 'isDonationWidget',
81
+ :required => false
82
+
83
+ end
84
+
85
+ end
@@ -0,0 +1,52 @@
1
+ require File.dirname(__FILE__) + '/../../test_helper'
2
+ require 'simplepay/services/marketplace_policy'
3
+
4
+ class Simplepay::Services::TestMarketplacePolicy < Test::Unit::TestCase
5
+
6
+ def self.model_class; Simplepay::Services::MarketplacePolicy; end
7
+
8
+ context 'Simplepay::Services::MarketplacePolicy' do
9
+
10
+ should_have_service_field :access_key,
11
+ :as => 'callerKey',
12
+ :required => true
13
+
14
+ should_have_service_field :signature,
15
+ :as => 'awsSignature',
16
+ :required => true
17
+
18
+ should_have_service_field :account_id,
19
+ :as => 'callerAccountId',
20
+ :required => true
21
+
22
+ should_have_service_field :max_fixed_fee,
23
+ :as => 'maxFixedFee',
24
+ :required => true
25
+
26
+ should_have_service_field :max_variable_fee,
27
+ :as => 'maxVariableFee',
28
+ :required => true
29
+
30
+ should_have_service_field :return_url,
31
+ :as => 'returnUrl',
32
+ :required => true
33
+
34
+ should_have_service_field :recipient_pays_fee,
35
+ :as => 'recipientPaysFee',
36
+ :required => true
37
+
38
+ should_have_service_field :reference_id,
39
+ :as => 'callerReference',
40
+ :required => true
41
+
42
+ should_have_service_field :collect_email_address,
43
+ :as => 'collectEmailAddress',
44
+ :required => true
45
+
46
+ should_have_service_field :pipeline_name,
47
+ :as => 'pipelineName',
48
+ :required => true
49
+
50
+ end
51
+
52
+ end
@@ -0,0 +1,71 @@
1
+ require File.dirname(__FILE__) + '/../../test_helper'
2
+ require 'simplepay/services/standard'
3
+
4
+ class Simplepay::Services::TestStandard < Test::Unit::TestCase
5
+
6
+ def self.model_class; Simplepay::Services::Standard; end
7
+
8
+ context 'Simplepay::Services::Standard' do
9
+
10
+ should_have_service_field :abandon_url,
11
+ :as => 'abandonUrl',
12
+ :required => false
13
+
14
+ should_have_service_field :access_key,
15
+ :as => 'accessKey',
16
+ :required => true
17
+
18
+ should_have_service_field :amount,
19
+ :as => 'amount',
20
+ :required => true
21
+
22
+ should_have_service_field :cobranding_style,
23
+ :as => 'cobrandingStyle',
24
+ :required => false
25
+
26
+ should_have_service_field :collect_shipping_address,
27
+ :as => 'collectShippingAddress',
28
+ :required => false,
29
+ :class => Simplepay::Support::Boolean
30
+
31
+ should_have_service_field :description,
32
+ :as => 'description',
33
+ :required => true
34
+
35
+ should_have_service_field :immediate_return,
36
+ :as => 'immediateReturn',
37
+ :required => false,
38
+ :class => Simplepay::Support::Boolean
39
+
40
+ should_have_service_field :ipn_url,
41
+ :as => 'ipnUrl',
42
+ :required => false
43
+
44
+ should_have_service_field :process_immediate,
45
+ :as => 'processImmediate',
46
+ :required => false,
47
+ :class => Simplepay::Support::Boolean
48
+
49
+ should_have_service_field :reference_id,
50
+ :as => 'referenceId',
51
+ :required => false
52
+
53
+ should_have_service_field :return_url,
54
+ :as => 'returnUrl',
55
+ :required => false
56
+
57
+ should_have_service_field :signature,
58
+ :as => 'signature',
59
+ :required => true
60
+
61
+ should_have_service_field :signature_method,
62
+ :as => 'signatureMethod',
63
+ :required => true
64
+
65
+ should_have_service_field :signature_version,
66
+ :as => 'signatureVersion',
67
+ :required => true
68
+
69
+ end
70
+
71
+ end