cameroncox-mousetrap 0.5.3.10 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -5,3 +5,4 @@ rdoc
5
5
  pkg
6
6
  spec/integration/settings.yml
7
7
  script/cheddar_getter.yml
8
+ mousetrap_config.yml
data/Rakefile CHANGED
@@ -4,13 +4,13 @@ require 'rake'
4
4
  begin
5
5
  require 'jeweler'
6
6
  Jeweler::Tasks.new do |gem|
7
- gem.name = "cameroncox-mousetrap"
7
+ gem.name = "mousetrap"
8
8
  gem.summary = %Q{CheddarGetter API Client in Ruby}
9
9
  gem.description = %Q{CheddarGetter API Client in Ruby}
10
10
  gem.email = "jonlarkowski@gmail.com"
11
- gem.homepage = "http://github.com/cameroncox/mousetrap"
11
+ gem.homepage = "http://github.com/hashrocket/mousetrap"
12
12
  gem.authors = ["Jon Larkowski", "Sandro Turriate", "Wolfram Arnold", "Corey Grusden"]
13
- gem.add_dependency 'httparty', '>= 0.4.2'
13
+ gem.add_dependency 'httparty', '>= 0.6.1'
14
14
  gem.add_development_dependency "activesupport", '>= 2.3.3'
15
15
  gem.add_development_dependency "rspec", '>= 1.2.9'
16
16
  gem.add_development_dependency 'factory_girl', '>= 1.2.3'
@@ -49,3 +49,96 @@ Rake::RDocTask.new do |rdoc|
49
49
  rdoc.rdoc_files.include('README*')
50
50
  rdoc.rdoc_files.include('lib/**/*.rb')
51
51
  end
