mousetrap 0.4.2 → 0.4.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.
data/.gitignore CHANGED
@@ -4,3 +4,4 @@ coverage
4
4
  rdoc
5
5
  pkg
6
6
  spec/integration/settings.yml
7
+ script/cheddar_getter.yml
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.2
1
+ 0.4.3
@@ -59,11 +59,6 @@ module Mousetrap
59
59
  self.class.raise_api_unsupported_error
60
60
  end
61
61
 
62
- def save
63
- mutated_attributes = attributes_for_api
64
- self.class.put_resource('customers', 'edit-subscription', customer_code, mutated_attributes)
65
- end
66
-
67
62
  def exists?
68
63
  self.class.raise_api_unsupported_error
69
64
  end
@@ -74,6 +69,22 @@ module Mousetrap
74
69
  subscription
75
70
  end
76
71
 
72
+ def self.update(customer_code, attributes)
73
+ mutated_attributes = attributes_for_api(attributes)
74
+
75
+ mutated_attributes.delete_if { |k, v| v.blank? }
76
+
77
+ response = put_resource(
78
+ 'customers',
79
+ 'edit-subscription',
80
+ customer_code,
81
+ mutated_attributes
82
+ )
83
+
84
+ raise response['error'] if response['error']
85
+ end
86
+
87
+
77
88
  protected
78
89
 
79
90
  attr_writer \
@@ -98,7 +109,7 @@ module Mousetrap
98
109
  :ccFirstName => attributes[:billing_first_name],
99
110
  :ccLastName => attributes[:billing_last_name],
100
111
  :ccNumber => attributes[:credit_card_number],
101
- :ccExpMonth => "%02d" % attributes[:credit_card_expiration_month],
112
+ :ccExpMonth => ("%02d" % attributes[:credit_card_expiration_month] if attributes[:credit_card_expiration_month]),
102
113
  :ccExpYear => attributes[:credit_card_expiration_year],
103
114
  :ccZip => attributes[:billing_zip_code],
104
115
  }
data/mousetrap.gemspec CHANGED
@@ -1,15 +1,15 @@
1
1
  # Generated by jeweler
2
- # DO NOT EDIT THIS FILE
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{mousetrap}
8
- s.version = "0.4.2"
8
+ s.version = "0.4.3"
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-18}
12
+ s.date = %q{2009-10-22}
13
13
  s.description = %q{CheddarGetter API Client in Ruby}
