default_value_for 3.0.0.1 → 3.0.1

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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MjIwODA2ZmY4NDNlMmE3ZjNmZDY3MzQxYzU5MGRkOWJmNjcxMGJjNw==
4
+ ZmIyZjZlMTY4ZmZkYjhkMmQ4NDBjYmVjNjU5Mjc1YzE4N2U1NThlMw==
5
5
  data.tar.gz: !binary |-
6
- M2IwNmY5NDIxMWZkOTlmODExYzFkOTZmZmFlNDc0ODhmYzIyODRkZA==
6
+ NTU2M2Y3MTM4OGYwOTMzZTUwNWM1NmVlMmYxNzRlMTAwOTY5MWJhMw==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NGNiN2MwM2RlNTBhMGQ3NjEwYmEwMjljMzA5MTk5MWI2NDlmOTI0MzdlN2M4
10
- MWRjZTY2OTU2NWQxYzkzYWZjOWQ0YzYyNDY1YmRmNzU0NmQ5OGJlZDY2OWJk
11
- ZTIzNTE0ZWNlMDAwMzdmN2Y1YzAzY2YxMDYyMWQyZWIyMmZhYjY=
9
+ YTMxYWQ0MzBlZGVkNGExNzI0NGY0ODBmOGQyNzI1OWUyOTZhYzA3MzBiMWRi
10
+ YTIzYTZlMzNkNWFjZmJmMjA3ZWI3ODg0MGY2NWRiNzNkMGM2NGUxOTU5ODU0
11
+ MjVjYzAzZjQ0MWViYWM5OTA3MWZmOTU4YjdhMTZlNDZkMzA1ZGM=
12
12
  data.tar.gz: !binary |-
13
- ZjcyMWI2ZDRhMTVmZTZiNmJkYmVmZDA3NjcwNDRjM2Q3MzkyNmZjMDQ5YmU0
14
- NDRmMTgzYjZjNDBhMDYwNjE1NjI5OTMxYmVjOTlkM2VmYzVlZDM5MGYwNjFl
15
- NjQ5NDJjOWU5YzQxZjQyYTE0ZjZkN2Q5NTU3Y2EyNDRjMmEwYTE=
13
+ ZjQwNDIwOTJmNTFhMmQ2YjljYTdjMmZkNjk0MjAzY2JhZTI0MDkxY2JiM2Q3
14
+ Y2ExOTA2MjM4ZWE4YjQ4NzMzZWM5OGU1ZGVjYjJmMjMwZDkxY2Q2ODFkNTFj
15
+ NzcyNDAxMWI0ZTE1M2NkNjEwYmI5OWRiY2FmODhiZWI1Y2M4MTQ=
data/README.md CHANGED
@@ -20,7 +20,7 @@ u.last_seen # => Mon Sep 22 17:28:38 +0200 2008
20
20
 
21
21
  ## Installation
22
22
 
23
- ### Rails 3.2 - 4.1 / Ruby 1.9.3 and higher
23
+ ### Rails 3.2 - 4.2 / Ruby 1.9.3 and higher
24
24
 
25
25
  The current version of default_value_for (3.0.x) is compatible with Rails 3.2 or higher, and Ruby 1.9.3 and higher.
26
26
 
data/Rakefile CHANGED
@@ -5,7 +5,7 @@ task :test do
5
5
  ruby "test.rb"
6
6
  end
7
7
 
8
- ['3.2', '4.0', '4.1'].each do |version|
8
+ ['3.2', '4.0', '4.1', '4.2'].each do |version|
9
9
  dotless = version.delete('.')
10
10
 
11
11
  namespace :bundle do
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = %q{default_value_for}
3
- s.version = "3.0.0.1"
3
+ s.version = "3.0.1"
4
4
  s.summary = %q{Provides a way to specify default values for ActiveRecord models}
5
5
  s.description = %q{The default_value_for plugin allows one to define default values for ActiveRecord models in a declarative manner}
6
6
  s.email = %q{software-signing@phusion.nl}
@@ -17,4 +17,6 @@ Gem::Specification.new do |s|
17
17
  s.add_dependency 'activerecord', '>= 3.2.0', '< 5.0'
18
18
  s.add_development_dependency 'railties', '>= 3.2.0', '< 5.0'
19
19
  s.add_development_dependency 'minitest', '>= 4.2'
20
+ s.add_development_dependency 'minitest-around'
21
+ s.add_development_dependency 'appraisal'
20
22
  end
@@ -144,7 +144,9 @@ module DefaultValueFor
144
144
  end
145
145
 
146
146
  def attributes_for_create(attribute_names)
147
- attribute_names += _default_attribute_values.keys.map(&:to_s)
147
+ attribute_names += self.class._all_default_attribute_values.keys.map(&:to_s).find_all { |name|
148
+ self.class.columns_hash.key?(name)
149
+ }
148
150
  super
149
151
  end
150
152
 
@@ -163,10 +165,22 @@ module DefaultValueFor
163
165
  next unless connection_default_value_defined || attribute_blank
164
166
 
165
167
  # allow explicitly setting nil through allow nil option
166
- next if @initialization_attributes.is_a?(Hash) && @initialization_attributes.has_key?(attribute) && !self.class._all_default_attribute_values_not_allowing_nil.include?(attribute)
168
+ next if @initialization_attributes.is_a?(Hash) &&
169
+ (
170
+ @initialization_attributes.has_key?(attribute) ||
171
+ (
172
+ @initialization_attributes.has_key?("#{attribute}_attributes") &&
173
+ nested_attributes_options.stringify_keys[attribute]
174
+ )
175
+ ) &&
176
+ !self.class._all_default_attribute_values_not_allowing_nil.include?(attribute)
167
177
 
168
178
  __send__("#{attribute}=", container.evaluate(self))
169
- changed_attributes.delete(attribute)
179
+ if self.class.private_instance_methods.include? :clear_attribute_changes
180
+ clear_attribute_changes attribute
181
+ else
182
+ changed_attributes.delete(attribute)
183
+ end
170
184
  end
171
185
  end
172
186
  end
@@ -175,6 +189,6 @@ end
175
189
  if defined?(Rails::Railtie)
176
190
  require 'default_value_for/railtie'
177
191
  else
178
- # Rails 2 initialization
192
+ # For anybody is using AS and AR without Railties, i.e. Padrino.
179
193
  ActiveRecord::Base.extend(DefaultValueFor::ClassMethods)
180
194
  end
@@ -18,8 +18,6 @@
18
18
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
19
  # THE SOFTWARE.
20
20
 
21
- # Rails 3 initialization
22
-
23
21
  module DefaultValueFor
24
22
  def self.initialize_railtie
25
23
  ActiveSupport.on_load :active_record do
data/test.rb CHANGED
@@ -20,10 +20,10 @@
20
20
 
21
21
  require 'bundler/setup'
22
22
  require 'minitest/autorun'
23
+ require 'minitest/around/unit'
23
24
  require 'active_record'
24
- require 'active_support/dependencies'
25
25
 
26
- if ActiveSupport::VERSION::MAJOR < 4
26
+ if ActiveSupport::VERSION::MAJOR == 3
27
27
  require 'active_support/core_ext/logger'
28
28
  end
29
29
 
@@ -37,28 +37,27 @@ require 'default_value_for'
37
37
 
38
38
  puts "\nTesting with Active Record version #{ActiveRecord::VERSION::STRING}\n\n"
39
39
 
40
- if RUBY_PLATFORM == "java"
41
- database_adapter = "jdbcsqlite3"
42
- else
43
- database_adapter = "sqlite3"
44
- end
45
40
  ActiveRecord::Base.default_timezone = :local
46
- ActiveRecord::Base.logger = Logger.new(STDERR)
47
- ActiveRecord::Base.logger.level = Logger::WARN
41
+ ActiveRecord::Base.logger = Logger.new(STDERR)
42
+ ActiveRecord::Base.logger.level = Logger::WARN
43
+
48
44
  ActiveRecord::Base.establish_connection(
49
- :adapter => database_adapter,
45
+ :adapter => RUBY_PLATFORM == 'java' ? 'jdbcsqlite3' : 'sqlite3',
50
46
  :database => ':memory:'
51
47
  )
48
+
52
49
  ActiveRecord::Base.connection.create_table(:users, :force => true) do |t|
