magentwo 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +98 -3
- data/lib/adapter.rb +7 -3
- data/lib/connection.rb +10 -11
- data/lib/dataset.rb +26 -10
- data/lib/filter.rb +2 -2
- data/lib/magentwo.rb +14 -4
- data/lib/model/base.rb +17 -3
- data/lib/model/category.rb +9 -0
- data/lib/model/coupon.rb +1 -1
- data/lib/model/product.rb +6 -0
- data/lib/model/sales_rule.rb +9 -0
- data/magentwo.gemspec +1 -1
- data/spec/dataset_spec.rb +27 -2
- data/spec/product_spec.rb +79 -0
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 692e463d7482eb7a4badc478f415deccc4085bb5b19a7d3d84bcc0a671108a8e
|
4
|
+
data.tar.gz: 9d4615302038000aa1c322190484d139e34e1fc6a122ef6c68ceae9e7296f617
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c2cbcd9f5ee6814e5fba49f3422c9df1d18f9fb86fef3608945201c307c28e3e53c479ed8361373a1ff20b52ab61d961ee34e69dce33618df8be588c946c5d4f
|
7
|
+
data.tar.gz: 5add378c0c94715979a40d9d53c6d9d0c704e11f9daa2891627d7cb82b44fb59dea62af33aafb532cb4fcd28b303b640ac30790528be861cd1da65211dd8e34c
|
data/README.md
CHANGED
@@ -1,4 +1,99 @@
|
|
1
|
-
# magentwo
|
2
|
-
Simple Ruby-Wrapper for the Magento 2 REST API
|
3
1
|
|
4
|
-
under developement
|
2
|
+
This gem is under developement and nowhere near finished but feel free to play around with it.
|
3
|
+
I am grateful for any ideas and suggestions
|
4
|
+
|
5
|
+
# Magentwo
|
6
|
+
Ruby-Wrapper for the Magento 2 REST API
|
7
|
+
|
8
|
+
|
9
|
+
# How to install
|
10
|
+
To install the Gem directly use
|
11
|
+
```
|
12
|
+
gem install magentwo
|
13
|
+
```
|
14
|
+
|
15
|
+
or add the following line to your Gemfile
|
16
|
+
```
|
17
|
+
gem 'magentwo'
|
18
|
+
```
|
19
|
+
and call bundler
|
20
|
+
```
|
21
|
+
bundle
|
22
|
+
```
|
23
|
+
|
24
|
+
|
25
|
+
# How to connect to your magento 2 shop
|
26
|
+
Currently there is only one connection at a time possible
|
27
|
+
```
|
28
|
+
Magentwo.connect http://example.com, username, password
|
29
|
+
```
|
30
|
+
|
31
|
+
# How to use
|
32
|
+
In Magentwo you interact with the API using Models. These are named according the the REST-API specifications of Magento 2
|
33
|
+
The basic functionality is the same for all Models. For products some simple requests would look like this
|
34
|
+
|
35
|
+
```
|
36
|
+
Magentwo::Product.all #fetches all Products
|
37
|
+
Magentwo::Product.first #fetches the first product
|
38
|
+
Magentwo::Product.count #returns the number of available products
|
39
|
+
Magentwo::Product.fields #returns an array of productfields
|
40
|
+
```
|
41
|
+
|
42
|
+
# Filtering
|
43
|
+
You can filter requests to search for specific elements
|
44
|
+
Here are some examples
|
45
|
+
|
46
|
+
Look for all customers whose firstname is Foobar
|
47
|
+
```
|
48
|
+
Magentwo::Customer.filter(:firstname => "Foobar").all
|
49
|
+
```
|
50
|
+
|
51
|
+
Look for all customers whose id is not 42
|
52
|
+
```
|
53
|
+
Magentwo::Customer.exclude(:id => 42).all
|
54
|
+
```
|
55
|
+
|
56
|
+
You can also combine these
|
57
|
+
```
|
58
|
+
Magentwo::Customer.filter(:firstname => "Foobar").exclude(:id => 42).all
|
59
|
+
```
|
60
|
+
The `filter` and `exclude` methods can also be used to filter for a set. To Request all Customers whose firstname is either Foo or Bar you could write
|
61
|
+
```
|
62
|
+
Magentwo::Customer.filter(:firstname => ["Foo", "bar"]).all
|
63
|
+
```
|
64
|
+
|
65
|
+
Look for all Products whose name includes the word "Computer"
|
66
|
+
```
|
67
|
+
Magentwo::Product.like(:name => "%Computer%").all
|
68
|
+
```
|
69
|
+
|
70
|
+
# Pagination
|
71
|
+
On default the pagesize is set to 20, you can change this with
|
72
|
+
```
|
73
|
+
Magentwo.default_page_size=42
|
74
|
+
```
|
75
|
+
|
76
|
+
The pagesize can also be set on the fly
|
77
|
+
To request page 2 with a pagesize of 100 simply write the following. The second paramter is optional
|
78
|
+
```
|
79
|
+
Magentwo::Product.exclude(:name => "foobar").page(2, 100).all
|
80
|
+
```
|
81
|
+
|
82
|
+
To iterate threw all the pages use `each_page`. Again the pagesize parameter is optional
|
83
|
+
```
|
84
|
+
Magentwo::Product.each_page(512) do |page|
|
85
|
+
p page
|
86
|
+
end
|
87
|
+
```
|
88
|
+
|
89
|
+
# Updates
|
90
|
+
To update Models back to Magento 2 use the `save` method
|
91
|
+
This switches the first and last name of the Customer Foo Bar
|
92
|
+
```
|
93
|
+
customer = Magentwo::Customer.filter(:first_name => "Foo").filter(:last_name => "Bar").first
|
94
|
+
customer.firstname = "Bar"
|
95
|
+
customer.lastname = "Foo"
|
96
|
+
customer.save
|
97
|
+
```
|
98
|
+
|
99
|
+
to be continued
|
data/lib/adapter.rb
CHANGED
@@ -10,12 +10,13 @@ module Magentwo
|
|
10
10
|
end
|
11
11
|
|
12
12
|
response = self.send(http_method, path, params)
|
13
|
+
Magentwo.logger.debug response.body
|
13
14
|
|
14
15
|
parsed_response = case method
|
15
16
|
when :get_with_meta_data, :put, :post, :delete then transform( parse( response))
|
16
17
|
when :get
|
17
18
|
parsed = parse(response)
|
18
|
-
if parsed[:items]
|
19
|
+
if parsed.is_a?(Hash) && parsed[:items]
|
19
20
|
parsed[:items].map do |item|
|
20
21
|
transform item
|
21
22
|
end
|
@@ -38,11 +39,14 @@ module Magentwo
|
|
38
39
|
end
|
39
40
|
|
40
41
|
def transform item
|
41
|
-
|
42
|
+
if(item && item.is_a?(Hash))
|
43
|
+
date_transform item
|
44
|
+
else
|
45
|
+
item
|
46
|
+
end
|
42
47
|
end
|
43
48
|
|
44
49
|
def date_transform item
|
45
|
-
p "datetransform: #{item}"
|
46
50
|
DateFields.each do |date_field|
|
47
51
|
item[date_field] = Time.new item[date_field] if item[date_field]
|
48
52
|
end
|
data/lib/connection.rb
CHANGED
@@ -2,27 +2,26 @@ module Magentwo
|
|
2
2
|
class Connection
|
3
3
|
attr_accessor :host, :port, :user, :password, :token, :base_path
|
4
4
|
|
5
|
-
def initialize
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
else
|
10
|
-
@host = host
|
11
|
-
@port = 80
|
12
|
-
end
|
5
|
+
def initialize uri, user, password, base_path:nil
|
6
|
+
uri = URI(uri)
|
7
|
+
@host = uri.host
|
8
|
+
@port = uri.port
|
13
9
|
@user = user
|
14
10
|
@password = password
|
15
|
-
@base_path = base_path || "/rest/
|
11
|
+
@base_path = base_path || "/rest/V1"
|
16
12
|
request_token
|
17
13
|
end
|
18
14
|
|
19
15
|
def request_token
|
20
16
|
Net::HTTP.start(self.host,self.port) do |http|
|
21
|
-
|
17
|
+
url = "#{base_path}/integration/admin/token"
|
18
|
+
Magentwo.logger.info "POST #{url}"
|
19
|
+
req = Net::HTTP::Post.new(url)
|
22
20
|
req.body = {:username=> self.user, :password=> self.password}.to_json
|
23
21
|
req['Content-Type'] = "application/json"
|
24
22
|
req['Content-Length'] = req.body.length
|
25
|
-
|
23
|
+
response = http.request(req).body
|
24
|
+
@token = JSON.parse response
|
26
25
|
end
|
27
26
|
end
|
28
27
|
|
data/lib/dataset.rb
CHANGED
@@ -7,7 +7,7 @@ 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(0)
|
11
11
|
},
|
12
12
|
:ordering => [],
|
13
13
|
:fields => nil
|
@@ -18,21 +18,22 @@ module Magentwo
|
|
18
18
|
# Filters
|
19
19
|
################
|
20
20
|
def filter hash_or_other, invert:false
|
21
|
-
|
21
|
+
filters = case hash_or_other
|
22
22
|
when Hash
|
23
23
|
raise ArgumentError, "empty hash supplied" if hash_or_other.empty?
|
24
|
-
key, value
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
24
|
+
hash_or_other.map do |key, value|
|
25
|
+
klass = case value
|
26
|
+
when Array
|
27
|
+
invert ? Filter::Nin : Filter::In
|
28
|
+
else
|
29
|
+
invert ? Filter::Neq : Filter::Eq
|
30
|
+
end
|
31
|
+
klass.new(key, value)
|
30
32
|
end
|
31
|
-
klass.new(key, value)
|
32
33
|
else
|
33
34
|
raise ArgumentError, "filter function expects Hash as input"
|
34
35
|
end
|
35
|
-
Dataset.new self.model, self.opts.merge(:filters => self.opts[:filters] +
|
36
|
+
Dataset.new self.model, self.opts.merge(:filters => self.opts[:filters] + filters)
|
36
37
|
end
|
37
38
|
|
38
39
|
def exclude args
|
@@ -124,5 +125,20 @@ module Magentwo
|
|
124
125
|
raise ArgumentError, "no block given" unless block_given?
|
125
126
|
self.model.all.each(&block)
|
126
127
|
end
|
128
|
+
|
129
|
+
def each_page page_size=Magentwo.default_page_size, &block
|
130
|
+
raise ArgumentError, "no block given" unless block_given?
|
131
|
+
|
132
|
+
received_element_count = page_size
|
133
|
+
current_page = 1
|
134
|
+
while(received_element_count == page_size) do
|
135
|
+
page = self.page(current_page, page_size).all
|
136
|
+
|
137
|
+
block.call(page)
|
138
|
+
|
139
|
+
received_element_count = page.count
|
140
|
+
current_page += 1
|
141
|
+
end
|
142
|
+
end
|
127
143
|
end
|
128
144
|
end
|
data/lib/filter.rb
CHANGED
@@ -10,7 +10,7 @@ module Magentwo
|
|
10
10
|
def to_query idx
|
11
11
|
[
|
12
12
|
"searchCriteria[filter_groups][#{idx}][filters][0][field]=#{self.field}",
|
13
|
-
"searchCriteria[filter_groups][#{idx}][filters][0][value]=#{URI::encode(self.value)}",
|
13
|
+
"searchCriteria[filter_groups][#{idx}][filters][0][value]=#{URI::encode(self.value.to_s)}",
|
14
14
|
"searchCriteria[filter_groups][#{idx}][filters][0][condition_type]=#{self.class.name.split("::").last.downcase}"]
|
15
15
|
.join("&")
|
16
16
|
end
|
@@ -20,7 +20,7 @@ module Magentwo
|
|
20
20
|
def to_query idx
|
21
21
|
[
|
22
22
|
"searchCriteria[filter_groups][#{idx}][filters][0][field]=#{self.field}",
|
23
|
-
"searchCriteria[filter_groups][#{idx}][filters][0][value]=#{URI::encode(self.value.join(","))}",
|
23
|
+
"searchCriteria[filter_groups][#{idx}][filters][0][value]=#{URI::encode(self.value.join(",").map(&:to_s))}",
|
24
24
|
"searchCriteria[filter_groups][#{idx}][filters][0][condition_type]=#{self.class.name.split("::").last.downcase}"]
|
25
25
|
.join("&")
|
26
26
|
end
|
data/lib/magentwo.rb
CHANGED
@@ -4,8 +4,11 @@ require 'json'
|
|
4
4
|
require 'logger'
|
5
5
|
|
6
6
|
module Magentwo
|
7
|
-
Models = %w(base product customer order coupon sales_rule)
|
8
|
-
def self.connect host, user_name, password
|
7
|
+
Models = %w(base product customer order coupon sales_rule category)
|
8
|
+
def self.connect host=nil, user_name=nil, password=nil
|
9
|
+
raise ArgumentError, "no host specified" unless host
|
10
|
+
raise ArgumentError, "no user_name specified" unless user_name
|
11
|
+
raise ArgumentError, "no password specified" unless password
|
9
12
|
Base.adapter = Adapter.new host, user_name, password
|
10
13
|
end
|
11
14
|
|
@@ -14,7 +17,7 @@ module Magentwo
|
|
14
17
|
end
|
15
18
|
|
16
19
|
def self.logger
|
17
|
-
@@logger ||= Logger.new STDOUT, {:level => Logger::
|
20
|
+
@@logger ||= Logger.new STDOUT, {:level => Logger::INFO}
|
18
21
|
end
|
19
22
|
|
20
23
|
def self.default_page_size
|
@@ -25,7 +28,14 @@ module Magentwo
|
|
25
28
|
@@default_page_size = page_size
|
26
29
|
end
|
27
30
|
|
28
|
-
|
31
|
+
def self.models
|
32
|
+
Models.map do |model_file_name|
|
33
|
+
model_file_name
|
34
|
+
.split('_')
|
35
|
+
.map(&:capitalize)
|
36
|
+
.join
|
37
|
+
end
|
38
|
+
end
|
29
39
|
end
|
30
40
|
|
31
41
|
require_relative 'connection.rb'
|
data/lib/model/base.rb
CHANGED
@@ -2,8 +2,6 @@ module Magentwo
|
|
2
2
|
class Base
|
3
3
|
DatasetMethods = %i(filter exclude select fields count fields info page order_by like)
|
4
4
|
|
5
|
-
attr_accessor :base_path
|
6
|
-
|
7
5
|
def initialize args
|
8
6
|
args.each do |key, value|
|
9
7
|
key_sym = :"@#{key}"
|
@@ -64,6 +62,10 @@ module Magentwo
|
|
64
62
|
class << self
|
65
63
|
attr_accessor :adapter
|
66
64
|
|
65
|
+
def [] unique_identifier
|
66
|
+
self.new (Magentwo::Base.get nil, path:"#{base_path}/#{unique_identifier}")
|
67
|
+
end
|
68
|
+
|
67
69
|
def lower_case_name
|
68
70
|
name = self.name.split(/::/).last
|
69
71
|
"#{name[0,1].downcase}#{name[1..-1]}"
|
@@ -88,6 +90,18 @@ module Magentwo
|
|
88
90
|
self.new self.get(ds.page(1, 1).to_query).first
|
89
91
|
end
|
90
92
|
|
93
|
+
def each_page page_size=Magentwo.default_page_size, &block
|
94
|
+
self.dataset.each_page page_size, &block
|
95
|
+
end
|
96
|
+
|
97
|
+
def each &block
|
98
|
+
self.dataset.each &block
|
99
|
+
end
|
100
|
+
|
101
|
+
def map &block
|
102
|
+
self.dataset.map &block
|
103
|
+
end
|
104
|
+
|
91
105
|
def dataset
|
92
106
|
Magentwo::Dataset.new(self)
|
93
107
|
end
|
@@ -108,7 +122,7 @@ module Magentwo
|
|
108
122
|
end
|
109
123
|
|
110
124
|
def call method, path=self.base_path, params
|
111
|
-
|
125
|
+
Magentwo::Base.adapter.call(method, path, params)
|
112
126
|
end
|
113
127
|
|
114
128
|
end
|
data/lib/model/coupon.rb
CHANGED
@@ -11,7 +11,7 @@ module Magentwo
|
|
11
11
|
def generate rule_id, quantity:1, length:16, format:(:alpha), delimiter:"-", delimiter_at_every:4
|
12
12
|
format = format.to_sym
|
13
13
|
Magentwo::Validator.one_of format, :num, :alpha, :alphanum
|
14
|
-
self.call :post, "
|
14
|
+
self.call :post, "#{base_path}/generate",
|
15
15
|
{
|
16
16
|
:couponSpec => {
|
17
17
|
:rule_id => rule_id,
|
data/lib/model/product.rb
CHANGED
@@ -2,5 +2,11 @@ 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
4
|
Attributes.each do |attr| attr_accessor attr end
|
5
|
+
|
6
|
+
class << self
|
7
|
+
def types
|
8
|
+
Magentwo::Base.get nil, path:"#{base_path}/types"
|
9
|
+
end
|
10
|
+
end
|
5
11
|
end
|
6
12
|
end
|
data/lib/model/sales_rule.rb
CHANGED
@@ -3,6 +3,15 @@ module Magentwo
|
|
3
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
4
|
Attributes.each do |attr| attr_accessor attr end
|
5
5
|
|
6
|
+
def generate quantity:1, length:16, format:(:alpha), delimiter:"-", delimiter_at_every:4
|
7
|
+
Magentwo::Coupon.generate self.rule_id, quantity:quantity, length:length, format:format, delimiter:delimiter, delimiter_at_every:delimiter_at_every
|
8
|
+
end
|
9
|
+
|
10
|
+
def coupons
|
11
|
+
Magentwo::Coupon.filter(:rule_id => self.rule_id).all
|
12
|
+
end
|
13
|
+
|
14
|
+
|
6
15
|
class << self
|
7
16
|
def get_path
|
8
17
|
"#{base_path}/search"
|
data/magentwo.gemspec
CHANGED
data/spec/dataset_spec.rb
CHANGED
@@ -18,9 +18,9 @@ describe Magentwo::Dataset do
|
|
18
18
|
expect(dataset.opts[:pagination]).to have_key :current_page
|
19
19
|
expect(dataset.opts[:pagination]).to have_key :page_size
|
20
20
|
end
|
21
|
-
it "requests
|
21
|
+
it "requests all items on default" do
|
22
22
|
expect(initial_query).to include "searchCriteria[current_page]=1"
|
23
|
-
expect(initial_query).to include "searchCriteria[page_size]
|
23
|
+
expect(initial_query).to include "searchCriteria[page_size]=0"
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
@@ -37,6 +37,31 @@ describe Magentwo::Dataset do
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
+
context "multi filter" do
|
41
|
+
let(:multi_filter_ds) {dataset.filter(:name => "foobar").filter(:id => 42)}
|
42
|
+
let(:multi_filter_query) {multi_filter_ds.to_query}
|
43
|
+
let(:multi_filter_in_one_ds) {dataset.filter(:name => "foobar", :id => 42)}
|
44
|
+
let(:multi_filter_in_one_query) {multi_filter_in_one_ds.to_query}
|
45
|
+
it "contains filter with type Filter::Eq" do
|
46
|
+
expect(multi_filter_ds.opts[:filters]).to include Magentwo::Filter::Eq
|
47
|
+
end
|
48
|
+
it "contains two filters" do
|
49
|
+
expect(multi_filter_ds.opts[:filters].count).to eq 2
|
50
|
+
end
|
51
|
+
it "compute query" do
|
52
|
+
expect(multi_filter_query).to include "searchCriteria[filter_groups][0][filters][0][field]=name"
|
53
|
+
expect(multi_filter_query).to include "searchCriteria[filter_groups][0][filters][0][condition_type]=eq"
|
54
|
+
expect(multi_filter_query).to include "searchCriteria[filter_groups][0][filters][0][value]=foobar"
|
55
|
+
expect(multi_filter_query).to include "searchCriteria[filter_groups][1][filters][0][field]=id"
|
56
|
+
expect(multi_filter_query).to include "searchCriteria[filter_groups][1][filters][0][condition_type]=eq"
|
57
|
+
expect(multi_filter_query).to include "searchCriteria[filter_groups][1][filters][0][value]=42"
|
58
|
+
end
|
59
|
+
it "is the same for multiple keys in one filter" do
|
60
|
+
expect(multi_filter_ds.opts.count).to eq multi_filter_in_one_ds.opts.count
|
61
|
+
expect(multi_filter_query).to eq multi_filter_in_one_query
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
40
65
|
context "select" do
|
41
66
|
let(:name_select_ds) {dataset.select(:name)}
|
42
67
|
let(:name_select_query) {name_select_ds.to_query}
|
data/spec/product_spec.rb
CHANGED
@@ -1,4 +1,83 @@
|
|
1
1
|
require_relative '../lib/magentwo.rb'
|
2
2
|
|
3
3
|
describe Magentwo::Product do
|
4
|
+
before(:all) do
|
5
|
+
Magentwo.logger = Logger.new STDOUT, {:level => Logger::ERROR}
|
6
|
+
@original_count = Magentwo::Product.count
|
7
|
+
end
|
8
|
+
|
9
|
+
context "#dataset" do
|
10
|
+
let(:dataset) {Magentwo::Product.dataset}
|
11
|
+
it "returns dataset" do
|
12
|
+
expect(dataset).to be_a Magentwo::Dataset
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
context "#count" do
|
17
|
+
let(:count) {Magentwo::Product.count}
|
18
|
+
it "responds to :count" do
|
19
|
+
expect(Magentwo::Product).to respond_to :count
|
20
|
+
end
|
21
|
+
it "correct count" do
|
22
|
+
expect(count).to eq @original_count
|
23
|
+
end
|
24
|
+
it "count is integer" do
|
25
|
+
expect(count).to be_a Integer
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "#all" do
|
30
|
+
let(:products) {Magentwo::Product.all}
|
31
|
+
let(:ds) {Magentwo::Product.dataset}
|
32
|
+
|
33
|
+
it "responds to all" do
|
34
|
+
expect(Magentwo::Product).to respond_to :all
|
35
|
+
end
|
36
|
+
it "returns an array" do
|
37
|
+
expect(products).to be_a Array
|
38
|
+
end
|
39
|
+
it "requested all" do
|
40
|
+
expect(products.count).to eq @original_count
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context "#fields" do
|
45
|
+
let(:fields) {Magentwo::Product.fields}
|
46
|
+
|
47
|
+
it "returns array of symbols" do
|
48
|
+
expect(fields).to be_a Array
|
49
|
+
fields.each do |field|
|
50
|
+
expect(field).to be_a Symbol
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context "#first" do
|
56
|
+
let(:product) {Magentwo::Product.first}
|
57
|
+
|
58
|
+
it "returns a product" do
|
59
|
+
expect(product).to be_a Magentwo::Product
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context "#types" do
|
64
|
+
let(:types) {Magentwo::Product.types}
|
65
|
+
|
66
|
+
it "returns array" do
|
67
|
+
expect(types).to be_a Array
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
context "#[]" do
|
72
|
+
let(:first_product) {Magentwo::Product.first}
|
73
|
+
let(:by_sku_product) {Magentwo::Product[first_product.sku]}
|
74
|
+
|
75
|
+
it "returns a product" do
|
76
|
+
expect(by_sku_product).to be_a Magentwo::Product
|
77
|
+
end
|
78
|
+
|
79
|
+
it "returns product by :sku" do
|
80
|
+
expect(first_product.sku).to eq by_sku_product.sku
|
81
|
+
end
|
82
|
+
end
|
4
83
|
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.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- André Mueß
|
@@ -27,6 +27,7 @@ files:
|
|
27
27
|
- lib/filter.rb
|
28
28
|
- lib/magentwo.rb
|
29
29
|
- lib/model/base.rb
|
30
|
+
- lib/model/category.rb
|
30
31
|
- lib/model/coupon.rb
|
31
32
|
- lib/model/customer.rb
|
32
33
|
- lib/model/order.rb
|