cached_belongs_to 0.0.2 → 0.0.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/Rakefile CHANGED
@@ -1,10 +1,7 @@
1
1
  #!/usr/bin/env rake
2
2
  require "bundler/gem_tasks"
3
3
  require 'rspec/core/rake_task'
4
- require 'cucumber/rake/task'
5
4
 
6
5
  RSpec::Core::RakeTask.new
7
6
 
8
- Cucumber::Rake::Task.new
9
-
10
- task :default => [ :spec, :cucumber ]
7
+ task :default => [ :spec ]
@@ -19,8 +19,8 @@ Gem::Specification.new do |gem|
19
19
 
20
20
  gem.add_development_dependency 'autotest'
21
21
  gem.add_development_dependency 'autotest-growl'
22
- gem.add_development_dependency 'cucumber'
23
22
  gem.add_development_dependency 'sqlite3'
23
+
24
24
  gem.add_development_dependency 'rake'
25
25
  gem.add_development_dependency 'rspec'
26
26
  end
@@ -16,29 +16,36 @@ module CachedBelongsTo
16
16
  #
17
17
  def cached_belongs_to(*args)
18
18
  caches = Array(args[1].delete(:caches))
19
- klass = args[0]
20
19
 
21
- belongs_to(*args)
22
- children_callback_name = "cached_belongs_to_#{name.underscore}_callback".to_sym
23
- create_cached_belongs_to_child_callbacks(caches, klass, children_callback_name)
24
- create_cached_belongs_to_parent_callbacks(caches, klass, children_callback_name)
20
+ association = belongs_to(*args)
21
+ create_cached_belongs_to_child_callbacks(caches, association)
22
+ create_cached_belongs_to_parent_callbacks(caches, association)
25
23
  end
26
24
 
27
25
  private
28
- def create_cached_belongs_to_child_callbacks(caches, klass, children_callback_name)
29
- define_method children_callback_name do
26
+
27
+ def cached_belongs_to_child_callback_name(association)
28
+ "cached_belongs_to_#{association.name}_child_callback"
29
+ end
30
+
31
+ def create_cached_belongs_to_child_callbacks(caches, association)
32
+ klass = association.name
33
+ define_method cached_belongs_to_child_callback_name(association) do
30
34
  caches.each do |attr|
31
35
  send("#{klass}_#{attr}=", send(klass).send(attr)) if send(klass)
32
36
  end
33
37
  end
34
38
 
35
- before_save children_callback_name
39
+ before_save cached_belongs_to_child_callback_name(association)
36
40
  end
37
41
 
38
- def create_cached_belongs_to_parent_callbacks(caches, parent_class_name, children_callback_name)
39
- method_name = "cached_belongs_to_#{parent_class_name}_callback".to_sym
40
- has_many_association = self.name.underscore.pluralize.to_sym
41
- parent_class = parent_class_name.to_s.camelize.constantize
42
+ def create_cached_belongs_to_parent_callbacks(caches, association)
43
+ parent_class_name = association.name
44
+ method_name = "cached_belongs_to_#{parent_class_name}_parent_callback".to_sym
45
+ has_many_association = self.name.demodulize.underscore.pluralize.to_sym
46
+ children_callback_name = cached_belongs_to_child_callback_name(association)
47
+ # What is this? I don't even...
48
+ parent_class = association.klass.name.constantize
42
49
 
43
50
  parent_class.send(:define_method, method_name) do
44
51
  send(has_many_association).reload.each do |child|
@@ -1,3 +1,3 @@
1
1
  module CachedBelongsTo
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -17,7 +17,7 @@ describe CachedBelongsTo do
17
17
  author_class
18
18
  end
19
19
 
20
- it "Adds the cached_belongs_to class method to ActiveRecord models" do
20
+ specify do
21
21
  book_class.should respond_to(:cached_belongs_to)
22
22
  end
23
23
 
@@ -26,20 +26,20 @@ describe CachedBelongsTo do
26
26
  book_class.send(:cached_belongs_to, :author, { :caches => :name })
27
27
  end
28
28
 
29
- it "creates the belongs_to association as usual" do
29
+ specify do
30
30
  book_class.new.should respond_to(:author)
31
31
  end
32
32
 
33
- it "defines the cached_belongs_to_book_callback" do
34
- book_class.new.should respond_to(:cached_belongs_to_book_callback)
33
+ specify do
34
+ book_class.new.should respond_to(:cached_belongs_to_author_child_callback)
35
35
  end
36
36
 
