cheddargetter_client_rails 0.1.8 → 0.1.14

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.8
1
+ 0.1.14
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{cheddargetter_client_rails}
8
- s.version = "0.1.8"
8
+ s.version = "0.1.14"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Brent Wooden"]
12
- s.date = %q{2011-05-11}
12
+ s.date = %q{2011-05-15}
13
13
  s.description = %q{Integrates CheddarGetter api with Active Record. Uses cheddargetter_client_ruby.}
14
14
  s.email = %q{brent.wooden@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -31,9 +31,16 @@ Gem::Specification.new do |s|
31
31
  "features/support/env.rb",
32
32
  "lib/cheddargetter_client_rails.rb",
33
33
  "lib/cheddargetter_client_rails/subscription.rb",
34
+ "lib/generators/cheddargetter/USAGE",
35
+ "lib/generators/cheddargetter/cheddargetter_generator.rb",
36
+ "lib/generators/cheddargetter/templates/cheddargetter.yml",
37
+ "lib/generators/cheddargetter/templates/cheddargetter_client.rb",
38
+ "lib/rails/record_identifier.rb",
34
39
  "spec/cheddargetter_client_rails/subscription_spec.rb",
35
40
  "spec/cheddargetter_client_rails_spec.rb",
36
41
  "spec/fixtures/users.yml",
42
+ "spec/generator_spec.rb",
43
+ "spec/record_identifier_spec.rb",
37
44
  "spec/spec_helper.rb"
38
45
  ]
