square 0.0.0 → 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 (41) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +2 -0
  3. data/Rakefile +17 -0
  4. data/VERSION +1 -1
  5. data/lib/square.rb +6 -1
  6. data/lib/square/connect.rb +15 -0
  7. data/lib/square/connect/connections.rb +10 -0
  8. data/lib/square/connect/connections/bank_accounts.rb +8 -0
  9. data/lib/square/connect/connections/payments.rb +19 -0
  10. data/lib/square/connect/connections/refunds.rb +8 -0
  11. data/lib/square/connect/connections/settlements.rb +8 -0
  12. data/lib/square/connect/device.rb +12 -0
  13. data/lib/square/connect/error.rb +13 -0
  14. data/lib/square/connect/itemization.rb +11 -0
  15. data/lib/square/connect/merchant.rb +29 -0
  16. data/lib/square/connect/money.rb +12 -0
  17. data/lib/square/connect/node.rb +79 -0
  18. data/lib/square/connect/payment.rb +75 -0
  19. data/lib/square/connect/refund.rb +26 -0
  20. data/lib/square/connect/tax.rb +16 -0
  21. data/lib/square/connect/tender.rb +25 -0
  22. data/lib/square/exception.rb +4 -0
  23. data/lib/square/oauth2.rb +8 -0
  24. data/lib/square/oauth2/access_token.rb +11 -0
  25. data/lib/square/oauth2/client.rb +24 -0
  26. data/spec/helpers/webmock_helper.rb +58 -0
  27. data/spec/mock_response/error/unauthorized.json +4 -0
  28. data/spec/mock_response/invalid_grant.json +3 -0
  29. data/spec/mock_response/merchant/me.json +7 -0
  30. data/spec/mock_response/payments/list.json +185 -0
  31. data/spec/mock_response/payments/single.json +61 -0
  32. data/spec/mock_response/token.json +6 -0
  33. data/spec/spec_helper.rb +4 -0
  34. data/spec/square/connect/connections/payments_spec.rb +19 -0
  35. data/spec/square/connect/merchant_spec.rb +50 -0
  36. data/spec/square/connect/node_spec.rb +70 -0
  37. data/spec/square/connect/payment_spec.rb +58 -0
  38. data/spec/square/oauth2/access_token_spec.rb +31 -0
  39. data/spec/square/oauth2/client_spec.rb +90 -0
  40. data/square.gemspec +13 -9
  41. metadata +82 -5