52
+
53
+ require 'rake/gempackagetask'
54
+
55
+ gem_spec = Gem::Specification.new do |s|
56
+ s.name = %q{cameroncox-mousetrap}
57
+ s.version = "0.6.1"
58
+
59
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
60
+ s.authors = ["Jon Larkowski", "Sandro Turriate", "Wolfram Arnold", "Corey Grusden"]
61
+ s.date = %q{2010-07-16}
62
+ s.description = %q{CheddarGetter API Client in Ruby}
63
+ s.email = %q{jonlarkowski@gmail.com}
64
+ s.extra_rdoc_files = [
65
+ "README.textile"
66
+ ]
67
+ s.files = [
68
+ ".document",
69
+ ".gitignore",
70
+ "MIT-LICENSE",
71
+ "README.textile",
72
+ "Rakefile",
73
+ "VERSION",
74
+ "lib/mousetrap.rb",
75
+ "lib/mousetrap/customer.rb",
76
+ "lib/mousetrap/invoice.rb",
77
+ "lib/mousetrap/plan.rb",
78
+ "lib/mousetrap/resource.rb",
79
+ "lib/mousetrap/subscription.rb",
80
+ "mousetrap.gemspec",
81
+ "script/authenticate.rb",
82
+ "script/cheddar_getter.example.yml",
83
+ "script/console",
84
+ "spec/factories.rb",
85
+ "spec/integration/settings.example.yml",
86
+ "spec/integration/smoke_test.rb",
87
+ "spec/integration/spike.rb",
88
+ "spec/mousetrap/customer_spec.rb",
89
+ "spec/mousetrap/plan_spec.rb",
90
+ "spec/mousetrap/resource_spec.rb",
91
+ "spec/mousetrap/subscription_spec.rb",
92
+ "spec/mousetrap_spec.rb",
93
+ "spec/spec.opts",
94
+ "spec/spec_helper.rb",
95
+ "spec/support/fixtures.rb",
96
+ "spec/support/random_data.rb"
97
+ ]
98
+ s.homepage = %q{http://github.com/cameroncox/mousetrap}
99
+ s.rdoc_options = ["--charset=UTF-8"]
100
+ s.require_paths = ["lib"]
101
+ s.rubygems_version = %q{1.3.7}
102
+ s.summary = %q{CheddarGetter API Client in Ruby}
103
+ s.test_files = [
104
+ "spec/factories.rb",
105
+ "spec/integration/smoke_test.rb",
106
+ "spec/integration/spike.rb",
107
+ "spec/mousetrap/customer_spec.rb",
108
+ "spec/mousetrap/plan_spec.rb",
109
+ "spec/mousetrap/resource_spec.rb",
110
+ "spec/mousetrap/subscription_spec.rb",
111
+ "spec/mousetrap_spec.rb",
112
+ "spec/spec_helper.rb",
113
+ "spec/support/fixtures.rb",
114
+ "spec/support/random_data.rb"
115
+ ]
116
+
117
+ if s.respond_to? :specification_version then
118
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
119
+ s.specification_version = 3
120
+
121
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
122
+ s.add_runtime_dependency(%q<httparty>, [">= 0.6.1"])
123
+ s.add_development_dependency(%q<activesupport>, [">= 2.3.3"])
124
+ s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
125
+ s.add_development_dependency(%q<factory_girl>, [">= 1.2.3"])
126
+ else
127
+ s.add_dependency(%q<httparty>, [">= 0.6.1"])
128
+ s.add_dependency(%q<activesupport>, [">= 2.3.3"])
129
+ s.add_dependency(%q<rspec>, [">= 1.2.9"])
130
+ s.add_dependency(%q<factory_girl>, [">= 1.2.3"])
131
+ end
132
+ else
133
+ s.add_dependency(%q<httparty>, [">= 0.6.1"])
134
+ s.add_dependency(%q<activesupport>, [">= 2.3.3"])
135
+ s.add_dependency(%q<rspec>, [">= 1.2.9"])
136
+ s.add_dependency(%q<factory_girl>, [">= 1.2.3"])
137
+ end
138
+ end
139
+
140
+ Rake::GemPackageTask.new(gem_spec) do |p|
141
+ p.gem_spec = gem_spec
142
+ p.need_tar = true
143
+ p.need_zip = true
144
+ end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.3.6
1
+ 0.6.1
data/lib/mousetrap.rb CHANGED
@@ -6,11 +6,14 @@ require 'httparty'
6
6
  module Mousetrap
7
7
  API_UNSUPPORTED = "CheddarGetter API doesn't support this."
8
8
 
9
+ class ApiDown < Exception
10
+ end
11
+
9
12
  autoload :Customer, 'mousetrap/customer'
10
13
  autoload :Plan, 'mousetrap/plan'
11
14
  autoload :Resource, 'mousetrap/resource'
12
- autoload :Subscription, 'mousetrap/subscription'
13
15
  autoload :Invoice, 'mousetrap/invoice'
16
+ autoload :Subscription, 'mousetrap/subscription'
14
17
 
15
18
  class << self
16
19
  attr_accessor :product_code
@@ -7,7 +7,48 @@ module Mousetrap
7
7
  :first_name,
8
8
  :last_name,
9
9
  :company,
10
- :subscription
10
+ :subscription,
11
+ :charges,
12
+ :items
13
+
14
+ def update_tracked_item_quantity(item_code, quantity = 1)
15
+ tracked_item_resource = if quantity == quantity.abs
16
+ 'add-item-quantity'
17
+ else
18
+ 'remove-item-quantity'
19
+ end
20
+
21
+ attributes = {
22
+ :itemCode => item_code,
23
+ :quantity => quantity.abs
24
+ }
25
+
26
+ response = self.class.put_resource 'customers', tracked_item_resource, code, attributes
27
+
28
+ raise response['error'] if response['error']
29
+ response
30
+ end
31
+
32
+ def add_item_quantity(item_code, quantity = 1)
33
+ update_tracked_item_quantity(item_code, quantity)
34
+ end
35
+
36
+ def remove_item_quantity(item_code, quantity = 1)
37
+ update_tracked_item_quantity(item_code, -quantity)
38
+ end
39
+
40
+ def add_custom_charge(item_code, amount = 1.0, quantity = 1, description = nil)
41
+ attributes = {
42
+ :chargeCode => item_code,
43
+ :eachAmount => amount,
44
+ :quantity => quantity,
45
+ :description => description
46
+ }
47
+
48
+ response = self.class.put_resource 'customers', 'add-charge', code, attributes
49
+ raise response['error'] if response['error']
50
+ response
51
+ end
11
52
 
12
53
  def subscription_attributes=(attributes)
13
54
  self.subscription = Subscription.new attributes
@@ -20,20 +61,12 @@ module Mousetrap
20
61
  :email => email,
21
62
  :first_name => first_name,
22
63
  :last_name => last_name,
23
- :company => company
64
+ :company => company,
65
+ :charges => charges,
66
+ :items => items
24
67
  }
