activemodel 3.1.12 → 3.2.0.rc1

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.
Files changed (33) hide show
  1. data/CHANGELOG.md +81 -36
  2. data/README.rdoc +1 -1
  3. data/lib/active_model/attribute_methods.rb +123 -104
  4. data/lib/active_model/callbacks.rb +2 -2
  5. data/lib/active_model/conversion.rb +26 -2
  6. data/lib/active_model/dirty.rb +3 -3
  7. data/lib/active_model/errors.rb +63 -51
  8. data/lib/active_model/lint.rb +12 -3
  9. data/lib/active_model/mass_assignment_security.rb +27 -8
  10. data/lib/active_model/mass_assignment_security/permission_set.rb +5 -5
  11. data/lib/active_model/mass_assignment_security/sanitizer.rb +42 -6
  12. data/lib/active_model/naming.rb +18 -10
  13. data/lib/active_model/observer_array.rb +3 -3
  14. data/lib/active_model/observing.rb +1 -2
  15. data/lib/active_model/secure_password.rb +2 -2
  16. data/lib/active_model/serialization.rb +61 -10
  17. data/lib/active_model/serializers/json.rb +20 -14
  18. data/lib/active_model/serializers/xml.rb +55 -31
  19. data/lib/active_model/translation.rb +15 -3
  20. data/lib/active_model/validations.rb +1 -1
  21. data/lib/active_model/validations/acceptance.rb +3 -1
  22. data/lib/active_model/validations/confirmation.rb +3 -1
  23. data/lib/active_model/validations/exclusion.rb +5 -3
  24. data/lib/active_model/validations/format.rb +4 -2
  25. data/lib/active_model/validations/inclusion.rb +5 -3
  26. data/lib/active_model/validations/length.rb +22 -10
  27. data/lib/active_model/validations/numericality.rb +4 -2
  28. data/lib/active_model/validations/presence.rb +5 -3
  29. data/lib/active_model/validations/validates.rb +15 -3
  30. data/lib/active_model/validations/with.rb +4 -2
  31. data/lib/active_model/version.rb +3 -3
  32. metadata +21 -28
  33. checksums.yaml +0 -7
@@ -43,13 +43,25 @@ module ActiveModel
43
43
  #
44
44
  # Specify +options+ with additional translating options.
45
45
  def human_attribute_name(attribute, options = {})
46
- defaults = lookup_ancestors.map do |klass|
47
- :"#{self.i18n_scope}.attributes.#{klass.model_name.i18n_key}.#{attribute}"
46
+ defaults = []
47
+ parts = attribute.to_s.split(".", 2)
48
+ attribute = parts.pop
49
+ namespace = parts.pop
50
+
51
+ if namespace
52
+ lookup_ancestors.each do |klass|
53
+ defaults << :"#{self.i18n_scope}.attributes.#{klass.model_name.i18n_key}/#{namespace}.#{attribute}"
54
+ end
55
+ defaults << :"#{self.i18n_scope}.attributes.#{namespace}.#{attribute}"
56
+ else
57
+ lookup_ancestors.each do |klass|
58
+ defaults << :"#{self.i18n_scope}.attributes.#{klass.model_name.i18n_key}.#{attribute}"
59
+ end
48
60
  end
49
61
 
50
62
  defaults << :"attributes.#{attribute}"
51
63
  defaults << options.delete(:default) if options[:default]
52
- defaults << attribute.to_s.humanize
64
+ defaults << attribute.humanize
53
65
 
54
66
  options.reverse_merge! :count => 1, :default => defaults
55
67
  I18n.translate(defaults.shift, options)
@@ -81,7 +81,7 @@ module ActiveModel
81
81
  # proc or string should return or evaluate to a true or false value.
82
82
  # * <tt>:unless</tt> - Specifies a method, proc or string to call to determine if the validation should
83
83
  # not occur (e.g. <tt>:unless => :skip_validation</tt>, or
84
- # <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>). The
84
+ # <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>). The
85
85
  # method, proc or string should return or evaluate to a true or false value.
86
86
  def validates_each(*attr_names, &block)
87
87
  options = attr_names.extract_options!.symbolize_keys
@@ -49,7 +49,7 @@ module ActiveModel
49
49
  # before validation.