53
50
  t.string :username
54
51
  t.integer :default_number
55
52
  end
56
- ActiveRecord::Base.connection.create_table(:numbers, :force => true) do |t|
53
+
54
+ ActiveRecord::Base.connection.create_table(:books, :force => true) do |t|
57
55
  t.string :type
58
56
  t.integer :number
59
57
  t.integer :count, :null => false, :default => 1
60
58
  t.integer :user_id
61
59
  t.timestamp :timestamp
60
+ t.text :stuff
62
61
  t.boolean :flag
63
62
  end
64
63
 
@@ -67,250 +66,175 @@ if defined?(Rails::Railtie)
67
66
  DefaultValueFor.initialize_active_record_extensions
68
67
  end
69
68
 
70
- class User < ActiveRecord::Base
71
- has_many :numbers, :class_name => 'TestClass'
72
- end
73
-
74
- class Number < ActiveRecord::Base
75
- end
76
-
77
69
  class DefaultValuePluginTest < TestCaseClass
78
- def setup
79
- Number.create(:number => 9876)
80
- end
81
-
82
- def teardown
83
- Number.delete_all
84
- end
85
-
86
- def define_model_class(name = "TestClass", parent_class_name = "ActiveRecord::Base", &block)
87
- Object.send(:remove_const, name) rescue nil
88
- eval("class #{name} < #{parent_class_name}; end", TOPLEVEL_BINDING)
89
- klass = eval(name, TOPLEVEL_BINDING)
90
- klass.class_eval do
91
- if respond_to?(:table_name=)
92
- self.table_name = 'numbers'
93
- else
94
- set_table_name 'numbers'
70
+ def around
71
+ Object.const_set(:User, Class.new(ActiveRecord::Base))
72
+ Object.const_set(:Book, Class.new(ActiveRecord::Base))
73
+ Object.const_set(:Novel, Class.new(Book))
74
+ User.has_many :books
75
+ Book.belongs_to :user
76
+
77
+ ActiveRecord::Base.transaction do
78
+ yield
79
+ raise ActiveRecord::Rollback
80
+ end
81
+ ensure
82
+ Object.send(:remove_const, :User)
83
+ Object.send(:remove_const, :Book)
84
+ Object.send(:remove_const, :Novel)
85
+ ActiveSupport::Dependencies.clear
86
+ end
87
+
88
+ def test_default_value_on_attribute_methods
89
+ Book.class_eval do
90
+ serialize :stuff
91
+ default_value_for :color, :green
92
+ def color; (self.stuff || {})[:color]; end
93
+ def color=(val)
94
+ self.stuff ||= {}
95
+ self.stuff[:color] = val
95
96
  end
96
97
  end
97
- klass.class_eval(&block) if block_given?
98
+ assert_equal :green, Book.create.color
98
99
  end
99
100
 
100
101
  def test_default_value_can_be_passed_as_argument
101
- define_model_class do
102
- default_value_for(:number, 1234)
103
- end
104
- object = TestClass.new
105
- assert_equal 1234, object.number
102
+ Book.default_value_for(:number, 1234)
103
+ assert_equal 1234, Book.new.number
106
104
  end
107
105
 
108
106
  def test_default_value_can_be_passed_as_block
109
- define_model_class do
110
- default_value_for(:number) { 1234 }
111
- end
112
- object = TestClass.new
113
- assert_equal 1234, object.number
107
+ Book.default_value_for(:number) { 1234 }
108
+ assert_equal 1234, Book.new.number
114
109
  end
115
110
 
116
111
  def test_works_with_create
117
- define_model_class do
118
- default_value_for :number, 1234
119
- end
112
+ Book.default_value_for :number, 1234
120
113
 
121
- object = TestClass.create
122
- refute_nil TestClass.find_by_number(1234)
114
+ object = Book.create
115
+ refute_nil Book.find_by_number(1234)
123
116
 
124
117
  # allows nil for existing records
125
118
  object.update_attribute(:number, nil)
126
- assert_nil TestClass.find_by_number(1234)
127
- assert_nil TestClass.find(object.id).number
119
+ assert_nil Book.find_by_number(1234)
120
+ assert_nil Book.find(object.id).number
128
121
  end