25
68
  end
26
69
 
27
- def add_item_quantity(item_code, quantity = 1)
28
- attrs = { :itemCode => item_code, :quantity => quantity }
29
- self.class.put_resource 'customers', 'add-item-quantity', code, attrs
30
- end
31
-
32
- def remove_item_quantity(item_code, quantity = 1)
33
- attrs = { :itemCode => item_code, :quantity => quantity }
34
- self.class.put_resource 'customers', 'remove-item-quantity', code, attrs
35
- end
36
-
37
70
  def attributes_for_api
38
71
  # TODO: superclass?
39
72
  self.class.attributes_for_api(attributes, new_record?)
@@ -124,6 +157,9 @@ module Mousetrap
124
157
  :lastName => attributes[:last_name],
125
158
  :company => attributes[:company]
126
159
  }
160
+
161
+ mutated_hash.merge!(:charges => attributes[:charges]) if attributes[:charges]
162
+ mutated_hash.merge!(:items => attributes[:items]) if attributes[:items]
127
163
  mutated_hash.merge!(:code => attributes[:code]) if new_record
128
164
  mutated_hash
129
165
  end
@@ -6,6 +6,10 @@ module Mousetrap
6
6
  :billing_date,
7
7
  :created_at
8
8
 
9
+ def initialize(hash = {})
10
+ super(self.class.attributes_from_api(hash))
11
+ end
12
+
9
13
  protected
10
14
 
11
15
  def self.plural_resource_name
@@ -16,11 +20,14 @@ module Mousetrap
16
20
  'invoice'
17
21
  end
18
22
 
19
- attr_writer \
20
- :id,
21
- :number,
22
- :billing_date,
23
- :created_at
23
+ def attributes
24
+ {
25
+ :id => id,
26
+ :number => number,
27
+ :billing_date => billing_date,
28
+ :created_at => created_at
29
+ }
30
+ end
24
31
 
25
32
  def self.attributes_from_api(attributes)
26
33
  {
@@ -31,4 +38,4 @@ module Mousetrap
31
38
  }
32
39
  end
33
40
  end
34
- end
41
+ end
@@ -6,7 +6,6 @@ module Mousetrap
6
6
  :items,
7
7
  :recurring_charge_amount
8
8
 
9
-
10
9
  def self.all
11
10
  response = get_resources plural_resource_name
12
11
  return [] unless response['plans']
@@ -25,10 +24,10 @@ module Mousetrap
25
24
 
26
25
  def self.attributes_from_api(attributes)
27
26
  {
28
- :code => attributes['code'],
29
- :name => attributes['name'],
30
- :items => attributes['items'],
31
- :recurring_charge_amount => attributes['recurringChargeAmount']
27
+ :code => attributes['code'],
28
+ :name => attributes['name'],
29
+ :items => attributes['items'],
30
+ :recurring_charge_amount => attributes['recurringChargeAmount']
32
31
  }
33
32
  end
34
33
  end
@@ -89,10 +89,14 @@ module Mousetrap
89
89
 
90
90
  def self.get_resource(resource, code)
91
91
  get resource_path(resource, 'get', code)
92
+ rescue Errno::ECONNREFUSED
93
+ raise_api_is_down
92
94
  end
93
95
 
94
96
  def self.get_resources(resource)
95
97
  get resource_path(resource, 'get')
98
+ rescue Errno::ECONNREFUSED
99
+ raise_api_is_down
96
100
  end
97
101
 
98
102
  def self.member_action(resource, action, code, attributes = nil)
@@ -103,11 +107,15 @@ module Mousetrap
103
107
  else
104
108
  post path
105
109
  end
110
+ rescue Errno::ECONNREFUSED
111
+ raise_api_is_down
106
112
  end
107
113
 
108
114
  def self.post_resource(resource, action, attributes)
109
115
  path = resource_path(resource, action)
110
116
  post path, :body => attributes
117
+ rescue Errno::ECONNREFUSED
118
+ raise_api_is_down
111
119
  end
112
120
 
113
121
  def self.put_resource(resource, action, code, attributes)
