paid 1.1.2 → 1.1.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 007133db142a723b741aba2db81ae24f56c5433f
4
- data.tar.gz: c49fef2d18f231587ead9a70162ddbbe01733a5d
3
+ metadata.gz: 39fa64093ad32cfdbb76949c4a9ee62efaab5c19
4
+ data.tar.gz: e9c939f3baf834a1ecf425cbe4aeb581702dc2fc
5
5
  SHA512:
6
- metadata.gz: 55434989b489d0586f186f8b182624b85e7165e3d00d0dfb23d29c16353cc92e21837021cd804656b893c319a0f2ab5fbc04af70e1bd12b0f9d3b2ead80db1e1
7
- data.tar.gz: 57db5782c1887d19323a1230e694f9db1b8167cad168516f543fe292626ba3cd5b0c89f840eeb771f43301f310cf072df8ababb7bc709b7484d6789c8552ac1f
6
+ metadata.gz: 99addad5ed759fa3a4577724d0d50605e2af910d54af3e8d4c86e2b9c56d78d97e92457da029d894d32726a7e5abb9072f6f06a3bc99b3b81fe37d0d2b7725af
7
+ data.tar.gz: 509f1b0d03ae37f78ea35f51a9f910fd5a83e82ec2f1f932f77398f203125e755ed4b38ae2e3c6c938896584a07f612e85c0938c04300003863f77fed5dfeecb
@@ -1,8 +1,6 @@
1
1
  language: ruby
2
2
 
3
3
  rvm:
4
- - 1.8.7
5
- - 1.9.2
6
4
  - 1.9.3
7
5
  - 2.0.0
8
6
  - 2.1
data/README.md CHANGED
@@ -19,8 +19,9 @@ gem build paid.gemspec
19
19
 
20
20
  ## Requirements
21
21
 
22
- * Ruby 1.8.7 or above. (Ruby 1.8.6 may work if you load
23
- ActiveSupport.) For Ruby versions before 1.9.2, you'll need to add this to your Gemfile:
22
+ * Ruby 1.9.3 or above.
23
+
24
+ Ruby 1.8.6 may work if you load ActiveSupport. 1.8.7 may work if you add this to your Gemfile:
24
25
 
25
26
  ```ruby
26
27
  if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('1.9.2')
@@ -28,6 +29,8 @@ if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('1.9.2')
28
29
  end
29
30
  ```
30
31
 
32
+ 1.9.2 should work without any changes, but we don't currently test against it or any versions before 1.9.3.
33
+
31
34
  * rest-client, json
32
35
 
33
36
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.2
1
+ 1.1.3
@@ -37,10 +37,15 @@ require 'paid/event'
37
37
  require 'paid/event_data'
38
38
  require 'paid/invoice'
39
39
  require 'paid/plan'
40
+ require 'paid/plan_item'
41
+ require 'paid/order'
42
+ require 'paid/order_item'
43
+ require 'paid/product'
40
44
  require 'paid/subscription'
41
45
  require 'paid/transaction'
42
46
  require 'paid/refund_list'
43
47
 
48
+
44
49
  module Paid
45
50
  @api_key = nil
46
51
 
@@ -60,6 +60,12 @@ module Paid
60
60
  end
61
61
 
62
62
  def self.add_api_attribute(name)
63
+ if method_defined?(name)
64
+ remove_method(name)
65
+ end
66
+ if method_defined?("#{name}=")
67
+ remove_method("#{name}=")
68
+ end
63
69
  attr_accessor name.to_sym
64
70
  @api_attributes[name.to_sym] = {}
65
71
  end
