magento 0.8.2 → 0.11.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 01b9ac4283305e36500f008a3344c2287efc72e1b56e8fb996161fa7e5d658a7
4
- data.tar.gz: 6ce8510dfb9ed0977f50cb78977b98028cc2d34e205272447160d738acac56eb
3
+ metadata.gz: ba575ef3ae90104d8c2fab63e96762478536391becc467892d0feee3ff9a15ad
4
+ data.tar.gz: 655504007fb8ff01db537e8d7fa51641fba248ce0fdee9a0b153418b95dce688
5
5
  SHA512:
6
- metadata.gz: 27a5885f9ede8d3ce9a2c078a6319dd04d0f1a6e74c0b1569da3525f0ca3e229fef1df0b9753e49331a667b21bfe1590575d3466c59d42b56a5349f294a01c09
7
- data.tar.gz: 124ab9fbb4ec50b80f1117c2b0ed2af64055a0dbf7304e9ad3b410f1db6e8714be3267229625ec03cc60fdfa9ac98c3df7d4dc21eb660688aa57a1c512cc5869
6
+ metadata.gz: 720efc55bf0754e8a13dae1230208536743bc6939f53ba7ccf4d116e325e257486e4522188fee86bc1383a11c92c49692e4f193cd6d402ce23f687086549a5d2
7
+ data.tar.gz: 7984a5870e45ebcd220d0426918bd5b616ae545112fd68bc0ca6ac4cb2e60b1e1891ae2e46ed233a06be9f9ae399b5de9a02e8608400ed668336903f34c71472
data/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  Add in your Gemfile
6
6
 
7
7
  ```rb
8
- gem 'magento', '~> 0.8.2'
8
+ gem 'magento', '~> 0.11.0'
9
9
  ```
10
10
 
11
11
  or run
@@ -32,6 +32,7 @@ Magento::Product
32
32
  Magento::Order
33
33
  Magento::Country
34
34
  Magento::Category
35
+ Magento::Customer
35
36
  ```
36
37
 
37
38
  ## Get details
@@ -68,6 +69,7 @@ Magento::Product.select(:id, :sku, :name, extension_attributes: [:website_ids, {
68
69
  #### Filters:
69
70
 
70
71
  ```rb
72
+ Magento::Product.where(visibility: 4).all
71
73
  Magento::Product.where(name_like: 'IPhone%').all
72
74
  Magento::Product.where(price_gt: 100).all
73
75
 
@@ -130,6 +132,20 @@ products = Magento::Product.select(:sku, :name)
130
132
  .all
131
133
  ```
132
134
 
135
+ ## Get one
136
+
137
+ ```rb
138
+ Magento::Order.where(increment_id: '000013457').first
139
+ # or
140
+ Magento::Order.find_by(increment_id: '000013457')
141
+ ```
142
+
143
+ ## Count
144
+ ```rb
145
+ Magento::Order.count
146
+ Magento::Order.where(status: :pending).count
147
+ ```
148
+
133
149
  \* _same pattern to all models_
134
150
 
135
151
  ### Response
@@ -255,6 +271,10 @@ product.save
255
271
  # or
256
272
 
257
273
  product.update(name: 'Updated name')
274
+
275
+ # or
276
+
277
+ Magento::Product.update('sku-teste', name: 'Updated name')
258
278
  ```
259
279
 
260
280
  ### Delete