129
122
 
130
- def test_does_not_allow_nil_for_existing_record
131
- define_model_class do
132
- default_value_for(:number, :allows_nil => false) { 1234 }
133
- end
134
-
135
- object = TestClass.create
136
-
137
- # allows nil for existing records
123
+ def test_does_not_allow_nil_sets_default_value_on_existing_nils
124
+ Book.default_value_for(:number, :allows_nil => false) { 1234 }
125
+ object = Book.create
138
126
  object.update_attribute(:number, nil)
139
- assert_nil TestClass.find_by_number(1234)
140
- assert_equal 1234, TestClass.find(object.id).number
127
+ assert_nil Book.find_by_number(1234)
128
+ assert_equal 1234, Book.find(object.id).number
141
129
  end
142
130
 
143
- def test_overwrites_db_default
144
- define_model_class do
145
- default_value_for :count, 1234
146
- end
147
- object = TestClass.new
148
- assert_equal 1234, object.count
131
+ def test_overwrites_db_default
132
+ Book.default_value_for :count, 1234
133
+ assert_equal 1234, Book.new.count
149
134
  end
150
135
 
151
136
  def test_doesnt_overwrite_values_provided_by_mass_assignment
152
- define_model_class do
153
- default_value_for :number, 1234
154
- end
155
- object = TestClass.new(:number => 1, :count => 2)
156
- assert_equal 1, object.number
137
+ Book.default_value_for :number, 1234
138
+ assert_equal 1, Book.new(:number => 1, :count => 2).number
157
139
  end
158
140
 
159
141
  def test_doesnt_overwrite_values_provided_by_multiparameter_assignment
160
- define_model_class do
161
- default_value_for :timestamp, Time.mktime(2000, 1, 1)
162
- end
142
+ Book.default_value_for :timestamp, Time.mktime(2000, 1, 1)
163
143
  timestamp = Time.mktime(2009, 1, 1)
164
- object = TestClass.new('timestamp(1i)' => '2009', 'timestamp(2i)' => '1', 'timestamp(3i)' => '1')
144
+ object = Book.new('timestamp(1i)' => '2009', 'timestamp(2i)' => '1', 'timestamp(3i)' => '1')
165
145
  assert_equal timestamp, object.timestamp
166
146
  end
167
147
 
168
148
  def test_doesnt_overwrite_values_provided_by_constructor_block
169
- define_model_class do
170
- default_value_for :number, 1234
171
- end
172
- object = TestClass.new do |x|
149
+ Book.default_value_for :number, 1234
150
+ object = Book.new do |x|
173
151
  x.number = 1
174
- x.count = 2
152
+ x.count = 2
175
153
  end
176
154
  assert_equal 1, object.number
177
155
  end
178
156
 
179
157
  def test_doesnt_overwrite_explicitly_provided_nil_values_in_mass_assignment
180
- define_model_class do
181
- default_value_for :number, 1234
182
- end
183
- object = TestClass.new(:number => nil)
184
- assert_equal nil, object.number
158
+ Book.default_value_for :number, 1234
159
+ assert_equal nil, Book.new(:number => nil).number
185
160
  end
186
161
 
187
162
  def test_overwrites_explicitly_provided_nil_values_in_mass_assignment
188
- define_model_class do
189
- default_value_for :number, :value => 1234, :allows_nil => false
190
- end
191
- object = TestClass.new(:number => nil)
192
- assert_equal 1234, object.number
163
+ Book.default_value_for :number, :value => 1234, :allows_nil => false
164
+ assert_equal 1234, Book.new(:number => nil).number
193
165
  end
194
166
 
195
167
  def test_default_values_are_inherited
196
- define_model_class("TestSuperClass") do
197
- default_value_for :number, 1234
198
- end
199
- define_model_class("TestClass", "TestSuperClass")
200
- object = TestClass.new
201
- assert_equal 1234, object.number
168
+ Book.default_value_for :number, 1234
169
+ assert_equal 1234, Novel.new.number
202
170
  end
203
171
 