@@ -0,0 +1,53 @@
1
+ module Paid
2
+ class Order < APIResource
3
+ attr_reader :id
4
+ attr_reader :object
5
+ attr_reader :amount
6
+ attr_accessor :charge_now
7
+ attr_accessor :customer
8
+ attr_accessor :metadata
9
+ attr_accessor :subscription
10
+
11
+
12
+ def self.all(params={}, headers={})
13
+ method = APIMethod.new(:get, "/orders", params, headers, self)
14
+ APIList.new(self, method.execute, method)
15
+ end
16
+
17
+ def self.retrieve(id, params={}, headers={})
18
+ params = ParamsBuilder.merge(params, {
19
+ :id => id
20
+ })
21
+ method = APIMethod.new(:get, "/orders/:id", params, headers, self)
22
+ self.new(method.execute, method)
23
+ end
24
+
25
+ def self.create(params={}, headers={})
26
+ method = APIMethod.new(:post, "/orders", params, headers, self)
27
+ self.new(method.execute, method)
28
+ end
29
+
30
+ def refresh(params={}, headers={})
31
+ method = APIMethod.new(:get, "/orders/:id", params, headers, self)
32
+ self.refresh_from(method.execute, method)
33
+ end
34
+
35
+ def save(params={}, headers={})
36
+ params = ParamsBuilder.merge(params, changed_api_attributes)
37
+ method = APIMethod.new(:put, "/orders/:id", params, headers, self)
38
+ self.refresh_from(method.execute, method)
39
+ end
40
+
41
+
42
+ APIResource.register_api_subclass(self, "order")
43
+ @api_attributes = {
44
+ :id => { :readonly => true },
45
+ :object => { :readonly => true },
46
+ :amount => { :readonly => true },
47
+ :charge_now => nil,
48
+ :customer => nil,
49
+ :metadata => nil,
50
+ :subscription => nil
51
+ }
52
+ end
53
+ end
@@ -0,0 +1,54 @@
1
+ module Paid
2
+ class OrderItem < APIResource
3
+ attr_reader :id
4
+ attr_reader :object
5
+ attr_accessor :order
6
+ attr_accessor :plan_item
7
+ attr_accessor :product
8
+ attr_accessor :service_ends_on
9
+ attr_accessor :service_starts_on
10
+ attr_accessor :transaction
11
+
12
+ def self.all(params={}, headers={})
13
+ method = APIMethod.new(:get, "/order_items", params, headers, self)
14
+ APIList.new(self, method.execute, method)
15
+ end
16
+
17
+ def self.retrieve(id, params={}, headers={})
18
+ params = ParamsBuilder.merge(params, {
19
+ :id => id
20
+ })
21
+ method = APIMethod.new(:get, "/order_items/:id", params, headers, self)
22
+ self.new(method.execute, method)
23
+ end
24
+
25
+ def self.create(params={}, headers={})
26
+ method = APIMethod.new(:post, "/order_items", params, headers, self)
27
+ self.new(method.execute, method)
28
+ end
29
+
30
+ def refresh(params={}, headers={})
31
+ method = APIMethod.new(:get, "/order_items/:id", params, headers, self)
32
+ self.refresh_from(method.execute, method)
33
+ end
34
+
35
+ def save(params={}, headers={})
36
+ params = ParamsBuilder.merge(params, changed_api_attributes)
37
+ method = APIMethod.new(:put, "/order_items/:id", params, headers, self)
38
+ self.refresh_from(method.execute, method)
39
+ end
40
+
41
+
42
+ APIResource.register_api_subclass(self, "order_item")
43
+ @api_attributes = {
44
+ :id => { :readonly => true },
45
+ :object => { :readonly => true },
46
+ :order => nil,
47
+ :plan_item => nil,
48
+ :product => nil,
49
+ :service_ends_on => nil,
50
+ :service_starts_on => nil,
51
+ :transaction => nil
52
+ }
53
+ end
54
+ end
@@ -3,11 +3,11 @@ module Paid
3
3
  attr_reader :id
4
4
  attr_reader :object
5
5
  attr_reader :created_at
6
+ attr_reader :amount
6
7
  attr_accessor :name
7
8
  attr_accessor :description
8
9
  attr_accessor :interval
9
10
  attr_accessor :interval_count
10
- attr_accessor :amount
11
11
 
12
12
  def self.all(params={}, headers={})
13
13
  method = APIMethod.new(:get, "/plans", params, headers, self)
@@ -37,11 +37,11 @@ module Paid
37
37
  :id => { :readonly => true },
38
38
  :object => { :readonly => true },
39
39
  :created_at => { :readonly => true },
40
+ :amount => { :readonly => true },
40
41
  :name => nil,
41
42
  :description => nil,
42
43
  :interval => nil,
43
- :interval_count => nil,
44
- :amount => nil,
44
+ :interval_count => nil
45
45
  }
46
46
  end
47
47
  end
@@ -0,0 +1,46 @@
1
+ module Paid
2
+ class PlanItem < APIResource
3
+ attr_reader :id
4
+ attr_reader :object
5
+ attr_accessor :plan
6
+ attr_accessor :product
7
+
8
+ def self.all(params={}, headers={})
9
+ method = APIMethod.new(:get, "/plan_items", params, headers, self)
10
+ APIList.new(self, method.execute, method)
11
+ end
12
+
13
+ def self.retrieve(id, params={}, headers={})
14
+ params = ParamsBuilder.merge(params, {
15
+ :id => id
16
+ })
17
+ method = APIMethod.new(:get, "/plan_items/:id", params, headers, self)
18
+ self.new(method.execute, method)
19
+ end
20
+
21
+ def self.create(params={}, headers={})
22
+ method = APIMethod.new(:post, "/plan_items", params, headers, self)
23
+ self.new(method.execute, method)
24
+ end
25
+
26
+ def refresh(params={}, headers={})
27
+ method = APIMethod.new(:get, "/plan_items/:id", params, headers, self)
28
+ self.refresh_from(method.execute, method)
29
+ end
30
+
31
+ def save(params={}, headers={})
32
+ params = ParamsBuilder.merge(params, changed_api_attributes)
33
+ method = APIMethod.new(:put, "/plan_items/:id", params, headers, self)
34
+ self.refresh_from(method.execute, method)
35
+ end
36
+
37
+
38
+ APIResource.register_api_subclass(self, "plan_item")
39
+ @api_attributes = {
40
+ :id => { :readonly => true },
41
+ :object => { :readonly => true },
42
+ :plan => nil,
43
+ :product => nil
44
+ }
45
+ end
46
+ end
@@ -0,0 +1,55 @@
1
+ module Paid
2
+ class Product < APIResource
3
+ attr_reader :id
4
+ attr_reader :object
5
+ attr_accessor :description
6
+ attr_accessor :external_id
7
+ attr_accessor :external_metric_id
8
+ attr_accessor :name
9
+ attr_accessor :transaction_description
10
+ attr_accessor :pricing_structure
11
+
12
+
13
+ def self.all(params={}, headers={})
14
+ method = APIMethod.new(:get, "/products", params, headers, self)
15
+ APIList.new(self, method.execute, method)
16
+ end
17
+
18
+ def self.retrieve(id, params={}, headers={})
19
+ params = ParamsBuilder.merge(params, {
20
+ :id => id
21
+ })
22
+ method = APIMethod.new(:get, "/products/:id", params, headers, self)
23
+ self.new(method.execute, method)
24
+ end
25
+
26
+ def self.create(params={}, headers={})
27
+ method = APIMethod.new(:post, "/products", params, headers, self)
28
+ self.new(method.execute, method)
29
+ end
30
+
31
+ def refresh(params={}, headers={})
32
+ method = APIMethod.new(:get, "/products/:id", params, headers, self)
33
+ self.refresh_from(method.execute, method)
34
+ end
35
+
36
+ def save(params={}, headers={})
37
+ params = ParamsBuilder.merge(params, changed_api_attributes)
38
+ method = APIMethod.new(:put, "/products/:id", params, headers, self)
39
+ self.refresh_from(method.execute, method)
40
+ end
41
+
42
+
43
+ APIResource.register_api_subclass(self, "product")
44
+ @api_attributes = {
45
+ :id => { :readonly => true },
46
+ :object => { :readonly => true },
47
+ :description => nil,
48
+ :external_id => nil,
49
+ :external_metric_id => nil,
50
+ :name => nil,
51
+ :transaction_description => nil,
52
+ :pricing_structure => nil
53
+ }
54
+ end
55
+ end
@@ -90,7 +90,7 @@ module Paid
90
90
  end
91
91
 
92
92
  def self.escape(val)
