default_value_for 3.0.3 → 3.4.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.
- checksums.yaml +5 -5
- data/README.md +2 -2
- data/Rakefile +24 -1
- data/default_value_for.gemspec +4 -3
- data/lib/default_value_for.rb +13 -6
- data/test.rb +84 -1
- metadata +30 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 15a799717c30677d582f0c87b7491f2a6a15206dd52018057e2df15db60fb21f
|
4
|
+
data.tar.gz: b884a6fbd0e6c679562a3765499514893649a8d3659318a92dbf009e1a1a43aa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1814019f12d56dcde794f9a70e530088ab1746976a99a8d076ef3b6858cb9c56410e85932f690a26a0d6ab8ee632c93634b81622e7b45548362c19d2551d548f
|
7
|
+
data.tar.gz: 73995f62cc25df268848f6630018dcba0f9fc8093d28382f2006919b08e32eda7b375de1359ae7506f5e074359db6839f1178e1446d52579ee69cb30d06c0ba6
|
data/README.md
CHANGED
@@ -22,12 +22,12 @@ u.last_seen # => Mon Sep 22 17:28:38 +0200 2008
|
|
22
22
|
|
23
23
|
### Rails 3.2 - 4.2 / Ruby 1.9.3 and higher
|
24
24
|
|
25
|
-
The current version of default_value_for (3.
|
25
|
+
The current version of default_value_for (3.x+) is compatible with Rails 3.2 or higher, and Ruby 1.9.3 and higher.
|
26
26
|
|
27
27
|
Add it to your Gemfile:
|
28
28
|
|
29
29
|
```ruby
|
30
|
-
gem "default_value_for", "~> 3.0
|
30
|
+
gem "default_value_for", "~> 3.0"
|
31
31
|
```
|
32
32
|
|
33
33
|
This gem is signed using PGP with the Phusion Software Signing key: http://www.phusion.nl/about/gpg. That key in turn is signed by the rubygems-openpgp Certificate Authority: http://www.rubygems-openpgp-ca.org/.
|
data/Rakefile
CHANGED
@@ -5,7 +5,19 @@ task :test do
|
|
5
5
|
ruby "test.rb"
|
6
6
|
end
|
7
7
|
|
8
|
-
|
8
|
+
rails_versions = %w(
|
9
|
+
3.2
|
10
|
+
4.0
|
11
|
+
4.1
|
12
|
+
4.2
|
13
|
+
5.0
|
14
|
+
5.1
|
15
|
+
5.2
|
16
|
+
6.0
|
17
|
+
6.1
|
18
|
+
)
|
19
|
+
|
20
|
+
rails_versions.each do |version|
|
9
21
|
dotless = version.delete('.')
|
10
22
|
|
11
23
|
namespace :bundle do
|
@@ -24,3 +36,14 @@ end
|
|
24
36
|
end
|
25
37
|
end
|
26
38
|
end
|
39
|
+
|
40
|
+
namespace :test do
|
41
|
+
desc "Test with all supported Rails versions"
|
42
|
+
task :railsall do
|
43
|
+
rails_versions.each do |version|
|
44
|
+
dotless = version.delete('.')
|
45
|
+
ENV['BUNDLE_GEMFILE'] = "gemfiles/rails_#{dotless}.gemfile"
|
46
|
+
ruby "test.rb"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/default_value_for.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = %q{default_value_for}
|
3
|
-
s.version = "3.0
|
3
|
+
s.version = "3.4.0"
|
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}
|
@@ -14,8 +14,9 @@ Gem::Specification.new do |s|
|
|
14
14
|
'lib/default_value_for.rb',
|
15
15
|
'lib/default_value_for/railtie.rb'
|
16
16
|
]
|
17
|
-
s.add_dependency 'activerecord', '>= 3.2.0', '<
|
18
|
-
s.add_development_dependency '
|
17
|
+
s.add_dependency 'activerecord', '>= 3.2.0', '< 7.0'
|
18
|
+
s.add_development_dependency 'actionpack', '>= 3.2.0', '< 7.0'
|
19
|
+
s.add_development_dependency 'railties', '>= 3.2.0', '< 7.0'
|
19
20
|
s.add_development_dependency 'minitest', '>= 4.2'
|
20
21
|
s.add_development_dependency 'minitest-around'
|
21
22
|
s.add_development_dependency 'appraisal'
|
data/lib/default_value_for.rb
CHANGED
@@ -124,6 +124,7 @@ module DefaultValueFor
|
|
124
124
|
|
125
125
|
module InstanceMethods
|
126
126
|
def initialize(attributes = nil, options = {})
|
127
|
+
attributes = attributes.to_h if attributes.respond_to?(:to_h)
|
127
128
|
@initialization_attributes = attributes.is_a?(Hash) ? attributes.stringify_keys : {}
|
128
129
|
|
129
130
|
unless options[:without_protection]
|
@@ -156,12 +157,18 @@ module DefaultValueFor
|
|
156
157
|
|
157
158
|
connection_default_value_defined = new_record? && respond_to?("#{attribute}_changed?") && !__send__("#{attribute}_changed?")
|
158
159
|
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
160
|
+
attribute_blank = if attributes.has_key?(attribute)
|
161
|
+
column = self.class.columns_hash[attribute]
|
162
|
+
if column && column.type == :boolean
|
163
|
+
attributes[attribute].nil?
|
164
|
+
else
|
165
|
+
attributes[attribute].blank?
|
166
|
+
end
|
167
|
+
elsif respond_to?(attribute)
|
168
|
+
send(attribute).nil?
|
169
|
+
else
|
170
|
+
instance_variable_get("@#{attribute}").nil?
|
171
|
+
end
|
165
172
|
next unless connection_default_value_defined || attribute_blank
|
166
173
|
|
167
174
|
# allow explicitly setting nil through allow nil option
|
data/test.rb
CHANGED
@@ -22,11 +22,44 @@ require 'bundler/setup'
|
|
22
22
|
require 'minitest/autorun'
|
23
23
|
require 'minitest/around/unit'
|
24
24
|
require 'active_record'
|
25
|
+
require 'action_pack'
|
25
26
|
|
26
27
|
if ActiveSupport::VERSION::MAJOR == 3
|
27
28
|
require 'active_support/core_ext/logger'
|
28
29
|
end
|
29
30
|
|
31
|
+
if ActionPack::VERSION::MAJOR > 3
|
32
|
+
require 'action_controller'
|
33
|
+
end
|
34
|
+
|
35
|
+
# Handle an edge-case when using Arel 5 (i.e. Rails <= 4.1) with Ruby >= 2.4:
|
36
|
+
# See: https://github.com/rails/arel/commit/dc85a6e9c74942945ad696f5da4d82490a85b865
|
37
|
+
# See: https://stackoverflow.com/a/51481088
|
38
|
+
rails_match_data = RUBY_VERSION.match(/\A(?<major>\d+).(?<minor>\d+)/)
|
39
|
+
rails_2_4_or_newer = rails_match_data[:major].to_i > 2 || (rails_match_data[:major].to_i == 2 && rails_match_data[:minor].to_i >= 4)
|
40
|
+
arel_match_data = Arel::VERSION.match(/\A(?<major>\d+).(?<minor>\d+)/)
|
41
|
+
arel_older_than_7_1 = arel_match_data[:major].to_i < 7 || (arel_match_data[:major].to_i == 7 && arel_match_data[:minor].to_i < 1)
|
42
|
+
|
43
|
+
if rails_2_4_or_newer && arel_older_than_7_1
|
44
|
+
module Arel
|
45
|
+
module Visitors
|
46
|
+
class DepthFirst < Arel::Visitors::Visitor
|
47
|
+
alias :visit_Integer :terminal
|
48
|
+
end
|
49
|
+
|
50
|
+
class Dot < Arel::Visitors::Visitor
|
51
|
+
alias :visit_Integer :visit_String
|
52
|
+
end
|
53
|
+
|
54
|
+
# The super class for ToSql changed with Arel 6
|
55
|
+
# See: https://github.com/rails/arel/commit/a6a7c75ff486657909e20e2f48764136caa5e87e#diff-3538aead5b80677372eea0e903ff728eR7
|
56
|
+
class ToSql < (Arel::VERSION[/\A\d+/].to_i >= 6 ? Arel::Visitors::Reduce : Arel::Visitors::Visitor)
|
57
|
+
alias :visit_Integer :literal
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
30
63
|
begin
|
31
64
|
TestCaseClass = MiniTest::Test
|
32
65
|
rescue NameError
|
@@ -35,7 +68,8 @@ end
|
|
35
68
|
|
36
69
|
require 'default_value_for'
|
37
70
|
|
38
|
-
puts "\nTesting with Active Record version #{ActiveRecord::VERSION::STRING}
|
71
|
+
puts "\nTesting with Active Record version #{ActiveRecord::VERSION::STRING}"
|
72
|
+
puts "\nTesting with Action Pack version #{ActionPack::VERSION::STRING}\n\n"
|
39
73
|
|
40
74
|
ActiveRecord::Base.default_timezone = :local
|
41
75
|
ActiveRecord::Base.logger = Logger.new(STDERR)
|
@@ -49,6 +83,7 @@ ActiveRecord::Base.establish_connection(
|
|
49
83
|
ActiveRecord::Base.connection.create_table(:users, :force => true) do |t|
|
50
84
|
t.string :username
|
51
85
|
t.integer :default_number
|
86
|
+
t.text :settings
|
52
87
|
end
|
53
88
|
|
54
89
|
ActiveRecord::Base.connection.create_table(:books, :force => true) do |t|
|
@@ -233,6 +268,14 @@ class DefaultValuePluginTest < TestCaseClass
|
|
233
268
|
assert_equal 'hi', Book.new.hello
|
234
269
|
end
|
235
270
|
|
271
|
+
def test_works_on_attributes_that_only_have_writers
|
272
|
+
Book.class_eval do
|
273
|
+
default_value_for :hello, "hi"
|
274
|
+
attr_writer :hello
|
275
|
+
end
|
276
|
+
assert_equal 'hi', Book.new.instance_variable_get('@hello')
|
277
|
+
end
|
278
|
+
|
236
279
|
def test_doesnt_conflict_with_overrided_initialize_method_in_model_class
|
237
280
|
Book.class_eval do
|
238
281
|
def initialize(attrs = {})
|
@@ -353,6 +396,46 @@ class DefaultValuePluginTest < TestCaseClass
|
|
353
396
|
assert_equal 1, Book.all.first.number
|
354
397
|
end
|
355
398
|
|
399
|
+
def test_works_with_stored_attribute_accessors_when_initializing_value_that_does_not_allow_nil
|
400
|
+
User.store :settings, :accessors => :bio
|
401
|
+
User.default_value_for :bio, :value => 'None given', :allows_nil => false
|
402
|
+
|
403
|
+
user = User.create!(:bio => 'This is a bio')
|
404
|
+
assert_equal 'This is a bio', user.bio
|
405
|
+
end
|
406
|
+
|
407
|
+
if ActionPack::VERSION::MAJOR > 3
|
408
|
+
def test_doesnt_overwrite_explicitly_provided_nil_values_in_mass_assignment_with_action_controller_parameters
|
409
|
+
Book.default_value_for :number, 1234
|
410
|
+
|
411
|
+
assert_nil Book.new(ActionController::Parameters.new(:number => nil).permit!).number
|
412
|
+
end
|
413
|
+
|
414
|
+
def test_overwrites_explicitly_provided_nil_values_in_mass_assignment_with_action_controller_parameters
|
415
|
+
Book.default_value_for :number, :value => 1234, :allows_nil => false
|
416
|
+
|
417
|
+
assert_equal 1234, Book.new(ActionController::Parameters.new(:number => nil).permit!).number
|
418
|
+
end
|
419
|
+
|
420
|
+
def test_works_with_nested_attributes_with_action_controller_parameters
|
421
|
+
User.accepts_nested_attributes_for :books
|
422
|
+
User.default_value_for :books do
|
423
|
+
[Book.create!(:number => 0)]
|
424
|
+
end
|
425
|
+
|
426
|
+
user = User.create!(ActionController::Parameters.new(:books_attributes => [{:number => 1}]).permit!)
|
427
|
+
assert_equal 1, Book.all.first.number
|
428
|
+
end
|
429
|
+
|
430
|
+
def test_works_with_stored_attribute_accessors_when_initializing_value_that_does_not_allow_nil_with_action_controller_parameters
|
431
|
+
User.store :settings, :accessors => :bio
|
432
|
+
User.default_value_for :bio, :value => 'None given', :allows_nil => false
|
433
|
+
|
434
|
+
user = User.create!(ActionController::Parameters.new(:bio => 'This is a bio').permit!)
|
435
|
+
assert_equal 'This is a bio', user.bio
|
436
|
+
end
|
437
|
+
end
|
438
|
+
|
356
439
|
if ActiveRecord::VERSION::MAJOR == 3
|
357
440
|
def test_constructor_ignores_forbidden_mass_assignment_attributes
|
358
441
|
Book.class_eval do
|
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
|
4
|
+
version: 3.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hongli Lai
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: 3.2.0
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
22
|
+
version: '7.0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,7 +29,27 @@ dependencies:
|
|
29
29
|
version: 3.2.0
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
32
|
+
version: '7.0'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: actionpack
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 3.2.0
|
40
|
+
- - "<"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '7.0'
|
43
|
+
type: :development
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 3.2.0
|
50
|
+
- - "<"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '7.0'
|
33
53
|
- !ruby/object:Gem::Dependency
|
34
54
|
name: railties
|
35
55
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,7 +59,7 @@ dependencies:
|
|
39
59
|
version: 3.2.0
|
40
60
|
- - "<"
|
41
61
|
- !ruby/object:Gem::Version
|
42
|
-
version: '
|
62
|
+
version: '7.0'
|
43
63
|
type: :development
|
44
64
|
prerelease: false
|
45
65
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -49,7 +69,7 @@ dependencies:
|
|
49
69
|
version: 3.2.0
|
50
70
|
- - "<"
|
51
71
|
- !ruby/object:Gem::Version
|
52
|
-
version: '
|
72
|
+
version: '7.0'
|
53
73
|
- !ruby/object:Gem::Dependency
|
54
74
|
name: minitest
|
55
75
|
requirement: !ruby/object:Gem::Requirement
|
@@ -111,7 +131,7 @@ homepage: https://github.com/FooBarWidget/default_value_for
|
|
111
131
|
licenses:
|
112
132
|
- MIT
|
113
133
|
metadata: {}
|
114
|
-
post_install_message:
|
134
|
+
post_install_message:
|
115
135
|
rdoc_options: []
|
116
136
|
require_paths:
|
117
137
|
- lib
|
@@ -126,9 +146,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
126
146
|
- !ruby/object:Gem::Version
|
127
147
|
version: '0'
|
128
148
|
requirements: []
|
129
|
-
|
130
|
-
|
131
|
-
signing_key:
|
149
|
+
rubygems_version: 3.0.3
|
150
|
+
signing_key:
|
132
151
|
specification_version: 4
|
133
152
|
summary: Provides a way to specify default values for ActiveRecord models
|
134
153
|
test_files: []
|