kosher 0.1.12 → 0.2.0
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/README.md +29 -2
- data/Rakefile +0 -1
- data/kosher.gemspec +3 -8
- data/lib/kosher/condition.rb +5 -15
- data/lib/kosher/config.rb +45 -0
- data/lib/kosher/description.rb +9 -17
- data/lib/kosher/offer.rb +32 -25
- data/lib/kosher/seller.rb +3 -21
- data/lib/kosher/version.rb +1 -1
- data/lib/kosher.rb +1 -12
- data/spec/kosher/condition_spec.rb +7 -19
- data/spec/kosher/config_spec.rb +40 -0
- data/spec/kosher/description_spec.rb +18 -26
- data/spec/kosher/offer_spec.rb +111 -67
- data/spec/kosher/seller_spec.rb +25 -39
- data/spec/spec_helper.rb +0 -1
- metadata +9 -91
- data/lib/kosher/algorithm.rb +0 -25
- data/lib/kosher/errors.rb +0 -3
- data/lib/kosher/item.rb +0 -29
- data/lib/kosher/request.rb +0 -28
- data/lib/kosher/struct.rb +0 -15
- data/spec/fabricators/condition_fabricator.rb +0 -7
- data/spec/fabricators/offer_fabricator.rb +0 -8
- data/spec/fabricators/seller_fabricator.rb +0 -15
- data/spec/fixtures/cassette_library/0143105825.yml +0 -239
- data/spec/fixtures/cassette_library/batch-request.yml +0 -30540
- data/spec/kosher/algorithm_spec.rb +0 -49
- data/spec/kosher/item_spec.rb +0 -50
- data/spec/kosher/request_spec.rb +0 -42
- data/spec/kosher/struct_spec.rb +0 -28
- data/spec/support/credentials.rb +0 -3
- data/spec/support/faker.rb +0 -19
- data/spec/support/vcr.rb +0 -12
- data/walter_benjamin.jpg +0 -0
@@ -1,49 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Kosher
|
4
|
-
describe Algorithm do
|
5
|
-
use_vcr_cassette 'batch-request'
|
6
|
-
|
7
|
-
let(:asins) do
|
8
|
-
|
9
|
-
# The last ASIN does not exist.
|
10
|
-
%w{
|
11
|
-
0816614024 0143105825 0485113600 0816616779 0942299078
|
12
|
-
0816614008 144006654X 0486400360 0486417670 087220474X
|
13
|
-
0486454398 0268018359 1604246014 184467598X 0312427182
|
14
|
-
1844674282 0745640974 0745646441 0826489540 2081232191 }
|
15
|
-
end
|
16
|
-
|
17
|
-
let(:algorithm) do
|
18
|
-
request = Request.new(credentials)
|
19
|
-
request.locale = :us
|
20
|
-
request.batchify(asins)
|
21
|
-
request.get
|
22
|
-
end
|
23
|
-
|
24
|
-
describe ".new" do
|
25
|
-
it "raises an error if response is not valid" do
|
26
|
-
response = mock('Response')
|
27
|
-
response.stub!(:valid?).and_return(false)
|
28
|
-
|
29
|
-
expect do
|
30
|
-
Algorithm.new(response)
|
31
|
-
end.to raise_error ResponseNotValidError
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
describe "#items" do
|
36
|
-
it "should return found items" do
|
37
|
-
algorithm.items.count.should eql 19
|
38
|
-
algorithm.items.first.should be_a Item
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
describe "#errors" do
|
43
|
-
it "should return ASINs that are not found" do
|
44
|
-
algorithm.errors.count.should eql 1
|
45
|
-
algorithm.errors.first.should eql '2081232191'
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
data/spec/kosher/item_spec.rb
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Kosher
|
4
|
-
describe Item do
|
5
|
-
it "should descend from Kosher::Struct" do
|
6
|
-
Item.ancestors.should include Kosher::Struct
|
7
|
-
end
|
8
|
-
|
9
|
-
describe ".build" do
|
10
|
-
use_vcr_cassette '0143105825'
|
11
|
-
|
12
|
-
let(:asin) { '0143105825' }
|
13
|
-
|
14
|
-
it "should build an item" do
|
15
|
-
request = Request.new(credentials)
|
16
|
-
request.locale = :us
|
17
|
-
request.batchify([asin])
|
18
|
-
algorithm = request.get
|
19
|
-
response = algorithm.instance_variable_get(:@response)
|
20
|
-
doc = response.find('Item').first
|
21
|
-
item = Item.build(doc)
|
22
|
-
|
23
|
-
item.should be_a Item
|
24
|
-
item.asin.should eql asin
|
25
|
-
item.offers_count.should be > 0
|
26
|
-
item.sales_rank.should be > 0
|
27
|
-
item.offers.count.should > 0
|
28
|
-
item.offers.first.should be_a Offer
|
29
|
-
end
|
30
|
-
|
31
|
-
it "should senify Yen in Japanese requests" do
|
32
|
-
request = Request.new(credentials)
|
33
|
-
request.locale = :jp
|
34
|
-
request.batchify([asin])
|
35
|
-
algorithm = request.get
|
36
|
-
response = algorithm.instance_variable_get(:@response)
|
37
|
-
doc = response.find('Item').first
|
38
|
-
|
39
|
-
doc['Offers']['Offer'].each do |offer|
|
40
|
-
offer['OfferListing']['Price']['Amount'] = 1
|
41
|
-
end
|
42
|
-
item = Item.build(doc)
|
43
|
-
|
44
|
-
item.offers.each do |offer|
|
45
|
-
offer.cents.should eql 100
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
data/spec/kosher/request_spec.rb
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Kosher
|
4
|
-
describe Request do
|
5
|
-
let(:request) { Request.new(credentials) }
|
6
|
-
|
7
|
-
describe ".new" do
|
8
|
-
it "should define a batch request" do
|
9
|
-
request.parameters['Operation'].should eql 'ItemLookup'
|
10
|
-
request.parameters['ItemLookup.Shared.IdType'].should eql 'ASIN'
|
11
|
-
request.parameters['ItemLookup.Shared.Condition'].should eql 'All'
|
12
|
-
request.parameters['ItemLookup.Shared.MerchantId'].should eql 'All'
|
13
|
-
request.parameters['ItemLookup.Shared.ResponseGroup'].should eql ['OfferFull', 'SalesRank']
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
describe "#batchify" do
|
18
|
-
it "should add up to 20 ASINs to the worker's parameters" do
|
19
|
-
asins = (0..19).to_a
|
20
|
-
request.batchify(asins)
|
21
|
-
|
22
|
-
request.parameters['ItemLookup.1.ItemId'].should eql (0..9).to_a
|
23
|
-
request.parameters['ItemLookup.2.ItemId'].should eql (10..19).to_a
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe "#request" do
|
28
|
-
before do
|
29
|
-
VCR.http_stubbing_adapter.http_connections_allowed = true
|
30
|
-
end
|
31
|
-
|
32
|
-
it "should return an algorithm" do
|
33
|
-
Kosher::Request.stub!(:get)
|
34
|
-
|
35
|
-
request.locale = :us
|
36
|
-
request.batchify('foo')
|
37
|
-
|
38
|
-
request.get.should be_a Algorithm
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
data/spec/kosher/struct_spec.rb
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Kosher
|
4
|
-
describe Struct do
|
5
|
-
before(:all) do
|
6
|
-
class Foo < Struct.new(:bar); end
|
7
|
-
end
|
8
|
-
|
9
|
-
describe "to_json" do
|
10
|
-
it "converts to JSON" do
|
11
|
-
foo = Foo.new
|
12
|
-
foo.bar = 1
|
13
|
-
|
14
|
-
foo.to_json.should eql "{\"bar\":1}"
|
15
|
-
end
|
16
|
-
|
17
|
-
it "handles nested structs" do
|
18
|
-
foo_1 = Foo.new
|
19
|
-
foo_2 = Foo.new
|
20
|
-
|
21
|
-
foo_2.bar = 1
|
22
|
-
foo_1.bar = foo_2
|
23
|
-
|
24
|
-
foo_1.to_json.should eql "{\"bar\":{\"bar\":1}}"
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
data/spec/support/credentials.rb
DELETED
data/spec/support/faker.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
module Faker
|
2
|
-
module Amazon
|
3
|
-
class << self
|
4
|
-
def asin
|
5
|
-
raw = 9.times.map { rand(10).to_s }
|
6
|
-
(raw << Bookland::ISBN.new.send(:check_digit_10, raw)).join
|
7
|
-
end
|
8
|
-
|
9
|
-
def ean
|
10
|
-
Bookland::ISBN.to_13(asin)
|
11
|
-
end
|
12
|
-
|
13
|
-
def merchant_id
|
14
|
-
seed = ('A'..'Z').to_a + (0..9).to_a
|
15
|
-
14.times.map { seed[rand(seed.size)] }.join
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
data/spec/support/vcr.rb
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
require 'vcr'
|
2
|
-
|
3
|
-
VCR.config do |c|
|
4
|
-
c.cassette_library_dir = "#{File.dirname(__FILE__)}/../fixtures/cassette_library"
|
5
|
-
c.stub_with :webmock
|
6
|
-
c.ignore_localhost = true
|
7
|
-
c.default_cassette_options = { :record => :new_episodes, :match_requests_on => [:host] }
|
8
|
-
end
|
9
|
-
|
10
|
-
RSpec.configure do |config|
|
11
|
-
config.extend VCR::RSpec::Macros
|
12
|
-
end
|
data/walter_benjamin.jpg
DELETED
Binary file
|