93
- URI.escape(val.to_s, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
93
+ CGI::escape(val.to_s)
94
94
  end
95
95
 
96
96
  end
@@ -0,0 +1,103 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ module Paid
4
+ class OrderItemTest < Test::Unit::TestCase
5
+ setup do
6
+ @order_item_url = "#{Paid.api_base}/order_items"
7
+ end
8
+
9
+ context 'OrderItem class' do
10
+ should 'be retrieveable' do
11
+ id = "order_item_id"
12
+ @mock.expects(:get).once.with("#{@order_item_url}/#{id}", anything, anything).returns(test_response(test_order_item))
13
+ order_item = Paid::OrderItem.retrieve(id)
14
+ assert(order_item.is_a?(Paid::OrderItem))
15
+ end
16
+
17
+ should 'be createable' do
18
+ @mock.expects(:post).once.with(@order_item_url, anything, test_order_item).returns(test_response(test_order_item))
19
+ order_item = Paid::OrderItem.create(test_order_item)
20
+ assert(order_item.is_a?(Paid::OrderItem))
21
+ assert_equal(test_order_item[:id], order_item.id)
22
+ end
23
+
24
+ should 'be listable' do
25
+ @mock.expects(:get).once.returns(test_response(test_order_item_list))
26
+
27
+ order_items = Paid::OrderItem.all
28
+
29
+ assert(order_items.is_a?(Paid::APIList))
30
+ order_items.each do |order_item|
31
+ assert(order_item.is_a?(Paid::OrderItem))
32
+ end
33
+ end
34
+ end
35
+
36
+ context 'OrderItem instance' do
37
+ should 'be refreshable' do
38
+ @mock.expects(:get).once.with("#{@order_item_url}/#{test_order_item[:id]}", anything, anything).returns(test_response(test_order_item))
39
+ order_item = Paid::OrderItem.new(test_order_item[:id])
40
+ order_item.refresh
41
+ assert_equal(test_order_item[:order], order_item.order)
42
+ end
43
+
44
+ should 'be updateable' do
45
+ order_item = Paid::OrderItem.new(test_order_item)
46
+ order_item.product = "prod_123abc"
47
+
48
+ @mock.expects(:put).once.with do |url, headers, params|
49
+ !params.nil? && url == "#{@order_item_url}/#{order_item.id}"
50
+ end.returns(test_response(test_order_item))
51
+
52
+ # This should update this instance with test_order_item since it was returned
53
+ order_item.save
54
+ assert_equal(test_order_item[:product], order_item.product)
55
+ end
56
+ end
57
+
58
+
59
+ context 'Retrieved Paid::OrderItem instance' do
60
+ setup do
61
+ @order_item = Paid::OrderItem.new(test_order_item)
62
+ end
63
+
64
+ should 'have the id attribute' do
65
+ assert_equal(test_order_item[:id], @order_item.id)
66
+ end
67
+
68
+ should 'have the object attribute' do
69
+ assert_equal(test_order_item[:object], @order_item.object)
70
+ end
71
+
72
+ should 'have the order attribute' do
73
+ assert_equal(test_order_item[:order], @order_item.order)
74
+ end
75
+
76
+ should 'have the plan_item attribute' do
77
+ assert_equal(test_order_item[:plan_item], @order_item.plan_item)
78
+ end
79
+
80
+ should 'have the product attribute' do
81
+ assert_equal(test_order_item[:product], @order_item.product)
82
+ end
83
+
84
+ should 'have the service_ends_on attribute' do
85
+ assert_equal(test_order_item[:service_ends_on], @order_item.service_ends_on)
86
+ end
87
+
88
+ should 'have the service_starts_on attribute' do
89
+ assert_equal(test_order_item[:service_starts_on], @order_item.service_starts_on)
90
+ end
91
+
92
+ should 'have the transaction attribute' do
93
+ assert_equal(test_order_item[:transaction], @order_item.transaction)
94
+ end
95
+ end
96
+
97
+ should 'be registered' do
98
+ assert(APIResource.api_subclasses.include?(Paid::OrderItem))
99
+ assert_equal(Paid::OrderItem, APIResource.api_subclass_fetch("order_item"))
100
+ end
101
+
102
+ end
103
+ end
@@ -0,0 +1,99 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ module Paid
4
+ class OrderTest < Test::Unit::TestCase
5
+ setup do
6
+ @order_url = "#{Paid.api_base}/orders"
7
+ end
8
+
9
+ context 'Order class' do
10
+ should 'be retrieveable' do
11
+ id = "order_id"
12
+ @mock.expects(:get).once.with("#{@order_url}/#{id}", anything, anything).returns(test_response(test_order))
13
+ order = Paid::Order.retrieve(id)
14
+ assert(order.is_a?(Paid::Order))
15
+ end
16
+
17
+ should 'be createable' do
18
+ @mock.expects(:post).once.with(@order_url, anything, test_order).returns(test_response(test_order))
19
+ order = Paid::Order.create(test_order)
20
+ assert(order.is_a?(Paid::Order))
21
+ assert_equal(test_order[:id], order.id)
22
+ end
23
+
24
+ should 'be listable' do
25
+ @mock.expects(:get).once.returns(test_response(test_order_list))
26
+
27
+ orders = Paid::Order.all
28
+
29
+ assert(orders.is_a?(Paid::APIList))
30
+ orders.each do |order|
31
+ assert(order.is_a?(Paid::Order))
32
+ end
33
+ end
34
+ end
35
+
36
+ context 'Order instance' do
37
+ should 'be refreshable' do
38
+ @mock.expects(:get).once.with("#{@order_url}/#{test_order[:id]}", anything, anything).returns(test_response(test_order))
39
+ order = Paid::Order.new(test_order[:id])
40
+ order.refresh
41
+ assert_equal(test_order[:amount], order.amount)
42
+ end
43
+
44
+ should 'be updateable' do
45
+ order = Paid::Order.new(test_order)
46
+ order.charge_now = true
47
+
48
+ @mock.expects(:put).once.with do |url, headers, params|
49
+ !params.nil? && url == "#{@order_url}/#{order.id}"
50
+ end.returns(test_response(test_order))
51
+
52
+ # This should update this instance with test_order since it was returned
53
+ order.save
54
+ assert_equal(test_order[:charge_now], order.charge_now)
55
+ end
56
+ end
57
+
58
+
59
+ context 'Retrieved Paid::Order instance' do
60
+ setup do
61
+ @order = Paid::Order.new(test_order)
62
+ end
63
+
64
+ should 'have the id attribute' do
65
+ assert_equal(test_order[:id], @order.id)
66
+ end
67
+
68
+ should 'have the object attribute' do
69
+ assert_equal(test_order[:object], @order.object)
70
+ end
71
+
72
+ should 'have the amount attribute' do
73
+ assert_equal(test_order[:amount], @order.amount)
74
+ end
75
+
76
+ should 'have the charge_now attribute' do
77
+ assert_equal(test_order[:charge_now], @order.charge_now)
78
+ end
79
+
80
+ should 'have the customer attribute' do
81
+ assert_equal(test_order[:customer], @order.customer)
82
+ end
83
+
84
+ should 'have the metadata attribute' do
85
+ assert_equal(test_order[:metadata], @order.metadata)
86
+ end
87
+
88
+ should 'have the subscription attribute' do
89
+ assert_equal(test_order[:subscription], @order.subscription)
90
+ end
91
+ end
92
+
93
+ should 'be registered' do
94
+ assert(APIResource.api_subclasses.include?(Paid::Order))
95
+ assert_equal(Paid::Order, APIResource.api_subclass_fetch("order"))
96
+ end
97
+
98
+ end
99
+ end
@@ -0,0 +1,87 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ module Paid
4
+ class PlanItemTest < Test::Unit::TestCase
5
+ setup do
6
+ @plan_item_url = "#{Paid.api_base}/plan_items"
7
+ end
8
+
9
+ context 'PlanItem class' do
10
+ should 'be retrieveable' do
11
+ id = "plan_item_id"
12
+ @mock.expects(:get).once.with("#{@plan_item_url}/#{id}", anything, anything).returns(test_response(test_plan_item))
13
+ plan_item = Paid::PlanItem.retrieve(id)
14
+ assert(plan_item.is_a?(Paid::PlanItem))
15
+ end
16
+
17
+ should 'be createable' do
18
+ @mock.expects(:post).once.with(@plan_item_url, anything, test_plan_item).returns(test_response(test_plan_item))
19
+ plan_item = Paid::PlanItem.create(test_plan_item)
20
+ assert(plan_item.is_a?(Paid::PlanItem))
21
+ assert_equal(test_plan_item[:id], plan_item.id)
22
+ end
23
+
24
+ should 'be listable' do
25
+ @mock.expects(:get).once.returns(test_response(test_plan_item_list))
26
+
27
+ plan_items = Paid::PlanItem.all
28
+
29
+ assert(plan_items.is_a?(Paid::APIList))
30
+ plan_items.each do |plan_item|
31
+ assert(plan_item.is_a?(Paid::PlanItem))
32
+ end
33
+ end
34
+ end
35
+
36
+ context 'PlanItem instance' do
37
+ should 'be refreshable' do
38
+ @mock.expects(:get).once.with("#{@plan_item_url}/#{test_plan_item[:id]}", anything, anything).returns(test_response(test_plan_item))
39
+ plan_item = Paid::PlanItem.new(test_plan_item[:id])
40
+ plan_item.refresh
41
+ assert_equal(test_plan_item[:pricing][:quantity], plan_item.pricing[:quantity])
42
+ end
43
+
44
+ should 'be updateable' do
45
+ plan_item = Paid::PlanItem.new(test_plan_item)
46
+ plan_item.pricing[:quantity] = 2.0
47
+
48
+ @mock.expects(:put).once.with do |url, headers, params|
49
+ !params.nil? && url == "#{@plan_item_url}/#{plan_item.id}"
50
+ end.returns(test_response(test_plan_item))
51
+
52
+ # This should update this instance with test_plan_item since it was returned
53
+ plan_item.save
54
+ assert_equal(test_plan_item[:pricing][:quantity], plan_item.pricing[:quantity])
55
+ end
56
+ end
57
+
58
+
59
+ context 'Retrieved Paid::PlanItem instance' do
60
+ setup do
61
+ @plan_item = Paid::PlanItem.new(test_plan_item)
62
+ end
63
+
64
+ should 'have the id attribute' do
65
+ assert_equal(test_plan_item[:id], @plan_item.id)
66
+ end
67
+
68
+ should 'have the object attribute' do
69
+ assert_equal(test_plan_item[:object], @plan_item.object)
70
+ end
71
+
72
+ should 'have the plan attribute' do
73
+ assert_equal(test_plan_item[:plan], @plan_item.plan)
74
+ end
75
+
76
+ should 'have the product attribute' do
77
+ assert_equal(test_plan_item[:product], @plan_item.product)
78
+ end
79
+ end
80
+
81
+ should 'be registered' do
82
+ assert(APIResource.api_subclasses.include?(Paid::PlanItem))
83
+ assert_equal(Paid::PlanItem, APIResource.api_subclass_fetch("plan_item"))
84
+ end
85
+
86
+ end
87
+ end
@@ -0,0 +1,105 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ module Paid
4
+ class ProductTest < Test::Unit::TestCase
5
+ setup do
6
+ @product_url = "#{Paid.api_base}/products"
7
+ end
8
+
9
+ context 'Product class' do
10
+ should 'be retrieveable' do
11
+ id = "product_id"
12
+ @mock.expects(:get).once.with("#{@product_url}/#{id}", anything, anything).returns(test_response(test_product))
13
+ product = Paid::Product.retrieve(id)
14
+ assert(product.is_a?(Paid::Product))
15
+ end
16
+
17
+ should 'be createable' do
18
+ @mock.expects(:post).once.with(@product_url, anything, anything).returns(test_response(test_product))
19
+ product = Paid::Product.create(test_product)
20
+ assert(product.is_a?(Paid::Product))
21
+ assert_equal(test_product[:id], product.id)
22
+ end
23
+
24
+ should 'be listable' do
25
+ @mock.expects(:get).once.returns(test_response(test_product_list))
26
+
27
+ products = Paid::Product.all
28
+
29
+ assert(products.is_a?(Paid::APIList))
30
+ products.each do |product|
31
+ assert(product.is_a?(Paid::Product))
32
+ end
33
+ end
34
+ end
35
+
36
+ context 'Product instance' do
37
+ should 'be refreshable' do
38
+ @mock.expects(:get).once.with("#{@product_url}/#{test_product[:id]}", anything, anything).returns(test_response(test_product))
39
+ product = Paid::Product.new(test_product[:id])
40
+ product.refresh
41
+ assert_equal(test_product[:name], product.name)
42
+ end
43
+
44
+ should 'be updateable' do
45
+ product = Paid::Product.new(test_product)
46
+ product.name = "new name"
47
+ product.description = "new description"
48
+
49
+ @mock.expects(:put).once.with do |url, headers, params|
50
+ !params.nil? && url == "#{@product_url}/#{product.id}"
51
+ end.returns(test_response(test_product))
52
+
53
+ # This should update this instance with test_product since it was returned
54
+ product.save
55
+ assert_equal(test_product[:name], product.name)
56
+ assert_equal(test_product[:description], product.description)
57
+ end
58
+ end
59
+
60
+
61
+ context 'Retrieved Paid::Product instance' do
62
+ setup do
63
+ @product = Paid::Product.new(test_product)
64
+ end
65
+
66
+ should 'have the id attribute' do
67
+ assert_equal(test_product[:id], @product.id)
68
+ end
69
+
70
+ should 'have the object attribute' do
71
+ assert_equal(test_product[:object], @product.object)
72
+ end
73
+
74
+ should 'have the description attribute' do
75
+ assert_equal(test_product[:description], @product.description)
76
+ end
77
+
78
+ should 'have the external_id attribute' do
79
+ assert_equal(test_product[:external_id], @product.external_id)
80
+ end
81
+
82
+ should 'have the external_metric_id attribute' do
83
+ assert_equal(test_product[:external_metric_id], @product.external_metric_id)
84
+ end
85
+
86
+ should 'have the name attribute' do
87
+ assert_equal(test_product[:name], @product.name)
88
+ end
89
+
90
+ should 'have the transaction_description attribute' do
91
+ assert_equal(test_product[:transaction_description], @product.transaction_description)
92
+ end
93
+
94
+ should 'have the pricing_structure attribute' do
95
+ assert_equal(test_product[:pricing_structure], @product.pricing_structure)
96
+ end
97
+ end
98
+
99
+ should 'be registered' do
100
+ assert(APIResource.api_subclasses.include?(Paid::Product))
101
+ assert_equal(Paid::Product, APIResource.api_subclass_fetch("product"))
102
+ end
103
+
104
+ end
105
+ end
@@ -146,6 +146,58 @@ module Paid
146
146
  }
147
147
  end
148
148
 
149
+ def test_plan_item
150
+ {
151
+ :created_at => 1463730588,
152
+ :object => "plan_item",
153
+ :id => "pl_itm_rvI2LsUFPAXLCIyYso0Q",
154
+ :updated_at => 1463730588,
155
+ :pricing => {
156
+ :currency => "usd",
157
+ :price => 1,
158
+ :quantity => 1.0,
159
+ :type => "quantity"
160
+ },
161
+ :plan => "pl_sXiYX4jmEE6VsTcRNkPg",
162
+ :product => "prod_sdhu3jttxzEfq7b9C1g"
163
+ }
164
+ end
165
+
166
+ def test_plan_item_list
167
+ {
168
+ :data => [test_plan_item, test_plan_item, test_plan_item],
169
+ :object => 'list'
170
+ }
171
+ end
172
+
173
+ def test_product
174
+ {
175
+ :created_at => 1463730588,
176
+ :object => "product",
177
+ :id => "prod_sdhu3jttxzEfq7b9C1g",
178
+ :updated_at => 1464733819,
179
+ :description => "This is money we want every day.",
180
+ :external_id => nil,
181
+ :metadata => {
182
+ "something" => "to something"
183
+ },
184
+ :name => "Test Daily Plan",
185
+ :pricing => {
186
+ :currency => "usd",
187
+ :price => 1,
188
+ :type => "quantity"
189
+ },
190
+ :transaction_description => "This is money we want every day."
191
+ }
192
+ end
193
+
194
+ def test_product_list
195
+ {
196
+ :data => [test_product, test_product, test_product],
197
+ :object => 'list'
198
+ }
199
+ end
200
+
149
201
  def test_event(data=test_invoice, type="invoice.generated")
