rms_web_service 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/.travis.yml +4 -0
  4. data/Gemfile +4 -0
  5. data/Guardfile +5 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +97 -0
  8. data/Rakefile +7 -0
  9. data/lib/rms_web_service.rb +10 -0
  10. data/lib/rms_web_service/configuration.rb +23 -0
  11. data/lib/rms_web_service/item.rb +27 -0
  12. data/lib/rms_web_service/item/delete.rb +28 -0
  13. data/lib/rms_web_service/item/get.rb +18 -0
  14. data/lib/rms_web_service/item/insert.rb +28 -0
  15. data/lib/rms_web_service/item/items_update.rb +31 -0
  16. data/lib/rms_web_service/item/response.rb +14 -0
  17. data/lib/rms_web_service/item/search.rb +21 -0
  18. data/lib/rms_web_service/item/update.rb +29 -0
  19. data/lib/rms_web_service/version.rb +3 -0
  20. data/rms_web_service.gemspec +30 -0
  21. data/spec/fixtures/delete.xml +23 -0
  22. data/spec/fixtures/get.xml +21 -0
  23. data/spec/fixtures/insert.xml +23 -0
  24. data/spec/fixtures/item.xml +4 -0
  25. data/spec/fixtures/items_update.xml +11 -0
  26. data/spec/fixtures/search.xml +17 -0
  27. data/spec/fixtures/update.xml +25 -0
  28. data/spec/rms_web_service/configuration_spec.rb +32 -0
  29. data/spec/rms_web_service/item/delete_spec.rb +31 -0
  30. data/spec/rms_web_service/item/get_spec.rb +30 -0
  31. data/spec/rms_web_service/item/insert_spec.rb +34 -0
  32. data/spec/rms_web_service/item/items_update_spec.rb +34 -0
  33. data/spec/rms_web_service/item/search_spec.rb +31 -0
  34. data/spec/rms_web_service/item/update_spec.rb +31 -0
  35. data/spec/rms_web_service/item_spec.rb +21 -0
  36. data/spec/rms_web_service_spec.rb +1 -0
  37. data/spec/spec_helper.rb +11 -0
  38. metadata +209 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f657900566ae9fc7c26ce9df5ef539fb9bd172f0
