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.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -0
  3. data/.rspec +0 -0
  4. data/.travis.yml +0 -0
  5. data/Gemfile +0 -2
  6. data/LICENSE.txt +0 -0
  7. data/README.md +228 -228
  8. data/Rakefile +0 -0
  9. data/ecwid_api.gemspec +4 -4
  10. data/lib/ecwid_api.rb +25 -25
  11. data/lib/ecwid_api/api.rb +8 -30
  12. data/lib/ecwid_api/api/base.rb +17 -16
  13. data/lib/ecwid_api/api/categories.rb +55 -56
  14. data/lib/ecwid_api/api/orders.rb +36 -36
  15. data/lib/ecwid_api/api/product_combinations.rb +2 -5
  16. data/lib/ecwid_api/api/products.rb +61 -63
  17. data/lib/ecwid_api/category.rb +1 -7
  18. data/lib/ecwid_api/client.rb +99 -65
  19. data/lib/ecwid_api/entity.rb +4 -6
  20. data/lib/ecwid_api/error.rb +12 -12
  21. data/lib/ecwid_api/o_auth.rb +105 -105
  22. data/lib/ecwid_api/order.rb +0 -0
  23. data/lib/ecwid_api/order_item.rb +0 -0
  24. data/lib/ecwid_api/paged_ecwid_response.rb +0 -0
  25. data/lib/ecwid_api/paged_enumerator.rb +0 -0
  26. data/lib/ecwid_api/person.rb +0 -0
  27. data/lib/ecwid_api/product.rb +3 -15
  28. data/lib/ecwid_api/product_combination.rb +1 -5
  29. data/lib/ecwid_api/version.rb +1 -1
  30. data/lib/ext/string.rb +12 -12
  31. data/spec/api/categories_spec.rb +30 -30
  32. data/spec/api/orders_spec.rb +29 -29
  33. data/spec/api/products_spec.rb +0 -0
  34. data/spec/category_spec.rb +33 -33
  35. data/spec/client_spec.rb +20 -20
  36. data/spec/entity_spec.rb +0 -0
  37. data/spec/fixtures/categories.json +0 -0
  38. data/spec/fixtures/category.json +0 -0
  39. data/spec/fixtures/order.json +0 -0
  40. data/spec/fixtures/orders.json +0 -0
  41. data/spec/fixtures/products.json +0 -0
  42. data/spec/helpers/client.rb +31 -31
  43. data/spec/oauth_spec.rb +39 -39
  44. data/spec/order_item_spec.rb +11 -11
  45. data/spec/order_spec.rb +0 -0
  46. data/spec/paged_enumerator_spec.rb +0 -0
  47. data/spec/spec_helper.rb +24 -24
  48. metadata +26 -34
data/Rakefile CHANGED
File without changes
@@ -9,7 +9,8 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["David Biehl"]
10
10
  spec.email = ["me@davidbiehl.com"]
11
11
  spec.summary = %q{A client for the Ecwid REST API}
12
- spec.homepage = ""
12
+ spec.description = %q{A client for the Ecwid REST API in Ruby}
13
+ spec.homepage = "https://github.com/davidbiehl/ecwid_api"
13
14
  spec.license = "MIT"
14
15
 
15
16
  spec.files = `git ls-files -z`.split("\x0")
@@ -18,9 +19,8 @@ Gem::Specification.new do |spec|
18
19
  spec.require_paths = ["lib"]
19
20
 
20
21
  spec.add_development_dependency "bundler", "~> 1.5"
21
- spec.add_development_dependency "rake"
22
- spec.add_development_dependency "rspec", "~> 2.14.1"
23
- spec.add_development_dependency "pry"
22
+ spec.add_development_dependency "rake", "~> 0"
23
+ spec.add_development_dependency "rspec", "~> 2.14", ">= 2.14.1"
24
24
 
25
25
  spec.add_dependency "faraday", "~> 0.9.0"
26
26
  spec.add_dependency "faraday_middleware", "~> 0.9.1"
