ecwid_api 0.1.0 → 0.2.0
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 +0 -0
- data/.rspec +0 -0
- data/.travis.yml +0 -0
- data/Gemfile +0 -2
- data/LICENSE.txt +0 -0
- data/README.md +228 -228
- data/Rakefile +0 -0
- data/ecwid_api.gemspec +4 -4
- data/lib/ecwid_api.rb +25 -25
- data/lib/ecwid_api/api.rb +8 -30
- data/lib/ecwid_api/api/base.rb +17 -16
- data/lib/ecwid_api/api/categories.rb +55 -56
- data/lib/ecwid_api/api/orders.rb +36 -36
- data/lib/ecwid_api/api/product_combinations.rb +2 -5
- data/lib/ecwid_api/api/products.rb +61 -63
- data/lib/ecwid_api/category.rb +1 -7
- data/lib/ecwid_api/client.rb +99 -65
- data/lib/ecwid_api/entity.rb +4 -6
- data/lib/ecwid_api/error.rb +12 -12
- data/lib/ecwid_api/o_auth.rb +105 -105
- data/lib/ecwid_api/order.rb +0 -0
- data/lib/ecwid_api/order_item.rb +0 -0
- data/lib/ecwid_api/paged_ecwid_response.rb +0 -0
- data/lib/ecwid_api/paged_enumerator.rb +0 -0
- data/lib/ecwid_api/person.rb +0 -0
- data/lib/ecwid_api/product.rb +3 -15
- data/lib/ecwid_api/product_combination.rb +1 -5
- data/lib/ecwid_api/version.rb +1 -1
- data/lib/ext/string.rb +12 -12
- data/spec/api/categories_spec.rb +30 -30
- data/spec/api/orders_spec.rb +29 -29
- data/spec/api/products_spec.rb +0 -0
- data/spec/category_spec.rb +33 -33
- data/spec/client_spec.rb +20 -20
- data/spec/entity_spec.rb +0 -0
- data/spec/fixtures/categories.json +0 -0
- data/spec/fixtures/category.json +0 -0
- data/spec/fixtures/order.json +0 -0
- data/spec/fixtures/orders.json +0 -0
- data/spec/fixtures/products.json +0 -0
- data/spec/helpers/client.rb +31 -31
- data/spec/oauth_spec.rb +39 -39
- data/spec/order_item_spec.rb +11 -11
- data/spec/order_spec.rb +0 -0
- data/spec/paged_enumerator_spec.rb +0 -0
- data/spec/spec_helper.rb +24 -24
- metadata +26 -34
data/lib/ecwid_api/order.rb
CHANGED
File without changes
|
data/lib/ecwid_api/order_item.rb
CHANGED
File without changes
|
File without changes
|
File without changes
|
data/lib/ecwid_api/person.rb
CHANGED
File without changes
|
data/lib/ecwid_api/product.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require "open-uri"
|
2
|
-
|
3
1
|
module EcwidApi
|
4
2
|
class Product < Entity
|
5
3
|
self.url_root = "products"
|
@@ -27,11 +25,7 @@ module EcwidApi
|
|
27
25
|
#
|
28
26
|
# Returns a Faraday::Response object
|
29
27
|
def upload_image!(filename)
|
30
|
-
client.
|
31
|
-
req.body = open(filename).read
|
32
|
-
end.tap do |response|
|
33
|
-
raise_on_failure(response)
|
34
|
-
end
|
28
|
+
client.post_image("#{url}/image", filename)
|
35
29
|
end
|
36
30
|
|
37
31
|
# Public: Uploads gallery images for a Product
|
@@ -43,11 +37,7 @@ module EcwidApi
|
|
43
37
|
# Returns an Array of Faraday::Response object
|
44
38
|
def upload_gallery_images!(*filenames)
|
45
39
|
filenames.map do |filename|
|
46
|
-
client.
|
47
|
-
req.body = open(filename).read
|
48
|
-
end.tap do |response|
|
49
|
-
raise_on_failure(response)
|
50
|
-
end
|
40
|
+
client.post_image("#{url}/gallery", filename)
|
51
41
|
end
|
52
42
|
end
|
53
43
|
|
@@ -57,9 +47,7 @@ module EcwidApi
|
|
57
47
|
#
|
58
48
|
# Returns a Faraday::Response object
|
59
49
|
def delete_gallery_images!
|
60
|
-
client.delete("#{url}/gallery")
|
61
|
-
raise_on_failure(response)
|
62
|
-
end
|
50
|
+
client.delete("#{url}/gallery")
|
63
51
|
end
|
64
52
|
|
65
53
|
def combinations
|
@@ -24,11 +24,7 @@ module EcwidApi
|
|
24
24
|
#
|
25
25
|
# Returns a Faraday::Response object
|
26
26
|
def upload_image!(filename)
|
27
|
-
client.
|
28
|
-
req.body = open(filename).read
|
29
|
-
end.tap do |response|
|
30
|
-
raise_on_failure(response)
|
31
|
-
end
|
27
|
+
client.post_image("#{url}/image", filename)
|
32
28
|
end
|
33
29
|
end
|
34
30
|
end
|
data/lib/ecwid_api/version.rb
CHANGED
data/lib/ext/string.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
|
-
class String
|
2
|
-
def camel_case
|
3
|
-
split('_').inject([]){ |buffer,e| buffer.push(buffer.empty? ? e : e.capitalize) }.join
|
4
|
-
end unless method_defined?(:camel_case)
|
5
|
-
|
6
|
-
def underscore
|
7
|
-
self.gsub(/::/, '/').
|
8
|
-
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
9
|
-
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
10
|
-
tr("-", "_").
|
11
|
-
downcase
|
12
|
-
end unless method_defined?(:underscore)
|
1
|
+
class String
|
2
|
+
def camel_case
|
3
|
+
split('_').inject([]){ |buffer,e| buffer.push(buffer.empty? ? e : e.capitalize) }.join
|
4
|
+
end unless method_defined?(:camel_case)
|
5
|
+
|
6
|
+
def underscore
|
7
|
+
self.gsub(/::/, '/').
|
8
|
+
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
9
|
+
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
10
|
+
tr("-", "_").
|
11
|
+
downcase
|
12
|
+
end unless method_defined?(:underscore)
|
13
13
|
end
|
data/spec/api/categories_spec.rb
CHANGED
@@ -1,31 +1,31 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe EcwidApi::Api::Categories, faraday: true do
|
4
|
-
subject { client.categories }
|
5
|
-
|
6
|
-
describe "#all" do
|
7
|
-
it "gets all of the categories from the client" do
|
8
|
-
expect(client).to receive(:get).with("categories", hash_including({})).and_call_original
|
9
|
-
subject.all
|
10
|
-
end
|
11
|
-
|
12
|
-
it "gets sub categories" do
|
13
|
-
expect(client).to receive(:get).with("categories", hash_including(parent: 5)).and_call_original
|
14
|
-
subject.all(parent: 5)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
describe "#root" do
|
19
|
-
it "gets the root level categories" do
|
20
|
-
expect(subject).to receive(:all).with(hash_including(parent: 0)).and_call_original
|
21
|
-
subject.root
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
describe "#find" do
|
26
|
-
it "finds a single category" do
|
27
|
-
expect(client).to receive(:get).with("categories/#{5}").and_call_original
|
28
|
-
subject.find(5)
|
29
|
-
end
|
30
|
-
end
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe EcwidApi::Api::Categories, faraday: true do
|
4
|
+
subject { client.categories }
|
5
|
+
|
6
|
+
describe "#all" do
|
7
|
+
it "gets all of the categories from the client" do
|
8
|
+
expect(client).to receive(:get).with("categories", hash_including({})).and_call_original
|
9
|
+
subject.all
|
10
|
+
end
|
11
|
+
|
12
|
+
it "gets sub categories" do
|
13
|
+
expect(client).to receive(:get).with("categories", hash_including(parent: 5)).and_call_original
|
14
|
+
subject.all(parent: 5)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "#root" do
|
19
|
+
it "gets the root level categories" do
|
20
|
+
expect(subject).to receive(:all).with(hash_including(parent: 0)).and_call_original
|
21
|
+
subject.root
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "#find" do
|
26
|
+
it "finds a single category" do
|
27
|
+
expect(client).to receive(:get).with("categories/#{5}").and_call_original
|
28
|
+
subject.find(5)
|
29
|
+
end
|
30
|
+
end
|
31
31
|
end
|
data/spec/api/orders_spec.rb
CHANGED
@@ -1,30 +1,30 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe EcwidApi::Api::Orders, faraday: true do
|
4
|
-
subject { client.orders }
|
5
|
-
|
6
|
-
describe "#all" do
|
7
|
-
it "passes the parameters to the client" do
|
8
|
-
expect(client).to receive(:get).with("orders", hash_including(from_date: '1982-05-17'))
|
9
|
-
subject.all(from_date: '1982-05-17')
|
10
|
-
end
|
11
|
-
|
12
|
-
it "gets the proper response (see fixtures)" do
|
13
|
-
subject.all.count.should == 2
|
14
|
-
end
|
15
|
-
|
16
|
-
it "gets EcwidApi::Order types" do
|
17
|
-
subject.all.all? { |order| order.is_a?(EcwidApi::Order) }.should be_true
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
describe "#find" do
|
22
|
-
it "is an `EcwidApi::Order`" do
|
23
|
-
subject.find(35).is_a?(EcwidApi::Order).should be_true
|
24
|
-
end
|
25
|
-
|
26
|
-
it "is nil when not found" do
|
27
|
-
subject.find(404).should be_nil
|
28
|
-
end
|
29
|
-
end
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe EcwidApi::Api::Orders, faraday: true do
|
4
|
+
subject { client.orders }
|
5
|
+
|
6
|
+
describe "#all" do
|
7
|
+
it "passes the parameters to the client" do
|
8
|
+
expect(client).to receive(:get).with("orders", hash_including(from_date: '1982-05-17'))
|
9
|
+
subject.all(from_date: '1982-05-17')
|
10
|
+
end
|
11
|
+
|
12
|
+
it "gets the proper response (see fixtures)" do
|
13
|
+
subject.all.count.should == 2
|
14
|
+
end
|
15
|
+
|
16
|
+
it "gets EcwidApi::Order types" do
|
17
|
+
subject.all.all? { |order| order.is_a?(EcwidApi::Order) }.should be_true
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "#find" do
|
22
|
+
it "is an `EcwidApi::Order`" do
|
23
|
+
subject.find(35).is_a?(EcwidApi::Order).should be_true
|
24
|
+
end
|
25
|
+
|
26
|
+
it "is nil when not found" do
|
27
|
+
subject.find(404).should be_nil
|
28
|
+
end
|
29
|
+
end
|
30
30
|
end
|
data/spec/api/products_spec.rb
CHANGED
File without changes
|
data/spec/category_spec.rb
CHANGED
@@ -1,34 +1,34 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe EcwidApi::Category, faraday: true do
|
4
|
-
subject { EcwidApi::Category.new({"id" => 123, "parentId" => 456}, client: client) }
|
5
|
-
|
6
|
-
describe "#sub_categories" do
|
7
|
-
it "sends the request to the CategoryApi" do
|
8
|
-
expect(client.categories).to receive(:all).with(parent: 123)
|
9
|
-
subject.sub_categories
|
10
|
-
end
|
11
|
-
|
12
|
-
it "is memoized" do
|
13
|
-
subject.sub_categories
|
14
|
-
expect(client.categories).to_not receive(:all)
|
15
|
-
subject.sub_categories
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
describe "#parent" do
|
20
|
-
it "sends the request for the parent to the CategoryApi" do
|
21
|
-
expect(client.categories).to receive(:find).with(456)
|
22
|
-
subject.parent
|
23
|
-
end
|
24
|
-
|
25
|
-
context "without a parent" do
|
26
|
-
subject { EcwidApi::Category.new({"id" => 123}) }
|
27
|
-
|
28
|
-
it "returns nil" do
|
29
|
-
expect(client.categories).to_not receive(:find)
|
30
|
-
subject.parent.should be_nil
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe EcwidApi::Category, faraday: true do
|
4
|
+
subject { EcwidApi::Category.new({"id" => 123, "parentId" => 456}, client: client) }
|
5
|
+
|
6
|
+
describe "#sub_categories" do
|
7
|
+
it "sends the request to the CategoryApi" do
|
8
|
+
expect(client.categories).to receive(:all).with(parent: 123)
|
9
|
+
subject.sub_categories
|
10
|
+
end
|
11
|
+
|
12
|
+
it "is memoized" do
|
13
|
+
subject.sub_categories
|
14
|
+
expect(client.categories).to_not receive(:all)
|
15
|
+
subject.sub_categories
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "#parent" do
|
20
|
+
it "sends the request for the parent to the CategoryApi" do
|
21
|
+
expect(client.categories).to receive(:find).with(456)
|
22
|
+
subject.parent
|
23
|
+
end
|
24
|
+
|
25
|
+
context "without a parent" do
|
26
|
+
subject { EcwidApi::Category.new({"id" => 123}) }
|
27
|
+
|
28
|
+
it "returns nil" do
|
29
|
+
expect(client.categories).to_not receive(:find)
|
30
|
+
subject.parent.should be_nil
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
34
|
end
|
data/spec/client_spec.rb
CHANGED
@@ -1,21 +1,21 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe EcwidApi::Client do
|
4
|
-
subject { client }
|
5
|
-
|
6
|
-
describe "#store_url" do
|
7
|
-
its(:store_url) { "http://app.ecwid.com/api/v3/12345" }
|
8
|
-
end
|
9
|
-
|
10
|
-
describe "#get", faraday: true do
|
11
|
-
it "delegates to the Faraday connection" do
|
12
|
-
expect(subject.send(:connection)).to receive(:get).with("categories", parent: 1)
|
13
|
-
|
14
|
-
subject.get "categories", parent: 1
|
15
|
-
end
|
16
|
-
|
17
|
-
it "returns a Faraday::Response" do
|
18
|
-
subject.get("categories", parent: 1).is_a?(Faraday::Response).should be_true
|
19
|
-
end
|
20
|
-
end
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe EcwidApi::Client do
|
4
|
+
subject { client }
|
5
|
+
|
6
|
+
describe "#store_url" do
|
7
|
+
its(:store_url) { "http://app.ecwid.com/api/v3/12345" }
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "#get", faraday: true do
|
11
|
+
it "delegates to the Faraday connection" do
|
12
|
+
expect(subject.send(:connection)).to receive(:get).with("categories", parent: 1)
|
13
|
+
|
14
|
+
subject.get "categories", parent: 1
|
15
|
+
end
|
16
|
+
|
17
|
+
it "returns a Faraday::Response" do
|
18
|
+
subject.get("categories", parent: 1).is_a?(Faraday::Response).should be_true
|
19
|
+
end
|
20
|
+
end
|
21
21
|
end
|
data/spec/entity_spec.rb
CHANGED
File without changes
|
File without changes
|
data/spec/fixtures/category.json
CHANGED
File without changes
|
data/spec/fixtures/order.json
CHANGED
File without changes
|
data/spec/fixtures/orders.json
CHANGED
File without changes
|
data/spec/fixtures/products.json
CHANGED
File without changes
|
data/spec/helpers/client.rb
CHANGED
@@ -1,32 +1,32 @@
|
|
1
|
-
module Helpers
|
2
|
-
module Client
|
3
|
-
def client
|
4
|
-
@client ||= EcwidApi::Client.new(12345, "access_token").tap do |client|
|
5
|
-
allow(client).to receive(:connection).and_return(faraday)
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
def fixtures
|
10
|
-
%w(categories category orders products)
|
11
|
-
end
|
12
|
-
|
13
|
-
def faraday_stubs
|
14
|
-
::Faraday::Adapter::Test::Stubs.new do |stub|
|
15
|
-
fixtures.each do |fixture|
|
16
|
-
stub.get(fixture) { [ 200, {"Content-Type" => "application/json"}, File.read("spec/fixtures/#{fixture}.json") ] }
|
17
|
-
end
|
18
|
-
stub.get("/categories/5") { [200, {"Content-Type" => "application/json"}, File.read("spec/fixtures/category.json") ] }
|
19
|
-
stub.get("/orders/35") { [200, {"Content-Type" => "application/json"}, File.read("spec/fixtures/order.json") ] }
|
20
|
-
stub.get("/orders/404") { [404, {"Content-Type" => "application/json"}, nil ] }
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
# Public: Returns a test Faraday::Connection
|
25
|
-
def faraday
|
26
|
-
::Faraday.new do |builder|
|
27
|
-
builder.response :json, content_type: /\bjson$/
|
28
|
-
builder.adapter :test, faraday_stubs
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
1
|
+
module Helpers
|
2
|
+
module Client
|
3
|
+
def client
|
4
|
+
@client ||= EcwidApi::Client.new(12345, "access_token").tap do |client|
|
5
|
+
allow(client).to receive(:connection).and_return(faraday)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def fixtures
|
10
|
+
%w(categories category orders products)
|
11
|
+
end
|
12
|
+
|
13
|
+
def faraday_stubs
|
14
|
+
::Faraday::Adapter::Test::Stubs.new do |stub|
|
15
|
+
fixtures.each do |fixture|
|
16
|
+
stub.get(fixture) { [ 200, {"Content-Type" => "application/json"}, File.read("spec/fixtures/#{fixture}.json") ] }
|
17
|
+
end
|
18
|
+
stub.get("/categories/5") { [200, {"Content-Type" => "application/json"}, File.read("spec/fixtures/category.json") ] }
|
19
|
+
stub.get("/orders/35") { [200, {"Content-Type" => "application/json"}, File.read("spec/fixtures/order.json") ] }
|
20
|
+
stub.get("/orders/404") { [404, {"Content-Type" => "application/json"}, nil ] }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Public: Returns a test Faraday::Connection
|
25
|
+
def faraday
|
26
|
+
::Faraday.new do |builder|
|
27
|
+
builder.response :json, content_type: /\bjson$/
|
28
|
+
builder.adapter :test, faraday_stubs
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
32
|
end
|
data/spec/oauth_spec.rb
CHANGED
@@ -1,40 +1,40 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe EcwidApi::OAuth do
|
4
|
-
subject do
|
5
|
-
EcwidApi::OAuth.new do |config|
|
6
|
-
config.client_id = "client_id"
|
7
|
-
config.client_secret = "client_secret"
|
8
|
-
config.scope = "scope"
|
9
|
-
config.redirect_uri = "https://example.com/oauth"
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
its(:oauth_url) { should == "https://my.ecwid.com/api/oauth/authorize?client_id=client_id&scope=scope&response_type=code&redirect_uri=https%3A%2F%2Fexample.com%2Foauth" }
|
14
|
-
|
15
|
-
describe "#access_token(code)" do
|
16
|
-
let(:response) do
|
17
|
-
double("response").tap do |response|
|
18
|
-
allow(response).to receive(:success?).and_return(true)
|
19
|
-
allow(response).to receive(:body).and_return(access_token: "the_token", store_id: "12345")
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
before(:each) do
|
24
|
-
allow(subject.send(:connection)).to receive(:post).with("/api/oauth/token", hash_including(code: "code")).and_return(response)
|
25
|
-
end
|
26
|
-
|
27
|
-
it "sends a request to the API for an access_token" do
|
28
|
-
expect(subject.send(:connection)).to receive(:post).with("/api/oauth/token", hash_including(code: "code")).and_return(response)
|
29
|
-
subject.access_token("code")
|
30
|
-
end
|
31
|
-
|
32
|
-
it "returns an object that has the access_token" do
|
33
|
-
subject.access_token("code").access_token.should == "the_token"
|
34
|
-
end
|
35
|
-
|
36
|
-
it "returns an object that has the store_id" do
|
37
|
-
subject.access_token("code").store_id.should == "12345"
|
38
|
-
end
|
39
|
-
end
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe EcwidApi::OAuth do
|
4
|
+
subject do
|
5
|
+
EcwidApi::OAuth.new do |config|
|
6
|
+
config.client_id = "client_id"
|
7
|
+
config.client_secret = "client_secret"
|
8
|
+
config.scope = "scope"
|
9
|
+
config.redirect_uri = "https://example.com/oauth"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
its(:oauth_url) { should == "https://my.ecwid.com/api/oauth/authorize?client_id=client_id&scope=scope&response_type=code&redirect_uri=https%3A%2F%2Fexample.com%2Foauth" }
|
14
|
+
|
15
|
+
describe "#access_token(code)" do
|
16
|
+
let(:response) do
|
17
|
+
double("response").tap do |response|
|
18
|
+
allow(response).to receive(:success?).and_return(true)
|
19
|
+
allow(response).to receive(:body).and_return(access_token: "the_token", store_id: "12345")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
before(:each) do
|
24
|
+
allow(subject.send(:connection)).to receive(:post).with("/api/oauth/token", hash_including(code: "code")).and_return(response)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "sends a request to the API for an access_token" do
|
28
|
+
expect(subject.send(:connection)).to receive(:post).with("/api/oauth/token", hash_including(code: "code")).and_return(response)
|
29
|
+
subject.access_token("code")
|
30
|
+
end
|
31
|
+
|
32
|
+
it "returns an object that has the access_token" do
|
33
|
+
subject.access_token("code").access_token.should == "the_token"
|
34
|
+
end
|
35
|
+
|
36
|
+
it "returns an object that has the store_id" do
|
37
|
+
subject.access_token("code").store_id.should == "12345"
|
38
|
+
end
|
39
|
+
end
|
40
40
|
end
|