magentwo 0.1.3 → 0.1.4
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 +4 -4
- data/.gitignore +2 -0
- data/lib/adapter.rb +52 -0
- data/lib/connection.rb +31 -30
- data/lib/dataset.rb +12 -14
- data/lib/filter.rb +1 -1
- data/lib/magentwo.rb +24 -2
- data/lib/model/base.rb +82 -8
- data/lib/model/coupon.rb +29 -0
- data/lib/model/customer.rb +8 -6
- data/lib/model/product.rb +1 -4
- data/lib/model/sales_rule.rb +13 -0
- data/lib/util/validator.rb +24 -0
- data/magentwo.gemspec +3 -2
- data/spec/dataset_spec.rb +68 -0
- data/spec/product_spec.rb +1 -5
- metadata +8 -5
- data/magentwo.rb +0 -6
- data/spec/server_spec.rb +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a3a841b7d66c45e36a63b99466fd49e7bedfd056f9077e2cdf2e93dd0b7bf9d1
|
4
|
+
data.tar.gz: 46906bc86d4c0da2517334e916e61b0a647d181587324be4a8f5f5058ae3079e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa0c925bd64c60d046266bfed1a8f0c6c1c50ab9f69e2f2b5e5fb6700a5fef715db656a11c65c065f4fae273ba994422c9ec810c3903ffdb671d1d723a9242c0
|
7
|
+
data.tar.gz: 2a49d67d5c11fb054d23cc0d2ac24cb87d813c0704111dadeb75cf7a80626139f579f653ae86d7e61789debe02ef2c5951d178bfac0604b121ebfda4e77b236d
|
data/.gitignore
CHANGED
data/lib/adapter.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
module Magentwo
|
2
|
+
class Adapter < Magentwo::Connection
|
3
|
+
DateFields = %i(created_at dob updated_at)
|
4
|
+
def call method, path, params
|
5
|
+
http_method, params = case method
|
6
|
+
when :put, :post, :delete then [method, params.to_json]
|
7
|
+
when :get, :get_with_meta_data then [:get, params]
|
8
|
+
else
|
9
|
+
raise ArgumentError, "unknown method type. Expected :get, :get_with_meta_data, :post, :put or :delete. #{method} #{path}"
|
10
|
+
end
|
11
|
+
|
12
|
+
response = self.send(http_method, path, params)
|
13
|
+
|
14
|
+
parsed_response = case method
|
15
|
+
when :get_with_meta_data, :put, :post, :delete then transform( parse( response))
|
16
|
+
when :get
|
17
|
+
parsed = parse(response)
|
18
|
+
if parsed[:items]
|
19
|
+
parsed[:items].map do |item|
|
20
|
+
transform item
|
21
|
+
end
|
22
|
+
else
|
23
|
+
transform parsed
|
24
|
+
end
|
25
|
+
else
|
26
|
+
raise ArgumentError, "unknown method type. Expected :get, :get_with_meta_data, :post, :put or :delete. #{method} #{path}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
def parse response
|
32
|
+
case response.code
|
33
|
+
when "200"
|
34
|
+
JSON.parse response.body, :symbolize_names => true
|
35
|
+
else
|
36
|
+
puts "request failed #{response.code} #{response.body}"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def transform item
|
41
|
+
date_transform item if item
|
42
|
+
end
|
43
|
+
|
44
|
+
def date_transform item
|
45
|
+
p "datetransform: #{item}"
|
46
|
+
DateFields.each do |date_field|
|
47
|
+
item[date_field] = Time.new item[date_field] if item[date_field]
|
48
|
+
end
|
49
|
+
item
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/lib/connection.rb
CHANGED
@@ -17,7 +17,6 @@ module Magentwo
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def request_token
|
20
|
-
p self
|
21
20
|
Net::HTTP.start(self.host,self.port) do |http|
|
22
21
|
req = Net::HTTP::Post.new("#{base_path}/integration/admin/token")
|
23
22
|
req.body = {:username=> self.user, :password=> self.password}.to_json
|
@@ -27,47 +26,49 @@ module Magentwo
|
|
27
26
|
end
|
28
27
|
end
|
29
28
|
|
30
|
-
def
|
31
|
-
|
32
|
-
|
33
|
-
when :get then self.get url
|
34
|
-
when :post then self.post url
|
35
|
-
when :delete then self.delete url
|
36
|
-
when :put then self.put url
|
37
|
-
else
|
38
|
-
raise "unknown http method, cannot call #{method}, expected :get, :post, :delete or :put"
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def delete
|
29
|
+
def delete path, data
|
30
|
+
Magentwo.logger.info "DELETE #{path}"
|
31
|
+
Magentwo.logger.debug "DATA #{data}"
|
43
32
|
|
44
|
-
|
45
|
-
|
46
|
-
def put
|
33
|
+
Magentwo.logger.warn "not implemented"
|
47
34
|
|
48
35
|
end
|
49
36
|
|
50
|
-
def
|
51
|
-
|
37
|
+
def put path, data
|
38
|
+
Magentwo.logger.info "PUT #{host}/#{base_path}/#{path}"
|
39
|
+
Magentwo.logger.debug "DATA #{data}"
|
40
|
+
url = "#{base_path}/#{path}"
|
41
|
+
Net::HTTP.start(self.host,self.port) do |http|
|
42
|
+
req = Net::HTTP::Put.new(url)
|
43
|
+
req["Authorization"] = "Bearer #{self.token}"
|
44
|
+
req['Content-Type'] = "application/json"
|
45
|
+
req.body = data
|
46
|
+
http.request(req)
|
47
|
+
end
|
52
48
|
end
|
53
49
|
|
54
|
-
def
|
55
|
-
|
50
|
+
def post path, data
|
51
|
+
Magentwo.logger.info "POST #{host}/#{path}"
|
52
|
+
Magentwo.logger.debug "DATA #{data}"
|
53
|
+
url = "#{base_path}/#{path}"
|
56
54
|
Net::HTTP.start(self.host,self.port) do |http|
|
57
|
-
req = Net::HTTP::
|
55
|
+
req = Net::HTTP::Post.new(url)
|
58
56
|
req["Authorization"] = "Bearer #{self.token}"
|
59
57
|
req['Content-Type'] = "application/json"
|
60
|
-
|
61
|
-
|
58
|
+
req.body = data
|
59
|
+
http.request(req)
|
62
60
|
end
|
63
61
|
end
|
64
62
|
|
65
|
-
|
66
|
-
def
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
63
|
+
|
64
|
+
def get path, query
|
65
|
+
Magentwo.logger.info "GET #{host}#{base_path}/#{path}?#{query}"
|
66
|
+
url = "#{base_path}/#{path}?#{query}"
|
67
|
+
Net::HTTP.start(self.host,self.port) do |http|
|
68
|
+
req = Net::HTTP::Get.new(url)
|
69
|
+
req["Authorization"] = "Bearer #{self.token}"
|
70
|
+
req['Content-Type'] = "application/json"
|
71
|
+
http.request(req)
|
71
72
|
end
|
72
73
|
end
|
73
74
|
end
|
data/lib/dataset.rb
CHANGED
@@ -7,9 +7,10 @@ module Magentwo
|
|
7
7
|
:filters => [],
|
8
8
|
:pagination => {
|
9
9
|
:current_page => Filter::CurrentPage.new(1),
|
10
|
-
:page_size => Filter::PageSize.new(
|
10
|
+
:page_size => Filter::PageSize.new(Magentwo.default_page_size)
|
11
11
|
},
|
12
|
-
:ordering => []
|
12
|
+
:ordering => [],
|
13
|
+
:fields => nil
|
13
14
|
}
|
14
15
|
end
|
15
16
|
|
@@ -39,7 +40,7 @@ module Magentwo
|
|
39
40
|
end
|
40
41
|
|
41
42
|
def select *fields
|
42
|
-
Dataset.new self.model, self.opts.merge(:
|
43
|
+
Dataset.new self.model, self.opts.merge(:fields => Filter::Fields.new(fields))
|
43
44
|
end
|
44
45
|
|
45
46
|
def like args
|
@@ -49,7 +50,7 @@ module Magentwo
|
|
49
50
|
#################
|
50
51
|
# Pagination
|
51
52
|
################
|
52
|
-
def page page, page_size=
|
53
|
+
def page page, page_size=Magentwo.default_page_size
|
53
54
|
Dataset.new self.model, self.opts.merge(:pagination => {:current_page => Filter::CurrentPage.new(page), :page_size => Filter::PageSize.new(page_size)})
|
54
55
|
end
|
55
56
|
|
@@ -64,7 +65,7 @@ module Magentwo
|
|
64
65
|
# Fetching
|
65
66
|
################
|
66
67
|
def info
|
67
|
-
result = self.model.
|
68
|
+
result = self.model.get self.page(1, 1).to_query, {:meta_data => true}
|
68
69
|
{
|
69
70
|
:fields => result[:items]&.first&.keys,
|
70
71
|
:total_count => result[:total_count]
|
@@ -80,16 +81,11 @@ module Magentwo
|
|
80
81
|
end
|
81
82
|
|
82
83
|
def first
|
83
|
-
|
84
|
-
self.model.new result[:items].first
|
84
|
+
self.model.first self
|
85
85
|
end
|
86
86
|
|
87
87
|
def all
|
88
|
-
|
89
|
-
return [] if result.nil?
|
90
|
-
(result[:items] || []).map do |item|
|
91
|
-
self.model.new item
|
92
|
-
end
|
88
|
+
self.model.all self
|
93
89
|
end
|
94
90
|
|
95
91
|
#################
|
@@ -110,6 +106,8 @@ module Magentwo
|
|
110
106
|
self.opts[:ordering]
|
111
107
|
.map { |opt, idx| opt.to_query(idx) }
|
112
108
|
.join("&"),
|
109
|
+
|
110
|
+
self.opts[:fields]? self.opts[:fields].to_query() : ""
|
113
111
|
].reject(&:empty?)
|
114
112
|
.join("&")
|
115
113
|
end
|
@@ -119,12 +117,12 @@ module Magentwo
|
|
119
117
|
################
|
120
118
|
def map(&block)
|
121
119
|
raise ArgumentError, "no block given" unless block_given?
|
122
|
-
self.all.map(&block)
|
120
|
+
self.model.all.map(&block)
|
123
121
|
end
|
124
122
|
|
125
123
|
def each(&block)
|
126
124
|
raise ArgumentError, "no block given" unless block_given?
|
127
|
-
self.all.each(&block)
|
125
|
+
self.model.all.each(&block)
|
128
126
|
end
|
129
127
|
end
|
130
128
|
end
|
data/lib/filter.rb
CHANGED
@@ -98,7 +98,7 @@ module Magentwo
|
|
98
98
|
end
|
99
99
|
def to_query idx=nil
|
100
100
|
#TODO api supports nested field selection e.g. items[address[street]]
|
101
|
-
"fields=items[#{URI::encode(self.fields.join(","))}]"
|
101
|
+
"fields=items[#{URI::encode(self.fields.map(&:to_s).join(","))}]"
|
102
102
|
end
|
103
103
|
end
|
104
104
|
end
|
data/lib/magentwo.rb
CHANGED
@@ -1,17 +1,39 @@
|
|
1
1
|
require 'uri'
|
2
2
|
require 'net/http'
|
3
3
|
require 'json'
|
4
|
+
require 'logger'
|
4
5
|
|
5
6
|
module Magentwo
|
6
|
-
Models = %w(base product customer order)
|
7
|
+
Models = %w(base product customer order coupon sales_rule)
|
7
8
|
def self.connect host, user_name, password
|
8
|
-
Base.
|
9
|
+
Base.adapter = Adapter.new host, user_name, password
|
9
10
|
end
|
11
|
+
|
12
|
+
def self.logger= logger
|
13
|
+
@@logger = logger
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.logger
|
17
|
+
@@logger ||= Logger.new STDOUT, {:level => Logger::DEBUG}
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.default_page_size
|
21
|
+
@@default_page_size ||= 20
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.default_page_size= page_size
|
25
|
+
@@default_page_size = page_size
|
26
|
+
end
|
27
|
+
|
28
|
+
|
10
29
|
end
|
11
30
|
|
12
31
|
require_relative 'connection.rb'
|
32
|
+
require_relative 'adapter.rb'
|
13
33
|
require_relative 'filter.rb'
|
14
34
|
require_relative 'dataset.rb'
|
35
|
+
require_relative 'util/validator.rb'
|
36
|
+
|
15
37
|
Magentwo::Models.each do |file_name|
|
16
38
|
require_relative("model/#{file_name}.rb")
|
17
39
|
end
|
data/lib/model/base.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
module Magentwo
|
2
2
|
class Base
|
3
|
-
DatasetMethods = %i(
|
3
|
+
DatasetMethods = %i(filter exclude select fields count fields info page order_by like)
|
4
|
+
|
5
|
+
attr_accessor :base_path
|
4
6
|
|
5
7
|
def initialize args
|
6
8
|
args.each do |key, value|
|
@@ -9,23 +11,81 @@ module Magentwo
|
|
9
11
|
instance_variable_set key_sym, value
|
10
12
|
end
|
11
13
|
end
|
12
|
-
if self.respond_to? :custom_attributes
|
14
|
+
if self.respond_to?(:custom_attributes) && args[:custom_attributes]
|
13
15
|
self.custom_attributes = args[:custom_attributes].map do |attr|
|
14
16
|
Hash[attr[:attribute_code].to_sym, attr[:value]]
|
15
17
|
end.inject(&:merge)
|
16
18
|
end
|
17
19
|
end
|
18
20
|
|
19
|
-
def
|
20
|
-
|
21
|
+
def save
|
22
|
+
self.validate
|
23
|
+
response = Magentwo::Base.call :put, "#{self.class.base_path}/#{self.id}", self
|
24
|
+
self.class.new response
|
25
|
+
end
|
26
|
+
|
27
|
+
def delete
|
28
|
+
Magentwo.logger.warn "not implemented"
|
29
|
+
end
|
30
|
+
|
31
|
+
def validate
|
32
|
+
true
|
33
|
+
end
|
34
|
+
|
35
|
+
def check_presence *attributes
|
36
|
+
Magentwo::Validator.check_presence self, *attributes
|
21
37
|
end
|
22
38
|
|
23
|
-
|
39
|
+
def call method, path, params
|
40
|
+
self.class.call method, path, params
|
41
|
+
end
|
42
|
+
|
43
|
+
def to_h
|
44
|
+
self.instance_variables.map do |k|
|
45
|
+
key = k.to_s[1..-1] #symbol to string and remove @ in front
|
46
|
+
if key == "custom_attributes"
|
47
|
+
[
|
48
|
+
key,
|
49
|
+
self.send(key).map do |k, v|
|
50
|
+
{:attribute_code => k, :value => v}
|
51
|
+
end
|
52
|
+
]
|
53
|
+
else
|
54
|
+
[key, self.send(key)]
|
55
|
+
end
|
56
|
+
end
|
57
|
+
.to_h
|
58
|
+
end
|
59
|
+
|
60
|
+
def to_json
|
61
|
+
Hash[self.class.lower_case_name, self.to_h].to_json
|
62
|
+
end
|
24
63
|
|
25
64
|
class << self
|
26
|
-
|
27
|
-
|
28
|
-
|
65
|
+
attr_accessor :adapter
|
66
|
+
|
67
|
+
def lower_case_name
|
68
|
+
name = self.name.split(/::/).last
|
69
|
+
"#{name[0,1].downcase}#{name[1..-1]}"
|
70
|
+
end
|
71
|
+
|
72
|
+
def base_path
|
73
|
+
"#{lower_case_name}s"
|
74
|
+
end
|
75
|
+
|
76
|
+
def get_path
|
77
|
+
base_path
|
78
|
+
end
|
79
|
+
|
80
|
+
def all ds=self.dataset
|
81
|
+
self.get(ds.to_query)
|
82
|
+
.map do |item|
|
83
|
+
self.new item
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def first ds=self.dataset
|
88
|
+
self.new self.get(ds.page(1, 1).to_query).first
|
29
89
|
end
|
30
90
|
|
31
91
|
def dataset
|
@@ -37,6 +97,20 @@ module Magentwo
|
|
37
97
|
return dataset.send(name, *args)
|
38
98
|
end
|
39
99
|
end
|
100
|
+
|
101
|
+
def get query, path:self.get_path, meta_data:false
|
102
|
+
case meta_data
|
103
|
+
when true then self.call :get_with_meta_data, path, query
|
104
|
+
when false then self.call :get, path, query
|
105
|
+
else
|
106
|
+
raise ArgumentError "unknown meta_data param, expected bool value. got: #{meta_data}"
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def call method, path=self.base_path, params
|
111
|
+
Magentwo::Base.adapter.call(method, path, params)
|
112
|
+
end
|
113
|
+
|
40
114
|
end
|
41
115
|
end
|
42
116
|
end
|
data/lib/model/coupon.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
module Magentwo
|
2
|
+
class Coupon < Base
|
3
|
+
Attributes = %i(coupon_id rule_id code usage_per_customer times_used is_primary type)
|
4
|
+
Attributes.each do |attr| attr_accessor attr end
|
5
|
+
|
6
|
+
class << self
|
7
|
+
def get_path
|
8
|
+
"#{base_path}/search"
|
9
|
+
end
|
10
|
+
|
11
|
+
def generate rule_id, quantity:1, length:16, format:(:alpha), delimiter:"-", delimiter_at_every:4
|
12
|
+
format = format.to_sym
|
13
|
+
Magentwo::Validator.one_of format, :num, :alpha, :alphanum
|
14
|
+
self.call :post, "coupons/generate",
|
15
|
+
{
|
16
|
+
:couponSpec => {
|
17
|
+
:rule_id => rule_id,
|
18
|
+
:quantity => quantity,
|
19
|
+
:length => length,
|
20
|
+
:format => format,
|
21
|
+
:delimiter => delimiter,
|
22
|
+
:delimiter_at_every => delimiter_at_every
|
23
|
+
}
|
24
|
+
}
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
data/lib/model/customer.rb
CHANGED
@@ -1,18 +1,20 @@
|
|
1
1
|
module Magentwo
|
2
2
|
class Customer < Base
|
3
3
|
Attributes = %i(id group_id default_billing default_shipping created_at updated_at created_in dob email firstname lastname gender store_id website_id addresses disable_auto_group_change extension_attributes)
|
4
|
+
Attributes.each do |attr| attr_accessor attr end
|
4
5
|
|
5
|
-
|
6
|
-
|
6
|
+
def with_extension_attributes
|
7
|
+
self.class.new (self.class.get nil, path:"#{self.class.base_path}/#{self.id}")
|
7
8
|
end
|
8
9
|
|
9
|
-
def
|
10
|
-
|
10
|
+
def validate
|
11
|
+
check_presence :email
|
12
|
+
super
|
11
13
|
end
|
12
14
|
|
13
15
|
class << self
|
14
|
-
def
|
15
|
-
|
16
|
+
def get_path
|
17
|
+
"#{base_path}/search"
|
16
18
|
end
|
17
19
|
end
|
18
20
|
end
|
data/lib/model/product.rb
CHANGED
@@ -1,9 +1,6 @@
|
|
1
1
|
module Magentwo
|
2
2
|
class Product < Base
|
3
3
|
Attributes = %i(id sku name attribute_set_id price status visibility type_id created_at updated_at extension_attributes product_links options media_gallery_entries tier_prices custom_attributes)
|
4
|
-
|
5
|
-
Attributes.each do |attr|
|
6
|
-
attr_accessor attr
|
7
|
-
end
|
4
|
+
Attributes.each do |attr| attr_accessor attr end
|
8
5
|
end
|
9
6
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Magentwo
|
2
|
+
class SalesRule < Base
|
3
|
+
Attributes = %i(rule_id name store_labels description website_ids customer_group_ids uses_per_customer is_active condition action_condition stop_rules_processing is_advanced sort_order simple_action discount_amount discount_step apply_to_shipping times_used is_rss coupon_type use_auto_generation uses_per_coupon simple_free_shipping)
|
4
|
+
Attributes.each do |attr| attr_accessor attr end
|
5
|
+
|
6
|
+
class << self
|
7
|
+
def get_path
|
8
|
+
"#{base_path}/search"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Magentwo
|
2
|
+
class Validator
|
3
|
+
class << self
|
4
|
+
def check_presence model, *attributes
|
5
|
+
case model
|
6
|
+
when Hash
|
7
|
+
attributes.each do |attribute|
|
8
|
+
raise ArgumentError, "#{attribute} must be set" unless model[attribute]
|
9
|
+
end
|
10
|
+
when Magentwo::Base
|
11
|
+
attributes.each do |attribute|
|
12
|
+
raise ArgumentError, "#{attribute} must be set" unless model.send(attribute)
|
13
|
+
end
|
14
|
+
else
|
15
|
+
raise ArgumentError, "unknown model type, expected Child of Magentwo::Base or Hash"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def one_of value, *valid_values
|
20
|
+
raise ArgumentError, "value #{value} invalid, expected one of #{valid_values}" unless valid_values.include?value
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/magentwo.gemspec
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'magentwo'
|
3
|
-
s.version = '0.1.
|
3
|
+
s.version = '0.1.4'
|
4
4
|
s.date = '2019-01-17'
|
5
5
|
s.summary = "Magento 2 API Wrapper"
|
6
6
|
s.description = "Provides a simple Ruby Interface to interact with the Magento 2 API"
|
7
7
|
s.authors = ["André Mueß"]
|
8
8
|
s.email = 'andre.cux90@gmail.com'
|
9
9
|
s.license = 'MIT'
|
10
|
-
s.homepage = "https://
|
10
|
+
s.homepage = "https://rubygems.org/gems/magentwo"
|
11
|
+
s.metadata = { "source_code_uri" => "https://github.com/Arkad82x/magentwo" }
|
11
12
|
s.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
12
13
|
end
|
data/spec/dataset_spec.rb
CHANGED
@@ -0,0 +1,68 @@
|
|
1
|
+
require_relative '../lib/magentwo.rb'
|
2
|
+
|
3
|
+
describe Magentwo::Dataset do
|
4
|
+
let(:dataset) {Magentwo::Dataset.new Magentwo::Product}
|
5
|
+
context "Initial Dataset" do
|
6
|
+
let(:initial_query) {dataset.to_query}
|
7
|
+
it "has opts" do
|
8
|
+
expect(dataset).to respond_to :opts
|
9
|
+
expect(dataset.opts).to have_key :pagination
|
10
|
+
expect(dataset.opts).to have_key :ordering
|
11
|
+
expect(dataset.opts).to have_key :filters
|
12
|
+
end
|
13
|
+
it "has model" do
|
14
|
+
expect(dataset).to respond_to :model
|
15
|
+
expect(dataset.model).to eq Magentwo::Product
|
16
|
+
end
|
17
|
+
it "has default pagination" do
|
18
|
+
expect(dataset.opts[:pagination]).to have_key :current_page
|
19
|
+
expect(dataset.opts[:pagination]).to have_key :page_size
|
20
|
+
end
|
21
|
+
it "requests #{Magentwo::Dataset::DefaultPageSize} items on default" do
|
22
|
+
expect(initial_query).to include "searchCriteria[current_page]=1"
|
23
|
+
expect(initial_query).to include "searchCriteria[page_size]=#{Magentwo::Dataset::DefaultPageSize}"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context "simple name filter" do
|
28
|
+
let(:name_filter_ds) {dataset.filter({:name => "foobar"})}
|
29
|
+
let(:name_filter_query) {name_filter_ds.to_query}
|
30
|
+
it "adds filter" do
|
31
|
+
expect(name_filter_ds.opts[:filters]).to include Magentwo::Filter::Eq
|
32
|
+
end
|
33
|
+
it "computes query" do
|
34
|
+
expect(name_filter_query).to include "searchCriteria[filter_groups][0][filters][0][field]=name"
|
35
|
+
expect(name_filter_query).to include "searchCriteria[filter_groups][0][filters][0][condition_type]=eq"
|
36
|
+
expect(name_filter_query).to include "searchCriteria[filter_groups][0][filters][0][value]=foobar"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context "select" do
|
41
|
+
let(:name_select_ds) {dataset.select(:name)}
|
42
|
+
let(:name_select_query) {name_select_ds.to_query}
|
43
|
+
let(:multi_field_select_ds) {dataset.select(:field1, :field2)}
|
44
|
+
let(:multi_field_select_query) {multi_field_select_ds.to_query}
|
45
|
+
it "adds filter" do
|
46
|
+
expect(name_select_ds.opts[:fields]).to be_an_instance_of Magentwo::Filter::Fields
|
47
|
+
end
|
48
|
+
it "computes name select query" do
|
49
|
+
expect(name_select_query).to include "fields=items[name]"
|
50
|
+
end
|
51
|
+
it "adds multiple fields" do
|
52
|
+
expect(multi_field_select_ds.opts).to have_key :fields
|
53
|
+
expect(multi_field_select_ds.opts[:fields]).to be_an_instance_of Magentwo::Filter::Fields
|
54
|
+
expect(multi_field_select_ds.opts[:fields].fields).to include :field1
|
55
|
+
expect(multi_field_select_ds.opts[:fields].fields).to include :field2
|
56
|
+
end
|
57
|
+
it "computes multi select query" do
|
58
|
+
expect(multi_field_select_query).to include "fields=items[field1,field2]"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
context "URL encoding" do
|
63
|
+
let(:filter_query_with_spaces) {dataset.filter({:name => "Hello there, lets add some spaces here"}).to_query}
|
64
|
+
it "encodes spaces" do
|
65
|
+
expect(filter_query_with_spaces).to include "%20"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
data/spec/product_spec.rb
CHANGED
@@ -1,8 +1,4 @@
|
|
1
1
|
require_relative '../lib/magentwo.rb'
|
2
2
|
|
3
|
-
describe
|
4
|
-
Magentwo::Base.connection = Magentwo::Connection.new('magento2.local',"admin","magentorocks1")
|
5
|
-
it 'returns an array when list is called' do
|
6
|
-
expect(Magentwo::Product.list.class).to eq Array
|
7
|
-
end
|
3
|
+
describe Magentwo::Product do
|
8
4
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: magentwo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- André Mueß
|
@@ -21,25 +21,28 @@ files:
|
|
21
21
|
- Gemfile
|
22
22
|
- LICENSE
|
23
23
|
- README.md
|
24
|
+
- lib/adapter.rb
|
24
25
|
- lib/connection.rb
|
25
26
|
- lib/dataset.rb
|
26
27
|
- lib/filter.rb
|
27
28
|
- lib/magentwo.rb
|
28
29
|
- lib/model/base.rb
|
30
|
+
- lib/model/coupon.rb
|
29
31
|
- lib/model/customer.rb
|
30
32
|
- lib/model/order.rb
|
31
33
|
- lib/model/product.rb
|
34
|
+
- lib/model/sales_rule.rb
|
35
|
+
- lib/util/validator.rb
|
32
36
|
- magentwo.gemspec
|
33
|
-
- magentwo.rb
|
34
37
|
- spec/base_model_spec.rb
|
35
38
|
- spec/dataset_spec.rb
|
36
39
|
- spec/product_spec.rb
|
37
|
-
- spec/server_spec.rb
|
38
40
|
- spec/spec_helper.rb
|
39
|
-
homepage: https://
|
41
|
+
homepage: https://rubygems.org/gems/magentwo
|
40
42
|
licenses:
|
41
43
|
- MIT
|
42
|
-
metadata:
|
44
|
+
metadata:
|
45
|
+
source_code_uri: https://github.com/Arkad82x/magentwo
|
43
46
|
post_install_message:
|
44
47
|
rdoc_options: []
|
45
48
|
require_paths:
|
data/magentwo.rb
DELETED