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/spec/rakumarket_spec.rb
CHANGED
@@ -90,28 +90,6 @@ describe Rakumarket do
|
|
90
90
|
end
|
91
91
|
end
|
92
92
|
|
93
|
-
context "given a search with genre information" do
|
94
|
-
before do
|
95
|
-
@genre_info = Rakumarket.item_search("roomba", :include_genre_info => true).genre_info
|
96
|
-
end
|
97
|
-
|
98
|
-
it "returns genre information" do
|
99
|
-
@genre_info.should_not be_empty
|
100
|
-
end
|
101
|
-
|
102
|
-
it "returns an array of children" do
|
103
|
-
@genre_info.children.should be_a(Array)
|
104
|
-
end
|
105
|
-
|
106
|
-
it "returns a single parent" do
|
107
|
-
@genre_info.parent.should_not be_a(Array)
|
108
|
-
end
|
109
|
-
|
110
|
-
it "returns the current" do
|
111
|
-
@genre_info.current.should_not be_a(Array)
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
93
|
context "given a fruitless search" do
|
116
94
|
it "raises an error " do
|
117
95
|
expect{
|
@@ -135,17 +113,14 @@ describe Rakumarket do
|
|
135
113
|
before do
|
136
114
|
@response = Rakumarket.genre_search
|
137
115
|
end
|
138
|
-
it "returns a list of
|
116
|
+
it "returns a list of genres" do
|
139
117
|
@response.children.should be_a(Array)
|
140
118
|
end
|
141
119
|
it "returns a single parent" do
|
142
120
|
@response.parent.should_not be_a(Array)
|
143
121
|
end
|
144
|
-
it "returns
|
145
|
-
@response.
|
146
|
-
end
|
147
|
-
it "returns genres with rubyish attributes" do
|
148
|
-
@response.children.first.genre_name.should eq('CD・DVD・楽器')
|
122
|
+
it "returns genres with attributes" do
|
123
|
+
@response.children.first.name.should eq('CD・DVD・楽器')
|
149
124
|
end
|
150
125
|
end
|
151
126
|
|
@@ -153,21 +128,18 @@ describe Rakumarket do
|
|
153
128
|
before do
|
154
129
|
@response = Rakumarket.genre_search(101240)
|
155
130
|
end
|
156
|
-
it "returns a list of
|
131
|
+
it "returns a list of genres" do
|
157
132
|
@response.children.should be_a(Array)
|
158
133
|
end
|
159
134
|
it "returns a single parent" do
|
160
135
|
@response.parent.should_not be_a(Array)
|
161
136
|
end
|
162
|
-
it "returns
|
163
|
-
@response.
|
164
|
-
end
|
165
|
-
it "returns genres with rubyish attributes" do
|
166
|
-
@response.children.first.genre_name.should eq('DVD')
|
137
|
+
it "returns genres with attributes" do
|
138
|
+
@response.children.first.name.should eq('DVD')
|
167
139
|
end
|
168
140
|
it "returns the topmost parent" do
|
169
141
|
response = Rakumarket.genre_search(204491)
|
170
|
-
response.parent.
|
142
|
+
response.parent.name.should eq('家電')
|
171
143
|
end
|
172
144
|
end
|
173
145
|
|
@@ -178,7 +150,7 @@ describe Rakumarket do
|
|
178
150
|
end
|
179
151
|
it "returns the immediate parent" do
|
180
152
|
response = Rakumarket.genre_search(204491, :return_immediate_parent => true)
|
181
|
-
response.parent.
|
153
|
+
response.parent.name.should eq('生活家電')
|
182
154
|
end
|
183
155
|
end
|
184
156
|
|
@@ -191,4 +163,28 @@ describe Rakumarket do
|
|
191
163
|
end
|
192
164
|
end
|
193
165
|
|
166
|
+
describe "#item_lookup" do
|
167
|
+
before do
|
168
|
+
VCR.insert_cassette 'item_lookup', :record => :new_episodes
|
169
|
+
end
|
170
|
+
|
171
|
+
after do
|
172
|
+
VCR.eject_cassette
|
173
|
+
end
|
174
|
+
|
175
|
+
context "given a simple search" do
|
176
|
+
before do
|
177
|
+
@response = Rakumarket.item_lookup "act-corp:10000580"
|
178
|
+
end
|
179
|
+
|
180
|
+
it "returns an item" do
|
181
|
+
@response.should be_a(Rakumarket::Item)
|
182
|
+
end
|
183
|
+
|
184
|
+
it "returns an item with item attributes" do
|
185
|
+
@response.code.should eq("act-corp:10000580")
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
194
190
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -0,0 +1,121 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Spitter do
|
5
|
+
|
6
|
+
context "no conversion" do
|
7
|
+
before do
|
8
|
+
@params = {:code => "1234"}
|
9
|
+
@spitter = Class.new(Spitter){ parameter :code }.new(@params)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should create the rules" do
|
13
|
+
@spitter.class.rules.should eq({:code => ['code',nil]})
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should transform the params" do
|
17
|
+
new_params = @spitter.parse
|
18
|
+
new_params.should eq({'code' => '1234'})
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context "simple conversion" do
|
23
|
+
before do
|
24
|
+
@params = {:item_id => 1}
|
25
|
+
@spitter = Class.new(Spitter){ parameter :item_id => 'itemId' }.new(@params)
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should create the rules" do
|
29
|
+
@spitter.class.rules.should eq({:item_id => ['itemId',nil]})
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should transform the params" do
|
33
|
+
new_params = @spitter.parse
|
34
|
+
new_params.should eq({'itemId' => 1})
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context "proc conversion" do
|
39
|
+
before do
|
40
|
+
@params = {:item_id => 1}
|
41
|
+
@spitter = Class.new(Spitter){ parameter :item_id => lambda {|i| i.to_s.upcase }}.new(@params)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should create the rules" do
|
45
|
+
@spitter.class.rules.should eq({:item_id => ['ITEM_ID',nil]})
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should transform the params" do
|
49
|
+
new_params = @spitter.parse
|
50
|
+
new_params.should eq({'ITEM_ID' => 1})
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
context "class conversion" do
|
55
|
+
before do
|
56
|
+
@params = {:item_id => 1}
|
57
|
+
klass = Class.new do
|
58
|
+
def self.parse val
|
59
|
+
val.upcase
|
60
|
+
end
|
61
|
+
end
|
62
|
+
@spitter = Class.new(Spitter){ parameter :item_id => klass }.new(@params)
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should create the rules" do
|
66
|
+
@spitter.class.rules.should eq({:item_id => ['ITEM_ID',nil]})
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should transform the params" do
|
70
|
+
new_params = @spitter.parse
|
71
|
+
new_params.should eq({'ITEM_ID' => 1})
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
context "value conversion with proc" do
|
76
|
+
before do
|
77
|
+
@params = {:is_cool => true}
|
78
|
+
@spitter = Class.new(Spitter){ parameter :is_cool => 'isCool', :with => lambda { |a| a ? "1" : "0" } }.new(@params)
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should transform the params" do
|
82
|
+
new_params = @spitter.parse
|
83
|
+
new_params.should eq({'isCool' => '1'})
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
context "value conversion with class" do
|
88
|
+
before do
|
89
|
+
@params = {:is_cool => true}
|
90
|
+
klass = Class.new do
|
91
|
+
def self.parse val
|
92
|
+
val ? "1" : "0"
|
93
|
+
end
|
94
|
+
end
|
95
|
+
@spitter = Class.new(Spitter){ parameter :is_cool => 'isCool', :with => klass }.new(@params)
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should transform the params" do
|
99
|
+
new_params = @spitter.parse
|
100
|
+
new_params.should eq({'isCool' => '1'})
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
context "nested conversion" do
|
105
|
+
before do
|
106
|
+
@params = {:shop => {:name => "roomba", :code => "123"} }
|
107
|
+
@spitter = Class.new(Spitter) do
|
108
|
+
parameters :shop do
|
109
|
+
parameter :name => 'shopName'
|
110
|
+
parameter :code => 'shopCode'
|
111
|
+
end
|
112
|
+
end.new(@params)
|
113
|
+
end
|
114
|
+
|
115
|
+
it "should transform the params" do
|
116
|
+
new_params = @spitter.parse
|
117
|
+
new_params.should eq({'shopName' => 'roomba', 'shopCode' => '123'})
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rakumarket
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,24 +9,24 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-06-
|
12
|
+
date: 2012-06-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
15
|
+
name: nibbler
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: 1.3.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
29
|
+
version: 1.3.0
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: httparty
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -120,15 +120,20 @@ files:
|
|
120
120
|
- README.rdoc
|
121
121
|
- Rakefile
|
122
122
|
- fixtures/vcr_casettes/genre_search.yml
|
123
|
+
- fixtures/vcr_casettes/item_lookup.yml
|
123
124
|
- fixtures/vcr_casettes/item_search.yml
|
124
125
|
- lib/rakumarket.rb
|
125
126
|
- lib/rakumarket/client.rb
|
126
|
-
- lib/rakumarket/
|
127
|
-
- lib/rakumarket/
|
127
|
+
- lib/rakumarket/constants.rb
|
128
|
+
- lib/rakumarket/models.rb
|
129
|
+
- lib/rakumarket/spitter.rb
|
128
130
|
- lib/rakumarket/version.rb
|
129
131
|
- rakumarket.gemspec
|
132
|
+
- spec/rakumarket/client_spec.rb
|
133
|
+
- spec/rakumarket/models_spec.rb
|
130
134
|
- spec/rakumarket_spec.rb
|
131
135
|
- spec/spec_helper.rb
|
136
|
+
- spec/spitter_spec.rb
|
132
137
|
homepage: http://github.com/bonsaiben/rakumarket
|
133
138
|
licenses: []
|
134
139
|
post_install_message:
|
@@ -1,77 +0,0 @@
|
|
1
|
-
module Rakumarket
|
2
|
-
class GenreSearchClient < Client
|
3
|
-
|
4
|
-
OPERATION = "GenreSearch"
|
5
|
-
VERSION = "2007-04-11"
|
6
|
-
|
7
|
-
VALID_REQUEST_KEYS = [
|
8
|
-
:developer_id,
|
9
|
-
:affiliate_id,
|
10
|
-
:operation,
|
11
|
-
:call_back,
|
12
|
-
:genre_id,
|
13
|
-
:version,
|
14
|
-
:return_immediate_parent
|
15
|
-
]
|
16
|
-
|
17
|
-
REQUEST_KEYS_TO_TRANSFORM = {
|
18
|
-
:developer_id => :developerId,
|
19
|
-
:affiliate_id => :affiliateId,
|
20
|
-
:call_back => :callBack,
|
21
|
-
:genre_id => :genreId,
|
22
|
-
:return_immediate_parent => :genrePath
|
23
|
-
}
|
24
|
-
|
25
|
-
REQUEST_VALUES_TO_TRANSFORM = {
|
26
|
-
:genrePath => {false => 1, true => 0}
|
27
|
-
}
|
28
|
-
|
29
|
-
RESPONSE_GENRE_KEYS_TO_TRANSFORM = {
|
30
|
-
:genreId => :genre_id,
|
31
|
-
:genreName => :genre_name,
|
32
|
-
:itemCount => :item_count,
|
33
|
-
:genreLevel => :genre_level
|
34
|
-
}
|
35
|
-
|
36
|
-
private
|
37
|
-
def respond
|
38
|
-
@response = @response['Body']['GenreSearch']
|
39
|
-
super
|
40
|
-
end
|
41
|
-
|
42
|
-
def default_options
|
43
|
-
{ :developer_id => @developer_id,
|
44
|
-
:operation => OPERATION,
|
45
|
-
:version => VERSION }
|
46
|
-
end
|
47
|
-
|
48
|
-
def transform_response_values!
|
49
|
-
custom_transform!(@response, 'parent'){|h,k| h[k].first }
|
50
|
-
custom_transform!(@response, 'current'){|h,k| h[k].first }
|
51
|
-
super
|
52
|
-
end
|
53
|
-
|
54
|
-
def transform_response_keys!
|
55
|
-
custom_transform(@response,'child'){|h,k| h[:children] = h.delete(k) }
|
56
|
-
@response['children'].each do |child|
|
57
|
-
transform_keys! child, RESPONSE_GENRE_KEYS_TO_TRANSFORM
|
58
|
-
end
|
59
|
-
transform_keys! @response['parent'], RESPONSE_GENRE_KEYS_TO_TRANSFORM if @response['parent']
|
60
|
-
transform_keys! @response['current'], RESPONSE_GENRE_KEYS_TO_TRANSFORM if @response['current']
|
61
|
-
super
|
62
|
-
end
|
63
|
-
|
64
|
-
def valid_request_keys
|
65
|
-
VALID_REQUEST_KEYS
|
66
|
-
end
|
67
|
-
|
68
|
-
def request_keys_to_transform
|
69
|
-
REQUEST_KEYS_TO_TRANSFORM
|
70
|
-
end
|
71
|
-
|
72
|
-
def request_values_to_transform
|
73
|
-
REQUEST_VALUES_TO_TRANSFORM
|
74
|
-
end
|
75
|
-
|
76
|
-
end
|
77
|
-
end
|