39
46
  s.homepage = %q{http://github.com/BrentW/cheddargetter_client_rails}
@@ -1,5 +1,7 @@
1
1
  require 'active_support'
2
+ require 'action_controller/record_identifier'
2
3
  require 'cheddargetter_client_ruby'
4
+ require 'rails/record_identifier'
3
5
 
4
6
  module CheddargetterClientRails
5
7
  autoload :Subscription, 'cheddargetter_client_rails/subscription'
@@ -48,7 +50,10 @@ module CheddargetterClientRails
48
50
  end
49
51
 
50
52
  def customer_code_column_value
51
- send(self.class.send(:customer_code_column)) if self.class.send(:customer_code_column)
53
+ if self.class.send(:customer_code_column)
54
+ value = send(self.class.send(:customer_code_column))
55
+ value.to_s if value.try(:to_s).present?
56
+ end
52
57
  end
53
58
 
54
59
  def build_subscription(attributes_hash)
@@ -76,15 +81,22 @@ module CheddargetterClientRails
76
81
  end
77
82
 
78
83
  module ClassMethods
79
- def cheddargetter_billable_on(*args)
80
- raise ArgumentError.new('Must supply customer code column.') if args.length < 1
81
- self.customer_code_column = args.shift
84
+ def has_subscription(args = {})
85
+ self.customer_code_column = args.delete(:customerCode) || :id
82
86
  raise ArgumentError.new("Record does not respond to #{customer_code_column.to_s}.") if !responds_to_customer_code_column?
83
87
 
84
- if args.length > 0
85
- self.shared_columns = args.shift[:shared_columns]
88
+ shared = {}
89
+ shared[:email] = args.delete(:email) || :email
90
+ shared[:firstName] = args.delete(:firstName) || :first_name
91
+ shared[:lastName] = args.delete(:lastName) || :last_name
92
+ shared[:planCode] = args.delete(:planCode) || :plan_code
93
+
94
+ args.each do |key, value|
95
+ shared[key] = value
86
96
  end
87
97
 
98
+ self.shared_columns = shared
99
+
88
100
  attr_accessor :skip_cheddargetter
89
101
 
90
102
  validate :validate_subscription
@@ -117,4 +129,4 @@ end
117
129
 
118
130
  class ActiveRecord::Base
119
131
  include CheddargetterClientRails
120
- end
132
+ end
@@ -0,0 +1,11 @@
1
+ Description:
2
+ The cheddargetter generator creates YAML file in your config
3
+ directory and an initializer to load this config. The config has a
4
+ separate section for each environment. Please fill in the YAML with
5
+ your CheddarGetter account credentials.
6
+
7
+ Examples:
8
+ rails generate cheddargetter
9
+
10
+ Config: config/cheddargetter.yml
11
+ Initializer: config/initializers/cheddargetter_client.rb
@@ -0,0 +1,11 @@
1
+ class CheddargetterGenerator < Rails::Generators::Base
2
+ source_root File.expand_path('../templates', __FILE__)
3
+
4
+ def generate_initializer
5
+ copy_file "cheddargetter_client.rb", "config/initializers/cheddargetter_client.rb"
6
+ end
7
+
8
+ def generate_config
9
+ copy_file "cheddargetter.yml", "config/cheddargetter.yml"
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ development: &development
2
+ username: youremail@example.com
3
+ password: youraccountpassword
4
+ product_code: YOUR_DEVELOPMENT_PRODUCT_CODE
5
+
6
+ test:
7
+ <<: *development
8
+ product_code: YOUR_TEST_PRODUCT_CODE
9
+
10
+ production:
11
+ <<: *development
12
+ product_code: YOUR_PRODUCTION_PRODUCT_CODE
@@ -0,0 +1,6 @@
1
+ cheddargetter_config = YAML.load_file(File.join(Rails.root, 'config', 'cheddargetter.yml'))[Rails.env]
2
+ CGClient = CheddarGetter::Client.new(
3
+ :product_code => cheddargetter_config['product_code'],
4
+ :username => cheddargetter_config['username'],
5
+ :password => cheddargetter_config['password']
6
+ )
@@ -0,0 +1,7 @@
1
+ module ActionController::RecordIdentifier
2
+ def dom_class(record_or_class, prefix = nil)
3
+ singular = ActiveModel::Naming.singular(record_or_class)
4
+ value = prefix ? "#{prefix}#{JOIN}#{singular}" : singular
5
+ value == "cheddargetter_client_rails_subscription" ? "subscription" : value
6
+ end
7
+ end
@@ -5,25 +5,23 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
5
5
  describe "CheddargetterClientRails" do
6
6
  before {
7
7
  class TestUser < ActiveRecord::Base
8
- attr_accessor :customer_code, :first_name, :last_name, :plan_code
8
+ attr_accessor :customer_code, :first_name, :last_name, :plan_code, :email
9
9
 
10
10
  def self.column_names
11
11
  []
12
12
  end
13
13
 
14
- cheddargetter_billable_on :customer_code, :shared_columns => {
15
- :firstName => :first_name,
16
- :lastName => :last_name,
17
- :ccFirstName => :first_name,
18
- :ccLastName => :last_name,
19
- :planCode => :plan_code
20
- }
21
-
22
-
14
+ has_subscription :customerCode => :customer_code,
15
+ :firstName => :first_name,
16
+ :lastName => :last_name,
17
+ :ccFirstName => :first_name,
18
+ :ccLastName => :last_name,
19
+ :planCode => :plan_code
20
+
23
21
  end
24
22
  }
25
23
 
26
- before { TestUser.stub(:connection).and_return mock(:columns => []) }
24
+ before { ActiveRecord::Base.stub(:connection).and_return mock(:columns => []) }
27
25
 
28
26
  let(:user_class) {
29
27
  TestUser
@@ -39,18 +37,20 @@ describe "CheddargetterClientRails" do
39
37
  end
40
38
 
41
39
  describe "inclusion of class methods" do
42
- subject { user_class.respond_to?(:cheddargetter_billable_on) }
40
+ subject { user_class.respond_to?(:has_subscription) }
43
41
 
44
42
  it { should be_true }
45
43
  end
46
44
 
47
- describe 'cheddargetter_billable_on' do
45
+ describe 'has_subscription' do
48
46
  context 'argument errors' do
49
47
  context 'without customer code column' do
50
48
  subject {
51
49
  class NoCustomerCodeUser < ActiveRecord::Base
52
- cheddargetter_billable_on
50
+ has_subscription
53
51
  end
52
+ NoCustomerCodeUser.stub(:connection).and_return mock(:columns => [])
53
+
54
54
  }
55
55
 
56
56
  specify { lambda { subject }.should raise_error(ArgumentError) }
@@ -59,13 +59,34 @@ describe "CheddargetterClientRails" do
59
59
  context 'when record does not responsd to customer_code_column' do
60
60
  subject {
61
61
  class NoCustomerCodeUser < ActiveRecord::Base
62
- cheddargetter_billable_on :id
62
+ has_subscription :id
63
63
  end
64
64
  }
65
65
  specify { lambda { subject }.should raise_error }
66
66
  end
67
67
  end
68
68
 
69
+ context 'setting default values' do
70
+ subject {
71
+ class DefaultValuesUser < ActiveRecord::Base
72
+ attr_accessor :id, :email, :first_name, :last_name, :plan_code
73
+
74
+ has_subscription
75
+ end
76
+ }
77
+
78
+ specify { lambda { subject }.should_not raise_error }
79
+ specify {
80
+ subject;
81
+ DefaultValuesUser.shared_columns.should eq({
82
+ :email => :email,
83
+ :firstName => :first_name,
84
+ :lastName => :last_name,
85
+ :planCode => :plan_code
86
+ })
87
+ }
88
+ end
89
+
69
90
  context 'setting customer_code_column' do
70
91
  subject { user_class.customer_code_column }
71
92
  it { should eq(:customer_code) }
@@ -77,7 +98,8 @@ describe "CheddargetterClientRails" do
77
98
  :lastName => :last_name,
78
99
  :ccFirstName => :first_name,
79
100
  :ccLastName => :last_name,
80
- :planCode => :plan_code
101
+ :planCode => :plan_code,
102
+ :email => :email
81
103
  )
82
104
  }