14
14
  s.email = %q{jonlarkowski@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -28,6 +28,9 @@ Gem::Specification.new do |s|
28
28
  "lib/mousetrap/resource.rb",
29
29
  "lib/mousetrap/subscription.rb",
30
30
  "mousetrap.gemspec",
31
+ "script/authenticate.rb",
32
+ "script/cheddar_getter.example.yml",
33
+ "script/console",
31
34
  "spec/factories.rb",
32
35
  "spec/integration/settings.example.yml",
33
36
  "spec/integration/smoke_test.rb",
@@ -83,3 +86,4 @@ Gem::Specification.new do |s|
83
86
  s.add_dependency(%q<factory_girl>, [">= 1.2.3"])
84
87
  end
85
88
  end
89
+
@@ -0,0 +1,3 @@
1
+ settings = YAML.load_file(File.expand_path('../cheddar_getter.yml', __FILE__))
2
+ Mousetrap.authenticate settings['user'], settings['password']
3
+ Mousetrap.product_code = settings['product_code']
@@ -0,0 +1,3 @@
1
+ user: you@example.com
2
+ password: abc123
3
+ product_code: MOUSETRAP_TEST
data/script/console ADDED
@@ -0,0 +1 @@
1
+ irb -r ubygems -r lib/mousetrap.rb -r factory_girl -r spec/support/random_data.rb -r script/authenticate.rb
@@ -240,4 +240,30 @@ describe "The Wrapper Gem" do
240
240
  end
241
241
  end
242
242
  end
243
+
244
+ describe Mousetrap::Subscription do
245
+ describe "Given a customer on CheddarGetter" do
246
+ before :all do
247
+ @customer = Factory :new_customer
248
+ violated "Use a visa for setup" unless @customer.subscription.credit_card_number == '4111111111111111'
249
+ @customer.save
250
+ end
251
+
252
+ describe "When I update a subscription field" do
253
+ before :all do
254
+ Mousetrap::Subscription.update @customer.code, :credit_card_number => '5555555555554444'
255
+ end
256
+
257
+ describe "And I get the customer" do
258
+ before :all do
259
+ @api_customer = Mousetrap::Customer[@customer.code]
260
+ end
261
+
262
+ it 'Then I should see the updated field' do
263
+ @api_customer.subscription.credit_card_last_four_digits.should == '4444'
264
+ end
265
+ end
266
+ end
267
+ end
268
+ end
243
269
  end
@@ -42,21 +42,35 @@ end
42
42
  destroy_all_customers
43
43
  customer = Factory :new_customer
44
44
  customer.save
45
+
45
46
  api_customer = Mousetrap::Customer[customer.code]
46
47
  puts api_customer.to_yaml
47
48
  puts '-' * 80
48
49
 
49
- customer_only_fields = Mousetrap::Customer.new \
50
- :first_name => 'first',
51
- :last_name => 'last',
52
- :company => 'company',
53
- :email => 'random@example.com',
54
- :code => customer.code
55
-
56
- customer_only_fields.save
50
+ Mousetrap::Subscription.update customer.code, {
51
+ :billing_first_name => 'x',
52
+ :billing_last_name => 'y',
53
+ :credit_card_number => '5555555555554444',
54
+ :credit_card_expiration_month => '05',
55
+ :credit_card_expiration_year => '2013',
56
+ :billing_zip_code => '31415'
57
+ }
57
58
 
58
59
  api_customer = Mousetrap::Customer[customer.code]
59
60
  puts api_customer.to_yaml
61
+ puts '-' * 80
62
+
63
+ #customer_only_fields = Mousetrap::Customer.new \
64
+ #:first_name => 'first',
65
+ #:last_name => 'last',
66
+ #:company => 'company',
67
+ #:email => 'random@example.com',
68
+ #:code => customer.code
69
+
70
+ #customer_only_fields.save
71
+
72
+ #api_customer = Mousetrap::Customer[customer.code]
73
+ #puts api_customer.to_yaml
60
74
 
61
75
 
62
76
  #code = "rvhljmvenp@example.com"
@@ -1,15 +1,6 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
2
 
3
3
  describe Mousetrap::Subscription do
4
- # subscription:
5
- # ccExpirationDate: "2010-01-31T00:00:00+00:00"
6
- # gatewayToken:
7
- # createdDatetime: "2009-08-27T15:55:51+00:00"
8
- # ccType: visa
9
- # id: 46ad3f1c-e472-102c-a92d-40402145ee8b
10
- # ccLastFour: "1111"
11
- # canceledDatetime:
12
-
13
4
  include Fixtures
14
5
 
15
6
  describe '.[]' do
@@ -63,10 +54,20 @@ describe Mousetrap::Subscription do
63
54
  end
64
55
 
65
56
  describe '.attributes_for_api' do
66
- it 'coerces the month to 2 digits' do
67
- Mousetrap::Subscription.attributes_for_api(
68
- :credit_card_expiration_month => 2
69
- )[:ccExpMonth].should == '02'
57
+ context "when month is set" do
58
+ it 'coerces the month to 2 digits' do
59
+ Mousetrap::Subscription.attributes_for_api(
60
+ :credit_card_expiration_month => 2
61
+ )[:ccExpMonth].should == '02'
62
+ end
63
+ end
64
+
65
+ context "when month is not set" do
66
+ it "is nil" do
67
+ Mousetrap::Subscription.attributes_for_api(
68
+ :credit_card_expiration_month => nil
69
+ )[:ccExpMonth].should == nil
70
+ end
70
71
  end
71
72
  end
72
73
 
@@ -78,4 +79,74 @@ describe Mousetrap::Subscription do
78
79
  end.to raise_error(NotImplementedError, Mousetrap::API_UNSUPPORTED)
79
80
  end
80
81
  end
82
+
83
+ describe '.update' do
84
+ before do
85
+ Mousetrap::Subscription.stub :put_resource => { 'some' => 'hash' }
86
+ end
87
+
88
+ let (:mutated_attributes) do
89
+ {
90
+ :with => 'something',
91
+ :without => nil,
92
+ :also_without => ''
93
+ }
94
+ end
95
+
96
+ def do_update
97
+ Mousetrap::Subscription.update('some customer code', 'some attributes')
98
+ end
99
+
100
+ it "transforms the attribute names for CheddarGetter" do
101
+ Mousetrap::Subscription.should_receive(:attributes_for_api).with('some attributes').and_return({})
102
+ do_update
103
+ end
104
+
105
+ it "deletes unfilled attribute entries" do
106
+
107
+ Mousetrap::Subscription.stub :attributes_for_api => mutated_attributes
108
+
109
+ Mousetrap::Subscription.should_receive(:put_resource).with(
110
+ 'customers',
111
+ 'edit-subscription',
112
+ 'some customer code',
113
+ { :with => 'something' }
114
+ )
115
+
116
+ do_update
117
+ end
118
+
119
+ it "calls put_resource" do
120
+ Mousetrap::Subscription.stub :attributes_for_api => mutated_attributes
121
+
122
+ Mousetrap::Subscription.should_receive(:put_resource).with(
123
+ 'customers',
124
+ 'edit-subscription',
125
+ 'some customer code',
126
+ { :with => 'something' }
127
+ )
128
+
129
+ do_update
130
+ end
131
+
132
+ it "raises a CheddarGetter error if returned" do
133
+ Mousetrap::Subscription.stub \
134
+ :attributes_for_api => mutated_attributes,
135
+ :put_resource => { 'error' => 'some error message' }
136
+
137
+ expect { do_update }.to raise_error('some error message')
138
+ end
139
+ end
81
140
  end
141
+
142
+
143
+ __END__
144
+
145
+ subscription:
146
+ ccExpirationDate: "2010-01-31T00:00:00+00:00"
147
+ gatewayToken:
148
+ createdDatetime: "2009-08-27T15:55:51+00:00"
149
+ ccType: visa
150
+ id: 46ad3f1c-e472-102c-a92d-40402145ee8b
151
+ ccLastFour: "1111"
152
+ canceledDatetime:
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mousetrap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Larkowski
@@ -12,7 +12,7 @@ autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
14
 
15
- date: 2009-10-18 00:00:00 -04:00
15
+ date: 2009-10-22 00:00:00 -04:00
16
16
  default_executable:
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
@@ -76,6 +76,9 @@ files:
76
76
  - lib/mousetrap/resource.rb
77
77
  - lib/mousetrap/subscription.rb
78
78
  - mousetrap.gemspec
79
+ - script/authenticate.rb
80
+ - script/cheddar_getter.example.yml
81
+ - script/console
79
82
  - spec/factories.rb
80
83
  - spec/integration/settings.example.yml
81
84
  - spec/integration/smoke_test.rb