activemodel 3.2.22.5 → 4.0.0.beta1
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 +4 -4
- data/CHANGELOG.md +85 -64
- data/MIT-LICENSE +1 -1
- data/README.rdoc +61 -24
- data/lib/active_model.rb +21 -11
- data/lib/active_model/attribute_methods.rb +150 -125
- data/lib/active_model/callbacks.rb +49 -34
- data/lib/active_model/conversion.rb +39 -19
- data/lib/active_model/deprecated_mass_assignment_security.rb +21 -0
- data/lib/active_model/dirty.rb +48 -32
- data/lib/active_model/errors.rb +176 -88
- data/lib/active_model/forbidden_attributes_protection.rb +27 -0
- data/lib/active_model/lint.rb +42 -55
- data/lib/active_model/locale/en.yml +3 -1
- data/lib/active_model/model.rb +97 -0
- data/lib/active_model/naming.rb +191 -51
- data/lib/active_model/railtie.rb +11 -1
- data/lib/active_model/secure_password.rb +55 -25
- data/lib/active_model/serialization.rb +51 -27
- data/lib/active_model/serializers/json.rb +83 -46
- data/lib/active_model/serializers/xml.rb +46 -12
- data/lib/active_model/test_case.rb +0 -12
- data/lib/active_model/translation.rb +9 -10
- data/lib/active_model/validations.rb +154 -52
- data/lib/active_model/validations/absence.rb +31 -0
- data/lib/active_model/validations/acceptance.rb +10 -22
- data/lib/active_model/validations/callbacks.rb +78 -25
- data/lib/active_model/validations/clusivity.rb +41 -0
- data/lib/active_model/validations/confirmation.rb +13 -23
- data/lib/active_model/validations/exclusion.rb +26 -55
- data/lib/active_model/validations/format.rb +44 -34
- data/lib/active_model/validations/inclusion.rb +22 -52
- data/lib/active_model/validations/length.rb +48 -49
- data/lib/active_model/validations/numericality.rb +30 -32
- data/lib/active_model/validations/presence.rb +12 -22
- data/lib/active_model/validations/validates.rb +68 -36
- data/lib/active_model/validations/with.rb +28 -23
- data/lib/active_model/validator.rb +22 -22
- data/lib/active_model/version.rb +4 -4
- metadata +23 -24
- data/lib/active_model/mass_assignment_security.rb +0 -237
- data/lib/active_model/mass_assignment_security/permission_set.rb +0 -40
- data/lib/active_model/mass_assignment_security/sanitizer.rb +0 -59
- data/lib/active_model/observer_array.rb +0 -147
- data/lib/active_model/observing.rb +0 -252
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a123b304fffb488ab66aab52d5fc0d41b0c0b511
|
4
|
+
data.tar.gz: 1890c14c3ab9251044e70e38f993d4c55707cb52
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 882ad1f17ccb90c6a79d86a42d3f91685a1ece5e7ec63ed83be888a20d086ea38928aba2af650e13b79c1955d5f62d78c4b865311be1a8ae065197ee2a858aaa
|
7
|
+
data.tar.gz: 5452a0c0afabc7f3c3f536e670cb61244dd8d9236bfac6dd049da917dbe6bed0d110b4c6ed3bd0a374c7e09b42988cd937ae57cef83ff03e42a33aeea2cbb276
|
data/CHANGELOG.md
CHANGED
@@ -1,122 +1,143 @@
|
|
1
|
-
## Rails
|
1
|
+
## Rails 4.0.0.beta1 (February 25, 2013) ##
|
2
2
|
|
3
|
-
*
|
3
|
+
* Add `ActiveModel::Validations::AbsenceValidator`, a validator to check the
|
4
|
+
absence of attributes.
|
4
5
|
|
6
|
+
class Person
|
7
|
+
include ActiveModel::Validations
|
5
8
|
|
6
|
-
|
9
|
+
attr_accessor :first_name
|
10
|
+
validates_absence_of :first_name
|
11
|
+
end
|
7
12
|
|
8
|
-
|
13
|
+
person = Person.new
|
14
|
+
person.first_name = "John"
|
15
|
+
person.valid?
|
16
|
+
# => false
|
17
|
+
person.errors.messages
|
18
|
+
# => {:first_name=>["must be blank"]}
|
9
19
|
|
20
|
+
*Roberto Vasquez Angel*
|
10
21
|
|
11
|
-
|
22
|
+
* `[attribute]_changed?` now returns `false` after a call to `reset_[attribute]!`.
|
12
23
|
|
13
|
-
*
|
24
|
+
*Renato Mascarenhas*
|
14
25
|
|
26
|
+
* Observers was extracted from Active Model as `rails-observers` gem.
|
15
27
|
|
16
|
-
|
28
|
+
*Rafael Mendonça França*
|
17
29
|
|
18
|
-
*
|
30
|
+
* Specify type of singular association during serialization.
|
19
31
|
|
32
|
+
*Steve Klabnik*
|
20
33
|
|
21
|
-
|
34
|
+
* Fixed length validator to correctly handle `nil`. Fixes #7180.
|
22
35
|
|
23
|
-
*
|
36
|
+
*Michal Zima*
|
24
37
|
|
38
|
+
* Removed dispensable `require` statements. Make sure to require `active_model` before requiring
|
39
|
+
individual parts of the framework.
|
25
40
|
|
26
|
-
|
41
|
+
*Yves Senn*
|
27
42
|
|
28
|
-
*
|
43
|
+
* Use BCrypt's `MIN_COST` in the test environment for speedier tests when using `has_secure_pasword`.
|
29
44
|
|
30
|
-
|
45
|
+
*Brian Cardarella + Jeremy Kemper + Trevor Turk*
|
31
46
|
|
32
|
-
*
|
47
|
+
* Add `ActiveModel::ForbiddenAttributesProtection`, a simple module to
|
48
|
+
protect attributes from mass assignment when non-permitted attributes are passed.
|
33
49
|
|
50
|
+
*DHH + Guillermo Iguaran*
|
34
51
|
|
35
|
-
|
52
|
+
* `ActiveModel::MassAssignmentSecurity` has been extracted from Active Model and the
|
53
|
+
`protected_attributes` gem should be added to Gemfile in order to use
|
54
|
+
`attr_accessible` and `attr_protected` macros in your models.
|
36
55
|
|
37
|
-
*
|
56
|
+
*Guillermo Iguaran*
|
38
57
|
|
39
|
-
|
40
|
-
## Rails 3.2.12 (Feb 11, 2013) ##
|
41
|
-
|
42
|
-
* Fix issue with `attr_protected` where malformed input could circumvent protection.
|
43
|
-
CVE-2013-0276
|
44
|
-
|
45
|
-
*joernchen*
|
46
|
-
|
47
|
-
|
48
|
-
## Rails 3.2.11 (Jan 8, 2013) ##
|
49
|
-
|
50
|
-
* No changes.
|
51
|
-
|
52
|
-
|
53
|
-
## Rails 3.2.10 (Jan 2, 2013) ##
|
54
|
-
|
55
|
-
* No changes.
|
56
|
-
|
57
|
-
|
58
|
-
## Rails 3.2.9 (Nov 12, 2012) ##
|
59
|
-
|
60
|
-
* Due to a change in builder, nil values and empty strings now generates
|
58
|
+
* Due to a change in builder, `nil` and empty strings now generate
|
61
59
|
closed tags, so instead of this:
|
62
60
|
|
63
61
|
<pseudonyms nil=\"true\"></pseudonyms>
|
64
62
|
|
65
|
-
|
63
|
+
it generates this:
|
66
64
|
|
67
65
|
<pseudonyms nil=\"true\"/>
|
68
66
|
|
69
67
|
*Carlos Antonio da Silva*
|
70
68
|
|
69
|
+
* Inclusion/exclusion validators accept a method name passed as a symbol to the
|
70
|
+
`:in` option.
|
71
71
|
|
72
|
-
|
73
|
-
|
74
|
-
* No changes.
|
75
|
-
|
72
|
+
This allows to use dynamic inclusion/exclusion values using methods, besides
|
73
|
+
the current lambda/proc support.
|
76
74
|
|
77
|
-
|
75
|
+
*Gabriel Sobrinho*
|
78
76
|
|
79
|
-
*
|
77
|
+
* `ActiveModel::Validation#validates` ability to pass custom exception to the
|
78
|
+
`:strict` option.
|
80
79
|
|
81
|
-
*
|
80
|
+
*Bogdan Gusiev*
|
82
81
|
|
82
|
+
* Changed `ActiveModel::Serializers::Xml::Serializer#add_associations` to by default
|
83
|
+
propagate `:skip_types, :dasherize, :camelize` keys to included associations.
|
84
|
+
It can be overriden on each association by explicitly specifying the option on one
|
85
|
+
or more associations
|
83
86
|
|
84
|
-
|
87
|
+
*Anthony Alberto*
|
85
88
|
|
86
|
-
*
|
89
|
+
* Changed `ActiveModel::Serializers::JSON.include_root_in_json` default value to false.
|
90
|
+
Now, AM Serializers and AR objects have the same default behaviour. Fixes #6578.
|
87
91
|
|
92
|
+
class User < ActiveRecord::Base; end
|
88
93
|
|
89
|
-
|
94
|
+
class Person
|
95
|
+
include ActiveModel::Model
|
96
|
+
include ActiveModel::AttributeMethods
|
97
|
+
include ActiveModel::Serializers::JSON
|
90
98
|
|
91
|
-
|
99
|
+
attr_accessor :name, :age
|
92
100
|
|
101
|
+
def attributes
|
102
|
+
instance_values
|
103
|
+
end
|
104
|
+
end
|
93
105
|
|
94
|
-
|
106
|
+
user.as_json
|
107
|
+
=> {"id"=>1, "name"=>"Konata Izumi", "age"=>16, "awesome"=>true}
|
108
|
+
# root is not included
|
95
109
|
|
96
|
-
|
110
|
+
person.as_json
|
111
|
+
=> {"name"=>"Francesco", "age"=>22}
|
112
|
+
# root is not included
|
97
113
|
|
114
|
+
*Francesco Rodriguez*
|
98
115
|
|
99
|
-
|
116
|
+
* Passing false hash values to `validates` will no longer enable the corresponding validators.
|
100
117
|
|
101
|
-
*
|
118
|
+
*Steve Purcell*
|
102
119
|
|
120
|
+
* `ConfirmationValidator` error messages will attach to `:#{attribute}_confirmation` instead of `attribute`.
|
103
121
|
|
104
|
-
|
122
|
+
*Brian Cardarella*
|
105
123
|
|
106
|
-
*
|
124
|
+
* Added `ActiveModel::Model`, a mixin to make Ruby objects work with AP out of box.
|
107
125
|
|
126
|
+
*Guillermo Iguaran*
|
108
127
|
|
109
|
-
|
128
|
+
* `AM::Errors#to_json`: support `:full_messages` parameter.
|
110
129
|
|
111
|
-
*
|
112
|
-
support methods like `set_table_name` in Active Record, which are themselves being deprecated. *Jon Leighton*
|
130
|
+
*Bogdan Gusiev*
|
113
131
|
|
114
|
-
*
|
132
|
+
* Trim down Active Model API by removing `valid?` and `errors.full_messages`.
|
115
133
|
|
116
|
-
*
|
134
|
+
*José Valim*
|
117
135
|
|
118
|
-
*
|
136
|
+
* When `^` or `$` are used in the regular expression provided to `validates_format_of`
|
137
|
+
and the `:multiline` option is not set to true, an exception will be raised. This is
|
138
|
+
to prevent security vulnerabilities when using `validates_format_of`. The problem is
|
139
|
+
described in detail in the Rails security guide.
|
119
140
|
|
120
|
-
*
|
141
|
+
*Jan Berdajs + Egor Homakov*
|
121
142
|
|
122
|
-
Please check [3-
|
143
|
+
Please check [3-2-stable](https://github.com/rails/rails/blob/3-2-stable/activemodel/CHANGELOG.md) for previous changes.
|
data/MIT-LICENSE
CHANGED
data/README.rdoc
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
= Active Model -- model interfaces for Rails
|
2
2
|
|
3
3
|
Active Model provides a known set of interfaces for usage in model classes.
|
4
|
-
They allow for Action Pack helpers to interact with non-
|
4
|
+
They allow for Action Pack helpers to interact with non-Active Record models,
|
5
5
|
for example. Active Model also helps building custom ORMs for use outside of
|
6
6
|
the Rails framework.
|
7
7
|
|
@@ -9,10 +9,31 @@ Prior to Rails 3.0, if a plugin or gem developer wanted to have an object
|
|
9
9
|
interact with Action Pack helpers, it was required to either copy chunks of
|
10
10
|
code from Rails, or monkey patch entire helpers to make them handle objects
|
11
11
|
that did not exactly conform to the Active Record interface. This would result
|
12
|
-
in code duplication and fragile applications that broke on upgrades.
|
12
|
+
in code duplication and fragile applications that broke on upgrades. Active
|
13
|
+
Model solves this by defining an explicit API. You can read more about the
|
14
|
+
API in <tt>ActiveModel::Lint::Tests</tt>.
|
13
15
|
|
14
|
-
Active Model
|
15
|
-
|
16
|
+
Active Model provides a default module that implements the basic API required
|
17
|
+
to integrate with Action Pack out of the box: <tt>ActiveModel::Model</tt>.
|
18
|
+
|
19
|
+
class Person
|
20
|
+
include ActiveModel::Model
|
21
|
+
|
22
|
+
attr_accessor :name, :age
|
23
|
+
validates_presence_of :name
|
24
|
+
end
|
25
|
+
|
26
|
+
person = Person.new(name: 'bob', age: '18')
|
27
|
+
person.name # => 'bob'
|
28
|
+
person.age # => '18'
|
29
|
+
person.valid? # => true
|
30
|
+
|
31
|
+
It includes model name introspections, conversions, translations and
|
32
|
+
validations, resulting in a class suitable to be used with Action Pack.
|
33
|
+
See <tt>ActiveModel::Model</tt> for more examples.
|
34
|
+
|
35
|
+
Active Model also provides the following functionality to have ORM-like
|
36
|
+
behavior out of the box:
|
16
37
|
|
17
38
|
* Add attribute magic to objects
|
18
39
|
|
@@ -20,7 +41,7 @@ modules:
|
|
20
41
|
include ActiveModel::AttributeMethods
|
21
42
|
|
22
43
|
attribute_method_prefix 'clear_'
|
23
|
-
define_attribute_methods
|
44
|
+
define_attribute_methods :name, :age
|
24
45
|
|
25
46
|
attr_accessor :name, :age
|
26
47
|
|
@@ -54,7 +75,11 @@ modules:
|
|
54
75
|
|
55
76
|
* Tracking value changes
|
56
77
|
|
57
|
-
|
78
|
+
class Person
|
79
|
+
include ActiveModel::Dirty
|
80
|
+
|
81
|
+
attr_accessor :name
|
82
|
+
end
|
58
83
|
|
59
84
|
person = Person.new
|
60
85
|
person.name # => nil
|
@@ -87,18 +112,14 @@ modules:
|
|
87
112
|
errors.add(:name, "can not be nil") if name.nil?
|
88
113
|
end
|
89
114
|
|
90
|
-
def
|
115
|
+
def self.human_attribute_name(attr, options = {})
|
91
116
|
"Name"
|
92
117
|
end
|
93
|
-
|
94
118
|
end
|
95
119
|
|
96
120
|
person.errors.full_messages
|
97
121
|
# => ["Name can not be nil"]
|
98
122
|
|
99
|
-
person.errors.full_messages
|
100
|
-
# => ["Name can not be nil"]
|
101
|
-
|
102
123
|
{Learn more}[link:classes/ActiveModel/Errors.html]
|
103
124
|
|
104
125
|
* Model name introspection
|
@@ -112,22 +133,36 @@ modules:
|
|
112
133
|
|
113
134
|
{Learn more}[link:classes/ActiveModel/Naming.html]
|
114
135
|
|
115
|
-
* Observer support
|
116
|
-
|
117
|
-
ActiveModel::Observers allows your object to implement the Observer
|
118
|
-
pattern in a Rails App and take advantage of all the standard observer
|
119
|
-
functions.
|
120
|
-
|
121
|
-
{Learn more}[link:classes/ActiveModel/Observer.html]
|
122
|
-
|
123
136
|
* Making objects serializable
|
124
137
|
|
125
138
|
ActiveModel::Serialization provides a standard interface for your object
|
126
139
|
to provide +to_json+ or +to_xml+ serialization.
|
127
140
|
|
141
|
+
class SerialPerson
|
142
|
+
include ActiveModel::Serialization
|
143
|
+
|
144
|
+
attr_accessor :name
|
145
|
+
|
146
|
+
def attributes
|
147
|
+
{'name' => name}
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
128
151
|
s = SerialPerson.new
|
129
152
|
s.serializable_hash # => {"name"=>nil}
|
153
|
+
|
154
|
+
class SerialPerson
|
155
|
+
include ActiveModel::Serializers::JSON
|
156
|
+
end
|
157
|
+
|
158
|
+
s = SerialPerson.new
|
130
159
|
s.to_json # => "{\"name\":null}"
|
160
|
+
|
161
|
+
class SerialPerson
|
162
|
+
include ActiveModel::Serializers::Xml
|
163
|
+
end
|
164
|
+
|
165
|
+
s = SerialPerson.new
|
131
166
|
s.to_xml # => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<serial-person...
|
132
167
|
|
133
168
|
{Learn more}[link:classes/ActiveModel/Serialization.html]
|
@@ -163,7 +198,7 @@ modules:
|
|
163
198
|
|
164
199
|
* Custom validators
|
165
200
|
|
166
|
-
class
|
201
|
+
class ValidatorPerson
|
167
202
|
include ActiveModel::Validations
|
168
203
|
validates_with HasNameValidator
|
169
204
|
attr_accessor :name
|
@@ -171,7 +206,7 @@ modules:
|
|
171
206
|
|
172
207
|
class HasNameValidator < ActiveModel::Validator
|
173
208
|
def validate(record)
|
174
|
-
|
209
|
+
record.errors[:name] = "must exist" if record.name.blank?
|
175
210
|
end
|
176
211
|
end
|
177
212
|
|
@@ -182,7 +217,7 @@ modules:
|
|
182
217
|
p.valid? # => true
|
183
218
|
|
184
219
|
{Learn more}[link:classes/ActiveModel/Validator.html]
|
185
|
-
|
220
|
+
|
186
221
|
|
187
222
|
== Download and installation
|
188
223
|
|
@@ -192,12 +227,14 @@ The latest version of Active Model can be installed with RubyGems:
|
|
192
227
|
|
193
228
|
Source code can be downloaded as part of the Rails project on GitHub
|
194
229
|
|
195
|
-
* https://github.com/rails/rails/tree/
|
230
|
+
* https://github.com/rails/rails/tree/master/activemodel
|
196
231
|
|
197
232
|
|
198
233
|
== License
|
199
234
|
|
200
|
-
Active Model is released under the MIT license
|
235
|
+
Active Model is released under the MIT license:
|
236
|
+
|
237
|
+
* http://www.opensource.org/licenses/MIT
|
201
238
|
|
202
239
|
|
203
240
|
== Support
|
data/lib/active_model.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2004-
|
2
|
+
# Copyright (c) 2004-2013 David Heinemeier Hansson
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -21,9 +21,8 @@
|
|
21
21
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
22
|
#++
|
23
23
|
|
24
|
-
activesupport_path = File.expand_path('../../../activesupport/lib', __FILE__)
|
25
|
-
$:.unshift(activesupport_path) if File.directory?(activesupport_path) && !$:.include?(activesupport_path)
|
26
24
|
require 'active_support'
|
25
|
+
require 'active_support/rails'
|
27
26
|
require 'active_model/version'
|
28
27
|
|
29
28
|
module ActiveModel
|
@@ -35,13 +34,12 @@ module ActiveModel
|
|
35
34
|
autoload :Conversion
|
36
35
|
autoload :Dirty
|
37
36
|
autoload :EachValidator, 'active_model/validator'
|
38
|
-
autoload :
|
37
|
+
autoload :ForbiddenAttributesProtection
|
39
38
|
autoload :Lint
|
40
|
-
autoload :
|
39
|
+
autoload :Model
|
40
|
+
autoload :DeprecatedMassAssignmentSecurity
|
41
41
|
autoload :Name, 'active_model/naming'
|
42
42
|
autoload :Naming
|
43
|
-
autoload :Observer, 'active_model/observing'
|
44
|
-
autoload :Observing
|
45
43
|
autoload :SecurePassword
|
46
44
|
autoload :Serialization
|
47
45
|
autoload :TestCase
|
@@ -49,13 +47,25 @@ module ActiveModel
|
|
49
47
|
autoload :Validations
|
50
48
|
autoload :Validator
|
51
49
|
|
50
|
+
eager_autoload do
|
51
|
+
autoload :Errors
|
52
|
+
end
|
53
|
+
|
52
54
|
module Serializers
|
53
55
|
extend ActiveSupport::Autoload
|
54
56
|
|
55
|
-
|
56
|
-
|
57
|
+
eager_autoload do
|
58
|
+
autoload :JSON
|
59
|
+
autoload :Xml
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def eager_load!
|
64
|
+
super
|
65
|
+
ActiveModel::Serializer.eager_load!
|
57
66
|
end
|
58
67
|
end
|
59
68
|
|
60
|
-
|
61
|
-
I18n.load_path << File.dirname(__FILE__) + '/active_model/locale/en.yml'
|
69
|
+
ActiveSupport.on_load(:i18n) do
|
70
|
+
I18n.load_path << File.dirname(__FILE__) + '/active_model/locale/en.yml'
|
71
|
+
end
|