default_value_for 3.0.0.1 → 3.0.1

Sign up to get free protection for your applications and to get access to all the features.
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-----