@@ -0,0 +1,70 @@
1
+ require 'spec_helper'
2
+
3
+ describe Square::Connect::Node do
4
+ let(:klass) { Square::Connect::Node }
5
+ let(:identifier) { 'node_id' }
6
+ let(:access_token) { 'access_token' }
7
+
8
+ describe '#initialize' do
9
+ subject { klass.new identifier }
10
+ its(:identifier) { should == identifier }
11
+ its(:endpoint) { should == File.join(Square::Connect::ROOT_URL, identifier) }
12
+
13
+ context 'when access_token given' do
14
+ subject { klass.new identifier, access_token }
15
+
16
+ context 'as String' do
17
+ let(:access_token) { 'access_token' }
18
+ its(:access_token) { should be_a Square::OAuth2::AccessToken }
19
+ end
20
+
21
+ context 'as Square::OAuth2::AccessToken' do
22
+ let(:access_token) { Square::OAuth2::AccessToken.new 'access_token' }
23
+ its(:access_token) { should be_a Square::OAuth2::AccessToken }
24
+ end
25
+ end
26
+ end
27
+
28
+ describe '#fetch' do
29
+ context 'when valid access_token given' do
30
+ let(:instance) { klass.new identifier, access_token }
31
+
32
+ it do
33
+ merchant = mock_request identifier, 'merchant/me', request_header: {'Authorization' => "Bearer #{access_token}"} do
34
+ instance.fetch
35
+ end
36
+ merchant.should be_a klass
37
+ end
38
+ end
39
+
40
+ context 'when invalid access_token given' do
41
+ let(:instance) { klass.new identifier, access_token }
42
+
43
+ it 'should reaise Square::Connect::Error' do
44
+ expect do
45
+ mock_request identifier, 'error/unauthorized', request_header: {'Authorization' => "Bearer #{access_token}"}, status: [401, 'Unauthorized'] do
46
+ instance.fetch
47
+ end
48
+ end.to raise_error(Square::Connect::Error) { |e|
49
+ e.status.should == 401
50
+ e.type.should == 'service.unauthorized'
51
+ e.message.should == 'Unauthorized'
52
+ }
53
+ end
54
+ end
55
+
56
+ context 'otherwise' do
57
+ let(:instance) { klass.new identifier }
58
+
59
+ it do
60
+ expect do
61
+ instance.fetch
62
+ end.to raise_error Square::Exception, 'access_token required'
63
+ end
64
+ end
65
+ end
66
+
67
+ describe '.me' do
68
+
69
+ end
70
+ end
@@ -0,0 +1,58 @@
1
+ require 'spec_helper'
2
+
3
+ describe Square::Connect::Payment do
4
+ let(:klass) { Square::Connect::Payment }
5
+ let(:identifier) { 'payment_id' }
6
+ let(:merchant_id) { 'merchant_id' }
7
+ let(:creator_id) { 'creator_id' }
8
+ let(:access_token) { 'access_token' }
9
+
10
+ describe '#initialize' do
11
+ describe 'merchant' do
12
+ context 'when merchant given' do
13
+ subject { klass.new identifier, merchant: Square::Connect::Merchant.new(merchant_id) }
14
+ its(:merchant) { should be_a Square::Connect::Merchant }
15
+ its(:endpoint) { should == File.join(Square::Connect::ROOT_URL, "#{merchant_id}/payments/#{identifier}") }
16
+ end
17
+
18
+ context 'when merchant_id given' do
19
+ subject { klass.new identifier, merchant_id: merchant_id }
20
+ its(:merchant) { should be_a Square::Connect::Merchant }
21
+ its(:endpoint) { should == File.join(Square::Connect::ROOT_URL, "#{merchant_id}/payments/#{identifier}") }
22
+ end
23
+
24
+ context 'otherwise' do
25
+ subject { klass.new identifier }
26
+ its(:merchant) { should be_a Square::Connect::Merchant }
27
+ its(:endpoint) { should == File.join(Square::Connect::ROOT_URL, "me/payments/#{identifier}") }
28
+ end
29
+ end
30
+
31
+ describe 'creator' do
32
+ context 'when creator given' do
33
+ subject { klass.new identifier, creator: Square::Connect::Merchant.new(creator_id) }
34
+ its(:creator) { should be_a Square::Connect::Merchant }
35
+ end
36
+
37
+ context 'when creator_id given' do
38
+ subject { klass.new identifier, creator_id: creator_id }
39
+ its(:creator) { should be_a Square::Connect::Merchant }
40
+ end
41
+
42
+ context 'otherwise' do
43
+ subject { klass.new identifier }
44
+ its(:creator) { should be_nil }
45
+ end
46
+ end
47
+ end
48
+
49
+ describe '#fetch' do
50
+ let(:instance) { klass.new identifier, access_token }
51
+ it do
52
+ fetched = mock_request instance.endpoint, 'payments/single' do
53
+ instance.fetch
54
+ end
55
+ fetched.should be_a Square::Connect::Payment
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe Square::OAuth2::AccessToken do
4
+ let(:klass) { Square::OAuth2::AccessToken }
5
+
6
+ describe '#initialize' do
7
+ let(:access_token) { 'access_token' }
8
+
9
+ describe 'access_token' do
10
+ context 'when missing' do
11
+ it do
12
+ expect do
13
+ klass.new
14
+ end.to raise_error AttrRequired::AttrMissing
15
+ end
16
+ end
17
+
18
+ context 'when given' do
19
+ context 'as the first arg' do
20
+ subject { klass.new access_token }
21
+ its(:access_token) { should == access_token }
22
+ end
23
+
24
+ context 'as Hash' do
25
+ subject { klass.new access_token: access_token }
26
+ its(:access_token) { should == access_token }
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,90 @@
1
+ require 'spec_helper'
2
+
3
+ describe Square::OAuth2::Client do
4
+ let(:client_id) { 'client_id' }
5
+ let(:client_secret) { 'client_secret' }
6
+ let(:klass) { Square::OAuth2::Client }
7
+
8
+ describe '#initialize' do
9
+ subject { klass.new client_id }
10
+
11
+ it { should be_a Rack::OAuth2::Client }
12
+
13
+ describe 'identifier' do
14
+ context 'when missing' do
15
+ it do
16
+ expect do
17
+ klass.new
18
+ end.to raise_error AttrRequired::AttrMissing
19
+ end
20
+ end
21
+
22
+ context 'when given' do
23
+ context 'as the first arg' do
24
+ subject { klass.new client_id }
25
+ its(:identifier) { should == client_id }
26
+ end
27
+
28
+ context 'as Hash' do
29
+ subject { klass.new identifier: client_id }
30
+ its(:identifier) { should == client_id }
31
+ end
32
+ end
33
+ end
34
+
35
+ describe 'secret' do
36
+ context 'when missing' do
37
+ subject { klass.new client_id }
38
+ its(:secret) { should be_nil }
39
+ end
40
+
41
+ context 'when given' do
42
+ context 'as the second arg' do
43
+ subject { klass.new client_id, client_secret }
44
+ its(:secret) { should == client_secret }
45
+ end
46
+
47
+ context 'as Hash' do
48
+ subject { klass.new identifier: client_id, secret: client_secret }
49
+ its(:secret) { should == client_secret }
50
+ end
51
+ end
52
+ end
53
+
54
+ describe 'other attributes' do
55
+ its(:host) { should == 'squareup.com' }
56
+ its(:authorization_uri) { should == "https://squareup.com/oauth2/authorize?client_id=#{client_id}&response_type=code" }
57
+ end
58
+ end
59
+
60
+ describe 'access_token!' do
61
+ let(:authorization_code) { 'authorization_code' }
62
+ let(:redirect_uri) { 'https://client.example.com/callback' }
63
+ let(:token_uri) { File.join(Square::OAuth2::ROOT_URL, 'oauth2/token') }
64
+
65
+ it "should access to '#{Square::OAuth2::ROOT_URL}' with client_auth_method as body" do
66
+ mock_request token_uri, 'token', method: :post, params: {
67
+ grant_type: 'authorization_code',
68
+ client_id: client_id,
69
+ code: authorization_code,
70
+ redirect_uri: redirect_uri
71
+ } do
72
+ client = klass.new client_id, redirect_uri: redirect_uri
73
+ client.authorization_code = authorization_code
74
+ client.access_token!
75
+ end
76
+ end
77
+
78
+ context 'when invalid grant' do
79
+ it do
80
+ expect do
81
+ mock_request token_uri, 'invalid_grant', method: :post, status: [400, 'Bad Request'] do
82
+ client = klass.new client_id, redirect_uri: redirect_uri
83
+ client.authorization_code = authorization_code
84
+ client.access_token!
85
+ end
86
+ end.to raise_error Rack::OAuth2::Client::Error
87
+ end
88
+ end
89
+ end
90
+ end
@@ -1,18 +1,22 @@
1
1
  Gem::Specification.new do |gem|
