active_record_auto_build_associations 0.0.2 → 0.1.0

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/Readme.md CHANGED
@@ -8,11 +8,22 @@ Now you never have to worry about `NoMethodErrors` when you call `user.address.c
8
8
  If you have an associated that should always be there when you need it, whether as a record that is already saved or (if it hasn't been saved yet), a newly built object, you can just add this to your model:
9
9
 
10
10
  class User < ActiveRecord::Base
11
+ include ActiveRecord::AutoBuildAssociations
11
12
  auto_build_association :address
12
13
  end
13
14
 
14
15
  This makes it so that any time you do `user.address`, if an existing associated record can't be found, it will automatically call `build_address` for you, ensuring that user.address will always be an instance of `Address` (even if a blank one), instead of sometimes being `nil`.
15
16
 
17
+ This can be very convenient for building forms for records with associations (using fields_for).
18
+
19
+ Note: You can't just check `user.address.nil?` to check if the user has supplied an address, because
20
+ `user.address` will *never* be nill when using `auto_build_association`. Instead you can check
21
+ `user.address.persisted?`.
22
+
23
+ Compatibility
24
+ =============
25
+
26
+ Tested with Rails 3.2.
16
27
 
17
28
  To do
18
29
  =====
@@ -20,9 +31,14 @@ To do
20
31
  * Currently it only works for has_one -- make it work for has_many and belongs_to (belongs_to kind of works but not well)
21
32
  * Add tests
22
33
 
34
+ *Warning*: `belongs_to` doesn't work well because the parent record will try to auto-save the associated record
35
+ even if it's blank. In other words, simply checking if the associated record is presented/persisted has unwanted
36
+ **side effects**. So if you call `user.address.persisted?`, that causes the associated address to be
37
+ built, which may cause unexpected behavior/failure when you try to change the user.
38
+
23
39
  License
24
40
  =======
25
41
 
26
- Copyright 2011, Tyler Rick
42
+ Copyright 2011-2012, Tyler Rick
27
43
 
28
44
  This is free software, distributed under the terms of the MIT License.
@@ -4,7 +4,7 @@ require "active_record/auto_build_associations/version"
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "active_record_auto_build_associations"
7
- s.version = ActiveRecord::AutoBuildAssociations::Version
7
+ s.version = ActiveRecord::AutoBuildAssociations.version
8
8
  s.authors = ["Tyler Rick"]
9
9
  s.email = ["tyler@tylerrick.com"]
10
10
  s.homepage = ""
@@ -15,18 +15,17 @@ module ActiveRecord
15
15
  end
16
16
 
17
17
  def self.auto_build_association(assoc_name)
18
- define_method :"#{assoc_name}_with_auto_build" do
18
+ define_method :"#{assoc_name}" do
19
19
  if self.class.auto_build_associations? == false
20
- send(:"#{assoc_name}_without_auto_build")
20
+ super()
21
21
  else
22
- send(:"#{assoc_name}_without_auto_build") || (
22
+ super() || (
23
23
  # TODO: reflect on association; for has_many, it should do assoc_name.build instead
24
24
  send(:"build_#{assoc_name}")
25
- send(:"#{assoc_name}_without_auto_build")
25
+ super()
26
26
  )
27
27
  end
28
28
  end
29
- alias_method_chain :"#{assoc_name}", :auto_build
30
29
  end
31
30
 
32
31
  end # included
@@ -6,5 +6,5 @@ rescue LoadError
6
6
  end
7
7
 
8
8
  module ActiveRecord::AutoBuildAssociations
9
- Version = "0.0.2"
9
+ def self.version; "0.1.0"; end
10
10
  end
metadata CHANGED
@@ -1,39 +1,35 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: active_record_auto_build_associations
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
4
5
  prerelease:
5
- version: 0.0.2
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Tyler Rick
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-08-24 00:00:00 -07:00
14
- default_executable:
15
- dependencies:
16
- - !ruby/object:Gem::Dependency
12
+ date: 2012-11-29 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
17
15
  name: activerecord
18
- prerelease: false
19
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &24482240 !ruby/object:Gem::Requirement
20
17
  none: false
21
- requirements:
22
- - - ">="
23
- - !ruby/object:Gem::Version
24
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
25
22
  type: :runtime
26
- version_requirements: *id001
27
- description: Automatically calls `build_assoc_model` for you, ensuring that model.assoc_model is always an instance of model and not nil.
28
- email:
23
+ prerelease: false
24
+ version_requirements: *24482240
25
+ description: Automatically calls `build_assoc_model` for you, ensuring that model.assoc_model
26
+ is always an instance of model and not nil.
27
+ email:
29
28
  - tyler@tylerrick.com
30
29
  executables: []
31
-
32
30
  extensions: []
33
-
34
31
  extra_rdoc_files: []
35
-
36
- files:
32
+ files:
37
33
  - .gitignore
38
34
  - Gemfile
39
35
  - Rakefile
@@ -42,33 +38,30 @@ files:
42
38
  - lib/active_record/auto_build_associations.rb
43
39
  - lib/active_record/auto_build_associations/version.rb
44
40
  - lib/active_record_auto_build_associations.rb
45
- has_rdoc: true
46
- homepage: ""
41
+ homepage: ''
47
42
  licenses: []
48
-
49
43
  post_install_message:
50
44
  rdoc_options: []
51
-
52
- require_paths:
45
+ require_paths:
53
46
  - lib
54
- required_ruby_version: !ruby/object:Gem::Requirement
47
+ required_ruby_version: !ruby/object:Gem::Requirement
55
48
  none: false
56
- requirements:
57
- - - ">="
58
- - !ruby/object:Gem::Version
59
- version: "0"
60
- required_rubygems_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ! '>='
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
54
  none: false
62
- requirements:
63
- - - ">="
64
- - !ruby/object:Gem::Version
65
- version: "0"
55
+ requirements:
56
+ - - ! '>='
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
66
59
  requirements: []
67
-
68
60
  rubyforge_project:
69
- rubygems_version: 1.5.2
61
+ rubygems_version: 1.8.15
70
62
  signing_key:
71
63
  specification_version: 3
72
- summary: Automatically calls `build_assoc_model` for you, ensuring that model.assoc_model is always an instance of model and not nil.
64
+ summary: Automatically calls `build_assoc_model` for you, ensuring that model.assoc_model
65
+ is always an instance of model and not nil.
73
66
  test_files: []
74
-
67
+ has_rdoc: