api2cart-ruby 1.2.0 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +2 -0
- data/README.md +9 -0
- data/api2cart-ruby.gemspec +2 -2
- data/lib/api2cart.rb +11 -0
- data/lib/api2cart/client.rb +1 -1
- data/lib/api2cart/request_url_composer.rb +8 -5
- data/lib/api2cart/version.rb +1 -1
- data/spec/api2cart/client_spec.rb +93 -29
- data/spec/api2cart/configuration_spec.rb +43 -0
- data/spec/api2cart/request_url_composer_spec.rb +89 -11
- data/spec/api2cart/store_spec.rb +70 -23
- data/spec/api2cart/with_proxy_spec.rb +35 -9
- data/spec/vcr_cassettes/{erroneous_request.yml → v1_0/erroneous_request.yml} +0 -0
- data/spec/vcr_cassettes/{successful_request.yml → v1_0/successful_request.yml} +0 -0
- data/spec/vcr_cassettes/v1_1/erroneous_request.yml +47 -0
- data/spec/vcr_cassettes/v1_1/successful_request.yml +46 -0
- metadata +21 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 4a08156ad7729b1456d299cb9fa179585b814e17f46057591b8673ed631d3a14
|
4
|
+
data.tar.gz: '014182fa2ff104f8769ae6ab56d4477b79dbba44d80d9e763d44008955d0c5eb'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a760348de57240677f0d3dfe611758b2f28f50c6dfcdd396f9d02ea79f31d62717fd45eed415250da6ebebd84972bcba85cebded10afe712b29378b13b88940d
|
7
|
+
data.tar.gz: 668218a34749339c873dd723e2950ff8852c51df060aea12215b661679ebec84fa04b49b41137f1a36ea427ca428c16fce371d953b8a471f83e7367f2f4907a1
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -32,6 +32,15 @@ Api2cart::Store.new(api_key, store_key, proxy: 'http://anti-throttling-proxy.loc
|
|
32
32
|
# => { 'products_count' => 76 }
|
33
33
|
```
|
34
34
|
|
35
|
+
## Configuration
|
36
|
+
|
37
|
+
```ruby
|
38
|
+
Api2cart.configure do |c|
|
39
|
+
c.host = 'custom.example.com' # default is 'api.api2cart.com'
|
40
|
+
c.api_version = '1.1' # default is '1.0'
|
41
|
+
end
|
42
|
+
```
|
43
|
+
|
35
44
|
## Contributors
|
36
45
|
|
37
46
|
* [Anton Pershakov](https://github.com/main24)
|
data/api2cart-ruby.gemspec
CHANGED
@@ -21,8 +21,8 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.require_paths = ["lib"]
|
22
22
|
|
23
23
|
spec.add_dependency "activesupport"
|
24
|
-
spec.add_development_dependency "bundler"
|
25
|
-
spec.add_development_dependency "rake"
|
24
|
+
spec.add_development_dependency "bundler"
|
25
|
+
spec.add_development_dependency "rake"
|
26
26
|
spec.add_development_dependency "rspec"
|
27
27
|
spec.add_development_dependency "vcr"
|
28
28
|
spec.add_development_dependency "webmock"
|
data/lib/api2cart.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'active_support/configurable'
|
2
|
+
|
1
3
|
require 'api2cart/request_url_composer'
|
2
4
|
require 'api2cart/client'
|
3
5
|
require 'api2cart/store'
|
@@ -5,4 +7,13 @@ require 'api2cart/errors'
|
|
5
7
|
require 'api2cart/error_class_recognizer'
|
6
8
|
|
7
9
|
module Api2cart
|
10
|
+
include ActiveSupport::Configurable
|
11
|
+
|
12
|
+
config_accessor :host,
|
13
|
+
:api_version
|
14
|
+
|
15
|
+
self.configure do |config|
|
16
|
+
config.host = 'api.api2cart.com'
|
17
|
+
config.api_version = '1.0'
|
18
|
+
end
|
8
19
|
end
|
data/lib/api2cart/client.rb
CHANGED
@@ -1,23 +1,26 @@
|
|
1
1
|
require 'uri'
|
2
2
|
require 'active_support/core_ext/object/to_query'
|
3
|
+
require 'active_support/core_ext/module/delegation'
|
3
4
|
|
4
5
|
module Api2cart
|
5
6
|
class RequestUrlComposer < Struct.new(:api_key, :store_key, :method_name, :query_params)
|
6
|
-
|
7
|
-
|
7
|
+
|
8
|
+
delegate :host,
|
9
|
+
:api_version,
|
10
|
+
to: :Api2cart
|
8
11
|
|
9
12
|
def compose_request_url
|
10
|
-
URI::HTTP.build host:
|
13
|
+
URI::HTTP.build host: host, path: full_path, query: query_string
|
11
14
|
end
|
12
15
|
|
13
16
|
protected
|
14
17
|
|
15
18
|
def full_path
|
16
|
-
"#{
|
19
|
+
"/v#{api_version}/#{dotted_method_name}.json"
|
17
20
|
end
|
18
21
|
|
19
22
|
def dotted_method_name
|
20
|
-
method_name.to_s.gsub('_', '.')
|
23
|
+
method_name.to_s.gsub('__', '-').gsub('_', '.').gsub('-', '_')
|
21
24
|
end
|
22
25
|
|
23
26
|
def query_string
|
data/lib/api2cart/version.rb
CHANGED
@@ -1,56 +1,120 @@
|
|
1
1
|
describe Api2cart::Client do
|
2
2
|
let(:api2cart_client) { Api2cart::Client.new(request_url) }
|
3
3
|
|
4
|
-
|
4
|
+
context 'when API version is default' do
|
5
|
+
before { api2cart_client.make_request! }
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
|
7
|
+
context 'when request is successful', vcr: { cassette_name: 'v1_0/successful_request' } do
|
8
|
+
let(:api_key) { '43ba7043badfa2cd31cfaf5dc601a884' }
|
9
|
+
let(:store_key) { '6f00bbf49f5ada8156506aba161408c6' }
|
9
10
|
|
10
|
-
|
11
|
+
let(:request_url) { Api2cart::RequestUrlComposer.new(api_key, store_key, :product_count).compose_request_url }
|
11
12
|
|
12
|
-
|
13
|
-
|
13
|
+
describe '#successful?' do
|
14
|
+
subject { api2cart_client.successful? }
|
14
15
|
|
15
|
-
|
16
|
-
|
16
|
+
it { is_expected.to be true }
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#error_message' do
|
20
|
+
subject { api2cart_client.error_message }
|
21
|
+
|
22
|
+
it { is_expected.to eq '' }
|
23
|
+
end
|
17
24
|
|
18
|
-
|
19
|
-
|
25
|
+
describe '#result' do
|
26
|
+
subject { api2cart_client.result }
|
20
27
|
|
21
|
-
|
28
|
+
it 'returns result as parsed JSON' do
|
29
|
+
expect(subject).to eq({ "products_count" => 76 })
|
30
|
+
end
|
31
|
+
end
|
22
32
|
end
|
23
33
|
|
24
|
-
|
25
|
-
|
34
|
+
context 'when request is erroneous', vcr: { cassette_name: 'v1_0/erroneous_request' } do
|
35
|
+
let(:request_url) { Api2cart::RequestUrlComposer.new('wrong', 'even more wrong', :product_count).compose_request_url }
|
36
|
+
|
37
|
+
describe '#successful?' do
|
38
|
+
subject { api2cart_client.successful? }
|
39
|
+
|
40
|
+
it { is_expected.to be false }
|
41
|
+
end
|
42
|
+
|
43
|
+
describe '#error_message' do
|
44
|
+
subject { api2cart_client.error_message }
|
45
|
+
|
46
|
+
it 'parses request and extracts error message' do
|
47
|
+
expect(subject).to eq 'Incorrect API Key'
|
48
|
+
end
|
49
|
+
end
|
26
50
|
|
27
|
-
|
28
|
-
|
51
|
+
describe '#result' do
|
52
|
+
subject { api2cart_client.result }
|
53
|
+
|
54
|
+
it { is_expected.to eq({}) }
|
29
55
|
end
|
30
56
|
end
|
31
57
|
end
|
32
58
|
|
33
|
-
context 'when
|
34
|
-
let(:
|
35
|
-
|
36
|
-
describe '#successful?' do
|
37
|
-
subject { api2cart_client.successful? }
|
59
|
+
context 'when API version is configured' do
|
60
|
+
let!(:current_api_version) { Api2cart.api_version }
|
38
61
|
|
39
|
-
|
62
|
+
before do
|
63
|
+
Api2cart.configure{ |config| config.api_version = '1.1' }
|
64
|
+
api2cart_client.make_request!
|
40
65
|
end
|
41
66
|
|
42
|
-
|
43
|
-
|
67
|
+
after { Api2cart.configure{ |config| config.api_version = current_api_version } }
|
68
|
+
|
69
|
+
context 'when request is successful', vcr: { cassette_name: 'v1_1/successful_request' } do
|
70
|
+
let(:api_key) { '43ba7043badfa2cd31cfaf5dc601a884' }
|
71
|
+
let(:store_key) { '6f00bbf49f5ada8156506aba161408c6' }
|
72
|
+
|
73
|
+
let(:request_url) { Api2cart::RequestUrlComposer.new(api_key, store_key, :product_count).compose_request_url }
|
44
74
|
|
45
|
-
|
46
|
-
|
75
|
+
describe '#successful?' do
|
76
|
+
subject { api2cart_client.successful? }
|
77
|
+
|
78
|
+
it { is_expected.to be true }
|
79
|
+
end
|
80
|
+
|
81
|
+
describe '#error_message' do
|
82
|
+
subject { api2cart_client.error_message }
|
83
|
+
|
84
|
+
it { is_expected.to eq '' }
|
85
|
+
end
|
86
|
+
|
87
|
+
describe '#result' do
|
88
|
+
subject { api2cart_client.result }
|
89
|
+
|
90
|
+
it 'returns result as parsed JSON' do
|
91
|
+
expect(subject).to eq({ "products_count" => 88 })
|
92
|
+
end
|
47
93
|
end
|
48
94
|
end
|
49
95
|
|
50
|
-
|
51
|
-
|
96
|
+
context 'when request is erroneous', vcr: { cassette_name: 'v1_1/erroneous_request' } do
|
97
|
+
let(:request_url) { Api2cart::RequestUrlComposer.new('wrong', 'even more wrong', :product_count).compose_request_url }
|
98
|
+
|
99
|
+
describe '#successful?' do
|
100
|
+
subject { api2cart_client.successful? }
|
52
101
|
|
53
|
-
|
102
|
+
it { is_expected.to be false }
|
103
|
+
end
|
104
|
+
|
105
|
+
describe '#error_message' do
|
106
|
+
subject { api2cart_client.error_message }
|
107
|
+
|
108
|
+
it 'parses request and extracts error message' do
|
109
|
+
expect(subject).to eq 'Incorrect API Key'
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
describe '#result' do
|
114
|
+
subject { api2cart_client.result }
|
115
|
+
|
116
|
+
it { is_expected.to eq({}) }
|
117
|
+
end
|
54
118
|
end
|
55
119
|
end
|
56
120
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Api2cart do
|
4
|
+
describe '#host' do
|
5
|
+
context 'when host is not configured' do
|
6
|
+
it 'should be equal to default value' do
|
7
|
+
expect(Api2cart.host).to eq 'api.api2cart.com'
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
context 'when host is configured' do
|
12
|
+
let!(:current_host) { Api2cart.host }
|
13
|
+
|
14
|
+
before { Api2cart.configure{ |config| config.host = 'host.com' } }
|
15
|
+
|
16
|
+
it 'should be equal to new host' do
|
17
|
+
expect(Api2cart.host).to eq 'host.com'
|
18
|
+
end
|
19
|
+
|
20
|
+
after { Api2cart.configure{ |config| config.host = current_host } }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe '#api_version' do
|
25
|
+
context 'when API version is not configured' do
|
26
|
+
it 'should be equal to default value' do
|
27
|
+
expect(Api2cart.api_version).to eq '1.0'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'when API version is configured' do
|
32
|
+
let!(:current_api_version) { Api2cart.api_version }
|
33
|
+
|
34
|
+
before { Api2cart.configure{ |config| config.api_version = '1.1' } }
|
35
|
+
|
36
|
+
it 'should be equal to new api_version' do
|
37
|
+
expect(Api2cart.api_version).to eq '1.1'
|
38
|
+
end
|
39
|
+
|
40
|
+
after { Api2cart.configure{ |config| config.api_version = current_api_version } }
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -24,24 +24,76 @@ describe Api2cart::RequestUrlComposer do
|
|
24
24
|
describe 'domain' do
|
25
25
|
subject { composed_url.host }
|
26
26
|
|
27
|
-
|
28
|
-
|
27
|
+
context 'when host is default' do
|
28
|
+
specify do
|
29
|
+
expect(subject).to eq('api.api2cart.com')
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'when host is configured' do
|
34
|
+
let!(:current_host) { Api2cart.host }
|
35
|
+
|
36
|
+
before { Api2cart.configure{ |config| config.host = 'host.com' } }
|
37
|
+
|
38
|
+
specify do
|
39
|
+
expect(subject).to eq('host.com')
|
40
|
+
end
|
41
|
+
|
42
|
+
after { Api2cart.configure{ |config| config.host = current_host } }
|
29
43
|
end
|
30
44
|
end
|
31
45
|
|
32
46
|
describe 'path' do
|
33
47
|
subject { composed_url.path }
|
34
48
|
|
35
|
-
|
36
|
-
|
49
|
+
context 'when API version is default' do
|
50
|
+
it 'contains API version in the beginning' do
|
51
|
+
expect(subject).to start_with('/v1.0')
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'contains method name translating underscores to dots' do
|
55
|
+
expect(subject).to start_with('/v1.0/order.list')
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'contains indicator of JSON format' do
|
59
|
+
expect(subject).to start_with('/v1.0/order.list.json')
|
60
|
+
end
|
61
|
+
|
62
|
+
context 'when method name contains doubled underscores' do
|
63
|
+
let(:method_name) { :product_child__item_list }
|
64
|
+
|
65
|
+
it 'converts doubled underscores to single' do
|
66
|
+
expect(subject).to start_with('/v1.0/product.child_item.list')
|
67
|
+
end
|
68
|
+
end
|
37
69
|
end
|
38
70
|
|
39
|
-
|
40
|
-
|
41
|
-
|
71
|
+
context 'when API version is configured' do
|
72
|
+
let!(:current_api_version) { Api2cart.api_version }
|
73
|
+
|
74
|
+
before { Api2cart.configure{ |config| config.api_version = '1.1' } }
|
75
|
+
|
76
|
+
it 'contains API version in the beginning' do
|
77
|
+
expect(subject).to start_with('/v1.1')
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'contains method name translating underscores to dots' do
|
81
|
+
expect(subject).to start_with('/v1.1/order.list')
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'contains indicator of JSON format' do
|
85
|
+
expect(subject).to start_with('/v1.1/order.list.json')
|
86
|
+
end
|
42
87
|
|
43
|
-
|
44
|
-
|
88
|
+
context 'when method name contains doubled underscores' do
|
89
|
+
let(:method_name) { :product_child__item_list }
|
90
|
+
|
91
|
+
it 'converts doubled underscores to single' do
|
92
|
+
expect(subject).to start_with('/v1.1/product.child_item.list')
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
after { Api2cart.configure{ |config| config.api_version = current_api_version } }
|
45
97
|
end
|
46
98
|
end
|
47
99
|
|
@@ -64,8 +116,34 @@ describe Api2cart::RequestUrlComposer do
|
|
64
116
|
describe 'all together' do
|
65
117
|
subject { composed_url.to_s }
|
66
118
|
|
67
|
-
|
68
|
-
|
119
|
+
context 'when host is default' do
|
120
|
+
it do
|
121
|
+
is_expected.to eq 'http://api.api2cart.com/v1.0/order.list.json?api_key=43ba7043badfa2cd31cfaf5dc601a884&count=10¶ms=force_all&start=20&store_key=6f00bbf49f5ada8156506aba161408c6'
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
context 'when host is configured' do
|
126
|
+
let!(:current_host) { Api2cart.host }
|
127
|
+
|
128
|
+
before { Api2cart.configure{ |config| config.host = 'host.com' } }
|
129
|
+
|
130
|
+
it do
|
131
|
+
is_expected.to eq 'http://host.com/v1.0/order.list.json?api_key=43ba7043badfa2cd31cfaf5dc601a884&count=10¶ms=force_all&start=20&store_key=6f00bbf49f5ada8156506aba161408c6'
|
132
|
+
end
|
133
|
+
|
134
|
+
after { Api2cart.configure{ |config| config.host = current_host } }
|
135
|
+
end
|
136
|
+
|
137
|
+
context 'when API version is configured' do
|
138
|
+
let!(:current_api_version) { Api2cart.api_version }
|
139
|
+
|
140
|
+
before { Api2cart.configure{ |config| config.api_version = '1.1' } }
|
141
|
+
|
142
|
+
it do
|
143
|
+
is_expected.to eq 'http://api.api2cart.com/v1.1/order.list.json?api_key=43ba7043badfa2cd31cfaf5dc601a884&count=10¶ms=force_all&start=20&store_key=6f00bbf49f5ada8156506aba161408c6'
|
144
|
+
end
|
145
|
+
|
146
|
+
after { Api2cart.configure{ |config| config.api_version = current_api_version } }
|
69
147
|
end
|
70
148
|
end
|
71
149
|
|
data/spec/api2cart/store_spec.rb
CHANGED
@@ -1,40 +1,87 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Api2cart::Store do
|
4
|
-
context 'when
|
5
|
-
|
6
|
-
|
4
|
+
context 'when API version is default' do
|
5
|
+
context 'when request is successful', vcr: { cassette_name: 'v1_0/successful_request' } do
|
6
|
+
let(:api_key) { '43ba7043badfa2cd31cfaf5dc601a884' }
|
7
|
+
let(:store_key) { '6f00bbf49f5ada8156506aba161408c6' }
|
7
8
|
|
8
|
-
|
9
|
-
|
9
|
+
it 'returns parsed JSON' do
|
10
|
+
expect(Api2cart::Store.new(api_key, store_key).product_count).to eq({ 'products_count' => 76 })
|
11
|
+
end
|
10
12
|
end
|
11
|
-
end
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
context 'when response contains an error', vcr: { cassette_name: 'v1_0/erroneous_request' } do
|
15
|
+
context 'specific case' do
|
16
|
+
it 'raises an exception with correspondent message' do
|
17
|
+
expect {
|
18
|
+
Api2cart::Store.new('wrong', 'even more wrong').product_count
|
19
|
+
}.to raise_error(Api2cart::Errors::IncorrectApiKey, 'Incorrect API Key')
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'general case' do
|
24
|
+
let(:api2cart_store) { Api2cart::Store.new('wrong', 'even more wrong') }
|
25
|
+
let(:error_class) { double }
|
26
|
+
|
27
|
+
subject{ api2cart_store.product_count }
|
28
|
+
|
29
|
+
before do
|
30
|
+
allow_any_instance_of(Api2cart::Client).to receive(:return_code).and_return('9')
|
31
|
+
allow_any_instance_of(Api2cart::Client).to receive(:error_message).and_return('Something went wrong')
|
32
|
+
allow(Api2cart::ErrorClassRecognizer).to receive(:call).with('9').and_return(error_class)
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'should call for ErrorClassRecognizer' do
|
36
|
+
expect_any_instance_of(Kernel).to receive(:raise).with(error_class, 'Something went wrong')
|
37
|
+
|
38
|
+
subject
|
39
|
+
end
|
19
40
|
end
|
20
41
|
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context 'when API version is configured' do
|
45
|
+
let!(:current_api_version) { Api2cart.api_version }
|
21
46
|
|
22
|
-
|
23
|
-
|
24
|
-
let(:error_class) { double }
|
47
|
+
before { Api2cart.configure{ |config| config.api_version = '1.1' } }
|
48
|
+
after { Api2cart.configure{ |config| config.api_version = current_api_version } }
|
25
49
|
|
26
|
-
|
50
|
+
context 'when request is successful', vcr: { cassette_name: 'v1_1/successful_request' } do
|
51
|
+
let(:api_key) { '43ba7043badfa2cd31cfaf5dc601a884' }
|
52
|
+
let(:store_key) { '6f00bbf49f5ada8156506aba161408c6' }
|
53
|
+
|
54
|
+
it 'returns parsed JSON' do
|
55
|
+
expect(Api2cart::Store.new(api_key, store_key).product_count).to eq({ 'products_count' => 88 })
|
56
|
+
end
|
57
|
+
end
|
27
58
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
59
|
+
context 'when response contains an error', vcr: { cassette_name: 'v1_1/erroneous_request' } do
|
60
|
+
context 'specific case' do
|
61
|
+
it 'raises an exception with correspondent message' do
|
62
|
+
expect {
|
63
|
+
Api2cart::Store.new('wrong', 'even more wrong').product_count
|
64
|
+
}.to raise_error(Api2cart::Errors::IncorrectApiKey, 'Incorrect API Key')
|
65
|
+
end
|
32
66
|
end
|
33
67
|
|
34
|
-
|
35
|
-
|
68
|
+
context 'general case' do
|
69
|
+
let(:api2cart_store) { Api2cart::Store.new('wrong', 'even more wrong') }
|
70
|
+
let(:error_class) { double }
|
71
|
+
|
72
|
+
subject{ api2cart_store.product_count }
|
73
|
+
|
74
|
+
before do
|
75
|
+
allow_any_instance_of(Api2cart::Client).to receive(:return_code).and_return('9')
|
76
|
+
allow_any_instance_of(Api2cart::Client).to receive(:error_message).and_return('Something went wrong')
|
77
|
+
allow(Api2cart::ErrorClassRecognizer).to receive(:call).with('9').and_return(error_class)
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'should call for ErrorClassRecognizer' do
|
81
|
+
expect_any_instance_of(Kernel).to receive(:raise).with(error_class, 'Something went wrong')
|
36
82
|
|
37
|
-
|
83
|
+
subject
|
84
|
+
end
|
38
85
|
end
|
39
86
|
end
|
40
87
|
end
|
@@ -1,19 +1,45 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Api2cart do
|
4
|
-
context 'when
|
5
|
-
|
6
|
-
|
4
|
+
context 'when API version is default' do
|
5
|
+
context 'when proxy URL is given', vcr: { cassette_name: 'v1_0/successful_request' } do
|
6
|
+
let(:api_key) { '43ba7043badfa2cd31cfaf5dc601a884' }
|
7
|
+
let(:store_key) { '6f00bbf49f5ada8156506aba161408c6' }
|
7
8
|
|
8
|
-
|
9
|
+
let(:store_with_proxy) { Api2cart::Store.new api_key, store_key, proxy: 'http://anti-throttling-proxy.local:1080' }
|
9
10
|
|
10
|
-
|
11
|
-
|
11
|
+
it 'sends request via proxy (see cassette)' do
|
12
|
+
expect(store_with_proxy.product_count).to eq({ 'products_count' => 76 })
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'extracts hostname and port from proxy URL' do
|
16
|
+
expect(Net::HTTP).to receive(:new).with('api.api2cart.com', 80, 'anti-throttling-proxy.local', 1080).and_call_original
|
17
|
+
store_with_proxy.product_count
|
18
|
+
end
|
12
19
|
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'when API version is configured' do
|
23
|
+
|
24
|
+
let!(:current_api_version) { Api2cart.api_version }
|
25
|
+
|
26
|
+
before { Api2cart.configure{ |config| config.api_version = '1.1' } }
|
27
|
+
after { Api2cart.configure{ |config| config.api_version = current_api_version } }
|
28
|
+
|
29
|
+
context 'when proxy URL is given', vcr: { cassette_name: 'v1_1/successful_request' } do
|
30
|
+
let(:api_key) { '43ba7043badfa2cd31cfaf5dc601a884' }
|
31
|
+
let(:store_key) { '6f00bbf49f5ada8156506aba161408c6' }
|
32
|
+
|
33
|
+
let(:store_with_proxy) { Api2cart::Store.new api_key, store_key, proxy: 'http://anti-throttling-proxy.local:1080' }
|
34
|
+
|
35
|
+
it 'sends request via proxy (see cassette)' do
|
36
|
+
expect(store_with_proxy.product_count).to eq({ 'products_count' => 88 })
|
37
|
+
end
|
13
38
|
|
14
|
-
|
15
|
-
|
16
|
-
|
39
|
+
it 'extracts hostname and port from proxy URL' do
|
40
|
+
expect(Net::HTTP).to receive(:new).with('api.api2cart.com', 80, 'anti-throttling-proxy.local', 1080).and_call_original
|
41
|
+
store_with_proxy.product_count
|
42
|
+
end
|
17
43
|
end
|
18
44
|
end
|
19
45
|
end
|
File without changes
|
File without changes
|
@@ -0,0 +1,47 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://api.api2cart.com/v1.1/product.count.json?api_key=wrong&store_key=even%20more%20wrong
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
|
+
Accept:
|
13
|
+
- "*/*"
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Server:
|
22
|
+
- nginx
|
23
|
+
Date:
|
24
|
+
- Tue, 09 Jan 2018 17:36:42 GMT
|
25
|
+
Content-Type:
|
26
|
+
- application/json; charset=utf-8
|
27
|
+
Transfer-Encoding:
|
28
|
+
- chunked
|
29
|
+
Connection:
|
30
|
+
- keep-alive
|
31
|
+
X-Powered-By:
|
32
|
+
- PHP/7.0.22
|
33
|
+
Set-Cookie:
|
34
|
+
- PHPSESSID=jn45hst5rmj1bl5m9th6f6e2k6; path=/
|
35
|
+
Expires:
|
36
|
+
- Thu, 19 Nov 1981 08:52:00 GMT
|
37
|
+
Cache-Control:
|
38
|
+
- no-store, no-cache, must-revalidate
|
39
|
+
Pragma:
|
40
|
+
- no-cache
|
41
|
+
body:
|
42
|
+
encoding: ASCII-8BIT
|
43
|
+
string: '{"return_code" : 2, "return_message": "Incorrect API Key", "result"
|
44
|
+
: {}}'
|
45
|
+
http_version:
|
46
|
+
recorded_at: Tue, 09 Jan 2018 17:36:41 GMT
|
47
|
+
recorded_with: VCR 4.0.0
|
@@ -0,0 +1,46 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://api.api2cart.com/v1.1/product.count.json?api_key=43ba7043badfa2cd31cfaf5dc601a884&store_key=6f00bbf49f5ada8156506aba161408c6
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
|
+
Accept:
|
13
|
+
- "*/*"
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Server:
|
22
|
+
- nginx
|
23
|
+
Date:
|
24
|
+
- Tue, 09 Jan 2018 17:36:41 GMT
|
25
|
+
Content-Type:
|
26
|
+
- application/json; charset=utf-8
|
27
|
+
Transfer-Encoding:
|
28
|
+
- chunked
|
29
|
+
Connection:
|
30
|
+
- keep-alive
|
31
|
+
X-Powered-By:
|
32
|
+
- PHP/7.0.22
|
33
|
+
Set-Cookie:
|
34
|
+
- PHPSESSID=lmqe0ihr21p0flkb5lng7qbns1; path=/
|
35
|
+
Expires:
|
36
|
+
- Thu, 19 Nov 1981 08:52:00 GMT
|
37
|
+
Cache-Control:
|
38
|
+
- no-store, no-cache, must-revalidate
|
39
|
+
Pragma:
|
40
|
+
- no-cache
|
41
|
+
body:
|
42
|
+
encoding: ASCII-8BIT
|
43
|
+
string: '{"return_code" : 0, "return_message": "", "result" : {"products_count":88}}'
|
44
|
+
http_version:
|
45
|
+
recorded_at: Tue, 09 Jan 2018 17:36:41 GMT
|
46
|
+
recorded_with: VCR 4.0.0
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: api2cart-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anton Pershakov
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2021-07-14 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|
@@ -30,30 +30,30 @@ dependencies:
|
|
30
30
|
name: bundler
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
32
32
|
requirements:
|
33
|
-
- - "
|
33
|
+
- - ">="
|
34
34
|
- !ruby/object:Gem::Version
|
35
|
-
version: '
|
35
|
+
version: '0'
|
36
36
|
type: :development
|
37
37
|
prerelease: false
|
38
38
|
version_requirements: !ruby/object:Gem::Requirement
|
39
39
|
requirements:
|
40
|
-
- - "
|
40
|
+
- - ">="
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version: '
|
42
|
+
version: '0'
|
43
43
|
- !ruby/object:Gem::Dependency
|
44
44
|
name: rake
|
45
45
|
requirement: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
|
-
- - "
|
47
|
+
- - ">="
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: '
|
49
|
+
version: '0'
|
50
50
|
type: :development
|
51
51
|
prerelease: false
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
53
53
|
requirements:
|
54
|
-
- - "
|
54
|
+
- - ">="
|
55
55
|
- !ruby/object:Gem::Version
|
56
|
-
version: '
|
56
|
+
version: '0'
|
57
57
|
- !ruby/object:Gem::Dependency
|
58
58
|
name: rspec
|
59
59
|
requirement: !ruby/object:Gem::Requirement
|
@@ -119,6 +119,7 @@ files:
|
|
119
119
|
- lib/api2cart/store.rb
|
120
120
|
- lib/api2cart/version.rb
|
121
121
|
- spec/api2cart/client_spec.rb
|
122
|
+
- spec/api2cart/configuration_spec.rb
|
122
123
|
- spec/api2cart/error_class_recognizer_spec.rb
|
123
124
|
- spec/api2cart/errors/api_access_denied_spec.rb
|
124
125
|
- spec/api2cart/errors/api_key_disabled_spec.rb
|
@@ -150,8 +151,10 @@ files:
|
|
150
151
|
- spec/api2cart/store_spec.rb
|
151
152
|
- spec/api2cart/with_proxy_spec.rb
|
152
153
|
- spec/spec_helper.rb
|
153
|
-
- spec/vcr_cassettes/erroneous_request.yml
|
154
|
-
- spec/vcr_cassettes/successful_request.yml
|
154
|
+
- spec/vcr_cassettes/v1_0/erroneous_request.yml
|
155
|
+
- spec/vcr_cassettes/v1_0/successful_request.yml
|
156
|
+
- spec/vcr_cassettes/v1_1/erroneous_request.yml
|
157
|
+
- spec/vcr_cassettes/v1_1/successful_request.yml
|
155
158
|
homepage: https://github.com/DanielVartanov/api2cart-ruby
|
156
159
|
licenses:
|
157
160
|
- MIT
|
@@ -171,13 +174,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
171
174
|
- !ruby/object:Gem::Version
|
172
175
|
version: '0'
|
173
176
|
requirements: []
|
174
|
-
|
175
|
-
rubygems_version: 2.4.4
|
177
|
+
rubygems_version: 3.0.9
|
176
178
|
signing_key:
|
177
179
|
specification_version: 4
|
178
180
|
summary: Ruby client for API2Cart
|
179
181
|
test_files:
|
180
182
|
- spec/api2cart/client_spec.rb
|
183
|
+
- spec/api2cart/configuration_spec.rb
|
181
184
|
- spec/api2cart/error_class_recognizer_spec.rb
|
182
185
|
- spec/api2cart/errors/api_access_denied_spec.rb
|
183
186
|
- spec/api2cart/errors/api_key_disabled_spec.rb
|
@@ -209,5 +212,7 @@ test_files:
|
|
209
212
|
- spec/api2cart/store_spec.rb
|
210
213
|
- spec/api2cart/with_proxy_spec.rb
|
211
214
|
- spec/spec_helper.rb
|
212
|
-
- spec/vcr_cassettes/erroneous_request.yml
|
213
|
-
- spec/vcr_cassettes/successful_request.yml
|
215
|
+
- spec/vcr_cassettes/v1_0/erroneous_request.yml
|
216
|
+
- spec/vcr_cassettes/v1_0/successful_request.yml
|
217
|
+
- spec/vcr_cassettes/v1_1/erroneous_request.yml
|
218
|
+
- spec/vcr_cassettes/v1_1/successful_request.yml
|