zookal_magento_rest_api 0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: bf6d8162f9afab5ccd2ded8c08185cb69f4947bc
4
+ data.tar.gz: 138417e1bf08fbfda6f85fbeac1f2eba8d7a4052
5
+ SHA512:
6
+ metadata.gz: 2c0443d11fac83e0af948f798c28466468a6f42f56891ec3589aa0b61525f5a46030bc23d433c46404f3e2d1399cff4c942c5db0271873ef9fb45fdd8c22dc7c
7
+ data.tar.gz: 913e5ab08f2a9c5e94ef11da5ffd0b514a8f988c9867de497b1d8484f8ea207fee42e0371b61e0b0e1c2c2b27283b76d1ad9bd0bd31fd9b6fd2ac0e5cb677ebb
data/.gitignore ADDED
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .ruby-gemset
19
+ .ruby-version
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in magento_rest_api.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Michael Imstepf
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,82 @@
1
+ # ZookalMagentoRestApi
2
+
3
+ Ruby wrapper for backend calls to Zookal's Magento store. Prior authentication & authorization (through oAuth) required.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'zookal_magento_rest_api'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install zookal_magento_rest_api
18
+
19
+ ## Setup
20
+
21
+ Create a file `config/initializers/zookal_magento_rest_api.rb` with the following content and restart Rails after saving the file:
22
+
23
+ ZookalMagentoRestApi.configure do |config|
24
+ config.consumer_key = "123dsfdsafQ231" # from Magento Admin panel
25
+ config.consumer_secret = "23dfsfFdsfsdee" # from Magento Admin panel
26
+ config.site = "https://www.zookal.com" # without trailing slash and no redirects (e.g. root domain to www)
27
+ config.access_key = "3434412373rf" # from prior authentication
28
+ config.access_secret = "df23sdfsf23a" # from prior authentication
29
+ config.url_params = "utm_source=some-company&utm_medium=affiliate&utm_campaign=newsletter-01-2014" # optional
30
+ end
31
+
32
+ *Important*: Make sure the URL in the site configuration is without trailing slash and has no redirect (e.g. `https://zookal.com` redirects to `https://www.zookal.com`). Otherwise you'll get a 301 Redirect error for each request.
33
+
34
+ Information on how to obtain access_key and access_secret can be seen [here](https://github.com/necrodome/magento-rails-rest-access-sample/blob/master/app/controllers/products_controller.rb)
35
+
36
+ ## Usage
37
+
38
+ Instantiate a client
39
+
40
+ zookal_magento_client = ZookalMagentoRestApi::Client.new
41
+
42
+ Query a book
43
+
44
+ book_buy_new = zookal_magento_client.find_by(isbn: 9781442531109, purchase_type: "Buy New")
45
+ book_rent = zookal_magento_client.find_by(isbn: 9781442531109, purchase_type: "Rent")
46
+
47
+ Check if a book exists
48
+
49
+ book_buy_new.present?
50
+
51
+ Get attributes
52
+
53
+ ```
54
+ book_buy_new.url_with_params # Full URL with specified params in `config/zookal_magento_rest_api.rb`
55
+ book_buy_new.special_price # Price
56
+ book_buy_new.price # RRP
57
+ book_buy_new.author # Author
58
+ book_buy_new.sku # SKU
59
+ book_buy_new.name # Name
60
+ book_buy_new.edition # Edition
61
+ book_buy_new.publisher # Publisher
62
+ book_buy_new.year # Year
63
+ book_buy_new.pages # Pages
64
+ ```
65
+
66
+ Get list of all attributes in console
67
+
68
+ $ book_buy_new.instance_variable_get("@table")
69
+
70
+ Debugging
71
+
72
+ book_buy_new.meta_status # HTTP status code, 200 for successful request, 4xx for client error, 5xx for server error
73
+ book_buy_new.meta_message # HTTP status message, e.g. "OK" for 200 or "Unauthorized" for 401
74
+ book_buy_new.meta_errors # Array of detailed error messages, e.g. ["Invalid value for attribute purchase_type", "config.access_secret not specified in initializer file"]
75
+
76
+ ## Contributing
77
+
78
+ 1. Fork it ( http://github.com/<my-github-username>/zookal-magento-rest-api/fork )
79
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
80
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
81
+ 4. Push to the branch (`git push origin my-new-feature`)
82
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,7 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new
5
+
6
+ task :default => :spec
7
+ task :test => :spec
@@ -0,0 +1,3 @@
1
+ module ZookalMagentoRestApi
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,144 @@
1
+ require "zookal_magento_rest_api/version"
2
+
3
+ module ZookalMagentoRestApi
4
+ class << self
5
+ attr_accessor :consumer_key, :consumer_secret, :site, :access_key, :access_secret, :url_params
6
+ end
7
+
8
+ def self.configure(&block)
9
+ yield self
10
+ end
11
+
12
+ class Client
13
+ require "oauth"
14
+ require "multi_json"
15
+ require "ostruct"
16
+
17
+ def find_by(opts)
18
+ @access_token ||= prepare_access_token
19
+
20
+ purchase_type_id = translate_purchase_type_to_purchase_type_id(opts[:purchase_type])
21
+
22
+ # rescue in case a configuration setting is missing, which will crash OAuth
23
+ response = @access_token.get("/api/rest/products?filter[1][attribute]=isbn&filter[1][eq]=#{opts[:isbn]}&filter[2][attribute]=purchase_type&filter[2][eq]=#{purchase_type_id}&filter[3][attribute]=status&filter[3][eq]=1") rescue nil
24
+ response_status = response.code.to_i rescue nil
25
+ response_message = response.message rescue nil
26
+ # decode response body and rescue if there's a ParseError (e.g. when Magento returns HTML after invalid authentication)
27
+ if response
28
+ begin
29
+ response_body_decoded = MultiJson.decode(response.body)
30
+ rescue MultiJson::ParseError => exception
31
+ puts "MultiJson::ParseError"
32
+ puts exception
33
+ response_body_decoded = nil
34
+ end
35
+ else
36
+ response_body_decoded = nil
37
+ end
38
+ response_o_auth_error_message = get_oauth_error_message(response_body_decoded)
39
+
40
+ attributes = get_book_attributes(response_body_decoded)
41
+ entity_id = get_entity_id(attributes, response_body_decoded)
42
+
43
+ attributes[:meta_status] = response_status if response_status
44
+ attributes[:meta_message] = response_message if response_message
45
+ errors = get_errors(opts, purchase_type_id, response_o_auth_error_message)
46
+ attributes[:meta_errors] = errors if errors
47
+
48
+ attributes[:present?] = is_book_present?(attributes)
49
+ url_with_params = get_url_with_params(attributes, entity_id)
50
+ attributes[:url_with_params] = url_with_params if url_with_params
51
+
52
+ OpenStruct.new(attributes)
53
+ end
54
+
55
+ private
56
+
57
+ def prepare_access_token
58
+ consumer = OAuth::Consumer.new(ZookalMagentoRestApi.consumer_key, ZookalMagentoRestApi.consumer_secret, :site => ZookalMagentoRestApi.site)
59
+ token_hash = {oauth_token: ZookalMagentoRestApi.access_key, oauth_token_secret: ZookalMagentoRestApi.access_secret}
60
+ access_token = OAuth::AccessToken.from_hash(consumer, token_hash)
61
+ end
62
+
63
+ def translate_purchase_type_to_purchase_type_id(purchase_type)
64
+ return nil unless purchase_type.is_a? String
65
+ case purchase_type.downcase
66
+ when "buy new" then 56
67
+ when "rent" then 55
68
+ else return nil
69
+ end
70
+ end
71
+
72
+ def get_oauth_error_message(response_body_decoded)
73
+ response_body_decoded["messages"]["error"].first["message"] rescue nil
74
+ end
75
+
76
+ def get_book_attributes(response_body_decoded)
77
+ sku = response_body_decoded.values.first["sku"] rescue nil
78
+ sku ? response_body_decoded.values.first : {}
79
+ end
80
+
81
+ def get_entity_id(attributes, response_body_decoded)
82
+ return nil unless attributes.any?
83
+ response_body_decoded.keys.first
84
+ end
85
+
86
+ def get_errors(opts, purchase_type_id, response_o_auth_error_message)
87
+ errors = []
88
+
89
+ unless ZookalMagentoRestApi.consumer_key
90
+ errors << "config.consumer_key not specified in initializer file"
91
+ end
92
+
93
+ unless ZookalMagentoRestApi.consumer_secret
94
+ errors << "config.consumer_secret not specified in initializer file"
95
+ end
96
+
97
+ unless ZookalMagentoRestApi.site
98
+ errors << "config.site not specified in initializer file"
99
+ end
100
+
101
+ unless ZookalMagentoRestApi.access_key
102
+ errors << "config.access_key not specified in initializer file"
103
+ end
104
+
105
+ unless ZookalMagentoRestApi.access_secret
106
+ errors << "config.access_secret not specified in initializer file"
107
+ end
108
+
109
+ unless opts.has_key?(:isbn)
110
+ errors << "Attribute isbn not specified"
111
+ end
112
+
113
+ unless opts.has_key?(:purchase_type)
114
+ errors << "Attribute purchase_type not specified"
115
+ end
116
+
117
+ unless purchase_type_id
118
+ errors << "Invalid value for attribute purchase_type"
119
+ end
120
+
121
+ if response_o_auth_error_message
122
+ errors << response_o_auth_error_message
123
+ end
124
+
125
+ errors.any? ? errors : nil
126
+ end
127
+
128
+ def is_book_present?(attributes)
129
+ attributes["sku"] ? true : false
130
+ end
131
+
132
+ def get_url_with_params(attributes, entity_id)
133
+ return nil unless ZookalMagentoRestApi.site && attributes["url_key"] && entity_id
134
+
135
+ url = "#{ZookalMagentoRestApi.site}/catalog/product/view/id/#{entity_id}"
136
+ if ZookalMagentoRestApi.url_params
137
+ url = url + "?#{ZookalMagentoRestApi.url_params}"
138
+ end
139
+
140
+ url
141
+ end
142
+
143
+ end
144
+ end
@@ -0,0 +1,24 @@
1
+ # ENV["RAILS_ENV"] ||= 'test'
2
+ require "zookal_magento_rest_api"
3
+ require "pry"
4
+ require "webmock/rspec"
5
+
6
+
7
+ RSpec.configure do |config|
8
+ # Run specs in random order to surface order dependencies. If you find an
9
+ # order dependency and want to debug it, you can fix the order by providing
10
+ # the seed, which is printed after each run.
11
+ # --seed 1234
12
+ config.order = "random"
13
+
14
+ # when a focus tag is present in RSpec, only run tests with focus tag: http://railscasts.com/episodes/285-spork
15
+ config.filter_run :focus => true
16
+ config.run_all_when_everything_filtered = true
17
+ end
18
+
19
+ # http://stackoverflow.com/questions/19075907/clean-solution-for-resetting-class-variables-in-between-rspec-tests/19079701#19079701
20
+ def reset_class_variables(cl)
21
+ cl.class_variables.each do |var|
22
+ cl.class_variable_set var, nil
23
+ end
24
+ end
@@ -0,0 +1,188 @@
1
+ require "spec_helper"
2
+
3
+ describe ZookalMagentoRestApi::Client do
4
+ response_body_book_buy_new = "{\"2378\":{\"status\":\"1\", \"sku\":\"978123432423\", \"url_key\":\"marketing-and-the-law\"}}"
5
+ response_body_unauthorized = "{\"messages\":{\"error\":[{\"code\":401,\"message\":\"oauth_problem=consumer_key_rejected\"}]}}"
6
+ after(:each) do
7
+ reset_class_variables ZookalMagentoRestApi
8
+ end
9
+
10
+ context "when a configuration attribute is missing in the initializer file" do
11
+ it "set the correct attributes" do
12
+ ZookalMagentoRestApi.consumer_key = nil
13
+ ZookalMagentoRestApi.consumer_secret = "secret"
14
+ ZookalMagentoRestApi.site = "https://www.zookal.com"
15
+ ZookalMagentoRestApi.access_key = "key"
16
+ ZookalMagentoRestApi.access_secret = "secret"
17
+
18
+ magento_client = ZookalMagentoRestApi::Client.new
19
+
20
+ WebMock.stub_request(:get, "https://www.zookal.com/api/rest/products?filter[1][attribute]=isbn&filter[1][eq]=123&filter[2][attribute]=purchase_type&filter[2][eq]=56&filter[3][attribute]=status&filter[3][eq]=1")
21
+ .to_return(:status => 401,
22
+ :body => response_body_unauthorized
23
+ )
24
+ book = magento_client.find_by(isbn: 123, purchase_type: "Buy New")
25
+ expect(book.meta_status).to eq 401
26
+ expect(book.meta_errors.count).to eq 2
27
+ expect(book.meta_errors.first).to eq "config.consumer_key not specified in initializer file"
28
+ expect(book.present?).to be_false
29
+ end
30
+ end
31
+
32
+ context "when two configuration attributes are missing in the initializer file" do
33
+ it "set the correct attributes" do
34
+ ZookalMagentoRestApi.consumer_key = nil
35
+ ZookalMagentoRestApi.consumer_secret = "secret"
36
+ ZookalMagentoRestApi.site = "https://www.zookal.com"
37
+ ZookalMagentoRestApi.access_key = nil
38
+ ZookalMagentoRestApi.access_secret = "secret"
39
+
40
+ magento_client = ZookalMagentoRestApi::Client.new
41
+
42
+ WebMock.stub_request(:get, "https://www.zookal.com/api/rest/products?filter[1][attribute]=isbn&filter[1][eq]=123&filter[2][attribute]=purchase_type&filter[2][eq]=56&filter[3][attribute]=status&filter[3][eq]=1")
43
+ .to_return(:status => 401,
44
+ :body => response_body_unauthorized
45
+ )
46
+ book = magento_client.find_by(isbn: 123, purchase_type: "Buy New")
47
+ expect(book.meta_status).to eq 401
48
+ expect(book.meta_errors.count).to eq 3
49
+ expect(book.meta_errors[0]).to eq "config.consumer_key not specified in initializer file"
50
+ expect(book.meta_errors[1]).to eq "config.access_key not specified in initializer file"
51
+ expect(book.present?).to be_false
52
+ end
53
+ end
54
+
55
+ context "when no book was found" do
56
+ it "set the correct attributes" do
57
+ ZookalMagentoRestApi.consumer_key = "key"
58
+ ZookalMagentoRestApi.consumer_secret = "secret"
59
+ ZookalMagentoRestApi.site = "https://www.zookal.com"
60
+ ZookalMagentoRestApi.access_key = "key"
61
+ ZookalMagentoRestApi.access_secret = "secret"
62
+
63
+ magento_client = ZookalMagentoRestApi::Client.new
64
+
65
+ WebMock.stub_request(:get, "https://www.zookal.com/api/rest/products?filter[1][attribute]=isbn&filter[1][eq]=123&filter[2][attribute]=purchase_type&filter[2][eq]=56&filter[3][attribute]=status&filter[3][eq]=1")
66
+ .to_return(:status => 200,
67
+ :body => "[]"
68
+ )
69
+ book = magento_client.find_by(isbn: 123, purchase_type: "Buy New")
70
+ expect(book.meta_status).to eq 200
71
+ expect(book.meta_errors).to be_nil
72
+ expect(book.special_price).to be_nil
73
+ expect(book.present?).to be_false
74
+ end
75
+ end
76
+
77
+ context "when purchase_type was not specified" do
78
+ it "set the correct attributes" do
79
+ ZookalMagentoRestApi.consumer_key = "key"
80
+ ZookalMagentoRestApi.consumer_secret = "secret"
81
+ ZookalMagentoRestApi.site = "https://www.zookal.com"
82
+ ZookalMagentoRestApi.access_key = "key"
83
+ ZookalMagentoRestApi.access_secret = "secret"
84
+
85
+ magento_client = ZookalMagentoRestApi::Client.new
86
+
87
+ WebMock.stub_request(:get, "https://www.zookal.com/api/rest/products?filter[1][attribute]=isbn&filter[1][eq]=123&filter[2][attribute]=purchase_type&filter[2][eq]=&filter[3][attribute]=status&filter[3][eq]=1")
88
+ .to_return(:status => 200,
89
+ :body => response_body_book_buy_new
90
+ )
91
+ book = magento_client.find_by(isbn: 123)
92
+ expect(book.meta_status).to eq 200
93
+ expect(book.meta_errors.count).to eq 2
94
+ expect(book.meta_errors[0]).to eq "Attribute purchase_type not specified"
95
+ expect(book.present?).to be_true
96
+ end
97
+ end
98
+
99
+ context "when isbn was not specified" do
100
+ it "set the correct attributes" do
101
+ ZookalMagentoRestApi.consumer_key = "key"
102
+ ZookalMagentoRestApi.consumer_secret = "secret"
103
+ ZookalMagentoRestApi.site = "https://www.zookal.com"
104
+ ZookalMagentoRestApi.access_key = "key"
105
+ ZookalMagentoRestApi.access_secret = "secret"
106
+
107
+ magento_client = ZookalMagentoRestApi::Client.new
108
+
109
+ WebMock.stub_request(:get, "https://www.zookal.com/api/rest/products?filter[1][attribute]=isbn&filter[1][eq]=&filter[2][attribute]=purchase_type&filter[2][eq]=56&filter[3][attribute]=status&filter[3][eq]=1")
110
+ .to_return(:status => 200,
111
+ :body => response_body_book_buy_new
112
+ )
113
+ book = magento_client.find_by(purchase_type: "Buy New")
114
+ expect(book.meta_status).to eq 200
115
+ expect(book.meta_errors.count).to eq 1
116
+ expect(book.meta_errors[0]).to eq "Attribute isbn not specified"
117
+ expect(book.present?).to be_true
118
+ end
119
+ end
120
+
121
+ context "when invalid purchase_type was entered" do
122
+ it "set the correct attributes" do
123
+ ZookalMagentoRestApi.consumer_key = "key"
124
+ ZookalMagentoRestApi.consumer_secret = "secret"
125
+ ZookalMagentoRestApi.site = "https://www.zookal.com"
126
+ ZookalMagentoRestApi.access_key = "key"
127
+ ZookalMagentoRestApi.access_secret = "secret"
128
+
129
+ magento_client = ZookalMagentoRestApi::Client.new
130
+
131
+ WebMock.stub_request(:get, "https://www.zookal.com/api/rest/products?filter[1][attribute]=isbn&filter[1][eq]=123&filter[2][attribute]=purchase_type&filter[2][eq]=&filter[3][attribute]=status&filter[3][eq]=1")
132
+ .to_return(:status => 200,
133
+ :body => response_body_book_buy_new
134
+ )
135
+ book = magento_client.find_by(isbn: 123, purchase_type: "Bbla")
136
+ expect(book.meta_status).to eq 200
137
+ expect(book.meta_errors.count).to eq 1
138
+ expect(book.meta_errors.first).to eq "Invalid value for attribute purchase_type"
139
+ expect(book.present?).to be_true
140
+ end
141
+ end
142
+
143
+ context "when requested book was found and no url params exists" do
144
+ it "set the correct attributes" do
145
+ ZookalMagentoRestApi.consumer_key = "key"
146
+ ZookalMagentoRestApi.consumer_secret = "secret"
147
+ ZookalMagentoRestApi.site = "https://www.zookal.com"
148
+ ZookalMagentoRestApi.access_key = "key"
149
+ ZookalMagentoRestApi.access_secret = "secret"
150
+ ZookalMagentoRestApi.url_params = nil
151
+
152
+ magento_client = ZookalMagentoRestApi::Client.new
153
+
154
+ WebMock.stub_request(:get, "https://www.zookal.com/api/rest/products?filter[1][attribute]=isbn&filter[1][eq]=123&filter[2][attribute]=purchase_type&filter[2][eq]=56&filter[3][attribute]=status&filter[3][eq]=1")
155
+ .to_return(:status => 200,
156
+ :body => response_body_book_buy_new
157
+ )
158
+ book = magento_client.find_by(isbn: 123, purchase_type: "Buy New")
159
+ expect(book.meta_status).to eq 200
160
+ expect(book.meta_errors).to be_nil
161
+ expect(book.present?).to be_true
162
+ expect(book.url_with_params).to eq "https://www.zookal.com/catalog/product/view/id/2378"
163
+ end
164
+ end
165
+
166
+ context "when requested book was found and url params exists" do
167
+ it "set the correct attributes" do
168
+ ZookalMagentoRestApi.consumer_key = "key"
169
+ ZookalMagentoRestApi.consumer_secret = "secret"
170
+ ZookalMagentoRestApi.site = "https://www.zookal.com"
171
+ ZookalMagentoRestApi.access_key = "key"
172
+ ZookalMagentoRestApi.access_secret = "secret"
173
+ ZookalMagentoRestApi.url_params = "utm_source=company&utm_medium=affiliate&utm_campaign=2014"
174
+
175
+ magento_client = ZookalMagentoRestApi::Client.new
176
+
177
+ WebMock.stub_request(:get, "https://www.zookal.com/api/rest/products?filter[1][attribute]=isbn&filter[1][eq]=123&filter[2][attribute]=purchase_type&filter[2][eq]=56&filter[3][attribute]=status&filter[3][eq]=1")
178
+ .to_return(:status => 200,
179
+ :body => response_body_book_buy_new
180
+ )
181
+ book = magento_client.find_by(isbn: 123, purchase_type: "Buy New")
182
+ expect(book.meta_status).to eq 200
183
+ expect(book.meta_errors).to be_nil
184
+ expect(book.present?).to be_true
185
+ expect(book.url_with_params).to eq "https://www.zookal.com/catalog/product/view/id/2378?utm_source=company&utm_medium=affiliate&utm_campaign=2014"
186
+ end
187
+ end
188
+ end
@@ -0,0 +1,22 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in zookal-magento-rest-api.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Michael Imstepf
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,29 @@
1
+ # Zookal::Magento::Rest::Api
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'zookal-magento-rest-api'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install zookal-magento-rest-api
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it ( https://github.com/[my-github-username]/zookal-magento-rest-api/fork )
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create a new Pull Request
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,9 @@
1
+ module Zookal
2
+ module Magento
3
+ module Rest
4
+ module Api
5
+ VERSION = "0.0.1"
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ require "zookal/magento/rest/api/version"
2
+
3
+ module Zookal
4
+ module Magento
5
+ module Rest
6
+ module Api
7
+ # Your code goes here...
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'zookal/magento/rest/api/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "zookal-magento-rest-api"
8
+ spec.version = Zookal::Magento::Rest::Api::VERSION
9
+ spec.authors = ["Michael Imstepf"]
10
+ spec.email = ["michael.imstepf@gmail.com"]
11
+ spec.summary = %q{TODO: Write a short summary. Required.}
12
+ spec.description = %q{TODO: Write a longer description. Optional.}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.6"
22
+ spec.add_development_dependency "rake"
23
+ end
@@ -0,0 +1,29 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'zookal_magento_rest_api/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "zookal_magento_rest_api"
8
+ spec.version = ZookalMagentoRestApi::VERSION
9
+ spec.authors = ["Michael Imstepf"]
10
+ spec.email = ["michael.imstepf@gmail.com"]
11
+ spec.summary = %q{Ruby wrapper for the Zookal Magento REST API}
12
+ spec.description = %q{Gem to do backend REST API calls to Zookal's Magento store. Prior authentication (through oAuth) required.}
13
+ spec.homepage = "https://github.com/Zookal/zookal-magento-rest-api"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "oauth"
22
+ spec.add_dependency "multi_json"
23
+
24
+ spec.add_development_dependency "bundler", "~> 1.5"
25
+ spec.add_development_dependency "rake"
26
+ spec.add_development_dependency "rspec"
27
+ spec.add_development_dependency "webmock"
28
+ spec.add_development_dependency "pry"
29
+ end
metadata ADDED
@@ -0,0 +1,163 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: zookal_magento_rest_api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Michael Imstepf
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-07-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: oauth
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: multi_json
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.5'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.5'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: webmock
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: pry
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: Gem to do backend REST API calls to Zookal's Magento store. Prior authentication
112
+ (through oAuth) required.
113
+ email:
114
+ - michael.imstepf@gmail.com
115
+ executables: []
116
+ extensions: []
117
+ extra_rdoc_files: []
118
+ files:
119
+ - ".gitignore"
120
+ - Gemfile
121
+ - LICENSE.txt
122
+ - README.md
123
+ - Rakefile
124
+ - lib/zookal_magento_rest_api.rb
125
+ - lib/zookal_magento_rest_api/version.rb
126
+ - spec/spec_helper.rb
127
+ - spec/zookal_magento_rest_api_spec.rb
128
+ - zookal-magento-rest-api/.gitignore
129
+ - zookal-magento-rest-api/Gemfile
130
+ - zookal-magento-rest-api/LICENSE.txt
131
+ - zookal-magento-rest-api/README.md
132
+ - zookal-magento-rest-api/Rakefile
133
+ - zookal-magento-rest-api/lib/zookal/magento/rest/api.rb
134
+ - zookal-magento-rest-api/lib/zookal/magento/rest/api/version.rb
135
+ - zookal-magento-rest-api/zookal-magento-rest-api.gemspec
136
+ - zookal_magento_rest_api.gemspec
137
+ homepage: https://github.com/Zookal/zookal-magento-rest-api
138
+ licenses:
139
+ - MIT
140
+ metadata: {}
141
+ post_install_message:
142
+ rdoc_options: []
143
+ require_paths:
144
+ - lib
145
+ required_ruby_version: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ required_rubygems_version: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
155
+ requirements: []
156
+ rubyforge_project:
157
+ rubygems_version: 2.2.2
158
+ signing_key:
159
+ specification_version: 4
160
+ summary: Ruby wrapper for the Zookal Magento REST API
161
+ test_files:
162
+ - spec/spec_helper.rb
163
+ - spec/zookal_magento_rest_api_spec.rb