50
50
  # * <tt>:if</tt> - Specifies a method, proc or string to call to determine
51
51
  # if the validation should occur (e.g. <tt>:if => :allow_validation</tt>,
52
- # or <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>). The
52
+ # or <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>). The
53
53
  # method, proc or string should return or evaluate to a true or false
54
54
  # value.
55
55
  # * <tt>:unless</tt> - Specifies a method, proc or string to call to
@@ -58,6 +58,8 @@ module ActiveModel
58
58
  # <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>).
59
59
  # The method, proc or string should return or evaluate to a true or
60
60
  # false value.
61
+ # * <tt>:strict</tt> - Specifies whether validation should be strict.
62
+ # See <tt>ActiveModel::Validation#validates!</tt> for more information
61
63
  def validates_acceptance_of(*attr_names)
62
64
  validates_with AcceptanceValidator, _merge_attributes(attr_names)
63
65
  end
@@ -50,7 +50,7 @@ module ActiveModel
50
50
  # and <tt>:update</tt>.
51
51
  # * <tt>:if</tt> - Specifies a method, proc or string to call to determine
52
52
  # if the validation should occur (e.g. <tt>:if => :allow_validation</tt>,
53
- # or <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>). The
53
+ # or <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>). The
54
54
  # method, proc or string should return or evaluate to a true or false
55
55
  # value.
56
56
  # * <tt>:unless</tt> - Specifies a method, proc or string to call to
@@ -58,6 +58,8 @@ module ActiveModel
58
58
  # <tt>:unless => :skip_validation</tt>, or
59
59
  # <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>). The
60
60
  # method, proc or string should return or evaluate to a true or false value.
61
+ # * <tt>:strict</tt> - Specifies whether validation should be strict.
62
+ # See <tt>ActiveModel::Validation#validates!</tt> for more information
61
63
  def validates_confirmation_of(*attr_names)
62
64
  validates_with ConfirmationValidator, _merge_attributes(attr_names)
63
65
  end
@@ -1,4 +1,4 @@
1
- require 'active_support/core_ext/range.rb'
1
+ require 'active_support/core_ext/range'
2
2
 
3
3
  module ActiveModel
4
4
 
@@ -54,11 +54,13 @@ module ActiveModel
54
54
  # validation contexts by default (+nil+), other options are <tt>:create</tt>
55
55
  # and <tt>:update</tt>.
56
56
  # * <tt>:if</tt> - Specifies a method, proc or string to call to determine if the validation should
57
- # occur (e.g. <tt>:if => :allow_validation</tt>, or <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>). The
57
+ # occur (e.g. <tt>:if => :allow_validation</tt>, or <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>). The
58
58
  # method, proc or string should return or evaluate to a true or false value.
59
59
  # * <tt>:unless</tt> - Specifies a method, proc or string to call to determine if the validation should
60
- # not occur (e.g. <tt>:unless => :skip_validation</tt>, or <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>). The
60
+ # not occur (e.g. <tt>:unless => :skip_validation</tt>, or <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>). The
61
61
  # method, proc or string should return or evaluate to a true or false value.
62
+ # * <tt>:strict</tt> - Specifies whether validation should be strict.
63
+ # See <tt>ActiveModel::Validation#validates!</tt> for more information
62
64
  def validates_exclusion_of(*attr_names)
63
65
  validates_with ExclusionValidator, _merge_attributes(attr_names)
64
66
  end
@@ -79,11 +79,13 @@ module ActiveModel
79
79
  # validation contexts by default (+nil+), other options are <tt>:create</tt>
80
80
  # and <tt>:update</tt>.
81
81
  # * <tt>:if</tt> - Specifies a method, proc or string to call to determine if the validation should
82
- # occur (e.g. <tt>:if => :allow_validation</tt>, or <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>). The
82
+ # occur (e.g. <tt>:if => :allow_validation</tt>, or <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>). The
83
83
  # method, proc or string should return or evaluate to a true or false value.
84
84
  # * <tt>:unless</tt> - Specifies a method, proc or string to call to determine if the validation should
85
- # not occur (e.g. <tt>:unless => :skip_validation</tt>, or <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>). The
85
+ # not occur (e.g. <tt>:unless => :skip_validation</tt>, or <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>). The
86
86
  # method, proc or string should return or evaluate to a true or false value.