204
- def test_default_values_in_subclass
205
- define_model_class("TestSuperClass") do
206
- end
207
- define_model_class("TestClass", "TestSuperClass") do
208
- default_value_for :number, 5678
209
- end
210
-
211
- object = TestClass.new
212
- assert_equal 5678, object.number
172
+ def test_default_values_in_superclass_are_saved_in_subclass
173
+ Book.default_value_for :number, 1234
174
+ Novel.default_value_for :flag, true
175
+ object = Novel.create!
176
+ assert_equal object.id, Novel.find_by_number(1234).id
177
+ assert_equal object.id, Novel.find_by_flag(true).id
178
+ end
213
179
 
214
- object = TestSuperClass.new
215
- assert_nil object.number
180
+ def test_default_values_in_subclass
181
+ Novel.default_value_for :number, 5678
182
+ assert_equal 5678, Novel.new.number
183
+ assert_nil Book.new.number
216
184
  end
217
185
 
218
186
  def test_multiple_default_values_in_subclass_with_default_values_in_parent_class
219
- define_model_class("TestSuperClass") do
187
+ Book.class_eval do
220
188
  default_value_for :other_number, nil
221
189
  attr_accessor :other_number
222
190
  end
223
- define_model_class("TestClass", "TestSuperClass") do
224
- default_value_for :number, 5678
191
+ Novel.default_value_for :number, 5678
225
192
 
226
- # Ensure second call in this class doesn't reset _default_attribute_values,
227
- # and also doesn't consider the parent class' _default_attribute_values when
228
- # making that check.
229
- default_value_for :user_id, 9999
230
- end
193
+ # Ensure second call in this class doesn't reset _default_attribute_values,
194
+ # and also doesn't consider the parent class' _default_attribute_values when
195
+ # making that check.
196
+ Novel.default_value_for :user_id, 9999
231
197
 
232
- object = TestClass.new
198
+ object = Novel.new
233
199
  assert_nil object.other_number
234
200
  assert_equal 5678, object.number
235
201
  assert_equal 9999, object.user_id
236
202
  end
237
203
 
238
204
  def test_override_default_values_in_subclass
239
- define_model_class("TestSuperClass") do
240
- default_value_for :number, 1234
241
- end
242
- define_model_class("TestClass", "TestSuperClass") do
243
- default_value_for :number, 5678
244
- end
245
-
246
- object = TestClass.new
247
- assert_equal 5678, object.number
248
-
249
- object = TestSuperClass.new
250
- assert_equal 1234, object.number
205
+ Book.default_value_for :number, 1234
206
+ Novel.default_value_for :number, 5678
207
+ assert_equal 5678, Novel.new.number
208
+ assert_equal 1234, Book.new.number
251
209
  end
252
210
 
253
211
  def test_default_values_in_subclass_do_not_affect_parent_class
254
- define_model_class("TestSuperClass") do
255
- default_value_for :number, 1234
256
- end
257
- define_model_class("TestClass", "TestSuperClass") do
212
+ Book.default_value_for :number, 1234
213
+ Novel.class_eval do
258
214
  default_value_for :hello, "hi"
259
215
  attr_accessor :hello
260
216
  end
261
217
 
262
- assert TestSuperClass.new
263
- assert !TestSuperClass._default_attribute_values.include?(:hello)
218
+ assert Book.new
219
+ assert !Book._default_attribute_values.include?(:hello)
264
220
  end
265
221
 
266
222
  def test_doesnt_set_default_on_saved_records
267
- define_model_class do
268
- default_value_for :number, 1234
269
- end
270
- assert_equal 9876, TestClass.first.number
223
+ Book.create(:number => 9876)
224
+ Book.default_value_for :number, 1234
225
+ assert_equal 9876, Book.first.number
271
226
  end
272
227
 
273
228
  def test_also_works_on_attributes_that_arent_database_columns
274
- define_model_class do
229
+ Book.class_eval do
275
230
  default_value_for :hello, "hi"
276
231
  attr_accessor :hello
277
232
  end