150
202
  {
151
203
  :id => "evt_b8DZtUtZs8sxs0EsCcMg",
@@ -156,6 +208,54 @@ module Paid
156
208
  }
157
209
  end
158
210
 
211
+ def test_order
212
+ {
213
+ :created_at => 1463850015,
214
+ :object => "order",
215
+ :id => "ordr_qMjx3cpmJYabgz17LzXbQ",
216
+ :updated_at => 1464316156,
217
+ :amount => 15999,
218
+ :charge_now => false,
219
+ :service_ends_on => 1463875199,
220
+ :service_starts_on => 1463270400,
221
+ :customer => "cus_H17up4YDnwAPLE5Kpag"
222
+ }
223
+ end
224
+
225
+ def test_order_list
226
+ {
227
+ :data => [test_order, test_order, test_order],
228
+ :object => 'list'
229
+ }
230
+ end
231
+
232
+ def test_order_item
233
+ {
234
+ :created_at => 1463850015,
235
+ :object => "order_item",
236
+ :id => "ordr_itm_mxEZHQ1SDx4xYcaAP9WCQ",
237
+ :updated_at => 1463850015,
238
+ :pricing => {
239
+ :currency => "usd",
240
+ :price => 15999,
241
+ :quantity => 1.0,
242
+ :type => "quantity"
243
+ },
244
+ :order => "ordr_qMjx3cklJnabgz07XzXbQ",
245
+ :product => "prod_Q3UG2qooCHz1ywABkk93Lw",
246
+ :transaction => nil,
247
+ :service_ends_on => 1463803200,
248
+ :service_starts_on => 1463284800
249
+ }
250
+ end
251
+
252
+ def test_order_item_list
253
+ {
254
+ :data => [test_order_item, test_order_item, test_order_item],
255
+ :object => 'list'
256
+ }
257
+ end
258
+
159
259
  def test_event_list
