magento 0.8.2 → 0.11.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: 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