278
- object = TestClass.new
279
- assert_equal 'hi', object.hello
280
- end
281
-
282
- if ActiveRecord::VERSION::MAJOR < 4
283
- def test_constructor_ignores_forbidden_mass_assignment_attributes
284
- define_model_class do
285
- default_value_for :number, 1234
286
- attr_protected :number
287
- end
288
- object = TestClass.new(:number => 5678, :count => 987)
289
- assert_equal 1234, object.number
290
- assert_equal 987, object.count
291
- end
292
-
293
- def test_constructor_respects_without_protection_option
294
- define_model_class do
295
- default_value_for :number, 1234
296
- attr_protected :number
297
-
298
- def respond_to_mass_assignment_options?
299
- respond_to? :mass_assignment_options
300
- end
301
- end
302
-
303
- if TestClass.new.respond_to_mass_assignment_options?
304
- # test without protection feature if available in current ActiveRecord version
305
- object = TestClass.create!({:number => 5678, :count => 987}, :without_protection => true)
306
- assert_equal 5678, object.number
307
- assert_equal 987, object.count
308
- end
309
- end
233
+ assert_equal 'hi', Book.new.hello
310
234
  end
311
235
 
312
236
  def test_doesnt_conflict_with_overrided_initialize_method_in_model_class
313
- define_model_class do
237
+ Book.class_eval do
314
238
  def initialize(attrs = {})
315
239
  @initialized = true
316
240
  super(:count => 5678)
@@ -318,67 +242,56 @@ class DefaultValuePluginTest < TestCaseClass
318
242
 
319
243
  default_value_for :number, 1234
320
244
  end
321
- object = TestClass.new
245
+ object = Book.new
322
246
  assert_equal 1234, object.number
323
247
  assert_equal 5678, object.count
324
248
  assert object.instance_variable_get('@initialized')
325
249
  end
326
250
 
327
251
  def test_model_instance_is_passed_to_the_given_block
328
- $instance = nil
329
- define_model_class do
330
- default_value_for :number do |n|
331
- $instance = n
332
- end
252
+ instance = nil
253
+ Book.default_value_for :number do |n|
254
+ instance = n
333
255
  end
334
- object = TestClass.new
335
- assert_same object, $instance
256
+ object = Book.new
257
+ assert_same object.object_id, instance.object_id
336
258
  end
337
259
 
338
260
  def test_can_specify_default_value_via_association
339
261
  user = User.create(:username => 'Kanako', :default_number => 123)
340
- define_model_class do
341
- belongs_to :user
342
-
343
- default_value_for :number do |n|
344
- n.user.default_number
345
- end
262
+ Book.default_value_for :number do |n|
263
+ n.user.default_number
346
264
  end
347
- object = user.numbers.create
348
- assert_equal 123, object.number
265
+ assert_equal 123, user.books.create!.number
349
266
  end
350
267
 
351
268
  def test_default_values
352
- define_model_class do
353
- default_values :type => "normal",
354
- :number => lambda { 10 + 5 },
355
- :timestamp => lambda {|_| Time.now }
356
- end
269
+ Book.default_values({
270
+ :type => "normal",
271
+ :number => lambda { 10 + 5 },
272
+ :timestamp => lambda {|_| Time.now }
273
+ })
357
274
 
358
- object = TestClass.new
275
+ object = Book.new
359
276
  assert_equal("normal", object.type)
360
277
  assert_equal(15, object.number)
361
278
  end
362
279
 
363
280
  def test_default_value_order
364
- define_model_class do
365
- default_value_for :count, 5
366
- default_value_for :number do |this|
367
- this.count * 2
368
- end
281
+ Book.default_value_for :count, 5
282
+ Book.default_value_for :number do |this|
283
+ this.count * 2
369
284
  end
370
- object = TestClass.new
285
+ object = Book.new
371
286
  assert_equal(5, object.count)
372
287
  assert_equal(10, object.number)
373
288
  end
374
289
 
375
290
  def test_attributes_with_default_values_are_not_marked_as_changed
376
- define_model_class do
377
- default_value_for :count, 5
378
- default_value_for :number, 2
379
- end
291
+ Book.default_value_for :count, 5
292
+ Book.default_value_for :number, 2
380
293
 
381
- object = TestClass.new
294
+ object = Book.new
382
295
  assert(!object.changed?)
383
296
  assert_equal([], object.changed)
384
297
 
@@ -388,65 +301,78 @@ class DefaultValuePluginTest < TestCaseClass
388
301
  end
389
302
 
390
303
  def test_default_values_are_duplicated