37
- it "defines the cached_belongs_to_author_callback" do
38
- author_class.new.should respond_to(:cached_belongs_to_author_callback)
37
+ specify do
38
+ author_class.new.should respond_to(:cached_belongs_to_author_parent_callback)
39
39
  end
40
40
  end
41
41
 
42
- context "cached_belongs_to_book_callback" do
42
+ context "cached_belongs_to_author_child_callback" do
43
43
  before do
44
44
  book_class.send(:cached_belongs_to, :author, { :caches => :name })
45
45
  end
@@ -51,12 +51,12 @@ describe CachedBelongsTo do
51
51
 
52
52
  book.stub(:author).and_return author
53
53
 
54
- book.cached_belongs_to_book_callback
54
+ book.cached_belongs_to_author_child_callback
55
55
  book.author_name.should eq author.name
56
56
  end
57
57
  end
58
58
 
59
- context "cached_belongs_to_author_callback" do
59
+ context "cached_belongs_to_author_parent_callback" do
60
60
  before do
61
61
  book_class.send(:cached_belongs_to, :author, { :caches => :name })
62
62
  author_class.send(:has_many, :books)
@@ -67,10 +67,10 @@ describe CachedBelongsTo do
67
67
  book = book_class.new
68
68
 
69
69
  author.stub_chain(:books, :reload).and_return([ book ])
70
- book.should_receive(:cached_belongs_to_book_callback)
70
+ book.should_receive(:cached_belongs_to_author_child_callback)
71
71
  book.should_receive :save
72
72
 
73
- author.cached_belongs_to_author_callback
73
+ author.cached_belongs_to_author_parent_callback
74
74
  end
75
75
  end
76
76
  end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+
3
+ module Rankat
4
+ class Author < ActiveRecord::Base
5
+ has_many :books
6
+ end
7
+
8
+ class Book < ActiveRecord::Base
9
+ cached_belongs_to :author, :caches => :name
10
+ end
11
+ end
12
+
13
+ describe "Callbacks" do
14
+ before do
15
+ @author = Rankat::Author.create :name => 'John Mellencamp'
16
+ @book = Rankat::Book.new :title => 'Treasure Island'
17
+ @book.author = @author
18
+ @book.save!
19
+
20
+ @author.books << @book
21
+ end
22
+
23
+ describe "child callback" do
24
+ specify do
25
+ @book.reload.author_name.should == 'John Mellencamp'
26
+ end
27
+ end
28
+
29
+ describe "parent callback" do
30
+ specify do
31
+ @author.name = 'Dick Tracy'
32
+ expect { @author.save; @book.reload }.to change(@book, :author_name).to('Dick Tracy')
33
+ end
34
+ end
35
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cached_belongs_to
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
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: 2012-10-01 00:00:00.000000000 Z
12
+ date: 2012-10-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -59,22 +59,6 @@ dependencies:
59
59
  - - ! '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
- - !ruby/object:Gem::Dependency
63
- name: cucumber
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ! '>='
68
- - !ruby/object:Gem::Version
69
- version: '0'
70
- type: :development
71
- prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
62
  - !ruby/object:Gem::Dependency
79
63
  name: sqlite3
80
64
  requirement: !ruby/object:Gem::Requirement
@@ -140,15 +124,10 @@ files:
140
124
  - Rakefile
141
125
  - cached_belongs_to.gemspec
142
126
  - config/cucumber.yml
143
- - features/step_definitions/.gitkeep
144
- - features/step_definitions/active_record_model_steps.rb
145
- - features/step_definitions/cached_belongs_to_steps.rb
146
- - features/support/env.rb
147
- - features/update_cached_attributes_after_save_child_record.feature
148
- - features/update_cached_attributes_after_save_parent_record.feature
149
127
  - lib/cached_belongs_to.rb
150
128
  - lib/cached_belongs_to/version.rb
151
129
  - spec/cached_belongs_to_spec.rb
130
+ - spec/integration/callbacks_spec.rb
152
131
  - spec/spec_helper.rb
153
132
  - spec/support/warnings.rb
154
133
  homepage: ''
@@ -165,7 +144,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
165
144
  version: '0'
166
145
  segments:
167
146
  - 0
168
- hash: -1027759858126045779
147
+ hash: -168795518375412283
169
148
  required_rubygems_version: !ruby/object:Gem::Requirement
170
149
  none: false
171
150
  requirements:
@@ -174,7 +153,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
174
153
  version: '0'
175
154
  segments:
176
155
  - 0
177
- hash: -1027759858126045779
156
+ hash: -168795518375412283
178
157
  requirements: []
179
158
  rubyforge_project:
180
159
  rubygems_version: 1.8.23