@@ -1,25 +1,25 @@
1
- require "ecwid_api/version"
2
- require "ext/string"
3
- require 'faraday'
4
- require 'faraday_middleware'
5
-
6
- require_relative "ecwid_api/error"
7
-
8
- # Public: This is the main namespace for the EcwidApi. It can be used to store
9
- # the default client.
10
- #
11
- module EcwidApi
12
- autoload :OAuth, "ecwid_api/o_auth"
13
- autoload :Client, "ecwid_api/client"
14
- autoload :ResponseError, "ecwid_api/error"
15
- autoload :Entity, "ecwid_api/entity"
16
- autoload :Api, "ecwid_api/api"
17
-
18
- autoload :Category, "ecwid_api/category"
19
- autoload :Order, "ecwid_api/order"
20
- autoload :OrderItem, "ecwid_api/order_item"
21
- autoload :Person, "ecwid_api/person"
22
- autoload :ProductCombination, "ecwid_api/product_combination"
23
-
24
- autoload :Product, "ecwid_api/product"
25
- end
1
+ require "ecwid_api/version"
2
+ require "ext/string"
3
+ require 'faraday'
4
+ require 'faraday_middleware'
5
+
6
+ require_relative "ecwid_api/error"
7
+
8
+ # Public: This is the main namespace for the EcwidApi. It can be used to store
9
+ # the default client.
10
+ #
11
+ module EcwidApi
12
+ require_relative "ecwid_api/o_auth"
13
+ require_relative "ecwid_api/client"
14
+ require_relative "ecwid_api/error"
15
+ require_relative "ecwid_api/api"
16
+ require_relative "ecwid_api/entity"
17
+
18
+ require_relative "ecwid_api/category"
19
+ require_relative "ecwid_api/order"
20
+ require_relative "ecwid_api/order_item"
21
+ require_relative "ecwid_api/person"
22
+ require_relative "ecwid_api/product_combination"
23
+
24
+ require_relative "ecwid_api/product"
25
+ end
@@ -1,31 +1,9 @@
1
- module EcwidApi
2
- # Internal: A base class for common API functionality
3
- module Api
4
- autoload :Base, "ecwid_api/api/base"
5
- autoload :Orders, "ecwid_api/api/orders"
6
- autoload :Products, "ecwid_api/api/products"
7
- autoload :Categories, "ecwid_api/api/categories"
8
- autoload :ProductCombinations, "ecwid_api/api/product_combinations"
9
-
10
- # Private: Gets the Client
11
- attr_reader :client
12
- private :client
13
-
14
- # Private: Raises an Error if a request failed, otherwise it will
15
- # yield the block
16
- #
17
- # response - a Faraday::Response object
18
- #
19
- # Yield if the response was successful
20
- #
21
- # Raises an error with the status code and reason if the response failed
22
- #
23
- def raise_on_failure(response)
24
- if response.success?
25
- yield(response) if block_given?
26
- else
27
- raise ResponseError.new(response)
28
- end
29
- end
30
- end
1
+ module EcwidApi
2
+ module Api
3
+ require_relative "api/base"
4
+ require_relative "api/orders"
5
+ require_relative "api/products"
6
+ require_relative "api/categories"
7
+ require_relative "api/product_combinations"
8
+ end
31
9
  end
@@ -1,17 +1,18 @@
1
- module EcwidApi
2
- module Api
3
- # Internal: A base class for common API functionality
4
- class Base
5
- include Api
6
-
7
- # Public: Initializes a new EcwidApi::CategoryApi
8
- #
9
- # client - The EcwidApi::Client to use with the API
10
- #
11
- def initialize(client)
12
- @client = client
13
- raise Error.new("The client cannot be nil") unless client
14
- end
15
- end
16
- end
1
+ module EcwidApi
2
+ module Api
3
+ # Internal: A base class for common API functionality
4
+ class Base
5
+ attr_reader :client
6
+ private :client
7
+
8
+ # Public: Initializes a new EcwidApi::CategoryApi
9
+ #
10
+ # client - The EcwidApi::Client to use with the API
11
+ #
12
+ def initialize(client)
13
+ @client = client
14
+ raise Error.new("The client cannot be nil") unless client
15
+ end
16
+ end
17
+ end
17
18
  end