87
+ # * <tt>:strict</tt> - Specifies whether validation should be strict.
88
+ # See <tt>ActiveModel::Validation#validates!</tt> for more information
87
89
  def validates_format_of(*attr_names)
88
90
  validates_with FormatValidator, _merge_attributes(attr_names)
89
91
  end
@@ -1,4 +1,4 @@
1
- require 'active_support/core_ext/range.rb'
1
+ require 'active_support/core_ext/range'
2
2
 
3
3
  module ActiveModel
4
4
 
@@ -54,11 +54,13 @@ module ActiveModel
54
54
  # validation contexts by default (+nil+), other options are <tt>:create</tt>
55
55
  # and <tt>:update</tt>.
56
56
  # * <tt>:if</tt> - Specifies a method, proc or string to call to determine if the validation should
57
- # occur (e.g. <tt>:if => :allow_validation</tt>, or <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>). The
57
+ # occur (e.g. <tt>:if => :allow_validation</tt>, or <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>). The
58
58
  # method, proc or string should return or evaluate to a true or false value.
59
59
  # * <tt>:unless</tt> - Specifies a method, proc or string to call to determine if the validation should
60
- # not occur (e.g. <tt>:unless => :skip_validation</tt>, or <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>). The
60
+ # not occur (e.g. <tt>:unless => :skip_validation</tt>, or <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>). The
61
61
  # method, proc or string should return or evaluate to a true or false value.
62
+ # * <tt>:strict</tt> - Specifies whether validation should be strict.
63
+ # See <tt>ActiveModel::Validation#validates!</tt> for more information
62
64
  def validates_inclusion_of(*attr_names)
63
65
  validates_with InclusionValidator, _merge_attributes(attr_names)
64
66
  end
@@ -1,3 +1,5 @@
1
+ require "active_support/core_ext/string/encoding"
2
+
1
3
  module ActiveModel
2
4
 
3
5
  # == Active Model Length Validator
@@ -6,7 +8,6 @@ module ActiveModel
6
8
  MESSAGES = { :is => :wrong_length, :minimum => :too_short, :maximum => :too_long }.freeze
7
9
  CHECKS = { :is => :==, :minimum => :>=, :maximum => :<= }.freeze
8
10
 
