shopify_api 3.1.6 → 3.1.7

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.
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ == Version 3.1.7
2
+
3
+ * Expose `authors` and `tags` action on Article
4
+
1
5
  == Version 3.1.6
2
6
 
3
7
  * Add LineItem::Property resource
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- shopify_api (3.1.6)
4
+ shopify_api (3.1.7)
5
5
  activeresource (>= 3.0.0)
6
6
  thor (>= 0.14.4)
7
7
 
@@ -4,5 +4,19 @@ module DisablePrefixCheck
4
4
  module ClassMethods
5
5
  def check_prefix_options(options)
6
6
  end
7
+
8
+ # `flexible = true` is hack to allow multiple things through the same AR class
9
+ def conditional_prefix(resource, flexible = false)
10
+ resource_id = "#{resource}_id".to_sym
11
+ resource_type = flexible ? ":#{resource}" : resource.to_s.pluralize
12
+
13
+ init_prefix_explicit resource_type, resource_id
14
+
15
+ define_singleton_method :prefix do |options|
16
+ resource_type = options[resource] if flexible
17
+
18
+ options[resource_id].nil? ? "/admin/" : "/admin/#{resource_type}/#{options[resource_id]}/"
19
+ end
20
+ end
7
21
  end
8
22
  end
@@ -4,14 +4,18 @@ module ShopifyAPI
4
4
  include Metafields
5
5
  include DisablePrefixCheck
6
6
 
7
- self.prefix = "/admin/blogs/:blog_id/"
8
-
9
- def self.prefix(options={})
10
- options[:blog_id].nil? ? "/admin/" : "/admin/blogs/#{options[:blog_id]}/"
11
- end
7
+ conditional_prefix :blog
12
8
 
13
9
  def comments
14
10
  Comment.find(:all, :params => { :article_id => id })
15
11
  end
12
+
13
+ def self.authors(options = {})
14
+ get(:authors, options)
15
+ end
16
+
17
+ def self.tags(options={})
18
+ get(:tags, options)
19
+ end
16
20
  end
17
21
  end
@@ -35,12 +35,9 @@ module ShopifyAPI
35
35
  include DisablePrefixCheck
36
36
 
37
37
  self.primary_key = 'key'
38
- self.prefix = "/admin/themes/:theme_id/"
39
-
40
- def self.prefix(options={})
41
- options[:theme_id].nil? ? "/admin/" : "/admin/themes/#{options[:theme_id]}/"
42
- end
43
-
38
+
39
+ conditional_prefix :theme
40
+
44
41
  def self.element_path(id, prefix_options = {}, query_options = nil) #:nodoc:
45
42
  prefix_options, query_options = split_options(prefix_options) if query_options.nil?
46
43
  "#{prefix(prefix_options)}#{collection_name}.#{format.extension}#{query_string(query_options)}"
@@ -45,6 +45,14 @@ module ShopifyAPI
45
45
  self.site = nil
46
46
  self.headers.delete('X-Shopify-Access-Token')
47
47
  end
48
+
49
+ def init_prefix(resource)
50
+ init_prefix_explicit(resource.to_s.pluralize, "#{resource}_id")
51
+ end
52
+
53
+ def init_prefix_explicit(resource_type, resource_id)
54
+ self.prefix = "/admin/#{resource_type}/:#{resource_id}/"
55
+ end
48
56
  end
49
57
 
50
58
  def persisted?
@@ -2,11 +2,6 @@ module ShopifyAPI
2
2
  class Event < Base
3
3
  include DisablePrefixCheck
4
4
 
5
- self.prefix = "/admin/:resource/:resource_id/"
6
-
7
- # Hack to allow both Shop and other Events in through the same AR class
8
- def self.prefix(options={})
9
- options[:resource].nil? ? "/admin/" : "/admin/#{options[:resource]}/#{options[:resource_id]}/"
10
- end
5
+ conditional_prefix :resource, true
11
6
  end
12
7
  end
@@ -1,6 +1,6 @@
1
1
  module ShopifyAPI
2
2
  class Fulfillment < Base