391
- define_model_class do
392
- if respond_to?(:table_name=)
393
- self.table_name = "users"
394
- else
395
- set_table_name "users"
396
- end
397
- default_value_for :username, "hello"
398
- end
399
- user1 = TestClass.new
304
+ User.default_value_for :username, "hello"
305
+ user1 = User.new
400
306
  user1.username << " world"
401
- user2 = TestClass.new
307
+ user2 = User.new
402
308
  assert_equal("hello", user2.username)
403
309
  end
404
310
 
405
311
  def test_default_values_are_shallow_copied
406
- define_model_class do
407
- if respond_to?(:table_name=)
408
- self.table_name = "users"
409
- else
410
- set_table_name "users"
411
- end
312
+ User.class_eval do
412
313
  attr_accessor :hash
413
314
  default_value_for :hash, { 1 => [] }
414
315
  end
415
- user1 = TestClass.new
316
+ user1 = User.new
416
317
  user1.hash[1] << 1
417
- user2 = TestClass.new
318
+ user2 = User.new
418
319
  assert_equal([1], user2.hash[1])
419
320
  end
420
321
 
421
322
  def test_constructor_does_not_affect_the_hash_passed_to_it
422
- define_model_class do
423
- default_value_for :count, 5
424
- end
425
-
323
+ Book.default_value_for :count, 5
426
324
  options = { :count => 5, :user_id => 1 }
427
325
  options_dup = options.dup
428
- object = TestClass.new(options)
326
+ Book.new(options)
429
327
  assert_equal(options_dup, options)
430
328
  end
431
329
 
432
330
  def test_subclass_find
433
- define_model_class do
434
- default_value_for :number, 5678
435
- end
436
- define_model_class("SpecialNumber", "TestClass")
437
- n = SpecialNumber.create
438
- assert SpecialNumber.find(n.id)
331
+ Book.default_value_for :number, 5678
332
+ n = Novel.create
333
+ assert Novel.find(n.id)
439
334
  end
440
335
 
441
336
  def test_does_not_see_false_as_blank_at_boolean_columns_for_existing_records
442
- define_model_class do
443
- default_value_for(:flag, :allows_nil => false) { true }
444
- end
337
+ Book.default_value_for(:flag, :allows_nil => false) { true }
445
338
 
446
- object = TestClass.create
339
+ object = Book.create
447
340
 
448
341
  # allows nil for existing records
449
342
  object.update_attribute(:flag, false)
450
- assert_equal false, TestClass.find(object.id).flag
343
+ assert_equal false, Book.find(object.id).flag
344
+ end
345
+
346
+ def test_works_with_nested_attributes
347
+ User.accepts_nested_attributes_for :books
348
+ User.default_value_for :books do
349
+ [Book.create!(:number => 0)]
350
+ end
351
+
352
+ user = User.create! :books_attributes => [{:number => 1}]
353
+ assert_equal 1, Book.all.first.number
354
+ end
355
+
356
+ if ActiveRecord::VERSION::MAJOR == 3
357
+ def test_constructor_ignores_forbidden_mass_assignment_attributes
358
+ Book.class_eval do
359
+ default_value_for :number, 1234
360
+ attr_protected :number
361
+ end
362
+ object = Book.new(:number => 5678, :count => 987)
363
+ assert_equal 1234, object.number
364
+ assert_equal 987, object.count
365
+ end
366
+
367
+ def test_constructor_respects_without_protection_option
368
+ Book.class_eval do
369
+ default_value_for :number, 1234
370
+ attr_protected :number
371
+ end
372
+
373
+ object = Book.create!({:number => 5678, :count => 987}, :without_protection => true)
374
+ assert_equal 5678, object.number
375
+ assert_equal 987, object.count
376
+ end
451
377
  end
452
378
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: default_value_for
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0.1
4
+ version: 3.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hongli Lai
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-30 00:00:00.000000000 Z
11
+ date: 2014-12-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -64,6 +64,34 @@ dependencies:
64
64
  - - ! '>='
65
65
  - !ruby/object:Gem::Version
66
66
  version: '4.2'