2
- gem.name = "square"
3
- gem.version = File.read("VERSION").delete("\n\r")
4
- gem.authors = ["nov"]
5
- gem.email = ["nov@matake.jp"]
2
+ gem.name = 'square'
3
+ gem.version = File.read('VERSION').delete("\n\r")
4
+ gem.authors = ['nov']
5
+ gem.email = ['nov@matake.jp']
6
6
  gem.description = %q{Square API client}
7
7
  gem.summary = %q{Square API Client}
8
- gem.homepage = "https://github.com/nov/square"
9
- gem.license = "MIT"
8
+ gem.homepage = 'https://github.com/nov/square'
9
+ gem.license = 'MIT'
10
10
 
11
11
  gem.files = `git ls-files`.split($/)
12
12
  gem.executables = gem.files.grep(%r{^bin/}) { |f| File.basename(f) }
13
13
  gem.test_files = gem.files.grep(%r{^(test|gem|features)/})
14
- gem.require_paths = ["lib"]
14
+ gem.require_paths = ['lib']
15
15
 
16
- gem.add_development_dependency "bundler", "~> 1.3"
17
- gem.add_development_dependency "rake"
16
+ gem.add_runtime_dependency 'rack-oauth2'
17
+
18
+ gem.add_development_dependency 'bundler'
19
+ gem.add_development_dependency 'rake'
20
+ gem.add_development_dependency 'rspec'
21
+ gem.add_development_dependency 'cover_me'
18
22
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: square
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - nov
@@ -10,20 +10,34 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2013-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rack-oauth2
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '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'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
- - - ~>
31
+ - - '>='
18
32
  - !ruby/object:Gem::Version
