delegate_all_for 0.0.7 → 0.0.8
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/lib/delegate_all_for/version.rb +1 -1
- data/lib/delegate_all_for.rb +1 -14
- data/spec/delegate_all_for/delegate_all_for_spec.rb +3 -23
- metadata +80 -52
data/lib/delegate_all_for.rb
CHANGED
@@ -41,20 +41,7 @@ module DelegateAllFor
|
|
41
41
|
class_eval <<-eoruby, __FILE__, __LINE__ + 1
|
42
42
|
delegate :#{method}, #{delegate_opts}
|
43
43
|
delegate :#{method}?, #{delegate_opts}
|
44
|
-
|
45
|
-
|
46
|
-
# Create the setter with support for using nested attributes to set it if the delegated object is not present
|
47
|
-
exception = %(raise "#{self}##{method_prefix}#{method} delegated to #{to}.#{method}, but #{to} is nil: \#{self.inspect}")
|
48
|
-
class_eval <<-eoruby, __FILE__, __LINE__ + 1
|
49
|
-
def #{method_prefix}#{method}=(*args, &block) # def customer_name(*args, &block)
|
50
|
-
if #{to} || #{to}.respond_to?(:#{method}) # if client || client.respond_to?(:name)
|
51
|
-
#{to}.__send__(:#{method}=, *args, &block) # client.__send__(:name, *args, &block)
|
52
|
-
elsif self.respond_to?(:#{to}_attributes=) # elsif self.respond_to?(:client_attributes=)
|
53
|
-
self.__send__(:#{to}_attributes=, :#{method} => args.first, &block) # self.__send__(:client_attributes=, :name => args.first, &block)
|
54
|
-
else # else
|
55
|
-
#{exception} # # add helpful exception
|
56
|
-
end # end
|
57
|
-
end # end
|
44
|
+
delegate :#{method}=, #{delegate_opts.merge(allow_nil: false)} # allow_nil true leads to unintuitive behavior
|
58
45
|
eoruby
|
59
46
|
end
|
60
47
|
else
|
@@ -42,6 +42,9 @@ describe DelegateAllFor do
|
|
42
42
|
describe ':allow_nil option' do
|
43
43
|
subject { Parent.new }
|
44
44
|
its(:four) { should be_nil }
|
45
|
+
it 'does not set allow_nil on setters' do
|
46
|
+
lambda { subject.four = 'FOUR' }.should raise_error RuntimeError
|
47
|
+
end
|
45
48
|
end
|
46
49
|
|
47
50
|
describe 'delegates to child attributes' do
|
@@ -55,29 +58,6 @@ describe DelegateAllFor do
|
|
55
58
|
it 'does not delegate to timestamp attributes' do
|
56
59
|
lambda { subject.created_at }.should raise_error NoMethodError
|
57
60
|
end
|
58
|
-
|
59
|
-
describe 'writer' do
|
60
|
-
it 'sets the value using delegation if child is set' do
|
61
|
-
subject.child.should be_an_instance_of(Child)
|
62
|
-
subject.four = 'FOUR'
|
63
|
-
subject.four.should == 'FOUR'
|
64
|
-
subject.child.four.should == 'FOUR'
|
65
|
-
end
|
66
|
-
|
67
|
-
it 'sets the value using nested attributes if child is not set and nested attributes are supported' do
|
68
|
-
class NestedParent < Parent; accepts_nested_attributes_for :child end
|
69
|
-
subject = NestedParent.new
|
70
|
-
subject.four = 'FOUR'
|
71
|
-
subject.child.should be_an_instance_of(Child)
|
72
|
-
subject.four.should == 'FOUR'
|
73
|
-
subject.child.four.should == 'FOUR'
|
74
|
-
end
|
75
|
-
|
76
|
-
it 'raises an exception if child is not set' do
|
77
|
-
subject = Parent.new
|
78
|
-
lambda { subject.four = 'FOUR' }.should raise_error RuntimeError
|
79
|
-
end
|
80
|
-
end
|
81
61
|
end
|
82
62
|
|
83
63
|
describe 'guards against user error' do
|
metadata
CHANGED
@@ -1,67 +1,89 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: delegate_all_for
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 8
|
9
|
+
version: 0.0.8
|
6
10
|
platform: ruby
|
7
|
-
authors:
|
11
|
+
authors:
|
8
12
|
- Jason Rust
|
9
13
|
autorequire:
|
10
14
|
bindir: bin
|
11
15
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
16
|
+
|
17
|
+
date: 2012-05-09 00:00:00 -07:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
15
21
|
name: activerecord
|
16
|
-
|
17
|
-
|
18
|
-
requirements:
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
19
25
|
- - ~>
|
20
|
-
- !ruby/object:Gem::Version
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 3
|
29
|
+
- 2
|
30
|
+
- 3
|
21
31
|
version: 3.2.3
|
22
32
|
type: :runtime
|
23
|
-
|
24
|
-
|
25
|
-
- !ruby/object:Gem::Dependency
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
26
35
|
name: rake
|
27
|
-
|
28
|
-
|
29
|
-
requirements:
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
30
39
|
- - ~>
|
31
|
-
- !ruby/object:Gem::Version
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 0
|
43
|
+
- 9
|
44
|
+
- 2
|
45
|
+
- 2
|
32
46
|
version: 0.9.2.2
|
33
47
|
type: :development
|
34
|
-
|
35
|
-
|
36
|
-
- !ruby/object:Gem::Dependency
|
48
|
+
version_requirements: *id002
|
49
|
+
- !ruby/object:Gem::Dependency
|
37
50
|
name: rspec
|
38
|
-
|
39
|
-
|
40
|
-
requirements:
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
41
54
|
- - ~>
|
42
|
-
- !ruby/object:Gem::Version
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
segments:
|
57
|
+
- 2
|
58
|
+
- 9
|
59
|
+
- 0
|
43
60
|
version: 2.9.0
|
44
61
|
type: :development
|
45
|
-
|
46
|
-
|
47
|
-
- !ruby/object:Gem::Dependency
|
62
|
+
version_requirements: *id003
|
63
|
+
- !ruby/object:Gem::Dependency
|
48
64
|
name: sqlite3
|
49
|
-
|
50
|
-
|
51
|
-
requirements:
|
65
|
+
prerelease: false
|
66
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
52
68
|
- - ~>
|
53
|
-
- !ruby/object:Gem::Version
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
segments:
|
71
|
+
- 1
|
72
|
+
- 3
|
73
|
+
- 6
|
54
74
|
version: 1.3.6
|
55
75
|
type: :development
|
56
|
-
|
57
|
-
version_requirements: *70148514383080
|
76
|
+
version_requirements: *id004
|
58
77
|
description: Easy delegation of all columns of an ActiveRecord association
|
59
|
-
email:
|
78
|
+
email:
|
60
79
|
- jason@lessonplanet.com
|
61
80
|
executables: []
|
81
|
+
|
62
82
|
extensions: []
|
83
|
+
|
63
84
|
extra_rdoc_files: []
|
64
|
-
|
85
|
+
|
86
|
+
files:
|
65
87
|
- .gitignore
|
66
88
|
- .rspec
|
67
89
|
- Gemfile
|
@@ -74,31 +96,37 @@ files:
|
|
74
96
|
- spec/delegate_all_for/delegate_all_for_spec.rb
|
75
97
|
- spec/spec_helper.rb
|
76
98
|
- spec/support/active_record.rb
|
99
|
+
has_rdoc: true
|
77
100
|
homepage: https://github.com/LessonPlanet/delegate_all_for
|
78
101
|
licenses: []
|
102
|
+
|
79
103
|
post_install_message:
|
80
104
|
rdoc_options: []
|
81
|
-
|
105
|
+
|
106
|
+
require_paths:
|
82
107
|
- lib
|
83
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
requirements:
|
92
|
-
- -
|
93
|
-
- !ruby/object:Gem::Version
|
94
|
-
|
108
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
segments:
|
113
|
+
- 0
|
114
|
+
version: "0"
|
115
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
segments:
|
120
|
+
- 0
|
121
|
+
version: "0"
|
95
122
|
requirements: []
|
123
|
+
|
96
124
|
rubyforge_project:
|
97
|
-
rubygems_version: 1.
|
125
|
+
rubygems_version: 1.3.6
|
98
126
|
signing_key:
|
99
127
|
specification_version: 3
|
100
128
|
summary: Easy delegation of all columns of an ActiveRecord association
|
101
|
-
test_files:
|
129
|
+
test_files:
|
102
130
|
- spec/delegate_all_for/delegate_all_for_spec.rb
|
103
131
|
- spec/spec_helper.rb
|
104
132
|
- spec/support/active_record.rb
|