magento 0.1.0 → 0.3.3

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: 727df9b49e09adb1dcf49a88cb1a6725ac499a2ff87d36934874f5c91a401fcb
4
- data.tar.gz: a59a7aceeb508d199bd36b9876a339e8a22ccdc1ea26d9bf42338aa1d9fb9a82
3
+ metadata.gz: f2ef9e4abebd84117c6020d833b54c06358ad77a09c879152094d46ee1dd8167
4
+ data.tar.gz: 905d0add93e45c83bf986bd3d041139ebaf7fa6242f8ee190dbc253d8bd65a31
5
5
  SHA512:
6
- metadata.gz: ed4f5da0dc2ce6370803458b809759ca103593a8125d5c87f20258710df176ca75b573147972e8efe390585adb3fd9848be498bef835c82043e001def7cf3168
7
- data.tar.gz: 69b1f401af9ff65d0228a8cf4cdf8fa2805637ffe5d71044c03cdf21a36c86e6f20b5a1f7dd86bbe376ebd7cb0aae942a59048e822d11b9e92e7c2b098d2540e
6
+ metadata.gz: 3b9c0be888fa8efe844d2a3ce4dece5d66e86ffaa2260b02814fd18daf81f9fa32e09c12cca553048519f37b2bc56cba62c2e3806aa5441f8e96686227c8a73e
7
+ data.tar.gz: 6888f1ad953b3184f24b3f8c68f7cd40441169fcfc1eed94e31c8889fa386e4101844d7f1a69da0bd5ff0f5878df5b6c0b5eac0903237bfc0d1d723e20a96a84
data/.gitignore CHANGED
@@ -23,4 +23,6 @@ _yardoc
23
23
  doc/
24
24
  test/vcr_cassettes
25
25
 