@@ -1,57 +1,56 @@
1
- require_relative "../paged_ecwid_response"
2
-
3
- module EcwidApi
4
- module Api
5
- class Categories < Base
6
- # Public: Returns all of the sub-categories for a given category
7
- #
8
- # See: http://kb.ecwid.com/w/page/25285101/Product%20API#RESTAPIMethodcategories
9
- #
10
- # parent - The Category ID of the parent category. If the parent is 0 then
11
- # a list of the root categories will be returned. If the parent is
12
- # nil, then all of the categories will be returned
13
- #
14
- # Returns an array of EcwidApi::Category objects
15
- def all(params = {})
16
- PagedEcwidResponse.new(client, "categories", params) do |category_hash|
17
- Category.new(category_hash, client: client)
18
- end.sort_by(&:order_by)
19
- end
20
-
21
- # Public: Returns an Array of the root level EcwidApi::Category objects
22
- def root(params = {})
23
- all(params.merge(parent: 0))
24
- end
25
-
26
- # Public: Returns a single EcwidApi::Category
27
- #
28
- # See: http://kb.ecwid.com/w/page/25285101/Product%20API#RESTAPIMethodcategory
29
- #
30
- # category_id - A Category ID to get
31
- #
32
- # Returns an EcwidApi::Category, or nil if it can't be found
33
- def find(id)
34
- response = client.get("categories/#{id}")
35
-
36
- if response.success?
37
- Category.new(response.body, client: client)
38
- else
39
- nil
40
- end
41
- rescue Zlib::BufError
42
- nil
43
- end
44
-
45
- # Public: Creates a new Category
46
- #
47
- # params - a Hash of API keys and their corresponding values
48
- #
49
- # Returns a new Category entity
50
- def create(params)
51
- response = client.post("categories", params)
52
-
53
- raise_on_failure(response) { |response| find(response.body["id"]) }
54
- end
55
- end
56
- end
1
+ require_relative "../paged_ecwid_response"
2
+
3
+ module EcwidApi
4
+ module Api
5
+ class Categories < Base
6
+ # Public: Returns all of the sub-categories for a given category
7
+ #
8
+ # See: http://kb.ecwid.com/w/page/25285101/Product%20API#RESTAPIMethodcategories
9
+ #
10
+ # parent - The Category ID of the parent category. If the parent is 0 then
11
+ # a list of the root categories will be returned. If the parent is
12
+ # nil, then all of the categories will be returned
13
+ #
14
+ # Returns an array of EcwidApi::Category objects
15
+ def all(params = {})
16
+ PagedEcwidResponse.new(client, "categories", params) do |category_hash|
17
+ Category.new(category_hash, client: client)
18
+ end.sort_by(&:order_by)
19
+ end
20
+
21
+ # Public: Returns an Array of the root level EcwidApi::Category objects
22
+ def root(params = {})
23
+ all(params.merge(parent: 0))
24
+ end
25
+
26
+ # Public: Returns a single EcwidApi::Category
27
+ #
28
+ # See: http://kb.ecwid.com/w/page/25285101/Product%20API#RESTAPIMethodcategory
29
+ #
30
+ # category_id - A Category ID to get
31
+ #
32
+ # Returns an EcwidApi::Category, or nil if it can't be found
33
+ def find(id)
34
+ response = client.get("categories/#{id}")
35
+
36
+ if response.success?
37
+ Category.new(response.body, client: client)
38
+ else
39
+ nil
40
+ end
41
+ rescue Zlib::BufError
42
+ nil
43
+ end
44
+
45
+ # Public: Creates a new Category
46
+ #
47
+ # params - a Hash of API keys and their corresponding values
48
+ #
49
+ # Returns a new Category entity
50
+ def create(params)
51
+ response = client.post("categories", params)
52
+ find(response.body["id"])
53
+ end
54
+ end
55
+ end
57
56
  end
@@ -1,36 +1,36 @@
1
- require_relative "../paged_ecwid_response"
2
-
3
- module EcwidApi
4
- module Api
5
- # Public: This is the Ecwid API for Orders. It abstracts the end-points
6
- # of the Ecwid API that deal with orders.
7
- class Orders < Base
8
- # Public: Gets Orders from the Ecwid API
9
- #
10
- # params - optional parameters that can be used to filter the request.
11
- # For a list of params, please refer to the API documentation:
12
- # http://kb.ecwid.com/w/page/43697230/Order%20API
13
- # Note that the limit and offset parameters will be overridden
14
- # since all orders will be returned and enumerated
15
- #
16
- # Returns a PagedEnumerator of `EcwidApi::Order` objects
17
- def all(params = {})
18
- PagedEcwidResponse.new(client, "orders", params) do |order_hash|
19
- Order.new(order_hash, client: client)
20
- end
21
- end
22
-
23
- # Public: Finds a an Order given an Ecwid order_number
24
- #
25
- # order_number - an Integer that is the Ecwid Order number
26
- #
27
- # Returns an EcwidApi::Order if found, nil if not
28
- def find(order_number)
29
- response = client.get("orders/#{order_number}")
30
- if response.success?
31
- Order.new(response.body, client: client)
32
- end
33
- end
34
- end
35
- end
36
- end
1
+ require_relative "../paged_ecwid_response"
2
+
3
+ module EcwidApi
4
+ module Api
5
+ # Public: This is the Ecwid API for Orders. It abstracts the end-points
6
+ # of the Ecwid API that deal with orders.
7
+ class Orders < Base
8
+ # Public: Gets Orders from the Ecwid API
9
+ #
10
+ # params - optional parameters that can be used to filter the request.
11
+ # For a list of params, please refer to the API documentation:
12
+ # http://kb.ecwid.com/w/page/43697230/Order%20API
13
+ # Note that the limit and offset parameters will be overridden
14
+ # since all orders will be returned and enumerated
15
+ #
16
+ # Returns a PagedEnumerator of `EcwidApi::Order` objects
17
+ def all(params = {})
18
+ PagedEcwidResponse.new(client, "orders", params) do |order_hash|
19
+ Order.new(order_hash, client: client)
20
+ end
21
+ end
22
+
23
+ # Public: Finds a an Order given an Ecwid order_number
24
+ #
25
+ # order_number - an Integer that is the Ecwid Order number
26
+ #
27
+ # Returns an EcwidApi::Order if found, nil if not
28
+ def find(order_number)
29
+ response = client.get("orders/#{order_number}")
30
+ if response.success?
31
+ Order.new(response.body, client: client)
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -37,14 +37,11 @@ module EcwidApi
37
37
 