3
- self.prefix = "/admin/orders/:order_id/"
3
+ init_prefix :order
4
4
 
5
5
  def cancel; load_attributes_from_response(post(:cancel, {}, only_id)); end
6
6
  def complete; load_attributes_from_response(post(:complete, {}, only_id)); end
@@ -1,6 +1,6 @@
1
1
  module ShopifyAPI
2
2
  class Image < Base
3
- self.prefix = "/admin/products/:product_id/"
3
+ init_prefix :product
4
4
 
5
5
  # generate a method for each possible image variant
6
6
  [:pico, :icon, :thumb, :small, :compact, :medium, :large, :grande, :original].each do |m|
@@ -2,13 +2,8 @@ module ShopifyAPI
2
2
  class Metafield < Base
3
3
  include DisablePrefixCheck
4
4
 
5
- self.prefix = "/admin/:resource/:resource_id/"
6
-
7
- # Hack to allow both Shop and other Metafields in through the same AR class
8
- def self.prefix(options={})
9
- options[:resource].nil? ? "/admin/" : "/admin/#{options[:resource]}/#{options[:resource_id]}/"
10
- end
11
-
5
+ conditional_prefix :resource, true
6
+
12
7
  def value
13
8
  return if attributes["value"].nil?
14
9
  attributes["value_type"] == "integer" ? attributes["value"].to_i : attributes["value"]
@@ -1,5 +1,5 @@
1
1
  module ShopifyAPI
2
2
  class Province < Base
3
- self.prefix = "/admin/countries/:country_id/"
3
+ init_prefix :country
4
4
  end
5
5
  end
@@ -1,5 +1,5 @@
1
1
  module ShopifyAPI
2
2
  class Transaction < Base
3
- self.prefix = "/admin/orders/:order_id/"
3
+ init_prefix :order
4
4
  end
5
5
  end
@@ -3,10 +3,6 @@ module ShopifyAPI
3
3
  include Metafields
4
4
  include DisablePrefixCheck
5
5
 
6
- self.prefix = "/admin/products/:product_id/"
7
-
8
- def self.prefix(options={})
9
- options[:product_id].nil? ? "/admin/" : "/admin/products/#{options[:product_id]}/"
10
- end
6
+ conditional_prefix :product
11
7
  end
12
8
  end
@@ -1,3 +1,3 @@
1
1
  module ShopifyAPI
2
- VERSION = "3.1.6"
2
+ VERSION = "3.1.7"
3
3
  end
data/test/article_test.rb CHANGED
@@ -25,4 +25,38 @@ class ArticleTest < Test::Unit::TestCase
25
25
  article = ShopifyAPI::Article.find(6242736, :params => {:blog_id => 1008414260})
26
26
  assert_equal "First Post", article.title
27
27
  end
28
+
29
+ def test_get_authors
30
+ fake "articles/authors", :method => :get, :body => load_fixture('authors')
31
+ authors = ShopifyAPI::Article.authors
32
+ assert_equal "Shopify", authors.first
33
+ assert_equal "development shop", authors.last
34
+ end
35
+
36
+ def test_get_authors_for_blog_id
37
+ fake "blogs/1008414260/articles/authors", :method => :get, :body => load_fixture('authors')
38
+ authors = ShopifyAPI::Article.authors(:blog_id => 1008414260)
39
+ assert_equal 3, authors.length
40
+ end
41
+
42
+ def test_get_tags
43
+ fake "articles/tags", :method => :get, :body => load_fixture('tags')
44
+ tags = ShopifyAPI::Article.tags
45
+ assert_equal "consequuntur", tags.first
46
+ assert_equal "repellendus", tags.last
47
+ end
48
+
49
+ def test_get_tags_for_blog_id
50
+ fake "blogs/1008414260/articles/tags", :method => :get, :body => load_fixture('tags')
51
+ tags = ShopifyAPI::Article.tags(:blog_id => 1008414260)
52
+ assert_equal "consequuntur", tags.first
53
+ assert_equal "repellendus", tags.last
54
+ end
55
+
56
+ def test_get_popular_tags
57
+ fake "articles/tags.json?limit=1&popular=1", :extension => false, :method => :get, :body => load_fixture('tags')
58
+ tags = ShopifyAPI::Article.tags(:popular => 1, :limit => 1)
59
+ assert_equal 3, tags.length
60
+ end
61
+
28
62
  end