4
+ data.tar.gz: e2e50030c4ec72c2e81e522cc0c11fc0dbfb17c8
5
+ SHA512:
6
+ metadata.gz: 33b04d98d9d953d2f347c020e5b5c3274197cdee0bc99f25efc1a1e565ec98c40d0a90919a078ffcf74b1936d1f7ef7030361fe702fc788fe133d0bc509b62ae
7
+ data.tar.gz: 459ffdd6be56b9f1acf6ec3da91e5b2d2f4cc75015d2764a7cfc58fba7addeaaeaeaa8b6f7848e541b94e7770a17b5c609e19d86bbc86d9bb4a57981c237a0e8
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ - 1.9.3
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in rms_web_service.gemspec
4
+ gemspec
data/Guardfile ADDED
@@ -0,0 +1,5 @@
1
+ guard :rspec, :cmd => 'bundle exec rspec' do
2
+ watch(%r{^spec/.+_spec\.rb$})
3
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
4
+ watch('spec/spec_helper.rb') { "spec" }
5
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 kamiya54
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,97 @@
1
+ # RmsWebService
2
+
3
+ RMS Webservice APIのRubyラッパーです。
4
+
5
+ [![Build Status](https://travis-ci.org/kamiya54/rms_web_service.svg)](https://travis-ci.org/kamiya54/rms_web_service)
6
+
7
+ #### ご注意
8
+
9
+ * 楽天市場出品者用APIです。
10
+ * 現在一部機能のみサポートしています。
11
+ * 公式のものではありません。個人が作っているものですので、ご利用は自己責任でお願いします。
12
+
13
+ ## Installation
14
+
15
+ Add this line to your application's Gemfile:
16
+
17
+ ```ruby
18
+ gem 'rms_web_service'
19
+ ```
20
+
21
+ And then execute:
22
+
23
+ $ bundle
24
+
25
+ Or install it yourself as:
26
+
27
+ $ gem install rms_web_service
28
+
29
+ ## Usage
30
+
31
+ 現在、itemAPIのみサポートしています。パラメータについては公式ドキュメントを参照してください。
32
+
33
+ `RmsWebService.configuration`でサービスIDとライセンスキーを設定できます。各キーはRMSより発行できます。
34
+
35
+ ```ruby
36
+ RmsWebService.configuration do |c|
37
+ c.service_secret = "dummy_service_secret"
38
+ c.license_key = "dummy_license_key"
39
+ end
40
+ ```
41
+
42
+ ### RmsWebService::Item
43
+
44
+ RmsWebService::ItemがAPIの各メソッドを持っています。パラメータを渡す場合はハッシュ、複数のItemを渡す場合は配列を使用します。
45
+
46
+ 各メソッドが返すインスタンスがどのようなメソッドを持つかは公式ドキュメントを見るのが早いと思います。更新に失敗した場合のみ、`errorMessages`に設定されているエラー関係のメソッドをサポートします。
47
+
48
+ ```ruby
49
+ # item.get
50
+ item = RmsWebService::Item.get(:item_url => "ed-60c-w")
51
+ p item.item_name # => "ed-60c-w"
52
+
53
+ # item.update
54
+ item = RmsWebService::Item.update({:item_url => "ed-60c-w", :item_price => 43800})
55
+ p item.system_status # => "OK"
56
+
57
+ # item.insert
58
+ item = RmsWebService::Item.insert({
59
+ :item_url => "test001",
60
+ :item_name => "test001",
61
+ :item_price => "100000",
62
+ :genre_id => "211889",
63
+ })
64
+ p item.system_status # => "OK"
65
+
66
+ # item.delete
67
+ item = RmsWebService::Item.delete(:item_url => "test001")
68
+ p item.system_status # => "OK"
69
+
70
+ # item.search
71
+ items = RmsWebService::Item.search(:item_name => "空気清浄機")
72
+ items.each do |item|
73
+ p item.item_name
74
+ end
75
+
76
+ # items.update
77
+ items = RmsWebService::Item.items_update([
78
+ {:item_url => "ed-60c-w", :item_price => 43800},
79
+ {:item_url => "noexist", :item_price => 10800}
80
+ ])
81
+ items.each do |item|
82
+ if item.code == 'N000'
83
+ p item.item_url # => "ed-60c-w"
84
+ else
85
+ p item.error_id # => "335"
86
+ p item.msg # => "商品管理番号欄(商品URL)で指定された商品が見つかりません。更新・変更、削除の場合は、存在する商品の商品管理番号(商品URL)をご指定ください。"
87
+ end
88
+ end
89
+ ```
90
+
91
+ ## Contributing
92
+
93
+ 1. Fork it ( https://github.com/[my-github-username]/rms_web_service/fork )
94
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
95
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
96
+ 4. Push to the branch (`git push origin my-new-feature`)
97
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,7 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
7
+
@@ -0,0 +1,10 @@
1
+ require "rms_web_service/version"
2
+ require "rms_web_service/configuration"
3
+ require "rms_web_service/item"
4
+
5
+ RWS = RmsWebService
6
+
7
+ module RmsWebService
8
+ Endpoint = "https://api.rms.rakuten.co.jp/es/1.0/"
9
+ class AuthError < StandardError;end
10
+ end
@@ -0,0 +1,23 @@
1
+ require 'base64'
2
+
3
+ module RmsWebService
4
+ class Configuration
5
+ attr_accessor :service_secret, :license_key
6
+
7
+ def encoded_keys
8
+ if service_secret.present? && license_key.present?
9
+ return "ESA " + Base64.encode64(service_secret + ":" + license_key).gsub(/\n/, "")
10
+ else
11
+ raise AuthError, 'please set serviceSecret and licenseKey'
12
+ end
13
+ end
14
+ end
15
+
16
+ def configuration(&block)
17
+ @configuration ||= Configuration.new
18
+ block.call @configuration if block_given?
19
+ return @configuration
20
+ end
21
+
22
+ module_function :configuration
23
+ end
@@ -0,0 +1,27 @@
1
+ require 'nokogiri'
2
+ require 'faraday'
3
+ require 'active_support'
4
+ require 'active_support/core_ext'
5
+ require 'rms_web_service/item/response'
6
+ require 'rms_web_service/item/get'
7
+ require 'rms_web_service/item/insert'
8
+ require 'rms_web_service/item/update'
9
+ require 'rms_web_service/item/delete'
10
+ require 'rms_web_service/item/search'
11
+ require 'rms_web_service/item/items_update'
12
+
13
+ module RmsWebService
14
+ class Item
15
+ def self.connection(method)
16
+ connection = Faraday.new(:url => endpoint(method)) do |c|
17
+ c.adapter Faraday.default_adapter
18
+ c.headers['Authorization'] = RmsWebService.configuration.encoded_keys
19
+ end
20
+ end
21
+
22
+ def self.endpoint(method)
23
+ return Endpoint + method
24
+ end
25
+ end
26
+ end
27
+
@@ -0,0 +1,28 @@
1
+ module RmsWebService
2
+ class Item
3
+ def self.delete(args)
4
+ xml_object = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
5
+ xml.request do
6
+ xml.itemDeleteRequest do
7
+ xml.item do
8
+ args.each {|key, value| eval("xml.#{key.to_s.camelize(:lower)} '#{value}'")}
9
+ end
10
+ end
11
+ end
12
+ end
13
+
14
+ request = connection("item/delete").post {|req| req.body = xml_object.to_xml}
15
+ return Delete.new(request.body)
16
+ end
17
+
18
+ class Delete
19
+ include Response
20
+ def initialize(xml)
21
+ xml = Nokogiri::XML.parse(xml)
22
+ set_attributes xml.xpath("//status").children
23
+ set_attributes xml.xpath("//item").children
24
+ set_attribute("code", xml.xpath("//code").first.content)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,18 @@
1
+ module RmsWebService
2
+ class Item
3
+ def self.get(args)
4
+ request = connection('item/get').get {|req| req.params['itemUrl'] = args[:item_url]}
5
+ return Get.new(request.body)
6
+ end
7
+
8
+ class Get
9
+ include Response
10
+ def initialize(xml)
11
+ xml = Nokogiri::XML.parse(xml)
12
+ set_attributes xml.xpath("//status").children
13
+ set_attributes xml.xpath("//item").children
14
+ set_attribute("code", xml.xpath("//code").first.content) if xml.xpath("//code").present?
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,28 @@
1
+ module RmsWebService
2
+ class Item
3
+ def self.insert(args)
4
+ xml_object = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
5
+ xml.request do
6
+ xml.itemInsertRequest do
7
+ xml.item do
8
+ args.each {|key, value| eval("xml.#{key.to_s.camelize(:lower)} '#{value}'")}
9
+ end
10
+ end
11
+ end
12
+ end
13
+
14
+ request = connection("item/insert").post {|req| req.body = xml_object.to_xml}
15
+ return Insert.new(request.body)
16
+ end
17
+
18
+ class Insert
19
+ include Response
20
+ def initialize(xml)
21
+ xml = Nokogiri::XML.parse(xml)
22
+ set_attributes xml.xpath("//status").children
23
+ set_attributes xml.xpath("//item").children
24
+ set_attribute("code", xml.xpath("//code").first.content)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,31 @@
1
+ module RmsWebService
2
+ class Item
3
+ def self.items_update(args)
4
+ xml_object = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
5
+ xml.request do
6
+ xml.itemsUpdateRequest do
7
+ xml.items do
8
+ args.each do |item|
9
+ xml.item do
10
+ item.each {|key, value| eval("xml.#{key.to_s.camelize(:lower)} '#{value}'")}
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+ request = connection("items/update").post {|req| req.body = xml_object.to_xml}
19
+ return ItemsUpdate.new(request.body)
20
+ end
21
+
22
+ class ItemsUpdate < Array
23
+ include Response
24
+ def initialize(xml)
25
+ xml = Nokogiri::XML.parse(xml)
26
+ set_attributes xml.xpath("//status").children
27
+ xml.xpath("//itemsUpdateResult").children.each {|item| self << Update.new(item.to_xml)}
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,14 @@
1
+ module RmsWebService
2
+ class Item
3
+ module Response
4
+ def set_attributes(args)
5
+ args.each {|s| set_attribute(s.name, s.content)}
6
+ end
7
+
8
+ def set_attribute(name, content)
9
+ att = name.gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').gsub(/([a-z\d])([A-Z])/,'\1_\2').tr("-", "_").downcase
10
+ self.define_singleton_method(att) {content}
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,21 @@
1
+ module RmsWebService
2
+ class Item
3
+ def self.search(args)
4
+ request = connection("item/search").get do |req|
5
+ args.each {|key, value| req.params["#{key.to_s.camelize(:lower)}"] = args[:"#{key}"]}
6
+ end
7
+
8
+ return Search.new(request.body)
9
+ end
10
+
11
+ class Search < ::Array
12
+ include Response
13
+ def initialize(xml)
14
+ xml = Nokogiri::XML.parse(xml)
15
+ set_attributes xml.xpath("//status").children
16
+ set_attribute("code", xml.xpath("//code").first.content)
17
+ xml.xpath("//items").children.each {|item| self << Get.new(item.to_xml)}
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,29 @@
1
+ module RmsWebService
2
+ class Item
3
+ def self.update(args)
4
+ xml_object = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
5
+ xml.request do
6
+ xml.itemUpdateRequest do
7
+ xml.item do
8
+ args.each {|key, value| eval("xml.#{key.to_s.camelize(:lower)} '#{value}'")}
9
+ end
10
+ end
11
+ end
12
+ end
13
+
14
+ request = connection("item/update").post {|req| req.body = xml_object.to_xml}
15
+ return Update.new(request.body)
16
+ end
17
+
18
+ class Update
19
+ include Response
20
+ def initialize(xml)
21
+ xml = Nokogiri::XML.parse(xml)
22
+ set_attributes xml.xpath("//status").children
23
+ set_attributes xml.xpath("//item").children
24
+ set_attributes xml.xpath("//errorMessage").children if xml.xpath("//errorMessage").present?
25
+ set_attribute("code", xml.xpath("//code").first.content)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,3 @@
1
+ module RmsWebService
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'rms_web_service/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "rms_web_service"
8
+ spec.version = RmsWebService::VERSION
9
+ spec.authors = ["kamiya54"]
10
+ spec.email = ["kamiya54@gmail.com"]
11
+ spec.summary = %q{Ruby wrapper for RMS Web Service.}
12
+ spec.description = %q{Ruby wrapper for RMS Web Service.}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "faraday", "~> 0.9.0"
22
+ spec.add_dependency "nokogiri", "~> 1.6.2"
23
+ spec.add_dependency "activesupport"
24
+
25
+ spec.add_development_dependency "bundler", "~> 1.6"
26
+ spec.add_development_dependency "rake", "~> 10.0"
27
+ spec.add_development_dependency "rspec"
28
+ spec.add_development_dependency "webmock"
29
+ spec.add_development_dependency "guard-rspec"
30
+ end
@@ -0,0 +1,23 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <result>
3
+ <status>
4
+ <interfaceId>item.delete</interfaceId>
5
+ <systemStatus>OK/NG</systemStatus>
6
+ <message>message</message>
7
+ <requestId>UUID</requestId>
8
+ <requests/>
9
+ </status>
10
+ <itemDeleteResult>
11
+ <code>code</code>
12
+ <errorMessages>
13
+ <errorId>errorId</errorId>
14
+ <fieldId>fieldId</fieldId>
15
+ <msg>error message</msg>
16
+ <listIndex>1</listIndex>
17
+ <listIndex2>2</listIndex2>
18
+ </errorMessages>
19
+ <item>
20
+ <itemUrl>yyy</itemUrl>
21
+ </item>
22
+ </itemDeleteResult>
23
+ </result>
@@ -0,0 +1,21 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <result>
3
+ <status>
4
+ <interfaceId>item.get</interfaceId>
5
+ <systemStatus>OK</systemStatus>
6
+ <message>OK</message>
7
+ <requestId>714a4983-555f-42d9-aeea-89dae89f2f55</requestId>
8
+ <requests>
9
+ <itemUrl>aaa</itemUrl>
10
+ </requests>
11
+ </status>
12
+ <itemGetResult>
13
+ <code>N000</code>
14
+ <item>
15
+ <itemUrl>aaa</itemUrl>
16
+
17
+
18
+
19
+ </item>
20
+ </itemGetResult>
21
+ </result>
@@ -0,0 +1,23 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <result>
3
+ <status>
4
+ <interfaceId>item.insert</interfaceId>
5
+ <systemStatus>OK/NG</systemStatus>
6
+ <message>message</message>
7
+ <requestId>UUID</requestId>
8
+ <requests/>
9
+ </status>
10
+ <itemInsertResult>
11
+ <code>code</code>
12
+ <errorMessages>
13
+ <errorId>errorId</errorId>
14
+ <fieldId>fieldId</fieldId>
15
+ <msg>error message</msg>
16
+ <listIndex>1</listIndex>
17
+ <listIndex2>2</listIndex2>
18
+ </errorMessages>
19
+ <item>
20
+ <itemUrl>yyy</itemUrl>
21
+ </item>
22
+ </itemInsertResult>
23
+ </result>
@@ -0,0 +1,4 @@
1
+ <item>
2
+ <itemUrl>aaa</itemUrl>
3
+ <itemPrice>10000</itemPrice>
4
+ </item>
@@ -0,0 +1,11 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <result>
3
+ <status>
4
+ <interfaceId>items.update</interfaceId>
5
+ <systemStatus>OK</systemStatus>
6
+ <message>OK</message>
7
+ <requestId>3106e794-0631-4a3d-899c-97a473b017de</requestId>
8
+ <requests/>
9
+ </status>
10
+ <itemsUpdateResult><itemUpdateResult><code>N000</code><item><itemUrl>itemXXX</itemUrl></item></itemUpdateResult><itemUpdateResult><code>C219</code><errorMessages><errorMessage><errorId>335</errorId><fieldId>501</field><msg>商品管理番号欄(商品URL)で指定された商品が見つかりません。更新・変更、削除の場合は、存在する商品の商品管理番号(商品URL)をご指定ください。</msg></errorMessage></errorMessages><item><itemUrl>itemYYY</itemUrl></item></itemUpdateResult></itemsUpdateResult>
11
+ </result>
@@ -0,0 +1,17 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <result>
3
+ <status>
4
+ <interfaceId>item.search</interfaceId>
5
+ <systemStatus>OK</systemStatus>
6
+ <message>OK</message>
7
+ <requestId>714a4983-555f-42d9-aeea-89dae89f2f55</requestId>
8
+ <requests>
9
+ <itemUrl>aaa</itemUrl>
10
+ </requests>
11
+ </status>
12
+ <itemSearchResult>
13
+ <code>200-00</code>
14
+ <numFound>10<numFound>
15
+ <items><item><itemUrl>aaa</itemUrl><itemPrice>10000</itemPrice></item><item><itemUrl>bbb</itemUrl><itemPrice>20000</itemPrice></item><item><itemUrl>ccc</itemUrl><itemPrice>30000</itemPrice></item></items>
16
+ </itemSearchResult>
17
+ </result>
@@ -0,0 +1,25 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <result>
3
+ <status>
4
+ <interfaceId>item.update</interfaceId>
5
+ <systemStatus>OK/NG</systemStatus>
6
+ <message>message</message>
7
+ <requestId>UUID</requestId>
8
+ <requests/>
9
+ </status>
10
+ <itemUpdateResult>
11
+ <code>code</code>
12
+ <errorMessages>
13
+ <errorMessage>
14
+ <errorId>errorId</errorId>
15
+ <fieldId>fieldId</fieldId>
16
+ <msg>error message</msg>
17
+ <listIndex>1</listIndex>
18
+ <listIndex2>2</listIndex2>
19
+ </errorMessage>
20
+ </errorMessages>
21
+ <item>
22
+ <itemUrl>yyy</itemUrl>
23
+ </item>
24
+ </itemUpdateResult>
25
+ </result>
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+ require 'rms_web_service/item'
3
+
4
+ describe RmsWebService do
5
+ describe '.configuration' do
6
+ let(:config) {RmsWebService.configuration}
7
+
8
+ context "don't set serviceSecret and licenseKey" do
9
+ it 'raise AuthError' do
10
+ expect{config.encoded_keys}.to raise_error RmsWebService::AuthError
11
+ end
12
+ end
13
+
14
+ context 'set serviceSecret and licenseKey correctly' do
15
+ before :each do
16
+ RmsWebService.configuration do |c|
17
+ c.service_secret = 'dummy_service_secret'
18
+ c.license_key = 'dummy_license_key'
19
+ end
20
+ end
21
+
22
+ it 'can set parameters properly' do
23
+ expect(config.service_secret).to eq 'dummy_service_secret'
24
+ expect(config.license_key).to eq 'dummy_license_key'
25
+ end
26
+
27
+ it 'return encoded keys' do
28
+ expect(Base64.decode64(config.encoded_keys.gsub('ESA ', ''))).to eq 'dummy_service_secret:dummy_license_key'
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+ require 'rms_web_service/item'
3
+
4
+ describe RmsWebService::Item::Delete do
5
+ describe '.delete' do
6
+ let(:api) {RmsWebService::Item.delete({:item_url => 'test001'})}
7
+
8
+ before :all do
9
+ RmsWebService.configuration do |c|
10
+ c.service_secret = 'dummy_service_secret'
11
+ c.license_key = 'dummy_license_key'
12
+ end
13
+ end
14
+
15
+ before :each do
16
+ stub_request(:post, "https://api.rms.rakuten.co.jp/es/1.0/item/delete")
17
+ .to_return(:status => 200, body: fixture('delete.xml'))
18
+ end
19
+
20
+
21
+ it 'return instance of RmsWebService::Item::Delete' do
22
+ expect(api).to be_a RmsWebService::Item::Delete
23
+ end
24
+
25
+ it "have methods to return parameters of response" do
26
+ expect(api.respond_to?(:code)).to be_truthy
27
+ expect(api.respond_to?(:system_status)).to be_truthy
28
+ expect(api.respond_to?(:item_url)).to be_truthy
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+ require 'rms_web_service/item'
3
+
4
+ describe RmsWebService::Item::Get do
5
+ describe '.get' do
6
+ let(:api) {RmsWebService::Item.get(:item_url => 'test001')}
7
+
8
+ before do
9
+ RmsWebService.configuration do |c|
10
+ c.service_secret = 'dummy_service_secret'
11
+ c.license_key = 'dummy_license_key'
12
+ end
13
+ end
14
+
15
+ before :each do
16
+ stub_request(:get, "https://api.rms.rakuten.co.jp/es/1.0/item/get?itemUrl=test001")
17
+ .to_return(:status => 200, body: fixture('get.xml'))
18
+ end
19
+
20
+ it 'return instance of RmsWebService::Item::Get' do
21
+ expect(api).to be_a RmsWebService::Item::Get
22
+ end
23
+
24
+ it "have methods to return parameters of response" do
25
+ expect(api.respond_to?(:code)).to be_truthy
26
+ expect(api.respond_to?(:system_status)).to be_truthy
27
+ expect(api.respond_to?(:item_url)).to be_truthy
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+ require 'rms_web_service/item'
3
+
4
+ describe RmsWebService::Item::Insert do
5
+ describe '.insert' do
6
+ let(:api) {RmsWebService::Item.insert({
7
+ :item_url => 'test001',
8
+ :item_name => 'test001',
9
+ :genre_id => '560420'
10
+ })}
11
+
12
+ before :all do
13
+ RmsWebService.configuration do |c|
14
+ c.service_secret = 'dummy_service_secret'
15
+ c.license_key = 'dummy_license_key'
16
+ end
17
+ end
18
+
19
+ before :each do
20
+ stub_request(:post, "https://api.rms.rakuten.co.jp/es/1.0/item/insert")
21
+ .to_return(:status => 200, body: fixture('insert.xml'))
22
+ end
23
+
24
+ it 'return instance of RmsWebService::Item::Insert' do
25
+ expect(api).to be_a RmsWebService::Item::Insert
26
+ end
27
+
28
+ it "have methods to return parameters of response" do
29
+ expect(api.respond_to?(:code)).to be_truthy
30
+ expect(api.respond_to?(:system_status)).to be_truthy
31
+ expect(api.respond_to?(:item_url)).to be_truthy
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+ require 'rms_web_service/item'
3
+
4
+ describe RmsWebService::Item::ItemsUpdate do
5
+ describe '.update_items' do
6
+ let(:api) {RmsWebService::Item.items_update([
7
+ {:item_url => 'test001', :item_price => 100},
8
+ {:item_url => 'test002', :item_price => 200}
9
+ ])}
10
+
11
+ before do
12
+ RmsWebService.configuration do |c|
13
+ c.service_secret = 'dummy_service_secret'
14
+ c.license_key = 'dummy_license_key'
15
+ end
16
+ end
17
+
18
+ before :each do
19
+ stub_request(:post, "https://api.rms.rakuten.co.jp/es/1.0/items/update")
20
+ .to_return(:status => 200, body: fixture('items_update.xml'))
21
+ end
22
+
23
+ it 'return Array of RmsWebService::Response' do
24
+ expect(api).to be_a RmsWebService::Item::ItemsUpdate
25
+ expect(api[0]).to be_a RmsWebService::Item::Update
26
+ end
27
+
28
+ it "have methods to return parameters of response" do
29
+ expect(api.respond_to?(:system_status)).to be_truthy
30
+ expect(api[0].respond_to?(:item_url)).to be_truthy
31
+ expect(api[0].respond_to?(:code)).to be_truthy
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+ require 'rms_web_service/item'
3
+
4
+ describe RmsWebService::Item::Search do
5
+ describe '.search' do
6
+ let(:api) {RmsWebService::Item.search(:item_name => 'test001', :item_price_from => 1)}
7
+
8
+ before do
9
+ RmsWebService.configuration do |c|
10
+ c.service_secret = 'dummy_service_secret'
11
+ c.license_key = 'dummy_license_key'
12
+ end
13
+ end
14
+
15
+ before :each do
16
+ stub_request(:get, "https://api.rms.rakuten.co.jp/es/1.0/item/search?itemName=test001&itemPriceFrom=1")
17
+ .to_return(:status => 200, body: fixture('search.xml'))
18
+ end
19
+
20
+ it 'return Array of RmsWebService::Response' do
21
+ expect(api).to be_a RmsWebService::Item::Search
22
+ expect(api[0]).to be_a RmsWebService::Item::Get
23
+ end
24
+
25
+ it "have methods to return parameters of response" do
26
+ expect(api.respond_to?(:code)).to be_truthy
27
+ expect(api.respond_to?(:system_status)).to be_truthy
28
+ expect(api[0].respond_to?(:item_url)).to be_truthy
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+ require 'rms_web_service/item'
3
+
4
+ describe RmsWebService::Item::Update do
5
+ describe '.update' do
6
+ let(:api) {RmsWebService::Item.update({:item_url => 'test001', :item_price => '10000'})}
7
+
8
+ before :all do
9
+ RmsWebService.configuration do |c|
10
+ c.service_secret = 'dummy_service_secret'
11
+ c.license_key = 'dummy_license_key'
12
+ end
13
+ end
14
+
15
+ before :each do
16
+ stub_request(:post, "https://api.rms.rakuten.co.jp/es/1.0/item/update")
17
+ .to_return(:status => 200, body: fixture('update.xml'))
18
+ end
19
+
20
+ it 'return instance of RmsWebService::Item::Update' do
21
+ expect(api).to be_a RmsWebService::Item::Update
22
+ end
23
+
24
+ it "have methods to return parameters of response" do
25
+ expect(api.respond_to?(:code)).to be_truthy
26
+ expect(api.respond_to?(:system_status)).to be_truthy
27
+ expect(api.respond_to?(:item_url)).to be_truthy
28
+ expect(api.respond_to?(:error_id)).to be_truthy
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+ require 'rms_web_service/item'
3
+
4
+ describe RmsWebService::Item do
5
+ describe '.connection' do
6
+ before do
7
+ RmsWebService.configuration do |c|
8
+ c.service_secret = 'dummy_service_secret'
9
+ c.license_key = 'dummy_license_key'
10
+ end
11
+ end
12
+
13
+ it 'return instance of Faraday::Connection' do
14
+ expect(RmsWebService::Item.connection("item/get")).to be_a Faraday::Connection
15
+ end
16
+
17
+ it 'have a collect endpoint' do
18
+ expect(RmsWebService::Item.endpoint("item/get")).to eq "https://api.rms.rakuten.co.jp/es/1.0/item/get"
19
+ end
20
+ end
21
+ end
@@ -0,0 +1 @@
1
+ require 'spec_helper'
@@ -0,0 +1,11 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+ require 'rms_web_service'
3
+ require 'webmock/rspec'
4
+
5
+ def fixture_path
6
+ File.expand_path("../fixtures", __FILE__)
7
+ end
8
+
9
+ def fixture(file)
10
+ File.new(File.join(fixture_path, file))
11
+ end
metadata ADDED
@@ -0,0 +1,209 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rms_web_service
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - kamiya54
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-09-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 0.9.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 0.9.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: nokogiri
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 1.6.2
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 1.6.2
41
+ - !ruby/object:Gem::Dependency
42
+ name: activesupport
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.6'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '1.6'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '10.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: webmock
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: guard-rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ description: Ruby wrapper for RMS Web Service.
126
+ email:
127
+ - kamiya54@gmail.com
128
+ executables: []
129
+ extensions: []
130
+ extra_rdoc_files: []
131
+ files:
132
+ - .gitignore
133
+ - .travis.yml
134
+ - Gemfile
135
+ - Guardfile
136
+ - LICENSE.txt
137
+ - README.md
138
+ - Rakefile
139
+ - lib/rms_web_service.rb
140
+ - lib/rms_web_service/configuration.rb
141
+ - lib/rms_web_service/item.rb
142
+ - lib/rms_web_service/item/delete.rb
143
+ - lib/rms_web_service/item/get.rb
144
+ - lib/rms_web_service/item/insert.rb
145
+ - lib/rms_web_service/item/items_update.rb
146
+ - lib/rms_web_service/item/response.rb
147
+ - lib/rms_web_service/item/search.rb
148
+ - lib/rms_web_service/item/update.rb
149
+ - lib/rms_web_service/version.rb
150
+ - rms_web_service.gemspec
151
+ - spec/fixtures/delete.xml
152
+ - spec/fixtures/get.xml
153
+ - spec/fixtures/insert.xml
154
+ - spec/fixtures/item.xml
155
+ - spec/fixtures/items_update.xml
156
+ - spec/fixtures/search.xml
157
+ - spec/fixtures/update.xml
158
+ - spec/rms_web_service/configuration_spec.rb
159
+ - spec/rms_web_service/item/delete_spec.rb
160
+ - spec/rms_web_service/item/get_spec.rb
161
+ - spec/rms_web_service/item/insert_spec.rb
162
+ - spec/rms_web_service/item/items_update_spec.rb
163
+ - spec/rms_web_service/item/search_spec.rb
164
+ - spec/rms_web_service/item/update_spec.rb
165
+ - spec/rms_web_service/item_spec.rb
166
+ - spec/rms_web_service_spec.rb
167
+ - spec/spec_helper.rb
168
+ homepage: ''
169
+ licenses:
170
+ - MIT
171
+ metadata: {}
172
+ post_install_message:
173
+ rdoc_options: []
174
+ require_paths:
175
+ - lib
176
+ required_ruby_version: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - '>='
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ required_rubygems_version: !ruby/object:Gem::Requirement
182
+ requirements:
183
+ - - '>='
184
+ - !ruby/object:Gem::Version
185
+ version: '0'
186
+ requirements: []
187
+ rubyforge_project:
188
+ rubygems_version: 2.2.2
189
+ signing_key:
190
+ specification_version: 4
191
+ summary: Ruby wrapper for RMS Web Service.
192
+ test_files:
193
+ - spec/fixtures/delete.xml
194
+ - spec/fixtures/get.xml
195
+ - spec/fixtures/insert.xml
196
+ - spec/fixtures/item.xml
197
+ - spec/fixtures/items_update.xml
198
+ - spec/fixtures/search.xml
199
+ - spec/fixtures/update.xml
200
+ - spec/rms_web_service/configuration_spec.rb
201
+ - spec/rms_web_service/item/delete_spec.rb
202
+ - spec/rms_web_service/item/get_spec.rb
203
+ - spec/rms_web_service/item/insert_spec.rb
204
+ - spec/rms_web_service/item/items_update_spec.rb
205
+ - spec/rms_web_service/item/search_spec.rb
206
+ - spec/rms_web_service/item/update_spec.rb
207
+ - spec/rms_web_service/item_spec.rb
208
+ - spec/rms_web_service_spec.rb
209
+ - spec/spec_helper.rb