rakuten_api 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.
Files changed (50) hide show
  1. data/.gitignore +17 -0
  2. data/Gemfile +14 -0
  3. data/Guardfile +5 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +151 -0
  6. data/Rakefile +1 -0
  7. data/examples/show_ranking.rb +20 -0
  8. data/lib/rakuten_api/base/client.rb +41 -0
  9. data/lib/rakuten_api/base/item.rb +55 -0
  10. data/lib/rakuten_api/base/model.rb +41 -0
  11. data/lib/rakuten_api/base/params.rb +72 -0
  12. data/lib/rakuten_api/base/response.rb +39 -0
  13. data/lib/rakuten_api/configuration.rb +27 -0
  14. data/lib/rakuten_api/dummy_module.rb +6 -0
  15. data/lib/rakuten_api/error.rb +14 -0
  16. data/lib/rakuten_api/genre_search/client.rb +41 -0
  17. data/lib/rakuten_api/genre_search/model.rb +22 -0
  18. data/lib/rakuten_api/genre_search/response.rb +43 -0
  19. data/lib/rakuten_api/item_ranking/client.rb +29 -0
  20. data/lib/rakuten_api/item_ranking/model.rb +17 -0
  21. data/lib/rakuten_api/item_ranking/response.rb +57 -0
  22. data/lib/rakuten_api/item_search/client.rb +34 -0
  23. data/lib/rakuten_api/item_search/model.rb +15 -0
  24. data/lib/rakuten_api/item_search/response.rb +71 -0
  25. data/lib/rakuten_api/version.rb +3 -0
  26. data/lib/rakuten_api.rb +45 -0
  27. data/rakuten_api.gemspec +24 -0
  28. data/spec/fixtures/vcr_cassettes/genre_search_response.yml +75 -0
  29. data/spec/fixtures/vcr_cassettes/genre_search_response_0.yml +75 -0
  30. data/spec/fixtures/vcr_cassettes/genre_search_response_551169.yml +62 -0
  31. data/spec/fixtures/vcr_cassettes/genre_search_response_551172.yml +62 -0
  32. data/spec/fixtures/vcr_cassettes/item_ranking_error_response.yml +56 -0
  33. data/spec/fixtures/vcr_cassettes/item_ranking_response.yml +853 -0
  34. data/spec/fixtures/vcr_cassettes/item_ranking_response_next_ranking.yml +789 -0
  35. data/spec/fixtures/vcr_cassettes/item_ranking_response_prev_ranking.yml +853 -0
  36. data/spec/fixtures/vcr_cassettes/item_search_response.yml +116 -0
  37. data/spec/fixtures/vcr_cassettes/item_search_response_next_page.yml +89 -0
  38. data/spec/fixtures/vcr_cassettes/item_search_response_prev_page.yml +107 -0
  39. data/spec/rakuten_api/base/params_spec.rb +42 -0
  40. data/spec/rakuten_api/genre_search/client_spec.rb +37 -0
  41. data/spec/rakuten_api/genre_search/model_spec.rb +32 -0
  42. data/spec/rakuten_api/genre_search/response_spec.rb +47 -0
  43. data/spec/rakuten_api/item_ranking/client_spec.rb +19 -0
  44. data/spec/rakuten_api/item_ranking/model_spec.rb +19 -0
  45. data/spec/rakuten_api/item_ranking/response_spec.rb +64 -0
  46. data/spec/rakuten_api/item_search/client_spec.rb +35 -0
  47. data/spec/rakuten_api/item_search/model_spec.rb +33 -0
  48. data/spec/rakuten_api/item_search/response_spec.rb +73 -0
  49. data/spec/spec_helper.rb +34 -0
  50. metadata +181 -0