@@ -118,6 +126,10 @@ module Mousetrap
118
126
  raise NotImplementedError, API_UNSUPPORTED
119
127
  end
120
128
 
129
+ def self.raise_api_is_down
130
+ raise ApiDown, "CheddarGetter is currently down"
131
+ end
132
+
121
133
  def self.resource_path(resource, action, code = nil)
122
134
  path = "/xml/#{resource}/#{action}/productCode/#{uri_encode(Mousetrap.product_code)}"
123
135
  path += "/code/#{uri_encode(code)}" if code
@@ -8,8 +8,14 @@ module Mousetrap
8
8
  :credit_card_number,
9
9
  :credit_card_expiration_month,
10
10
  :credit_card_expiration_year,
11
+ :credit_card_code,
12
+ :billing_country,
13
+ :billing_address,
14
+ :billing_city,
15
+ :billing_state,
11
16
  :billing_zip_code,
12
17
  :plan,
18
+
13
19
  :customer_code # belongs to customer
14
20
 
15
21
  # Attributes that come _from_ the API.
@@ -20,8 +26,8 @@ module Mousetrap
20
26
  :credit_card_expiration_date,
21
27
  :credit_card_last_four_digits,
22
28
  :credit_card_type,
23
- :items,
24
- :invoices
29
+ :invoices,
30
+ :items
25
31
 
26
32
  def self.[](code)
27
33
  raise_api_unsupported_error
@@ -39,6 +45,16 @@ module Mousetrap
39
45
  raise_api_unsupported_error
40
46
  end
41
47
 
48
+ def current_invoice
49
+ invoice_attributes = if invoices['invoice'].kind_of?(Array)
50
+ invoices['invoice'][0]
51
+ else
52
+ invoices['invoice']
53
+ end
54
+
55
+ Invoice.new(invoice_attributes)
56
+ end
57
+
42
58
  def attributes
43
59
  {
44
60
  :id => id,
@@ -48,30 +64,15 @@ module Mousetrap
48
64
  :credit_card_number => credit_card_number,
49
65
  :credit_card_expiration_month => credit_card_expiration_month,
50
66
  :credit_card_expiration_year => credit_card_expiration_year,
67
+ :credit_card_code => credit_card_code,
68
+ :billing_country => billing_country,
69
+ :billing_address => billing_address,
70
+ :billing_city => billing_city,
71
+ :billing_state => billing_state,
51
72
  :billing_zip_code => billing_zip_code,
52
73
  }
53
74
  end
54
75
 
55
- def current_invoice
56
- invoice_record = if invoices['invoice'].kind_of?(Array)
57
- Invoice.new({
58
- :id => invoices['invoice'][0]['id'],
59
- :number => invoices['invoice'][0]['number'],
60
- :created_at => invoices['invoice'][0]['createdDatetime'],
61
- :billing_date => invoices['invoice'][0]['billingDatetime']
62
- })
63
- else
64
- Invoice.new({
65
- :id => invoices['invoice']['id'],
66
- :number => invoices['invoice']['number'],
67
- :created_at => invoices['invoice']['createdDatetime'],
68
- :billing_date => invoices['invoice']['billingDatetime']
69
- })
70
- end
71
-
72
- invoice_record
73
- end
74
-
75
76
  def attributes_for_api
76
77
  self.class.attributes_for_api(attributes)
77
78
  end
@@ -115,6 +116,7 @@ module Mousetrap
115
116
  :credit_card_expiration_date,
116
117
  :credit_card_last_four_digits,
117
118
  :credit_card_type,
119
+ :credit_card_verification_code,
118
120
  :items,
119
121
  :invoices
120
122
 
@@ -134,6 +136,11 @@ module Mousetrap
134
136
  :ccNumber => attributes[:credit_card_number],
135
137
  :ccExpMonth => ("%02d" % attributes[:credit_card_expiration_month] if attributes[:credit_card_expiration_month]),
136
138
  :ccExpYear => attributes[:credit_card_expiration_year],
139
+ :ccCardCode => attributes[:credit_card_code],
140
+ :ccCountry => attributes[:billing_country],
141
+ :ccAddress => attributes[:billing_address],
142
+ :ccCity => attributes[:billing_city],
143
+ :ccState => attributes[:billing_state],
137
144
  :ccZip => attributes[:billing_zip_code]