@@ -0,0 +1 @@
1
+ {"authors": ["Shopify", "development shop", "development shop"]}
@@ -0,0 +1 @@
1
+ {"tags": ["consequuntur", "cupiditate", "repellendus"]}
@@ -0,0 +1,29 @@
1
+ {
2
+ "transaction": {
3
+ "amount": "409.94",
4
+ "authorization": "authorization-key",
5
+ "created_at": "2005-08-01T11:57:11-04:00",
6
+ "gateway": "bogus",
7
+ "id": 389404469,
8
+ "kind": "authorization",
9
+ "location_id": null,
10
+ "message": null,
11
+ "order_id": 450789469,
12
+ "parent_id": null,
13
+ "status": "success",
14
+ "test": false,
15
+ "user_id": null,
16
+ "device_id": null,
17
+ "receipt": {
18
+ "testcase": true,
19
+ "authorization": "123456"
20
+ },
21
+ "payment_details": {
22
+ "avs_result_code": null,
23
+ "credit_card_bin": null,
24
+ "cvv_result_code": null,
25
+ "credit_card_number": "XXXX-XXXX-XXXX-4242",
26
+ "credit_card_company": "Visa"
27
+ }
28
+ }
29
+ }
@@ -0,0 +1,16 @@
1
+ require 'test_helper'
2
+
3
+ class TransactionTest < Test::Unit::TestCase
4
+ def setup
5
+ fake "orders/450789469/transactions/389404469", :method => :get, :body => load_fixture('transaction')
6
+ end
7
+
8
+ context "Transaction" do
9
+ context "#find" do
10
+ should "find a specific transaction" do
11
+ transaction = ShopifyAPI::Transaction.find(389404469, :params => {:order_id => 450789469})
12
+ assert_equal "409.94", transaction.amount
13
+ end
14
+ end
15
+ end
16
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shopify_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.6
4
+ version: 3.1.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-11-14 00:00:00.000000000 Z
12
+ date: 2013-11-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activeresource
@@ -186,6 +186,7 @@ files:
186
186
  - test/fixtures/articles.json
187
187
  - test/fixtures/asset.json
188
188
  - test/fixtures/assets.json
189
+ - test/fixtures/authors.json
189
190
  - test/fixtures/blog.json
190
191
  - test/fixtures/blogs.json
191
192
  - test/fixtures/carts.json
@@ -197,6 +198,8 @@ files:
197
198
  - test/fixtures/metafields.json
198
199
  - test/fixtures/product.json
199
200
  - test/fixtures/shop.json
201
+ - test/fixtures/tags.json
202
+ - test/fixtures/transaction.json
200
203
  - test/fixtures/variant.json
201
204
  - test/fixtures/variants.json
202
205
  - test/fulfillment_test.rb
@@ -206,6 +209,7 @@ files:
206
209
  - test/session_test.rb
207
210
  - test/shop_test.rb
208
211
  - test/test_helper.rb
212
+ - test/transaction_test.rb
209
213
  - test/variant_test.rb
210
214
  homepage: http://www.shopify.com/partners/apps
211
215
  licenses:
@@ -223,7 +227,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
223
227
  version: '0'
224
228
  segments:
225
229
  - 0
226
- hash: -4375809972843917897
230
+ hash: 355511341296706903
227
231
  required_rubygems_version: !ruby/object:Gem::Requirement
228
232
  none: false
229
233
  requirements:
@@ -232,7 +236,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
232
236
  version: '0'
233
237
  segments:
234
238
  - 0
235
- hash: -4375809972843917897
239
+ hash: 355511341296706903
236
240
  requirements: []
237
241
  rubyforge_project:
238
242
  rubygems_version: 1.8.23