@@ -0,0 +1,116 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://app.rakuten.co.jp/services/api/IchibaItem/Search/20120723?applicationId=16d8dfe13fde99ac5479d789764d2f7a&hits=2&keyword=%E3%82%8A%E3%82%93%E3%81%94
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: !binary |-
20
+ T0s=
21
+ headers:
22
+ !binary "RGF0ZQ==":
23
+ - !binary |-
24
+ TW9uLCAxOCBGZWIgMjAxMyAxMjo1MzoxNiBHTVQ=
25
+ !binary "QWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2lu":
26
+ - !binary |-
27
+ Kg==
28
+ !binary "Q2FjaGUtQ29udHJvbA==":
29
+ - !binary |-
30
+ bm8tc3RvcmU=
31
+ !binary "Q29udGVudC1UeXBl":
32
+ - !binary |-
33
+ YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PVVURi04
34
+ !binary "Q29udGVudC1MYW5ndWFnZQ==":
35
+ - !binary |-
36
+ amEtSlA=
37
+ !binary "VmFyeQ==":
38
+ - !binary |-
39
+ QWNjZXB0LUVuY29kaW5n
40
+ !binary "Q29udGVudC1FbmNvZGluZw==":
41
+ - !binary |-
42
+ Z3ppcA==
43
+ !binary "Q29udGVudC1MZW5ndGg=":
44
+ - !binary |-
45
+ Mjc4MQ==
46
+ !binary "Q29ubmVjdGlvbg==":
47
+ - !binary |-
48
+ Y2xvc2U=
49
+ body:
50
+ encoding: ASCII-8BIT
51
+ string: !binary |-
52
+ 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
114
+ http_version:
115
+ recorded_at: Mon, 18 Feb 2013 12:53:16 GMT
116
+ recorded_with: VCR 2.4.0
@@ -0,0 +1,89 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://app.rakuten.co.jp/services/api/IchibaItem/Search/20120723?applicationId=16d8dfe13fde99ac5479d789764d2f7a&hits=2&keyword=%E3%82%8A%E3%82%93%E3%81%94&page=2
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: !binary |-
20
+ T0s=
21
+ headers:
22
+ !binary "RGF0ZQ==":
23
+ - !binary |-
24
+ TW9uLCAxOCBGZWIgMjAxMyAxMzo1NDo0NSBHTVQ=
25
+ !binary "QWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2lu":
26
+ - !binary |-
27
+ Kg==
28
+ !binary "Q2FjaGUtQ29udHJvbA==":
29
+ - !binary |-
30
+ bm8tc3RvcmU=
31
+ !binary "Q29udGVudC1UeXBl":
32
+ - !binary |-
33
+ YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PVVURi04
34
+ !binary "Q29udGVudC1MYW5ndWFnZQ==":
35
+ - !binary |-
36
+ amEtSlA=
37
+ !binary "VmFyeQ==":
38
+ - !binary |-
39
+ QWNjZXB0LUVuY29kaW5n
40
+ !binary "Q29udGVudC1FbmNvZGluZw==":
41
+ - !binary |-
42
+ Z3ppcA==
43
+ !binary "Q29udGVudC1MZW5ndGg=":
44
+ - !binary |-
45
+ MTU3NA==
46
+ !binary "Q29ubmVjdGlvbg==":
47
+ - !binary |-
48
+ Y2xvc2U=
49
+ body:
50
+ encoding: ASCII-8BIT
51
+ string: !binary |-
52
+ H4sIAAAAAAAAA+1WXU8TWRj+K5u5cpMG+glKstk1ZDfxZt3s6sVmI2YsA8za
53
+ r0wHwRiTOTNtpVClaKGiRXABKa1tYVvWAhX+i4cz0175F/Y9Z9ppC5i9UdeY
54
+ knSYc8573o/n/ZjnHucNTgZkbsjj8jjtNi7EjwvckNPGjYlSGLZdNs7H0xe3
55
+ jZsQ5TA78/KSJAoSN9S8MGyqcNhhfUUW/CD1xz32xg3d40T4/zPvB7UcVpKk
56
+ WtWr2w0F6UvLRuQlPLGyYJSXyMErhwseJ8cr9WwNq3tYK2O0h9HTb0jxH3JQ
57
+ MFJZhx2rBawVsDqL1ScYpTAq6pnXZK3SWHmsrxeNTAKjOazGjdQ6yewYzytg
58
+ 591yDqs7WMtj7SXZ2KqXXzjtDgeZT8Mb3CfFVaN69L6G9NIjPb0JO1hbZNI1
59
+ rEWwGsEKwmhWL5T1Z0WM8lhVsZbCmobVY6zlqHYlaZkHwxAORyGSvRPeYOgu
60
+ RE2iWfL87UlVIUdzH0LA1GAFRvbL+kzS6Sb7FVAJ3mH1DdbWWfja+1oMq1Ws
61
+ bVIfYV8FmxmQ6UTxcPOkOkvD28g1lt9SnCiWx1jdoK5rC/BSzwLAKjWJtswg
62
+ yVEaI2oNAqBZGw6O0qwFgwH+Nk/TC39Oe/PwF0n0wqlrkGadSfMhWQwG4MK7
63
+ GOgvMQTzGFUxKoF+0x8jM6evgBuPmUCO4VjCCOy+wmgeozWMFjGKYFTAikpd
64
+ 2oVbC/qy2lh6oicekOIzmgBwGD3E6Aij5Q+KQexrFZKcMa0DpvVyjUQ3sbqP
65
+ tRgDAYwWG0rqpFoAha1bHZqhFNAWKcbJsdbyMEVmtqEQW8vChZHgyLfva+A4
66
+ ZO0lVB4N8WwxdyRL66rtM6Vd396hDmsKFdEyJoZOvbhHD1TUTFWHBowSRiXi
67
+ ckIJuO1EmaNxRzf1RVADbuYgn8zTWZbnJmCWVSZD4ak/yJFilMlvUzB20vVD
68
+ qJp8Y30Vo32sQlMBkDEQMApxowJJeGwUd1s+pU+bYMh1dGmeWoH41AOsHdbj
69
+ f2NVYVglWgVoZTJNGxieCiLROFYPaZw02loDVfUXGX17lWl7RWLRhpYlT1C9
70
+ nNM3MvrqIbgE2dbXaub1s81g1Zz61wddBrMLAGypXpkxCikTIZJMMJy3jKNH
71
+ 7DTNCnSL3gJUFPXCyAgbMp1JKXVMpIQ5AMDxeu4BVhMAp56Jk+RDincbpC0T
72
+ AyP1lDYqyjaiVWYOBlISa9sMiX1QQiI5qgTmB+CxC/An6ruzpJRgGrLNhEOT
73
+ nB4RanuGWC8wFwolZh1wnYFbjUKUzD43nkWaaMTe1FN75CBP7cbe0HFIw1/t
74
+ ChaAhQ6cfw1HrMkTDNV8M7omvFlTGzM0T/NDw4xYITAN4HmRdWOeHGgtPUdn
75
+ cG4PfzP/0GV6AumZ1cZyEpAnizHYJzM7xgpMXAoUNIizoezCbLBQ7tQCTutx
76
+ qDqqiBSe6kv7enmRVqzV1OePq0J7Ul6XfDD3JmQ5NNTfTzf6JP72pCwE+rzB
77
+ vj9D/eYI7W+N0H64xo+NiT6RlwXzLlXkh2/pTz5+HD6lNs4vjIqT/it0DyTM
78
+ T6rYXLVtyROT/lsBXvT1sbNTZn+w3/TzPl/LvJe/JQYEGRwMj/WL/nHPxUGn
79
+ Z/Cio29cHPv+pjD9ncN5cRp+3H3bx7c1OOhye5yfyZbL7h5wes7aumHjwvTm
80
+ 54V1wD094P4soH5CS6cgbVoCQPk7oBPEfaJ8l1WuzE+bVUzpYTAsW1UNa68E
81
+ ZS0P89KoVejhiWDo6ti1CeF3gZcswfCEGLp6R5DCAh8+d/OyJPBm3/DhSRqL
82
+ JdVcD/uCYTEwfk1k1LMt13Gx1YK/ws/0ReYluX1DCIy2F5JwRxSmWlzX5XK3
83
+ ti6DR4w2u/s8LhqyGJAtjdbqt27V1v6PnTYAXbkLmCZxPkUPsaLQr5hJYoBj
84
+ 0Xm+ZS6B4sII5czbXQSuuddVE1NTU+dPKuqLEJCEK6MgTFPvGuTu07r6+Kze
85
+ 0yP1/zepd1zqJvVOT4/UfwRS36ps09luTu/4T07vGIAKcLY5PSS1R+t7tL5H
86
+ 679QWu+49GXRenuP1n9aWHu0/uuj9Xb3ebTe7fiqaf2N+/8CO+z8iwcYAAA=
87
+ http_version:
88
+ recorded_at: Mon, 18 Feb 2013 13:54:45 GMT
89
+ recorded_with: VCR 2.4.0
@@ -0,0 +1,107 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://app.rakuten.co.jp/services/api/IchibaItem/Search/20120723?applicationId=16d8dfe13fde99ac5479d789764d2f7a&hits=2&keyword=%E3%82%8A%E3%82%93%E3%81%94&page=1
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: !binary |-
20
+ T0s=
21
+ headers:
22
+ !binary "RGF0ZQ==":
23
+ - !binary |-
24
+ TW9uLCAxOCBGZWIgMjAxMyAxMzo1OTo0MCBHTVQ=
25
+ !binary "QWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2lu":
26
+ - !binary |-
27
+ Kg==
28
+ !binary "Q2FjaGUtQ29udHJvbA==":
29
+ - !binary |-
30
+ bm8tc3RvcmU=
31
+ !binary "Q29udGVudC1UeXBl":
32
+ - !binary |-
33
+ YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PVVURi04
34
+ !binary "Q29udGVudC1MYW5ndWFnZQ==":
35
+ - !binary |-
36
+ amEtSlA=
37
+ !binary "VmFyeQ==":
38
+ - !binary |-
39
+ QWNjZXB0LUVuY29kaW5n
40
+ !binary "Q29udGVudC1FbmNvZGluZw==":
41
+ - !binary |-
42
+ Z3ppcA==
43
+ !binary "Q29udGVudC1MZW5ndGg=":
44
+ - !binary |-
45
+ MjM2Nw==
46
+ !binary "Q29ubmVjdGlvbg==":
47
+ - !binary |-
48
+ Y2xvc2U=
49
+ body:
50
+ encoding: ASCII-8BIT
51
+ string: !binary |-
52
+ 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
104
+ r6dvt1Cb435fF7V7unkjffTqP6HK1yiLFwAA
105
+ http_version:
106
+ recorded_at: Mon, 18 Feb 2013 13:59:40 GMT
107
+ recorded_with: VCR 2.4.0
@@ -0,0 +1,42 @@
1
+ # coding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe RakutenApi::Base::Params do
6
+ describe '#normalize' do
7
+ shared_examples "should normalize" do |value, expect|
8
+ it { described_class.new.normalize(value).should eql expect }
9
+ end
10
+ context "String" do
11
+ it_behaves_like "should normalize", 'foo', 'foo'
12
+ it_behaves_like "should normalize", 'foo_bar', 'fooBar'
13
+ it_behaves_like "should normalize", 'foo_bar_baz', 'fooBarBaz'
14
+ end
15
+
16
+ context "Symbol" do
17
+ it_behaves_like "should normalize", :foo, 'foo'
18
+ it_behaves_like "should normalize", :foo_bar, 'fooBar'
19
+ it_behaves_like "should normalize", :foo_bar_baz, 'fooBarBaz'
20
+ end
21
+ end
22
+
23
+ describe '#add_param' do
24
+ let(:obj) { described_class.new }
25
+ context "valid param" do
26
+ before {
27
+ obj.add_param(:application_id, 'foo')
28
+ }
29
+ it { obj[:application_id].should eql 'foo' }
30
+ it { obj['applicationId'].should eql 'foo' }
31
+ it { obj.to_hash.should be_include 'applicationId' }
32
+ it { obj.to_hash.should_not be_include 'application_id' }
33
+ end
34
+
35
+ context "invalid param" do
36
+ before {
37
+ obj.invalid_params_action = :raise
38
+ }
39
+ it { lambda { obj.add_param(:app_id, 'foo') }.should raise_error(RakutenApi::Error) }
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,37 @@
1
+ # coding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe RakutenApi::GenreSearch::Client do
6
+ let(:client) {
7
+ described_class.new do |params|
8
+ params.add_param :genre_id, 0
9
+ end
10
+ }
11
+
12
+ describe '#request' do
13
+ let(:response) {
14
+ VCR.use_cassette('genre_search_response') do
15
+ client.request
16
+ end
17
+ }
18
+ it { response.should be_kind_of RakutenApi::GenreSearch::Response }
19
+ context :current do
20
+ subject { response.current }
21
+ it { should be_kind_of RakutenApi::GenreSearch::Model }
22
+ its(:genre_id) { should eql 0 }
23
+ its(:genre_name) { should eql '' }
24
+ its(:genre_level) { should eql 0 }
25
+ end
26
+ end
27
+
28
+ describe '.root_categories' do
29
+ let(:response) {
30
+ VCR.use_cassette('genre_search_response') do
31
+ described_class.root_categories
32
+ end
33
+ }
34
+ it { response.should be_kind_of Array }
35
+ it { response.first.should be_kind_of RakutenApi::GenreSearch::Model }
36
+ end
37
+ end
@@ -0,0 +1,32 @@
1
+ # coding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe RakutenApi::GenreSearch::Model do
6
+ describe ".from_hash" do
7
+ let(:data) {
8
+ {
9
+ 'genreId' => '1000',
10
+ 'genreName' => 'foo',
11
+ 'genreLevel' => '1'
12
+ }
13
+ }
14
+ subject { described_class.from_hash(data) }
15
+ its(:genre_id) { should eql 1000 }
16
+ its(:genre_name) { should eql 'foo' }
17
+ its(:genre_level) { should eql 1 }
18
+ end
19
+
20
+ describe "#to_hash" do
21
+ subject {
22
+ described_class.new.tap do |o|
23
+ o.genre_id = 1
24
+ o.genre_name = 'foo'
25
+ o.genre_level = 20
26
+ end.to_hash
27
+ }
28
+ its([:genre_id]) { should eql 1 }
29
+ its([:genre_name]) { should eql 'foo' }
30
+ its([:genre_level]) { should eql 20 }
31
+ end
32
+ end
@@ -0,0 +1,47 @@
1
+ # coding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe RakutenApi::GenreSearch::Response do
6
+ let(:client) {
7
+ RakutenApi::GenreSearch::Client.new do |params|
8
+ params.add_param :genre_id, genre_id
9
+ end
10
+ }
11
+
12
+ let(:response) {
13
+ VCR.use_cassette('genre_search_response_' + genre_id.to_s) do
14
+ client.get
15
+ end
16
+ }
17
+
18
+ context 'root_category' do
19
+ let(:genre_id) { 0 }
20
+ subject { described_class.new(response) }
21
+ its(:status) { should eql 200 }
22
+ its(:body) { should be }
23
+ its(:children) { should be_kind_of Array }
24
+ its('children.first') { should be_kind_of RakutenApi::GenreSearch::Model }
25
+ end
26
+
27
+ context 'level 1 category' do
28
+ let(:genre_id) { 551169 }
29
+ let(:obj) { described_class.new(response) }
30
+ it { obj.parents.should eql [] }
31
+ it { obj.children.should be_kind_of Array }
32
+ it { obj.current.genre_level.should eql 1 }
33
+ end
34
+
35
+ context "level 2 category" do
36
+ let(:genre_id) { 551172 }
37
+ let(:obj) { described_class.new(response) }
38
+ context '#parents' do
39
+ subject { obj.parents }
40
+ it { should be_kind_of Array }
41
+ context "first" do
42
+ subject { obj.parents.first }
43
+ its(:genre_level) { should eql 1 }
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,19 @@
1
+ # coding: utf-8
2
+
3
+ require 'spec_helper'
4
+ require 'json'
5
+
6
+ describe RakutenApi::ItemRanking::Client do
7
+ let(:client) {
8
+ described_class.new
9
+ }
10
+ describe '#get' do
11
+ let(:response) {
12
+ VCR.use_cassette('item_ranking_response') do
13
+ client.get
14
+ end
15
+ }
16
+ it { response.should be_kind_of ::Faraday::Response }
17
+ it { JSON.parse(response.body)['title'].should eql "【楽天市場】ランキング市場 【総合】" }
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # coding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe RakutenApi::ItemRanking::Model do
6
+ describe '.from_hash' do
7
+ context "ItemRankingData" do
8
+ let(:hash_data) {
9
+ {
10
+ "rank" => 10,
11
+ "carrier" => 1,
12
+ }
13
+ }
14
+ subject { described_class.from_hash(hash_data) }
15
+ its(:rank) { should eql 10 }
16
+ its(:carrier) { should eql 1 }
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,64 @@
1
+ # coding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe RakutenApi::ItemRanking::Response do
6
+ let(:client) { RakutenApi::ItemRanking::Client.new }
7
+ let(:response) {
8
+ VCR.use_cassette('item_ranking_response') do
9
+ client.get
10
+ end
11
+ }
12
+
13
+ describe '#initialize' do
14
+ let(:obj) { described_class.new(response) }
15
+ it { obj.title.should == '【楽天市場】ランキング市場 【総合】' }
16
+ it { obj.last_build_date.should be_kind_of DateTime }
17
+ it { obj.page.should eql 1 }
18
+ end
19
+
20
+ describe '#simple_mapping' do
21
+ let(:obj) { described_class.new(response).simple_mapping }
22
+ it { obj.should be_kind_of Array }
23
+ it { obj.first.should be_kind_of ::RakutenApi::ItemRanking::Model }
24
+ # 基本30件だが、出てこない場合がある様子
25
+ # xit {
26
+ # obj.each_with_index do |o, i|
27
+ # o.rank.should == i + 1
28
+ # end
29
+ # }
30
+ end
31
+
32
+ describe '#next_ranking' do
33
+ let(:obj) { described_class.new(response, client.params) }
34
+ let(:next_ranking) {
35
+ VCR.use_cassette('item_ranking_response_next_ranking') do
36
+ obj.next_ranking
37
+ end
38
+ }
39
+ it { next_ranking.should be_kind_of ::RakutenApi::ItemRanking::Response }
40
+ it { next_ranking.page.should eql 2 }
41
+
42
+ describe '#prev_ranking' do
43
+ let(:prev_ranking) {
44
+ VCR.use_cassette('item_ranking_response_prev_ranking') do
45
+ next_ranking.prev_ranking
46
+ end
47
+ }
48
+ it { prev_ranking.should be_kind_of ::RakutenApi::ItemRanking::Response }
49
+ it { prev_ranking.page.should eql 1 }
50
+ end
51
+ end
52
+
53
+ context 'error_response' do
54
+ let(:error_response) {
55
+ client.add_param :page, 0
56
+ VCR.use_cassette('item_ranking_error_response') do
57
+ client.request
58
+ end
59
+ }
60
+ it { error_response.should be_kind_of ::RakutenApi::ItemRanking::Response }
61
+ it { error_response.should be_error }
62
+ it { error_response.error_message.should == 'wrong_parameter: page must be over 1' }
63
+ end
64
+ end
@@ -0,0 +1,35 @@
1
+ # coding: utf-8
2
+
3
+ require 'spec_helper'
4
+ require 'json'
5
+
6
+ describe RakutenApi::ItemSearch::Client do
7
+ let(:client) {
8
+ described_class.new do |params|
9
+ params.add_param :keyword, 'りんご'
10
+ params.add_param :hits, 2
11
+ end
12
+ }
13
+ describe '#get' do
14
+ let(:response) {
15
+ VCR.use_cassette('item_search_response') do
16
+ client.get
17
+ end
18
+ }
19
+ it { response.should be_kind_of ::Faraday::Response }
20
+ it { JSON.parse(response.body)['hits'].should eql 2 }
21
+
22
+ it "bad request" do
23
+ described_class.new.get.status.should eql 400
24
+ end
25
+ end
26
+
27
+ describe '#request' do
28
+ let(:response) {
29
+ VCR.use_cassette('item_search_response') do
30
+ client.request
31
+ end
32
+ }
33
+ it { response.should be_kind_of ::RakutenApi::ItemSearch::Response }
34
+ end
35
+ end
@@ -0,0 +1,33 @@
1
+ # coding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe RakutenApi::ItemSearch::Model do
6
+ describe '.from_hash' do
7
+ context "BooleanData" do
8
+ let(:hash_data) {
9
+ {
10
+ "imageFlag" => 1,
11
+ "availability" => 1,
12
+ "taxFlag" => 0,
13
+ "postageFlag" => 1,
14
+ "creditCardFlag" => 1,
15
+ "shopOfTheYearFlag"=> 0,
16
+ "shipOverseasFlag"=> 0,
17
+ "asurakuFlag"=> 0,
18
+ "giftFlag" => 0,
19
+ }
20
+ }
21
+ subject { described_class.from_hash(hash_data) }
22
+ its(:image_flag) { should be_true }
23
+ its(:availability) { should be_true }
24
+ its(:tax_flag) { should be_false }
25
+ its(:postage_flag) { should be_true }
26
+ its(:credit_card_flag) { should be_true }
27
+ its(:shop_of_the_year_flag) { should be_false }
28
+ its(:ship_overseas_flag) { should be_false }
29
+ its(:asuraku_flag) { should be_false }
30
+ its(:gift_flag) { should be_false }
31
+ end
32
+ end
33
+ end