138
145
  }
139
146
  end
@@ -146,8 +153,8 @@ module Mousetrap
146
153
  :credit_card_expiration_date => attributes['ccExpirationDate'],
147
154
  :credit_card_last_four_digits => attributes['ccLastFour'],
148
155
  :credit_card_type => attributes['ccType'],
149
- :items => attributes['items'],
150
- :invoices => attributes['invoices']
156
+ :invoices => attributes['invoices'],
157
+ :items => attributes['items']
151
158
  }
152
159
  end
153
160
  end
data/mousetrap.gemspec CHANGED
@@ -4,12 +4,12 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = %q{mousetrap}
8
- s.version = "0.5.0"
7
+ s.name = %q{cameroncox-mousetrap}
8
+ s.version = "0.6.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jon Larkowski", "Sandro Turriate", "Wolfram Arnold", "Corey Grusden"]
12
- s.date = %q{2009-10-25}
12
+ s.date = %q{2010-07-16}
13
13
  s.description = %q{CheddarGetter API Client in Ruby}
14
14
  s.email = %q{jonlarkowski@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -24,6 +24,7 @@ Gem::Specification.new do |s|
24
24
  "VERSION",
25
25
  "lib/mousetrap.rb",
26
26
  "lib/mousetrap/customer.rb",
27
+ "lib/mousetrap/invoice.rb",
27
28
  "lib/mousetrap/plan.rb",
28
29
  "lib/mousetrap/resource.rb",
29
30
  "lib/mousetrap/subscription.rb",
@@ -45,10 +46,10 @@ Gem::Specification.new do |s|
45
46
  "spec/support/fixtures.rb",
46
47
  "spec/support/random_data.rb"
47
48
  ]