@@ -320,7 +340,7 @@ invoice_id = order.invoice(
320
340
  ## Create refund for invoice
321
341
 
322
342
  ```rb
323
- Magento::Invoice.invoice(refund_id)
343
+ Magento::Invoice.invoice(invoice_id)
324
344
  >> 12 # return refund id
325
345
 
326
346
  # or from instance
@@ -361,6 +381,48 @@ invoice.refund(
361
381
  [Complete Refund Documentation](https://magento.redoc.ly/2.4-admin/tag/invoicescomments#operation/salesRefundInvoiceV1ExecutePost)
362
382
 
363
383
 
384
+ ## Create offline refund for order
385
+
386
+ ```rb
387
+ Magento::Order.refund(order_id)
388
+ >> 12 # return refund id
389
+
390
+ # or from instance
391
+
392
+ order = Magento::Order.find(order_id)
393
+
394
+ order.refund
395
+
396
+ # you can pass parameters too
397
+
398
+ order.refund(
399
+ items: [
400
+ {
401
+ extension_attributes: {},
402
+ order_item_id: 0,
403
+ qty: 0
404
+ }
405
+ ],
406
+ notify: true,
407
+ appendComment: true,
408
+ comment: {
409
+ extension_attributes: {},
410
+ comment: string,
411
+ is_visible_on_front: 0
412
+ },
413
+ arguments: {
414
+ shipping_amount: 0,
415
+ adjustment_positive: 0,
416
+ adjustment_negative: 0,
417
+ extension_attributes: {
418
+ return_to_stock_items: [0]
419
+ }
420
+ }
421
+ )
422
+ ```
423
+
424
+ [Complete Refund Documentation](https://magento.redoc.ly/2.4-admin/tag/invoicescomments#operation/salesRefundOrderV1ExecutePost)
425
+
364
426
  ## Other Invoice methods
365
427
 
366
428
  ```rb
@@ -1,17 +1,47 @@
1
1
  module Magento
2
2
  class Customer < Model
3
+ self.endpoint = 'customers/search'
4
+
3
5
  def fullname
4
6
  "#{@firstname} #{@lastname}"
5
7
  end
6
8
 
9
+ def update(attributes)
10
+ raise "id not present" if @id.nil?
11
+
12
+ attributes.each { |key, value| send("#{key}=", value) }
13
+ save
14
+ end
15
+
7
16
  class << self
8
17
  alias_method :find_by_id, :find
9
18
 
19
+ def update(id, attributes)
20
+ hash = request.put("customers/#{id}", { customer: attributes }).parse
21
+
22
+ block_given? ? yield(hash) : build(hash)
23
+ end
24
+
25
+ def create(attributes)
26
+ attributes.transform_keys!(&:to_sym)
27
+ password = attributes.delete :password
28
+ hash = request.post("customers", {
29
+ customer: attributes,
30
+ password: password
31
+ }).parse
32
+ build(hash)
33
+ end
34
+
10
35
  def find_by_token(token)
11
36
  user_request = Request.new(token: token)
12
37
  customer_hash = user_request.get('customers/me').parse
13
38
  build(customer_hash)
14
39
  end
40
+
41
+ def find(id)
42
+ hash = request.get("customers/#{id}").parse
43
+ build(hash)
44
+ end
15
45
  end
16
46
  end
17
47
  end
@@ -33,7 +33,7 @@ module Magento
33
33
  # invoice = Magento::Invoice.find(invoice_id)
34
34
  #
35
35
  # invoice.refund # or you can pass parameters
36
- # invoice.invoice(notify: false) # See the refund class method for more information
36
+ # invoice.refund(isOnline: true) # See the refund class method for more information
37
37
  #
38
38
  # @return {Integer} return the refund id
39
39
  def refund(refund_params = nil)
@@ -7,14 +7,17 @@ module Magento
7
7
  include Magento::ModelParser
8
8
 
9
9
  def save
10
- self.class.update(send(self.class.primary_key), to_h)
10
+ self.class.update(send(self.class.primary_key), to_h) do |hash|
11
+ update_attributes(hash)
12
+ end
11
13
  end
12
-
14
+
13
15
  def update(attrs)
14
16
  raise "#{self.class.name} not saved" if send(self.class.primary_key).nil?
15
17
 
16
- attrs.each { |key, value| send("#{key}=", value) }
17
- save
18
+ self.class.update(send(self.class.primary_key), attrs) do |hash|
19
+ update_attributes(hash)
20
+ end
18
21
  end
19
22
 
20
23
  def delete
@@ -25,10 +28,15 @@ module Magento
25
28
  @id || send(self.class.primary_key)
26
29
  end
27
30
 
31
+ protected def update_attributes(hash)
32
+ ModelMapper.map_hash(self, hash)
33
+ end
34
+
28
35
  class << self
29
36
  extend Forwardable
30
37
 
31
- def_delegators :query, :all, :page, :per, :page_size, :order, :select, :where
38
+ def_delegators :query, :all, :page, :per, :page_size, :order, :select,
39
+ :where, :first, :find_by, :count
32
40
 
33
41
  def find(id)
34
42
  hash = request.get("#{api_resource}/#{id}").parse
@@ -48,7 +56,8 @@ module Magento
48
56
  def update(id, attributes)
49
57
  body = { entity_key => attributes }
50
58
  hash = request.put("#{api_resource}/#{id}", body).parse
51
- build(hash)
59
+
60
+ block_given? ? yield(hash) : build(hash)
52
61
  end
53
62
 
54
63
  def api_resource
@@ -17,9 +17,12 @@ module Magento
17
17
  end
18
18
 
19
19
  def self.map_hash(model, values)
20
- object = model.new
20
+ object = model.is_a?(Class) ? model.new : model
21
21
  values.each do |key, value|
22
- object.singleton_class.instance_eval { attr_accessor key }
22
+ unless object.respond_to?(key) && object.respond_to?("#{key}=")
23
+ object.singleton_class.instance_eval { attr_accessor key }
24
+ end
25
+
23
26
  if value.is_a?(Hash)
24
27
  class_name = Magento.inflector.camelize(Magento.inflector.singularize(key))
25
28
  value = map_hash(Object.const_get("Magento::#{class_name}"), value)
@@ -12,8 +12,9 @@ module Magento
12
12
  def update(attrs)
13
13
  raise "'entity_id' not found" if @entity_id.nil?
14
14
 
15
- attrs[:entity_id] = @entity_id
16
- self.class.update(attrs)
15
+ self.class.update(@entity_id, attrs) do |hash|
16
+ update_attributes(hash)
17
+ end
17
18
  end
18
19
 
19
20
  def cancel
@@ -33,6 +34,20 @@ module Magento
33
34
  self.class.invoice(id, params)
34
35
  end
35
36
 
37
+
38
+ #
39
+ # Create offline refund for order
40
+ #
41
+ # order = Magento::Order.find(order_id)
42
+ #
43
+ # order.refund # or you can pass parameters
44
+ # order.invoice(notify: false) # See the refund class method for more information
45
+ #
46
+ # @return {Integer} return the refund id
47
+ def refund(refund_params = nil)
48
+ self.class.refund(id, refund_params)
49
+ end
50
+
36
51
  #
37
52
  # Creates new Shipment for given Order.
38
53
  #
@@ -47,9 +62,10 @@ module Magento
47
62
  end
48
63
 
49
64
  class << self
50
- def update(attributes)
65
+ def update(entity_id, attributes)
66
+ attributes[:entity_id] = entity_id
51
67
  hash = request.put('orders/create', { entity_key => attributes }).parse
52
- build(hash)
68
+ block_given? ? yield(hash) : build(hash)
53
69
  end
54
70
 
55
71
  # @return {Boolean}
@@ -84,6 +100,49 @@ module Magento
84
100
  request.post("order/#{order_id}/invoice", invoice_params).parse
85
101
  end
86
102
 
103
+
104
+ #
105
+ # Create offline refund for order
106
+ #
107
+ # Magento::Order.refund(order_id)
108
+ #
109
+ # or
110
+ #
111
+ # Magento::Order.refund(
112
+ # order_id,
113
+ # items: [
114
+ # {
115
+ # extension_attributes: {},
116
+ # order_item_id: 0,
117
+ # qty: 0
118
+ # }
119
+ # ],
120
+ # notify: true,
121
+ # appendComment: true,
122
+ # comment: {
123
+ # extension_attributes: {},
124
+ # comment: string,
125
+ # is_visible_on_front: 0
126
+ # },
127
+ # arguments: {
128
+ # shipping_amount: 0,
129
+ # adjustment_positive: 0,
130
+ # adjustment_negative: 0,
131
+ # extension_attributes: {
132
+ # return_to_stock_items: [
133
+ # 0
134
+ # ]
135
+ # }
136
+ # }
137
+ # )
138
+ #
139
+ # to complete [documentation](https://magento.redoc.ly/2.4-admin/tag/invoicescomments#operation/salesRefundOrderV1ExecutePost)
140
+ #
141
+ # @return {Integer} return the refund id
142
+ def refund(order_id, refund_params = nil)
143
+ request.post("order/#{order_id}/refund", refund_params).parse
144
+ end
145
+
87
146
  #
88
147
  # Creates new Shipment for given Order.
89
148
  #
@@ -89,6 +89,18 @@ module Magento
89
89
  RecordCollection.from_magento_response(result, model: model, iterable_field: field)
90
90
  end
91
91
 
92
+ def first
93
+ page_size(1).page(1).all.first
94
+ end
95
+
96
+ def find_by(attributes)
97
+ where(attributes).first
98
+ end
99
+
100
+ def count
101
+ select(:id).page_size(1).page(1).all.total_count
102
+ end
103
+
92
104
  private
93
105
 
94
106
  attr_accessor :current_page, :filter_groups, :request, :sort_orders, :model, :fields
@@ -119,10 +131,11 @@ module Magento
119
131
 
120
132
  def parse_filter(key)
121
133
  patter = /(.*)_([a-z]+)$/
122
- raise 'Invalid format' unless key.match(patter)
123
- raise 'Condition not accepted' unless ACCEPTED_CONDITIONS.include?(key.match(patter)[2])
134
+ match = key.match(patter)
135
+
136
+ return match.to_a[1..2] if match && ACCEPTED_CONDITIONS.include?(match[2])
124
137
 
125
- key.match(patter).to_a[1..2]
138
+ [key, 'eq']
126
139
  end
127
140
 
128
141
  def parse_value_filter(condition, value)
@@ -1,3 +1,3 @@
1
1
  module Magento
2
- VERSION = '0.8.2'
2
+ VERSION = '0.11.0'
3
3
  end
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.8.2
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wallas Faria