26
- .vscode
26
+ .vscode
27
+ .byebug_history
28
+ /*test.rb
data/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  Add in your Gemfile
6
6
 
7
7
  ```rb
8
- gem 'magento', '~> 0.1.0'
8
+ gem 'magento', '~> 0.3.3'
9
9
  ```
10
10
 
11
11
  or run
@@ -17,65 +17,113 @@ gem install magento
17
17
  ### Setup
18
18
 
19
19
  ```rb
20
- Magento.url = 'https://dev.superbomemcasa.com.br'
21
- Magento.token = 'pyppkwezopag85x4vd8y7eoiaixzo1z7'
20
+ Magento.url = 'https://yourstore.com'
21
+ Magento.token = 'MAGENTO_API_KEY'
22
+ Magento.store = :default # optional, Default is :all
22
23
  ```
23
24
 
24
- ## Product
25
-
26
- ### Get product details by sku
27
-
25
+ ## Models
28
26
  ```rb
29
- Magento::Product.find_by_sku('sku-test')
27
+ Magento::Product
28
+ Magento::Order
29
+ Magento::Country
30
+ Magento::Category
30
31
  ```
31
32
 
32
- # TODO
33
- ### Get product list
33
+ ## Get details
34
34
 
35
- Get all
36
35
  ```rb
37
- Magento::Product.all()
36
+ Magento::Product.find('sku-test')
37
+ Magento::Order.find(25)
38
+ Magento::Country.find('BR')
38
39
  ```
40
+ \* _same pattern to all models_
41
+
42
+ **Outside pattern**
43
+
44
+ Get customer by token
39
45
 
40
- Set page and quantity per page
41
46
  ```rb
42
- Magento::Product.all(page: 1, page_size: 25) # Default page size is 50
47
+ Magento::Customer.find_by_token('user_token')
43
48
  ```
44
49
 
45
- Filter list by attribute
46
- ```rb
47
- Magento::Product.all(name_like: 'IPhone%')
50
+ ## Get List
48
51
 
49
- Magento::Product.all(price_gt: 100, page: 2)
52
+ ```rb
53
+ Magento::Product.all
50
54
  ```
51
55
 
52
- ### Search products
56
+ #### Select fields:
53
57
  ```rb
54
- Magento::Product.search('tshort')
58
+ Magento::Product.select(:id, :sku, :name).all
59
+ Magento::Product.select(:id, :sku, :name, extension_attributes: :category_links).all
60
+ Magento::Product.select(:id, :sku, :name, extension_attributes: [:category_links, :website_ids]).all
61
+ Magento::Product.select(:id, :sku, :name, extension_attributes: [:website_ids, { category_links: :category_id }]).all
55
62
  ```
56
63
 
57
- ## Customer
64
+ #### Filters:
58
65
 
59
- ### Get current customer
60
66
  ```rb
61
- Magento.token = 'CUSTOMER_TOKEN'
67
+ Magento::Product.where(name_like: 'IPhone%').all
68
+ Magento::Product.where(price_gt: 100).all
69
+
70
+ # price > 10 AND price < 20
71
+ Magento::Product.where(price_gt: 10)
72
+ .where(price_lt: 20).all
62
73
 
63
- Magento::Customer.me
74
+ # price < 1 OR price > 100
75
+ Magento::Product.where(price_lt: 1, price_gt: 100).all
76
+
77
+ Magento::Order.where(status_in: [:canceled, :complete]).all
64
78
  ```
65
79
 
66
- ### Get available regions for a country
80
+ | Condition | Notes |
81
+ | --------- | ----- |
82
+ |eq | Equals. |
83
+ |finset | A value within a set of values |
84
+ |from | The beginning of a range. Must be used with to |
85
+ |gt | Greater than |
86
+ |gteq | Greater than or equal |
87
+ |in | In. The value is an array |
88
+ |like | Like. The value can contain the SQL wildcard characters when like is specified. |
89
+ |lt | Less than |
90
+ |lteq | Less than or equal |
91
+ |moreq | More or equal |
92
+ |neq | Not equal |
93
+ |nfinset | A value that is not within a set of values |
94
+ |nin | Not in. The value is an array |
95
+ |notnull | Not null |
96
+ |null | Null |
97
+ |to | The end of a range. Must be used with from |
98
+
99
+
100
+ #### SortOrder:
67
101
 
68
102
  ```rb
69
- country = Magento::Country.find('BR')
103
+ Magento::Product.order(:sku).all
104
+ Magento::Product.order(sku: :desc).all
105
+ Magento::Product.order(status: :desc, name: :asc).all
106
+ ```
107
+
108
+ #### Pagination:
70
109
 
71
- country.available_regions
110
+ ```rb
111
+ # Set page and quantity per page
112
+ Magento::Product.page(1).per(25) # Default per is 50
72
113
  ```
73
114
 
74
- ## Order
115
+ #### Example of several options together:
116
+ ```rb
117
+ Magento::Product.select(:sku, :name, :price)
118
+ .where(name_like: 'Tshort%')
119
+ .order(price: :desc)
120
+ .per(10)
121
+ .all
122
+ ```
75
123
 
76
- ### Create Order as admin user
124
+ \* _same pattern to all models_
77
125
 
78
- See the [documentation](https://magento.redoc.ly/2.4-admin/#operation/salesOrderRepositoryV1SavePost) to all attributes
126
+ ## Create
79
127
 
80
128
  ```rb
81
129
  Magento::Order.create(
@@ -102,3 +150,37 @@ Magento::Order.create(
102
150
  }
103
151
  )
104
152
  ```
153
+
154
+ ### Update
155
+
156
+ ```rb
157
+ product = Magento::Product.find('sku-teste')
158
+
159
+ product.name = 'Updated name'
160
+ product.save
161
+
162
+ # or
163
+
164
+ product.update(name: 'Updated name')
165
+ ```
166
+
167
+ ### Delete
168
+
169
+ ```rb
170
+ product = Magento::Product.find('sku-teste')
171
+
172
+ product.delete
173
+
174
+ # or
175
+
176
+ Magento::Product.delete('sku-teste')
177
+ ```
178
+
179
+ ___
180
+
181
+ ##TODO:
182
+
183
+ ### Search products
184
+ ```rb
185
+ Magento::Product.search('tshort')
186
+ ```
@@ -1,25 +1,30 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'time'
4
+ require 'dry/inflector'
4
5
 
5
6
  require_relative 'magento/errors'
6
7
  require_relative 'magento/request'
7
8
  require_relative 'magento/model'
9
+ require_relative 'magento/model_mapper'
10
+ require_relative 'magento/query'
8
11
  require_relative 'magento/product'
9
12
  require_relative 'magento/country'
13
+ require_relative 'magento/customer'
14
+ require_relative 'magento/order'
10
15
 
11
- Dir[File.expand_path('magento/product/*.rb', __dir__)].map { |path| require path }
12
- Dir[File.expand_path('magento/country/*.rb', __dir__)].map { |path| require path }
16
+ Dir[File.expand_path('magento/shared/*.rb', __dir__)].map { |f| require f }
13
17
 
14
18
  module Magento
15
19
  class << self
16
- attr_accessor :url, :open_timeout, :timeout, :token
20
+ attr_accessor :url, :open_timeout, :timeout, :token, :store
17
21
  end
18
22
 
19
23
  self.url = ENV['MAGENTO_URL']
20
24
  self.open_timeout = 30
21
25
  self.timeout = 90
22
26
  self.token = ENV['MAGENTO_TOKEN']
27
+ self.store = ENV['MAGENTO_STORE'] || :all
23
28
 
24
29
  def self.production?
25
30
  ENV['RACK_ENV'] == 'production' ||
@@ -0,0 +1,4 @@
1
+ module Magento
2
+ class Category < Model
3
+ end
4
+ end
@@ -1,10 +1,5 @@
1
1
  module Magento
2
2
  class Country < Model
3
- class << self
4
- def find(code)
5
- country_hash = Request.get("directory/countries/#{code}").parse
6
- mapHash Country, country_hash
7
- end
8
- end
3
+ self.endpoint = 'directory/countries'
9
4
  end
10
5
  end
@@ -0,0 +1,13 @@
1
+ module Magento
2
+ class Customer < Model
3
+ class << self
4
+ alias_method :find_by_id, :find
5
+
6
+ def find_by_token(token)
7
+ user_request = Request.new(token: token)
8
+ customer_hash = user_request.get('customers/me').parse
9
+ ModelMapper.from_hash(customer_hash).to_model(Customer)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,38 +1,74 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dry/inflector'
3
+ require 'forwardable'
4
4
 
5
5
  module Magento
6
6
  class Model
7
+ def save
8
+ body = ModelMapper.from_object(self).to_hash
9
+ self.class.update(send(self.class.primary_key), body)
10
+ end
11
+
12
+ def update(attrs)
13
+ raise "#{self.class.name} not saved" if send(self.class.primary_key).nil?
14
+
15
+ attrs.each { |key, value| send("#{key}=", value) }
16
+ save
17
+ end
18
+
19
+ def delete
20
+ self.class.delete(send(self.class.primary_key))
21
+ end
22
+
7
23
  class << self
24
+ extend Forwardable
25
+
26
+ def_delegators :query, :all, :page, :per, :order, :select, :where
27
+
28
+ def find(id)
29
+ hash = request.get("#{api_resource}/#{id}").parse
30
+ ModelMapper.from_hash(hash).to_model(self)
31
+ end
32
+
33
+ def create(attributes)
34
+ body = { entity_name => attributes }
35
+ hash = request.post(api_resource, body).parse
36
+ ModelMapper.from_hash(hash).to_model(self)
37
+ end
38
+
39
+ def delete(id)
40
+ request.delete("#{api_resource}/#{id}").status.success?
41
+ end
42
+
43
+ def update(id, attributes)
44
+ body = { entity_name => attributes }
45
+ hash = request.put("#{api_resource}/#{id}", body).parse
46
+ ModelMapper.from_hash(hash).to_model(self)
47
+ end
48
+
49
+ def api_resource
50
+ endpoint || inflector.pluralize(entity_name)
51
+ end
52
+
53
+ def entity_name
54
+ inflector.underscore(name).sub('magento/', '')
55
+ end
56
+
57
+ def primary_key
58
+ @primary_key || :id
59
+ end
60
+
8
61
  protected
9
62
 
10
- def mapHash(klass, values)
11
- object = klass.new
12
- values.each do |key, value|
13
- object.singleton_class.instance_eval { attr_accessor key }
14
- if value.is_a?(Hash)
15
- class_name = inflector.camelize(inflector.singularize(key))
16
- value = mapHash(Object.const_get("Magento::#{class_name}"), value)
17
- elsif value.is_a?(Array)
18
- value = mapArray(key, value)
19
- end
20
- object.send("#{key}=", value)
21
- end
22
- object
23
- end
24
-
25
- def mapArray(key, values)
26
- result = []
27
- values.each do |value|
28
- if value.is_a?(Hash)
29
- class_name = inflector.camelize(inflector.singularize(key))
30
- result << mapHash(Object.const_get("Magento::#{class_name}"), value)
31
- else
32
- result << value
33
- end
34
- end
35
- result
63
+ attr_writer :primary_key
64
+ attr_accessor :endpoint
65
+
66
+ def query
67
+ Query.new(self)
68
+ end
69
+
70
+ def request
71
+ @request ||= Request.new
36
72
  end
37
73
 
38
74
  def inflector
@@ -0,0 +1,71 @@
1
+ class ModelMapper
2
+ def initialize(from)
3
+ @from = from
4
+ end
5
+
6
+ def to_model(model)
7
+ map_hash(model, @from)
8
+ end
9
+
10
+ def to_hash
11
+ self.class.to_hash(@from)
12
+ end
13
+
14
+ def self.from_object(object)
15
+ new(object)
16
+ end
17
+
18
+ def self.from_hash(values)
19
+ new(values)
20
+ end
21
+
22
+ def self.to_hash(object)
23
+ hash = {}
24
+ object.instance_variables.each do |attr|
25
+ key = attr.to_s.delete('@')
26
+ value = object.send(key)
27
+ value = to_hash(value) if value.class.name.include?('Magento::')
28
+ if value.is_a? Array
29
+ value = value.map do |item|
30
+ item.class.name.include?('Magento::') ? to_hash(item) : item
31
+ end
32
+ end
33
+ hash[key] = value
34
+ end
35
+ hash
36
+ end
37
+
38
+ private
39
+
40
+ def map_hash(model, values)
41
+ object = model.new
42
+ values.each do |key, value|
43
+ object.singleton_class.instance_eval { attr_accessor key }
44
+ if value.is_a?(Hash)
45
+ class_name = inflector.camelize(inflector.singularize(key))
46
+ value = map_hash(Object.const_get("Magento::#{class_name}"), value)
47
+ elsif value.is_a?(Array)
48
+ value = map_array(key, value)
49
+ end
50
+ object.send("#{key}=", value)
51
+ end
52
+ object
53
+ end
54
+
55
+ def map_array(key, values)
56
+ result = []
57
+ values.each do |value|
58
+ if value.is_a?(Hash)
59
+ class_name = inflector.camelize(inflector.singularize(key))
60
+ result << map_hash(Object.const_get("Magento::#{class_name}"), value)
61
+ else
62
+ result << value
63
+ end
64
+ end
65
+ result
66
+ end
67
+
68
+ def inflector
69
+ @inflector ||= Dry::Inflector.new
70
+ end
71
+ end
@@ -0,0 +1,5 @@
1
+ module Magento
2
+ class Order < Model
3
+ self.primary_key = :entity_id
4
+ end
5
+ end
@@ -1,10 +1,9 @@
1
1
  module Magento
2
2
  class Product < Model
3
+ self.primary_key = :sku
4
+
3
5
  class << self
4
- def find_by_sku(sku)
5
- product_hash = Request.get("products/#{sku}").parse
6
- mapHash Product, product_hash
7
- end
6
+ alias_method :find_by_sku, :find
8
7
  end
9
8
  end
10
- end
9
+ end
@@ -0,0 +1,150 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'cgi'
4
+
5
+ module Magento
6
+ class Query
7
+ ACCEPTED_CONDITIONS = [
8
+ 'eq', # Equals.
9
+ 'finset', # A value within a set of values
10
+ 'from', # The beginning of a range. Must be used with to
11
+ 'gt', # Greater than
12
+ 'gteq', # Greater than or equal
13
+ 'in', # In. The value can contain a comma-separated list of values.
14
+ 'like', # Like. The value can contain the SQL wildcard characters when like is specified.
15
+ 'lt', # Less than
16
+ 'lteq', # Less than or equal
17
+ 'moreq', # More or equal
18
+ 'neq', # Not equal
19
+ 'nfinset', # A value that is not within a set of values
20
+ 'nin', # Not in. The value can contain a comma-separated list of values.
21
+ 'notnull', # Not null
22
+ 'null', # Null
23
+ 'to' # The end of a range. Must be used with from
24
+ ].freeze
25
+
26
+ def initialize(model, request: Request.new)
27
+ @model = model
28
+ @request = request
29
+ @filter_groups = nil
30
+ @current_page = 1
31
+ @page_size = 50
32
+ @sort_orders = nil
33
+ @fields = nil
34
+ end
35
+
36
+ def where(attributes)
37
+ self.filter_groups = [] unless filter_groups
38
+ filters = []
39
+ attributes.each do |key, value|
40
+ field, condition = parse_filter(key)
41
+ value = parse_value_filter(condition, value)
42
+ filters << { field: field, conditionType: condition, value: value }
43
+ end
44
+ filter_groups << { filters: filters }
45
+ self
46
+ end
47
+
48
+ def page(current_page)
49
+ self.current_page = current_page
50
+ self
51
+ end
52
+
53
+ def per(page_size)
54
+ self.page_size = page_size
55
+ self
56
+ end
57
+
58
+ def select(*fields)
59
+ fields = fields.map { |field| parse_field(field) }
60
+ self.fields = "items[#{fields.join(',')}]"
61
+ self
62
+ end
63
+
64
+ def order(attributes)
65
+ if attributes.is_a?(String)
66
+ self.sort_orders = [{ field: verify_id(attributes), direction: :asc }]
67
+ elsif attributes.is_a?(Hash)
68
+ self.sort_orders = []
69
+ attributes.each do |field, direction|
70
+ raise "Invalid sort order direction '#{direction}'" unless %w[asc desc].include?(direction.to_s)
71
+
72
+ sort_orders << { field: verify_id(field), direction: direction }
73
+ end
74
+ end
75
+ self
76
+ end
77
+
78
+ def all
79
+ items = request.get("#{endpoint}?#{query_params}").parse['items']
80
+ items ? items.map { |i| ModelMapper.from_hash(i).to_model(model) } : []
81
+ end
82
+
83
+ private
84
+
85
+ attr_accessor :current_page, :filter_groups, :page_size, :request, :sort_orders, :model, :fields
86
+
87
+ def endpoint
88
+ model.api_resource
89
+ end
90
+
91
+ def verify_id(field)
92
+ return model.primary_key if (field.to_s == 'id') && (field.to_s != model.primary_key.to_s)
93
+
94
+ field
95
+ end
96
+
97
+ def query_params
98
+ query = {
99
+ searchCriteria: {
100
+ filterGroups: filter_groups,
101
+ currentPage: current_page,
102
+ sortOrders: sort_orders,
103
+ pageSize: page_size
104
+ }.compact,
105
+ fields: fields
106
+ }.compact
107
+
108
+ encode query
109
+ end
110
+
111
+ def parse_filter(key)
112
+ patter = /(.*)_([a-z]+)$/
113
+ raise 'Invalid format' unless key.match(patter)
114
+ raise 'Condition not accepted' unless ACCEPTED_CONDITIONS.include?(key.match(patter)[2])
115
+
116
+ key.match(patter).to_a[1..2]
117
+ end
118
+
119
+ def parse_value_filter(condition, value)
120
+ if ['in', 'nin'].include?(condition) && value.is_a?(Array)
121
+ value = value.join(',')
122
+ end
123
+
124
+ value
125
+ end
126
+
127
+ def parse_field(value)
128
+ return verify_id(value) unless value.is_a? Hash
129
+
130
+ value.map do |k, v|
131
+ fields = v.is_a?(Array) ? v.map { |field| parse_field(field) } : [parse_field(v)]
132
+ "#{k}[#{fields.join(',')}]"
133
+ end.join(',')
134
+ end
135
+
136
+ def encode(value, key = nil)
137
+ case value
138
+ when Hash then value.map { |k, v| encode(v, append_key(key, k)) }.join('&')
139
+ when Array then value.each_with_index.map { |v, i| encode(v, "#{key}[#{i}]") }.join('&')
140
+ when nil then ''
141
+ else
142
+ "#{key}=#{CGI.escape(value.to_s)}"
143
+ end
144
+ end
145
+
146
+ def append_key(root_key, key)
147
+ root_key.nil? ? key : "#{root_key}[#{key}]"
148
+ end
149
+ end
150
+ end
@@ -1,98 +1,108 @@
1
- # frozen_string_literal: true
2
-
3
- require 'uri'
4
- require 'http'
5
-
6
- module Magento
7
- class Request
8
- class << self
9
- def get(resource)
10
- save_request(:get, url(resource))
11
- handle_error http_auth.get(url(resource))
12
- end
13
-
14
- def put(resource, body)
15
- save_request(:put, url(resource), body)
16
- handle_error http_auth.put(url(resource), json: body)
17
- end
18
-
19
- def post(resource, body = nil, url_completa = false)
20
- url = url_completa ? resource : url(resource)
21
- save_request(:post, url, body)
22
- handle_error http_auth.post(url, json: body)
23
- end
24
-
25
- private
26
-
27
- def http_auth
28
- HTTP.auth("Bearer #{Magento.token}")
29
- end
30
-
31
- def base_url
32
- url = Magento.url.to_s.sub(%r{/$}, '')
33
- "#{url}/rest/all/V1"
34
- end
35
-
36
- def url(resource)
37
- "#{base_url}/#{resource}"
38
- end
39
-
40
- def parametros_de_busca(field:, value:, conditionType: :eq)
41
- criar_parametros(
42
- filter_groups: {
43
- '0': {
44
- filters: {
45
- '0': {
46
- field: field,
47
- conditionType: conditionType,
48
- value: value
49
- }
50
- }
51
- }
52
- }
53
- )
54
- end
55
-
56
- def parametros_de_campos(campos:)
57
- criar_parametros(fields: campos)
58
- end
59
-
60
- def criar_parametros(filter_groups: nil, fields: nil, current_page: 1)
61
- CGI.unescape(
62
- {
63
- searchCriteria: {
64
- currentPage: current_page,
65
- filterGroups: filter_groups
66
- }.compact,
67
- fields: fields
68
- }.compact.to_query
69
- )
70
- end
71
-
72
- def handle_error(resposta)
73
- unless resposta.status.success?
74
- errors = []
75
- begin
76
- msg = resposta.parse['message']
77
- errors = resposta.parse['errors']
78
- rescue StandardError
79
- msg = resposta.to_s
80
- end
81
- raise Magento::NotFound.new(msg, resposta.status.code, errors, @request) if resposta.status.not_found?
82
-
83
- raise Magento::MagentoError.new(msg, resposta.status.code, errors, @request)
84
- end
85
- resposta
86
- end
87
-
88
- def save_request(method, url, body = nil)
89
- begin
90
- body = body[:product].reject { |e| e == :media_gallery_entries }
91
- rescue StandardError
92
- end
93
-
94
- @request = { method: method, url: url, body: body }
95
- end
96
- end
97
- end
98
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'uri'
4
+ require 'http'
5
+
6
+ module Magento
7
+ class Request
8
+ attr_reader :token, :store
9
+
10
+ def initialize(token: Magento.token, store: Magento.store)
11
+ @token = token
12
+ @store = store
13
+ end
14
+
15
+ def get(resource)
16
+ save_request(:get, url(resource))
17
+ handle_error http_auth.get(url(resource))
18
+ end
19
+
20
+ def put(resource, body)
21
+ save_request(:put, url(resource), body)
22
+ handle_error http_auth.put(url(resource), json: body)
23
+ end
24
+
25
+ def post(resource, body = nil, url_completa = false)
26
+ url = url_completa ? resource : url(resource)
27
+ save_request(:post, url, body)
28
+ handle_error http_auth.post(url, json: body)
29
+ end
30
+
31
+ def delete(resource)
32
+ save_request(:delete, url(resource))
33
+ handle_error http_auth.delete(url(resource))
34
+ end
35
+
36
+ private
37
+
38
+ def http_auth
39
+ HTTP.auth("Bearer #{token}")
40
+ end
41
+
42
+ def base_url
43
+ url = Magento.url.to_s.sub(%r{/$}, '')
44
+ "#{url}/rest/#{store}/V1"
45
+ end
46
+
47
+ def url(resource)
48
+ "#{base_url}/#{resource}"
49
+ end
50
+
51
+ def search_params(field:, value:, conditionType: :eq)
52
+ create_params(
53
+ filter_groups: {
54
+ '0': {
55
+ filters: {
56
+ '0': {
57
+ field: field,
58
+ conditionType: conditionType,
59
+ value: value
60
+ }
61
+ }
62
+ }
63
+ }
64
+ )
65
+ end
66
+
67
+ def field_params(fields:)
68
+ create_params(fields: fields)
69
+ end
70
+
71
+ def create_params(filter_groups: nil, fields: nil, current_page: 1)
72
+ CGI.unescape(
73
+ {
74
+ searchCriteria: {
75
+ currentPage: current_page,
76
+ filterGroups: filter_groups
77
+ }.compact,
78
+ fields: fields
79
+ }.compact.to_query
80
+ )
81
+ end
82
+
83
+ def handle_error(resp)
84
+ return resp if resp.status.success?
85
+
86
+ begin
87
+ msg = resp.parse['message']
88
+ errors = resp.parse['errors']
89
+ rescue StandardError
90
+ msg = 'Failed access to the magento server'
91
+ errors = []
92
+ end
93
+
94
+ raise Magento::NotFound.new(msg, resp.status.code, errors, @request) if resp.status.not_found?
95
+
96
+ raise Magento::MagentoError.new(msg, resp.status.code, errors, @request)
97
+ end
98
+
99
+ def save_request(method, url, body = nil)
100
+ begin
101
+ body = body[:product].reject { |e| e == :media_gallery_entries }
102
+ rescue StandardError
103
+ end
104
+
105
+ @request = { method: method, url: url, body: body }
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,4 @@
1
+ module Magento
2
+ class Address
3
+ end
4
+ end
@@ -1,6 +1,6 @@
1
- # frozen_string_literal: true
2
-
3
- module Magento
4
- class CategoryLink
5
- end
6
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Magento
4
+ class CategoryLink
5
+ end
6
+ end
@@ -1,4 +1,4 @@
1
- module Magento
2
- class CustomAttribute
3
- end
4
- end
1
+ module Magento
2
+ class CustomAttribute
3
+ end
4
+ end
@@ -0,0 +1,3 @@
1
+ module Magento
2
+ class Item; end
3
+ end
@@ -1,4 +1,4 @@
1
- module Magento
2
- class MediaGalleryEntry
3
- end
4
- end
1
+ module Magento
2
+ class MediaGalleryEntry
3
+ end
4
+ end
@@ -1,4 +1,4 @@
1
- module Magento
2
- class Option
3
- end
4
- end
1
+ module Magento
2
+ class Option
3
+ end
4
+ end
@@ -0,0 +1,3 @@
1
+ module Magento
2
+ class Payment; end
3
+ end
@@ -0,0 +1,3 @@
1
+ module Magento
2
+ class PaymentAdditionalInfo; end
3
+ end
@@ -1,4 +1,4 @@
1
- module Magento
2
- class ProductLink
3
- end
4
- end
1
+ module Magento
2
+ class ProductLink
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Magento
2
+ class Region
3
+ end
4
+ end
@@ -0,0 +1,3 @@
1
+ module Magento
2
+ class Shipping; end
3
+ end
@@ -0,0 +1,3 @@
1
+ module Magento
2
+ class ShippingAssignment; end
3
+ end
@@ -1,4 +1,4 @@
1
- module Magento
2
- class StockItem
3
- end
1
+ module Magento
2
+ class StockItem
3
+ end
4
4
  end
@@ -1,4 +1,4 @@
1
- module Magento
2
- class TierPrice
3
- end
4
- end
1
+ module Magento
2
+ class TierPrice
3
+ end
4
+ end
@@ -0,0 +1,3 @@
1
+ module Magento
2
+ class Total; end
3
+ end
@@ -0,0 +1,3 @@
1
+ module Magento
2
+ class Value; end
3
+ end
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'magento'
5
- s.version = '0.1.0'
5
+ s.version = '0.3.3'
6
6
  s.date = '2020-07-31'
7
7
  s.summary = 'Magento Ruby library'
8
8
  s.description = 'Magento Ruby library'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: magento
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wallas Faria
@@ -48,20 +48,34 @@ files:
48
48
  - Gemfile
49
49
  - README.md
50
50
  - lib/magento.rb
51
+ - lib/magento/category.rb
51
52
  - lib/magento/country.rb
52
- - lib/magento/country/available_regions.rb
53
+ - lib/magento/customer.rb
53
54
  - lib/magento/errors.rb
54
55
  - lib/magento/model.rb
56
+ - lib/magento/model_mapper.rb
57
+ - lib/magento/order.rb
55
58
  - lib/magento/product.rb
56
- - lib/magento/product/category_link.rb
57
- - lib/magento/product/custom_attribute.rb
58
- - lib/magento/product/extension_attribute.rb
59
- - lib/magento/product/media_gallery_entry.rb
60
- - lib/magento/product/option.rb
61
- - lib/magento/product/product_link.rb
62
- - lib/magento/product/stock_item.rb
63
- - lib/magento/product/tier_price.rb
59
+ - lib/magento/query.rb
64
60
  - lib/magento/request.rb
61
+ - lib/magento/shared/address.rb
62
+ - lib/magento/shared/available_regions.rb
63
+ - lib/magento/shared/category_link.rb
64
+ - lib/magento/shared/custom_attribute.rb
65
+ - lib/magento/shared/extension_attribute.rb
66
+ - lib/magento/shared/item.rb
67
+ - lib/magento/shared/media_gallery_entry.rb
68
+ - lib/magento/shared/option.rb
69
+ - lib/magento/shared/payment.rb
70
+ - lib/magento/shared/payment_additional_info.rb
71
+ - lib/magento/shared/product_link.rb
72
+ - lib/magento/shared/region.rb
73
+ - lib/magento/shared/shipping.rb
74
+ - lib/magento/shared/shipping_assignment.rb
75
+ - lib/magento/shared/stock_item.rb
76
+ - lib/magento/shared/tier_price.rb
77
+ - lib/magento/shared/total.rb
78
+ - lib/magento/shared/value.rb
65
79
  - magento.gemspec
66
80
  homepage: https://github.com/WallasFaria/magento-ruby
67
81
  licenses: []