paypal-brazil 3.0.2
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.
- data/.document +5 -0
- data/.gitignore +11 -0
- data/CHANGELOG.md +75 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +36 -0
- data/LICENSE +23 -0
- data/README.md +117 -0
- data/Rakefile +21 -0
- data/lib/paypal.rb +8 -0
- data/lib/paypal/certs/paypal_sandbox.pem +22 -0
- data/lib/paypal/config.rb +49 -0
- data/lib/paypal/helpers/common.rb +304 -0
- data/lib/paypal/helpers/rails.rb +19 -0
- data/lib/paypal/notification.rb +188 -0
- data/lib/paypal/rails.rb +8 -0
- data/lib/paypal/version.rb +3 -0
- data/misc/PayPal - Instant Payment Notification - Technical Overview.pdf +0 -0
- data/misc/multiruby.sh +5 -0
- data/misc/paypal.psd +0 -0
- data/paypal.gemspec +34 -0
- data/spec/config_spec.rb +168 -0
- data/spec/fixtures/business_cert.pem +19 -0
- data/spec/fixtures/business_key.pem +15 -0
- data/spec/helpers/common_spec.rb +68 -0
- data/spec/notification_spec.rb +148 -0
- data/spec/spec_helper.rb +35 -0
- metadata +197 -0
@@ -0,0 +1,15 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
MIICXgIBAAKBgQDGh5R2Ro3HDe6dsVeq6Pk1nN+BJ0VoV0XtYPc/2MMYSgNyLvXr
|
3
|
+
a1PJvAW3YRKQUE7/yDqexBu5IlFnHcmaeYBEJ+r1//lSMryCRAyIslm8ZNkwa+qH
|
4
|
+
29DfHcHm4TNU+Ge0b6akgEFo26hZzd9iFkfEs5p2eR5f6JnzrCCNeK1pgwIDAQAB
|
5
|
+
AoGBAKI289K0kXHc62TEG/rVQ5NP67vPB8Ja1RNB0KTFi5uUFj69KklCuAK09ALD
|
6
|
+
eXSbegE7bNJ/MJvT86mKyEjFEEyvpupEy7uzqZtWJUWHkDZTN2nyiz+kyRvhzldi
|
7
|
+
DlMOA0S3sNF6il94Chjb+F6/b+8d6cd8zi86tN5NJ0RLBiJ5AkEA6RrJxclKjPIb
|
8
|
+
GEtQ7W/hvhne2fx+F/mXdUg4TXBzupk9G5fgFpB05NDrLVs8gIJisBf7h/9OQ69B
|
9
|
+
Qvps9V4GxwJBANoHbtGQDBZDka1RSOsRubSqRMDWOYiE0KJcGmEdwoOz/zH0YcWI
|
10
|
+
iYQRv0k/sGITDAUQW+cqMEd82zME/XR0W2UCQQCgc98FdNwLDq+V1mn7NfMGPpqG
|
11
|
+
I+XLrPMTOMYAj/IpNEe60ZzfC0pbIm9vRgjsUFOL8MYjw5nkvyLF7sjHUJSLAkEA
|
12
|
+
k0IB7zjDcSYh9lW4UkyeiQ+XcEdAhJxv7bkXeBCJmDqyWiMdBjW566Gw+OAzWYpT
|
13
|
+
y/fImtE72ozR4Bu2tDkCoQJAHWVaDrzDANnUP8/xGoPxbWI8lYE+kKpyZtyTOgWm
|
14
|
+
mXbXCGjqKRA5HcDMoNmd0+pY/3pXx5VjHOiL2UsKrSnTaQ==
|
15
|
+
-----END RSA PRIVATE KEY-----
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Paypal::Helpers::Common do
|
4
|
+
include Paypal::Helpers::Common
|
5
|
+
|
6
|
+
describe ".paypal_setup(item_number, amount, business, options = {})" do
|
7
|
+
describe "with default options" do
|
8
|
+
before do
|
9
|
+
@result = paypal_setup(1, "10.00", "trash@openhood.com")
|
10
|
+
end
|
11
|
+
|
12
|
+
{
|
13
|
+
"item_number" => "1",
|
14
|
+
"amount" => "10.00",
|
15
|
+
"currency_code" => "USD",
|
16
|
+
"business" => "trash@openhood.com",
|
17
|
+
"cmd" => "_xclick",
|
18
|
+
"quantity" => "1",
|
19
|
+
"item_number" => "1",
|
20
|
+
"item_name" => "Store purchase",
|
21
|
+
"no_shipping" => "1",
|
22
|
+
"no_note" => "1",
|
23
|
+
"charset" => "utf-8"
|
24
|
+
}.each do |key, value|
|
25
|
+
it "should include #{key} with #{value}" do
|
26
|
+
@result.should have_css("input[type=hidden][name=\"#{key}\"][value=\"#{value}\"]")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "with :enable_encryption set to true" do
|
32
|
+
context "with Paypal::Config.business_cert business_key and business_cert_id not set" do
|
33
|
+
it "should raise an error" do
|
34
|
+
lambda {
|
35
|
+
paypal_setup(1, "10.00", "trash@openhood.com", {:enable_encryption => true})
|
36
|
+
}.should raise_error ArgumentError, "Paypal::Config.business_key, Paypal::Config.business_cert and Paypal::Config.business_cert_id should be set if you use :enable_encryption"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context "with Paypal::Config.business_cert business_key and business_cert_id set" do
|
41
|
+
before do
|
42
|
+
Paypal::Config.business_cert = File.read(File.expand_path("../../fixtures/business_cert.pem", __FILE__))
|
43
|
+
Paypal::Config.business_key = File.read(File.expand_path("../../fixtures/business_key.pem", __FILE__))
|
44
|
+
Paypal::Config.business_cert_id = "CERTID"
|
45
|
+
@result = paypal_setup(1, "10.00", "trash@openhood.com", {
|
46
|
+
:enable_encryption => true
|
47
|
+
})
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should include cmd with _s-xclick" do
|
51
|
+
@result.should have_css("input[type=hidden][name=cmd][value=_s-xclick]")
|
52
|
+
end
|
53
|
+
it "should include cmd with encrypted datas" do
|
54
|
+
@result.should have_css("input[type=hidden][name=encrypted][value*=PKCS7]")
|
55
|
+
@result.should_not have_css("input[type=hidden][name=encrypted][value*='\n']")
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe "with unknown options" do
|
61
|
+
it "should raise an error" do
|
62
|
+
lambda do
|
63
|
+
paypal_setup(1, "10.00", "trash@openhood.com", :unknown_option => "unknown")
|
64
|
+
end.should raise_error(ArgumentError, "Unknown option #{[:unknown_option].inspect}")
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,148 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe Paypal::Notification do
|
4
|
+
before do
|
5
|
+
Paypal::Config.mode = :sandbox
|
6
|
+
end
|
7
|
+
|
8
|
+
def valid_http_raw_data
|
9
|
+
"mc_gross=500.00&address_status=confirmed&payer_id=EVMXCLDZJV77Q&tax=0.00&address_street=164+Waverley+Street&payment_date=15%3A23%3A54+Apr+15%2C+2005+PDT&payment_status=Completed&address_zip=K2P0V6&first_name=Tobias&mc_fee=15.05&address_country_code=CA&address_name=Tobias+Luetke¬ify_version=1.7&custom=cusdata&payer_status=unverified&business=tobi%40leetsoft.com&address_country=Canada&address_city=Ottawa&quantity=1&payer_email=tobi%40snowdevil.ca&verify_sign=AEt48rmhLYtkZ9VzOGAtwL7rTGxUAoLNsuf7UewmX7UGvcyC3wfUmzJP&txn_id=6G996328CK404320L&payment_type=instant&last_name=Luetke&address_state=Ontario&receiver_email=tobi%40leetsoft.com&payment_fee=&receiver_id=UQ8PDYXJZQD9Y&txn_type=web_accept&item_name=Store+Purchase&mc_currency=CAD&item_number=&test_ipn=1&payment_gross=&shipping=0.00&invoice=myinvoice&pending_reason=mypending_reason&reason_code=myreason_code&memo=mymemo&payment_type=mypayment_type&exchange_rate=myexchange_rate"
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.valid_parsed_raw_data
|
13
|
+
{"payment_gross"=>"", "receiver_id"=>"UQ8PDYXJZQD9Y", "payer_email"=>"tobi@snowdevil.ca", "address_city"=>"Ottawa", "address_country"=>"Canada", "business"=>"tobi@leetsoft.com", "address_name"=>"Tobias Luetke", "payment_status"=>"Completed", "tax"=>"0.00", "reason_code"=>"myreason_code", "receiver_email"=>"tobi@leetsoft.com", "invoice"=>"myinvoice", "verify_sign"=>"AEt48rmhLYtkZ9VzOGAtwL7rTGxUAoLNsuf7UewmX7UGvcyC3wfUmzJP", "address_street"=>"164 Waverley Street", "memo"=>"mymemo", "mc_currency"=>"CAD", "txn_type"=>"web_accept", "quantity"=>"1", "address_zip"=>"K2P0V6", "pending_reason"=>"mypending_reason", "item_name"=>"Store Purchase", "txn_id"=>"6G996328CK404320L", "address_country_code"=>"CA", "payment_fee"=>"", "address_state"=>"Ontario", "payer_status"=>"unverified", "notify_version"=>"1.7", "shipping"=>"0.00", "mc_fee"=>"15.05", "payment_date"=>"15:23:54 Apr 15, 2005 PDT", "address_status"=>"confirmed", "test_ipn"=>"1", "payment_type"=>"mypayment_type", "first_name"=>"Tobias", "last_name"=>"Luetke", "payer_id"=>"EVMXCLDZJV77Q", "mc_gross"=>"500.00", "exchange_rate"=>"myexchange_rate", "item_number"=>"", "custom"=>"cusdata"}
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "without data" do
|
17
|
+
it "should raise Paypal::NoDataError" do
|
18
|
+
lambda {
|
19
|
+
Paypal::Notification.new(nil)
|
20
|
+
}.should raise_error(Paypal::NoDataError)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "with valid raw data" do
|
25
|
+
before do
|
26
|
+
@notification = Paypal::Notification.new(valid_http_raw_data)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should store raw data" do
|
30
|
+
@notification.raw.should eql(valid_http_raw_data)
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "#params" do
|
34
|
+
it "should not be empty" do
|
35
|
+
@notification.params.should_not be_empty
|
36
|
+
end
|
37
|
+
|
38
|
+
valid_parsed_raw_data.each do |key, value|
|
39
|
+
it "should have #{key}=#{value}" do
|
40
|
+
@notification.params[key].should eql(value)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should have unescaped values" do
|
45
|
+
@notification.params["payment_date"].should eql("15:23:54 Apr 15, 2005 PDT")
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should include only the last value for duplicate key" do
|
49
|
+
@notification.params["payment_type"].should eql("mypayment_type")
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should define method to access each query params" do
|
54
|
+
self.class.valid_parsed_raw_data.each do |key, _|
|
55
|
+
lambda {
|
56
|
+
@notification.send(key.to_sym)
|
57
|
+
}.should_not raise_error
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
["Canceled_Reversal",
|
62
|
+
"Completed",
|
63
|
+
"Denied",
|
64
|
+
"Expired",
|
65
|
+
"Failed",
|
66
|
+
"Pending",
|
67
|
+
"Processed",
|
68
|
+
"Refunded",
|
69
|
+
"Reversed",
|
70
|
+
"Voided"].each do |status|
|
71
|
+
describe "when transaction payment_status = '#{status}'" do
|
72
|
+
it "should be #{status.downcase}" do
|
73
|
+
old_status, @notification.params["payment_status"] = @notification.params["payment_status"], status
|
74
|
+
|
75
|
+
@notification.send(:"#{status.downcase}?").should be_true
|
76
|
+
|
77
|
+
@notification.params["payment_status"] = old_status
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe "#acknowledge" do
|
83
|
+
before do
|
84
|
+
@paypal_validation_url = "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_notify-validate"
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should send a post request to Paypal at #{@paypal_validation_url}" do
|
88
|
+
FakeWeb.register_uri(:post, @paypal_validation_url, :body => 'VERIFIED')
|
89
|
+
|
90
|
+
lambda { @notification.acknowledge }.should_not raise_error(FakeWeb::NetConnectNotAllowedError)
|
91
|
+
|
92
|
+
FakeWeb.clean_registry
|
93
|
+
end
|
94
|
+
|
95
|
+
describe "when Paypal response is VERIFIED" do
|
96
|
+
before do
|
97
|
+
FakeWeb.register_uri(:post, @paypal_validation_url, :body => 'VERIFIED')
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should return true" do
|
101
|
+
@notification.acknowledge.should be(true)
|
102
|
+
end
|
103
|
+
|
104
|
+
after do
|
105
|
+
FakeWeb.clean_registry
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
describe "when Paypal response is INVALID" do
|
110
|
+
before do
|
111
|
+
FakeWeb.register_uri(:post, @paypal_validation_url, :body => 'INVALID')
|
112
|
+
end
|
113
|
+
|
114
|
+
it "should return false" do
|
115
|
+
@notification.acknowledge.should be(false)
|
116
|
+
end
|
117
|
+
|
118
|
+
after do
|
119
|
+
FakeWeb.clean_registry
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
describe "when Paypal response is not a recognize value" do
|
124
|
+
before do
|
125
|
+
FakeWeb.register_uri(:post, @paypal_validation_url, :body => 'BAD_VALUE')
|
126
|
+
end
|
127
|
+
|
128
|
+
it "should raise StandardError" do
|
129
|
+
lambda {
|
130
|
+
@notification.acknowledge
|
131
|
+
}.should raise_error(StandardError)
|
132
|
+
end
|
133
|
+
|
134
|
+
it "should include body response in StandardError" do
|
135
|
+
begin
|
136
|
+
@notification.acknowledge
|
137
|
+
rescue StandardError => e
|
138
|
+
e.message.should =~ /BAD_VALUE/
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
after do
|
143
|
+
FakeWeb.clean_registry
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "bundler"
|
3
|
+
Bundler.setup
|
4
|
+
|
5
|
+
require "paypal"
|
6
|
+
require "fakeweb"
|
7
|
+
require "nokogiri"
|
8
|
+
require "rspec"
|
9
|
+
|
10
|
+
# Do not allow connection to non registered URLs, so we can catch if specifics were called
|
11
|
+
FakeWeb.allow_net_connect = false
|
12
|
+
|
13
|
+
RSpec::Matchers.define :have_css do |css|
|
14
|
+
match do |text|
|
15
|
+
html = Nokogiri::HTML(text)
|
16
|
+
!html.css(css).empty?
|
17
|
+
end
|
18
|
+
|
19
|
+
failure_message_for_should do |text|
|
20
|
+
"expected to find css expression #{css} in:\n#{text}"
|
21
|
+
end
|
22
|
+
|
23
|
+
failure_message_for_should_not do |text|
|
24
|
+
"expected not to find css expression #{css} in:\n#{text}"
|
25
|
+
end
|
26
|
+
|
27
|
+
description do
|
28
|
+
"have css in #{expected}"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
RSpec.configure do |c|
|
33
|
+
c.mock_framework = :rspec
|
34
|
+
c.color_enabled = true
|
35
|
+
end
|
metadata
ADDED
@@ -0,0 +1,197 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: paypal-brazil
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 3
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 3
|
8
|
+
- 0
|
9
|
+
- 2
|
10
|
+
version: 3.0.2
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Lairton Borges
|
14
|
+
- Jonathan TRON
|
15
|
+
- Joseph HALTER
|
16
|
+
- Tobias LUETKE
|
17
|
+
autorequire:
|
18
|
+
bindir: bin
|
19
|
+
cert_chain: []
|
20
|
+
|
21
|
+
date: 2012-03-08 00:00:00 Z
|
22
|
+
dependencies:
|
23
|
+
- !ruby/object:Gem::Dependency
|
24
|
+
name: rack
|
25
|
+
prerelease: false
|
26
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
27
|
+
none: false
|
28
|
+
requirements:
|
29
|
+
- - ">="
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
hash: 23
|
32
|
+
segments:
|
33
|
+
- 1
|
34
|
+
- 0
|
35
|
+
- 0
|
36
|
+
version: 1.0.0
|
37
|
+
type: :runtime
|
38
|
+
version_requirements: *id001
|
39
|
+
- !ruby/object:Gem::Dependency
|
40
|
+
name: rspec
|
41
|
+
prerelease: false
|
42
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
hash: 23
|
48
|
+
segments:
|
49
|
+
- 2
|
50
|
+
- 6
|
51
|
+
- 0
|
52
|
+
version: 2.6.0
|
53
|
+
type: :development
|
54
|
+
version_requirements: *id002
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rcov
|
57
|
+
prerelease: false
|
58
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
hash: 43
|
64
|
+
segments:
|
65
|
+
- 0
|
66
|
+
- 9
|
67
|
+
- 8
|
68
|
+
version: 0.9.8
|
69
|
+
type: :development
|
70
|
+
version_requirements: *id003
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: nokogiri
|
73
|
+
prerelease: false
|
74
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
hash: 3
|
80
|
+
segments:
|
81
|
+
- 0
|
82
|
+
version: "0"
|
83
|
+
type: :development
|
84
|
+
version_requirements: *id004
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: bluecloth
|
87
|
+
prerelease: false
|
88
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ">="
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
hash: 3
|
94
|
+
segments:
|
95
|
+
- 0
|
96
|
+
version: "0"
|
97
|
+
type: :development
|
98
|
+
version_requirements: *id005
|
99
|
+
- !ruby/object:Gem::Dependency
|
100
|
+
name: yard
|
101
|
+
prerelease: false
|
102
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
103
|
+
none: false
|
104
|
+
requirements:
|
105
|
+
- - ">="
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
hash: 3
|
108
|
+
segments:
|
109
|
+
- 0
|
110
|
+
version: "0"
|
111
|
+
type: :development
|
112
|
+
version_requirements: *id006
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: fakeweb
|
115
|
+
prerelease: false
|
116
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
117
|
+
none: false
|
118
|
+
requirements:
|
119
|
+
- - ">="
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
hash: 3
|
122
|
+
segments:
|
123
|
+
- 0
|
124
|
+
version: "0"
|
125
|
+
type: :development
|
126
|
+
version_requirements: *id007
|
127
|
+
description: Paypal Express Integration
|
128
|
+
email: ljoseppi@gmail.com
|
129
|
+
executables: []
|
130
|
+
|
131
|
+
extensions: []
|
132
|
+
|
133
|
+
extra_rdoc_files:
|
134
|
+
- LICENSE
|
135
|
+
- README.md
|
136
|
+
files:
|
137
|
+
- .document
|
138
|
+
- .gitignore
|
139
|
+
- CHANGELOG.md
|
140
|
+
- Gemfile
|
141
|
+
- Gemfile.lock
|
142
|
+
- LICENSE
|
143
|
+
- README.md
|
144
|
+
- Rakefile
|
145
|
+
- lib/paypal.rb
|
146
|
+
- lib/paypal/certs/paypal_sandbox.pem
|
147
|
+
- lib/paypal/config.rb
|
148
|
+
- lib/paypal/helpers/common.rb
|
149
|
+
- lib/paypal/helpers/rails.rb
|
150
|
+
- lib/paypal/notification.rb
|
151
|
+
- lib/paypal/rails.rb
|
152
|
+
- lib/paypal/version.rb
|
153
|
+
- misc/PayPal - Instant Payment Notification - Technical Overview.pdf
|
154
|
+
- misc/multiruby.sh
|
155
|
+
- misc/paypal.psd
|
156
|
+
- paypal.gemspec
|
157
|
+
- spec/config_spec.rb
|
158
|
+
- spec/fixtures/business_cert.pem
|
159
|
+
- spec/fixtures/business_key.pem
|
160
|
+
- spec/helpers/common_spec.rb
|
161
|
+
- spec/notification_spec.rb
|
162
|
+
- spec/spec_helper.rb
|
163
|
+
homepage: https://github.com/ljoseppi/paypal
|
164
|
+
licenses: []
|
165
|
+
|
166
|
+
post_install_message:
|
167
|
+
rdoc_options:
|
168
|
+
- --charset=UTF-8
|
169
|
+
require_paths:
|
170
|
+
- lib
|
171
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
172
|
+
none: false
|
173
|
+
requirements:
|
174
|
+
- - ">="
|
175
|
+
- !ruby/object:Gem::Version
|
176
|
+
hash: 3
|
177
|
+
segments:
|
178
|
+
- 0
|
179
|
+
version: "0"
|
180
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
181
|
+
none: false
|
182
|
+
requirements:
|
183
|
+
- - ">="
|
184
|
+
- !ruby/object:Gem::Version
|
185
|
+
hash: 3
|
186
|
+
segments:
|
187
|
+
- 0
|
188
|
+
version: "0"
|
189
|
+
requirements: []
|
190
|
+
|
191
|
+
rubyforge_project:
|
192
|
+
rubygems_version: 1.8.10
|
193
|
+
signing_key:
|
194
|
+
specification_version: 3
|
195
|
+
summary: Integrate Paypal Express
|
196
|
+
test_files: []
|
197
|
+
|