9
- DEFAULT_TOKENIZER = lambda { |value| value.split(//) }
10
11
  RESERVED_OPTIONS = [:minimum, :maximum, :within, :is, :tokenizer, :too_short, :too_long]
11
12
 
12
13
  def initialize(options)
@@ -23,7 +24,7 @@ module ActiveModel
23
24
  keys = CHECKS.keys & options.keys
24
25
 
25
26
  if keys.empty?
26
- raise ArgumentError, 'Range unspecified. Specify the :within, :maximum, :minimum, or :is option.'
27
+ raise ArgumentError, 'Range unspecified. Specify the :in, :within, :maximum, :minimum, or :is option.'
27
28
  end
28
29
 
29
30
  keys.each do |key|
@@ -36,14 +37,11 @@ module ActiveModel
36
37
  end
37
38
 
38
39
  def validate_each(record, attribute, value)
39
- value = (options[:tokenizer] || DEFAULT_TOKENIZER).call(value) if value.kind_of?(String)
40
+ value = tokenize(value)
41
+ value_length = value.respond_to?(:length) ? value.length : value.to_s.length
40
42
 
41
43
  CHECKS.each do |key, validity_check|
42
44
  next unless check_value = options[key]
43
-
44
- value ||= [] if key == :maximum
45
-
46
- value_length = value.respond_to?(:length) ? value.length : value.to_s.length
47
45
  next if value_length.send(validity_check, check_value)
48
46
 
49
47
  errors_options = options.except(*RESERVED_OPTIONS)
@@ -55,6 +53,18 @@ module ActiveModel
55
53
  record.errors.add(attribute, MESSAGES[key], errors_options)
56
54
  end
57
55
  end
56
+
57
+ private
58
+
59
+ def tokenize(value)
60
+ if value.kind_of?(String)
61
+ if options[:tokenizer]
62
+ options[:tokenizer].call(value)
63
+ elsif !value.encoding_aware?
64
+ value.mb_chars
65
+ end
66
+ end || value
67
+ end
58
68
  end
59
69
 
60
70
  module HelperMethods
@@ -83,19 +93,21 @@ module ActiveModel
83
93
  # * <tt>:too_long</tt> - The error message if the attribute goes over the maximum (default is: "is too long (maximum is %{count} characters)").
84
94
  # * <tt>:too_short</tt> - The error message if the attribute goes under the minimum (default is: "is too short (min is %{count} characters)").
85
95
  # * <tt>:wrong_length</tt> - The error message if using the <tt>:is</tt> method and the attribute is the wrong size (default is: "is the wrong length (should be %{count} characters)").
86
- # * <tt>:message</tt> - The error message to use for a <tt>:minimum</tt>, <tt>:maximum</tt>, or <tt>:is</tt> violation. An alias of the appropriate <tt>too_long</tt>/<tt>too_short</tt>/<tt>wrong_length</tt> message.
96
+ # * <tt>:message</tt> - The error message to use for a <tt>:minimum</tt>, <tt>:maximum</tt>, or <tt>:is</tt> violation. An alias of the appropriate <tt>too_long</tt>/<tt>too_short</tt>/<tt>wrong_length</tt> message.
87
97
  # * <tt>:on</tt> - Specifies when this validation is active. Runs in all
88
98
  # validation contexts by default (+nil+), other options are <tt>:create</tt>
89
99
  # and <tt>:update</tt>.
90
100
  # * <tt>:if</tt> - Specifies a method, proc or string to call to determine if the validation should
91
- # occur (e.g. <tt>:if => :allow_validation</tt>, or <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>). The
101
+ # occur (e.g. <tt>:if => :allow_validation</tt>, or <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>). The
92
102
  # method, proc or string should return or evaluate to a true or false value.
93
103
  # * <tt>:unless</tt> - Specifies a method, proc or string to call to determine if the validation should
94
- # not occur (e.g. <tt>:unless => :skip_validation</tt>, or <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>). The
104
+ # not occur (e.g. <tt>:unless => :skip_validation</tt>, or <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>). The
95
105
  # method, proc or string should return or evaluate to a true or false value.
96
106
  # * <tt>:tokenizer</tt> - Specifies how to split up the attribute string. (e.g. <tt>:tokenizer => lambda {|str| str.scan(/\w+/)}</tt> to
97
107
  # count words as in above example.)
98
108
  # Defaults to <tt>lambda{ |value| value.split(//) }</tt> which counts individual characters.
109
+ # * <tt>:strict</tt> - Specifies whether validation should be strict.
110
+ # See <tt>ActiveModel::Validation#validates!</tt> for more information
99
111
  def validates_length_of(*attr_names)
100
112
  validates_with LengthValidator, _merge_attributes(attr_names)
101
113
  end
@@ -102,11 +102,13 @@ module ActiveModel
102
102
  # * <tt>:odd</tt> - Specifies the value must be an odd number.
103
103
  # * <tt>:even</tt> - Specifies the value must be an even number.
104
104
  # * <tt>:if</tt> - Specifies a method, proc or string to call to determine if the validation should
105
- # occur (e.g. <tt>:if => :allow_validation</tt>, or <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>). The
105
+ # occur (e.g. <tt>:if => :allow_validation</tt>, or <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>). The
106
106
  # method, proc or string should return or evaluate to a true or false value.
107
107
  # * <tt>:unless</tt> - Specifies a method, proc or string to call to determine if the validation should
108
- # not occur (e.g. <tt>:unless => :skip_validation</tt>, or <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>). The
108
+ # not occur (e.g. <tt>:unless => :skip_validation</tt>, or <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>). The
109
109
  # method, proc or string should return or evaluate to a true or false value.
110
+ # * <tt>:strict</tt> - Specifies whether validation should be strict.
111
+ # See <tt>ActiveModel::Validation#validates!</tt> for more information
110
112
  #
111
113
  # The following checks can also be supplied with a proc or a symbol which corresponds to a method:
112
114
  # * <tt>:greater_than</tt>
@@ -25,16 +25,18 @@ module ActiveModel
25
25
  # This is due to the way Object#blank? handles boolean values: <tt>false.blank? # => true</tt>.
26
26
  #
27
27
  # Configuration options:
28
- # * <tt>message</tt> - A custom error message (default is: "can't be blank").
28
+ # * <tt>:message</tt> - A custom error message (default is: "can't be blank").
29
29
  # * <tt>:on</tt> - Specifies when this validation is active. Runs in all
30
30
  # validation contexts by default (+nil+), other options are <tt>:create</tt>
31
31
  # and <tt>:update</tt>.
32
- # * <tt>if</tt> - Specifies a method, proc or string to call to determine if the validation should
32
+ # * <tt>:if</tt> - Specifies a method, proc or string to call to determine if the validation should
33
33
  # occur (e.g. <tt>:if => :allow_validation</tt>, or <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>).
34
34
  # The method, proc or string should return or evaluate to a true or false value.
35
- # * <tt>unless</tt> - Specifies a method, proc or string to call to determine if the validation should
35
+ # * <tt>:unless</tt> - Specifies a method, proc or string to call to determine if the validation should
36
36
  # not occur (e.g. <tt>:unless => :skip_validation</tt>, or <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>).
37
37
  # The method, proc or string should return or evaluate to a true or false value.
38
+ # * <tt>:strict</tt> - Specifies whether validation should be strict.
39
+ # See <tt>ActiveModel::Validation#validates!</tt> for more information
38
40
  #
39
41
  def validates_presence_of(*attr_names)
40
42
  validates_with PresenceValidator, _merge_attributes(attr_names)
@@ -70,8 +70,8 @@ module ActiveModel
70
70
  # validator's initializer as +options[:in]+ while other types including
71
71
  # regular expressions and strings are passed as +options[:with]+
72
72
  #
73
- # Finally, the options +:if+, +:unless+, +:on+, +:allow_blank+ and +:allow_nil+ can be given
74
- # to one specific validator, as a hash:
73
+ # Finally, the options +:if+, +:unless+, +:on+, +:allow_blank+, +:allow_nil+ and +:strict+
74
+ # can be given to one specific validator, as a hash:
75
75
  #
76
76
  # validates :password, :presence => { :if => :password_required? }, :confirmation => true
77
77
  #
@@ -101,12 +101,24 @@ module ActiveModel
101
101
  end
102
102
  end
103
103
 
104
+ # This method is used to define validation that can not be corrected by end user
105
+ # and is considered exceptional.
106
+ # So each validator defined with bang or <tt>:strict</tt> option set to <tt>true</tt>
107
+ # will always raise <tt>ActiveModel::InternalValidationFailed</tt> instead of adding error
108
+ # when validation fails
109
+ # See <tt>validates</tt> for more information about validation itself.
110
+ def validates!(*attributes)
111
+ options = attributes.extract_options!
112
+ options[:strict] = true
113
+ validates(*(attributes << options))
114
+ end
115
+
104
116
  protected
105
117
 
106
118
  # When creating custom validators, it might be useful to be able to specify
107
119
  # additional default keys. This can be done by overwriting this method.
108
120
  def _validates_default_keys
109
- [ :if, :unless, :on, :allow_blank, :allow_nil ]
121
+ [ :if, :unless, :on, :allow_blank, :allow_nil , :strict]
110
122
  end
111
123
 
112
124
  def _parse_validates_options(options) #:nodoc:
@@ -56,12 +56,14 @@ module ActiveModel
56
56
  # if the validation should occur (e.g. <tt>:if => :allow_validation</tt>,
57
57
  # or <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>).
58
58
  # The method, proc or string should return or evaluate to a true or false value.
59
- # * <tt>unless</tt> - Specifies a method, proc or string to call to
59
+ # * <tt>:unless</tt> - Specifies a method, proc or string to call to
60
60
  # determine if the validation should not occur
61
61
  # (e.g. <tt>:unless => :skip_validation</tt>, or
62
62
  # <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>).
63
63
  # The method, proc or string should return or evaluate to a true or false value.
64
- #
64
+ # * <tt>:strict</tt> - Specifies whether validation should be strict.
65
+ # See <tt>ActiveModel::Validation#validates!</tt> for more information
66
+
65
67
  # If you pass any additional configuration options, they will be passed
66
68
  # to the class and available as <tt>options</tt>:
67
69
  #
@@ -1,9 +1,9 @@
1
1
  module ActiveModel
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 3
4
- MINOR = 1
5
- TINY = 12
6
- PRE = nil
4
+ MINOR = 2
5
+ TINY = 0
6
+ PRE = "rc1"
7
7
 
8
8
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
9
9
  end
metadata CHANGED
@@ -1,57 +1,49 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activemodel
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.12
4
+ version: 3.2.0.rc1
5
+ prerelease: 6
5
6
  platform: ruby
6
7
  authors:
7
8
  - David Heinemeier Hansson
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-03-18 00:00:00.000000000 Z
12
+ date: 2011-12-20 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: activesupport
15
- requirement: !ruby/object:Gem::Requirement
16
+ requirement: &2156002640 !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
- - - '='
19
+ - - =
18
20
  - !ruby/object:Gem::Version
19
- version: 3.1.12
21
+ version: 3.2.0.rc1
20
22
  type: :runtime
21
23
  prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - '='
25
- - !ruby/object:Gem::Version
26
- version: 3.1.12
24
+ version_requirements: *2156002640
27
25
  - !ruby/object:Gem::Dependency
28
26
  name: builder
29
- requirement: !ruby/object:Gem::Requirement
27
+ requirement: &2156000140 !ruby/object:Gem::Requirement
28
+ none: false
30
29
  requirements:
31
30
  - - ~>
32
31
  - !ruby/object:Gem::Version
33
32
  version: 3.0.0
34
33
  type: :runtime
35
34
  prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ~>
39
- - !ruby/object:Gem::Version
40
- version: 3.0.0
35
+ version_requirements: *2156000140
41
36
  - !ruby/object:Gem::Dependency
42
37
  name: i18n
43
- requirement: !ruby/object:Gem::Requirement
38
+ requirement: &2156012440 !ruby/object:Gem::Requirement
39
+ none: false
44
40
  requirements:
45
41
  - - ~>
46
42
  - !ruby/object:Gem::Version
47
43
  version: '0.6'
48
44
  type: :runtime
49
45
  prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ~>
53
- - !ruby/object:Gem::Version
54
- version: '0.6'
46
+ version_requirements: *2156012440
55
47
  description: A toolkit for building modeling frameworks like Active Record and Active
56
48
  Resource. Rich support for attributes, callbacks, validations, observers, serialization,
57
49
  internationalization, and testing.
@@ -100,25 +92,26 @@ files:
100
92
  - lib/active_model.rb
101
93
  homepage: http://www.rubyonrails.org
102
94
  licenses: []
103
- metadata: {}
104
95
  post_install_message:
105
96
  rdoc_options: []
106
97
  require_paths:
107
98
  - lib
108
99
  required_ruby_version: !ruby/object:Gem::Requirement
100
+ none: false
109
101
  requirements:
110
- - - '>='
102
+ - - ! '>='
111
103
  - !ruby/object:Gem::Version
112
104
  version: 1.8.7
113
105
  required_rubygems_version: !ruby/object:Gem::Requirement
106
+ none: false
114
107
  requirements:
115
- - - '>='
108
+ - - ! '>'
116
109
  - !ruby/object:Gem::Version
117
- version: '0'
110
+ version: 1.3.1
118
111
  requirements: []
119
112
  rubyforge_project:
120
- rubygems_version: 2.0.2
113
+ rubygems_version: 1.8.7
121
114
  signing_key:
122
- specification_version: 4
115
+ specification_version: 3
123
116
  summary: A toolkit for building modeling frameworks (part of Rails).
124
117
  test_files: []
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 5983e5578edceaef564bb5fc25b9415d898ff381
4
- data.tar.gz: b92519a5a3399e31e92b88678cf834222fac748e
5
- SHA512:
6
- metadata.gz: 91286ac9389aa87663fb30f6193458d34d9841e5b3355521d9836a22d7d4b0efc1d52882822f632323687cd642da71bc64ff73ff60a7761147c24c179d3b5c80
7
- data.tar.gz: fb9971035a859a14245cdefe6da5ac3e0c1b88914dcd18aac0a77fbf978f7c8a4b7683f05520e3cd089d43ca425f20150012d8a315f73d748b1e7343b913f367