48
- s.homepage = %q{http://github.com/hashrocket/mousetrap}
49
+ s.homepage = %q{http://github.com/cameroncox/mousetrap}
49
50
  s.rdoc_options = ["--charset=UTF-8"]
50
51
  s.require_paths = ["lib"]
51
- s.rubygems_version = %q{1.3.5}
52
+ s.rubygems_version = %q{1.3.7}
52
53
  s.summary = %q{CheddarGetter API Client in Ruby}
53
54
  s.test_files = [
54
55
  "spec/factories.rb",
@@ -68,19 +69,19 @@ Gem::Specification.new do |s|
68
69
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
69
70
  s.specification_version = 3
70
71
 
71
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
72
- s.add_runtime_dependency(%q<httparty>, [">= 0.4.2"])
72
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
73
+ s.add_runtime_dependency(%q<httparty>, [">= 0.6.1"])
73
74
  s.add_development_dependency(%q<activesupport>, [">= 2.3.3"])
74
75
  s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
75
76
  s.add_development_dependency(%q<factory_girl>, [">= 1.2.3"])
76
77
  else
77
- s.add_dependency(%q<httparty>, [">= 0.4.2"])
78
+ s.add_dependency(%q<httparty>, [">= 0.6.1"])
78
79
  s.add_dependency(%q<activesupport>, [">= 2.3.3"])
79
80
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
80
81
  s.add_dependency(%q<factory_girl>, [">= 1.2.3"])
81
82
  end
82
83
  else
83
- s.add_dependency(%q<httparty>, [">= 0.4.2"])
84
+ s.add_dependency(%q<httparty>, [">= 0.6.1"])
84
85
  s.add_dependency(%q<activesupport>, [">= 2.3.3"])
85
86
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
86
87
  s.add_dependency(%q<factory_girl>, [">= 1.2.3"])
@@ -1,3 +1,3 @@
1
1
  settings = YAML.load_file(File.expand_path('../cheddar_getter.yml', __FILE__))
2
- Mousetrap.authenticate settings['username'], settings['password']
2
+ Mousetrap.authenticate settings['user'], settings['password']
3
3
  Mousetrap.product_code = settings['product_code']
data/script/console CHANGED
@@ -1 +1,15 @@
1
- irb -r ubygems -r lib/mousetrap.rb -r script/authenticate.rb
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift << File.join(File.dirname(__FILE__), "..", "lib")
4
+
5
+ require 'mousetrap'
6
+ require 'irb'
7
+ require 'yaml'
8
+
9
+ config_file = File.join(File.dirname(__FILE__), "..", "mousetrap_config.yml")
10
+ raise "#{config_file} must exist" unless File.exists?(config_file)
11
+ config = YAML.load_file(config_file)
12
+ Mousetrap.product_code = config['product_code']
13
+ Mousetrap.authenticate(config['username'], config['password'])
14
+
15
+ IRB.start
data/spec/factories.rb CHANGED
@@ -19,7 +19,11 @@ Factory.define :subscription, :class => Mousetrap::Subscription, :default_strate
19
19
  f.credit_card_number '4111111111111111'
20
20
  f.credit_card_expiration_month '12'
21
21
  f.credit_card_expiration_year '2012'
22
- f.billing_zip_code '90210'
22
+ f.billing_address "400 W 7th St\n#200"
23
+ f.billing_city 'Bloomington'
24
+ f.billing_state 'IN'
25
+ f.billing_country 'US'
26
+ f.billing_zip_code '47404'
23
27
  end
24
28
 
25
29
  Factory.define :alternate_subscription, :parent => :subscription, :default_strategy => :stub do |f|
@@ -115,6 +115,16 @@ describe "The Wrapper Gem" do
115
115
  it_should_behave_like "a Customer record from CheddarGetter"
116
116
  it_should_behave_like "an active Subscription record from CheddarGetter"
117
117
  end
118
+
119
+ describe "When I create a customer with international card" do
120
+ before :all do
121
+ attributes = Factory.attributes_for :alt_new_customer
122
+ @customer = Mousetrap::Customer.create attributes_for
123
+ end
124
+
125
+ it_should_behave_like "a Customer record from CheddarGetter"
126
+ it_should_behave_like "an active Subscription record from CheddarGetter"
127
+ end
118
128
  end
119
129
 
120
130
  describe ".destroy_all" do
@@ -2,7 +2,7 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
2
 
3
3
  describe Mousetrap::Customer do
4
4
  include Fixtures
5
-
5
+
6
6
  def customer_attributes_for_api(customer)
7
7
  {
8
8
  :firstName => customer.first_name,
@@ -18,6 +18,10 @@ describe Mousetrap::Customer do
18
18
  :ccExpMonth => customer.subscription.credit_card_expiration_month,
19
19
  :ccExpYear => customer.subscription.credit_card_expiration_year,
20
20
  :ccZip => customer.subscription.billing_zip_code,
21
+ :ccCountry => customer.subscription.billing_country,
22
+ :ccAddress => customer.subscription.billing_address,
23
+ :ccCity => customer.subscription.billing_city,
24
+ :ccState => customer.subscription.billing_state
21
25
  }
22
26
  }
23
27
  end
@@ -265,7 +269,7 @@ describe Mousetrap::Customer do
265
269
 
266
270
  it "posts a new customer" do
267
271
  @customer.class.should_receive(:post_resource).with('customers', 'new', 'some_attributes').and_return({:id => 'some_id'})
268
- @customer.class.stub :build_resource_from
272
+ @customer.class.stub :build_resource_from => stub(:id => 'some_id')
269
273
  @customer.send :create
270
274
  end
271
275
 
@@ -276,7 +280,7 @@ describe Mousetrap::Customer do
276
280
 
277
281
  it "builds a customer from the CheddarGetter return values" do
278
282
  @customer.class.stub :post_resource => 'some response'
279
- @customer.class.should_receive(:build_resource_from).with('some response').and_return(:id => 'some_id')
283
+ @customer.class.should_receive(:build_resource_from).with('some response').and_return(stub(:id => 'some_id'))
280
284
  @customer.send :create
281
285
  end
282
286
 
@@ -319,20 +323,57 @@ describe Mousetrap::Customer do
319
323
  end
320
324
  end
321
325
  end
326
+
327
+ describe '#add_custom_charge' do
328
+ context "when there's a subscription instance" do
329
+ before :all do
330
+ @customer = Factory(:new_customer)
331
+ end
332
+
333
+ it "should not raise an error with CheddarGetter" do
334
+ @customer.class.should_receive(:put_resource).with('customers', 'add-charge', @customer.code, { :eachAmount => 45.00, :chargeCode => 'BOGUS', :quantity => 1, :description => nil }).and_return({ :id => 'some_id' })
335
+ @customer.add_custom_charge('BOGUS', 45.00, 1, nil)
336
+ end
337
+ end
338
+
339
+ context "with there is not a subscription" do
340
+ before :all do
341
+ @customer = Mousetrap::Customer.new
342
+ end
343
+
344
+ it "should raise an error with CheddarGetter" do
345
+ @customer.class.stub :put_resource => { 'error' => 'some error message' }
346
+ expect { @customer.add_custom_charge('BOGUS') }.to raise_error('some error message')
347
+ end
348
+ end
349
+ end
350
+
351
+ # describe '#update_tracked_item_quantity' do
352
+ # context "when there's a subscription instance" do
353
+ # before do
354
+ # @customer = Factory(:new_customer)
355
+ # end
356
+ #
357
+ # it "should not raise an error with CheddarGetter" do
358
+ # @customer.class.should_receive(:put_resource).with('customers', 'add-item-quantity', @customer.code, { :quantity => 1, :itemCode => 'BOGUS' }).and_return({ :id => 'some_id' })
359
+ # @customer.update_tracked_item_quantity('BOGUS', 1).should_not raise_error
360
+ # end
361
+ # end
362
+ # end
322
363
  end
323
364
 
324
365
 
325
366
  __END__
326
367
 
327
- customers:
328
- customer:
329
- company:
368
+ customers:
369
+ customer:
370
+ company:
330
371
  lastName: cgejerpkyw
331
372
  code: krylmrreef@example.com
332
- subscriptions:
333
- subscription:
334
- plans:
335
- plan:
373
+ subscriptions:
374
+ subscription:
375
+ plans:
376
+ plan:
336
377
  name: Test
337
378
  setupChargeAmount: "42.00"
338
379
  code: TEST
@@ -348,18 +389,18 @@ customers:
348
389
  description: This is my test plan. There are many like it, but this one is mine.
349
390
  billingFrequencyPer: month
350
391
  setupChargeCode: TEST_SETUP
351
- gatewayToken:
392
+ gatewayToken:
352
393
  id: 7ccea6de-0a4d-102d-a92d-40402145ee8b
353
394
  createdDatetime: "2009-10-14T20:08:14+00:00"
354
395
  ccType: visa
355
396
  ccLastFour: "1111"
356
397
  ccExpirationDate: "2012-12-31T00:00:00+00:00"
357
- canceledDatetime:
358
- invoices:
359
- invoice:
398
+ canceledDatetime:
399
+ invoices:
400
+ invoice:
360
401
  - number: "5"
361
- transactions:
362
- transaction:
402
+ transactions:
403
+ transaction:
363
404
  response: approved
364
405
  code: ""
365
406
  amount: "42.00"
@@ -367,17 +408,17 @@ customers:
367
408
  id: 7ce53c78-0a4d-102d-a92d-40402145ee8b
368
409
  createdDatetime: "2009-10-14T20:08:14+00:00"
369
410
  transactedDatetime: "2009-10-14T20:08:14+00:00"
370
- parentId:
371
- charges:
372
- charge:
411
+ parentId:
412
+ charges:
413
+ charge:
373
414
  code: TEST_SETUP
374
415
  quantity: "1"
375
416
  id: 7ce2cb6e-0a4d-102d-a92d-40402145ee8b
376
417
  createdDatetime: "2009-10-14T20:08:14+00:00"
377
418
  type: setup
378
419
  eachAmount: "42.00"
379
- description:
380
- gatewayAccount:
420
+ description:
421
+ gatewayAccount:
381
422
  id: ""
382
423
  billingDatetime: "2009-10-14T20:08:14+00:00"
383
424
  id: 7cd25072-0a4d-102d-a92d-40402145ee8b
@@ -388,7 +429,7 @@ customers:
388
429
  id: 7cd4253c-0a4d-102d-a92d-40402145ee8b
389
430
  createdDatetime: "2009-10-14T20:08:14+00:00"
390
431
  type: subscription
391
- gatewayToken:
432
+ gatewayToken:
392
433
  id: 7ccd6e5e-0a4d-102d-a92d-40402145ee8b
393
434
  createdDatetime: "2009-10-14T20:08:14+00:00"
394
435
  modifiedDatetime: "2009-10-14T20:08:14+00:00"
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cameroncox-mousetrap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3.10
4
+ hash: 5
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 6
9
+ - 1
10
+ version: 0.6.1
5
11
  platform: ruby
6
12
  authors:
7
13
  - Jon Larkowski
@@ -12,49 +18,73 @@ autorequire:
12
18
  bindir: bin
13
19
  cert_chain: []
14
20
 
15
- date: 2010-01-18 00:00:00 -05:00
21
+ date: 2010-07-16 00:00:00 -04:00
16
22
  default_executable:
17
23
  dependencies:
18
24
  - !ruby/object:Gem::Dependency
19
25
  name: httparty
20
- type: :runtime
21
- version_requirement:
22
- version_requirements: !ruby/object:Gem::Requirement
26
+ prerelease: false
27
+ requirement: &id001 !ruby/object:Gem::Requirement
28
+ none: false
23
29
  requirements:
24
30
  - - ">="
25
31
  - !ruby/object:Gem::Version
26
- version: 0.4.2
27
- version:
32
+ hash: 5
33
+ segments:
34
+ - 0
35
+ - 6
36
+ - 1
37
+ version: 0.6.1
38
+ type: :runtime
39
+ version_requirements: *id001
28
40
  - !ruby/object:Gem::Dependency
29
41
  name: activesupport
30
- type: :development
31
- version_requirement:
32
- version_requirements: !ruby/object:Gem::Requirement
42
+ prerelease: false
43
+ requirement: &id002 !ruby/object:Gem::Requirement
44
+ none: false
33
45
  requirements:
34
46
  - - ">="
35
47
  - !ruby/object:Gem::Version
48
+ hash: 5
49
+ segments:
50
+ - 2
51
+ - 3
52
+ - 3
36
53
  version: 2.3.3
37
- version:
54
+ type: :development
55
+ version_requirements: *id002
38
56
  - !ruby/object:Gem::Dependency
39
57
  name: rspec
40
- type: :development
41
- version_requirement:
42
- version_requirements: !ruby/object:Gem::Requirement
58
+ prerelease: false
59
+ requirement: &id003 !ruby/object:Gem::Requirement
60
+ none: false
43
61
  requirements:
44
62
  - - ">="
45
63
  - !ruby/object:Gem::Version
64
+ hash: 13
65
+ segments:
66
+ - 1
67
+ - 2
68
+ - 9
46
69
  version: 1.2.9
47
- version:
70
+ type: :development
71
+ version_requirements: *id003
48
72
  - !ruby/object:Gem::Dependency
49
73
  name: factory_girl
50
- type: :development
51
- version_requirement:
52
- version_requirements: !ruby/object:Gem::Requirement
74
+ prerelease: false
75
+ requirement: &id004 !ruby/object:Gem::Requirement
76
+ none: false
53
77
  requirements:
54
78
  - - ">="
55
79
  - !ruby/object:Gem::Version
80
+ hash: 25
81
+ segments:
82
+ - 1
83
+ - 2
84
+ - 3
56
85
  version: 1.2.3
57
- version:
86
+ type: :development
87
+ version_requirements: *id004
58
88
  description: CheddarGetter API Client in Ruby
59
89
  email: jonlarkowski@gmail.com
60
90
  executables: []
@@ -103,21 +133,27 @@ rdoc_options:
103
133
  require_paths:
104
134
  - lib
105
135
  required_ruby_version: !ruby/object:Gem::Requirement
136
+ none: false
106
137
  requirements:
107
138
  - - ">="
108
139
  - !ruby/object:Gem::Version
140
+ hash: 3
141
+ segments:
142
+ - 0
109
143
  version: "0"
110
- version:
111
144
  required_rubygems_version: !ruby/object:Gem::Requirement
145
+ none: false
112
146
  requirements:
113
147
  - - ">="
114
148
  - !ruby/object:Gem::Version
149
+ hash: 3
150
+ segments:
151
+ - 0
115
152
  version: "0"
116
- version:
117
153
  requirements: []
118
154
 
119
155
  rubyforge_project:
120
- rubygems_version: 1.3.5
156
+ rubygems_version: 1.3.7
121
157
  signing_key:
122
158
  specification_version: 3
123
159
  summary: CheddarGetter API Client in Ruby