atpay_ruby 0.0.5

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.
@@ -0,0 +1 @@
1
+ require 'rspec/core'
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+ require 'atpay/session'
3
+ require 'atpay/token/bulk'
4
+
5
+ describe AtPay::Token::Bulk do
6
+ let(:partner_id) { 1 }
7
+ let(:private_key) { 'DW93ArFKshINPeZOCfYer3riymL+HoRlZj92BNjek+Y=' }
8
+ let(:public_key) { 'qIcshFT1NEh2JWPEp7+wVV8ibUFHKNew5apbNLGVqgI=' }
9
+ let(:atpay_public_key) { 'DjnbXwK20VZpir+RLWsrLVwUinAkdeAmvla4M509GXQ=' }
10
+ let(:atpay_private_key) { 'sS70ekGtxHIlzDhcogTECaJyjGJAzHUpVzM/d/M2ixA=' }
11
+
12
+ let(:session) { AtPay::Session.new(partner_id, public_key, private_key) }
13
+ let(:amount) { 20.0 }
14
+ let(:url) { 'http://example.com/' }
15
+ let(:user_data) { 'sku-123' }
16
+
17
+ it 'creates a new token without exception' do
18
+ token = AtPay::Token::Bulk.new(session, amount, user_data)
19
+ expect(token.to_s).to match(/\A@.*@\z/)
20
+ end
21
+
22
+ it 'sets the authorization only version' do
23
+ token = AtPay::Token::Bulk.new(session, amount, user_data)
24
+ token.auth_only!
25
+ expect(token.to_s).to match(/\A@.*@\z/)
26
+ end
27
+ end
28
+
@@ -0,0 +1,62 @@
1
+ require 'spec_helper'
2
+ require 'atpay/session'
3
+ require 'atpay/token/core'
4
+
5
+ describe AtPay::Token::Core do
6
+ let(:partner_id) { 1 }
7
+ let(:private_key) { 'DW93ArFKshINPeZOCfYer3riymL+HoRlZj92BNjek+Y=' }
8
+ let(:public_key) { 'qIcshFT1NEh2JWPEp7+wVV8ibUFHKNew5apbNLGVqgI=' }
9
+ let(:atpay_public_key) { 'DjnbXwK20VZpir+RLWsrLVwUinAkdeAmvla4M509GXQ=' }
10
+ let(:atpay_private_key) { 'sS70ekGtxHIlzDhcogTECaJyjGJAzHUpVzM/d/M2ixA=' }
11
+
12
+ let(:session) { AtPay::Session.new(partner_id, public_key, private_key) }
13
+ let(:amount) { 20.0 }
14
+ let(:url) { 'http://example.com/' }
15
+ let(:user_data) { 'sku-123' }
16
+
17
+ it 'configures no address by default' do
18
+ token = described_class.new
19
+
20
+ expect(token.requires_shipping_address?).to eq(false)
21
+ expect(token.requires_billing_address?).to eq(false)
22
+ end
23
+
24
+ it 'configures standalone billing address' do
25
+ token = described_class.new
26
+ token.requires_billing_address = true
27
+
28
+ expect(token.requires_billing_address?).to eq(true)
29
+ expect(token.user_data.address).to eq('billing')
30
+ end
31
+
32
+ it 'configures standalone shipping address' do
33
+ token = described_class.new
34
+ token.requires_shipping_address = true
35
+
36
+ expect(token.requires_shipping_address?).to eq(true)
37
+ expect(token.user_data.address).to eq('shipping')
38
+
39
+ end
40
+
41
+ it 'configures combined billing and shipping address' do
42
+ token = described_class.new
43
+ token.requires_shipping_address = true
44
+ token.requires_billing_address = true
45
+
46
+ expect(token.requires_shipping_address?).to eq(true)
47
+ expect(token.requires_billing_address?).to eq(true)
48
+ expect(token.user_data.address).to eq('shipping,billing')
49
+ end
50
+
51
+ it 'allows removing configured billing or shipping address' do
52
+ token = described_class.new
53
+ token.requires_shipping_address = true
54
+ token.requires_billing_address = true
55
+
56
+ token.requires_shipping_address = false
57
+
58
+ expect(token.requires_shipping_address?).to eq(false)
59
+ expect(token.requires_billing_address?).to eq(true)
60
+ expect(token.user_data.address).to eq('billing')
61
+ end
62
+ end
@@ -0,0 +1,86 @@
1
+ require 'spec_helper'
2
+ require 'atpay/token/encoder'
3
+ require 'pry'
4
+
5
+ describe AtPay::Token::Encoder do
6
+ let(:partner_id) { 1 }
7
+ let(:private_key) { 'DW93ArFKshINPeZOCfYer3riymL+HoRlZj92BNjek+Y=' }
8
+ let(:public_key) { 'qIcshFT1NEh2JWPEp7+wVV8ibUFHKNew5apbNLGVqgI=' }
9
+ let(:atpay_public_key) { 'DjnbXwK20VZpir+RLWsrLVwUinAkdeAmvla4M509GXQ=' }
10
+ let(:atpay_private_key) { 'sS70ekGtxHIlzDhcogTECaJyjGJAzHUpVzM/d/M2ixA=' }
11
+
12
+ let(:session) { AtPay::Session.new(partner_id, public_key, private_key) }
13
+ let(:version) { nil }
14
+ let(:amount) { 20.0 }
15
+ let(:target) { nil }
16
+ let(:expires_in_seconds) { 3600 * 24 * 7 }
17
+ let(:url) { 'http://example.com/' }
18
+ let(:user_data) { 'sku-123' }
19
+ let(:email_address) { 'test@example.com' }
20
+
21
+ let(:ip) { '172.16.0.15' }
22
+ let(:headers) { { 'HTTP_USER_AGENT' => 'agent', 'HTTP_ACCEPT_LANGUAGE' => 'lang', 'HTTP_ACCEPT_CHARSET' => 'charset'} }
23
+
24
+ before do
25
+ # Use the key we expect
26
+ session.atpay_public_key = atpay_public_key
27
+
28
+ # Remove all randomness and constantize current state so we get the same tokens based on our input
29
+ lazy_boxer = double('boxer')
30
+ allow(lazy_boxer).to receive(:box) { |_, data| data }
31
+ allow(RbNaCl::Box).to receive(:new).and_return(lazy_boxer)
32
+ allow(SecureRandom).to receive(:hex).and_return('abc')
33
+ allow(SecureRandom).to receive(:random_bytes).and_return('cba')
34
+ allow(Time).to receive(:now).and_return(0)
35
+ end
36
+
37
+ it 'generates an expected token' do
38
+ token = AtPay::Token::Encoder.new(session, version, amount, target, expires_in_seconds, url, user_data)
39
+ expect(token.email).to eq('@Y2JhAAAAAAAAAAF1cmw8aHR0cDovL2V4YW1wbGUuY29tLz46YWJjL0GgAAAACTqAL3NrdS0xMjM=@')
40
+ expect(token.site(ip, headers)).to eq('@Y2JhAAAAAAAAAAEAAAAoNzliZGUyNjg1MmFmNDFiMjliZTdkMzQ2ZjBlZGMyNjEyNTdlZWFiOAAAAAsxNzIuMTYuMC4xNXVybDxodHRwOi8vZXhhbXBsZS5jb20vPjphYmMvQaAAAAAJOoAvc2t1LTEyMw==@')
41
+ end
42
+
43
+ it 'creates a token that expires when we tell it to' do
44
+ token = AtPay::Token::Encoder.new(session, version, amount, target, 5, url, user_data)
45
+ expect(token.email).to eq('@Y2JhAAAAAAAAAAF1cmw8aHR0cDovL2V4YW1wbGUuY29tLz46YWJjL0GgAAAAAAAFL3NrdS0xMjM=@')
46
+ expect(token.site(ip, headers)).to eq('@Y2JhAAAAAAAAAAEAAAAoNzliZGUyNjg1MmFmNDFiMjliZTdkMzQ2ZjBlZGMyNjEyNTdlZWFiOAAAAAsxNzIuMTYuMC4xNXVybDxodHRwOi8vZXhhbXBsZS5jb20vPjphYmMvQaAAAAAAAAUvc2t1LTEyMw==@')
47
+ end
48
+
49
+ it 'creates a token with a version if given' do
50
+ token = AtPay::Token::Encoder.new(session, 2, amount, target, expires_in_seconds, url, user_data)
51
+ expect(token.email).to eq('@AAAAAAAAAAI=~Y2JhAAAAAAAAAAF1cmw8aHR0cDovL2V4YW1wbGUuY29tLz46YWJjL0GgAAAACTqAL3NrdS0xMjM=@')
52
+ expect(token.site(ip, headers)).to eq('@AAAAAAAAAAI=~Y2JhAAAAAAAAAAEAAAAoNzliZGUyNjg1MmFmNDFiMjliZTdkMzQ2ZjBlZGMyNjEyNTdlZWFiOAAAAAsxNzIuMTYuMC4xNXVybDxodHRwOi8vZXhhbXBsZS5jb20vPjphYmMvQaAAAAAJOoAvc2t1LTEyMw==@')
53
+ end
54
+
55
+ context 'when a target is an EmailAddress' do
56
+ it 'generates a valid one-to-one token' do
57
+ token = AtPay::Token::Encoder.new(session, version, amount, AtPay::EmailAddress.new('John Doe', 'test@example.com'), expires_in_seconds, url, user_data)
58
+ expect(token.email).to eq('@Y2JhAAAAAAAAAAFlbWFpbDx0ZXN0QGV4YW1wbGUuY29tPjphYmMvQaAAAAAJOoAvc2t1LTEyMw==@')
59
+ expect(token.site(ip, headers)).to eq('@Y2JhAAAAAAAAAAEAAAAoNzliZGUyNjg1MmFmNDFiMjliZTdkMzQ2ZjBlZGMyNjEyNTdlZWFiOAAAAAsxNzIuMTYuMC4xNWVtYWlsPHRlc3RAZXhhbXBsZS5jb20-OmFiYy9BoAAAAAk6gC9za3UtMTIz@')
60
+ end
61
+
62
+ it 'generates a valid one-to-one token when given an email address as a string' do
63
+ token = AtPay::Token::Encoder.new(session, version, amount, 'test@example.com', expires_in_seconds, url, user_data)
64
+ expect(token.email).to eq('@Y2JhAAAAAAAAAAF1cmw8aHR0cDovL2V4YW1wbGUuY29tLz46YWJjL0GgAAAACTqAL3NrdS0xMjM=@')
65
+ expect(token.site(ip, headers)).to eq('@Y2JhAAAAAAAAAAEAAAAoNzliZGUyNjg1MmFmNDFiMjliZTdkMzQ2ZjBlZGMyNjEyNTdlZWFiOAAAAAsxNzIuMTYuMC4xNXVybDxodHRwOi8vZXhhbXBsZS5jb20vPjphYmMvQaAAAAAJOoAvc2t1LTEyMw==@')
66
+ end
67
+ end
68
+
69
+ context 'when a target is a Card' do
70
+ it 'generates a valid one-to-one token' do
71
+ card = AtPay::Card.new
72
+ card.token = '123'
73
+ token = AtPay::Token::Encoder.new(session, version, amount, card, expires_in_seconds, url, user_data)
74
+ expect(token.email).to eq('@Y2JhAAAAAAAAAAFjYXJkPDEyMz46YWJjL0GgAAAACTqAL3NrdS0xMjM=@')
75
+ expect(token.site(ip, headers)).to eq('@Y2JhAAAAAAAAAAEAAAAoNzliZGUyNjg1MmFmNDFiMjliZTdkMzQ2ZjBlZGMyNjEyNTdlZWFiOAAAAAsxNzIuMTYuMC4xNWNhcmQ8MTIzPjphYmMvQaAAAAAJOoAvc2t1LTEyMw==@')
76
+ end
77
+ end
78
+
79
+ context 'when a target is unspecified' do
80
+ it 'generates a valid one-to-many token' do
81
+ token = AtPay::Token::Encoder.new(session, version, amount, target, expires_in_seconds, url, user_data)
82
+ expect(token.email).to eq('@Y2JhAAAAAAAAAAF1cmw8aHR0cDovL2V4YW1wbGUuY29tLz46YWJjL0GgAAAACTqAL3NrdS0xMjM=@')
83
+ expect(token.site(ip, headers)).to eq('@Y2JhAAAAAAAAAAEAAAAoNzliZGUyNjg1MmFmNDFiMjliZTdkMzQ2ZjBlZGMyNjEyNTdlZWFiOAAAAAsxNzIuMTYuMC4xNXVybDxodHRwOi8vZXhhbXBsZS5jb20vPjphYmMvQaAAAAAJOoAvc2t1LTEyMw==@')
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+ require 'atpay/session'
3
+ require 'atpay/token/invoice'
4
+
5
+ describe AtPay::Token::Invoice do
6
+ let(:partner_id) { 1 }
7
+ let(:private_key) { 'xx5okSjkqJu30biXEFI/y05B68JRCr7ReSdufmtrILY=' }
8
+ let(:public_key) { 'gOVRRMKRwCHD0nkGiQ1/1EKcSUjO/einHq7MZ/AMkzQ=' }
9
+ let(:atpay_public_key) { 'x3iJge6NCMx9cYqxoJHmFgUryVyXqCwapGapFURYh18=' }
10
+ let(:atpay_private_key) { '' }
11
+
12
+ let(:session) { AtPay::Session.new(partner_id, public_key, private_key) }
13
+ let(:amount) { 20.0 }
14
+ let(:email_address) { 'http://example.com/' }
15
+ let(:user_data) { 'sku-123' }
16
+
17
+ it 'creates a new token without exception' do
18
+ AtPay::Token::Invoice.new(session, amount, email_address, user_data).to_s
19
+ end
20
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+ require 'pry'
3
+ require 'atpay/session'
4
+ require 'atpay/token/invoice'
5
+
6
+ describe AtPay::Token::Registration do
7
+ let(:partner_id) { 1 }
8
+ let(:private_key) { 'xx5okSjkqJu30biXEFI/y05B68JRCr7ReSdufmtrILY=' }
9
+ let(:public_key) { 'gOVRRMKRwCHD0nkGiQ1/1EKcSUjO/einHq7MZ/AMkzQ=' }
10
+ let(:atpay_public_key) { 'x3iJge6NCMx9cYqxoJHmFgUryVyXqCwapGapFURYh18=' }
11
+ let(:atpay_private_key) { '' }
12
+
13
+ let(:session) { AtPay::Session.new(partner_id, public_key, private_key) }
14
+ let(:amount) { 20.0 }
15
+ let(:email_address) { 'http://example.com/' }
16
+ let(:user_data) { 'sku-123' }
17
+
18
+ it 'registers a token' do
19
+ response = double()
20
+ expect(response).to receive(:body).and_return('{"url":"http://example.com/123","id":"123"}')
21
+ expect(HTTPI).to receive(:post).and_return(response)
22
+
23
+ registration = AtPay::Token::Registration.new(session, 'ex-token-123')
24
+
25
+ expect(registration.short).to eq('atpay://123')
26
+ expect(registration.url).to eq('http://example.com/123')
27
+ end
28
+ end
metadata ADDED
@@ -0,0 +1,198 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: atpay_ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.5
5
+ platform: ruby
6
+ authors:
7
+ - James Kassemi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-07-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rbnacl-libsodium
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 0.6.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 0.6.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: trollop
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '2.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '2.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: liquid
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 2.6.1
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 2.6.1
55
+ - !ruby/object:Gem::Dependency
56
+ name: thor
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 0.18.1
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 0.18.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: httpi
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: multi_json
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: 3.0.0
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: 3.0.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: rspec-mocks
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: 3.0.2
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ~>
123
+ - !ruby/object:Gem::Version
124
+ version: 3.0.2
125
+ description: ''
126
+ email:
127
+ - james@atpay.com
128
+ executables:
129
+ - atpay
130
+ extensions: []
131
+ extra_rdoc_files: []
132
+ files:
133
+ - .gitignore
134
+ - .ruby-version
135
+ - Gemfile
136
+ - README.md
137
+ - assets/button/templates/default.liquid
138
+ - assets/button/templates/mailto_body.liquid
139
+ - assets/button/templates/wrap_default.liquid
140
+ - assets/button/templates/wrap_yahoo.liquid
141
+ - assets/button/templates/yahoo.liquid
142
+ - assets/imgs/sample_button.png
143
+ - atpay_ruby.gemspec
144
+ - bin/atpay
145
+ - lib/atpay.rb
146
+ - lib/atpay/button.rb
147
+ - lib/atpay/card.rb
148
+ - lib/atpay/email_address.rb
149
+ - lib/atpay/error.rb
150
+ - lib/atpay/hook.rb
151
+ - lib/atpay/railtie.rb
152
+ - lib/atpay/session.rb
153
+ - lib/atpay/token/bulk.rb
154
+ - lib/atpay/token/core.rb
155
+ - lib/atpay/token/encoder.rb
156
+ - lib/atpay/token/invoice.rb
157
+ - lib/atpay/token/registration.rb
158
+ - spec/button_spec.rb
159
+ - spec/hook_spec.rb
160
+ - spec/spec_helper.rb
161
+ - spec/token/bulk_spec.rb
162
+ - spec/token/core_spec.rb
163
+ - spec/token/encoder_spec.rb
164
+ - spec/token/invoice_spec.rb
165
+ - spec/token/registration.rb
166
+ homepage: https://atpay.com
167
+ licenses:
168
+ - MIT
169
+ metadata: {}
170
+ post_install_message:
171
+ rdoc_options: []
172
+ require_paths:
173
+ - lib
174
+ required_ruby_version: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - '>='
177
+ - !ruby/object:Gem::Version
178
+ version: '0'
179
+ required_rubygems_version: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - '>='
182
+ - !ruby/object:Gem::Version
183
+ version: '0'
184
+ requirements: []
185
+ rubyforge_project:
186
+ rubygems_version: 2.0.14
187
+ signing_key:
188
+ specification_version: 4
189
+ summary: Ruby bindings for the @Pay API
190
+ test_files:
191
+ - spec/button_spec.rb
192
+ - spec/hook_spec.rb
193
+ - spec/spec_helper.rb
194
+ - spec/token/bulk_spec.rb
195
+ - spec/token/core_spec.rb
196
+ - spec/token/encoder_spec.rb
197
+ - spec/token/invoice_spec.rb
198
+ - spec/token/registration.rb