67
+ - !ruby/object:Gem::Dependency
68
+ name: minitest-around
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ! '>='
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ type: :development
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ! '>='
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ - !ruby/object:Gem::Dependency
82
+ name: appraisal
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
67
95
  description: The default_value_for plugin allows one to define default values for
68
96
  ActiveRecord models in a declarative manner
69
97
  email: software-signing@phusion.nl
@@ -1,12 +0,0 @@
1
- -----BEGIN PGP SIGNATURE-----
2
- Version: GnuPG/MacGPG2 v2.0.17 (Darwin)
3
- Comment: GPGTools - http://gpgtools.org
4
-
5
- iQEcBAABAgAGBQJTiKJoAAoJECrHRaUKISqMBMAIAIJzmjgE9LA3ICQLebX+rSyR
6
- EX+4LORtl9aq7/wwqotkw05UP+ItsWYk7YxgIo+pUZrsri6XLFxhdGW+ovxksO7c
7
- 27QyamNe05ZH7i2ebt3abiyNVfHYWbgx1bwsdjC3FjR3IUltNANMMDthxuYY7XUR
8
- MWNLWPpVG9mwweyy/c7kS7MqThTxxRNQBRsonA/ULEAL6FMDMT1uR/RHrrOt/dQv
9
- it+jo2Cy9wG31PyK2KtnW6dJADgLGmlAmowfdvFNc4g4V905DmliVUQa5wfYP/LZ
10
- jQA9n+lCH8cA6baFXpV4F4aHoh5kuD6idXmnpu/H+Ezcu0wLYospFf3dk8cP4yI=
11
- =n3f0
12
- -----END PGP SIGNATURE-----
data.tar.gz.asc DELETED
@@ -1,12 +0,0 @@
1
- -----BEGIN PGP SIGNATURE-----
2
- Version: GnuPG/MacGPG2 v2.0.17 (Darwin)
3
- Comment: GPGTools - http://gpgtools.org
4
-
5
- iQEcBAABAgAGBQJTiKJoAAoJECrHRaUKISqM35AH+wff1B5OYbLhUWOkKk7/iYTK
6
- UfDAIACcKsst3H7CBHZQKdxgLv0MHQqJ4RMW3MFioKJQpoQj29MuqMJm45jPrB60
7
- b4+3h4z7kNkbR2yQ/hGxn1D9o4ODzgjNBIN25ipPkSdsLxEa/cef8Bhw2CXnKJjc
8
- WKgxtuTr/16m71PnFF/syHk4rq00J6PAY5bGxk5gCTl1k7FjMb3PBIVmJ19miZBQ
9
- qlUqiDhYwHUkIkE4kEGETRGu4hItO2jRozvvkLFJe/fxVDaCb+vxxlyrRWiy69/Y
10
- 39/fLDK4K3vg8tyHpomJ7yrHF8bjAqcwSit1Hg43P8RtKcdJoxYm2ANMKC1AOrE=
11
- =OqS0
12
- -----END PGP SIGNATURE-----
metadata.gz.asc DELETED
@@ -1,12 +0,0 @@
1
- -----BEGIN PGP SIGNATURE-----
2
- Version: GnuPG/MacGPG2 v2.0.17 (Darwin)
3
- Comment: GPGTools - http://gpgtools.org
4
-
5
- iQEcBAABAgAGBQJTiKJoAAoJECrHRaUKISqMw1QH+gJo/kWFIhDXf5nHMYrsKuNg
6
- atpW59t9U7xa1dZi9knw7SJoxXjJ9+yxZUXeHd+h+UiFu5MVcC6IhZYz2V5f1Dy3
7
- uqRTMNiK1X4/JJkAzRyC45J4jPRkRfnuea07fmb2wC5RFlDmCKCcm2FTfDu3hYUt
8
- xlvay9TDoMyB1ualJW40XywIWYY7EL9miucQoH0mUsdAmIm7y8VtoKVLjceNWQV9
9
- jXcE3ATjjQjkc1lLcOQ8tMY+l+Tnf8IDFiQGLjLXnx+H3bTNesuiuDSONULT4A2m
10
- 994BGrKdOwY7vkvpbTo8Ou1DMIEn5QYcwHxwPuapYmAwMaNQIZbXsWi57jLLk6U=
11
- =Ls01
12
- -----END PGP SIGNATURE-----