cc-cli 0.0.1 → 0.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.
- checksums.yaml +5 -13
- data/.gitignore +2 -1
- data/README.md +3 -11
- data/circle.yml +4 -1
- data/config/config.yml +4 -4
- data/lib/cc/api/explorer.rb +8 -8
- data/lib/cc/api/explorer/version.rb +1 -1
- data/lib/cc/api/http/http_requestor.rb +2 -2
- data/lib/cc/api/parser/arguments_parser.rb +7 -7
- data/lib/cc/api/util/config_reader.rb +2 -3
- data/spec/dummy_data/{lattice_offers.json → market_data_offers.json} +0 -0
- data/spec/dummy_data/{lattice_products.json → market_data_products.json} +0 -0
- data/spec/dummy_data/{lattice_stores.json → market_data_stores.json} +0 -0
- data/spec/explorer_spec.rb +20 -20
- data/spec/http/http_requestor_spec.rb +6 -6
- data/spec/parser/arguments_mapper_spec.rb +4 -4
- data/spec/parser/arguments_parser_spec.rb +5 -5
- data/spec/parser/json_parser_spec.rb +7 -7
- data/spec/spec_helper.rb +10 -12
- metadata +25 -24
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
ZjQxMzZkODk4ZDZjYjZjZmEyYjhkMjE0ODk3NWM2ODNkNjgyOWQxOA==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e9da8373affb1432638dd806deab62e18222243f
|
4
|
+
data.tar.gz: b1a3ed80586614d6be73c75c3b2f752ba89984ce
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
NGQ2YzAxOTU0OGU2YTEzNjllMDg3MWVmZDRjN2YzNjkzOWJhNjljYjk0MDZk
|
11
|
-
MDlmMTk3MWQ2MDExN2EwZDJmMzcyMzk1NGNkZmNmNTg1YTQ3ODk=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
MmFlNzQ5YmZhYWIxODk3MjZiYTUyMWRiZTI4NWFjZmY3OWQxMDJhNTA5NjNm
|
14
|
-
MTQ2N2QzNDhjMmMwYzVhNmY3M2VlMDQzY2NhOTBlNDY0ZmRkMjc4MzgwZGYy
|
15
|
-
NGY2YTE1NTZjYmMxZDNiODdlODMwNDYzYTViMDA2Yzg0ZGM3NmU=
|
6
|
+
metadata.gz: a490ff560e7a256591d922de611a787b250746ea795ef2505b1f58935ded1fb261fe7ad124bae47c2623db40767c8c2c1c95a2f192a1579ed61afb364ba53012
|
7
|
+
data.tar.gz: de3eb0699c52dc71d09d204cbaeb121bd33fd95b992dc467d0678d7e8169d6d3b06a154f490838e493a2618a36776824f96a271f328307094d48e9db2ebd9d10
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -4,15 +4,7 @@ This is a command line client for exploring CrystalCommerce APIs
|
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
gem 'cc-cli', :git => "git@github.com:crystalcommerce/cc-cli.git"
|
10
|
-
|
11
|
-
And then execute:
|
12
|
-
|
13
|
-
$ bundle
|
14
|
-
|
15
|
-
Or install it yourself as (not yet available as of the moment):
|
7
|
+
Install it:
|
16
8
|
|
17
9
|
$ gem install cc-cli
|
18
10
|
|
@@ -23,7 +15,7 @@ To view help:
|
|
23
15
|
$ cc-cli
|
24
16
|
|
25
17
|
The license key pair `<ssologin>` and `<key>` are basically just basic auth username and password respectively.
|
26
|
-
To obtain a license key, contact:
|
18
|
+
To obtain a license key, contact: Jerad Ellison or call (206) 274-7437 Ext. 3.
|
27
19
|
|
28
20
|
Add these lines in your ~/.bashrc (linux) or ~/.profile (mac) file:
|
29
21
|
|
@@ -45,7 +37,7 @@ These are the available commands:
|
|
45
37
|
|
46
38
|
$ cc-cli catalog [products] | [product_types] | [stores] | [categories]
|
47
39
|
$ cc-cli help [COMMND]
|
48
|
-
$ cc-cli
|
40
|
+
$ cc-cli market_data [products --id <PRODUCT ID> --skus <PRODUCT SKUS separated by ','>] | [offers --id <PRODUCT ID> --skus <PRODUCT SKUS separated by ','>] | [stores]
|
49
41
|
$ cc-cli store [products --token <access token> --store <store name>]
|
50
42
|
|
51
43
|
To choose columns/json keys to display:
|
data/circle.yml
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
test:
|
2
2
|
override:
|
3
|
+
- rvm use --default 1.9.1
|
4
|
+
- bundle install
|
5
|
+
- bundle exec rspec
|
3
6
|
- rvm use --default 1.9.3
|
4
7
|
- bundle install
|
5
8
|
- bundle exec rspec
|
@@ -8,4 +11,4 @@ test:
|
|
8
11
|
- bundle exec rspec
|
9
12
|
- rvm use --default 2.1.1
|
10
13
|
- bundle install
|
11
|
-
- bundle exec rspec
|
14
|
+
- bundle exec rspec
|
data/config/config.yml
CHANGED
@@ -1,12 +1,12 @@
|
|
1
|
-
|
1
|
+
market_data:
|
2
2
|
products:
|
3
|
-
url: https://api.crystalcommerce.com/v1/
|
3
|
+
url: https://api.crystalcommerce.com/v1/market_data/products
|
4
4
|
target_key_chain: "product.variants.FIRST.variant.store_variants"
|
5
5
|
stores:
|
6
|
-
url: https://api.crystalcommerce.com/v1/
|
6
|
+
url: https://api.crystalcommerce.com/v1/market_data/stores
|
7
7
|
target_key_chain: ""
|
8
8
|
offers:
|
9
|
-
url: https://api.crystalcommerce.com/v1/
|
9
|
+
url: https://api.crystalcommerce.com/v1/market_data/offers
|
10
10
|
method: POST
|
11
11
|
target_key_chain: "PRODUCT_ID"
|
12
12
|
catalog:
|
data/lib/cc/api/explorer.rb
CHANGED
@@ -15,9 +15,9 @@ module Cc
|
|
15
15
|
class CLI < Thor
|
16
16
|
DEFAULT_COLS =
|
17
17
|
{
|
18
|
-
"
|
19
|
-
"
|
20
|
-
"
|
18
|
+
"market_data-products" => ["store_variant.store_name", "store_variant.qty", "store_variant.buy_price.money.currency"],
|
19
|
+
"market_data-stores" => ["store.name", "store.state", "store.url"],
|
20
|
+
"market_data-offers" => ["store.name", "buy_price.cents", "sell_price.cents"],
|
21
21
|
"catalog-products" => ["name", "barcode", "weight"],
|
22
22
|
"catalog-product_types" => ["name", "id", "default_weight"],
|
23
23
|
"catalog-stores" => ["name", "postal_code", "url"],
|
@@ -52,21 +52,21 @@ module Cc
|
|
52
52
|
option :json, :type => :boolean, :desc => DESC["json"]
|
53
53
|
option :id, :desc => DESC["id"]
|
54
54
|
option :skus, :desc => DESC["skus"]
|
55
|
-
desc "
|
55
|
+
desc "market_data [products --id <PRODUCT ID> --skus <PRODUCT SKUS separated by ','>] | [offers --id <PRODUCT ID> --skus <PRODUCT SKUS separated by comma>] | [stores]",
|
56
56
|
"The Market Data APIs track the Prices, Quantities, and similar data. It also indicates which stores in the CrystalCommerce in-network currently has those products for sale."
|
57
|
-
def
|
57
|
+
def market_data(subcommand)
|
58
58
|
case subcommand
|
59
59
|
when "products"
|
60
60
|
# { product : { variants : { store_variants : [ { store_variant : { ... } } ] } } }
|
61
|
-
args = {:action => "
|
61
|
+
args = {:action => "market_data-products", :params => {:id => options[:id], :skus => options[:skus].to_s.split(',') } }
|
62
62
|
perform(args)
|
63
63
|
when "stores"
|
64
64
|
# { [ { store : { ... } } ] }
|
65
|
-
args = {:action => "
|
65
|
+
args = {:action => "market_data-stores"}
|
66
66
|
perform(args)
|
67
67
|
when "offers"
|
68
68
|
# { <PRODUCT ID> : [ { ... } ] }
|
69
|
-
args = {:action => "
|
69
|
+
args = {:action => "market_data-offers", :params => {:id => options[:id], :skus => options[:skus].to_s.split(',') } }
|
70
70
|
perform(args)
|
71
71
|
else
|
72
72
|
Cc::Api::Parser::ArgumentsParser.raise_cli_arguments_exception
|
@@ -3,10 +3,10 @@ require 'httparty'
|
|
3
3
|
module Cc
|
4
4
|
module Api
|
5
5
|
module Http
|
6
|
-
class ServerProblemException <
|
6
|
+
class ServerProblemException < StandardError
|
7
7
|
end
|
8
8
|
|
9
|
-
class UnauthorizedAccessException <
|
9
|
+
class UnauthorizedAccessException < StandardError
|
10
10
|
end
|
11
11
|
|
12
12
|
class HttpRequestor
|
@@ -3,7 +3,7 @@ require 'cc/api/parser/arguments_mapper'
|
|
3
3
|
module Cc
|
4
4
|
module Api
|
5
5
|
module Parser
|
6
|
-
class CLIArgumentsException <
|
6
|
+
class CLIArgumentsException < StandardError
|
7
7
|
end
|
8
8
|
|
9
9
|
class ArgumentsParser
|
@@ -12,7 +12,7 @@ module Cc
|
|
12
12
|
def self.parse args
|
13
13
|
unless Cc::Api::Parser::ArgumentsMapper::get_url(args[:action]).nil?
|
14
14
|
if res = Cc::Api::Parser::ArgumentsMapper.map(args)
|
15
|
-
self.build_action_url args, res
|
15
|
+
self.build_action_url args, res
|
16
16
|
else
|
17
17
|
self.raise_cli_arguments_exception
|
18
18
|
end
|
@@ -33,17 +33,17 @@ module Cc
|
|
33
33
|
|
34
34
|
def self.build_action_url args, res
|
35
35
|
case args[:action]
|
36
|
-
when "
|
36
|
+
when "market_data-products"
|
37
37
|
#TODO fix this
|
38
38
|
{ :request => { url: Cc::Api::Parser::ArgumentsMapper::get_url(args[:action])[:url] + "/#{res[:id]}?" + res[:skus].collect{|x| "skus[]=#{x}" }.join('&') } }
|
39
|
-
when "
|
39
|
+
when "market_data-stores"
|
40
40
|
{ :request => Cc::Api::Parser::ArgumentsMapper::get_url(args[:action]) }
|
41
|
-
when "
|
42
|
-
{ :request => {
|
41
|
+
when "market_data-offers"
|
42
|
+
{ :request => {
|
43
43
|
url: Cc::Api::Parser::ArgumentsMapper::get_url(args[:action])[:url],
|
44
44
|
body: {"search" => {"skus" => {"#{res[:id]}" => res[:skus].collect{|x| x.to_s }}}},
|
45
45
|
method: Cc::Api::Parser::ArgumentsMapper::get_url(args[:action])[:method]
|
46
|
-
}
|
46
|
+
}
|
47
47
|
}
|
48
48
|
when "catalog-products"
|
49
49
|
{ :request => { :url => Cc::Api::Parser::ArgumentsMapper::get_url(args[:action])[:url] + "?page=#{res[:page]}" } }
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Cc
|
2
2
|
module Api
|
3
3
|
module Util
|
4
|
-
class LicenseKeysException <
|
4
|
+
class LicenseKeysException < StandardError
|
5
5
|
end
|
6
6
|
|
7
7
|
class ConfigReader
|
@@ -16,8 +16,7 @@ module Cc
|
|
16
16
|
def get_keys
|
17
17
|
login = ENV.fetch("CC_API_LOGIN")
|
18
18
|
key = ENV.fetch("CC_API_KEY")
|
19
|
-
raise_license_key_exception if login.empty?
|
20
|
-
raise_license_key_exception if key.empty?
|
19
|
+
raise_license_key_exception if login.empty? || key.empty?
|
21
20
|
[login, key]
|
22
21
|
rescue KeyError
|
23
22
|
raise_license_key_exception
|
File without changes
|
File without changes
|
File without changes
|
data/spec/explorer_spec.rb
CHANGED
@@ -10,7 +10,7 @@ describe Cc::Api::Explorer::CLI do
|
|
10
10
|
|
11
11
|
let(:cc) { cc = Cc::Api::Explorer::CLI.new }
|
12
12
|
|
13
|
-
context "
|
13
|
+
context "market_data" do
|
14
14
|
let(:skus) { ["123abc", "456def"] }
|
15
15
|
|
16
16
|
context "products" do
|
@@ -20,17 +20,17 @@ describe Cc::Api::Explorer::CLI do
|
|
20
20
|
|
21
21
|
context "something is returned" do
|
22
22
|
before(:each) do
|
23
|
-
stub_request(:get, "https://abc:123@api.crystalcommerce.com/v1/
|
24
|
-
to_return(:status => 200, :body =>
|
23
|
+
stub_request(:get, "https://abc:123@api.crystalcommerce.com/v1/market_data/products/#{id}?skus[]=#{skus[0]}").
|
24
|
+
to_return(:status => 200, :body => MARKET_DATA_PRODUCTS_RESPONSE, :headers => {"Content-Type" => "application/json"})
|
25
25
|
|
26
|
-
stub_request(:get, "https://abc:123@api.crystalcommerce.com/v1/
|
27
|
-
to_return(:status => 200, :body =>
|
26
|
+
stub_request(:get, "https://abc:123@api.crystalcommerce.com/v1/market_data/products/#{id}?skus[]=#{skus[0]}&skus[]=#{skus[1]}").
|
27
|
+
to_return(:status => 200, :body => MARKET_DATA_PRODUCTS_RESPONSE, :headers => {"Content-Type" => "application/json"})
|
28
28
|
end
|
29
29
|
|
30
30
|
it "returns something if arguments are correct" do
|
31
31
|
|
32
32
|
printed = capture_stdout do
|
33
|
-
args = ["
|
33
|
+
args = ["market_data", "products", "--id", "123", "--skus", "123abc"]
|
34
34
|
options = Cc::Api::Explorer::CLI.start(args)
|
35
35
|
end
|
36
36
|
|
@@ -40,7 +40,7 @@ describe Cc::Api::Explorer::CLI do
|
|
40
40
|
it "returns something if arguments are correct for multiple skus" do
|
41
41
|
|
42
42
|
printed = capture_stdout do
|
43
|
-
args = ["
|
43
|
+
args = ["market_data", "products", "--id", "123", "--skus", skus.join(',')]
|
44
44
|
options = Cc::Api::Explorer::CLI.start(args)
|
45
45
|
end
|
46
46
|
|
@@ -51,7 +51,7 @@ describe Cc::Api::Explorer::CLI do
|
|
51
51
|
context "something is not returned" do
|
52
52
|
it "returns an exception if arguments are not correct" do
|
53
53
|
printed = capture_stdout do
|
54
|
-
args = ["
|
54
|
+
args = ["market_data", "products", "wrong", "arguments"]
|
55
55
|
options = Cc::Api::Explorer::CLI.start(args)
|
56
56
|
end
|
57
57
|
|
@@ -59,11 +59,11 @@ describe Cc::Api::Explorer::CLI do
|
|
59
59
|
end
|
60
60
|
|
61
61
|
it "returns blank if blank variants was returned" do
|
62
|
-
stub_request(:get, "https://abc:123@api.crystalcommerce.com/v1/
|
62
|
+
stub_request(:get, "https://abc:123@api.crystalcommerce.com/v1/market_data/products/#{id}?skus[]=#{skus[0]}&skus[]=#{skus[1]}").
|
63
63
|
to_return(:status => 200, :body => '{"product":{"product_id":201750,"variants":[]}}', :headers => {"Content-Type" => "application/json"})
|
64
64
|
|
65
65
|
printed = capture_stdout do
|
66
|
-
args = ["
|
66
|
+
args = ["market_data", "products", "--id", "123", "--skus", skus.join(',')]
|
67
67
|
options = Cc::Api::Explorer::CLI.start(args)
|
68
68
|
end
|
69
69
|
|
@@ -71,12 +71,12 @@ describe Cc::Api::Explorer::CLI do
|
|
71
71
|
end
|
72
72
|
|
73
73
|
it "returns blank if nil json was returned" do
|
74
|
-
stub_request(:get, "https://abc:123@api.crystalcommerce.com/v1/
|
74
|
+
stub_request(:get, "https://abc:123@api.crystalcommerce.com/v1/market_data/products/#{id}?skus[]=#{skus[0]}&skus[]=#{skus[1]}").
|
75
75
|
to_return(:status => 200, :body => nil, :headers => {"Content-Type" => "application/json"})
|
76
76
|
|
77
77
|
|
78
78
|
printed = capture_stdout do
|
79
|
-
args = ["
|
79
|
+
args = ["market_dataproducts", "--id", "123", "--skus", skus.join(',')]
|
80
80
|
options = Cc::Api::Explorer::CLI.start(args)
|
81
81
|
end
|
82
82
|
|
@@ -89,11 +89,11 @@ describe Cc::Api::Explorer::CLI do
|
|
89
89
|
let(:expected_table_row) { ["Lettie Traffanstedt'", "", ""]}
|
90
90
|
context "something is returned" do
|
91
91
|
it "returns something" do
|
92
|
-
stub_request(:get, "https://abc:123@api.crystalcommerce.com/v1/
|
93
|
-
to_return(:status => 200, :body =>
|
92
|
+
stub_request(:get, "https://abc:123@api.crystalcommerce.com/v1/market_data/stores").
|
93
|
+
to_return(:status => 200, :body => MARKET_DATA_STORES_RESPONSE, :headers => {"Content-Type" => "application/json"})
|
94
94
|
|
95
95
|
printed = capture_stdout do
|
96
|
-
args = ["
|
96
|
+
args = ["market_data", "stores"]
|
97
97
|
options = Cc::Api::Explorer::CLI.start(args)
|
98
98
|
end
|
99
99
|
|
@@ -103,11 +103,11 @@ describe Cc::Api::Explorer::CLI do
|
|
103
103
|
|
104
104
|
context "something is not returned" do
|
105
105
|
it "returns nothing" do
|
106
|
-
stub_request(:get, "https://abc:123@api.crystalcommerce.com/v1/
|
106
|
+
stub_request(:get, "https://abc:123@api.crystalcommerce.com/v1/market_data/stores").
|
107
107
|
to_return(:status => 200, :body => nil, :headers => {"Content-Type" => "application/json"})
|
108
108
|
|
109
109
|
printed = capture_stdout do
|
110
|
-
args = ["
|
110
|
+
args = ["market_data", "stores"]
|
111
111
|
options = Cc::Api::Explorer::CLI.start(args)
|
112
112
|
end
|
113
113
|
|
@@ -121,12 +121,12 @@ describe Cc::Api::Explorer::CLI do
|
|
121
121
|
context "something is returned" do
|
122
122
|
it "returns something" do
|
123
123
|
pending
|
124
|
-
stub_request(:post, "https://abc:123@api.crystalcommerce.com/v1/
|
124
|
+
stub_request(:post, "https://abc:123@api.crystalcommerce.com/v1/market_data/offers").
|
125
125
|
with(:body => "{\"search\":{\"skus\":{\"201750\":[\"123abc\",\"456def\"]}}}", :headers => {"Content-Type" => "application/json"}).
|
126
|
-
to_return(:status => 200, :body =>
|
126
|
+
to_return(:status => 200, :body => MARKET_DATA_OFFERS_RESPONSE, :headers => {"Content-Type" => "application/json"})
|
127
127
|
|
128
128
|
#printed = capture_stdout do
|
129
|
-
args = ["
|
129
|
+
args = ["market_data", "offers", "--id", "201750", "--skus", skus.join(',')]
|
130
130
|
options = Cc::Api::Explorer::CLI.start(args)
|
131
131
|
#end
|
132
132
|
|
@@ -8,12 +8,12 @@ describe Cc::Api::Http::HttpRequestor do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
context "returns valid JSON response for a post request" do
|
11
|
-
let(:param) { {request: { url: "https://abc:123@api.crystalcommerce.com/v1/
|
11
|
+
let(:param) { {request: { url: "https://abc:123@api.crystalcommerce.com/v1/market_data/offers", :body=>{"search"=>{"skus"=>{"201750"=>["123abc", "456def"]}}}, method: "POST"} } }
|
12
12
|
|
13
13
|
it "returns valid JSON response for a post request" do
|
14
|
-
stub_request(:post, "https://abc:123@api.crystalcommerce.com/v1/
|
14
|
+
stub_request(:post, "https://abc:123@api.crystalcommerce.com/v1/market_data/offers").
|
15
15
|
with(:body => "{\"search\":{\"skus\":{\"201750\":[\"123abc\",\"456def\"]}}}", :headers => {"Content-Type" => "application/json"}).
|
16
|
-
to_return(:status => 200, :body =>
|
16
|
+
to_return(:status => 200, :body => MARKET_DATA_OFFERS_RESPONSE, :headers => {"Content-Type" => "application/json"})
|
17
17
|
|
18
18
|
result = subject.request_for_json param
|
19
19
|
result.should_not eq nil
|
@@ -22,7 +22,7 @@ describe Cc::Api::Http::HttpRequestor do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
context "raises error" do
|
25
|
-
let(:param) { {request: { url: "https://abc:123@api.crystalcommerce.com/v1/
|
25
|
+
let(:param) { {request: { url: "https://abc:123@api.crystalcommerce.com/v1/market_data/offers", :body=>{"search"=>{"skus"=>{"201750"=>["123abc", "456def"]}}}, method: "POST"} } }
|
26
26
|
|
27
27
|
it "if license keys are not set properly" do
|
28
28
|
Cc::Api::Util::ConfigReader.stub(:license).and_raise(Cc::Api::Util::LicenseKeysException)
|
@@ -32,7 +32,7 @@ describe Cc::Api::Http::HttpRequestor do
|
|
32
32
|
end
|
33
33
|
|
34
34
|
it "if not enough privileges" do
|
35
|
-
stub_request(:post, "https://abc:123@api.crystalcommerce.com/v1/
|
35
|
+
stub_request(:post, "https://abc:123@api.crystalcommerce.com/v1/market_data/offers").
|
36
36
|
with(:body => "{\"search\":{\"skus\":{\"201750\":[\"123abc\",\"456def\"]}}}", :headers => {"Content-Type" => "application/json"}).
|
37
37
|
to_return(:status => 401, :body => "", :headers => {"Content-Type" => "application/json"})
|
38
38
|
|
@@ -42,7 +42,7 @@ describe Cc::Api::Http::HttpRequestor do
|
|
42
42
|
end
|
43
43
|
|
44
44
|
it "if there's a server error" do
|
45
|
-
stub_request(:post, "https://abc:123@api.crystalcommerce.com/v1/
|
45
|
+
stub_request(:post, "https://abc:123@api.crystalcommerce.com/v1/market_data/offers").
|
46
46
|
with(:body => "{\"search\":{\"skus\":{\"201750\":[\"123abc\",\"456def\"]}}}", :headers => {"Content-Type" => "application/json"}).
|
47
47
|
to_return(:status => 500, :body => "", :headers => {"Content-Type" => "application/json"})
|
48
48
|
|
@@ -3,23 +3,23 @@ require 'spec_helper'
|
|
3
3
|
describe Cc::Api::Parser::ArgumentsMapper do
|
4
4
|
describe "map" do
|
5
5
|
let(:rand) { "123" }
|
6
|
-
context "
|
6
|
+
context "market_data" do
|
7
7
|
context "products" do
|
8
|
-
let(:args) { {:action => "
|
8
|
+
let(:args) { {:action => "market_data-products", :params => { :id => rand, :skus => [rand] } } }
|
9
9
|
let(:wrong_args) { {:action => "this", :is => "a", :wrong => "argument" } }
|
10
10
|
|
11
11
|
it_behaves_like "arguments mapper returning json with id and skus"
|
12
12
|
end
|
13
13
|
|
14
14
|
context "stores" do
|
15
|
-
let(:args) { { :action => "
|
15
|
+
let(:args) { { :action => "market_data-stores" } }
|
16
16
|
|
17
17
|
it_behaves_like "arguments mapper returning blank json"
|
18
18
|
end
|
19
19
|
|
20
20
|
context "offers" do
|
21
21
|
let(:rand) { "123" }
|
22
|
-
let(:args) { { :action => "
|
22
|
+
let(:args) { { :action => "market_data-offers", :params => { :id => rand, :skus => [rand] } } }
|
23
23
|
|
24
24
|
it "matches the args and creates a json object that maps the args" do
|
25
25
|
res = Cc::Api::Parser::ArgumentsMapper.map args
|
@@ -7,27 +7,27 @@ describe Cc::Api::Parser::ArgumentsParser do
|
|
7
7
|
end
|
8
8
|
|
9
9
|
describe "parse" do
|
10
|
-
context "
|
11
|
-
let(:url) { "https://api.crystalcommerce.com/v1/
|
10
|
+
context "market_data" do
|
11
|
+
let(:url) { "https://api.crystalcommerce.com/v1/market_data/" }
|
12
12
|
let(:rand) { "123" }
|
13
13
|
|
14
14
|
context "products" do
|
15
15
|
let(:expected_result) { {request: {url: url + "products/" + rand + "?skus[]=" + rand } } }
|
16
|
-
let(:args) { { :action => "
|
16
|
+
let(:args) { { :action => "market_data-products", :params => { :id => rand, :skus => [ rand ] } } }
|
17
17
|
|
18
18
|
it_behaves_like "arguments parser returning expected result"
|
19
19
|
end
|
20
20
|
|
21
21
|
context "stores" do
|
22
22
|
let(:expected_result) { {request: { url: url + "stores", :target_key_chain => "" } } }
|
23
|
-
let(:args) { {:action => "
|
23
|
+
let(:args) { {:action => "market_data-stores"} }
|
24
24
|
|
25
25
|
it_behaves_like "arguments parser returning expected result"
|
26
26
|
end
|
27
27
|
|
28
28
|
context "offers" do
|
29
29
|
let(:expected_result) { {request: { url: url + "offers", :body=>{"search"=>{"skus"=>{"123"=>["123"]}}}, method: "POST"} } }
|
30
|
-
let(:args) { {:action => "
|
30
|
+
let(:args) { {:action => "market_data-offers", :params => { :id => rand, :skus => [rand] } } }
|
31
31
|
|
32
32
|
it_behaves_like "arguments parser returning expected result"
|
33
33
|
end
|
@@ -4,11 +4,11 @@ require 'json'
|
|
4
4
|
describe Cc::Api::Parser::JsonParser do
|
5
5
|
context "'vanilla' reduce" do
|
6
6
|
let(:product_id) { nil }
|
7
|
-
context "
|
7
|
+
context "market_data" do
|
8
8
|
context "products" do
|
9
|
-
let(:json_response) {
|
9
|
+
let(:json_response) { MARKET_DATA_PRODUCTS_RESPONSE }
|
10
10
|
let(:blank_json_response) {'{"product":{"product_id":123,"variants":[]}}'}
|
11
|
-
let(:action) { "
|
11
|
+
let(:action) { "market_data-products" }
|
12
12
|
let(:chosen_columns) { ["store_variant.sku", "store_variant.store_name", "store_variant.store_business_name", "store_variant.sell_price.money.cents"] }
|
13
13
|
|
14
14
|
it_behaves_like "json parser"
|
@@ -17,18 +17,18 @@ describe Cc::Api::Parser::JsonParser do
|
|
17
17
|
|
18
18
|
context "offers" do
|
19
19
|
let(:product_id) { "201750" }
|
20
|
-
let(:json_response) {
|
20
|
+
let(:json_response) { MARKET_DATA_OFFERS_RESPONSE }
|
21
21
|
let(:blank_json_response) {'{"201750" : []}'}
|
22
|
-
let(:action) { "
|
22
|
+
let(:action) { "market_data-offers" }
|
23
23
|
let(:chosen_columns) { ["buy_price.cents", "qty", "product_url", "inventory_qty"] }
|
24
24
|
|
25
25
|
it_behaves_like "json parser"
|
26
26
|
end
|
27
27
|
|
28
28
|
context "stores" do
|
29
|
-
let(:json_response) {
|
29
|
+
let(:json_response) { MARKET_DATA_STORES_RESPONSE }
|
30
30
|
let(:blank_json_response) {'[]'}
|
31
|
-
let(:action) { "
|
31
|
+
let(:action) { "market_data-stores" }
|
32
32
|
let(:chosen_columns) { ["store.id", "store.name", "store.is_active", "store.country"] }
|
33
33
|
|
34
34
|
it_behaves_like "json parser"
|
data/spec/spec_helper.rb
CHANGED
@@ -9,12 +9,12 @@ require 'pry'
|
|
9
9
|
def suppress_stdouts config #need to suppress command_line_reporter's output
|
10
10
|
original_stderr = $stderr
|
11
11
|
original_stdout = $stdout
|
12
|
-
config.before(:all) do
|
12
|
+
config.before(:all) do
|
13
13
|
# Redirect stderr and stdout
|
14
14
|
$stderr = File.new(File.join(File.dirname(__FILE__), 'dev', 'null.txt'), 'w')
|
15
15
|
$stdout = File.new(File.join(File.dirname(__FILE__), 'dev', 'null.txt'), 'w')
|
16
16
|
end
|
17
|
-
config.after(:all) do
|
17
|
+
config.after(:all) do
|
18
18
|
$stderr = original_stderr
|
19
19
|
$stdout = original_stdout
|
20
20
|
end
|
@@ -36,14 +36,12 @@ RSpec.configure do |config|
|
|
36
36
|
|
37
37
|
#suppress_stdouts config
|
38
38
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
CATALOG_PRODUCTS_RESPONSE =
|
43
|
-
CATALOG_PRODUCT_TYPES_RESPONSE =
|
44
|
-
CATALOG_STORES_RESPONSE =
|
45
|
-
CATALOG_CATEGORIES_RESPONSE =
|
46
|
-
STORE_PRODUCTS_RESPONSE =
|
39
|
+
MARKET_DATA_PRODUCTS_RESPONSE = File.read("spec/dummy_data/market_data_products.json") # sample json response
|
40
|
+
MARKET_DATA_STORES_RESPONSE = File.read("spec/dummy_data/market_data_stores.json") # sample json response
|
41
|
+
MARKET_DATA_OFFERS_RESPONSE = File.read("spec/dummy_data/market_data_offers.json") # sample json response
|
42
|
+
CATALOG_PRODUCTS_RESPONSE = File.read("spec/dummy_data/catalog_products.json") # sample json response
|
43
|
+
CATALOG_PRODUCT_TYPES_RESPONSE = File.read("spec/dummy_data/catalog_product_types.json") # sample json response
|
44
|
+
CATALOG_STORES_RESPONSE = File.read("spec/dummy_data/catalog_stores.json") # sample json response
|
45
|
+
CATALOG_CATEGORIES_RESPONSE = File.read("spec/dummy_data/catalog_categories.json") # sample json response
|
46
|
+
STORE_PRODUCTS_RESPONSE = File.read("spec/dummy_data/store_products.json") # sample json response
|
47
47
|
end
|
48
|
-
|
49
|
-
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cc-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Neil Marion dela Cruz
|
@@ -9,90 +9,90 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-04-
|
12
|
+
date: 2014-04-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: command_line_reporter
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '0'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- -
|
25
|
+
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '0'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: httparty
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- -
|
32
|
+
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: '0'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- -
|
39
|
+
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: thor
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- -
|
46
|
+
- - ">="
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: '0'
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- -
|
53
|
+
- - ">="
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '0'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: bundler
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
|
-
- - ~>
|
60
|
+
- - "~>"
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: '1.5'
|
63
63
|
type: :development
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
|
-
- - ~>
|
67
|
+
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '1.5'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: rake
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- -
|
74
|
+
- - ">="
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- -
|
81
|
+
- - ">="
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '0'
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
85
|
name: rspec
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
|
-
- -
|
88
|
+
- - ">="
|
89
89
|
- !ruby/object:Gem::Version
|
90
90
|
version: '0'
|
91
91
|
type: :development
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
|
-
- -
|
95
|
+
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '0'
|
98
98
|
description: This is a command line client for exploring CrystalCommerce APIs
|
@@ -103,8 +103,8 @@ executables:
|
|
103
103
|
extensions: []
|
104
104
|
extra_rdoc_files: []
|
105
105
|
files:
|
106
|
-
- .gitignore
|
107
|
-
- .rspec
|
106
|
+
- ".gitignore"
|
107
|
+
- ".rspec"
|
108
108
|
- Gemfile
|
109
109
|
- Guardfile
|
110
110
|
- LICENSE.txt
|
@@ -127,9 +127,9 @@ files:
|
|
127
127
|
- spec/dummy_data/catalog_product_types.json
|
128
128
|
- spec/dummy_data/catalog_products.json
|
129
129
|
- spec/dummy_data/catalog_stores.json
|
130
|
-
- spec/dummy_data/
|
131
|
-
- spec/dummy_data/
|
132
|
-
- spec/dummy_data/
|
130
|
+
- spec/dummy_data/market_data_offers.json
|
131
|
+
- spec/dummy_data/market_data_products.json
|
132
|
+
- spec/dummy_data/market_data_stores.json
|
133
133
|
- spec/dummy_data/store_products.json
|
134
134
|
- spec/explorer_spec.rb
|
135
135
|
- spec/http/http_requestor_spec.rb
|
@@ -155,12 +155,12 @@ require_paths:
|
|
155
155
|
- lib
|
156
156
|
required_ruby_version: !ruby/object:Gem::Requirement
|
157
157
|
requirements:
|
158
|
-
- -
|
158
|
+
- - ">="
|
159
159
|
- !ruby/object:Gem::Version
|
160
160
|
version: '0'
|
161
161
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
162
162
|
requirements:
|
163
|
-
- -
|
163
|
+
- - ">="
|
164
164
|
- !ruby/object:Gem::Version
|
165
165
|
version: '0'
|
166
166
|
requirements: []
|
@@ -174,9 +174,9 @@ test_files:
|
|
174
174
|
- spec/dummy_data/catalog_product_types.json
|
175
175
|
- spec/dummy_data/catalog_products.json
|
176
176
|
- spec/dummy_data/catalog_stores.json
|
177
|
-
- spec/dummy_data/
|
178
|
-
- spec/dummy_data/
|
179
|
-
- spec/dummy_data/
|
177
|
+
- spec/dummy_data/market_data_offers.json
|
178
|
+
- spec/dummy_data/market_data_products.json
|
179
|
+
- spec/dummy_data/market_data_stores.json
|
180
180
|
- spec/dummy_data/store_products.json
|
181
181
|
- spec/explorer_spec.rb
|
182
182
|
- spec/http/http_requestor_spec.rb
|
@@ -192,3 +192,4 @@ test_files:
|
|
192
192
|
- spec/support/stdout_helper.rb
|
193
193
|
- spec/support/table_fields_matcher.rb
|
194
194
|
- spec/utils/utils_spec.rb
|
195
|
+
has_rdoc:
|