@@ -182,12 +161,7 @@ signing_key:
182
161
  specification_version: 3
183
162
  summary: Denormalize your belongs_to associations
184
163
  test_files:
185
- - features/step_definitions/.gitkeep
186
- - features/step_definitions/active_record_model_steps.rb
187
- - features/step_definitions/cached_belongs_to_steps.rb
188
- - features/support/env.rb
189
- - features/update_cached_attributes_after_save_child_record.feature
190
- - features/update_cached_attributes_after_save_parent_record.feature
191
164
  - spec/cached_belongs_to_spec.rb
165
+ - spec/integration/callbacks_spec.rb
192
166
  - spec/spec_helper.rb
193
167
  - spec/support/warnings.rb
File without changes
@@ -1,39 +0,0 @@
1
- Given /^model "(.*?)" exists with attributes:$/ do |model_class_name, attributes|
2
- klass = Class.new(ActiveRecord::Base)
3
- suppress_warnings { Object.const_set model_class_name, klass }
4
-
5
- ActiveRecord::Schema.define(:version => 0) do
6
- create_table model_class_name.tableize, :force => true do |t|
7
- attributes.hashes.each do |row|
8
- t.send(row["type"], row["attribute"])
9
- end
10
- end
11
- end
12
- end
13
-
14
- Given /^a (.*?) exists:$/ do |model_name, table|
15
- @models ||= {}
16
- @models[model_name] = model_name.constantize.new
17
- table.rows_hash.each do |attribute, value|
18
- @models[model_name].send("#{attribute}=", value)
19
- end
20
- @models[model_name].save!
21
- end
22
-
23
- Given /^that (.*?) belongs to that (.*?)$/ do |child, parent|
24
- @models[parent].send(child.underscore.pluralize).send(:push, @models[child])
25
-
26
- #@models[child].send("#{parent.underscore}=", @models[parent])
27
- end
28
-
29
- When /^I save the (.*?)$/ do |model_name|
30
- @models[model_name].save!
31
- end
32
-
33
- When /^I change the (.*?)'s name to "(.*?)"$/ do |model_name, new_name|
34
- @models[model_name].name = new_name
35
- end
36
-
37
- Given /^(.*?) has many (.*?)$/ do |parent, child|
38
- parent.constantize.send(:has_many, child.underscore)
39
- end
@@ -1,7 +0,0 @@
1
- Given /^(.*?) cached_belongs_to (.*?) with cached: "(.*?)"$/ do |model1, model2, cached_attribute|
2
- model1.constantize.send(:cached_belongs_to, model2.underscore.to_sym, :caches => cached_attribute)
3
- end
4
-
5
- Then /^(.*?)'s author name should be "(.*?)"$/ do |model_name, author_name|
6
- @models[model_name].reload.author_name.should == author_name
7
- end
@@ -1,6 +0,0 @@
1
- require 'cached_belongs_to'
2
- require './spec/support/warnings.rb'
3
-
4
- ActiveRecord::Migration.verbose = false
5
- ActiveRecord::Base.logger = Logger.new("test.log")
6
- ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:"
@@ -1,20 +0,0 @@
1
- Feature: Update cached attributes after saving the child record
2
-
3
- Scenario:
4
- Given model "Author" exists with attributes:
5
- | attribute | type |
6
- | name | string |
7
- And model "Book" exists with attributes:
8
- | attribute | type |
9
- | title | string |
10
- | author_id | integer |
11
- | author_name | string |
12
- And Book cached_belongs_to Author with cached: "name"
13
- And Author has many Books
14
- And a Author exists:
15
- | name | John Mellencamp |
16
- And a Book exists:
17
- | title | Treasure Island |
18
- And that Book belongs to that Author
19
- When I save the Book
20
- Then Book's author name should be "John Mellencamp"
@@ -1,21 +0,0 @@
1
- Feature: Update cached attributes after saving the parent record
2
-
3
- Scenario:
4
- Given model "Author" exists with attributes:
5
- | attribute | type |
6
- | name | string |
7
- And model "Book" exists with attributes:
8
- | attribute | type |
9
- | title | string |
10
- | author_id | integer |
11
- | author_name | string |
12
- And Book cached_belongs_to Author with cached: "name"
13
- And Author has many Books
14
- And a Author exists:
15
- | name | John Mellencamp |
16
- And a Book exists:
17
- | title | Treasure Island |
18
- And that Book belongs to that Author
19
- When I change the Author's name to "Deeprak Chopa"
20
- And I save the Author
21
- Then Book's author name should be "Deeprak Chopa"