rakumarket 0.0.3 → 0.1.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/Gemfile.lock +2 -2
- data/README.rdoc +8 -2
- data/fixtures/vcr_casettes/genre_search.yml +168 -0
- data/fixtures/vcr_casettes/item_lookup.yml +163 -0
- data/fixtures/vcr_casettes/item_search.yml +7579 -0
- data/lib/rakumarket/client.rb +110 -51
- data/lib/rakumarket/constants.rb +222 -0
- data/lib/rakumarket/models.rb +125 -0
- data/lib/rakumarket/spitter.rb +102 -0
- data/lib/rakumarket/version.rb +1 -1
- data/lib/rakumarket.rb +15 -17
- data/rakumarket.gemspec +1 -1
- data/spec/rakumarket/client_spec.rb +242 -0
- data/spec/rakumarket/models_spec.rb +257 -0
- data/spec/rakumarket_spec.rb +32 -36
- data/spec/spec_helper.rb +1 -0
- data/spec/spitter_spec.rb +121 -0
- metadata +14 -9
- data/lib/rakumarket/genre_search_client.rb +0 -77
- data/lib/rakumarket/item_search_client.rb +0 -449
data/lib/rakumarket.rb
CHANGED
@@ -1,23 +1,24 @@
|
|
1
1
|
require 'httparty'
|
2
|
-
require '
|
2
|
+
require 'nibbler/json'
|
3
3
|
|
4
4
|
directory = File.expand_path(File.dirname(__FILE__))
|
5
5
|
|
6
|
-
Hash.send :include, Hashie::HashExtensions
|
7
|
-
|
8
6
|
module Rakumarket
|
9
7
|
|
10
|
-
def self.item_search(keyword,
|
11
|
-
|
8
|
+
def self.item_search(keyword, params={})
|
9
|
+
params = {:keyword => keyword}.merge(params).symbolify_keys!
|
10
|
+
ItemSearchClient.request(params)
|
12
11
|
end
|
13
12
|
|
14
13
|
def self.genre_search(genre_id=0, options={})
|
15
|
-
|
14
|
+
params = {:genre_id => genre_id}.merge(options).symbolify_keys!
|
15
|
+
GenreSearchClient.request(params)
|
16
16
|
end
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
def self.item_lookup(item_code, options={})
|
19
|
+
params = {:code => item_code}.merge(options).symbolify_keys!
|
20
|
+
ItemLookupClient.request(params)
|
21
|
+
end
|
21
22
|
|
22
23
|
|
23
24
|
class << self
|
@@ -30,7 +31,7 @@ module Rakumarket
|
|
30
31
|
|
31
32
|
def initialize(data)
|
32
33
|
@data = data
|
33
|
-
super data
|
34
|
+
super data[:status_msg]
|
34
35
|
end
|
35
36
|
end
|
36
37
|
end
|
@@ -49,12 +50,8 @@ class Hash
|
|
49
50
|
keys.map! { |key| convert_key(key) } if respond_to?(:convert_key, true)
|
50
51
|
keys.inject(self.class.new) { |hash, k| hash[k] = self[k] if has_key?(k); hash }
|
51
52
|
end
|
52
|
-
end
|
53
53
|
|
54
|
-
|
55
|
-
# Destructively convert all of the keys of a Hash
|
56
|
-
# to their symbol representations.
|
57
|
-
def hashie_symbolify_keys!
|
54
|
+
def symbolify_keys!
|
58
55
|
self.keys.each do |k|
|
59
56
|
unless Symbol === k
|
60
57
|
self[k.to_sym] = self.delete(k)
|
@@ -64,6 +61,7 @@ module Hashie::HashExtensions
|
|
64
61
|
end
|
65
62
|
end
|
66
63
|
|
64
|
+
require File.join(directory, 'rakumarket', 'constants')
|
65
|
+
require File.join(directory, 'rakumarket', 'spitter')
|
66
|
+
require File.join(directory, 'rakumarket', 'models')
|
67
67
|
require File.join(directory, 'rakumarket', 'client')
|
68
|
-
require File.join(directory, 'rakumarket', 'item_search_client')
|
69
|
-
require File.join(directory, 'rakumarket', 'genre_search_client')
|
data/rakumarket.gemspec
CHANGED
@@ -13,7 +13,7 @@ Gem::Specification.new do |s|
|
|
13
13
|
|
14
14
|
s.required_rubygems_version = ">= 1.3.6"
|
15
15
|
|
16
|
-
s.add_dependency "
|
16
|
+
s.add_dependency "nibbler", "~> 1.3.0"
|
17
17
|
s.add_dependency "httparty", ">= 0.1.0"
|
18
18
|
s.add_development_dependency "bundler", ">= 1.0.0"
|
19
19
|
s.add_development_dependency "rspec", "~> 2.6"
|
@@ -0,0 +1,242 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.join(File.dirname(__FILE__), '..', 'spec_helper')
|
3
|
+
|
4
|
+
describe Rakumarket::Client do
|
5
|
+
|
6
|
+
describe "parameters" do
|
7
|
+
it "should transform developer_id" do
|
8
|
+
params = {:developer_id => "abcd"}
|
9
|
+
Rakumarket::Client.new(params).parse.should eq({'developerId' => "abcd"})
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
describe Rakumarket::ItemSearchClient do
|
17
|
+
|
18
|
+
describe "parameters" do
|
19
|
+
it "should have an operation by default" do
|
20
|
+
params = {}
|
21
|
+
Rakumarket::ItemSearchClient.new(params).parse['operation'].should eq("ItemSearch")
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should have a version by default" do
|
25
|
+
params = {}
|
26
|
+
Rakumarket::ItemSearchClient.new(params).parse['version'].should eq("2010-09-15")
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should have a developer_id by default" do
|
30
|
+
params = {}
|
31
|
+
Rakumarket::ItemSearchClient.new(params).parse['developerId'].should eq(ENV['DEVELOPER_ID'])
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should transform a keyword" do
|
35
|
+
params = {:keyword => "roomba"}
|
36
|
+
Rakumarket::ItemSearchClient.new(params).parse['keyword'].should eq("roomba")
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should transform a page" do
|
40
|
+
params = {:page => "thepage"}
|
41
|
+
Rakumarket::ItemSearchClient.new(params).parse['page'].should eq("thepage")
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "price" do
|
45
|
+
before do
|
46
|
+
@params = {:price => {:minimum => 20, :maximum => 30}}
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should transform a price minimum" do
|
50
|
+
Rakumarket::ItemSearchClient.new(@params).parse['minPrice'].should eq(20)
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should transform a price maximum" do
|
54
|
+
Rakumarket::ItemSearchClient.new(@params).parse['maxPrice'].should eq(30)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should transform a mobile" do
|
59
|
+
params = {:mobile => true}
|
60
|
+
Rakumarket::ItemSearchClient.new(params).parse['carrier'].should eq("1")
|
61
|
+
end
|
62
|
+
|
63
|
+
describe "shipping" do
|
64
|
+
before do
|
65
|
+
@params = {:shipping => {:must_ship_international => true, :country => 'france', :must_ship_next_day => true, :next_day_area => "kanagawa", :must_include_cost => true}}
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should transform must_ship_international" do
|
69
|
+
Rakumarket::ItemSearchClient.new(@params).parse['shipOverseasFlag'].should eq("1")
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should transform country" do
|
73
|
+
Rakumarket::ItemSearchClient.new(@params).parse['shipOverseasArea'].should eq("FR")
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should transform must_ship_next_day" do
|
77
|
+
Rakumarket::ItemSearchClient.new(@params).parse['asurakuFlag'].should eq("1")
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should transform next_day_area" do
|
81
|
+
Rakumarket::ItemSearchClient.new(@params).parse['asurakuArea'].should eq("14")
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should transform must_include_cost" do
|
85
|
+
Rakumarket::ItemSearchClient.new(@params).parse['postageFlag'].should eq("1")
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should transform affiliate_id" do
|
90
|
+
params = {:affiliate_id => 123}
|
91
|
+
Rakumarket::ItemSearchClient.new(params).parse['affiliateId'].should eq(123)
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should transform call_back" do
|
95
|
+
params = {:call_back => "thecallback"}
|
96
|
+
Rakumarket::ItemSearchClient.new(params).parse['callBack'].should eq("thecallback")
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should transform items_per_page" do
|
100
|
+
params = {:items_per_page => "theitems_per_page"}
|
101
|
+
Rakumarket::ItemSearchClient.new(params).parse['hits'].should eq("theitems_per_page")
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should transform shop_code" do
|
105
|
+
params = {:shop_code => "theshop_code"}
|
106
|
+
Rakumarket::ItemSearchClient.new(params).parse['shopCode'].should eq("theshop_code")
|
107
|
+
end
|
108
|
+
|
109
|
+
it "should transform genre_id" do
|
110
|
+
params = {:genre_id => "thegenre_id"}
|
111
|
+
Rakumarket::ItemSearchClient.new(params).parse['genreId'].should eq("thegenre_id")
|
112
|
+
end
|
113
|
+
|
114
|
+
it "should transform order" do
|
115
|
+
params = {:order => "price asc"}
|
116
|
+
Rakumarket::ItemSearchClient.new(params).parse['sort'].should eq("+itemPrice")
|
117
|
+
end
|
118
|
+
|
119
|
+
it "should transform must_be_available" do
|
120
|
+
params = {:must_be_available => true}
|
121
|
+
Rakumarket::ItemSearchClient.new(params).parse['availability'].should eq("1")
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should transform deep_search" do
|
125
|
+
params = {:deep_search => true}
|
126
|
+
Rakumarket::ItemSearchClient.new(params).parse['field'].should eq("0")
|
127
|
+
end
|
128
|
+
|
129
|
+
it "should transform must_have_image" do
|
130
|
+
params = {:must_have_image => true}
|
131
|
+
Rakumarket::ItemSearchClient.new(params).parse['imageFlag'].should eq("1")
|
132
|
+
end
|
133
|
+
|
134
|
+
it "should transform or_search" do
|
135
|
+
params = {:or_search => true}
|
136
|
+
Rakumarket::ItemSearchClient.new(params).parse['orFlag'].should eq("1")
|
137
|
+
end
|
138
|
+
|
139
|
+
it "should transform exclude_keyword" do
|
140
|
+
params = {:exclude_keyword => "dog"}
|
141
|
+
Rakumarket::ItemSearchClient.new(params).parse['NGKeyword'].should eq("dog")
|
142
|
+
end
|
143
|
+
|
144
|
+
it "should transform include_genre_info" do
|
145
|
+
params = {:include_genre_info => true}
|
146
|
+
Rakumarket::ItemSearchClient.new(params).parse['genreInformationFlag'].should eq("1")
|
147
|
+
end
|
148
|
+
|
149
|
+
it "should transform purchase_type" do
|
150
|
+
params = {:purchase_type => "normal"}
|
151
|
+
Rakumarket::ItemSearchClient.new(params).parse['purchaseType'].should eq(0)
|
152
|
+
end
|
153
|
+
|
154
|
+
it "should transform must_have_point_multiplication" do
|
155
|
+
params = {:must_have_point_multiplication => true}
|
156
|
+
Rakumarket::ItemSearchClient.new(params).parse['pointRateFlag'].should eq("1")
|
157
|
+
end
|
158
|
+
|
159
|
+
it "should transform point_multiplication_factor" do
|
160
|
+
params = {:point_multiplication_factor => 2}
|
161
|
+
Rakumarket::ItemSearchClient.new(params).parse['pointRate'].should eq(2)
|
162
|
+
end
|
163
|
+
|
164
|
+
it "should transform must_accept_credit_cards" do
|
165
|
+
params = {:must_accept_credit_cards => true}
|
166
|
+
Rakumarket::ItemSearchClient.new(params).parse['creditCardFlag'].should eq("1")
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
describe Rakumarket::GenreSearchClient do
|
171
|
+
|
172
|
+
describe "parameters" do
|
173
|
+
it "should have an operation by default" do
|
174
|
+
params = {}
|
175
|
+
Rakumarket::GenreSearchClient.new(params).parse['operation'].should eq("GenreSearch")
|
176
|
+
end
|
177
|
+
|
178
|
+
it "should have a version by default" do
|
179
|
+
params = {}
|
180
|
+
Rakumarket::GenreSearchClient.new(params).parse['version'].should eq("2007-04-11")
|
181
|
+
end
|
182
|
+
|
183
|
+
it "should have a developer_id by default" do
|
184
|
+
params = {}
|
185
|
+
Rakumarket::GenreSearchClient.new(params).parse['developerId'].should eq(ENV['DEVELOPER_ID'])
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
it "should transform genre_id" do
|
190
|
+
params = {:genre_id => "abc"}
|
191
|
+
Rakumarket::GenreSearchClient.new(params).parse['genreId'].should eq("abc")
|
192
|
+
end
|
193
|
+
|
194
|
+
it "should transform return_immediate_parent" do
|
195
|
+
params = {:return_immediate_parent => true}
|
196
|
+
Rakumarket::GenreSearchClient.new(params).parse['genrePath'].should eq("0")
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
describe Rakumarket::ItemLookupClient do
|
201
|
+
|
202
|
+
it "should transform code to itemCode" do
|
203
|
+
params = {:code => "abc"}
|
204
|
+
Rakumarket::ItemLookupClient.new(params).parse['itemCode'].should eq("abc")
|
205
|
+
end
|
206
|
+
|
207
|
+
context "with mobile" do
|
208
|
+
it "should transform mobile to carrier" do
|
209
|
+
params = {:mobile => true}
|
210
|
+
Rakumarket::ItemLookupClient.new(params).parse.should have_key('carrier')
|
211
|
+
end
|
212
|
+
it "should transform true to 1" do
|
213
|
+
params = {:mobile => true}
|
214
|
+
Rakumarket::ItemLookupClient.new(params).parse['carrier'].should eq("1")
|
215
|
+
end
|
216
|
+
it "should transform false to 0" do
|
217
|
+
params = {:mobile => false}
|
218
|
+
Rakumarket::ItemLookupClient.new(params).parse['carrier'].should eq("0")
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
describe "parameters" do
|
223
|
+
before do
|
224
|
+
params = {}
|
225
|
+
@request = Rakumarket::ItemLookupClient.new(params)
|
226
|
+
end
|
227
|
+
|
228
|
+
it "should have an operation by default" do
|
229
|
+
@request.parse['operation'].should eq("ItemCodeSearch")
|
230
|
+
end
|
231
|
+
|
232
|
+
it "should have a version by default" do
|
233
|
+
@request.parse['version'].should eq("2010-08-05")
|
234
|
+
end
|
235
|
+
|
236
|
+
it "should have a developer_id by default" do
|
237
|
+
@request.parse['developerId'].should eq(ENV['DEVELOPER_ID'])
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
end
|
242
|
+
end
|
@@ -0,0 +1,257 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.join(File.dirname(__FILE__), '..', 'spec_helper')
|
3
|
+
|
4
|
+
describe Rakumarket::ItemList do
|
5
|
+
describe "#parse" do
|
6
|
+
before do
|
7
|
+
@response = {"Body" => {"ItemSearch" => {"Items" => {"Item" => [{"shopOfTheYearFlag" => "0", "pointRate" => "2", "affiliateRate" => "435", "shipOverseasFlag" => "1", "asurakuFlag" => "1", "endTime" => "2012-02-05 14:23", "taxFlag" => "1", "startTime" => "2000-01-01 12:00", "itemCaption" => "thecaption", "catchcopy" => "great item", "mediumImageUrl" => "themediumimage", "imageFlag" => "0", "availability" => "0", "itemCode" => "abc123", "postageFlag" => "0", "itemName" => "Roomba", "smallImageUrl" => "thesmallimage", "itemPrice" => "2000", "pointRateEndTime" => "1999-12-30 09:01", "shopCode" => "theshopcode", "affiliateUrl" => "theaffiliateurl", "shopName" => "theshopname", "asurakuArea" => "神奈川県/滋賀県", "reviewCount" => "3", "shopUrl" => "theshopurl", "creditCardFlag" => "0", "reviewAverage" => "4", "shipOverseasArea" => "フランス/イタリア", "genreId" => "23", "pointRateStartTime" => "2007-03-03 03:33", "itemUrl" => "theurl"}]}, "pageCount" => 100, "hits" => 30, "last" => 30, "count" => 3507, "page" => 1, "carrier" => 0, "first" => 1}}, "Header" => {"Status" => "Success", "Args" => {"Arg" => {"apiVersion" => {"content" => true, "value" => "30"}, "operation" => {"content" => true, "value" => "ItemSearch"}, "developerId" => {"content" => true, "value" => "dffe027ae45a5b59b47ec3514f9cc17b"}, "keyword" => {"content" => true, "value" => "roomba"}, "version" => {"content" => true, "value" => "2010-09-15"}}}, "StatusMsg" => ""}}
|
8
|
+
@item_list = Rakumarket::ItemList.parse(@response)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should parse item_count" do
|
12
|
+
@item_list.total_item_count.should eq(3507)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should parse page_count" do
|
16
|
+
@item_list.page_count.should eq(100)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should parse page" do
|
20
|
+
@item_list.page.should eq(1)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should parse items" do
|
24
|
+
@item_list.items.should be_a(Array)
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "items" do
|
28
|
+
it "should contain a list of items" do
|
29
|
+
items = @item_list.items
|
30
|
+
items.first.should be_a(Rakumarket::Item)
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "item" do
|
34
|
+
before do
|
35
|
+
@item = @item_list.items.first
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should parse name" do
|
39
|
+
@item.name.should eq("Roomba")
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should parse catchphrase" do
|
43
|
+
@item.catchphrase.should eq("great item")
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should parse code" do
|
47
|
+
@item.code.should eq("abc123")
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should parse price" do
|
51
|
+
@item.price.should eq('2000')
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should parse caption" do
|
55
|
+
@item.caption.should eq("thecaption")
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should parse url" do
|
59
|
+
@item.url.should eq("theurl")
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should parse genre_id" do
|
63
|
+
@item.genre_id.should eq('23')
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "shop" do
|
67
|
+
it "should parse shop name" do
|
68
|
+
@item.shop.name.should eq("theshopname")
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should parse shop code" do
|
72
|
+
@item.shop.code.should eq("theshopcode")
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should parse shop url" do
|
76
|
+
@item.shop.url.should eq("theshopurl")
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe "shipping" do
|
81
|
+
it "should parse cost_included?" do
|
82
|
+
@item.shipping.cost_included?.should be_true
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should parse cost_included? false" do
|
86
|
+
@response = {"Body" => {"ItemSearch" => {"Items" => {"Item" => [{"postageFlag" => "1"}]}}}}
|
87
|
+
@item = Rakumarket::ItemList.parse(@response).items.first
|
88
|
+
@item.shipping.cost_included?.should be_false
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should parse international?" do
|
92
|
+
@item.shipping.international?.should be_true
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should parse international? false" do
|
96
|
+
@response = {"Body" => {"ItemSearch" => {"Items" => {"Item" => [{"shipOverseasFlag" => "0"}]}}}}
|
97
|
+
@item = Rakumarket::ItemList.parse(@response).items.first
|
98
|
+
@item.shipping.international?.should be_false
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should parse international? numeric true" do
|
102
|
+
@response = {"Body" => {"ItemSearch" => {"Items" => {"Item" => [{"shipOverseasFlag" => 1}]}}}}
|
103
|
+
@item = Rakumarket::ItemList.parse(@response).items.first
|
104
|
+
@item.shipping.international?.should be_true
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should parse countries" do
|
108
|
+
@item.shipping.countries.should eq(["france","italy"])
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should parse next_day?" do
|
112
|
+
@item.shipping.next_day?.should be_true
|
113
|
+
end
|
114
|
+
|
115
|
+
it "should parse next_day? false" do
|
116
|
+
@response = {"Body" => {"ItemSearch" => {"Items" => {"Item" => [{"asurakuFlag" => "0"}]}}}}
|
117
|
+
@item = Rakumarket::ItemList.parse(@response).items.first
|
118
|
+
@item.shipping.next_day?.should be_false
|
119
|
+
end
|
120
|
+
|
121
|
+
it "should parse next_day_areas" do
|
122
|
+
@item.shipping.next_day_areas.should eq(["kanagawa","shiga"])
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
it "should parse affiliate_url" do
|
127
|
+
@item.affiliate_url.should eq("theaffiliateurl")
|
128
|
+
end
|
129
|
+
|
130
|
+
it "should parse has_image?" do
|
131
|
+
@item.has_image?.should be_false
|
132
|
+
end
|
133
|
+
|
134
|
+
it "should parse small_image_url" do
|
135
|
+
@item.small_image_url.should eq("thesmallimage")
|
136
|
+
end
|
137
|
+
|
138
|
+
it "should parse medium_image_url" do
|
139
|
+
@item.medium_image_url.should eq("themediumimage")
|
140
|
+
end
|
141
|
+
|
142
|
+
it "should parse available?" do
|
143
|
+
@item.available?.should be_false
|
144
|
+
end
|
145
|
+
|
146
|
+
it "should parse tax_included?" do
|
147
|
+
@item.tax_included?.should be_false
|
148
|
+
end
|
149
|
+
|
150
|
+
it "should parse credit_cards_accepted?" do
|
151
|
+
@item.credit_cards_accepted?.should be_false
|
152
|
+
end
|
153
|
+
|
154
|
+
it "should parse shop_of_the_year?" do
|
155
|
+
@item.shop_of_the_year?.should be_false
|
156
|
+
end
|
157
|
+
|
158
|
+
it "should parse shop_of_the_year? true" do
|
159
|
+
@response = {"Body" => {"ItemSearch" => {"Items" => {"Item" => [{"shopOfTheYearFlag" => "1"}]}}}}
|
160
|
+
@item = Rakumarket::ItemList.parse(@response).items.first
|
161
|
+
@item.shop_of_the_year?.should be_true
|
162
|
+
end
|
163
|
+
|
164
|
+
it "should parse affiliate_rate" do
|
165
|
+
@item.affiliate_rate.should eq('435')
|
166
|
+
end
|
167
|
+
|
168
|
+
it "should parse start_time" do
|
169
|
+
@item.start_time.should be_a(Time)
|
170
|
+
end
|
171
|
+
|
172
|
+
it "should parse start_time as nil if blank" do
|
173
|
+
@response = {"Body" => {"ItemSearch" => {"Items" => {"Item" => [{"startTime" => ""}]}}}}
|
174
|
+
@item = Rakumarket::ItemList.parse(@response).items.first
|
175
|
+
@item.start_time.should be_nil
|
176
|
+
end
|
177
|
+
|
178
|
+
it "should parse end_time" do
|
179
|
+
@item.end_time.should be_a(Time)
|
180
|
+
end
|
181
|
+
|
182
|
+
it "should parse end_time as nil if blank" do
|
183
|
+
@response = {"Body" => {"ItemSearch" => {"Items" => {"Item" => [{"endTime" => ""}]}}}}
|
184
|
+
@item = Rakumarket::ItemList.parse(@response).items.first
|
185
|
+
@item.end_time.should be_nil
|
186
|
+
end
|
187
|
+
|
188
|
+
it "should parse review_count" do
|
189
|
+
@item.review_count.should eq("3")
|
190
|
+
end
|
191
|
+
|
192
|
+
it "should parse review_average" do
|
193
|
+
@item.review_average.should eq("4")
|
194
|
+
end
|
195
|
+
|
196
|
+
it "should parse point_multiplication_factor" do
|
197
|
+
@item.point_multiplication_factor.should eq("2")
|
198
|
+
end
|
199
|
+
|
200
|
+
it "should parse point_multiplication_start_time" do
|
201
|
+
@item.point_multiplication_start_time.should be_a(Time)
|
202
|
+
end
|
203
|
+
|
204
|
+
it "should parse point_multiplication_end_time" do
|
205
|
+
@item.point_multiplication_end_time.should be_a(Time)
|
206
|
+
end
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
describe Rakumarket::ItemList do
|
214
|
+
describe "#parse" do
|
215
|
+
context "root" do
|
216
|
+
before do
|
217
|
+
@response = {"Body" => {"GenreSearch" => {"child" => [{"genreLevel" => 1,"genreName" => "CD・DVD・楽器","genreId" => 101240},{"genreLevel" => 1,"genreName" => "インテリア・寝具・収納","genreId" => 100804},{"genreLevel" => 1,"genreName" => "おもちゃ・ホビー・ゲーム","genreId" => 101164},{"genreLevel" => 1,"genreName" => "キッズ・ベビー・マタニティ","genreId" => 100533},{"genreLevel" => 1,"genreName" => " 日用品雑貨・文房具・手芸","genreId" => 215783},{"genreLevel" => 1,"genreName" => "ジュエリー・アクセサリー","genreId" => 216129},{"genreLevel" => 1,"genreName" => "スポーツ・アウトドア","genreId" => 101070},{"genreLevel" => 1,"genreName" => "ダイエット・健康","genreId" => 100938},{"genreLevel" => 1,"genreName" => "水・ソフトドリンク","genreId" => 100316},{"genreLevel" => 1,"genreName" => "パソコン・周辺機器","genreId" => 100026},{"genreLevel" => 1,"genreName" => "バッグ・小物・ブランド雑貨","genreId" => 216131},{"genreLevel" => 1,"genreName" => "レディースファッション","genreId" => 100371},{"genreLevel" => 1,"genreName" => "花・ガーデン・DIY","genreId" => 100005},{"genreLevel" => 1,"genreName" => "ペット・ペットグッズ","genreId" => 101213},{"genreLevel" => 1,"genreName" => "TV・オーディオ・カメラ","genreId" => 211742},{"genreLevel" => 1,"genreName" => "車・バイク","genreId" => 101114},{"genreLevel" => 1,"genreName" => "食品","genreId" => 100227},{"genreLevel" => 1,"genreName" => "美容・コスメ・香水","genreId" => 100939},{"genreLevel" => 1,"genreName" => "本・雑誌・コミック","genreId" => 200162},{"genreLevel" => 1,"genreName" => "旅行・出張・チケット","genreId" => 101381},{"genreLevel" => 1,"genreName" => "不動産・住まい","genreId" => 200163},{"genreLevel" => 1,"genreName" => "学び・サービス・保険","genreId" => 101438},{"genreLevel" => 1,"genreName" => "百貨店・総合通販・ギフト","genreId" => 100000},{"genreLevel" => 1,"genreName" => "デジタルコンテンツ","genreId" => 402853},{"genreLevel" => 1,"genreName" => "車用品・バイク用品","genreId" => 503190},{"genreLevel" => 1,"genreName" => "インナー・下着・ナイトウエア","genreId" => 100433},{"genreLevel" => 1,"genreName" => "日本酒・焼酎","genreId" => 510901},{"genreLevel" => 1,"genreName" => "ビール・洋酒","genreId" => 510915},{"genreLevel" => 1,"genreName" => "スイーツ・お菓子","genreId" => 551167},{"genreLevel" => 1,"genreName" => "医薬品・コンタクト・介護","genreId" => 551169},{"genreLevel" => 1,"genreName" => "メンズファッション","genreId" => 551177},{"genreLevel" => 1,"genreName" => "靴","genreId" => 558885},{"genreLevel" => 1,"genreName" => "腕時計","genreId" => 558929},{"genreLevel" => 1,"genreName" => "キッチン用品・食器・調理器具","genreId" => 558944},{"genreLevel" => 1,"genreName" => "家電","genreId" => 562637}],"current" => [],"parent" => []}},"Header" => {"Status" => "Success","Args" => {"Arg" => {"apiVersion" => {"content" => true,"value" => "30"},"operation" => {"content" => true,"value" => "GenreSearch"},"developerId" => {"content" => true,"value" => "dffe027ae45a5b59b47ec3514f9cc17b"},"genreId" => {"content" => true,"value" => "0"},"version" => {"content" => true,"value" => "2007-04-11"}}},"StatusMsg" => ""}}
|
218
|
+
@genre = Rakumarket::Genre.parse(@response)
|
219
|
+
end
|
220
|
+
|
221
|
+
it 'should parse children' do
|
222
|
+
@genre.children.should be_a(Array)
|
223
|
+
end
|
224
|
+
|
225
|
+
it 'should parse child genres' do
|
226
|
+
@genre.children.first.should be_a(Rakumarket::Genre)
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
context "child" do
|
231
|
+
before do
|
232
|
+
@response = {"Body" => {"GenreSearch" => {"child" => [{"genreLevel" => 4,"genreName" => "ドラム式","genreId" => 550648},{"genreLevel" => 4,"genreName" => "全自動(乾燥機能あり)","genreId" => 211835},{"genreLevel" => 4,"genreName" => "全自動(乾燥機能なし)","genreId" => 211851},{"genreLevel" => 4,"genreName" => "2槽式","genreId" => 211859},{"genreLevel" => 4,"genreName" => "洗濯機関連用品","genreId" => 211874},{"genreLevel" => 4,"genreName" => "その他","genreId" => 100180}],"current" => [{"genreLevel" => 3,"genreName" => "洗濯機","genreId" => 204491}],"parent" => [{"genreLevel" => 2,"genreName" => "生活 家電","genreId" => 204200}]}},"Header" => {"Status" => "Success","Args" => {"Arg" => {"apiVersion" => {"content" => true,"value" => "30"},"operation" => {"content" => true,"value" => "GenreSearch"},"developerId" => {"content" => true,"value" => "dffe027ae45a5b59b47ec3514f9cc17b"},"genrePath" => {"content" => true,"value" => "0"},"genreId" => {"content" => true,"value" => "204491"},"version" => {"content" => true,"value" => "2007-04-11"}}},"StatusMsg" => ""}}
|
233
|
+
@genre = Rakumarket::Genre.parse(@response)
|
234
|
+
end
|
235
|
+
|
236
|
+
it "should parse id" do
|
237
|
+
@genre.id.should eq(204491)
|
238
|
+
end
|
239
|
+
|
240
|
+
it "should parse name" do
|
241
|
+
@genre.name.should eq("洗濯機")
|
242
|
+
end
|
243
|
+
|
244
|
+
it "should parse parent" do
|
245
|
+
@genre.parent.should be_a(Rakumarket::Genre)
|
246
|
+
end
|
247
|
+
|
248
|
+
it 'should parse children' do
|
249
|
+
@genre.children.should be_a(Array)
|
250
|
+
end
|
251
|
+
|
252
|
+
it 'should parse child genres' do
|
253
|
+
@genre.children.first.should be_a(Rakumarket::Genre)
|
254
|
+
end
|
255
|
+
end
|
256
|
+
end
|
257
|
+
end
|