magentwo 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- 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