38
38
  def create(params)
39
39
  response = client.post("products/#{product.id}/combinations", params)
40
-
41
- raise_on_failure(response) { find(response.body["id"]) }
40
+ find(response.body["id"])
42
41
  end
43
42
 
44
43
  def delete_all!
45
- client.delete("products/#{product.id}/combinations").tap do |response|
46
- raise_on_failure(response)
47
- end
44
+ client.delete("products/#{product.id}/combinations")
48
45
  end
49
46
  end
50
47
  end
@@ -1,64 +1,62 @@
1
- require_relative "../paged_ecwid_response"
2
-
3
- module EcwidApi
4
- module Api
5
- class Products < Base
6
- # Public: Get all of the Product objects for the Ecwid store
7
- #
8
- # Returns an Array of Product objects
9
- def all(params = {})
10
- PagedEcwidResponse.new(client, "products", params) do |product_hash|
11
- Product.new(product_hash, client: client)
12
- end
13
- end
14
-
15
- # Public: Finds a single product by product ID
16
- #
17
- # id - an Ecwid product ID
18
- #
19
- # Returns a Product object, or nil if one can't be found
20
- def find(id)
21
- response = client.get("products/#{id}")
22
- if response.success?
23
- Product.new(response.body, client: client)
24
- end
25
- end
26
-
27
- # Public: Finds a single Product by SKU
28
- #
29
- # sku - a SKU of a product
30
- #
31
- # Returns a Product object, or nil if one can't be found
32
- def find_by_sku(sku)
33
- all(keyword: sku).find { |product| product[:sku] == sku }
34
- end
35
-
36
- # Public: Creates a new Product
37
- #
38
- # params - a Hash
39
- #
40
- # Raises an Error if there is a problem
41
- #
42
- # Returns a Product object
43
- def create(params)
44
- response = client.post("products", params)
45
-
46
- raise_on_failure(response) {|response| find(response.body["id"]) }
47
- end
48
-
49
- # Public: Updates an existing Product
50
- #
51
- # id - the Ecwid product ID
52
- # params - a Hash
53
- #
54
- # Raises an Error if there is a problem
55
- #
56
- # Returns a Product object
57
- def update(id, params)
58
- response = client.put("products/#{id}", params)
59
-
60
- raise_on_failure(response) { find(id) }
61
- end
62
- end
63
- end
1
+ require_relative "../paged_ecwid_response"
2
+
3
+ module EcwidApi
4
+ module Api
5
+ class Products < Base
6
+ # Public: Get all of the Product objects for the Ecwid store
7
+ #
8
+ # Returns an Array of Product objects
9
+ def all(params = {})
10
+ PagedEcwidResponse.new(client, "products", params) do |product_hash|
11
+ Product.new(product_hash, client: client)
12
+ end
13
+ end
14
+
15
+ # Public: Finds a single product by product ID
16
+ #
17
+ # id - an Ecwid product ID
18
+ #
19
+ # Returns a Product object, or nil if one can't be found
20
+ def find(id)
21
+ response = client.get("products/#{id}")
22
+ if response.success?
23
+ Product.new(response.body, client: client)
24
+ end
25
+ end
26
+
27
+ # Public: Finds a single Product by SKU
28
+ #
29
+ # sku - a SKU of a product
30
+ #
31
+ # Returns a Product object, or nil if one can't be found
32
+ def find_by_sku(sku)
33
+ all(keyword: sku).find { |product| product[:sku] == sku }
34
+ end
35
+
36
+ # Public: Creates a new Product
37
+ #
38
+ # params - a Hash
39
+ #
40
+ # Raises an Error if there is a problem
41
+ #
42
+ # Returns a Product object
43
+ def create(params)
44
+ response = client.post("products", params)
45
+ find(response.body["id"])
46
+ end
47
+
48
+ # Public: Updates an existing Product
49
+ #
50
+ # id - the Ecwid product ID
51
+ # params - a Hash
52
+ #
53
+ # Raises an Error if there is a problem
54
+ #
55
+ # Returns a Product object
56
+ def update(id, params)
57
+ client.put("products/#{id}", params)
58
+ find(id)
59
+ end
60
+ end
61
+ end
64
62
  end