160
260
  {
161
261
  :data => [test_event, test_event(test_customer, "customer.created"), test_event(test_plan, "plan.created")],
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paid
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Calhoun
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-05-02 00:00:00.000000000 Z
12
+ date: 2016-06-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest-client
@@ -151,9 +151,13 @@ files:
151
151
  - lib/paid/event_data.rb
152
152
  - lib/paid/headers_builder.rb
153
153
  - lib/paid/invoice.rb
154
+ - lib/paid/order.rb
155
+ - lib/paid/order_item.rb
154
156
  - lib/paid/params_builder.rb
155
157
  - lib/paid/path_builder.rb
156
158
  - lib/paid/plan.rb
159
+ - lib/paid/plan_item.rb
160
+ - lib/paid/product.rb
157
161
  - lib/paid/refund_list.rb
158
162
  - lib/paid/requester.rb
159
163
  - lib/paid/subscription.rb
@@ -170,9 +174,13 @@ files:
170
174
  - test/paid/event_test.rb
171
175
  - test/paid/headers_builder_test.rb
172
176
  - test/paid/invoice_test.rb
177
+ - test/paid/order_item_test.rb
178
+ - test/paid/order_test.rb
173
179
  - test/paid/params_builder_test.rb
174
180
  - test/paid/path_builder_test.rb
181
+ - test/paid/plan_item_test.rb
175
182
  - test/paid/plan_test.rb
183
+ - test/paid/product_test.rb
176
184
  - test/paid/requester_test.rb
177
185
  - test/paid/subscription_test.rb
178
186
  - test/paid/transaction_test.rb
@@ -212,9 +220,13 @@ test_files:
212
220
  - test/paid/event_test.rb
213
221
  - test/paid/headers_builder_test.rb
214
222
  - test/paid/invoice_test.rb
223
+ - test/paid/order_item_test.rb
224
+ - test/paid/order_test.rb
215
225
  - test/paid/params_builder_test.rb
216
226
  - test/paid/path_builder_test.rb
227
+ - test/paid/plan_item_test.rb
217
228
  - test/paid/plan_test.rb
229
+ - test/paid/product_test.rb
218
230
  - test/paid/requester_test.rb
219
231
  - test/paid/subscription_test.rb
220
232
  - test/paid/transaction_test.rb