83
105
  end
@@ -214,7 +236,7 @@ describe "CheddargetterClientRails" do
214
236
  ['customer_code']
215
237
  end
216
238
 
217
- cheddargetter_billable_on :customer_code
239
+ has_subscription :customerCode => :customer_code
218
240
  end
219
241
  }
220
242
 
@@ -240,9 +262,9 @@ describe "CheddargetterClientRails" do
240
262
  'TEST_CODE'
241
263
  end
242
264
 
243
- p 'Make not that if method and not column, then it must be declared before cheddargetter_billable_on'
265
+ p 'Make not that if method and not column, then it must be declared before has_subscription'
244
266
 
245
- cheddargetter_billable_on :customer_code
267
+ has_subscription :customerCode => :customer_code
246
268
  end
247
269
  }
248
270
 
@@ -263,7 +285,7 @@ describe "CheddargetterClientRails" do
263
285
  []
264
286
  end
265
287
 
266
- cheddargetter_billable_on :customer_code
288
+ has_subscription :customer_code
267
289
  end
268
290
  }
269
291
 
@@ -436,6 +458,11 @@ describe "CheddargetterClientRails" do
436
458
  it { should eq('Customer Code') }
437
459
  end
438
460
 
461
+ context 'when the customer_code_column is set and it is an integeter' do
462
+ before { user.customer_code = 12345 }
463
+ it { should eq('12345') }
464
+ end
465
+
439
466
  context 'when customer_code_column is not set' do
440
467
  before { user.class.stub(:customer_code_column).and_return nil }
441
468
  it { should be_nil }
@@ -0,0 +1,6 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+ require 'rails_generator'
3
+ require 'rails_generator/scripts/generate'
4
+
5
+ describe "CheddargetterClientRails" do
6
+ end
@@ -0,0 +1,51 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "RecordIdentifier" do
4
+ before {
5
+ class TestUser < ActiveRecord::Base
6
+ attr_accessor :customer_code, :first_name, :last_name, :plan_code, :email
7
+
8
+ def self.column_names
9
+ []
10
+ end
11
+
12
+ has_subscription :customerCode => :customer_code,
13
+ :firstName => :first_name,
14
+ :lastName => :last_name,
15
+ :ccFirstName => :first_name,
16
+ :ccLastName => :last_name,
17
+ :planCode => :plan_code
18
+
19
+ end
20
+ }
21
+
22
+ before { ActiveRecord::Base.stub(:connection).and_return mock(:columns => []) }
23
+
24
+ describe 'dom_class(record)' do
25
+ subject { ActionController::RecordIdentifier.dom_class(value) }
26
+
27
+ context 'called with class' do
28
+ context 'called with a CheddargetterClientRails::Subscription class' do
29
+ let(:value) { CheddargetterClientRails::Subscription }
30
+ it { should eq("subscription") }
31
+ end
32
+
33
+ context 'called with other classes' do
34
+ let(:value) { TestUser }
35
+ it { should eq("test_user") }
36
+ end
37
+ end
38
+
39
+ context 'called with object' do
40
+ context 'called with a CheddargetterClientRails::Subscription class' do
41
+ let(:value) { CheddargetterClientRails::Subscription.new }
42
+ it { should eq("subscription") }
43
+ end
44
+
45
+ context 'called with other classes' do
46
+ let(:value) { TestUser.new }
47
+ it { should eq("test_user") }
48
+ end
49
+ end
50
+ end
51
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cheddargetter_client_rails
3
3
  version: !ruby/object:Gem::Version
4
- hash: 11
4
+ hash: 7
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 8
10
- version: 0.1.8
9
+ - 14
10
+ version: 0.1.14
11
11
  platform: ruby
12
12
  authors:
13
13
  - Brent Wooden
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-05-11 00:00:00 -04:00
18
+ date: 2011-05-15 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -134,9 +134,16 @@ files:
134
134
  - features/support/env.rb
135
135
  - lib/cheddargetter_client_rails.rb
136
136
  - lib/cheddargetter_client_rails/subscription.rb
137
+ - lib/generators/cheddargetter/USAGE
138
+ - lib/generators/cheddargetter/cheddargetter_generator.rb
139
+ - lib/generators/cheddargetter/templates/cheddargetter.yml
140
+ - lib/generators/cheddargetter/templates/cheddargetter_client.rb
141
+ - lib/rails/record_identifier.rb
137
142
  - spec/cheddargetter_client_rails/subscription_spec.rb
138
143
  - spec/cheddargetter_client_rails_spec.rb
139
144
  - spec/fixtures/users.yml
145
+ - spec/generator_spec.rb
146
+ - spec/record_identifier_spec.rb
140
147
  - spec/spec_helper.rb
141
148
  has_rdoc: true
142
149
  homepage: http://github.com/BrentW/cheddargetter_client_rails