19
- version: '1.3'
33
+ version: '0'
20
34
  type: :development
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
- - - ~>
38
+ - - '>='
25
39
  - !ruby/object:Gem::Version
26
- version: '1.3'
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -38,6 +52,34 @@ dependencies:
38
52
  - - '>='
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: cover_me
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
41
83
  description: Square API client
42
84
  email:
43
85
  - nov@matake.jp
@@ -46,12 +88,47 @@ extensions: []
46
88
  extra_rdoc_files: []
47
89
  files:
48
90
  - .gitignore
91
+ - .rspec
49
92
  - Gemfile
50
93
  - LICENSE.txt
51
94
  - README.md
52
95
  - Rakefile
53
96
  - VERSION
54
97
  - lib/square.rb
98
+ - lib/square/connect.rb
99
+ - lib/square/connect/connections.rb
100
+ - lib/square/connect/connections/bank_accounts.rb
101
+ - lib/square/connect/connections/payments.rb
102
+ - lib/square/connect/connections/refunds.rb
103
+ - lib/square/connect/connections/settlements.rb
104
+ - lib/square/connect/device.rb
105
+ - lib/square/connect/error.rb
106
+ - lib/square/connect/itemization.rb
107
+ - lib/square/connect/merchant.rb
108
+ - lib/square/connect/money.rb
109
+ - lib/square/connect/node.rb
110
+ - lib/square/connect/payment.rb
111
+ - lib/square/connect/refund.rb
112
+ - lib/square/connect/tax.rb
113
+ - lib/square/connect/tender.rb
114
+ - lib/square/exception.rb
115
+ - lib/square/oauth2.rb
116
+ - lib/square/oauth2/access_token.rb
117
+ - lib/square/oauth2/client.rb
118
+ - spec/helpers/webmock_helper.rb
119
+ - spec/mock_response/error/unauthorized.json
120
+ - spec/mock_response/invalid_grant.json
121
+ - spec/mock_response/merchant/me.json
122
+ - spec/mock_response/payments/list.json
123
+ - spec/mock_response/payments/single.json
124
+ - spec/mock_response/token.json
125
+ - spec/spec_helper.rb
126
+ - spec/square/connect/connections/payments_spec.rb
127
+ - spec/square/connect/merchant_spec.rb
128
+ - spec/square/connect/node_spec.rb
129
+ - spec/square/connect/payment_spec.rb
130
+ - spec/square/oauth2/access_token_spec.rb
131
+ - spec/square/oauth2/client_spec.rb
55
132
  - square.gemspec
56
133
  homepage: https://github.com/nov/square
57
134
  licenses: