rms_api_ruby 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5beefea055707b965e4eed053af207273e84bbe40ff9dbc68ef50c03d907fd74
4
- data.tar.gz: 2cb267d11dd9a0fe40af0a790998277c03935e182ef7a75b1e652c11ca6ddeeb
3
+ metadata.gz: '08380e4d50146bab769f56f4156751e4ce0b6788333f8c637198b7157994cb9b'
4
+ data.tar.gz: 9be7202be3b41ec3773ee918bc30c3190cb5b107b22a03f36564f8b655cc5009
5
5
  SHA512:
6
- metadata.gz: 0ba720f6cbb127fcfc3043e36d0af5956382b6b111bf10ea05449dce614d0b2d1b67fc533888ccd509c20a40e57fee2df06f0a3430e4e3da3bc8042819c32df9
7
- data.tar.gz: cc8054ce050f489c06a1fbe2f41163be4359749eb02b122a94edee47821d8e205a4ea7ece819508e7f3faca9aebeb83f1290ff17b62275ba97200a57256cae67
6
+ metadata.gz: 07e89f486b327e760986a491390a93784ea24c0c69f0a382dd5fcc28b529071347be4522101fb01eab727e7c09ca10c9b54a9049acfd290776d14609a2f4a510
7
+ data.tar.gz: f8edb76474508be2554e536770c2078741f2306d4133e9bb6458ac3f2d8b7da93924169c33c34f8618db597010589a21f34bf24fc49b15737d352b3ca13af1bb
@@ -1,3 +1,6 @@
1
+ ## 0.3.0 (Jul 1, 2018)
2
+ * Add Item API
3
+
1
4
  ## 0.2.2 (Jun 23, 2018)
2
5
  * Add circle ci
3
6
 
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rms_api_ruby (0.2.2)
4
+ rms_api_ruby (0.3.0)
5
5
  activesupport
6
6
  hashie
7
7
  savon (~> 2.12.0)
@@ -15,6 +15,8 @@ GEM
15
15
  i18n (>= 0.7, < 2)
16
16
  minitest (~> 5.1)
17
17
  tzinfo (~> 1.1)
18
+ addressable (2.5.2)
19
+ public_suffix (>= 2.0.2, < 4.0)
18
20
  akami (1.3.1)
19
21
  gyoku (>= 0.4.0)
20
22
  nokogiri
@@ -23,9 +25,12 @@ GEM
23
25
  byebug (10.0.2)
24
26
  coderay (1.1.2)
25
27
  concurrent-ruby (1.0.5)
28
+ crack (0.4.3)
29
+ safe_yaml (~> 1.0.0)
26
30
  diff-lcs (1.3)
27
31
  gyoku (1.3.1)
28
32
  builder (>= 2.1.2)
33
+ hashdiff (0.3.7)
29
34
  hashie (3.5.7)
30
35
  httpi (2.4.3)
31
36
  rack
@@ -49,6 +54,7 @@ GEM
49
54
  pry-byebug (3.6.0)
50
55
  byebug (~> 10.0)
51
56
  pry (~> 0.10)
57
+ public_suffix (3.0.2)
52
58
  rack (2.0.5)
53
59
  rainbow (3.0.0)
54
60
  rake (10.5.0)
@@ -76,6 +82,7 @@ GEM
76
82
  ruby-progressbar (~> 1.7)
77
83
  unicode-display_width (~> 1.0, >= 1.0.1)
78
84
  ruby-progressbar (1.9.0)
85
+ safe_yaml (1.0.4)
79
86
  savon (2.12.0)
80
87
  akami (~> 1.2)
81
88
  builder (>= 2.1.2)
@@ -93,6 +100,10 @@ GEM
93
100
  httpi (~> 2.0)
94
101
  nokogiri (>= 1.4.2)
95
102
  waterfall (1.2.0)
103
+ webmock (3.4.2)
104
+ addressable (>= 2.3.6)
105
+ crack (>= 0.3.2)
106
+ hashdiff
96
107
 
97
108
  PLATFORMS
98
109
  ruby
@@ -105,6 +116,7 @@ DEPENDENCIES
105
116
  rspec (~> 3.0)
106
117
  rspec_junit_formatter
107
118
  rubocop (~> 0.57.1)
119
+ webmock
108
120
 
109
121
  BUNDLED WITH
110
122
  1.16.2
data/README.md CHANGED
@@ -1,16 +1,17 @@
1
1
  # RmsApiRuby
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/rms_api_ruby.svg)](https://badge.fury.io/rb/rms_api_ruby)
3
4
  [![CircleCI](https://circleci.com/gh/Kaicoh/rms_api_ruby/tree/master.svg?style=svg)](https://circleci.com/gh/Kaicoh/rms_api_ruby/tree/master)
4
5
 
5
6
  RmsApiRuby is a ruby gem for the RMS(Rakuten Marchant Service) Web API. By default all API calls will return [Hashie::Mash](https://github.com/intridea/hashie/tree/v1.2.0) objects.
6
- At this time this gem supports OrderAPI and InventoryAPI only.
7
+ At this time this gem supports OrderAPI, InventoryAPI and ItemAPI.
7
8
 
8
9
  Support
9
10
  - OrderAPI
10
11
  - InventoryAPI
12
+ - ItemAPI
11
13
 
12
14
  Not Support yet
13
- - ItemAPI
14
15
  - ProductAPI
15
16
  - CabinetAPI
16
17
  - NavigationAPI
@@ -59,92 +60,14 @@ RmsApiRuby.configure do |config|
59
60
  config.user_name = 'user name' # default 'rms_api_ruby'
60
61
  config.order_api_version = 'Order API version' # default 1.0
61
62
  config.inventory_api_version = 'Inventory API version' # default 1.0
63
+ config.item_api_version = 'Item API version' # default 1.0
62
64
  end
63
65
  ```
64
66
 
65
- ### Example
66
-
67
- #### OrderAPI
68
-
69
- ##### GetOrder
70
-
71
- ```ruby
72
- args = {
73
- is_order_number_only_flag: false,
74
- order_number: ['Rakuten order number you want'],
75
- }
76
- response = RmsApiRuby::Order.get_order(args)
77
- # => #<Hashie::Mash>
78
-
79
- response.error_code
80
- # => 'N00-000'
81
-
82
- response.message
83
- # => '正常終了'
84
-
85
- rakuten_order = response.order_model
86
- # => #<Hashie::Mash>
87
- ```
88
-
89
- ##### ChangeStatus
90
-
91
- ```ruby
92
- response = RmsApiRuby::Order.get_request_id
93
- # => #<Hashie::Mash>
94
-
95
- response.error_code
96
- # => 'N00-000'
97
-
98
- response.message
99
- # => '正常終了'
100
-
101
- request_id = response.request_id
102
- # => 'XXXXXXXXXX'
103
-
104
- args = {
105
- request_id: request_id,
106
- order_status_model: [
107
- {
108
- order_number: ['Rakuten order number you want to change status'],
109
- status_name: '発送後入金待ち'
110
- }
111
- ]
112
- }
113
-
114
- response = RmsApiRuby::Order.change_status(args)
115
- # => #<Hashie::Mash>
116
-
117
- response.error_code
118
- # => 'N00-000'
119
-
120
- response.message
121
- # => '正常終了'
122
-
123
- ```
124
-
125
- ### InventoryAPI
126
-
127
- #### GetInventoryExternal
128
-
129
- ```ruby
130
- args = {
131
- inventory_search_range: 100
132
- }
133
- response = RmsApiRuby::Inventory.get_inventory_external(args)
134
- # => #<Hashie::Mash>
135
-
136
- response.keys
137
- # => ["err_code", "err_message", "get_response_external_item", "@xmlns:n1", "@xmlns:n2", "@xsi:type"]
138
-
139
- response.err_code
140
- # => 'N00-000'
141
-
142
- response.err_message
143
- # => '正常終了'
144
-
145
- response.get_response_external_item
146
- # => #<Hashie::Mash>
147
- ```
67
+ ### Examples
68
+ - [OrderAPI](docs/order_api.md)
69
+ - [InventoryAPI](docs/inventory_api.md)
70
+ - [ItemAPI](docs/item_api.md)
148
71
 
149
72
  ## Development
150
73
 
@@ -0,0 +1,23 @@
1
+ ## InventoryAPI
2
+
3
+ ### GetInventoryExternal
4
+
5
+ ```ruby
6
+ args = {
7
+ inventory_search_range: 100
8
+ }
9
+ response = RmsApiRuby::Inventory.get_inventory_external(args)
10
+ # => #<Hashie::Mash>
11
+
12
+ response.keys
13
+ # => ["err_code", "err_message", "get_response_external_item", "@xmlns:n1", "@xmlns:n2", "@xsi:type"]
14
+
15
+ response.err_code
16
+ # => 'N00-000'
17
+
18
+ response.err_message
19
+ # => '正常終了'
20
+
21
+ response.get_response_external_item
22
+ # => #<Hashie::Mash>
23
+ ```
@@ -0,0 +1,131 @@
1
+ ## ItemAPI
2
+
3
+ ### get
4
+
5
+ ```ruby
6
+ args = { item_url: 'test-item-001' }
7
+ response = RmsApiRuby::Item.get(args)
8
+ # => #<Hashie::Mash>
9
+
10
+ response.keys
11
+ # => ["status", "item_get_result"]
12
+
13
+ response.item_get_result
14
+ # => #<Hashie::Mash code="N000" item=#<Hashie::Mash ...>>
15
+ ```
16
+
17
+ ### insert
18
+
19
+ ```ruby
20
+ args = {
21
+ item_insert_request: {
22
+ item: {
23
+ item_url: 'test-item-001',
24
+ item_name: 'My Item',
25
+ item_price: 10000,
26
+ genre_id: 999999,
27
+ is_depot: true,
28
+ item_inventory: {
29
+ inventory_type: 1,
30
+ inventories: {
31
+ inventory: {
32
+ inventory_count: 0
33
+ }
34
+ }
35
+ }
36
+ }
37
+ }
38
+ }
39
+ response = RmsApiRuby::Item.insert(args)
40
+ # => #<Hashie::Mash>
41
+
42
+ response.keys
43
+ # => ["status", "item_insert_result"]
44
+
45
+ response.item_insert_result
46
+ # => #<Hashie::Mash code="N000" item=#<Hashie::Mash item_url="test-item-001">>
47
+ ```
48
+
49
+ ### update
50
+
51
+ ```ruby
52
+ args = {
53
+ item_update_request: {
54
+ item: {
55
+ item_url: 'test-item-001',
56
+ item_name: 'My Item2',
57
+ }
58
+ }
59
+ }
60
+ response = RmsApiRuby::Item.update(args)
61
+ # => #<Hashie::Mash>
62
+
63
+ response.keys
64
+ # => ["status", "item_update_result"]
65
+
66
+ response.item_update_result
67
+ # => #<Hashie::Mash code="N000" item=#<Hashie::Mash item_url="test-item-001">>
68
+ ```
69
+
70
+ ### delete
71
+
72
+ ```ruby
73
+ args = {
74
+ item_delete_request: {
75
+ item: {
76
+ item_url: 'test-item-001'
77
+ }
78
+ }
79
+ }
80
+ response = RmsApiRuby::Item.delete(args)
81
+ # => #<Hashie::Mash>
82
+
83
+ response.keys
84
+ # => ["status", "item_delete_result"]
85
+
86
+ response.item_delete_result
87
+ # => #<Hashie::Mash code="N000" item=#<Hashie::Mash item_url="test-item-001">>
88
+ ```
89
+
90
+ ### search
91
+
92
+ ```ruby
93
+ args = { item_url: 'test-item-001' }
94
+ response = RmsApiRuby::Item.search(args)
95
+ # => #<Hashie::Mash>
96
+
97
+ response.keys
98
+ # => ["status", "item_search_result"]
99
+
100
+ response.item_search_result
101
+ # => #<Hashie::Mash code="200-00" items=#<Hashie::Mash item=#<Hashie::Mash ...>> num_found="1">
102
+ ```
103
+
104
+ ## ItemsAPI
105
+
106
+ ### update
107
+
108
+ ```ruby
109
+ args = {
110
+ items_update_request: {
111
+ items: [
112
+ {
113
+ item_url: 'test-item-001',
114
+ item_name: 'My Item updated',
115
+ },
116
+ {
117
+ item_url: 'test-item-002',
118
+ item_name: 'My Item2 updated',
119
+ }
120
+ ]
121
+ }
122
+ }
123
+ response = RmsApiRuby::Items.update(args)
124
+ # => #<Hashie::Mash >
125
+
126
+ response.keys
127
+ # => ["status", "items_update_result"]
128
+
129
+ response.items_update_result
130
+ # => #<Hashie::Mash item_update_result=#<Hashie::Array [#<Hashie::Mash code="N000" item=#<Hashie::Mash item_url="test-item-001">>, #<Hashie::Mash code="N000" item=#<Hashie::Mash item_url="test-item-002">>]>>
131
+ ```
@@ -0,0 +1,57 @@
1
+ ## OrderAPI
2
+
3
+ ### GetOrder
4
+
5
+ ```ruby
6
+ args = {
7
+ is_order_number_only_flag: false,
8
+ order_number: ['Rakuten order number you want'],
9
+ }
10
+ response = RmsApiRuby::Order.get_order(args)
11
+ # => #<Hashie::Mash>
12
+
13
+ response.error_code
14
+ # => 'N00-000'
15
+
16
+ response.message
17
+ # => '正常終了'
18
+
19
+ rakuten_order = response.order_model
20
+ # => #<Hashie::Mash>
21
+ ```
22
+
23
+ ### ChangeStatus
24
+
25
+ ```ruby
26
+ response = RmsApiRuby::Order.get_request_id
27
+ # => #<Hashie::Mash>
28
+
29
+ response.error_code
30
+ # => 'N00-000'
31
+
32
+ response.message
33
+ # => '正常終了'
34
+
35
+ request_id = response.request_id
36
+ # => 'XXXXXXXXXX'
37
+
38
+ args = {
39
+ request_id: request_id,
40
+ order_status_model: [
41
+ {
42
+ order_number: ['Rakuten order number you want to change status'],
43
+ status_name: '発送後入金待ち'
44
+ }
45
+ ]
46
+ }
47
+
48
+ response = RmsApiRuby::Order.change_status(args)
49
+ # => #<Hashie::Mash>
50
+
51
+ response.error_code
52
+ # => 'N00-000'
53
+
54
+ response.message
55
+ # => '正常終了'
56
+
57
+ ```
@@ -15,6 +15,8 @@ module RmsApiRuby
15
15
  autoload :Order, 'rms_api_ruby/order'
16
16
  autoload :Orders, 'rms_api_ruby/orders'
17
17
  autoload :Inventory, 'rms_api_ruby/inventory'
18
+ autoload :Item, 'rms_api_ruby/item'
19
+ autoload :Items, 'rms_api_ruby/items'
18
20
 
19
21
  def self.root
20
22
  File.dirname __dir__
@@ -2,7 +2,8 @@ module RmsApiRuby
2
2
  class Chain
3
3
  include Waterfall
4
4
 
5
- autoload :SoapClient, 'rms_api_ruby/chain/soap_client'
6
- autoload :Logger, 'rms_api_ruby/chain/logger'
5
+ autoload :HttpClient, 'rms_api_ruby/chain/http_client'
6
+ autoload :SoapClient, 'rms_api_ruby/chain/soap_client'
7
+ autoload :Logger, 'rms_api_ruby/chain/logger'
7
8
  end
8
9
  end
@@ -0,0 +1,94 @@
1
+ require 'net/http'
2
+ require 'cgi'
3
+ require 'uri'
4
+ require 'hashie/mash'
5
+ require 'rms_api_ruby/utility/hash_keys_underscorable'
6
+
7
+ module RmsApiRuby
8
+ class Chain
9
+ class HttpClient < RmsApiRuby::Chain
10
+ include RmsApiRuby::HashKeysUnderscorable
11
+
12
+ SERVER_ERROR = 500
13
+
14
+ def initialize(method:, url:, headers: nil, params: nil, return_method:)
15
+ @uri = URI.parse url_factory(url, method, params)
16
+ @request = request_class(method).new request_uri(method, @uri)
17
+ @return_method = return_method
18
+
19
+ set_headers(headers) if headers.present?
20
+ set_body(params) if method != :get && params.present?
21
+ end
22
+
23
+ def set_headers(headers)
24
+ headers.each { |k, v| @request[k] = v }
25
+ end
26
+
27
+ def set_body(params)
28
+ @request.body = params
29
+ end
30
+
31
+ def execute_request
32
+ @response = Net::HTTP.start(@uri.hostname, @uri.port, use_ssl: true) do |http|
33
+ http.request @request
34
+ end
35
+ end
36
+
37
+ def call
38
+ chain { execute_request }
39
+ when_truthy { status_code >= SERVER_ERROR }.
40
+ dam { handle_http_error }
41
+ chain(:response) { parse_to_mash }
42
+ end
43
+
44
+ private
45
+
46
+ def url_factory(url, method, params)
47
+ if method == :get && params.present?
48
+ url + '?' + params.map { |k, v| "#{k}=#{CGI.escape(v.to_s)}" }.join('&')
49
+ else
50
+ url
51
+ end
52
+ end
53
+
54
+ def handle_http_error
55
+ message = "HTTP Request failed. Response code: #{status_code}"
56
+ RmsApiRuby::ServerError.new message
57
+ end
58
+
59
+ def status_code
60
+ @response.try(:code).try(:to_i)
61
+ end
62
+
63
+ def parse_to_mash
64
+ Hashie::Mash.new(hash_from_response).
65
+ send(@return_method)
66
+ end
67
+
68
+ def hash_from_response
69
+ snake_keys Hash.from_xml(@response.body)
70
+ end
71
+
72
+ def request_class(method)
73
+ case method
74
+ when :get
75
+ ::Net::HTTP::Get
76
+ when :post
77
+ ::Net::HTTP::Post
78
+ when :put
79
+ ::Net::HTTP::Put
80
+ when :patch
81
+ ::Net::HTTP::Patch
82
+ when :delete
83
+ ::Net::HTTP::Delete
84
+ else
85
+ raise ::ArgumentError, "Unsupported http method '#{method}'"
86
+ end
87
+ end
88
+
89
+ def request_uri(method, uri)
90
+ method == :get ? uri.request_uri : uri
91
+ end
92
+ end
93
+ end
94
+ end
@@ -5,6 +5,7 @@ module RmsApiRuby
5
5
  class Chain
6
6
  class SoapClient < RmsApiRuby::Chain
7
7
  SUCCESS = 200
8
+ FAILURE = 500
8
9
 
9
10
  def initialize(wsdl, operation, message, return_method)
10
11
  @client = Savon.client(wsdl: wsdl)
@@ -25,7 +26,7 @@ module RmsApiRuby
25
26
  def execute_request
26
27
  @response = @client.call(@operation, message: @message)
27
28
  rescue Savon::SOAPFault
28
- @response = Hashie::Mash.new(http: { code: 500 })
29
+ @response = Hashie::Mash.new(http: { code: FAILURE })
29
30
  end
30
31
 
31
32
  def handle_http_error
@@ -87,6 +87,7 @@ module RmsApiRuby
87
87
 
88
88
  option :order_api_version, default: '1.0'
89
89
  option :inventory_api_version, default: '1.0'
90
+ option :item_api_version, default: '1.0'
90
91
 
91
92
  def options
92
93
  self.class.options
@@ -0,0 +1,42 @@
1
+ module RmsApiRuby
2
+ class Item
3
+ autoload :Get, 'rms_api_ruby/item/get'
4
+ autoload :Insert, 'rms_api_ruby/item/insert'
5
+ autoload :Update, 'rms_api_ruby/item/update'
6
+ autoload :Delete, 'rms_api_ruby/item/delete'
7
+ autoload :Search, 'rms_api_ruby/item/search'
8
+
9
+ API_METHODS = %w[
10
+ get
11
+ insert
12
+ update
13
+ delete
14
+ search
15
+ ].freeze
16
+
17
+ class << self
18
+ API_METHODS.each do |api_method|
19
+ define_method api_method do |args = nil|
20
+ api_class = "RmsApiRuby::Item::#{api_method.camelize}"
21
+ call_api api_class.constantize.new(args)
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def call_api(api)
28
+ Flow.new.
29
+ chain(response: :response) { api.call }.
30
+ on_dam { |error| handle_error(error) }.
31
+ outflow.
32
+ try(:response)
33
+ end
34
+
35
+ def handle_error(error)
36
+ raise error
37
+ rescue ServerError, AuthenticationError => e
38
+ RmsApiRuby.configuration.logger.error(e.message)
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,74 @@
1
+ require 'rms_api_ruby/chain'
2
+ require 'rms_api_ruby/utility/hash_keys_camelizable'
3
+
4
+ module RmsApiRuby
5
+ class Item
6
+ class Base
7
+ include Waterfall
8
+ include RmsApiRuby::HashKeysCamelizable
9
+
10
+ def initialize(args, client_class = RmsApiRuby::Chain::HttpClient)
11
+ @args = args
12
+ @client = client_class.new(
13
+ method: http_method,
14
+ url: url,
15
+ params: form_params(args),
16
+ headers: http_headers,
17
+ return_method: :result
18
+ )
19
+ end
20
+
21
+ def call
22
+ chain { log :info, start_message }
23
+ chain(response: :response) { @client.call }
24
+ chain { log :info, complete_message }
25
+ end
26
+
27
+ private
28
+
29
+ def http_method
30
+ raise NotImplementedError, "You must implement #{self.class}##{__method__}"
31
+ end
32
+
33
+ def url
34
+ raise NotImplementedError, "You must implement #{self.class}##{__method__}"
35
+ end
36
+
37
+ def api_name
38
+ raise NotImplementedError, "You must implement #{self.class}##{__method__}"
39
+ end
40
+
41
+ def base_url
42
+ "https://api.rms.rakuten.co.jp/es/#{api_version}/item/"
43
+ end
44
+
45
+ def api_version
46
+ RmsApiRuby.configuration.item_api_version
47
+ end
48
+
49
+ def http_headers
50
+ { Authorization: RmsApiRuby::Authentication.key }
51
+ end
52
+
53
+ def log(level, message)
54
+ RmsApiRuby::Chain::Logger.new(level, message)
55
+ end
56
+
57
+ def start_message
58
+ "RMS ItemAPI '#{api_name}' started. args: #{@args.inspect}"
59
+ end
60
+
61
+ def complete_message
62
+ "RMS ItemAPI '#{api_name}' completed."
63
+ end
64
+
65
+ def form_params(args)
66
+ if http_method == :get
67
+ camelize_keys(args, :lower)
68
+ else
69
+ camelize_keys(args, :lower).to_xml(root: :request, skip_types: true)
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,21 @@
1
+ require 'rms_api_ruby/item/base'
2
+
3
+ module RmsApiRuby
4
+ class Item
5
+ class Delete < RmsApiRuby::Item::Base
6
+ private
7
+
8
+ def http_method
9
+ :post
10
+ end
11
+
12
+ def url
13
+ "#{base_url}delete"
14
+ end
15
+
16
+ def api_name
17
+ 'DELETE'
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ require 'rms_api_ruby/item/base'
2
+
3
+ module RmsApiRuby
4
+ class Item
5
+ class Get < RmsApiRuby::Item::Base
6
+ private
7
+
8
+ def http_method
9
+ :get
10
+ end
11
+
12
+ def url
13
+ "#{base_url}get"
14
+ end
15
+
16
+ def api_name
17
+ 'GET'
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ require 'rms_api_ruby/item/base'
2
+
3
+ module RmsApiRuby
4
+ class Item
5
+ class Insert < RmsApiRuby::Item::Base
6
+ private
7
+
8
+ def http_method
9
+ :post
10
+ end
11
+
12
+ def url
13
+ "#{base_url}insert"
14
+ end
15
+
16
+ def api_name
17
+ 'INSERT'
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ require 'rms_api_ruby/item/base'
2
+
3
+ module RmsApiRuby
4
+ class Item
5
+ class Search < RmsApiRuby::Item::Base
6
+ private
7
+
8
+ def http_method
9
+ :get
10
+ end
11
+
12
+ def url
13
+ "#{base_url}search"
14
+ end
15
+
16
+ def api_name
17
+ 'SEARCH'
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ require 'rms_api_ruby/item/base'
2
+
3
+ module RmsApiRuby
4
+ class Item
5
+ class Update < RmsApiRuby::Item::Base
6
+ private
7
+
8
+ def http_method
9
+ :post
10
+ end
11
+
12
+ def url
13
+ "#{base_url}update"
14
+ end
15
+
16
+ def api_name
17
+ 'UPDATE'
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,43 @@
1
+ require 'rms_api_ruby/item/base'
2
+
3
+ module RmsApiRuby
4
+ class Items
5
+ class << self
6
+ def update(args)
7
+ Flow.new.
8
+ chain(response: :response) { Client.new(args).call }.
9
+ on_dam { |error| handle_error(error) }.
10
+ outflow.
11
+ try(:response)
12
+ end
13
+
14
+ private
15
+
16
+ def handle_error(error)
17
+ raise error
18
+ rescue ServerError, AuthenticationError => e
19
+ RmsApiRuby.configuration.logger.error(e.message)
20
+ end
21
+ end
22
+
23
+ class Client < RmsApiRuby::Item::Base
24
+ private
25
+
26
+ def http_method
27
+ :post
28
+ end
29
+
30
+ def url
31
+ "https://api.rms.rakuten.co.jp/es/#{api_version}/items/update"
32
+ end
33
+
34
+ def start_message
35
+ "RMS ItemsAPI 'UPDATE' started. args: #{@args.inspect}"
36
+ end
37
+
38
+ def complete_message
39
+ "RMS ItemsAPI 'UPDATE' completed."
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,38 @@
1
+ require 'active_support/core_ext'
2
+
3
+ module RmsApiRuby
4
+ module HashKeysCamelizable
5
+ def camelize_keys(hash, first_letter = :upper)
6
+ hash.each_with_object({}) do |(key, val), acc|
7
+ if val.is_a?(Array)
8
+ val = val.map { |v| to_camel_keys(v, first_letter) }
9
+ elsif val.is_a?(Hash)
10
+ val = camelize_keys(val, first_letter)
11
+ end
12
+ acc[camel_key(key, first_letter)] = val
13
+ end
14
+ end
15
+
16
+ private
17
+
18
+ def camel_key(key, first_letter)
19
+ if key.is_a?(String)
20
+ key.camelize(first_letter)
21
+ elsif key.is_a?(Symbol)
22
+ key.to_s.camelize(first_letter).to_sym
23
+ else
24
+ key
25
+ end
26
+ end
27
+
28
+ def to_camel_keys(val, first_letter)
29
+ if val.is_a?(Array)
30
+ val.map { |v| to_camel_keys(v, first_letter) }
31
+ elsif val.is_a?(Hash)
32
+ camelize_keys(val, first_letter)
33
+ else
34
+ val
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,38 @@
1
+ require 'active_support/core_ext'
2
+
3
+ module RmsApiRuby
4
+ module HashKeysUnderscorable
5
+ def snake_keys(hash)
6
+ hash.each_with_object({}) do |(key, val), acc|
7
+ if val.is_a?(Array)
8
+ val = val.map { |v| to_snake_keys(v) }
9
+ elsif val.is_a?(Hash)
10
+ val = snake_keys(val)
11
+ end
12
+ acc[snake_key(key)] = val
13
+ end
14
+ end
15
+
16
+ private
17
+
18
+ def snake_key(key)
19
+ if key.is_a?(String)
20
+ key.underscore
21
+ elsif key.is_a?(Symbol)
22
+ key.to_s.underscore.to_sym
23
+ else
24
+ key
25
+ end
26
+ end
27
+
28
+ def to_snake_keys(val)
29
+ if val.is_a?(Array)
30
+ val.map { |v| to_snake_keys(v) }
31
+ elsif val.is_a?(Hash)
32
+ snake_keys(val)
33
+ else
34
+ val
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,3 +1,3 @@
1
1
  module RmsApiRuby
2
- VERSION = "0.2.2".freeze
2
+ VERSION = "0.3.0".freeze
3
3
  end
@@ -45,4 +45,5 @@ Gem::Specification.new do |spec|
45
45
  spec.add_development_dependency 'rspec_junit_formatter'
46
46
  spec.add_development_dependency 'rubocop', '~> 0.57.1'
47
47
  spec.add_development_dependency 'pry-byebug'
48
+ spec.add_development_dependency 'webmock'
48
49
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rms_api_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kaicoh
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-06-22 00:00:00.000000000 Z
11
+ date: 2018-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -150,6 +150,20 @@ dependencies:
150
150
  - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: webmock
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
153
167
  description: A Ruby client for RMS(Rakuten Marchant Service) WEB API
154
168
  email:
155
169
  - sumireminami@gmail.com
@@ -161,7 +175,6 @@ files:
161
175
  - ".gitignore"
162
176
  - ".rspec"
163
177
  - ".rubocop.yml"
164
- - ".travis.yml"
165
178
  - CHANGELOG.md
166
179
  - CODE_OF_CONDUCT.md
167
180
  - Gemfile
@@ -172,17 +185,31 @@ files:
172
185
  - bin/console
173
186
  - bin/setup
174
187
  - config/wsdl/inventory_v_1.0.wsdl
188
+ - docs/inventory_api.md
189
+ - docs/item_api.md
190
+ - docs/order_api.md
175
191
  - lib/rms_api_ruby.rb
176
192
  - lib/rms_api_ruby/authentication.rb
177
193
  - lib/rms_api_ruby/chain.rb
194
+ - lib/rms_api_ruby/chain/http_client.rb
178
195
  - lib/rms_api_ruby/chain/logger.rb
179
196
  - lib/rms_api_ruby/chain/soap_client.rb
180
197
  - lib/rms_api_ruby/config.rb
181
198
  - lib/rms_api_ruby/inventory.rb
199
+ - lib/rms_api_ruby/item.rb
200
+ - lib/rms_api_ruby/item/base.rb
201
+ - lib/rms_api_ruby/item/delete.rb
202
+ - lib/rms_api_ruby/item/get.rb
203
+ - lib/rms_api_ruby/item/insert.rb
204
+ - lib/rms_api_ruby/item/search.rb
205
+ - lib/rms_api_ruby/item/update.rb
206
+ - lib/rms_api_ruby/items.rb
182
207
  - lib/rms_api_ruby/order.rb
183
208
  - lib/rms_api_ruby/orders.rb
184
209
  - lib/rms_api_ruby/soap_api.rb
185
210
  - lib/rms_api_ruby/soap_api/client.rb
211
+ - lib/rms_api_ruby/utility/hash_keys_camelizable.rb
212
+ - lib/rms_api_ruby/utility/hash_keys_underscorable.rb
186
213
  - lib/rms_api_ruby/version.rb
187
214
  - rms_api_ruby.gemspec
188
215
  homepage: https://github.com/Kaicoh
@@ -1,5 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- rvm:
4
- - 2.4.2
5
- before_install: gem install bundler -v 1.16.2