# typed: true # DO NOT EDIT MANUALLY # This is an autogenerated file for types exported from the `activemodel` gem. # Please instead update this file by running `bin/tapioca gem activemodel`. # :include: ../README.rdoc # # source://activemodel//lib/active_model/gem_version.rb#3 module ActiveModel extend ::ActiveSupport::Autoload class << self # source://activemodel//lib/active_model/deprecator.rb#4 def deprecator; end # source://activemodel//lib/active_model.rb#76 def eager_load!; end # Returns the currently loaded version of \Active \Model as a +Gem::Version+. # # source://activemodel//lib/active_model/gem_version.rb#5 def gem_version; end # Returns the currently loaded version of \Active \Model as a +Gem::Version+. # # source://activemodel//lib/active_model/version.rb#7 def version; end end end # = Active \Model \API # # Includes the required interface for an object to interact with # Action Pack and Action View, using different Active \Model modules. # It includes model name introspections, conversions, translations, and # validations. Besides that, it allows you to initialize the object with a # hash of attributes, pretty much like Active Record does. # # A minimal implementation could be: # # class Person # include ActiveModel::API # attr_accessor :name, :age # end # # person = Person.new(name: 'bob', age: '18') # person.name # => "bob" # person.age # => "18" # # Note that, by default, +ActiveModel::API+ implements #persisted? # to return +false+, which is the most common case. You may want to override # it in your class to simulate a different scenario: # # class Person # include ActiveModel::API # attr_accessor :id, :name # # def persisted? # self.id.present? # end # end # # person = Person.new(id: 1, name: 'bob') # person.persisted? # => true # # Also, if for some reason you need to run code on initialize ( ::new ), make # sure you call +super+ if you want the attributes hash initialization to # happen. # # class Person # include ActiveModel::API # attr_accessor :id, :name, :omg # # def initialize(attributes={}) # super # @omg ||= true # end # end # # person = Person.new(id: 1, name: 'bob') # person.omg # => true # # For more detailed information on other functionalities available, please # refer to the specific modules included in +ActiveModel::API+ # (see below). # # source://activemodel//lib/active_model/api.rb#59 module ActiveModel::API include ::ActiveModel::ForbiddenAttributesProtection include ::ActiveModel::AttributeAssignment extend ::ActiveSupport::Concern include GeneratedInstanceMethods include ::ActiveSupport::Callbacks include ::ActiveModel::Validations::HelperMethods include ::ActiveModel::Validations include ::ActiveModel::Conversion mixes_in_class_methods GeneratedClassMethods mixes_in_class_methods ::ActiveModel::Validations::ClassMethods mixes_in_class_methods ::ActiveModel::Callbacks mixes_in_class_methods ::ActiveSupport::Callbacks::ClassMethods mixes_in_class_methods ::ActiveSupport::DescendantsTracker mixes_in_class_methods ::ActiveModel::Translation mixes_in_class_methods ::ActiveModel::Validations::HelperMethods mixes_in_class_methods ::ActiveModel::Conversion::ClassMethods # Initializes a new model with the given +params+. # # class Person # include ActiveModel::API # attr_accessor :name, :age # end # # person = Person.new(name: 'bob', age: '18') # person.name # => "bob" # person.age # => "18" # # source://activemodel//lib/active_model/api.rb#80 def initialize(attributes = T.unsafe(nil)); end # Indicates if the model is persisted. Default is +false+. # # class Person # include ActiveModel::API # attr_accessor :id, :name # end # # person = Person.new(id: 1, name: 'bob') # person.persisted? # => false # # @return [Boolean] # # source://activemodel//lib/active_model/api.rb#95 def persisted?; end module GeneratedClassMethods def __callbacks; end def __callbacks=(value); end def _validators; end def _validators=(value); end def _validators?; end def param_delimiter; end def param_delimiter=(value); end def param_delimiter?; end end module GeneratedInstanceMethods def __callbacks; end def _validators; end def _validators?; end def param_delimiter=(value); end end end # source://activemodel//lib/active_model/access.rb#7 module ActiveModel::Access # source://activemodel//lib/active_model/access.rb#8 def slice(*methods); end # source://activemodel//lib/active_model/access.rb#12 def values_at(*methods); end end # source://activemodel//lib/active_model/attribute.rb#6 class ActiveModel::Attribute # This method should not be called directly. # Use #from_database or #from_user # # @return [Attribute] a new instance of Attribute # # source://activemodel//lib/active_model/attribute.rb#33 def initialize(name, value_before_type_cast, type, original_attribute = T.unsafe(nil), value = T.unsafe(nil)); end # source://activemodel//lib/active_model/attribute.rb#115 def ==(other); end # @return [Boolean] # # source://activemodel//lib/active_model/attribute.rb#107 def came_from_user?; end # @return [Boolean] # # source://activemodel//lib/active_model/attribute.rb#66 def changed?; end # @return [Boolean] # # source://activemodel//lib/active_model/attribute.rb#70 def changed_in_place?; end # source://activemodel//lib/active_model/attribute.rb#135 def encode_with(coder); end # source://activemodel//lib/active_model/attribute.rb#115 def eql?(other); end # source://activemodel//lib/active_model/attribute.rb#74 def forgetting_assignment; end # @return [Boolean] # # source://activemodel//lib/active_model/attribute.rb#111 def has_been_read?; end # source://activemodel//lib/active_model/attribute.rb#123 def hash; end # source://activemodel//lib/active_model/attribute.rb#127 def init_with(coder); end # @return [Boolean] # # source://activemodel//lib/active_model/attribute.rb#103 def initialized?; end # Returns the value of attribute name. # # source://activemodel//lib/active_model/attribute.rb#29 def name; end # source://activemodel//lib/active_model/attribute.rb#47 def original_value; end # source://activemodel//lib/active_model/attribute.rb#143 def original_value_for_database; end # @return [Boolean] # # source://activemodel//lib/active_model/attribute.rb#62 def serializable?(&block); end # Returns the value of attribute type. # # source://activemodel//lib/active_model/attribute.rb#29 def type; end # @raise [NotImplementedError] # # source://activemodel//lib/active_model/attribute.rb#99 def type_cast(*_arg0); end # source://activemodel//lib/active_model/attribute.rb#41 def value; end # Returns the value of attribute value_before_type_cast. # # source://activemodel//lib/active_model/attribute.rb#29 def value_before_type_cast; end # source://activemodel//lib/active_model/attribute.rb#55 def value_for_database; end # source://activemodel//lib/active_model/attribute.rb#87 def with_cast_value(value); end # source://activemodel//lib/active_model/attribute.rb#91 def with_type(type); end # source://activemodel//lib/active_model/attribute/user_provided_default.rb#7 def with_user_default(value); end # source://activemodel//lib/active_model/attribute.rb#83 def with_value_from_database(value); end # source://activemodel//lib/active_model/attribute.rb#78 def with_value_from_user(value); end private # source://activemodel//lib/active_model/attribute.rb#169 def _original_value_for_database; end # source://activemodel//lib/active_model/attribute.rb#165 def _value_for_database; end # Returns the value of attribute original_attribute. # # source://activemodel//lib/active_model/attribute.rb#152 def assigned?; end # @return [Boolean] # # source://activemodel//lib/active_model/attribute.rb#161 def changed_from_assignment?; end # source://activemodel//lib/active_model/attribute.rb#155 def initialize_dup(other); end # Returns the value of attribute original_attribute. # # source://activemodel//lib/active_model/attribute.rb#152 def original_attribute; end class << self # source://activemodel//lib/active_model/attribute.rb#8 def from_database(name, value_before_type_cast, type, value = T.unsafe(nil)); end # source://activemodel//lib/active_model/attribute.rb#12 def from_user(name, value_before_type_cast, type, original_attribute = T.unsafe(nil)); end # source://activemodel//lib/active_model/attribute.rb#20 def null(name); end # source://activemodel//lib/active_model/attribute.rb#24 def uninitialized(name, type); end # source://activemodel//lib/active_model/attribute.rb#16 def with_cast_value(name, value_before_type_cast, type); end end end # source://activemodel//lib/active_model/attribute.rb#173 class ActiveModel::Attribute::FromDatabase < ::ActiveModel::Attribute # source://activemodel//lib/active_model/attribute.rb#178 def forgetting_assignment; end # source://activemodel//lib/active_model/attribute.rb#174 def type_cast(value); end private # source://activemodel//lib/active_model/attribute.rb#192 def _original_value_for_database; end end # source://activemodel//lib/active_model/attribute.rb#197 class ActiveModel::Attribute::FromUser < ::ActiveModel::Attribute # @return [Boolean] # # source://activemodel//lib/active_model/attribute.rb#202 def came_from_user?; end # source://activemodel//lib/active_model/attribute.rb#198 def type_cast(value); end private # source://activemodel//lib/active_model/attribute.rb#207 def _value_for_database; end end # source://activemodel//lib/active_model/attribute.rb#222 class ActiveModel::Attribute::Null < ::ActiveModel::Attribute # @return [Null] a new instance of Null # # source://activemodel//lib/active_model/attribute.rb#223 def initialize(name); end # source://activemodel//lib/active_model/attribute.rb#227 def type_cast(*_arg0); end # @raise [ActiveModel::MissingAttributeError] # # source://activemodel//lib/active_model/attribute.rb#235 def with_cast_value(value); end # source://activemodel//lib/active_model/attribute.rb#231 def with_type(type); end # @raise [ActiveModel::MissingAttributeError] # # source://activemodel//lib/active_model/attribute.rb#235 def with_value_from_database(value); end # @raise [ActiveModel::MissingAttributeError] # # source://activemodel//lib/active_model/attribute.rb#235 def with_value_from_user(value); end end # source://activemodel//lib/active_model/attribute.rb#242 class ActiveModel::Attribute::Uninitialized < ::ActiveModel::Attribute # @return [Uninitialized] a new instance of Uninitialized # # source://activemodel//lib/active_model/attribute.rb#245 def initialize(name, type); end # source://activemodel//lib/active_model/attribute.rb#266 def forgetting_assignment; end # @return [Boolean] # # source://activemodel//lib/active_model/attribute.rb#262 def initialized?; end # source://activemodel//lib/active_model/attribute.rb#255 def original_value; end # source://activemodel//lib/active_model/attribute.rb#249 def value; end # source://activemodel//lib/active_model/attribute.rb#259 def value_for_database; end # source://activemodel//lib/active_model/attribute.rb#270 def with_type(type); end end # source://activemodel//lib/active_model/attribute.rb#243 ActiveModel::Attribute::Uninitialized::UNINITIALIZED_ORIGINAL_VALUE = T.let(T.unsafe(nil), Object) # source://activemodel//lib/active_model/attribute/user_provided_default.rb#11 class ActiveModel::Attribute::UserProvidedDefault < ::ActiveModel::Attribute::FromUser # @return [UserProvidedDefault] a new instance of UserProvidedDefault # # source://activemodel//lib/active_model/attribute/user_provided_default.rb#12 def initialize(name, value, type, database_default); end # source://activemodel//lib/active_model/attribute/user_provided_default.rb#29 def marshal_dump; end # source://activemodel//lib/active_model/attribute/user_provided_default.rb#40 def marshal_load(values); end # source://activemodel//lib/active_model/attribute/user_provided_default.rb#17 def value_before_type_cast; end # source://activemodel//lib/active_model/attribute/user_provided_default.rb#25 def with_type(type); end private # Returns the value of attribute user_provided_value. # # source://activemodel//lib/active_model/attribute/user_provided_default.rb#52 def user_provided_value; end end # source://activemodel//lib/active_model/attribute.rb#212 class ActiveModel::Attribute::WithCastValue < ::ActiveModel::Attribute # @return [Boolean] # # source://activemodel//lib/active_model/attribute.rb#217 def changed_in_place?; end # source://activemodel//lib/active_model/attribute.rb#213 def type_cast(value); end end # source://activemodel//lib/active_model/attribute_assignment.rb#6 module ActiveModel::AttributeAssignment include ::ActiveModel::ForbiddenAttributesProtection # Allows you to set all the attributes by passing in a hash of attributes with # keys matching the attribute names. # # If the passed hash responds to permitted? method and the return value # of this method is +false+ an ActiveModel::ForbiddenAttributesError # exception is raised. # # class Cat # include ActiveModel::AttributeAssignment # attr_accessor :name, :status # end # # cat = Cat.new # cat.assign_attributes(name: "Gorby", status: "yawning") # cat.name # => 'Gorby' # cat.status # => 'yawning' # cat.assign_attributes(status: "sleeping") # cat.name # => 'Gorby' # cat.status # => 'sleeping' # # source://activemodel//lib/active_model/attribute_assignment.rb#28 def assign_attributes(new_attributes); end # Like `BasicObject#method_missing`, `#attribute_writer_missing` is invoked # when `#assign_attributes` is passed an unknown attribute name. # # By default, `#attribute_writer_missing` raises an UnknownAttributeError. # # class Rectangle # include ActiveModel::AttributeAssignment # # attr_accessor :length, :width # # def attribute_writer_missing(name, value) # Rails.logger.warn "Tried to assign to unknown attribute #{name}" # end # end # # rectangle = Rectangle.new # rectangle.assign_attributes(height: 10) # => Logs "Tried to assign to unknown attribute 'height'" # # @raise [UnknownAttributeError] # # source://activemodel//lib/active_model/attribute_assignment.rb#56 def attribute_writer_missing(name, value); end # Allows you to set all the attributes by passing in a hash of attributes with # keys matching the attribute names. # # If the passed hash responds to permitted? method and the return value # of this method is +false+ an ActiveModel::ForbiddenAttributesError # exception is raised. # # class Cat # include ActiveModel::AttributeAssignment # attr_accessor :name, :status # end # # cat = Cat.new # cat.assign_attributes(name: "Gorby", status: "yawning") # cat.name # => 'Gorby' # cat.status # => 'yawning' # cat.assign_attributes(status: "sleeping") # cat.name # => 'Gorby' # cat.status # => 'sleeping' # # source://activemodel//lib/active_model/attribute_assignment.rb#28 def attributes=(new_attributes); end private # source://activemodel//lib/active_model/attribute_assignment.rb#67 def _assign_attribute(k, v); end # source://activemodel//lib/active_model/attribute_assignment.rb#61 def _assign_attributes(attributes); end end # = Active \Model \Attribute \Methods # # Provides a way to add prefixes and suffixes to your methods as # well as handling the creation of ActiveRecord::Base - like # class methods such as +table_name+. # # The requirements to implement +ActiveModel::AttributeMethods+ are to: # # * include ActiveModel::AttributeMethods in your class. # * Call each of its methods you want to add, such as +attribute_method_suffix+ # or +attribute_method_prefix+. # * Call +define_attribute_methods+ after the other methods are called. # * Define the various generic +_attribute+ methods that you have declared. # * Define an +attributes+ method which returns a hash with each # attribute name in your model as hash key and the attribute value as hash value. # Hash keys must be strings. # # A minimal implementation could be: # # class Person # include ActiveModel::AttributeMethods # # attribute_method_affix prefix: 'reset_', suffix: '_to_default!' # attribute_method_suffix '_contrived?' # attribute_method_prefix 'clear_' # define_attribute_methods :name # # attr_accessor :name # # def attributes # { 'name' => @name } # end # # private # def attribute_contrived?(attr) # true # end # # def clear_attribute(attr) # send("#{attr}=", nil) # end # # def reset_attribute_to_default!(attr) # send("#{attr}=", 'Default Name') # end # end # # source://activemodel//lib/active_model/attribute_methods.rb#64 module ActiveModel::AttributeMethods extend ::ActiveSupport::Concern include GeneratedInstanceMethods mixes_in_class_methods GeneratedClassMethods mixes_in_class_methods ::ActiveModel::AttributeMethods::ClassMethods # +attribute_missing+ is like +method_missing+, but for attributes. When # +method_missing+ is called we check to see if there is a matching # attribute method. If so, we tell +attribute_missing+ to dispatch the # attribute. This method can be overloaded to customize the behavior. # # source://activemodel//lib/active_model/attribute_methods.rb#520 def attribute_missing(match, *_arg1, **_arg2, &_arg3); end # Allows access to the object attributes, which are held in the hash # returned by attributes, as though they were first-class # methods. So a +Person+ class with a +name+ attribute can for example use # Person#name and Person#name= and never directly use # the attributes hash -- except for multiple assignments with # ActiveRecord::Base#attributes=. # # It's also possible to instantiate related objects, so a Client # class belonging to the +clients+ table with a +master_id+ foreign key # can instantiate master through Client#master. # # source://activemodel//lib/active_model/attribute_methods.rb#507 def method_missing(method, *_arg1, **_arg2, &_arg3); end # @return [Boolean] # # source://activemodel//lib/active_model/attribute_methods.rb#528 def respond_to?(method, include_private_methods = T.unsafe(nil)); end # A +Person+ instance with a +name+ attribute can ask # person.respond_to?(:name), person.respond_to?(:name=), # and person.respond_to?(:name?) which will all return +true+. def respond_to_without_attributes?(*_arg0); end private # source://activemodel//lib/active_model/attribute_methods.rb#556 def _read_attribute(attr); end # @return [Boolean] # # source://activemodel//lib/active_model/attribute_methods.rb#541 def attribute_method?(attr_name); end # Returns a struct representing the matching attribute method. # The struct's attributes are prefix, base and suffix. # # source://activemodel//lib/active_model/attribute_methods.rb#547 def matched_attribute_method(method_name); end # @raise [ActiveModel::MissingAttributeError] # # source://activemodel//lib/active_model/attribute_methods.rb#552 def missing_attribute(attr_name, stack); end module GeneratedClassMethods def attribute_aliases; end def attribute_aliases=(value); end def attribute_aliases?; end def attribute_method_patterns; end def attribute_method_patterns=(value); end def attribute_method_patterns?; end end module GeneratedInstanceMethods def attribute_aliases; end def attribute_aliases?; end def attribute_method_patterns; end def attribute_method_patterns?; end end end # source://activemodel//lib/active_model/attribute_methods.rb#560 module ActiveModel::AttributeMethods::AttrNames class << self # We want to generate the methods via module_eval rather than # define_method, because define_method is slower on dispatch. # # But sometimes the database might return columns with # characters that are not allowed in normal method names (like # 'my_column(omg)'. So to work around this we first define with # the __temp__ identifier, and then use alias method to rename # it to what we want. # # We are also defining a constant to hold the frozen string of # the attribute name. Using a constant means that we do not have # to allocate an object on each call to the attribute method. # Making it frozen means that it doesn't get duped when used to # key the @attributes in read_attribute. # # source://activemodel//lib/active_model/attribute_methods.rb#577 def define_attribute_accessor_method(owner, attr_name, writer: T.unsafe(nil)); end end end # source://activemodel//lib/active_model/attribute_methods.rb#561 ActiveModel::AttributeMethods::AttrNames::DEF_SAFE_NAME = T.let(T.unsafe(nil), Regexp) # source://activemodel//lib/active_model/attribute_methods.rb#68 ActiveModel::AttributeMethods::CALL_COMPILABLE_REGEXP = T.let(T.unsafe(nil), Regexp) # source://activemodel//lib/active_model/attribute_methods.rb#75 module ActiveModel::AttributeMethods::ClassMethods # Allows you to make aliases for attributes. # # class Person # include ActiveModel::AttributeMethods # # attr_accessor :name # attribute_method_suffix '_short?' # define_attribute_methods :name # # alias_attribute :nickname, :name # # private # def attribute_short?(attr) # send(attr).length < 5 # end # end # # person = Person.new # person.name = 'Bob' # person.name # => "Bob" # person.nickname # => "Bob" # person.name_short? # => true # person.nickname_short? # => true # # source://activemodel//lib/active_model/attribute_methods.rb#203 def alias_attribute(new_name, old_name); end # source://activemodel//lib/active_model/attribute_methods.rb#226 def alias_attribute_method_definition(code_generator, pattern, new_name, old_name); end # source://activemodel//lib/active_model/attribute_methods.rb#382 def aliases_by_attribute_name; end # Returns the original name for the alias +name+ # # source://activemodel//lib/active_model/attribute_methods.rb#245 def attribute_alias(name); end # Is +new_name+ an alias? # # @return [Boolean] # # source://activemodel//lib/active_model/attribute_methods.rb#240 def attribute_alias?(new_name); end # Declares a method available for all attributes with the given prefix # and suffix. Uses +method_missing+ and respond_to? to rewrite # the method. # # #{prefix}#{attr}#{suffix}(*args, &block) # # to # # #{prefix}attribute#{suffix}(#{attr}, *args, &block) # # An #{prefix}attribute#{suffix} instance method must exist and # accept at least the +attr+ argument. # # class Person # include ActiveModel::AttributeMethods # # attr_accessor :name # attribute_method_affix prefix: 'reset_', suffix: '_to_default!' # define_attribute_methods :name # # private # def reset_attribute_to_default!(attr) # send("#{attr}=", 'Default Name') # end # end # # person = Person.new # person.name # => 'Gem' # person.reset_name_to_default! # person.name # => 'Default Name' # # source://activemodel//lib/active_model/attribute_methods.rb#175 def attribute_method_affix(*affixes); end # Declares a method available for all attributes with the given prefix. # Uses +method_missing+ and respond_to? to rewrite the method. # # #{prefix}#{attr}(*args, &block) # # to # # #{prefix}attribute(#{attr}, *args, &block) # # An instance method #{prefix}attribute must exist and accept # at least the +attr+ argument. # # class Person # include ActiveModel::AttributeMethods # # attr_accessor :name # attribute_method_prefix 'clear_' # define_attribute_methods :name # # private # def clear_attribute(attr) # send("#{attr}=", nil) # end # end # # person = Person.new # person.name = 'Bob' # person.name # => "Bob" # person.clear_name # person.name # => nil # # source://activemodel//lib/active_model/attribute_methods.rb#106 def attribute_method_prefix(*prefixes, parameters: T.unsafe(nil)); end # Declares a method available for all attributes with the given suffix. # Uses +method_missing+ and respond_to? to rewrite the method. # # #{attr}#{suffix}(*args, &block) # # to # # attribute#{suffix}(#{attr}, *args, &block) # # An attribute#{suffix} instance method must exist and accept at # least the +attr+ argument. # # class Person # include ActiveModel::AttributeMethods # # attr_accessor :name # attribute_method_suffix '_short?' # define_attribute_methods :name # # private # def attribute_short?(attr) # send(attr).length < 5 # end # end # # person = Person.new # person.name = 'Bob' # person.name # => "Bob" # person.name_short? # => true # # source://activemodel//lib/active_model/attribute_methods.rb#140 def attribute_method_suffix(*suffixes, parameters: T.unsafe(nil)); end # Declares an attribute that should be prefixed and suffixed by # +ActiveModel::AttributeMethods+. # # To use, pass an attribute name (as string or symbol). Be sure to declare # +define_attribute_method+ after you define any prefix, suffix or affix # method, or they will not hook in. # # class Person # include ActiveModel::AttributeMethods # # attr_accessor :name # attribute_method_suffix '_short?' # # # Call to define_attribute_method must appear after the # # attribute_method_prefix, attribute_method_suffix or # # attribute_method_affix declarations. # define_attribute_method :name # # private # def attribute_short?(attr) # send(attr).length < 5 # end # end # # person = Person.new # person.name = 'Bob' # person.name # => "Bob" # person.name_short? # => true # # source://activemodel//lib/active_model/attribute_methods.rb#311 def define_attribute_method(attr_name, _owner: T.unsafe(nil), as: T.unsafe(nil)); end # source://activemodel//lib/active_model/attribute_methods.rb#320 def define_attribute_method_pattern(pattern, attr_name, owner:, as:, override: T.unsafe(nil)); end # Declares the attributes that should be prefixed and suffixed by # +ActiveModel::AttributeMethods+. # # To use, pass attribute names (as strings or symbols). Be sure to declare # +define_attribute_methods+ after you define any prefix, suffix, or affix # methods, or they will not hook in. # # class Person # include ActiveModel::AttributeMethods # # attr_accessor :name, :age, :address # attribute_method_prefix 'clear_' # # # Call to define_attribute_methods must appear after the # # attribute_method_prefix, attribute_method_suffix or # # attribute_method_affix declarations. # define_attribute_methods :name, :age, :address # # private # def clear_attribute(attr) # send("#{attr}=", nil) # end # end # # source://activemodel//lib/active_model/attribute_methods.rb#272 def define_attribute_methods(*attr_names); end # source://activemodel//lib/active_model/attribute_methods.rb#211 def eagerly_generate_alias_attribute_methods(new_name, old_name); end # source://activemodel//lib/active_model/attribute_methods.rb#217 def generate_alias_attribute_methods(code_generator, new_name, old_name); end # Removes all the previously dynamically defined methods from the class, including alias attribute methods. # # class Person # include ActiveModel::AttributeMethods # # attr_accessor :name # attribute_method_suffix '_short?' # define_attribute_method :name # alias_attribute :first_name, :name # # private # def attribute_short?(attr) # send(attr).length < 5 # end # end # # person = Person.new # person.name = 'Bob' # person.first_name # => "Bob" # person.name_short? # => true # # Person.undefine_attribute_methods # # person.name_short? # => NoMethodError # person.first_name # => NoMethodError # # source://activemodel//lib/active_model/attribute_methods.rb#375 def undefine_attribute_methods; end private # The methods +method_missing+ and +respond_to?+ of this module are # invoked often in a typical rails, both of which invoke the method # +matched_attribute_method+. The latter method iterates through an # array doing regular expression matches, which results in a lot of # object creations. Most of the time it returns a +nil+ match. As the # match result is always the same given a +method_name+, this cache is # used to alleviate the GC, which ultimately also speeds up the app # significantly (in our case our test suite finishes 10% faster with # this cache). # # source://activemodel//lib/active_model/attribute_methods.rb#417 def attribute_method_patterns_cache; end # source://activemodel//lib/active_model/attribute_methods.rb#421 def attribute_method_patterns_matching(method_name); end # source://activemodel//lib/active_model/attribute_methods.rb#445 def build_mangled_name(name); end # source://activemodel//lib/active_model/attribute_methods.rb#455 def define_call(code_generator, name, target_name, mangled_name, parameters, call_args, namespace:, as:); end # Define a method `name` in `mod` that dispatches to `send` # using the given `extra` args. This falls back on `send` # if the called name cannot be compiled. # # source://activemodel//lib/active_model/attribute_methods.rb#430 def define_proxy_call(code_generator, name, proxy_target, parameters, *call_args, namespace:, as: T.unsafe(nil)); end # source://activemodel//lib/active_model/attribute_methods.rb#400 def generated_attribute_methods; end # source://activemodel//lib/active_model/attribute_methods.rb#387 def inherited(base); end # @return [Boolean] # # source://activemodel//lib/active_model/attribute_methods.rb#404 def instance_method_already_implemented?(method_name); end # source://activemodel//lib/active_model/attribute_methods.rb#396 def resolve_attribute_name(name); end end # source://activemodel//lib/active_model/attribute_methods.rb#471 class ActiveModel::AttributeMethods::ClassMethods::AttributeMethodPattern # @return [AttributeMethodPattern] a new instance of AttributeMethodPattern # # source://activemodel//lib/active_model/attribute_methods.rb#476 def initialize(prefix: T.unsafe(nil), suffix: T.unsafe(nil), parameters: T.unsafe(nil)); end # source://activemodel//lib/active_model/attribute_methods.rb#485 def match(method_name); end # source://activemodel//lib/active_model/attribute_methods.rb#491 def method_name(attr_name); end # Returns the value of attribute parameters. # # source://activemodel//lib/active_model/attribute_methods.rb#472 def parameters; end # Returns the value of attribute prefix. # # source://activemodel//lib/active_model/attribute_methods.rb#472 def prefix; end # Returns the value of attribute proxy_target. # # source://activemodel//lib/active_model/attribute_methods.rb#472 def proxy_target; end # Returns the value of attribute suffix. # # source://activemodel//lib/active_model/attribute_methods.rb#472 def suffix; end end # source://activemodel//lib/active_model/attribute_methods.rb#474 class ActiveModel::AttributeMethods::ClassMethods::AttributeMethodPattern::AttributeMethod < ::Struct # Returns the value of attribute attr_name # # @return [Object] the current value of attr_name def attr_name; end # Sets the attribute attr_name # # @param value [Object] the value to set the attribute attr_name to. # @return [Object] the newly set value def attr_name=(_); end # Returns the value of attribute proxy_target # # @return [Object] the current value of proxy_target def proxy_target; end # Sets the attribute proxy_target # # @param value [Object] the value to set the attribute proxy_target to. # @return [Object] the newly set value def proxy_target=(_); end class << self def [](*_arg0); end def inspect; end def keyword_init?; end def members; end def new(*_arg0); end end end # source://activemodel//lib/active_model/attribute_methods.rb#67 ActiveModel::AttributeMethods::NAME_COMPILABLE_REGEXP = T.let(T.unsafe(nil), Regexp) # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#7 class ActiveModel::AttributeMutationTracker # @return [AttributeMutationTracker] a new instance of AttributeMutationTracker # # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#10 def initialize(attributes); end # @return [Boolean] # # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#40 def any_changes?; end # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#34 def change_to_attribute(attr_name); end # @return [Boolean] # # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#44 def changed?(attr_name, from: T.unsafe(nil), to: T.unsafe(nil)); end # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#14 def changed_attribute_names; end # @return [Boolean] # # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#50 def changed_in_place?(attr_name); end # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#18 def changed_values; end # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#26 def changes; end # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#63 def force_change(attr_name); end # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#54 def forget_change(attr_name); end # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#59 def original_value(attr_name); end private # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#74 def attr_names; end # @return [Boolean] # # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#78 def attribute_changed?(attr_name); end # Returns the value of attribute attributes. # # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#68 def attributes; end # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#82 def fetch_value(attr_name); end # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#70 def forced_changes; end # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#86 def type_cast(attr_name, value); end end # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#8 ActiveModel::AttributeMutationTracker::OPTION_NOT_GIVEN = T.let(T.unsafe(nil), Object) # source://activemodel//lib/active_model/attribute_registration.rb#8 module ActiveModel::AttributeRegistration extend ::ActiveSupport::Concern mixes_in_class_methods ::ActiveModel::AttributeRegistration::ClassMethods end # source://activemodel//lib/active_model/attribute_registration.rb#11 module ActiveModel::AttributeRegistration::ClassMethods # source://activemodel//lib/active_model/attribute_registration.rb#31 def _default_attributes; end # source://activemodel//lib/active_model/attribute_registration.rb#12 def attribute(name, type = T.unsafe(nil), default: T.unsafe(nil), **options); end # source://activemodel//lib/active_model/attribute_registration.rb#37 def attribute_types; end # source://activemodel//lib/active_model/attribute_registration.rb#23 def decorate_attributes(names = T.unsafe(nil), &decorator); end # source://activemodel//lib/active_model/attribute_registration.rb#43 def type_for_attribute(attribute_name, &block); end private # source://activemodel//lib/active_model/attribute_registration.rb#81 def apply_pending_attribute_modifications(attribute_set); end # Hook for other modules to override. The attribute type is passed # through this method immediately after it is resolved, before any type # decorations are applied. # # source://activemodel//lib/active_model/attribute_registration.rb#112 def hook_attribute_type(attribute, type); end # source://activemodel//lib/active_model/attribute_registration.rb#77 def pending_attribute_modifications; end # source://activemodel//lib/active_model/attribute_registration.rb#91 def reset_default_attributes; end # source://activemodel//lib/active_model/attribute_registration.rb#96 def reset_default_attributes!; end # source://activemodel//lib/active_model/attribute_registration.rb#101 def resolve_attribute_name(name); end # source://activemodel//lib/active_model/attribute_registration.rb#105 def resolve_type_name(name, **options); end end # source://activemodel//lib/active_model/attribute_registration.rb#67 class ActiveModel::AttributeRegistration::ClassMethods::PendingDecorator < ::Struct # source://activemodel//lib/active_model/attribute_registration.rb#68 def apply_to(attribute_set); end # Returns the value of attribute decorator # # @return [Object] the current value of decorator def decorator; end # Sets the attribute decorator # # @param value [Object] the value to set the attribute decorator to. # @return [Object] the newly set value def decorator=(_); end # Returns the value of attribute names # # @return [Object] the current value of names def names; end # Sets the attribute names # # @param value [Object] the value to set the attribute names to. # @return [Object] the newly set value def names=(_); end class << self def [](*_arg0); end def inspect; end def keyword_init?; end def members; end def new(*_arg0); end end end # source://activemodel//lib/active_model/attribute_registration.rb#61 class ActiveModel::AttributeRegistration::ClassMethods::PendingDefault < ::Struct # source://activemodel//lib/active_model/attribute_registration.rb#62 def apply_to(attribute_set); end # Returns the value of attribute default # # @return [Object] the current value of default def default; end # Sets the attribute default # # @param value [Object] the value to set the attribute default to. # @return [Object] the newly set value def default=(_); end # Returns the value of attribute name # # @return [Object] the current value of name def name; end # Sets the attribute name # # @param value [Object] the value to set the attribute name to. # @return [Object] the newly set value def name=(_); end class << self def [](*_arg0); end def inspect; end def keyword_init?; end def members; end def new(*_arg0); end end end # source://activemodel//lib/active_model/attribute_registration.rb#54 class ActiveModel::AttributeRegistration::ClassMethods::PendingType < ::Struct # source://activemodel//lib/active_model/attribute_registration.rb#55 def apply_to(attribute_set); end # Returns the value of attribute name # # @return [Object] the current value of name def name; end # Sets the attribute name # # @param value [Object] the value to set the attribute name to. # @return [Object] the newly set value def name=(_); end # Returns the value of attribute type # # @return [Object] the current value of type def type; end # Sets the attribute type # # @param value [Object] the value to set the attribute type to. # @return [Object] the newly set value def type=(_); end class << self def [](*_arg0); end def inspect; end def keyword_init?; end def members; end def new(*_arg0); end end end # source://activemodel//lib/active_model/attribute_set/builder.rb#6 class ActiveModel::AttributeSet # @return [AttributeSet] a new instance of AttributeSet # # source://activemodel//lib/active_model/attribute_set.rb#12 def initialize(attributes); end # source://activemodel//lib/active_model/attribute_set.rb#106 def ==(other); end # source://activemodel//lib/active_model/attribute_set.rb#16 def [](name); end # source://activemodel//lib/active_model/attribute_set.rb#20 def []=(name, value); end # source://activemodel//lib/active_model/attribute_set.rb#93 def accessed; end # source://activemodel//lib/active_model/attribute_set.rb#24 def cast_types; end # source://activemodel//lib/active_model/attribute_set.rb#73 def deep_dup; end # source://activemodel//lib/active_model/attribute_set.rb#10 def each_value(*_arg0, **_arg1, &_arg2); end # source://activemodel//lib/active_model/attribute_set.rb#10 def except(*_arg0, **_arg1, &_arg2); end # source://activemodel//lib/active_model/attribute_set.rb#10 def fetch(*_arg0, **_arg1, &_arg2); end # source://activemodel//lib/active_model/attribute_set.rb#50 def fetch_value(name, &block); end # source://activemodel//lib/active_model/attribute_set.rb#68 def freeze; end # @return [Boolean] # # source://activemodel//lib/active_model/attribute_set.rb#41 def include?(name); end # @return [Boolean] # # source://activemodel//lib/active_model/attribute_set.rb#41 def key?(name); end # source://activemodel//lib/active_model/attribute_set.rb#46 def keys; end # source://activemodel//lib/active_model/attribute_set.rb#97 def map(&block); end # source://activemodel//lib/active_model/attribute_set.rb#87 def reset(key); end # source://activemodel//lib/active_model/attribute_set.rb#102 def reverse_merge!(target_attributes); end # source://activemodel//lib/active_model/attribute_set.rb#36 def to_h; end # source://activemodel//lib/active_model/attribute_set.rb#36 def to_hash; end # source://activemodel//lib/active_model/attribute_set.rb#28 def values_before_type_cast; end # source://activemodel//lib/active_model/attribute_set.rb#32 def values_for_database; end # source://activemodel//lib/active_model/attribute_set.rb#64 def write_cast_value(name, value); end # source://activemodel//lib/active_model/attribute_set.rb#54 def write_from_database(name, value); end # @raise [FrozenError] # # source://activemodel//lib/active_model/attribute_set.rb#58 def write_from_user(name, value); end protected # Returns the value of attribute attributes. # # source://activemodel//lib/active_model/attribute_set.rb#111 def attributes; end private # source://activemodel//lib/active_model/attribute_set.rb#114 def default_attribute(name); end # source://activemodel//lib/active_model/attribute_set.rb#82 def initialize_clone(_); end # source://activemodel//lib/active_model/attribute_set.rb#77 def initialize_dup(_); end end # source://activemodel//lib/active_model/attribute_set/builder.rb#7 class ActiveModel::AttributeSet::Builder # @return [Builder] a new instance of Builder # # source://activemodel//lib/active_model/attribute_set/builder.rb#10 def initialize(types, default_attributes = T.unsafe(nil)); end # source://activemodel//lib/active_model/attribute_set/builder.rb#15 def build_from_database(values = T.unsafe(nil), additional_types = T.unsafe(nil)); end # Returns the value of attribute default_attributes. # # source://activemodel//lib/active_model/attribute_set/builder.rb#8 def default_attributes; end # Returns the value of attribute types. # # source://activemodel//lib/active_model/attribute_set/builder.rb#8 def types; end end # Attempts to do more intelligent YAML dumping of an # ActiveModel::AttributeSet to reduce the size of the resulting string # # source://activemodel//lib/active_model/attribute_set/yaml_encoder.rb#7 class ActiveModel::AttributeSet::YAMLEncoder # @return [YAMLEncoder] a new instance of YAMLEncoder # # source://activemodel//lib/active_model/attribute_set/yaml_encoder.rb#8 def initialize(default_types); end # source://activemodel//lib/active_model/attribute_set/yaml_encoder.rb#22 def decode(coder); end # source://activemodel//lib/active_model/attribute_set/yaml_encoder.rb#12 def encode(attribute_set, coder); end private # Returns the value of attribute default_types. # # source://activemodel//lib/active_model/attribute_set/yaml_encoder.rb#37 def default_types; end end # = Active \Model \Attributes # # The Attributes module allows models to define attributes beyond simple Ruby # readers and writers. Similar to Active Record attributes, which are # typically inferred from the database schema, Active Model Attributes are # aware of data types, can have default values, and can handle casting and # serialization. # # To use Attributes, include the module in your model class and define your # attributes using the +attribute+ macro. It accepts a name, a type, a default # value, and any other options supported by the attribute type. # # ==== Examples # # class Person # include ActiveModel::Attributes # # attribute :name, :string # attribute :active, :boolean, default: true # end # # person = Person.new # person.name = "Volmer" # # person.name # => "Volmer" # person.active # => true # # source://activemodel//lib/active_model/attributes.rb#30 module ActiveModel::Attributes extend ::ActiveSupport::Concern include GeneratedInstanceMethods include ::ActiveModel::AttributeRegistration include ::ActiveModel::AttributeMethods mixes_in_class_methods GeneratedClassMethods mixes_in_class_methods ::ActiveModel::AttributeRegistration::ClassMethods mixes_in_class_methods ::ActiveModel::AttributeMethods::ClassMethods mixes_in_class_methods ::ActiveModel::Attributes::ClassMethods # source://activemodel//lib/active_model/attributes.rb#106 def initialize(*_arg0); end # Returns an array of attribute names as strings. # # class Person # include ActiveModel::Attributes # # attribute :name, :string # attribute :age, :integer # end # # person = Person.new # person.attribute_names # => ["name", "age"] # # source://activemodel//lib/active_model/attributes.rb#146 def attribute_names; end # Returns a hash of all the attributes with their names as keys and the # values of the attributes as values. # # class Person # include ActiveModel::Attributes # # attribute :name, :string # attribute :age, :integer # end # # person = Person.new # person.name = "Francesco" # person.age = 22 # # person.attributes # => { "name" => "Francesco", "age" => 22} # # source://activemodel//lib/active_model/attributes.rb#131 def attributes; end # source://activemodel//lib/active_model/attributes.rb#150 def freeze; end private # source://activemodel//lib/active_model/attributes.rb#156 def _write_attribute(attr_name, value); end # source://activemodel//lib/active_model/attributes.rb#161 def attribute(attr_name); end # source://activemodel//lib/active_model/attributes.rb#156 def attribute=(attr_name, value); end # source://activemodel//lib/active_model/attributes.rb#111 def initialize_dup(other); end module GeneratedClassMethods def attribute_aliases; end def attribute_aliases=(value); end def attribute_aliases?; end def attribute_method_patterns; end def attribute_method_patterns=(value); end def attribute_method_patterns?; end end module GeneratedInstanceMethods def attribute_aliases; end def attribute_aliases?; end def attribute_method_patterns; end def attribute_method_patterns?; end end end # source://activemodel//lib/active_model/attributes.rb#39 module ActiveModel::Attributes::ClassMethods # :call-seq: attribute(name, cast_type = nil, default: nil, **options) # # Defines a model attribute. In addition to the attribute name, a cast # type and default value may be specified, as well as any options # supported by the given cast type. # # class Person # include ActiveModel::Attributes # # attribute :name, :string # attribute :active, :boolean, default: true # end # # person = Person.new # person.name = "Volmer" # # person.name # => "Volmer" # person.active # => true # # source://activemodel//lib/active_model/attributes.rb#59 def attribute(name, *_arg1, **_arg2, &_arg3); end # Returns an array of attribute names as strings. # # class Person # include ActiveModel::Attributes # # attribute :name, :string # attribute :age, :integer # end # # Person.attribute_names # => ["name", "age"] # # source://activemodel//lib/active_model/attributes.rb#74 def attribute_names; end private # source://activemodel//lib/active_model/attributes.rb#92 def define_method_attribute=(canonical_name, owner:, as: T.unsafe(nil)); end end # +BlockValidator+ is a special +EachValidator+ which receives a block on initialization # and call this block for each attribute being validated. +validates_each+ uses this validator. # # source://activemodel//lib/active_model/validator.rb#179 class ActiveModel::BlockValidator < ::ActiveModel::EachValidator # @return [BlockValidator] a new instance of BlockValidator # # source://activemodel//lib/active_model/validator.rb#180 def initialize(options, &block); end private # source://activemodel//lib/active_model/validator.rb#186 def validate_each(record, attribute, value); end end # = Active \Model \Callbacks # # Provides an interface for any class to have Active Record like callbacks. # # Like the Active Record methods, the callback chain is aborted as soon as # one of the methods throws +:abort+. # # First, extend +ActiveModel::Callbacks+ from the class you are creating: # # class MyModel # extend ActiveModel::Callbacks # end # # Then define a list of methods that you want callbacks attached to: # # define_model_callbacks :create, :update # # This will provide all three standard callbacks (before, around and after) # for both the :create and :update methods. To implement, # you need to wrap the methods you want callbacks on in a block so that the # callbacks get a chance to fire: # # def create # run_callbacks :create do # # Your create action methods here # end # end # # Then in your class, you can use the +before_create+, +after_create+, and # +around_create+ methods, just as you would in an Active Record model. # # before_create :action_before_create # # def action_before_create # # Your code here # end # # When defining an around callback remember to yield to the block, otherwise # it won't be executed: # # around_create :log_status # # def log_status # puts 'going to call the block...' # yield # puts 'block successfully called.' # end # # You can choose to have only specific callbacks by passing a hash to the # +define_model_callbacks+ method. # # define_model_callbacks :create, only: [:after, :before] # # Would only create the +after_create+ and +before_create+ callback methods in # your class. # # NOTE: Defining the same callback multiple times will overwrite previous callback definitions. # # source://activemodel//lib/active_model/callbacks.rb#65 module ActiveModel::Callbacks # +define_model_callbacks+ accepts the same options +define_callbacks+ does, # in case you want to overwrite a default. Besides that, it also accepts an # :only option, where you can choose if you want all types (before, # around or after) or just some. # # define_model_callbacks :initialize, only: :after # # Note, the only: hash will apply to all callbacks defined # on that method call. To get around this you can call the +define_model_callbacks+ # method as many times as you need. # # define_model_callbacks :create, only: :after # define_model_callbacks :update, only: :before # define_model_callbacks :destroy, only: :around # # Would create +after_create+, +before_update+, and +around_destroy+ methods # only. # # You can pass in a class to before_, after_ and around_, # in which case the callback will call that class's _ method # passing the object that the callback is being called on. # # class MyModel # extend ActiveModel::Callbacks # define_model_callbacks :create # # before_create AnotherClass # end # # class AnotherClass # def self.before_create( obj ) # # obj is the MyModel instance that the callback is being called on # end # end # # NOTE: +method_name+ passed to +define_model_callbacks+ must not end with # !, ? or =. # # source://activemodel//lib/active_model/callbacks.rb#109 def define_model_callbacks(*callbacks); end private # source://activemodel//lib/active_model/callbacks.rb#143 def _define_after_model_callback(klass, callback); end # source://activemodel//lib/active_model/callbacks.rb#136 def _define_around_model_callback(klass, callback); end # source://activemodel//lib/active_model/callbacks.rb#129 def _define_before_model_callback(klass, callback); end class << self # source://activemodel//lib/active_model/callbacks.rb#66 def extended(base); end end end # = Active \Model \Conversion # # Handles default conversions: #to_model, #to_key, #to_param, and #to_partial_path. # # Let's take for example this non-persisted object. # # class ContactMessage # include ActiveModel::Conversion # # # ContactMessage are never persisted in the DB # def persisted? # false # end # end # # cm = ContactMessage.new # cm.to_model == cm # => true # cm.to_key # => nil # cm.to_param # => nil # cm.to_partial_path # => "contact_messages/contact_message" # # source://activemodel//lib/active_model/conversion.rb#24 module ActiveModel::Conversion extend ::ActiveSupport::Concern include GeneratedInstanceMethods mixes_in_class_methods GeneratedClassMethods mixes_in_class_methods ::ActiveModel::Conversion::ClassMethods # Returns an Array of all key attributes if any of the attributes is set, whether or not # the object is persisted. Returns +nil+ if there are no key attributes. # # class Person # include ActiveModel::Conversion # attr_accessor :id # # def initialize(id) # @id = id # end # end # # person = Person.new(1) # person.to_key # => [1] # # source://activemodel//lib/active_model/conversion.rb#67 def to_key; end # If your object is already designed to implement all of the \Active \Model # you can use the default :to_model implementation, which simply # returns +self+. # # class Person # include ActiveModel::Conversion # end # # person = Person.new # person.to_model == person # => true # # If your model does not act like an \Active \Model object, then you should # define :to_model yourself returning a proxy object that wraps # your object with \Active \Model compliant methods. # # source://activemodel//lib/active_model/conversion.rb#49 def to_model; end # Returns a +string+ representing the object's key suitable for use in URLs, # or +nil+ if persisted? is +false+. # # class Person # include ActiveModel::Conversion # attr_accessor :id # # def initialize(id) # @id = id # end # # def persisted? # true # end # end # # person = Person.new(1) # person.to_param # => "1" # # source://activemodel//lib/active_model/conversion.rb#90 def to_param; end # Returns a +string+ identifying the path associated with the object. # ActionPack uses this to find a suitable partial to represent the object. # # class Person # include ActiveModel::Conversion # end # # person = Person.new # person.to_partial_path # => "people/person" # # source://activemodel//lib/active_model/conversion.rb#103 def to_partial_path; end module GeneratedClassMethods def param_delimiter; end def param_delimiter=(value); end def param_delimiter?; end end module GeneratedInstanceMethods def param_delimiter=(value); end end end # source://activemodel//lib/active_model/conversion.rb#107 module ActiveModel::Conversion::ClassMethods # Provide a class level cache for #to_partial_path. This is an # internal method and should not be accessed directly. # # source://activemodel//lib/active_model/conversion.rb#110 def _to_partial_path; end end # = Active \Model \Dirty # # Provides a way to track changes in your object in the same way as # Active Record does. # # The requirements for implementing ActiveModel::Dirty are: # # * include ActiveModel::Dirty in your object. # * Call define_attribute_methods passing each method you want to # track. # * Call *_will_change! before each change to the tracked attribute. # * Call changes_applied after the changes are persisted. # * Call clear_changes_information when you want to reset the changes # information. # * Call restore_attributes when you want to restore previous data. # # A minimal implementation could be: # # class Person # include ActiveModel::Dirty # # define_attribute_methods :name # # def initialize # @name = nil # end # # def name # @name # end # # def name=(val) # name_will_change! unless val == @name # @name = val # end # # def save # # do persistence work # # changes_applied # end # # def reload! # # get the values from the persistence layer # # clear_changes_information # end # # def rollback! # restore_attributes # end # end # # A newly instantiated +Person+ object is unchanged: # # person = Person.new # person.changed? # => false # # Change the name: # # person.name = 'Bob' # person.changed? # => true # person.name_changed? # => true # person.name_changed?(from: nil, to: "Bob") # => true # person.name_was # => nil # person.name_change # => [nil, "Bob"] # person.name = 'Bill' # person.name_change # => [nil, "Bill"] # # Save the changes: # # person.save # person.changed? # => false # person.name_changed? # => false # # Reset the changes: # # person.previous_changes # => {"name" => [nil, "Bill"]} # person.name_previously_changed? # => true # person.name_previously_changed?(from: nil, to: "Bill") # => true # person.name_previous_change # => [nil, "Bill"] # person.name_previously_was # => nil # person.reload! # person.previous_changes # => {} # # Rollback the changes: # # person.name = "Uncle Bob" # person.rollback! # person.name # => "Bill" # person.name_changed? # => false # # Assigning the same value leaves the attribute unchanged: # # person.name = 'Bill' # person.name_changed? # => false # person.name_change # => nil # # Which attributes have changed? # # person.name = 'Bob' # person.changed # => ["name"] # person.changes # => {"name" => ["Bill", "Bob"]} # # If an attribute is modified in-place then make use of # {*_will_change!}[rdoc-label:method-i-2A_will_change-21] to mark that the attribute is changing. # Otherwise \Active \Model can't track changes to in-place attributes. Note # that Active Record can detect in-place modifications automatically. You do # not need to call *_will_change! on Active Record models. # # person.name_will_change! # person.name_change # => ["Bill", "Bill"] # person.name << 'y' # person.name_change # => ["Bill", "Billy"] # # Methods can be invoked as +name_changed?+ or by passing an argument to the # generic method attribute_changed?("name"). # # source://activemodel//lib/active_model/dirty.rb#123 module ActiveModel::Dirty extend ::ActiveSupport::Concern include GeneratedInstanceMethods include ::ActiveModel::AttributeMethods mixes_in_class_methods GeneratedClassMethods mixes_in_class_methods ::ActiveModel::AttributeMethods::ClassMethods # source://activemodel//lib/active_model/dirty.rb#264 def as_json(options = T.unsafe(nil)); end # Dispatch target for {*_changed?}[rdoc-label:method-i-2A_changed-3F] attribute methods. # # @return [Boolean] # # source://activemodel//lib/active_model/dirty.rb#300 def attribute_changed?(attr_name, **options); end # @return [Boolean] # # source://activemodel//lib/active_model/dirty.rb#367 def attribute_changed_in_place?(attr_name); end # Dispatch target for {*_previously_changed?}[rdoc-label:method-i-2A_previously_changed-3F] attribute methods. # # @return [Boolean] # # source://activemodel//lib/active_model/dirty.rb#310 def attribute_previously_changed?(attr_name, **options); end # Dispatch target for {*_previously_was}[rdoc-label:method-i-2A_previously_was] attribute methods. # # source://activemodel//lib/active_model/dirty.rb#315 def attribute_previously_was(attr_name); end # Dispatch target for {*_was}[rdoc-label:method-i-2A_was] attribute methods. # # source://activemodel//lib/active_model/dirty.rb#305 def attribute_was(attr_name); end # Returns an array with the name of the attributes with unsaved changes. # # person.changed # => [] # person.name = 'bob' # person.changed # => ["name"] # # source://activemodel//lib/active_model/dirty.rb#295 def changed; end # Returns +true+ if any of the attributes has unsaved changes, +false+ otherwise. # # person.changed? # => false # person.name = 'bob' # person.changed? # => true # # @return [Boolean] # # source://activemodel//lib/active_model/dirty.rb#286 def changed?; end # Returns a hash of the attributes with unsaved changes indicating their original # values like attr => original value. # # person.name # => "bob" # person.name = 'robert' # person.changed_attributes # => {"name" => "bob"} # # source://activemodel//lib/active_model/dirty.rb#343 def changed_attributes; end # Returns a hash of changed attributes indicating their original # and new values like attr => [original value, new value]. # # person.changes # => {} # person.name = 'bob' # person.changes # => { "name" => ["bill", "bob"] } # # source://activemodel//lib/active_model/dirty.rb#353 def changes; end # Clears dirty data and moves +changes+ to +previous_changes+ and # +mutations_from_database+ to +mutations_before_last_save+ respectively. # # source://activemodel//lib/active_model/dirty.rb#272 def changes_applied; end # source://activemodel//lib/active_model/dirty.rb#331 def clear_attribute_changes(attr_names); end # Clears all dirty data: current changes and previous changes. # # source://activemodel//lib/active_model/dirty.rb#325 def clear_changes_information; end # source://activemodel//lib/active_model/dirty.rb#253 def init_attributes(other); end # Returns a hash of attributes that were changed before the model was saved. # # person.name # => "bob" # person.name = 'robert' # person.save # person.previous_changes # => {"name" => ["bob", "robert"]} # # source://activemodel//lib/active_model/dirty.rb#363 def previous_changes; end # Restore all previous data of the provided attributes. # # source://activemodel//lib/active_model/dirty.rb#320 def restore_attributes(attr_names = T.unsafe(nil)); end private # Dispatch target for *_change attribute methods. # # source://activemodel//lib/active_model/dirty.rb#399 def attribute_change(attr_name); end # Dispatch target for *_previous_change attribute methods. # # source://activemodel//lib/active_model/dirty.rb#404 def attribute_previous_change(attr_name); end # Dispatch target for *_will_change! attribute methods. # # source://activemodel//lib/active_model/dirty.rb#409 def attribute_will_change!(attr_name); end # source://activemodel//lib/active_model/dirty.rb#378 def clear_attribute_change(attr_name); end # source://activemodel//lib/active_model/dirty.rb#390 def forget_attribute_assignments; end # source://activemodel//lib/active_model/dirty.rb#372 def init_internals; end # source://activemodel//lib/active_model/dirty.rb#248 def initialize_dup(other); end # source://activemodel//lib/active_model/dirty.rb#394 def mutations_before_last_save; end # source://activemodel//lib/active_model/dirty.rb#382 def mutations_from_database; end # Dispatch target for restore_*! attribute methods. # # source://activemodel//lib/active_model/dirty.rb#414 def restore_attribute!(attr_name); end module GeneratedClassMethods def attribute_aliases; end def attribute_aliases=(value); end def attribute_aliases?; end def attribute_method_patterns; end def attribute_method_patterns=(value); end def attribute_method_patterns?; end end module GeneratedInstanceMethods def attribute_aliases; end def attribute_aliases?; end def attribute_method_patterns; end def attribute_method_patterns?; end end end # = Active \Model \EachValidator # # +EachValidator+ is a validator which iterates through the attributes given # in the options hash invoking the validate_each method passing in the # record, attribute, and value. # # All \Active \Model validations are built on top of this validator. # # source://activemodel//lib/active_model/validator.rb#134 class ActiveModel::EachValidator < ::ActiveModel::Validator # Returns a new validator instance. All options will be available via the # +options+ reader, however the :attributes option will be removed # and instead be made available through the +attributes+ reader. # # @raise [ArgumentError] # @return [EachValidator] a new instance of EachValidator # # source://activemodel//lib/active_model/validator.rb#140 def initialize(options); end # Returns the value of attribute attributes. # # source://activemodel//lib/active_model/validator.rb#135 def attributes; end # Hook method that gets called by the initializer allowing verification # that the arguments supplied are valid. You could for example raise an # +ArgumentError+ when invalid options are supplied. # # source://activemodel//lib/active_model/validator.rb#168 def check_validity!; end # Performs validation on the supplied record. By default this will call # +validate_each+ to determine validity therefore subclasses should # override +validate_each+ with validation logic. # # source://activemodel//lib/active_model/validator.rb#150 def validate(record); end # Override this method in subclasses with the validation logic, adding # errors to the records +errors+ array where necessary. # # @raise [NotImplementedError] # # source://activemodel//lib/active_model/validator.rb#161 def validate_each(record, attribute, value); end private # source://activemodel//lib/active_model/validator.rb#172 def prepare_value_for_validation(value, record, attr_name); end end # = Active \Model \Error # # Represents one single error # # source://activemodel//lib/active_model/error.rb#9 class ActiveModel::Error # @return [Error] a new instance of Error # # source://activemodel//lib/active_model/error.rb#103 def initialize(base, attribute, type = T.unsafe(nil), **options); end # source://activemodel//lib/active_model/error.rb#190 def ==(other); end # The attribute of +base+ which the error belongs to # # source://activemodel//lib/active_model/error.rb#121 def attribute; end # The object which the error belongs to # # source://activemodel//lib/active_model/error.rb#119 def base; end # Returns the error details. # # error = ActiveModel::Error.new(person, :name, :too_short, count: 5) # error.details # # => { error: :too_short, count: 5 } # # source://activemodel//lib/active_model/error.rb#149 def detail; end # Returns the error details. # # error = ActiveModel::Error.new(person, :name, :too_short, count: 5) # error.details # # => { error: :too_short, count: 5 } # # source://activemodel//lib/active_model/error.rb#149 def details; end # source://activemodel//lib/active_model/error.rb#190 def eql?(other); end # Returns the full error message. # # error = ActiveModel::Error.new(person, :name, :too_short, count: 5) # error.full_message # # => "Name is too short (minimum is 5 characters)" # # source://activemodel//lib/active_model/error.rb#159 def full_message; end # source://activemodel//lib/active_model/error.rb#195 def hash; end # source://activemodel//lib/active_model/error.rb#13 def i18n_customize_full_message; end # source://activemodel//lib/active_model/error.rb#13 def i18n_customize_full_message=(_arg0); end # source://activemodel//lib/active_model/error.rb#13 def i18n_customize_full_message?; end # source://activemodel//lib/active_model/error.rb#199 def inspect; end # See if error matches provided +attribute+, +type+, and +options+. # # Omitted params are not checked for a match. # # @return [Boolean] # # source://activemodel//lib/active_model/error.rb#166 def match?(attribute, type = T.unsafe(nil), **options); end # Returns the error message. # # error = ActiveModel::Error.new(person, :name, :too_short, count: 5) # error.message # # => "is too short (minimum is 5 characters)" # # source://activemodel//lib/active_model/error.rb#135 def message; end # The options provided when calling errors#add # # source://activemodel//lib/active_model/error.rb#128 def options; end # The raw value provided as the second parameter when calling # errors#add # # source://activemodel//lib/active_model/error.rb#126 def raw_type; end # See if error matches provided +attribute+, +type+, and +options+ exactly. # # All params must be equal to Error's own attributes to be considered a # strict match. # # @return [Boolean] # # source://activemodel//lib/active_model/error.rb#184 def strict_match?(attribute, type, **options); end # The type of error, defaults to +:invalid+ unless specified # # source://activemodel//lib/active_model/error.rb#123 def type; end protected # source://activemodel//lib/active_model/error.rb#204 def attributes_for_hash; end private # source://activemodel//lib/active_model/error.rb#111 def initialize_dup(other); end class << self # source://activemodel//lib/active_model/error.rb#15 def full_message(attribute, message, base); end # source://activemodel//lib/active_model/error.rb#64 def generate_message(attribute, type, base, options); end # source://activemodel//lib/active_model/error.rb#13 def i18n_customize_full_message; end # source://activemodel//lib/active_model/error.rb#13 def i18n_customize_full_message=(value); end # source://activemodel//lib/active_model/error.rb#13 def i18n_customize_full_message?; end private # source://activesupport/8.0.1/lib/active_support/class_attribute.rb#15 def __class_attr_i18n_customize_full_message; end # source://activesupport/8.0.1/lib/active_support/class_attribute.rb#17 def __class_attr_i18n_customize_full_message=(new_value); end end end # source://activemodel//lib/active_model/error.rb#10 ActiveModel::Error::CALLBACKS_OPTIONS = T.let(T.unsafe(nil), Array) # source://activemodel//lib/active_model/error.rb#11 ActiveModel::Error::MESSAGE_OPTIONS = T.let(T.unsafe(nil), Array) # = Active \Model \Errors # # Provides error related functionalities you can include in your object # for handling error messages and interacting with Action View helpers. # # A minimal implementation could be: # # class Person # # Required dependency for ActiveModel::Errors # extend ActiveModel::Naming # # def initialize # @errors = ActiveModel::Errors.new(self) # end # # attr_accessor :name # attr_reader :errors # # def validate! # errors.add(:name, :blank, message: "cannot be nil") if name.nil? # end # # # The following methods are needed to be minimally implemented # # def read_attribute_for_validation(attr) # send(attr) # end # # def self.human_attribute_name(attr, options = {}) # attr # end # # def self.lookup_ancestors # [self] # end # end # # The last three methods are required in your object for +Errors+ to be # able to generate error messages correctly and also handle multiple # languages. Of course, if you extend your object with ActiveModel::Translation # you will not need to implement the last two. Likewise, using # ActiveModel::Validations will handle the validation related methods # for you. # # The above allows you to do: # # person = Person.new # person.validate! # => ["cannot be nil"] # person.errors.full_messages # => ["name cannot be nil"] # # etc.. # # source://activemodel//lib/active_model/errors.rb#61 class ActiveModel::Errors include ::Enumerable extend ::Forwardable # Pass in the instance of the object that is using the errors object. # # class Person # def initialize # @errors = ActiveModel::Errors.new(self) # end # end # # @return [Errors] a new instance of Errors # # source://activemodel//lib/active_model/errors.rb#117 def initialize(base); end # When passed a symbol or a name of a method, returns an array of errors # for the method. # # person.errors[:name] # => ["cannot be nil"] # person.errors['name'] # => ["cannot be nil"] # # source://activemodel//lib/active_model/errors.rb#229 def [](attribute); end # Adds a new error of +type+ on +attribute+. # More than one error can be added to the same +attribute+. # If no +type+ is supplied, :invalid is assumed. # # person.errors.add(:name) # # Adds <#ActiveModel::Error attribute=name, type=invalid> # person.errors.add(:name, :not_implemented, message: "must be implemented") # # Adds <#ActiveModel::Error attribute=name, type=not_implemented, # options={:message=>"must be implemented"}> # # person.errors.messages # # => {:name=>["is invalid", "must be implemented"]} # # If +type+ is a string, it will be used as error message. # # If +type+ is a symbol, it will be translated using the appropriate # scope (see +generate_message+). # # person.errors.add(:name, :blank) # person.errors.messages # # => {:name=>["can't be blank"]} # # person.errors.add(:name, :too_long, count: 25) # person.errors.messages # # => ["is too long (maximum is 25 characters)"] # # If +type+ is a proc, it will be called, allowing for things like # Time.now to be used within an error. # # If the :strict option is set to +true+, it will raise # ActiveModel::StrictValidationFailed instead of adding the error. # :strict option can also be set to any other exception. # # person.errors.add(:name, :invalid, strict: true) # # => ActiveModel::StrictValidationFailed: Name is invalid # person.errors.add(:name, :invalid, strict: NameIsInvalid) # # => NameIsInvalid: Name is invalid # # person.errors.messages # => {} # # +attribute+ should be set to :base if the error is not # directly associated with a single attribute. # # person.errors.add(:base, :name_or_email_blank, # message: "either name or email must be present") # person.errors.messages # # => {:base=>["either name or email must be present"]} # person.errors.details # # => {:base=>[{error: :name_or_email_blank}]} # # source://activemodel//lib/active_model/errors.rb#342 def add(attribute, type = T.unsafe(nil), **options); end # Returns +true+ if an error matches provided +attribute+ and +type+, # or +false+ otherwise. +type+ is treated the same as for +add+. # # person.errors.add :name, :blank # person.errors.added? :name, :blank # => true # person.errors.added? :name, "can't be blank" # => true # # If the error requires options, then it returns +true+ with # the correct options, or +false+ with incorrect or missing options. # # person.errors.add :name, :too_long, count: 25 # person.errors.added? :name, :too_long, count: 25 # => true # person.errors.added? :name, "is too long (maximum is 25 characters)" # => true # person.errors.added? :name, :too_long, count: 24 # => false # person.errors.added? :name, :too_long # => false # person.errors.added? :name, "is too long" # => false # # @return [Boolean] # # source://activemodel//lib/active_model/errors.rb#372 def added?(attribute, type = T.unsafe(nil), options = T.unsafe(nil)); end # Returns a Hash that can be used as the JSON representation for this # object. You can pass the :full_messages option. This determines # if the JSON object should contain full messages or not (false by default). # # person.errors.as_json # => {:name=>["cannot be nil"]} # person.errors.as_json(full_messages: true) # => {:name=>["name cannot be nil"]} # # source://activemodel//lib/active_model/errors.rb#247 def as_json(options = T.unsafe(nil)); end # Returns all error attribute names # # person.errors.messages # => {:name=>["cannot be nil", "must be specified"]} # person.errors.attribute_names # => [:name] # # source://activemodel//lib/active_model/errors.rb#237 def attribute_names; end # source://forwardable/1.3.3/forwardable.rb#231 def clear(*args, **_arg1, &block); end # Copies the errors from other. # For copying errors but keep @base as is. # # ==== Parameters # # * +other+ - The ActiveModel::Errors instance. # # ==== Examples # # person.errors.copy!(other) # # source://activemodel//lib/active_model/errors.rb#138 def copy!(other); end # Delete messages for +key+. Returns the deleted messages. # # person.errors[:name] # => ["cannot be nil"] # person.errors.delete(:name) # => ["cannot be nil"] # person.errors[:name] # => [] # # source://activemodel//lib/active_model/errors.rb#215 def delete(attribute, type = T.unsafe(nil), **options); end # Returns a Hash of attributes with an array of their error details. # # source://activemodel//lib/active_model/errors.rb#276 def details; end # source://forwardable/1.3.3/forwardable.rb#231 def each(*args, **_arg1, &block); end # source://forwardable/1.3.3/forwardable.rb#231 def empty?(*args, **_arg1, &block); end # The actual array of +Error+ objects # This method is aliased to objects. # # source://activemodel//lib/active_model/errors.rb#107 def errors; end # Returns a full message for a given attribute. # # person.errors.full_message(:name, 'is invalid') # => "Name is invalid" # # source://activemodel//lib/active_model/errors.rb#451 def full_message(attribute, message); end # Returns all the full error messages in an array. # # class Person # validates_presence_of :name, :address, :email # validates_length_of :name, in: 5..30 # end # # person = Person.create(address: '123 First St.') # person.errors.full_messages # # => ["Name is too short (minimum is 5 characters)", "Name can't be blank", "Email can't be blank"] # # source://activemodel//lib/active_model/errors.rb#415 def full_messages; end # Returns all the full error messages for a given attribute in an array. # # class Person # validates_presence_of :name, :email # validates_length_of :name, in: 5..30 # end # # person = Person.create() # person.errors.full_messages_for(:name) # # => ["Name is too short (minimum is 5 characters)", "Name can't be blank"] # # source://activemodel//lib/active_model/errors.rb#430 def full_messages_for(attribute); end # Translates an error message in its default scope # (activemodel.errors.messages). # # Error messages are first looked up in activemodel.errors.models.MODEL.attributes.ATTRIBUTE.MESSAGE, # if it's not there, it's looked up in activemodel.errors.models.MODEL.MESSAGE and if # that is not there also, it returns the translation of the default message # (e.g. activemodel.errors.messages.MESSAGE). The translated model # name, translated attribute name, and the value are available for # interpolation. # # When using inheritance in your models, it will check all the inherited # models too, but only if the model itself hasn't been found. Say you have # class Admin < User; end and you wanted the translation for # the :blank error message for the title attribute, # it looks for these translations: # # * activemodel.errors.models.admin.attributes.title.blank # * activemodel.errors.models.admin.blank # * activemodel.errors.models.user.attributes.title.blank # * activemodel.errors.models.user.blank # * any default you provided through the +options+ hash (in the activemodel.errors scope) # * activemodel.errors.messages.blank # * errors.attributes.title.blank # * errors.messages.blank # # source://activemodel//lib/active_model/errors.rb#479 def generate_message(attribute, type = T.unsafe(nil), options = T.unsafe(nil)); end # Returns a Hash of attributes with an array of their Error objects. # # person.errors.group_by_attribute # # => {:name=>[<#ActiveModel::Error>, <#ActiveModel::Error>]} # # source://activemodel//lib/active_model/errors.rb#289 def group_by_attribute; end # Returns +true+ if the error messages include an error for the given key # +attribute+, +false+ otherwise. # # person.errors.messages # => {:name=>["cannot be nil"]} # person.errors.include?(:name) # => true # person.errors.include?(:age) # => false # # @return [Boolean] # # source://activemodel//lib/active_model/errors.rb#202 def has_key?(attribute); end # Imports one error. # Imported errors are wrapped as a NestedError, # providing access to original error object. # If attribute or type needs to be overridden, use +override_options+. # # ==== Options # # * +:attribute+ - Override the attribute the error belongs to. # * +:type+ - Override type of the error. # # source://activemodel//lib/active_model/errors.rb#154 def import(error, override_options = T.unsafe(nil)); end # Returns +true+ if the error messages include an error for the given key # +attribute+, +false+ otherwise. # # person.errors.messages # => {:name=>["cannot be nil"]} # person.errors.include?(:name) # => true # person.errors.include?(:age) # => false # # @return [Boolean] # # source://activemodel//lib/active_model/errors.rb#202 def include?(attribute); end # source://activemodel//lib/active_model/errors.rb#483 def inspect; end # Returns +true+ if the error messages include an error for the given key # +attribute+, +false+ otherwise. # # person.errors.messages # => {:name=>["cannot be nil"]} # person.errors.include?(:name) # => true # person.errors.include?(:age) # => false # # @return [Boolean] # # source://activemodel//lib/active_model/errors.rb#202 def key?(attribute); end # Merges the errors from other, # each Error wrapped as NestedError. # # ==== Parameters # # * +other+ - The ActiveModel::Errors instance. # # ==== Examples # # person.errors.merge!(other) # # source://activemodel//lib/active_model/errors.rb#174 def merge!(other); end # Returns a Hash of attributes with an array of their error messages. # # source://activemodel//lib/active_model/errors.rb#268 def messages; end # Returns all the error messages for a given attribute in an array. # # class Person # validates_presence_of :name, :email # validates_length_of :name, in: 5..30 # end # # person = Person.create() # person.errors.messages_for(:name) # # => ["is too short (minimum is 5 characters)", "can't be blank"] # # source://activemodel//lib/active_model/errors.rb#444 def messages_for(attribute); end # The actual array of +Error+ objects # This method is aliased to objects. # # source://activemodel//lib/active_model/errors.rb#107 def objects; end # Returns +true+ if an error on the attribute with the given type is # present, or +false+ otherwise. +type+ is treated the same as for +add+. # # person.errors.add :age # person.errors.add :name, :too_long, count: 25 # person.errors.of_kind? :age # => true # person.errors.of_kind? :name # => false # person.errors.of_kind? :name, :too_long # => true # person.errors.of_kind? :name, "is too long (maximum is 25 characters)" # => true # person.errors.of_kind? :name, :not_too_long # => false # person.errors.of_kind? :name, "is too long" # => false # # @return [Boolean] # # source://activemodel//lib/active_model/errors.rb#395 def of_kind?(attribute, type = T.unsafe(nil)); end # source://forwardable/1.3.3/forwardable.rb#231 def size(*args, **_arg1, &block); end # Returns all the full error messages in an array. # # class Person # validates_presence_of :name, :address, :email # validates_length_of :name, in: 5..30 # end # # person = Person.create(address: '123 First St.') # person.errors.full_messages # # => ["Name is too short (minimum is 5 characters)", "Name can't be blank", "Email can't be blank"] # # source://activemodel//lib/active_model/errors.rb#415 def to_a; end # Returns a Hash of attributes with their error messages. If +full_messages+ # is +true+, it will contain full messages (see +full_message+). # # person.errors.to_hash # => {:name=>["cannot be nil"]} # person.errors.to_hash(true) # => {:name=>["name cannot be nil"]} # # source://activemodel//lib/active_model/errors.rb#256 def to_hash(full_messages = T.unsafe(nil)); end # source://forwardable/1.3.3/forwardable.rb#231 def uniq!(*args, **_arg1, &block); end # Search for errors matching +attribute+, +type+, or +options+. # # Only supplied params will be matched. # # person.errors.where(:name) # => all name errors. # person.errors.where(:name, :too_short) # => all name errors being too short # person.errors.where(:name, :too_short, minimum: 2) # => all name errors being too short and minimum is 2 # # source://activemodel//lib/active_model/errors.rb#189 def where(attribute, type = T.unsafe(nil), **options); end private # source://activemodel//lib/active_model/errors.rb#122 def initialize_dup(other); end # source://activemodel//lib/active_model/errors.rb#490 def normalize_arguments(attribute, type, **options); end end # source://activemodel//lib/active_model/errors.rb#265 ActiveModel::Errors::EMPTY_ARRAY = T.let(T.unsafe(nil), Array) # = Active \Model \ForbiddenAttributesError # # Raised when forbidden attributes are used for mass assignment. # # class Person < ActiveRecord::Base # end # # params = ActionController::Parameters.new(name: 'Bob') # Person.new(params) # # => ActiveModel::ForbiddenAttributesError # # params.permit! # Person.new(params) # # => # # # source://activemodel//lib/active_model/forbidden_attributes_protection.rb#18 class ActiveModel::ForbiddenAttributesError < ::StandardError; end # source://activemodel//lib/active_model/forbidden_attributes_protection.rb#21 module ActiveModel::ForbiddenAttributesProtection private # source://activemodel//lib/active_model/forbidden_attributes_protection.rb#23 def sanitize_for_mass_assignment(attributes); end # source://activemodel//lib/active_model/forbidden_attributes_protection.rb#23 def sanitize_forbidden_attributes(attributes); end end # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#91 class ActiveModel::ForcedMutationTracker < ::ActiveModel::AttributeMutationTracker # @return [ForcedMutationTracker] a new instance of ForcedMutationTracker # # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#92 def initialize(attributes); end # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#101 def change_to_attribute(attr_name); end # @return [Boolean] # # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#97 def changed_in_place?(attr_name); end # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#125 def finalize_changes; end # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#121 def force_change(attr_name); end # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#109 def forget_change(attr_name); end # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#113 def original_value(attr_name); end private # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#132 def attr_names; end # @return [Boolean] # # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#136 def attribute_changed?(attr_name); end # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#144 def clone_value(attr_name); end # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#140 def fetch_value(attr_name); end # Returns the value of attribute finalized_changes. # # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#130 def finalized_changes; end # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#151 def type_cast(attr_name, value); end end # source://activemodel//lib/active_model/attribute_set/builder.rb#94 class ActiveModel::LazyAttributeHash # @return [LazyAttributeHash] a new instance of LazyAttributeHash # # source://activemodel//lib/active_model/attribute_set/builder.rb#97 def initialize(types, values, additional_types, default_attributes, delegate_hash = T.unsafe(nil)); end # source://activemodel//lib/active_model/attribute_set/builder.rb#134 def ==(other); end # source://activemodel//lib/active_model/attribute_set/builder.rb#110 def [](key); end # source://activemodel//lib/active_model/attribute_set/builder.rb#114 def []=(key, value); end # source://activemodel//lib/active_model/attribute_set/builder.rb#118 def deep_dup; end # source://activemodel//lib/active_model/attribute_set/builder.rb#129 def each_key(&block); end # source://activemodel//lib/active_model/attribute_set/builder.rb#95 def each_value(*_arg0, **_arg1, &_arg2); end # source://activemodel//lib/active_model/attribute_set/builder.rb#95 def except(*_arg0, **_arg1, &_arg2); end # source://activemodel//lib/active_model/attribute_set/builder.rb#95 def fetch(*_arg0, **_arg1, &_arg2); end # @return [Boolean] # # source://activemodel//lib/active_model/attribute_set/builder.rb#106 def key?(key); end # source://activemodel//lib/active_model/attribute_set/builder.rb#142 def marshal_dump; end # source://activemodel//lib/active_model/attribute_set/builder.rb#146 def marshal_load(values); end # source://activemodel//lib/active_model/attribute_set/builder.rb#95 def transform_values(*_arg0, **_arg1, &_arg2); end protected # source://activemodel//lib/active_model/attribute_set/builder.rb#151 def materialize; end private # Returns the value of attribute additional_types. # # source://activemodel//lib/active_model/attribute_set/builder.rb#163 def additional_types; end # source://activemodel//lib/active_model/attribute_set/builder.rb#165 def assign_default_value(name); end # Returns the value of attribute default_attributes. # # source://activemodel//lib/active_model/attribute_set/builder.rb#163 def default_attributes; end # Returns the value of attribute delegate_hash. # # source://activemodel//lib/active_model/attribute_set/builder.rb#163 def delegate_hash; end # source://activemodel//lib/active_model/attribute_set/builder.rb#124 def initialize_dup(_); end # Returns the value of attribute types. # # source://activemodel//lib/active_model/attribute_set/builder.rb#163 def types; end # Returns the value of attribute values. # # source://activemodel//lib/active_model/attribute_set/builder.rb#163 def values; end end # source://activemodel//lib/active_model/attribute_set/builder.rb#21 class ActiveModel::LazyAttributeSet < ::ActiveModel::AttributeSet # @return [LazyAttributeSet] a new instance of LazyAttributeSet # # source://activemodel//lib/active_model/attribute_set/builder.rb#22 def initialize(values, types, additional_types, default_attributes, attributes = T.unsafe(nil)); end # source://activemodel//lib/active_model/attribute_set/builder.rb#41 def fetch_value(name, &block); end # @return [Boolean] # # source://activemodel//lib/active_model/attribute_set/builder.rb#32 def key?(name); end # source://activemodel//lib/active_model/attribute_set/builder.rb#36 def keys; end protected # source://activemodel//lib/active_model/attribute_set/builder.rb#61 def attributes; end private # Returns the value of attribute additional_types. # # source://activemodel//lib/active_model/attribute_set/builder.rb#71 def additional_types; end # source://activemodel//lib/active_model/attribute_set/builder.rb#73 def default_attribute(name, value_present = T.unsafe(nil), value = T.unsafe(nil)); end # Returns the value of attribute default_attributes. # # source://activemodel//lib/active_model/attribute_set/builder.rb#71 def default_attributes; end # Returns the value of attribute types. # # source://activemodel//lib/active_model/attribute_set/builder.rb#71 def types; end # Returns the value of attribute values. # # source://activemodel//lib/active_model/attribute_set/builder.rb#71 def values; end end # source://activemodel//lib/active_model/lint.rb#4 module ActiveModel::Lint; end # == Active \Model \Lint \Tests # # You can test whether an object is compliant with the Active \Model API by # including +ActiveModel::Lint::Tests+ in your TestCase. It will # include tests that tell you whether your object is fully compliant, # or if not, which aspects of the API are not implemented. # # Note an object is not required to implement all APIs in order to work # with Action Pack. This module only intends to provide guidance in case # you want all features out of the box. # # These tests do not attempt to determine the semantic correctness of the # returned values. For instance, you could implement valid? to # always return +true+, and the tests would pass. It is up to you to ensure # that the values are semantically meaningful. # # Objects you pass in are expected to return a compliant object from a call # to to_model. It is perfectly fine for to_model to return # +self+. # # source://activemodel//lib/active_model/lint.rb#24 module ActiveModel::Lint::Tests # Passes if the object's model responds to errors and if calling # [](attribute) on the result of this method returns an array. # Fails otherwise. # # errors[attribute] is used to retrieve the errors of a model # for a given attribute. If errors are present, the method should return # an array of strings that are the errors for the attribute in question. # If localization is used, the strings should be localized for the current # locale. If no error is present, the method should return an empty array. # # source://activemodel//lib/active_model/lint.rb#102 def test_errors_aref; end # Passes if the object's model responds to model_name both as # an instance method and as a class method, and if calling this method # returns a string with some convenience methods: :human, # :singular and :plural. # # Check ActiveModel::Naming for more information. # # source://activemodel//lib/active_model/lint.rb#81 def test_model_naming; end # Passes if the object's model responds to persisted? and if # calling this method returns either +true+ or +false+. Fails otherwise. # # persisted? is used when calculating the URL for an object. # If the object is not persisted, a form for that object, for instance, # will route to the create action. If it is persisted, a form for the # object will route to the update action. # # @return [Boolean] # # source://activemodel//lib/active_model/lint.rb#70 def test_persisted?; end # Passes if the object's model responds to to_key and if calling # this method returns +nil+ when the object is not persisted. # Fails otherwise. # # to_key returns an Enumerable of all (primary) key attributes # of the model, and is used to a generate unique DOM id for the object. # # source://activemodel//lib/active_model/lint.rb#31 def test_to_key; end # Passes if the object's model responds to to_param and if # calling this method returns +nil+ when the object is not persisted. # Fails otherwise. # # to_param is used to represent the object's key in URLs. # Implementers can decide to either raise an exception or provide a # default in case the record uses a composite primary key. There are no # tests for this behavior in lint because it doesn't make sense to force # any of the possible implementation strategies on the implementer. # # source://activemodel//lib/active_model/lint.rb#46 def test_to_param; end # Passes if the object's model responds to to_partial_path and if # calling this method returns a string. Fails otherwise. # # to_partial_path is used for looking up partials. For example, # a BlogPost model might return "blog_posts/blog_post". # # source://activemodel//lib/active_model/lint.rb#58 def test_to_partial_path; end private # source://activemodel//lib/active_model/lint.rb#113 def assert_boolean(result, name); end # source://activemodel//lib/active_model/lint.rb#108 def model; end end # Raised when an attribute is not defined. # # class User < ActiveRecord::Base # has_many :pets # end # # user = User.first # user.pets.select(:id).first.user_id # # => ActiveModel::MissingAttributeError: missing attribute 'user_id' for Pet # # source://activemodel//lib/active_model/attribute_methods.rb#15 class ActiveModel::MissingAttributeError < ::NoMethodError; end # = Active \Model \Basic \Model # # Allows implementing models similar to ActiveRecord::Base. # Includes ActiveModel::API for the required interface for an # object to interact with Action Pack and Action View, but can be # extended with other functionalities. # # A minimal implementation could be: # # class Person # include ActiveModel::Model # attr_accessor :name, :age # end # # person = Person.new(name: 'bob', age: '18') # person.name # => "bob" # person.age # => "18" # # If for some reason you need to run code on initialize, make # sure you call +super+ if you want the attributes hash initialization to # happen. # # class Person # include ActiveModel::Model # attr_accessor :id, :name, :omg # # def initialize(attributes={}) # super # @omg ||= true # end # end # # person = Person.new(id: 1, name: 'bob') # person.omg # => true # # For more detailed information on other functionalities available, please # refer to the specific modules included in +ActiveModel::Model+ # (see below). # # source://activemodel//lib/active_model/model.rb#42 module ActiveModel::Model include ::ActiveModel::Access extend ::ActiveSupport::Concern include GeneratedInstanceMethods include ::ActiveSupport::Callbacks include ::ActiveModel::Validations::HelperMethods include ::ActiveModel::Validations include ::ActiveModel::Conversion include ::ActiveModel::API mixes_in_class_methods GeneratedClassMethods mixes_in_class_methods ::ActiveModel::Validations::ClassMethods mixes_in_class_methods ::ActiveModel::Callbacks mixes_in_class_methods ::ActiveSupport::Callbacks::ClassMethods mixes_in_class_methods ::ActiveSupport::DescendantsTracker mixes_in_class_methods ::ActiveModel::Translation mixes_in_class_methods ::ActiveModel::Validations::HelperMethods mixes_in_class_methods ::ActiveModel::Conversion::ClassMethods module GeneratedClassMethods def __callbacks; end def __callbacks=(value); end def _validators; end def _validators=(value); end def _validators?; end def param_delimiter; end def param_delimiter=(value); end def param_delimiter?; end end module GeneratedInstanceMethods def __callbacks; end def _validators; end def _validators?; end def param_delimiter=(value); end end end # source://activemodel//lib/active_model/naming.rb#9 class ActiveModel::Name include ::Comparable # Returns a new ActiveModel::Name instance. By default, the +namespace+ # and +name+ option will take the namespace and name of the given class # respectively. # Use +locale+ argument for singularize and pluralize model name. # # module Foo # class Bar # end # end # # ActiveModel::Name.new(Foo::Bar).to_s # # => "Foo::Bar" # # @raise [ArgumentError] # @return [Name] a new instance of Name # # source://activemodel//lib/active_model/naming.rb#166 def initialize(klass, namespace = T.unsafe(nil), name = T.unsafe(nil), locale = T.unsafe(nil)); end # source://activemodel//lib/active_model/naming.rb#151 def !~(*_arg0, **_arg1, &_arg2); end # source://activemodel//lib/active_model/naming.rb#151 def <=>(*_arg0, **_arg1, &_arg2); end # source://activemodel//lib/active_model/naming.rb#151 def ==(arg); end # source://activemodel//lib/active_model/naming.rb#151 def ===(arg); end # source://activemodel//lib/active_model/naming.rb#151 def =~(*_arg0, **_arg1, &_arg2); end # source://activemodel//lib/active_model/naming.rb#151 def as_json(*_arg0, **_arg1, &_arg2); end # Returns the value of attribute collection. # # source://activemodel//lib/active_model/naming.rb#12 def cache_key; end # Returns the value of attribute collection. # # source://activemodel//lib/active_model/naming.rb#12 def collection; end # Sets the attribute collection # # @param value the value to set the attribute collection to. # # source://activemodel//lib/active_model/naming.rb#12 def collection=(_arg0); end # Returns the value of attribute element. # # source://activemodel//lib/active_model/naming.rb#12 def element; end # Sets the attribute element # # @param value the value to set the attribute element to. # # source://activemodel//lib/active_model/naming.rb#12 def element=(_arg0); end # source://activemodel//lib/active_model/naming.rb#151 def eql?(*_arg0, **_arg1, &_arg2); end # Transform the model name into a more human format, using I18n. By default, # it will underscore then humanize the class name. # # class BlogPost # extend ActiveModel::Naming # end # # BlogPost.model_name.human # => "Blog post" # # Specify +options+ with additional translating options. # # source://activemodel//lib/active_model/naming.rb#197 def human(options = T.unsafe(nil)); end # Returns the value of attribute i18n_key. # # source://activemodel//lib/active_model/naming.rb#12 def i18n_key; end # Sets the attribute i18n_key # # @param value the value to set the attribute i18n_key to. # # source://activemodel//lib/active_model/naming.rb#12 def i18n_key=(_arg0); end # source://activemodel//lib/active_model/naming.rb#151 def match?(*_arg0, **_arg1, &_arg2); end # Returns the value of attribute name. # # source://activemodel//lib/active_model/naming.rb#12 def name; end # Sets the attribute name # # @param value the value to set the attribute name to. # # source://activemodel//lib/active_model/naming.rb#12 def name=(_arg0); end # Returns the value of attribute param_key. # # source://activemodel//lib/active_model/naming.rb#12 def param_key; end # Sets the attribute param_key # # @param value the value to set the attribute param_key to. # # source://activemodel//lib/active_model/naming.rb#12 def param_key=(_arg0); end # Returns the value of attribute plural. # # source://activemodel//lib/active_model/naming.rb#12 def plural; end # Sets the attribute plural # # @param value the value to set the attribute plural to. # # source://activemodel//lib/active_model/naming.rb#12 def plural=(_arg0); end # Returns the value of attribute route_key. # # source://activemodel//lib/active_model/naming.rb#12 def route_key; end # Sets the attribute route_key # # @param value the value to set the attribute route_key to. # # source://activemodel//lib/active_model/naming.rb#12 def route_key=(_arg0); end # Returns the value of attribute singular. # # source://activemodel//lib/active_model/naming.rb#12 def singular; end # Sets the attribute singular # # @param value the value to set the attribute singular to. # # source://activemodel//lib/active_model/naming.rb#12 def singular=(_arg0); end # Returns the value of attribute singular_route_key. # # source://activemodel//lib/active_model/naming.rb#12 def singular_route_key; end # Sets the attribute singular_route_key # # @param value the value to set the attribute singular_route_key to. # # source://activemodel//lib/active_model/naming.rb#12 def singular_route_key=(_arg0); end # source://activemodel//lib/active_model/naming.rb#151 def to_s(*_arg0, **_arg1, &_arg2); end # source://activemodel//lib/active_model/naming.rb#151 def to_str(*_arg0, **_arg1, &_arg2); end # @return [Boolean] # # source://activemodel//lib/active_model/naming.rb#209 def uncountable?; end private # source://activemodel//lib/active_model/naming.rb#216 def _singularize(string); end # source://activemodel//lib/active_model/naming.rb#220 def i18n_keys; end # source://activemodel//lib/active_model/naming.rb#228 def i18n_scope; end end # source://activemodel//lib/active_model/naming.rb#214 ActiveModel::Name::MISSING_TRANSLATION = T.let(T.unsafe(nil), Integer) # = Active \Model \Naming # # Creates a +model_name+ method on your object. # # To implement, just extend ActiveModel::Naming in your object: # # class BookCover # extend ActiveModel::Naming # end # # BookCover.model_name.name # => "BookCover" # BookCover.model_name.human # => "Book cover" # # BookCover.model_name.i18n_key # => :book_cover # BookModule::BookCover.model_name.i18n_key # => :"book_module/book_cover" # # Providing the functionality that ActiveModel::Naming provides in your object # is required to pass the \Active \Model Lint test. So either extending the # provided method below, or rolling your own is required. # # source://activemodel//lib/active_model/naming.rb#252 module ActiveModel::Naming # Returns an ActiveModel::Name object for module. It can be # used to retrieve all kinds of naming-related information # (See ActiveModel::Name for more information). # # class Person # extend ActiveModel::Naming # end # # Person.model_name.name # => "Person" # Person.model_name.class # => ActiveModel::Name # Person.model_name.singular # => "person" # Person.model_name.plural # => "people" # # source://activemodel//lib/active_model/naming.rb#270 def model_name; end private # source://activemodel//lib/active_model/naming.rb#352 def inherited(base); end class << self # source://activemodel//lib/active_model/naming.rb#253 def extended(base); end # Returns string to use for params names. It differs for # namespaced models regarding whether it's inside isolated engine. # # # For isolated engine: # ActiveModel::Naming.param_key(Blog::Post) # => "post" # # # For shared engine: # ActiveModel::Naming.param_key(Blog::Post) # => "blog_post" # # source://activemodel//lib/active_model/naming.rb#338 def param_key(record_or_class); end # Returns the plural class name of a record or class. # # ActiveModel::Naming.plural(post) # => "posts" # ActiveModel::Naming.plural(Highrise::Person) # => "highrise_people" # # source://activemodel//lib/active_model/naming.rb#283 def plural(record_or_class); end # Returns string to use while generating route names. It differs for # namespaced models regarding whether it's inside isolated engine. # # # For isolated engine: # ActiveModel::Naming.route_key(Blog::Post) # => "posts" # # # For shared engine: # ActiveModel::Naming.route_key(Blog::Post) # => "blog_posts" # # The route key also considers if the noun is uncountable and, in # such cases, automatically appends _index. # # source://activemodel//lib/active_model/naming.rb#326 def route_key(record_or_class); end # Returns the singular class name of a record or class. # # ActiveModel::Naming.singular(post) # => "post" # ActiveModel::Naming.singular(Highrise::Person) # => "highrise_person" # # source://activemodel//lib/active_model/naming.rb#291 def singular(record_or_class); end # Returns string to use while generating route names. It differs for # namespaced models regarding whether it's inside isolated engine. # # # For isolated engine: # ActiveModel::Naming.singular_route_key(Blog::Post) # => "post" # # # For shared engine: # ActiveModel::Naming.singular_route_key(Blog::Post) # => "blog_post" # # source://activemodel//lib/active_model/naming.rb#311 def singular_route_key(record_or_class); end # Identifies whether the class name of a record or class is uncountable. # # ActiveModel::Naming.uncountable?(Sheep) # => true # ActiveModel::Naming.uncountable?(Post) # => false # # @return [Boolean] # # source://activemodel//lib/active_model/naming.rb#299 def uncountable?(record_or_class); end private # source://activemodel//lib/active_model/naming.rb#342 def model_name_from_record_or_class(record_or_class); end end end # source://activemodel//lib/active_model/nested_error.rb#7 class ActiveModel::NestedError < ::ActiveModel::Error extend ::Forwardable # @return [NestedError] a new instance of NestedError # # source://activemodel//lib/active_model/nested_error.rb#8 def initialize(base, inner_error, override_options = T.unsafe(nil)); end # Returns the value of attribute inner_error. # # source://activemodel//lib/active_model/nested_error.rb#17 def inner_error; end # source://forwardable/1.3.3/forwardable.rb#231 def message(*args, **_arg1, &block); end end # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#156 class ActiveModel::NullMutationTracker include ::Singleton extend ::Singleton::SingletonClassMethods # @return [Boolean] # # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#174 def any_changes?; end # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#171 def change_to_attribute(attr_name); end # @return [Boolean] # # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#178 def changed?(attr_name, **_arg1); end # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#159 def changed_attribute_names; end # @return [Boolean] # # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#182 def changed_in_place?(attr_name); end # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#163 def changed_values; end # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#167 def changes; end # source://activemodel//lib/active_model/attribute_mutation_tracker.rb#186 def original_value(attr_name); end class << self private def allocate; end def new(*_arg0); end end end # = Active \Model \RangeError # # Raised when attribute values are out of range. # # source://activemodel//lib/active_model/errors.rb#523 class ActiveModel::RangeError < ::RangeError; end # source://activemodel//lib/active_model/secure_password.rb#4 module ActiveModel::SecurePassword extend ::ActiveSupport::Concern mixes_in_class_methods ::ActiveModel::SecurePassword::ClassMethods class << self # source://activemodel//lib/active_model/secure_password.rb#13 def min_cost; end # source://activemodel//lib/active_model/secure_password.rb#13 def min_cost=(_arg0); end end end # source://activemodel//lib/active_model/secure_password.rb#17 module ActiveModel::SecurePassword::ClassMethods # Adds methods to set and authenticate against a BCrypt password. # This mechanism requires you to have a +XXX_digest+ attribute, # where +XXX+ is the attribute name of your desired password. # # The following validations are added automatically: # * Password must be present on creation # * Password length should be less than or equal to 72 bytes # * Confirmation of password (using a +XXX_confirmation+ attribute) # # If confirmation validation is not needed, simply leave out the # value for +XXX_confirmation+ (i.e. don't provide a form field for # it). When this attribute has a +nil+ value, the validation will not be # triggered. # # Additionally, a +XXX_challenge+ attribute is created. When set to a # value other than +nil+, it will validate against the currently persisted # password. This validation relies on dirty tracking, as provided by # ActiveModel::Dirty; if dirty tracking methods are not defined, this # validation will fail. # # All of the above validations can be omitted by passing # validations: false as an argument. This allows complete # customizability of validation behavior. # # Finally, a password reset token that's valid for 15 minutes after issue # is automatically configured when +reset_token+ is set to true (which it is by default) # and the object responds to +generates_token_for+ (which Active Records do). # # To use +has_secure_password+, add bcrypt (~> 3.1.7) to your Gemfile: # # gem "bcrypt", "~> 3.1.7" # # ==== Examples # # ===== Using Active Record (which automatically includes ActiveModel::SecurePassword) # # # Schema: User(name:string, password_digest:string, recovery_password_digest:string) # class User < ActiveRecord::Base # has_secure_password # has_secure_password :recovery_password, validations: false # end # # user = User.new(name: "david", password: "", password_confirmation: "nomatch") # # user.save # => false, password required # user.password = "vr00m" # user.save # => false, confirmation doesn't match # user.password_confirmation = "vr00m" # user.save # => true # # user.authenticate("notright") # => false # user.authenticate("vr00m") # => user # User.find_by(name: "david")&.authenticate("notright") # => false # User.find_by(name: "david")&.authenticate("vr00m") # => user # # user.recovery_password = "42password" # user.recovery_password_digest # => "$2a$04$iOfhwahFymCs5weB3BNH/uXkTG65HR.qpW.bNhEjFP3ftli3o5DQC" # user.save # => true # # user.authenticate_recovery_password("42password") # => user # # user.update(password: "pwn3d", password_challenge: "") # => false, challenge doesn't authenticate # user.update(password: "nohack4u", password_challenge: "vr00m") # => true # # user.authenticate("vr00m") # => false, old password # user.authenticate("nohack4u") # => user # # ===== Conditionally requiring a password # # class Account # include ActiveModel::SecurePassword # # attr_accessor :is_guest, :password_digest # # has_secure_password # # def errors # super.tap { |errors| errors.delete(:password, :blank) if is_guest } # end # end # # account = Account.new # account.valid? # => false, password required # # account.is_guest = true # account.valid? # => true # # ===== Using the password reset token # # user = User.create!(name: "david", password: "123", password_confirmation: "123") # token = user.password_reset_token # User.find_by_password_reset_token(token) # returns user # # # 16 minutes later... # User.find_by_password_reset_token(token) # returns nil # # # raises ActiveSupport::MessageVerifier::InvalidSignature since the token is expired # User.find_by_password_reset_token!(token) # # source://activemodel//lib/active_model/secure_password.rb#116 def has_secure_password(attribute = T.unsafe(nil), validations: T.unsafe(nil), reset_token: T.unsafe(nil)); end end # source://activemodel//lib/active_model/secure_password.rb#182 class ActiveModel::SecurePassword::InstanceMethodsOnActivation < ::Module # @return [InstanceMethodsOnActivation] a new instance of InstanceMethodsOnActivation # # source://activemodel//lib/active_model/secure_password.rb#183 def initialize(attribute, reset_token:); end end # BCrypt hash function can handle maximum 72 bytes, and if we pass # password of length more than 72 bytes it ignores extra characters. # Hence need to put a restriction on password length. # # source://activemodel//lib/active_model/secure_password.rb#10 ActiveModel::SecurePassword::MAX_PASSWORD_LENGTH_ALLOWED = T.let(T.unsafe(nil), Integer) # = Active \Model \Serialization # # Provides a basic serialization to a serializable_hash for your objects. # # A minimal implementation could be: # # class Person # include ActiveModel::Serialization # # attr_accessor :name # # def attributes # {'name' => nil} # end # end # # Which would provide you with: # # person = Person.new # person.serializable_hash # => {"name"=>nil} # person.name = "Bob" # person.serializable_hash # => {"name"=>"Bob"} # # An +attributes+ hash must be defined and should contain any attributes you # need to be serialized. Attributes must be strings, not symbols. # When called, serializable hash will use instance methods that match the name # of the attributes hash's keys. In order to override this behavior, override # the +read_attribute_for_serialization+ method. # # ActiveModel::Serializers::JSON module automatically includes # the +ActiveModel::Serialization+ module, so there is no need to # explicitly include +ActiveModel::Serialization+. # # A minimal implementation including JSON would be: # # class Person # include ActiveModel::Serializers::JSON # # attr_accessor :name # # def attributes # {'name' => nil} # end # end # # Which would provide you with: # # person = Person.new # person.serializable_hash # => {"name"=>nil} # person.as_json # => {"name"=>nil} # person.to_json # => "{\"name\":null}" # # person.name = "Bob" # person.serializable_hash # => {"name"=>"Bob"} # person.as_json # => {"name"=>"Bob"} # person.to_json # => "{\"name\":\"Bob\"}" # # Valid options are :only, :except, :methods and # :include. The following are all valid examples: # # person.serializable_hash(only: 'name') # person.serializable_hash(include: :address) # person.serializable_hash(include: { address: { only: 'city' }}) # # source://activemodel//lib/active_model/serialization.rb#69 module ActiveModel::Serialization # Hook method defining how an attribute value should be retrieved for # serialization. By default this is assumed to be an instance named after # the attribute. Override this method in subclasses should you need to # retrieve the value for a given attribute differently: # # class MyClass # include ActiveModel::Serialization # # def initialize(data = {}) # @data = data # end # # def read_attribute_for_serialization(key) # @data[key] # end # end def read_attribute_for_serialization(*_arg0); end # Returns a serialized hash of your object. # # class Person # include ActiveModel::Serialization # # attr_accessor :name, :age # # def attributes # {'name' => nil, 'age' => nil} # end # # def capitalized_name # name.capitalize # end # end # # person = Person.new # person.name = 'bob' # person.age = 22 # person.serializable_hash # => {"name"=>"bob", "age"=>22} # person.serializable_hash(only: :name) # => {"name"=>"bob"} # person.serializable_hash(except: :name) # => {"age"=>22} # person.serializable_hash(methods: :capitalized_name) # # => {"name"=>"bob", "age"=>22, "capitalized_name"=>"Bob"} # # Example with :include option # # class User # include ActiveModel::Serializers::JSON # attr_accessor :name, :notes # Emulate has_many :notes # def attributes # {'name' => nil} # end # end # # class Note # include ActiveModel::Serializers::JSON # attr_accessor :title, :text # def attributes # {'title' => nil, 'text' => nil} # end # end # # note = Note.new # note.title = 'Battle of Austerlitz' # note.text = 'Some text here' # # user = User.new # user.name = 'Napoleon' # user.notes = [note] # # user.serializable_hash # # => {"name" => "Napoleon"} # user.serializable_hash(include: { notes: { only: 'title' }}) # # => {"name" => "Napoleon", "notes" => [{"title"=>"Battle of Austerlitz"}]} # # source://activemodel//lib/active_model/serialization.rb#125 def serializable_hash(options = T.unsafe(nil)); end private # source://activemodel//lib/active_model/serialization.rb#170 def attribute_names_for_serialization; end # Add associations specified via the :include option. # # Expects a block that takes as arguments: # +association+ - name of the association # +records+ - the association record(s) to be serialized # +opts+ - options for the association records # # source://activemodel//lib/active_model/serialization.rb#184 def serializable_add_includes(options = T.unsafe(nil)); end # source://activemodel//lib/active_model/serialization.rb#174 def serializable_attributes(attribute_names); end end # source://activemodel//lib/active_model.rb#68 module ActiveModel::Serializers extend ::ActiveSupport::Autoload end # = Active \Model \JSON \Serializer # # source://activemodel//lib/active_model/serializers/json.rb#8 module ActiveModel::Serializers::JSON include ::ActiveModel::Serialization extend ::ActiveSupport::Concern include GeneratedInstanceMethods mixes_in_class_methods GeneratedClassMethods mixes_in_class_methods ::ActiveModel::Naming # Returns a hash representing the model. Some configuration can be # passed through +options+. # # The option include_root_in_json controls the top-level behavior # of +as_json+. If +true+, +as_json+ will emit a single root node named # after the object's type. The default value for include_root_in_json # option is +false+. # # user = User.find(1) # user.as_json # # => { "id" => 1, "name" => "Konata Izumi", "age" => 16, # # "created_at" => "2006-08-01T17:27:133.000Z", "awesome" => true} # # ActiveRecord::Base.include_root_in_json = true # # user.as_json # # => { "user" => { "id" => 1, "name" => "Konata Izumi", "age" => 16, # # "created_at" => "2006-08-01T17:27:13.000Z", "awesome" => true } } # # This behavior can also be achieved by setting the :root option # to +true+ as in: # # user = User.find(1) # user.as_json(root: true) # # => { "user" => { "id" => 1, "name" => "Konata Izumi", "age" => 16, # # "created_at" => "2006-08-01T17:27:13.000Z", "awesome" => true } } # # If you prefer, :root may also be set to a custom string key instead as in: # # user = User.find(1) # user.as_json(root: "author") # # => { "author" => { "id" => 1, "name" => "Konata Izumi", "age" => 16, # # "created_at" => "2006-08-01T17:27:13.000Z", "awesome" => true } } # # Without any +options+, the returned Hash will include all the model's # attributes. # # user = User.find(1) # user.as_json # # => { "id" => 1, "name" => "Konata Izumi", "age" => 16, # # "created_at" => "2006-08-01T17:27:13.000Z", "awesome" => true} # # The :only and :except options can be used to limit # the attributes included, and work similar to the +attributes+ method. # # user.as_json(only: [:id, :name]) # # => { "id" => 1, "name" => "Konata Izumi" } # # user.as_json(except: [:id, :created_at, :age]) # # => { "name" => "Konata Izumi", "awesome" => true } # # To include the result of some method calls on the model use :methods: # # user.as_json(methods: :permalink) # # => { "id" => 1, "name" => "Konata Izumi", "age" => 16, # # "created_at" => "2006-08-01T17:27:13.000Z", "awesome" => true, # # "permalink" => "1-konata-izumi" } # # To include associations use :include: # # user.as_json(include: :posts) # # => { "id" => 1, "name" => "Konata Izumi", "age" => 16, # # "created_at" => "2006-08-01T17:27:13.000Z", "awesome" => true, # # "posts" => [ { "id" => 1, "author_id" => 1, "title" => "Welcome to the weblog" }, # # { "id" => 2, "author_id" => 1, "title" => "So I was thinking" } ] } # # Second level and higher order associations work as well: # # user.as_json(include: { posts: { # include: { comments: { # only: :body } }, # only: :title } }) # # => { "id" => 1, "name" => "Konata Izumi", "age" => 16, # # "created_at" => "2006-08-01T17:27:13.000Z", "awesome" => true, # # "posts" => [ { "comments" => [ { "body" => "1st post!" }, { "body" => "Second!" } ], # # "title" => "Welcome to the weblog" }, # # { "comments" => [ { "body" => "Don't think too hard" } ], # # "title" => "So I was thinking" } ] } # # source://activemodel//lib/active_model/serializers/json.rb#96 def as_json(options = T.unsafe(nil)); end # Sets the model +attributes+ from a JSON string. Returns +self+. # # class Person # include ActiveModel::Serializers::JSON # # attr_accessor :name, :age, :awesome # # def attributes=(hash) # hash.each do |key, value| # send("#{key}=", value) # end # end # # def attributes # instance_values # end # end # # json = { name: 'bob', age: 22, awesome:true }.to_json # person = Person.new # person.from_json(json) # => # # person.name # => "bob" # person.age # => 22 # person.awesome # => true # # The default value for +include_root+ is +false+. You can change it to # +true+ if the given JSON string includes a single root node. # # json = { person: { name: 'bob', age: 22, awesome:true } }.to_json # person = Person.new # person.from_json(json, true) # => # # person.name # => "bob" # person.age # => 22 # person.awesome # => true # # source://activemodel//lib/active_model/serializers/json.rb#146 def from_json(json, include_root = T.unsafe(nil)); end module GeneratedClassMethods def include_root_in_json; end def include_root_in_json=(value); end def include_root_in_json?; end end module GeneratedInstanceMethods def include_root_in_json; end def include_root_in_json?; end end end # = Active \Model \StrictValidationFailed # # Raised when a validation cannot be corrected by end users and are considered # exceptional. # # class Person # include ActiveModel::Validations # # attr_accessor :name # # validates_presence_of :name, strict: true # end # # person = Person.new # person.name = nil # person.valid? # # => ActiveModel::StrictValidationFailed: Name can't be blank # # source://activemodel//lib/active_model/errors.rb#517 class ActiveModel::StrictValidationFailed < ::StandardError; end # = Active \Model \Translation # # Provides integration between your object and the \Rails internationalization # (i18n) framework. # # A minimal implementation could be: # # class TranslatedPerson # extend ActiveModel::Translation # end # # TranslatedPerson.human_attribute_name('my_attribute') # # => "My attribute" # # This also provides the required class methods for hooking into the # \Rails internationalization API, including being able to define a # class-based +i18n_scope+ and +lookup_ancestors+ to find translations in # parent classes. # # source://activemodel//lib/active_model/translation.rb#22 module ActiveModel::Translation include ::ActiveModel::Naming # Transforms attribute names into a more human format, such as "First name" # instead of "first_name". # # Person.human_attribute_name("first_name") # => "First name" # # Specify +options+ with additional translating options. # # source://activemodel//lib/active_model/translation.rb#48 def human_attribute_name(attribute, options = T.unsafe(nil)); end # Returns the +i18n_scope+ for the class. Override if you want custom lookup. # # source://activemodel//lib/active_model/translation.rb#28 def i18n_scope; end # When localizing a string, it goes through the lookup returned by this # method, which is used in ActiveModel::Name#human, # ActiveModel::Errors#full_messages and # ActiveModel::Translation#human_attribute_name. # # source://activemodel//lib/active_model/translation.rb#36 def lookup_ancestors; end class << self # source://activemodel//lib/active_model/translation.rb#25 def raise_on_missing_translations; end # source://activemodel//lib/active_model/translation.rb#25 def raise_on_missing_translations=(_arg0); end end end # source://activemodel//lib/active_model/translation.rb#40 ActiveModel::Translation::MISSING_TRANSLATION = T.let(T.unsafe(nil), Integer) # source://activemodel//lib/active_model/type/helpers/accepts_multiparameter_time.rb#4 module ActiveModel::Type class << self # source://activemodel//lib/active_model/type.rb#38 def default_value; end # source://activemodel//lib/active_model/type.rb#34 def lookup(*_arg0, **_arg1, &_arg2); end # Add a new type to the registry, allowing it to be referenced as a # symbol by {attribute}[rdoc-ref:Attributes::ClassMethods#attribute]. # # source://activemodel//lib/active_model/type.rb#30 def register(type_name, klass = T.unsafe(nil), &block); end # source://activemodel//lib/active_model/type.rb#26 def registry; end # source://activemodel//lib/active_model/type.rb#26 def registry=(_arg0); end end end # = Active Model \BigInteger \Type # # Attribute type for integers that can be serialized to an unlimited number # of bytes. This type is registered under the +:big_integer+ key. # # class Person # include ActiveModel::Attributes # # attribute :id, :big_integer # end # # person = Person.new # person.id = "18_000_000_000" # # person.id # => 18000000000 # # All casting and serialization are performed in the same way as the # standard ActiveModel::Type::Integer type. # # source://activemodel//lib/active_model/type/big_integer.rb#25 class ActiveModel::Type::BigInteger < ::ActiveModel::Type::Integer # source://activemodel//lib/active_model/type/big_integer.rb#26 def serialize_cast_value(value); end private # source://activemodel//lib/active_model/type/big_integer.rb#31 def max_value; end end # = Active Model \Binary \Type # # Attribute type for representation of binary data. This type is registered # under the +:binary+ key. # # Non-string values are coerced to strings using their +to_s+ method. # # source://activemodel//lib/active_model/type/binary.rb#11 class ActiveModel::Type::Binary < ::ActiveModel::Type::Value # @return [Boolean] # # source://activemodel//lib/active_model/type/binary.rb#16 def binary?; end # source://activemodel//lib/active_model/type/binary.rb#20 def cast(value); end # @return [Boolean] # # source://activemodel//lib/active_model/type/binary.rb#35 def changed_in_place?(raw_old_value, value); end # source://activemodel//lib/active_model/type/binary.rb#30 def serialize(value); end # source://activemodel//lib/active_model/type/binary.rb#12 def type; end end # source://activemodel//lib/active_model/type/binary.rb#40 class ActiveModel::Type::Binary::Data # @return [Data] a new instance of Data # # source://activemodel//lib/active_model/type/binary.rb#41 def initialize(value); end # source://activemodel//lib/active_model/type/binary.rb#56 def ==(other); end # source://activemodel//lib/active_model/type/binary.rb#52 def hex; end # source://activemodel//lib/active_model/type/binary.rb#47 def to_s; end # source://activemodel//lib/active_model/type/binary.rb#47 def to_str; end end # = Active Model \Boolean \Type # # A class that behaves like a boolean type, including rules for coercion of # user input. # # - "false", "f", "0", +0+ or any other value in # +FALSE_VALUES+ will be coerced to +false+. # - Empty strings are coerced to +nil+. # - All other values will be coerced to +true+. # # source://activemodel//lib/active_model/type/boolean.rb#14 class ActiveModel::Type::Boolean < ::ActiveModel::Type::Value # source://activemodel//lib/active_model/type/boolean.rb#30 def serialize(value); end # source://activemodel//lib/active_model/type/boolean.rb#34 def serialize_cast_value(value); end # source://activemodel//lib/active_model/type/boolean.rb#26 def type; end private # source://activemodel//lib/active_model/type/boolean.rb#39 def cast_value(value); end end # source://activemodel//lib/active_model/type/boolean.rb#15 ActiveModel::Type::Boolean::FALSE_VALUES = T.let(T.unsafe(nil), Set) # = Active Model \Date \Type # # Attribute type for date representation. It is registered under the # +:date+ key. # # class Person # include ActiveModel::Attributes # # attribute :birthday, :date # end # # person = Person.new # person.birthday = "1989-07-13" # # person.birthday.class # => Date # person.birthday.year # => 1989 # person.birthday.month # => 7 # person.birthday.day # => 13 # # String values are parsed using the ISO 8601 date format. Any other values # are cast using their +to_date+ method, if it exists. # # source://activemodel//lib/active_model/type/date.rb#26 class ActiveModel::Type::Date < ::ActiveModel::Type::Value include ::ActiveModel::Type::Helpers::Timezone include ::ActiveModel::Type::Helpers::AcceptsMultiparameterTime::InstanceMethods # source://activemodel//lib/active_model/type/date.rb#30 def type; end # source://activemodel//lib/active_model/type/date.rb#34 def type_cast_for_schema(value); end private # source://activemodel//lib/active_model/type/date.rb#39 def cast_value(value); end # source://activemodel//lib/active_model/type/date.rb#57 def fallback_string_to_date(string); end # source://activemodel//lib/active_model/type/date.rb#51 def fast_string_to_date(string); end # source://activemodel//lib/active_model/type/date.rb#66 def new_date(year, mon, mday); end # source://activemodel//lib/active_model/type/date.rb#72 def value_from_multiparameter_assignment(*_arg0); end end # source://activemodel//lib/active_model/type/date.rb#50 ActiveModel::Type::Date::ISO_DATE = T.let(T.unsafe(nil), Regexp) # = Active Model \DateTime \Type # # Attribute type to represent dates and times. It is registered under the # +:datetime+ key. # # class Event # include ActiveModel::Attributes # # attribute :start, :datetime # end # # event = Event.new # event.start = "Wed, 04 Sep 2013 03:00:00 EAT" # # event.start.class # => Time # event.start.year # => 2013 # event.start.month # => 9 # event.start.day # => 4 # event.start.hour # => 3 # event.start.min # => 0 # event.start.sec # => 0 # event.start.zone # => "EAT" # # String values are parsed using the ISO 8601 datetime format. Partial # time-only formats are also accepted. # # event.start = "06:07:08+09:00" # event.start.utc # => 1999-12-31 21:07:08 UTC # # The degree of sub-second precision can be customized when declaring an # attribute: # # class Event # include ActiveModel::Attributes # # attribute :start, :datetime, precision: 4 # end # # source://activemodel//lib/active_model/type/date_time.rb#42 class ActiveModel::Type::DateTime < ::ActiveModel::Type::Value include ::ActiveModel::Type::Helpers::Timezone include ::ActiveModel::Type::Helpers::AcceptsMultiparameterTime::InstanceMethods include ::ActiveModel::Type::Helpers::TimeValue # source://activemodel//lib/active_model/type/date_time.rb#49 def type; end private # source://activemodel//lib/active_model/type/date_time.rb#54 def cast_value(value); end # source://activemodel//lib/active_model/type/date_time.rb#67 def fallback_string_to_time(string); end # '0.123456' -> 123456 # '1.123456' -> 123456 # # source://activemodel//lib/active_model/type/date_time.rb#63 def microseconds(time); end # source://activemodel//lib/active_model/type/date_time.rb#79 def value_from_multiparameter_assignment(values_hash); end end # = Active Model \Decimal \Type # # Attribute type for decimal, high-precision floating point numeric # representation. It is registered under the +:decimal+ key. # # class BagOfCoffee # include ActiveModel::Attributes # # attribute :weight, :decimal # end # # Numeric instances are converted to BigDecimal instances. Any other objects # are cast using their +to_d+ method, except for blank strings, which are # cast to +nil+. If a +to_d+ method is not defined, the object is converted # to a string using +to_s+, which is then cast using +to_d+. # # bag = BagOfCoffee.new # # bag.weight = 0.01 # bag.weight # => 0.1e-1 # # bag.weight = "0.01" # bag.weight # => 0.1e-1 # # bag.weight = "" # bag.weight # => nil # # bag.weight = :arbitrary # bag.weight # => nil (the result of `.to_s.to_d`) # # Decimal precision defaults to 18, and can be customized when declaring an # attribute: # # class BagOfCoffee # include ActiveModel::Attributes # # attribute :weight, :decimal, precision: 24 # end # # source://activemodel//lib/active_model/type/decimal.rb#45 class ActiveModel::Type::Decimal < ::ActiveModel::Type::Value include ::ActiveModel::Type::Helpers::Numeric # source://activemodel//lib/active_model/type/decimal.rb#49 def type; end # source://activemodel//lib/active_model/type/decimal.rb#53 def type_cast_for_schema(value); end private # source://activemodel//lib/active_model/type/decimal.rb#98 def apply_scale(value); end # source://activemodel//lib/active_model/type/decimal.rb#58 def cast_value(value); end # source://activemodel//lib/active_model/type/decimal.rb#82 def convert_float_to_big_decimal(value); end # source://activemodel//lib/active_model/type/decimal.rb#90 def float_precision; end end # source://activemodel//lib/active_model/type/decimal.rb#47 ActiveModel::Type::Decimal::BIGDECIMAL_PRECISION = T.let(T.unsafe(nil), Integer) # = Active Model \Float \Type # # Attribute type for floating point numeric values. It is registered under # the +:float+ key. # # class BagOfCoffee # include ActiveModel::Attributes # # attribute :weight, :float # end # # Values are cast using their +to_f+ method, except for the following # strings: # # - Blank strings are cast to +nil+. # - "Infinity" is cast to +Float::INFINITY+. # - "-Infinity" is cast to -Float::INFINITY. # - "NaN" is cast to +Float::NAN+. # # bag = BagOfCoffee.new # # bag.weight = "0.25" # bag.weight # => 0.25 # # bag.weight = "" # bag.weight # => nil # # bag.weight = "NaN" # bag.weight # => Float::NAN # # source://activemodel//lib/active_model/type/float.rb#36 class ActiveModel::Type::Float < ::ActiveModel::Type::Value include ::ActiveModel::Type::Helpers::Numeric # source://activemodel//lib/active_model/type/float.rb#39 def type; end # source://activemodel//lib/active_model/type/float.rb#43 def type_cast_for_schema(value); end private # source://activemodel//lib/active_model/type/float.rb#53 def cast_value(value); end end # source://activemodel//lib/active_model/type/helpers/accepts_multiparameter_time.rb#5 module ActiveModel::Type::Helpers; end # source://activemodel//lib/active_model/type/helpers/accepts_multiparameter_time.rb#6 class ActiveModel::Type::Helpers::AcceptsMultiparameterTime < ::Module # @return [AcceptsMultiparameterTime] a new instance of AcceptsMultiparameterTime # # source://activemodel//lib/active_model/type/helpers/accepts_multiparameter_time.rb#37 def initialize(defaults: T.unsafe(nil)); end end # source://activemodel//lib/active_model/type/helpers/accepts_multiparameter_time.rb#7 module ActiveModel::Type::Helpers::AcceptsMultiparameterTime::InstanceMethods # source://activemodel//lib/active_model/type/helpers/accepts_multiparameter_time.rb#24 def assert_valid_value(value); end # source://activemodel//lib/active_model/type/helpers/accepts_multiparameter_time.rb#16 def cast(value); end # source://activemodel//lib/active_model/type/helpers/accepts_multiparameter_time.rb#8 def serialize(value); end # source://activemodel//lib/active_model/type/helpers/accepts_multiparameter_time.rb#12 def serialize_cast_value(value); end # @return [Boolean] # # source://activemodel//lib/active_model/type/helpers/accepts_multiparameter_time.rb#32 def value_constructed_by_mass_assignment?(value); end end # source://activemodel//lib/active_model/type/helpers/mutable.rb#6 module ActiveModel::Type::Helpers::Mutable # source://activemodel//lib/active_model/type/helpers/mutable.rb#7 def cast(value); end # +raw_old_value+ will be the `_before_type_cast` version of the # value (likely a string). +new_value+ will be the current, type # cast value. # # @return [Boolean] # # source://activemodel//lib/active_model/type/helpers/mutable.rb#14 def changed_in_place?(raw_old_value, new_value); end # @return [Boolean] # # source://activemodel//lib/active_model/type/helpers/mutable.rb#18 def mutable?; end end # source://activemodel//lib/active_model/type/helpers/numeric.rb#6 module ActiveModel::Type::Helpers::Numeric # source://activemodel//lib/active_model/type/helpers/numeric.rb#15 def cast(value); end # @return [Boolean] # # source://activemodel//lib/active_model/type/helpers/numeric.rb#31 def changed?(old_value, _new_value, new_value_before_type_cast); end # source://activemodel//lib/active_model/type/helpers/numeric.rb#7 def serialize(value); end # source://activemodel//lib/active_model/type/helpers/numeric.rb#11 def serialize_cast_value(value); end private # @return [Boolean] # # source://activemodel//lib/active_model/type/helpers/numeric.rb#37 def equal_nan?(old_value, new_value); end # @return [Boolean] # # source://activemodel//lib/active_model/type/helpers/numeric.rb#49 def non_numeric_string?(value); end # @return [Boolean] # # source://activemodel//lib/active_model/type/helpers/numeric.rb#44 def number_to_non_number?(old_value, new_value_before_type_cast); end end # source://activemodel//lib/active_model/type/helpers/numeric.rb#56 ActiveModel::Type::Helpers::Numeric::NUMERIC_REGEX = T.let(T.unsafe(nil), Regexp) # source://activemodel//lib/active_model/type/helpers/time_value.rb#9 module ActiveModel::Type::Helpers::TimeValue # source://activemodel//lib/active_model/type/helpers/time_value.rb#24 def apply_seconds_precision(value); end # source://activemodel//lib/active_model/type/helpers/time_value.rb#10 def serialize_cast_value(value); end # source://activemodel//lib/active_model/type/helpers/time_value.rb#38 def type_cast_for_schema(value); end # source://activemodel//lib/active_model/type/helpers/time_value.rb#42 def user_input_in_time_zone(value); end private # BUG: Wrapping the Time object with Time.at because Time.new with `in:` in Ruby 3.2.0 # used to return an invalid Time object # see: https://bugs.ruby-lang.org/issues/19292 # # source://activemodel//lib/active_model/type/helpers/time_value.rb#88 def fast_string_to_time(string); end # source://activemodel//lib/active_model/type/helpers/time_value.rb#47 def new_time(year, mon, mday, hour, min, sec, microsec, offset = T.unsafe(nil)); end end # source://activemodel//lib/active_model/type/helpers/time_value.rb#64 ActiveModel::Type::Helpers::TimeValue::ISO_DATETIME = T.let(T.unsafe(nil), Regexp) # source://activemodel//lib/active_model/type/helpers/timezone.rb#8 module ActiveModel::Type::Helpers::Timezone # source://activemodel//lib/active_model/type/helpers/timezone.rb#17 def default_timezone; end # @return [Boolean] # # source://activemodel//lib/active_model/type/helpers/timezone.rb#9 def is_utc?; end end # = Active Model \ImmutableString \Type # # Attribute type to represent immutable strings. It casts incoming values to # frozen strings. # # class Person # include ActiveModel::Attributes # # attribute :name, :immutable_string # end # # person = Person.new # person.name = 1 # # person.name # => "1" # person.name.frozen? # => true # # Values are coerced to strings using their +to_s+ method. Boolean values # are treated differently, however: +true+ will be cast to "t" and # +false+ will be cast to "f". These strings can be customized when # declaring an attribute: # # class Person # include ActiveModel::Attributes # # attribute :active, :immutable_string, true: "aye", false: "nay" # end # # person = Person.new # person.active = true # # person.active # => "aye" # # source://activemodel//lib/active_model/type/immutable_string.rb#37 class ActiveModel::Type::ImmutableString < ::ActiveModel::Type::Value # @return [ImmutableString] a new instance of ImmutableString # # source://activemodel//lib/active_model/type/immutable_string.rb#38 def initialize(**args); end # source://activemodel//lib/active_model/type/immutable_string.rb#48 def serialize(value); end # source://activemodel//lib/active_model/type/immutable_string.rb#57 def serialize_cast_value(value); end # source://activemodel//lib/active_model/type/immutable_string.rb#44 def type; end private # source://activemodel//lib/active_model/type/immutable_string.rb#62 def cast_value(value); end end # = Active Model \Integer \Type # # Attribute type for integer representation. This type is registered under # the +:integer+ key. # # class Person # include ActiveModel::Attributes # # attribute :age, :integer # end # # Values are cast using their +to_i+ method, except for blank strings, which # are cast to +nil+. If a +to_i+ method is not defined or raises an error, # the value will be cast to +nil+. # # person = Person.new # # person.age = "18" # person.age # => 18 # # person.age = "" # person.age # => nil # # person.age = :not_an_integer # person.age # => nil (because Symbol does not define #to_i) # # Serialization also works under the same principle. Non-numeric strings are # serialized as +nil+, for example. # # Serialization also validates that the integer can be stored using a # limited number of bytes. If it cannot, an ActiveModel::RangeError will be # raised. The default limit is 4 bytes, and can be customized when declaring # an attribute: # # class Person # include ActiveModel::Attributes # # attribute :age, :integer, limit: 6 # end # # source://activemodel//lib/active_model/type/integer.rb#44 class ActiveModel::Type::Integer < ::ActiveModel::Type::Value include ::ActiveModel::Type::Helpers::Numeric # @return [Integer] a new instance of Integer # # source://activemodel//lib/active_model/type/integer.rb#51 def initialize(**_arg0); end # source://activemodel//lib/active_model/type/integer.rb#60 def deserialize(value); end # @return [Boolean] # # source://activemodel//lib/active_model/type/integer.rb#74 def serializable?(value); end # source://activemodel//lib/active_model/type/integer.rb#65 def serialize(value); end # source://activemodel//lib/active_model/type/integer.rb#70 def serialize_cast_value(value); end # source://activemodel//lib/active_model/type/integer.rb#56 def type; end private # source://activemodel//lib/active_model/type/integer.rb#108 def _limit; end # source://activemodel//lib/active_model/type/integer.rb#89 def cast_value(value); end # source://activemodel//lib/active_model/type/integer.rb#93 def ensure_in_range(value); end # @return [Boolean] # # source://activemodel//lib/active_model/type/integer.rb#85 def in_range?(value); end # source://activemodel//lib/active_model/type/integer.rb#100 def max_value; end # source://activemodel//lib/active_model/type/integer.rb#104 def min_value; end # Returns the value of attribute range. # # source://activemodel//lib/active_model/type/integer.rb#83 def range; end end # Column storage size in bytes. # 4 bytes means an integer as opposed to smallint etc. # # source://activemodel//lib/active_model/type/integer.rb#49 ActiveModel::Type::Integer::DEFAULT_LIMIT = T.let(T.unsafe(nil), Integer) # source://activemodel//lib/active_model/type/registry.rb#5 class ActiveModel::Type::Registry # @return [Registry] a new instance of Registry # # source://activemodel//lib/active_model/type/registry.rb#6 def initialize; end # source://activemodel//lib/active_model/type/registry.rb#23 def lookup(symbol, *_arg1, **_arg2, &_arg3); end # source://activemodel//lib/active_model/type/registry.rb#15 def register(type_name, klass = T.unsafe(nil), &block); end private # source://activemodel//lib/active_model/type/registry.rb#10 def initialize_copy(other); end # Returns the value of attribute registrations. # # source://activemodel//lib/active_model/type/registry.rb#34 def registrations; end end # source://activemodel//lib/active_model/type/serialize_cast_value.rb#5 module ActiveModel::Type::SerializeCastValue extend ::ActiveSupport::Concern include ::ActiveModel::Type::SerializeCastValue::DefaultImplementation mixes_in_class_methods ::ActiveModel::Type::SerializeCastValue::ClassMethods # source://activemodel//lib/active_model/type/serialize_cast_value.rb#41 def initialize(*_arg0, **_arg1, &_arg2); end # source://activemodel//lib/active_model/type/serialize_cast_value.rb#37 def itself_if_serialize_cast_value_compatible; end class << self # @private # # source://activemodel//lib/active_model/type/serialize_cast_value.rb#21 def included(klass); end # source://activemodel//lib/active_model/type/serialize_cast_value.rb#25 def serialize(type, value); end end end # source://activemodel//lib/active_model/type/serialize_cast_value.rb#8 module ActiveModel::Type::SerializeCastValue::ClassMethods # @return [Boolean] # # source://activemodel//lib/active_model/type/serialize_cast_value.rb#9 def serialize_cast_value_compatible?; end end # source://activemodel//lib/active_model/type/serialize_cast_value.rb#15 module ActiveModel::Type::SerializeCastValue::DefaultImplementation # source://activemodel//lib/active_model/type/serialize_cast_value.rb#16 def serialize_cast_value(value); end end # = Active Model \String \Type # # Attribute type for strings. It is registered under the +:string+ key. # # This class is a specialization of ActiveModel::Type::ImmutableString. It # performs coercion in the same way, and can be configured in the same way. # However, it accounts for mutable strings, so dirty tracking can properly # check if a string has changed. # # source://activemodel//lib/active_model/type/string.rb#15 class ActiveModel::Type::String < ::ActiveModel::Type::ImmutableString # @return [Boolean] # # source://activemodel//lib/active_model/type/string.rb#16 def changed_in_place?(raw_old_value, new_value); end # source://activemodel//lib/active_model/type/string.rb#22 def to_immutable_string; end private # source://activemodel//lib/active_model/type/string.rb#33 def cast_value(value); end end # = Active Model \Time \Type # # Attribute type for time of day representation. It is registered under the # +:time+ key. # # class Event # include ActiveModel::Attributes # # attribute :start, :time # end # # String values are parsed using the ISO 8601 datetime format, but are # normalized to have a date of 2000-01-01 and be in the UTC time zone. # # event = Event.new # event.start = "2004-10-25T01:23:45-06:00" # # event.start.class # => Time # event.start # => 2000-01-01 07:23:45 UTC # # Partial time-only formats are also accepted. # # event.start = "00:01:02+03:00" # event.start # => 1999-12-31 21:01:02 UTC # # The degree of sub-second precision can be customized when declaring an # attribute: # # class Event # include ActiveModel::Attributes # # attribute :start, :time, precision: 4 # end # # source://activemodel//lib/active_model/type/time.rb#38 class ActiveModel::Type::Time < ::ActiveModel::Type::Value include ::ActiveModel::Type::Helpers::Timezone include ::ActiveModel::Type::Helpers::AcceptsMultiparameterTime::InstanceMethods include ::ActiveModel::Type::Helpers::TimeValue # source://activemodel//lib/active_model/type/time.rb#45 def type; end # source://activemodel//lib/active_model/type/time.rb#49 def user_input_in_time_zone(value); end private # source://activemodel//lib/active_model/type/time.rb#69 def cast_value(value); end end # = Active Model \Value \Type # # The base class for all attribute types. This class also serves as the # default type for attributes that do not specify a type. # # source://activemodel//lib/active_model/type/value.rb#9 class ActiveModel::Type::Value include ::ActiveModel::Type::SerializeCastValue include ::ActiveModel::Type::SerializeCastValue::DefaultImplementation extend ::ActiveModel::Type::SerializeCastValue::ClassMethods # Initializes a type with three basic configuration settings: precision, # limit, and scale. The Value base class does not define behavior for # these settings. It uses them for equality comparison and hash key # generation only. # # @return [Value] a new instance of Value # # source://activemodel//lib/active_model/type/value.rb#17 def initialize(precision: T.unsafe(nil), limit: T.unsafe(nil), scale: T.unsafe(nil)); end # source://activemodel//lib/active_model/type/value.rb#121 def ==(other); end # @raise [NoMethodError] # # source://activemodel//lib/active_model/type/value.rb#144 def as_json(*_arg0); end # source://activemodel//lib/active_model/type/value.rb#133 def assert_valid_value(_); end # These predicates are not documented, as I need to look further into # their use, and see if they can be removed entirely. # # @return [Boolean] # # source://activemodel//lib/active_model/type/value.rb#77 def binary?; end # Type casts a value from user input (e.g. from a setter). This value may # be a string from the form builder, or a ruby object passed to a setter. # There is currently no way to differentiate between which source it came # from. # # The return value of this method will be returned from # ActiveRecord::AttributeMethods::Read#read_attribute. See also: # Value#cast_value. # # +value+ The raw input, as provided to the attribute setter. # # source://activemodel//lib/active_model/type/value.rb#57 def cast(value); end # Determines whether a value has changed for dirty checking. +old_value+ # and +new_value+ will always be type-cast. Types should not need to # override this method. # # @return [Boolean] # # source://activemodel//lib/active_model/type/value.rb#84 def changed?(old_value, new_value, _new_value_before_type_cast); end # Determines whether the mutable value has been modified since it was # read. Returns +false+ by default. If your type returns an object # which could be mutated, you should override this method. You will need # to either: # # - pass +new_value+ to Value#serialize and compare it to # +raw_old_value+ # # or # # - pass +raw_old_value+ to Value#deserialize and compare it to # +new_value+ # # +raw_old_value+ The original value, before being passed to # +deserialize+. # # +new_value+ The current value, after type casting. # # @return [Boolean] # # source://activemodel//lib/active_model/type/value.rb#105 def changed_in_place?(raw_old_value, new_value); end # Converts a value from database input to the appropriate ruby type. The # return value of this method will be returned from # ActiveRecord::AttributeMethods::Read#read_attribute. The default # implementation just calls Value#cast. # # +value+ The raw input, as provided from the database. # # source://activemodel//lib/active_model/type/value.rb#43 def deserialize(value); end # source://activemodel//lib/active_model/type/value.rb#121 def eql?(other); end # @return [Boolean] # # source://activemodel//lib/active_model/type/value.rb#113 def force_equality?(_value); end # source://activemodel//lib/active_model/type/value.rb#129 def hash; end # Returns the value of attribute limit. # # source://activemodel//lib/active_model/type/value.rb#11 def limit; end # source://activemodel//lib/active_model/type/value.rb#117 def map(value, &_arg1); end # @return [Boolean] # # source://activemodel//lib/active_model/type/value.rb#140 def mutable?; end # Returns the value of attribute precision. # # source://activemodel//lib/active_model/type/value.rb#11 def precision; end # Returns the value of attribute scale. # # source://activemodel//lib/active_model/type/value.rb#11 def scale; end # Returns true if this type can convert +value+ to a type that is usable # by the database. For example a boolean type can return +true+ if the # value parameter is a Ruby boolean, but may return +false+ if the value # parameter is some other object. # # @return [Boolean] # # source://activemodel//lib/active_model/type/value.rb#28 def serializable?(value); end # Casts a value from the ruby type to a type that the database knows how # to understand. The returned value from this method should be a # +String+, +Numeric+, +Date+, +Time+, +Symbol+, +true+, +false+, or # +nil+. # # source://activemodel//lib/active_model/type/value.rb#65 def serialize(value); end # @return [Boolean] # # source://activemodel//lib/active_model/type/value.rb#136 def serialized?; end # Returns the unique type name as a Symbol. Subclasses should override # this method. # # source://activemodel//lib/active_model/type/value.rb#34 def type; end # Type casts a value for schema dumping. This method is private, as we are # hoping to remove it entirely. # # source://activemodel//lib/active_model/type/value.rb#71 def type_cast_for_schema(value); end # @return [Boolean] # # source://activemodel//lib/active_model/type/value.rb#109 def value_constructed_by_mass_assignment?(_value); end private # Convenience method for types which do not need separate type casting # behavior for user and database inputs. Called by Value#cast for # values except +nil+. # # source://activemodel//lib/active_model/type/value.rb#152 def cast_value(value); end end # = Active \Model \UnknownAttributeError # # Raised when unknown attributes are supplied via mass assignment. # # class Person # include ActiveModel::AttributeAssignment # include ActiveModel::Validations # end # # person = Person.new # person.assign_attributes(name: 'Gorby') # # => ActiveModel::UnknownAttributeError: unknown attribute 'name' for Person. # # source://activemodel//lib/active_model/errors.rb#538 class ActiveModel::UnknownAttributeError < ::NoMethodError # @return [UnknownAttributeError] a new instance of UnknownAttributeError # # source://activemodel//lib/active_model/errors.rb#541 def initialize(record, attribute); end # Returns the value of attribute attribute. # # source://activemodel//lib/active_model/errors.rb#539 def attribute; end # Returns the value of attribute record. # # source://activemodel//lib/active_model/errors.rb#539 def record; end end # source://activemodel//lib/active_model/gem_version.rb#9 module ActiveModel::VERSION; end # source://activemodel//lib/active_model/gem_version.rb#10 ActiveModel::VERSION::MAJOR = T.let(T.unsafe(nil), Integer) # source://activemodel//lib/active_model/gem_version.rb#11 ActiveModel::VERSION::MINOR = T.let(T.unsafe(nil), Integer) # source://activemodel//lib/active_model/gem_version.rb#13 ActiveModel::VERSION::PRE = T.let(T.unsafe(nil), T.untyped) # source://activemodel//lib/active_model/gem_version.rb#15 ActiveModel::VERSION::STRING = T.let(T.unsafe(nil), String) # source://activemodel//lib/active_model/gem_version.rb#12 ActiveModel::VERSION::TINY = T.let(T.unsafe(nil), Integer) # source://activemodel//lib/active_model/validations.rb#503 class ActiveModel::ValidationContext # Returns the value of attribute context. # # source://activemodel//lib/active_model/validations.rb#504 def context; end # Sets the attribute context # # @param value the value to set the attribute context to. # # source://activemodel//lib/active_model/validations.rb#504 def context=(_arg0); end end # = Active \Model \ValidationError # # Raised by validate! when the model is invalid. Use the # +model+ method to retrieve the record which did not validate. # # begin # complex_operation_that_internally_calls_validate! # rescue ActiveModel::ValidationError => invalid # puts invalid.model.errors # end # # source://activemodel//lib/active_model/validations.rb#493 class ActiveModel::ValidationError < ::StandardError # @return [ValidationError] a new instance of ValidationError # # source://activemodel//lib/active_model/validations.rb#496 def initialize(model); end # Returns the value of attribute model. # # source://activemodel//lib/active_model/validations.rb#494 def model; end end # = Active \Model \Validations # # Provides a full validation framework to your objects. # # A minimal implementation could be: # # class Person # include ActiveModel::Validations # # attr_accessor :first_name, :last_name # # validates_each :first_name, :last_name do |record, attr, value| # record.errors.add attr, "starts with z." if value.start_with?("z") # end # end # # Which provides you with the full standard validation stack that you # know from Active Record: # # person = Person.new # person.valid? # => true # person.invalid? # => false # # person.first_name = 'zoolander' # person.valid? # => false # person.invalid? # => true # person.errors.messages # => {first_name:["starts with z."]} # # Note that +ActiveModel::Validations+ automatically adds an +errors+ # method to your instances initialized with a new ActiveModel::Errors # object, so there is no need for you to do this manually. # # source://activemodel//lib/active_model/validations.rb#37 module ActiveModel::Validations extend ::ActiveSupport::Concern include GeneratedInstanceMethods include ::ActiveSupport::Callbacks include ::ActiveModel::Validations::HelperMethods mixes_in_class_methods GeneratedClassMethods mixes_in_class_methods ::ActiveModel::Validations::ClassMethods mixes_in_class_methods ::ActiveModel::Callbacks mixes_in_class_methods ::ActiveSupport::Callbacks::ClassMethods mixes_in_class_methods ::ActiveSupport::DescendantsTracker mixes_in_class_methods ::ActiveModel::Translation mixes_in_class_methods ::ActiveModel::Validations::HelperMethods # Returns the +Errors+ object that holds all information about attribute # error messages. # # class Person # include ActiveModel::Validations # # attr_accessor :name # validates_presence_of :name # end # # person = Person.new # person.valid? # => false # person.errors # => # # # source://activemodel//lib/active_model/validations.rb#328 def errors; end # source://activemodel//lib/active_model/validations.rb#372 def freeze; end # Performs the opposite of valid?. Returns +true+ if errors were # added, +false+ otherwise. # # class Person # include ActiveModel::Validations # # attr_accessor :name # validates_presence_of :name # end # # person = Person.new # person.name = '' # person.invalid? # => true # person.name = 'david' # person.invalid? # => false # # Context can optionally be supplied to define which callbacks to test # against (the context is defined on the validations using :on). # # class Person # include ActiveModel::Validations # # attr_accessor :name # validates_presence_of :name, on: :new # end # # person = Person.new # person.invalid? # => false # person.invalid?(:new) # => true # # @return [Boolean] # # source://activemodel//lib/active_model/validations.rb#408 def invalid?(context = T.unsafe(nil)); end # Hook method defining how an attribute value should be retrieved. By default # this is assumed to be an instance named after the attribute. Override this # method in subclasses should you need to retrieve the value for a given # attribute differently: # # class MyClass # include ActiveModel::Validations # # def initialize(data = {}) # @data = data # end # # def read_attribute_for_validation(key) # @data[key] # end # end def read_attribute_for_validation(*_arg0); end # Runs all the specified validations and returns +true+ if no errors were # added otherwise +false+. # # class Person # include ActiveModel::Validations # # attr_accessor :name # validates_presence_of :name # end # # person = Person.new # person.name = '' # person.valid? # => false # person.name = 'david' # person.valid? # => true # # Context can optionally be supplied to define which callbacks to test # against (the context is defined on the validations using :on). # # class Person # include ActiveModel::Validations # # attr_accessor :name # validates_presence_of :name, on: :new # end # # person = Person.new # person.valid? # => true # person.valid?(:new) # => false # # @return [Boolean] # # source://activemodel//lib/active_model/validations.rb#361 def valid?(context = T.unsafe(nil)); end # Runs all the specified validations and returns +true+ if no errors were # added otherwise +false+. # # class Person # include ActiveModel::Validations # # attr_accessor :name # validates_presence_of :name # end # # person = Person.new # person.name = '' # person.valid? # => false # person.name = 'david' # person.valid? # => true # # Context can optionally be supplied to define which callbacks to test # against (the context is defined on the validations using :on). # # class Person # include ActiveModel::Validations # # attr_accessor :name # validates_presence_of :name, on: :new # end # # person = Person.new # person.valid? # => true # person.valid?(:new) # => false # # @return [Boolean] # # source://activemodel//lib/active_model/validations.rb#361 def validate(context = T.unsafe(nil)); end # Runs all the validations within the specified context. Returns +true+ if # no errors are found, raises +ValidationError+ otherwise. # # Validations with no :on option will run no matter the context. Validations with # some :on option will only run in the specified context. # # source://activemodel//lib/active_model/validations.rb#417 def validate!(context = T.unsafe(nil)); end # Passes the record off to the class or classes specified and allows them # to add errors based on more complex conditions. # # class Person # include ActiveModel::Validations # # validate :instance_validations # # def instance_validations # validates_with MyValidator # end # end # # Please consult the class method documentation for more information on # creating your own validator. # # You may also pass it multiple classes, like so: # # class Person # include ActiveModel::Validations # # validate :instance_validations, on: :create # # def instance_validations # validates_with MyValidator, MyOtherValidator # end # end # # Standard configuration options (:on, :if and # :unless), which are available on the class version of # +validates_with+, should instead be placed on the +validates+ method # as these are applied and tested in the callback. # # If you pass any additional configuration options, they will be passed # to the class and available as +options+, please refer to the # class version of this method for more information. # # source://activemodel//lib/active_model/validations/with.rb#144 def validates_with(*args, &block); end # Returns the context when running validations. # # This is useful when running validations except a certain context (opposite to the +on+ option). # # class Person # include ActiveModel::Validations # # attr_accessor :name # validates :name, presence: true, if: -> { validation_context != :custom } # end # # person = Person.new # person.valid? #=> false # person.valid?(:new) #=> false # person.valid?(:custom) #=> true # # source://activemodel//lib/active_model/validations.rb#454 def validation_context; end private # source://activemodel//lib/active_model/validations.rb#463 def context_for_validation; end # source://activemodel//lib/active_model/validations.rb#467 def init_internals; end # Clean the +Errors+ object if instance is duped. # # source://activemodel//lib/active_model/validations.rb#310 def initialize_dup(other); end # @raise [ValidationError] # # source://activemodel//lib/active_model/validations.rb#478 def raise_validation_error; end # source://activemodel//lib/active_model/validations.rb#473 def run_validations!; end # source://activemodel//lib/active_model/validations.rb#459 def validation_context=(context); end module GeneratedClassMethods def __callbacks; end def __callbacks=(value); end def _validators; end def _validators=(value); end def _validators?; end end module GeneratedInstanceMethods def __callbacks; end def _validators; end def _validators?; end end end # == \Active \Model Absence Validator # # source://activemodel//lib/active_model/validations/absence.rb#6 class ActiveModel::Validations::AbsenceValidator < ::ActiveModel::EachValidator # source://activemodel//lib/active_model/validations/absence.rb#7 def validate_each(record, attr_name, value); end end # source://activemodel//lib/active_model/validations/acceptance.rb#5 class ActiveModel::Validations::AcceptanceValidator < ::ActiveModel::EachValidator # @return [AcceptanceValidator] a new instance of AcceptanceValidator # # source://activemodel//lib/active_model/validations/acceptance.rb#6 def initialize(options); end # source://activemodel//lib/active_model/validations/acceptance.rb#11 def validate_each(record, attribute, value); end private # @return [Boolean] # # source://activemodel//lib/active_model/validations/acceptance.rb#23 def acceptable_option?(value); end # source://activemodel//lib/active_model/validations/acceptance.rb#18 def setup!(klass); end end # source://activemodel//lib/active_model/validations/acceptance.rb#27 class ActiveModel::Validations::AcceptanceValidator::LazilyDefineAttributes < ::Module # @return [LazilyDefineAttributes] a new instance of LazilyDefineAttributes # # source://activemodel//lib/active_model/validations/acceptance.rb#28 def initialize(attributes); end # source://activemodel//lib/active_model/validations/acceptance.rb#73 def ==(other); end # source://activemodel//lib/active_model/validations/acceptance.rb#56 def define_on(klass); end # source://activemodel//lib/active_model/validations/acceptance.rb#32 def included(klass); end # @return [Boolean] # # source://activemodel//lib/active_model/validations/acceptance.rb#51 def matches?(method_name); end protected # Returns the value of attribute attributes. # # source://activemodel//lib/active_model/validations/acceptance.rb#78 def attributes; end end # = Active \Model \Validation \Callbacks # # Provides an interface for any class to have ClassMethods#before_validation and # ClassMethods#after_validation callbacks. # # First, include +ActiveModel::Validations::Callbacks+ from the class you are # creating: # # class MyModel # include ActiveModel::Validations::Callbacks # # before_validation :do_stuff_before_validation # after_validation :do_stuff_after_validation # end # # Like other before_* callbacks if +before_validation+ throws # +:abort+ then valid? will not be called. # # source://activemodel//lib/active_model/validations/callbacks.rb#22 module ActiveModel::Validations::Callbacks extend ::ActiveSupport::Concern include GeneratedInstanceMethods include ::ActiveSupport::Callbacks mixes_in_class_methods GeneratedClassMethods mixes_in_class_methods ::ActiveModel::Validations::Callbacks::ClassMethods mixes_in_class_methods ::ActiveSupport::Callbacks::ClassMethods mixes_in_class_methods ::ActiveSupport::DescendantsTracker private # Override run_validations! to include callbacks. # # source://activemodel//lib/active_model/validations/callbacks.rb#114 def run_validations!; end module GeneratedClassMethods def __callbacks; end def __callbacks=(value); end end module GeneratedInstanceMethods def __callbacks; end end end # source://activemodel//lib/active_model/validations/callbacks.rb#32 module ActiveModel::Validations::Callbacks::ClassMethods # Defines a callback that will get called right after validation. # # class Person # include ActiveModel::Validations # include ActiveModel::Validations::Callbacks # # attr_accessor :name, :status # # validates_presence_of :name # # after_validation :set_status # # private # def set_status # self.status = errors.empty? # end # end # # person = Person.new # person.name = '' # person.valid? # => false # person.status # => false # person.name = 'bob' # person.valid? # => true # person.status # => true # # source://activemodel//lib/active_model/validations/callbacks.rb#88 def after_validation(*args, &block); end # Defines a callback that will get called right before validation. # # class Person # include ActiveModel::Validations # include ActiveModel::Validations::Callbacks # # attr_accessor :name # # validates_length_of :name, maximum: 6 # # before_validation :remove_whitespaces # # private # def remove_whitespaces # name.strip! # end # end # # person = Person.new # person.name = ' bob ' # person.valid? # => true # person.name # => "bob" # # source://activemodel//lib/active_model/validations/callbacks.rb#55 def before_validation(*args, &block); end private # source://activemodel//lib/active_model/validations/callbacks.rb#99 def set_options_for_callback(options); end end # source://activemodel//lib/active_model/validations.rb#53 module ActiveModel::Validations::ClassMethods # Returns +true+ if +attribute+ is an attribute method, +false+ otherwise. # # class Person # include ActiveModel::Validations # # attr_accessor :name # end # # User.attribute_method?(:name) # => true # User.attribute_method?(:age) # => false # # @return [Boolean] # # source://activemodel//lib/active_model/validations.rb#282 def attribute_method?(attribute); end # Clears all of the validators and validations. # # Note that this will clear anything that is being used to validate # the model for both the +validates_with+ and +validate+ methods. # It clears the validators that are created with an invocation of # +validates_with+ and the callbacks that are set by an invocation # of +validate+. # # class Person # include ActiveModel::Validations # # validates_with MyValidator # validates_with OtherValidator, on: :create # validates_with StrictValidator, strict: true # validate :cannot_be_robot # # def cannot_be_robot # errors.add(:base, 'A person cannot be a robot') if person_is_robot # end # end # # Person.validators # # => [ # # #, # # #, # # # # # ] # # If one runs Person.clear_validators! and then checks to see what # validators this class has, you would obtain: # # Person.validators # => [] # # Also, the callback set by validate :cannot_be_robot will be erased # so that: # # Person._validate_callbacks.empty? # => true # # source://activemodel//lib/active_model/validations.rb#246 def clear_validators!; end # Copy validators on inheritance. # # source://activemodel//lib/active_model/validations.rb#287 def inherited(base); end # Adds a validation method or block to the class. This is useful when # overriding the +validate+ instance method becomes too unwieldy and # you're looking for more descriptive declaration of your validations. # # This can be done with a symbol pointing to a method: # # class Comment # include ActiveModel::Validations # # validate :must_be_friends # # def must_be_friends # errors.add(:base, 'Must be friends to leave a comment') unless commenter.friend_of?(commentee) # end # end # # With a block which is passed with the current record to be validated: # # class Comment # include ActiveModel::Validations # # validate do |comment| # comment.must_be_friends # end # # def must_be_friends # errors.add(:base, 'Must be friends to leave a comment') unless commenter.friend_of?(commentee) # end # end # # Or with a block where +self+ points to the current record to be validated: # # class Comment # include ActiveModel::Validations # # validate do # errors.add(:base, 'Must be friends to leave a comment') unless commenter.friend_of?(commentee) # end # end # # Note that the return value of validation methods is not relevant. # It's not possible to halt the validate callback chain. # # Options: # * :on - Specifies the contexts where this validation is active. # Runs in all validation contexts by default +nil+. You can pass a symbol # or an array of symbols. (e.g. on: :create or # on: :custom_validation_context or # on: [:create, :custom_validation_context]) # * :except_on - Specifies the contexts where this validation is not active. # Runs in all validation contexts by default +nil+. You can pass a symbol # or an array of symbols. (e.g. except: :create or # except_on: :custom_validation_context or # except_on: [:create, :custom_validation_context]) # * :if - Specifies a method, proc or string to call to determine # if the validation should occur (e.g. if: :allow_validation, # or if: Proc.new { |user| user.signup_step > 2 }). The method, # proc or string should return or evaluate to a +true+ or +false+ value. # * :unless - Specifies a method, proc, or string to call to # determine if the validation should not occur (e.g. unless: :skip_validation, # or unless: Proc.new { |user| user.signup_step <= 2 }). The # method, proc, or string should return or evaluate to a +true+ or +false+ # value. # # NOTE: Calling +validate+ multiple times on the same method will overwrite previous definitions. # # source://activemodel//lib/active_model/validations.rb#160 def validate(*args, &block); end # This method is a shortcut to all default validators and any custom # validator classes ending in 'Validator'. Note that \Rails default # validators can be overridden inside specific classes by creating # custom validator classes in their place such as PresenceValidator. # # Examples of using the default Rails validators: # # validates :username, absence: true # validates :terms, acceptance: true # validates :password, confirmation: true # validates :username, exclusion: { in: %w(admin superuser) } # validates :email, format: { with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i, on: :create } # validates :age, inclusion: { in: 0..9 } # validates :first_name, length: { maximum: 30 } # validates :age, numericality: true # validates :username, presence: true # # The power of the +validates+ method comes when using custom validators # and default validators in one call for a given attribute. # # class EmailValidator < ActiveModel::EachValidator # def validate_each(record, attribute, value) # record.errors.add attribute, (options[:message] || "is not an email") unless # /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i.match?(value) # end # end # # class Person # include ActiveModel::Validations # attr_accessor :name, :email # # validates :name, presence: true, length: { maximum: 100 } # validates :email, presence: true, email: true # end # # Validator classes may also exist within the class being validated # allowing custom modules of validators to be included as needed. # # class Film # include ActiveModel::Validations # # class TitleValidator < ActiveModel::EachValidator # def validate_each(record, attribute, value) # record.errors.add attribute, "must start with 'the'" unless /\Athe/i.match?(value) # end # end # # validates :name, title: true # end # # Additionally validator classes may be in another namespace and still # used within any class. # # validates :name, :'film/title' => true # # The validators hash can also handle regular expressions, ranges, arrays # and strings in shortcut form. # # validates :email, format: /@/ # validates :role, inclusion: %w(admin contributor) # validates :password, length: 6..20 # # When using shortcut form, ranges and arrays are passed to your # validator's initializer as options[:in] while other types # including regular expressions and strings are passed as options[:with]. # # There is also a list of options that could be used along with validators: # # * :on - Specifies the contexts where this validation is active. # Runs in all validation contexts by default +nil+. You can pass a symbol # or an array of symbols. (e.g. on: :create or # on: :custom_validation_context or # on: [:create, :custom_validation_context]) # * :except_on - Specifies the contexts where this validation is not active. # Runs in all validation contexts by default +nil+. You can pass a symbol # or an array of symbols. (e.g. except: :create or # except_on: :custom_validation_context or # except_on: [:create, :custom_validation_context]) # * :if - Specifies a method, proc or string to call to determine # if the validation should occur (e.g. if: :allow_validation, # or if: Proc.new { |user| user.signup_step > 2 }). The method, # proc or string should return or evaluate to a +true+ or +false+ value. # * :unless - Specifies a method, proc, or string to call to determine # if the validation should not occur (e.g. unless: :skip_validation, # or unless: Proc.new { |user| user.signup_step <= 2 }). The # method, proc, or string should return or evaluate to a +true+ or # +false+ value. # * :allow_nil - Skip validation if the attribute is +nil+. # * :allow_blank - Skip validation if the attribute is blank. # * :strict - If the :strict option is set to true # will raise ActiveModel::StrictValidationFailed instead of adding the error. # :strict option can also be set to any other exception. # # Example: # # validates :password, presence: true, confirmation: true, if: :password_required? # validates :token, length: { is: 24 }, strict: TokenLengthException # # # Finally, the options +:if+, +:unless+, +:on+, +:allow_blank+, +:allow_nil+, +:strict+ # and +:message+ can be given to one specific validator, as a hash: # # validates :password, presence: { if: :password_required?, message: 'is forgotten.' }, confirmation: true # # @raise [ArgumentError] # # source://activemodel//lib/active_model/validations/validates.rb#111 def validates(*attributes); end # This method is used to define validations that cannot be corrected by end # users and are considered exceptional. So each validator defined with bang # or :strict option set to true will always raise # ActiveModel::StrictValidationFailed instead of adding error # when validation fails. See validates for more information about # the validation itself. # # class Person # include ActiveModel::Validations # # attr_accessor :name # validates! :name, presence: true # end # # person = Person.new # person.name = '' # person.valid? # # => ActiveModel::StrictValidationFailed: Name can't be blank # # source://activemodel//lib/active_model/validations/validates.rb#153 def validates!(*attributes); end # Validates each attribute against a block. # # class Person # include ActiveModel::Validations # # attr_accessor :first_name, :last_name # # validates_each :first_name, :last_name, allow_blank: true do |record, attr, value| # record.errors.add attr, "starts with z." if value.start_with?("z") # end # end # # Options: # * :on - Specifies the contexts where this validation is active. # Runs in all validation contexts by default +nil+. You can pass a symbol # or an array of symbols. (e.g. on: :create or # on: :custom_validation_context or # on: [:create, :custom_validation_context]) # * :except_on - Specifies the contexts where this validation is not active. # Runs in all validation contexts by default +nil+. You can pass a symbol # or an array of symbols. (e.g. except: :create or # except_on: :custom_validation_context or # except_on: [:create, :custom_validation_context]) # * :allow_nil - Skip validation if attribute is +nil+. # * :allow_blank - Skip validation if attribute is blank. # * :if - Specifies a method, proc, or string to call to determine # if the validation should occur (e.g. if: :allow_validation, # or if: Proc.new { |user| user.signup_step > 2 }). The method, # proc or string should return or evaluate to a +true+ or +false+ value. # * :unless - Specifies a method, proc, or string to call to # determine if the validation should not occur (e.g. unless: :skip_validation, # or unless: Proc.new { |user| user.signup_step <= 2 }). The # method, proc, or string should return or evaluate to a +true+ or +false+ # value. # # source://activemodel//lib/active_model/validations.rb#88 def validates_each(*attr_names, &block); end # Passes the record off to the class or classes specified and allows them # to add errors based on more complex conditions. # # class Person # include ActiveModel::Validations # validates_with MyValidator # end # # class MyValidator < ActiveModel::Validator # def validate(record) # if some_complex_logic # record.errors.add :base, 'This record is invalid' # end # end # # private # def some_complex_logic # # ... # end # end # # You may also pass it multiple classes, like so: # # class Person # include ActiveModel::Validations # validates_with MyValidator, MyOtherValidator, on: :create # end # # There is no default error message for +validates_with+. You must # manually add errors to the record's errors collection in the validator # class. # # To implement the validate method, you must have a +record+ parameter # defined, which is the record to be validated. # # Configuration options: # * :on - Specifies the contexts where this validation is active. # Runs in all validation contexts by default +nil+. You can pass a symbol # or an array of symbols. (e.g. on: :create or # on: :custom_validation_context or # on: [:create, :custom_validation_context]) # * :if - Specifies a method, proc, or string to call to determine # if the validation should occur (e.g. if: :allow_validation, # or if: Proc.new { |user| user.signup_step > 2 }). # The method, proc, or string should return or evaluate to a +true+ or # +false+ value. # * :unless - Specifies a method, proc, or string to call to # determine if the validation should not occur # (e.g. unless: :skip_validation, or # unless: Proc.new { |user| user.signup_step <= 2 }). # The method, proc, or string should return or evaluate to a +true+ or # +false+ value. # * :strict - Specifies whether validation should be strict. # See ActiveModel::Validations#validates! for more information. # # If you pass any additional configuration options, they will be passed # to the class and available as +options+: # # class Person # include ActiveModel::Validations # validates_with MyValidator, my_custom_key: 'my custom value' # end # # class MyValidator < ActiveModel::Validator # def validate(record) # options[:my_custom_key] # => "my custom value" # end # end # # source://activemodel//lib/active_model/validations/with.rb#88 def validates_with(*args, &block); end # List all validators that are being used to validate the model using # +validates_with+ method. # # class Person # include ActiveModel::Validations # # validates_with MyValidator # validates_with OtherValidator, on: :create # validates_with StrictValidator, strict: true # end # # Person.validators # # => [ # # #, # # #, # # # # # ] # # source://activemodel//lib/active_model/validations.rb#204 def validators; end # List all validators that are being used to validate a specific attribute. # # class Person # include ActiveModel::Validations # # attr_accessor :name, :age # # validates_presence_of :name # validates_inclusion_of :age, in: 0..99 # end # # Person.validators_on(:name) # # => [ # # #, # # ] # # source://activemodel//lib/active_model/validations.rb#266 def validators_on(*attributes); end private # source://activemodel//lib/active_model/validations/validates.rb#166 def _parse_validates_options(options); end # When creating custom validators, it might be useful to be able to specify # additional default keys. This can be done by overwriting this method. # # source://activemodel//lib/active_model/validations/validates.rb#162 def _validates_default_keys; end # source://activemodel//lib/active_model/validations.rb#296 def predicate_for_validation_context(context); end end # source://activemodel//lib/active_model/validations.rb#92 ActiveModel::Validations::ClassMethods::VALID_OPTIONS_FOR_VALIDATE = T.let(T.unsafe(nil), Array) # source://activemodel//lib/active_model/validations/clusivity.rb#8 module ActiveModel::Validations::Clusivity include ::ActiveModel::Validations::ResolveValue # source://activemodel//lib/active_model/validations/clusivity.rb#14 def check_validity!; end private # source://activemodel//lib/active_model/validations/clusivity.rb#31 def delimiter; end # @return [Boolean] # # source://activemodel//lib/active_model/validations/clusivity.rb#21 def include?(record, value); end # After Ruby 2.2, Range#include? on non-number-or-time-ish ranges checks all # possible values in the range for equality, which is slower but more accurate. # Range#cover? uses the previous logic of comparing a value with the range # endpoints, which is fast but is only accurate on Numeric, Time, Date, # or DateTime ranges. # # source://activemodel//lib/active_model/validations/clusivity.rb#40 def inclusion_method(enumerable); end end # source://activemodel//lib/active_model/validations/clusivity.rb#11 ActiveModel::Validations::Clusivity::ERROR_MESSAGE = T.let(T.unsafe(nil), String) # source://activemodel//lib/active_model/validations/comparability.rb#5 module ActiveModel::Validations::Comparability # source://activemodel//lib/active_model/validations/comparability.rb#10 def error_options(value, option_value); end end # source://activemodel//lib/active_model/validations/comparability.rb#6 ActiveModel::Validations::Comparability::COMPARE_CHECKS = T.let(T.unsafe(nil), Hash) # source://activemodel//lib/active_model/validations/comparison.rb#8 class ActiveModel::Validations::ComparisonValidator < ::ActiveModel::EachValidator include ::ActiveModel::Validations::Comparability include ::ActiveModel::Validations::ResolveValue # source://activemodel//lib/active_model/validations/comparison.rb#12 def check_validity!; end # source://activemodel//lib/active_model/validations/comparison.rb#19 def validate_each(record, attr_name, value); end end # source://activemodel//lib/active_model/validations/confirmation.rb#5 class ActiveModel::Validations::ConfirmationValidator < ::ActiveModel::EachValidator # @return [ConfirmationValidator] a new instance of ConfirmationValidator # # source://activemodel//lib/active_model/validations/confirmation.rb#6 def initialize(options); end # source://activemodel//lib/active_model/validations/confirmation.rb#11 def validate_each(record, attribute, value); end private # @return [Boolean] # # source://activemodel//lib/active_model/validations/confirmation.rb#31 def confirmation_value_equal?(record, attribute, value, confirmed); end # source://activemodel//lib/active_model/validations/confirmation.rb#21 def setup!(klass); end end # source://activemodel//lib/active_model/validations/exclusion.rb#7 class ActiveModel::Validations::ExclusionValidator < ::ActiveModel::EachValidator include ::ActiveModel::Validations::ResolveValue include ::ActiveModel::Validations::Clusivity # source://activemodel//lib/active_model/validations/exclusion.rb#10 def validate_each(record, attribute, value); end end # source://activemodel//lib/active_model/validations/format.rb#7 class ActiveModel::Validations::FormatValidator < ::ActiveModel::EachValidator include ::ActiveModel::Validations::ResolveValue # source://activemodel//lib/active_model/validations/format.rb#20 def check_validity!; end # source://activemodel//lib/active_model/validations/format.rb#10 def validate_each(record, attribute, value); end private # source://activemodel//lib/active_model/validations/format.rb#34 def check_options_validity(name); end # source://activemodel//lib/active_model/validations/format.rb#30 def record_error(record, attribute, name, value); end # @return [Boolean] # # source://activemodel//lib/active_model/validations/format.rb#48 def regexp_using_multiline_anchors?(regexp); end end # source://activemodel//lib/active_model/validations/absence.rb#12 module ActiveModel::Validations::HelperMethods # Validates that the specified attributes are blank (as defined by # Object#present?). # # class Person < ActiveRecord::Base # validates_absence_of :first_name # end # # The first_name attribute must be in the object and it must be blank. # # Configuration options: # * :message - A custom error message (default is: "must be blank"). # # There is also a list of default options supported by every validator: # +:if+, +:unless+, +:on+, +:allow_nil+, +:allow_blank+, and +:strict+. # See ActiveModel::Validations::ClassMethods#validates for more information. # # source://activemodel//lib/active_model/validations/absence.rb#28 def validates_absence_of(*attr_names); end # Encapsulates the pattern of wanting to validate the acceptance of a # terms of service check box (or similar agreement). # # class Person < ActiveRecord::Base # validates_acceptance_of :terms_of_service # validates_acceptance_of :eula, message: 'must be abided' # end # # If the database column does not exist, the +terms_of_service+ attribute # is entirely virtual. This check is performed only if +terms_of_service+ # is not +nil+. # # Configuration options: # * :message - A custom error message (default is: "must be # accepted"). # * :accept - Specifies a value that is considered accepted. # Also accepts an array of possible values. The default value is # an array ["1", true], which makes it easy to relate to an HTML # checkbox. This should be set to, or include, +true+ if you are validating # a database column, since the attribute is typecast from "1" to +true+ # before validation. # # There is also a list of default options supported by every validator: # +:if+, +:unless+, +:on+, +:allow_nil+, +:allow_blank+, and +:strict+. # See ActiveModel::Validations::ClassMethods#validates for more information. # # source://activemodel//lib/active_model/validations/acceptance.rb#108 def validates_acceptance_of(*attr_names); end # Validates the value of a specified attribute fulfills all # defined comparisons with another value, proc, or attribute. # # class Person < ActiveRecord::Base # validates_comparison_of :value, greater_than: 'the sum of its parts' # end # # Configuration options: # * :message - A custom error message (default is: "failed comparison"). # * :greater_than - Specifies the value must be greater than the # supplied value. The default error message for this option is _"must be # greater than %{count}"_. # * :greater_than_or_equal_to - Specifies the value must be # greater than or equal to the supplied value. The default error message # for this option is _"must be greater than or equal to %{count}"_. # * :equal_to - Specifies the value must be equal to the supplied # value. The default error message for this option is _"must be equal to # %{count}"_. # * :less_than - Specifies the value must be less than the # supplied value. The default error message for this option is _"must be # less than %{count}"_. # * :less_than_or_equal_to - Specifies the value must be less # than or equal to the supplied value. The default error message for # this option is _"must be less than or equal to %{count}"_. # * :other_than - Specifies the value must not be equal to the # supplied value. The default error message for this option is _"must be # other than %{count}"_. # # There is also a list of default options supported by every validator: # +:if+, +:unless+, +:on+, +:allow_nil+, +:allow_blank+, and +:strict+ . # See ActiveModel::Validations::ClassMethods#validates for more information. # # The validator requires at least one of the following checks to be supplied. # Each will accept a proc, value, or a symbol which corresponds to a method: # # * :greater_than # * :greater_than_or_equal_to # * :equal_to # * :less_than # * :less_than_or_equal_to # * :other_than # # For example: # # class Person < ActiveRecord::Base # validates_comparison_of :birth_date, less_than_or_equal_to: -> { Date.today } # validates_comparison_of :preferred_name, other_than: :given_name, allow_nil: true # end # # source://activemodel//lib/active_model/validations/comparison.rb#85 def validates_comparison_of(*attr_names); end # Encapsulates the pattern of wanting to validate a password or email # address field with a confirmation. # # Model: # class Person < ActiveRecord::Base # validates_confirmation_of :user_name, :password # validates_confirmation_of :email_address, # message: 'should match confirmation' # end # # View: # <%= password_field "person", "password" %> # <%= password_field "person", "password_confirmation" %> # # The added +password_confirmation+ attribute is virtual; it exists only # as an in-memory attribute for validating the password. To achieve this, # the validation adds accessors to the model for the confirmation # attribute. # # NOTE: This check is performed only if +password_confirmation+ is not # +nil+. To require confirmation, make sure to add a presence check for # the confirmation attribute: # # validates_presence_of :password_confirmation, if: :password_changed? # # Configuration options: # * :message - A custom error message (default is: "doesn't match # %{translated_attribute_name}"). # * :case_sensitive - Looks for an exact match. Ignored by # non-text columns (+true+ by default). # # There is also a list of default options supported by every validator: # +:if+, +:unless+, +:on+, +:allow_nil+, +:allow_blank+, and +:strict+. # See ActiveModel::Validations::ClassMethods#validates for more information. # # source://activemodel//lib/active_model/validations/confirmation.rb#75 def validates_confirmation_of(*attr_names); end # Validates that the value of the specified attribute is not in a # particular enumerable object. # # class Person < ActiveRecord::Base # validates_exclusion_of :username, in: %w( admin superuser ), message: "You don't belong here" # validates_exclusion_of :age, in: 30..60, message: 'This site is only for under 30 and over 60' # validates_exclusion_of :format, in: %w( mov avi ), message: "extension %{value} is not allowed" # validates_exclusion_of :password, in: ->(person) { [person.username, person.first_name] }, # message: 'should not be the same as your username or first name' # validates_exclusion_of :karma, in: :reserved_karmas # end # # Configuration options: # * :in - An enumerable object of items that the value shouldn't # be part of. This can be supplied as a proc, lambda, or symbol which returns an # enumerable. If the enumerable is a numerical, time, or datetime range the test # is performed with Range#cover?, otherwise with include?. When # using a proc or lambda the instance under validation is passed as an argument. # * :within - A synonym(or alias) for :in # Range#cover?, otherwise with include?. # * :message - Specifies a custom error message (default is: "is # reserved"). # # There is also a list of default options supported by every validator: # +:if+, +:unless+, +:on+, +:allow_nil+, +:allow_blank+, and +:strict+. # See ActiveModel::Validations::ClassMethods#validates for more information. # # source://activemodel//lib/active_model/validations/exclusion.rb#44 def validates_exclusion_of(*attr_names); end # Validates whether the value of the specified attribute is of the correct # form, going by the regular expression provided. You can require that the # attribute matches the regular expression: # # class Person < ActiveRecord::Base # validates_format_of :email, with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i, on: :create # end # # Alternatively, you can require that the specified attribute does _not_ # match the regular expression: # # class Person < ActiveRecord::Base # validates_format_of :email, without: /NOSPAM/ # end # # You can also provide a proc or lambda which will determine the regular # expression that will be used to validate the attribute. # # class Person < ActiveRecord::Base # # Admin can have number as a first letter in their screen name # validates_format_of :screen_name, # with: ->(person) { person.admin? ? /\A[a-z0-9][a-z0-9_\-]*\z/i : /\A[a-z][a-z0-9_\-]*\z/i } # end # # Note: use \A and \z to match the start and end of the # string, ^ and $ match the start/end of a line. # # Due to frequent misuse of ^ and $, you need to pass # the multiline: true option in case you use any of these two # anchors in the provided regular expression. In most cases, you should be # using \A and \z. # # You must pass either :with or :without as an option. # In addition, both must be a regular expression or a proc or lambda, or # else an exception will be raised. # # Configuration options: # * :message - A custom error message (default is: "is invalid"). # * :with - Regular expression that if the attribute matches will # result in a successful validation. This can be provided as a proc or # lambda returning regular expression which will be called at runtime. # * :without - Regular expression that if the attribute does not # match will result in a successful validation. This can be provided as # a proc or lambda returning regular expression which will be called at # runtime. # * :multiline - Set to true if your regular expression contains # anchors that match the beginning or end of lines as opposed to the # beginning or end of the string. These anchors are ^ and $. # # There is also a list of default options supported by every validator: # +:if+, +:unless+, +:on+, +:allow_nil+, +:allow_blank+, and +:strict+. # See ActiveModel::Validations::ClassMethods#validates for more information. # # source://activemodel//lib/active_model/validations/format.rb#107 def validates_format_of(*attr_names); end # Validates whether the value of the specified attribute is available in a # particular enumerable object. # # class Person < ActiveRecord::Base # validates_inclusion_of :role, in: %w( admin contributor ) # validates_inclusion_of :age, in: 0..99 # validates_inclusion_of :format, in: %w( jpg gif png ), message: "extension %{value} is not included in the list" # validates_inclusion_of :states, in: ->(person) { STATES[person.country] } # validates_inclusion_of :karma, in: :available_karmas # end # # Configuration options: # * :in - An enumerable object of available items. This can be # supplied as a proc, lambda, or symbol which returns an enumerable. If the # enumerable is a numerical, time, or datetime range the test is performed # with Range#cover?, otherwise with include?. When using # a proc or lambda the instance under validation is passed as an argument. # * :within - A synonym(or alias) for :in # * :message - Specifies a custom error message (default is: "is # not included in the list"). # # There is also a list of default options supported by every validator: # +:if+, +:unless+, +:on+, +:allow_nil+, +:allow_blank+, and +:strict+. # See ActiveModel::Validations::ClassMethods#validates for more information. # # source://activemodel//lib/active_model/validations/inclusion.rb#42 def validates_inclusion_of(*attr_names); end # Validates that the specified attributes match the length restrictions # supplied. Only one constraint option can be used at a time apart from # +:minimum+ and +:maximum+ that can be combined together: # # class Person < ActiveRecord::Base # validates_length_of :first_name, maximum: 30 # validates_length_of :last_name, maximum: 30, message: "less than 30 if you don't mind" # validates_length_of :fax, in: 7..32, allow_nil: true # validates_length_of :phone, in: 7..32, allow_blank: true # validates_length_of :user_name, within: 6..20, too_long: 'pick a shorter name', too_short: 'pick a longer name' # validates_length_of :zip_code, minimum: 5, too_short: 'please enter at least 5 characters' # validates_length_of :smurf_leader, is: 4, message: "papa is spelled with 4 characters... don't play me." # validates_length_of :words_in_essay, minimum: 100, too_short: 'Your essay must be at least 100 words.' # # private # def words_in_essay # essay.scan(/\w+/) # end # end # # Constraint options: # # * :minimum - The minimum size of the attribute. # * :maximum - The maximum size of the attribute. Allows +nil+ by # default if not used with +:minimum+. # * :is - The exact size of the attribute. # * :within - A range specifying the minimum and maximum size of # the attribute. # * :in - A synonym (or alias) for :within. # # Other options: # # * :allow_nil - Attribute may be +nil+; skip validation. # * :allow_blank - Attribute may be blank; skip validation. # * :too_long - The error message if the attribute goes over the # maximum (default is: "is too long (maximum is %{count} characters)"). # * :too_short - The error message if the attribute goes under the # minimum (default is: "is too short (minimum is %{count} characters)"). # * :wrong_length - The error message if using the :is # method and the attribute is the wrong size (default is: "is the wrong # length (should be %{count} characters)"). # * :message - The error message to use for a :minimum, # :maximum, or :is violation. An alias of the appropriate # too_long/too_short/wrong_length message. # # There is also a list of default options supported by every validator: # +:if+, +:unless+, +:on+, and +:strict+. # See ActiveModel::Validations::ClassMethods#validates for more information. # # source://activemodel//lib/active_model/validations/length.rb#123 def validates_length_of(*attr_names); end # Validates whether the value of the specified attribute is numeric by # trying to convert it to a float with +Kernel.Float+ (if # only_integer is +false+) or applying it to the regular # expression /\A[\+\-]?\d+\z/ (if only_integer is set to # +true+). Precision of +Kernel.Float+ values are guaranteed up to 15 # digits. # # class Person < ActiveRecord::Base # validates_numericality_of :value, on: :create # end # # Configuration options: # * :message - A custom error message (default is: "is not a number"). # * :only_integer - Specifies whether the value has to be an # integer (default is +false+). # * :only_numeric - Specifies whether the value has to be an # instance of Numeric (default is +false+). The default behavior is to # attempt parsing the value if it is a String. # * :allow_nil - Skip validation if attribute is +nil+ (default is # +false+). Notice that for Integer and Float columns empty strings are # converted to +nil+. # * :greater_than - Specifies the value must be greater than the # supplied value. The default error message for this option is _"must be # greater than %{count}"_. # * :greater_than_or_equal_to - Specifies the value must be # greater than or equal the supplied value. The default error message # for this option is _"must be greater than or equal to %{count}"_. # * :equal_to - Specifies the value must be equal to the supplied # value. The default error message for this option is _"must be equal to # %{count}"_. # * :less_than - Specifies the value must be less than the # supplied value. The default error message for this option is _"must be # less than %{count}"_. # * :less_than_or_equal_to - Specifies the value must be less # than or equal the supplied value. The default error message for this # option is _"must be less than or equal to %{count}"_. # * :other_than - Specifies the value must be other than the # supplied value. The default error message for this option is _"must be # other than %{count}"_. # * :odd - Specifies the value must be an odd number. The default # error message for this option is _"must be odd"_. # * :even - Specifies the value must be an even number. The # default error message for this option is _"must be even"_. # * :in - Check that the value is within a range. The default # error message for this option is _"must be in %{count}"_. # # There is also a list of default options supported by every validator: # +:if+, +:unless+, +:on+, +:allow_nil+, +:allow_blank+, and +:strict+ . # See ActiveModel::Validations::ClassMethods#validates for more information. # # The following checks can also be supplied with a proc or a symbol which # corresponds to a method: # # * :greater_than # * :greater_than_or_equal_to # * :equal_to # * :less_than # * :less_than_or_equal_to # * :only_integer # * :other_than # # For example: # # class Person < ActiveRecord::Base # validates_numericality_of :width, less_than: ->(person) { person.height } # validates_numericality_of :width, greater_than: :minimum_weight # end # # source://activemodel//lib/active_model/validations/numericality.rb#217 def validates_numericality_of(*attr_names); end # Validates that the specified attributes are not blank (as defined by # Object#blank?). # # class Person < ActiveRecord::Base # validates_presence_of :first_name # end # # The first_name attribute must be in the object and it cannot be blank. # # If you want to validate the presence of a boolean field (where the real # values are +true+ and +false+), you will want to use # validates_inclusion_of :field_name, in: [true, false]. # # This is due to the way Object#blank? handles boolean values: # false.blank? # => true. # # Configuration options: # * :message - A custom error message (default is: "can't be blank"). # # There is also a list of default options supported by every validator: # +:if+, +:unless+, +:on+, +:allow_nil+, +:allow_blank+, and +:strict+. # See ActiveModel::Validations::ClassMethods#validates for more information. # # source://activemodel//lib/active_model/validations/presence.rb#34 def validates_presence_of(*attr_names); end # Validates that the specified attributes match the length restrictions # supplied. Only one constraint option can be used at a time apart from # +:minimum+ and +:maximum+ that can be combined together: # # class Person < ActiveRecord::Base # validates_length_of :first_name, maximum: 30 # validates_length_of :last_name, maximum: 30, message: "less than 30 if you don't mind" # validates_length_of :fax, in: 7..32, allow_nil: true # validates_length_of :phone, in: 7..32, allow_blank: true # validates_length_of :user_name, within: 6..20, too_long: 'pick a shorter name', too_short: 'pick a longer name' # validates_length_of :zip_code, minimum: 5, too_short: 'please enter at least 5 characters' # validates_length_of :smurf_leader, is: 4, message: "papa is spelled with 4 characters... don't play me." # validates_length_of :words_in_essay, minimum: 100, too_short: 'Your essay must be at least 100 words.' # # private # def words_in_essay # essay.scan(/\w+/) # end # end # # Constraint options: # # * :minimum - The minimum size of the attribute. # * :maximum - The maximum size of the attribute. Allows +nil+ by # default if not used with +:minimum+. # * :is - The exact size of the attribute. # * :within - A range specifying the minimum and maximum size of # the attribute. # * :in - A synonym (or alias) for :within. # # Other options: # # * :allow_nil - Attribute may be +nil+; skip validation. # * :allow_blank - Attribute may be blank; skip validation. # * :too_long - The error message if the attribute goes over the # maximum (default is: "is too long (maximum is %{count} characters)"). # * :too_short - The error message if the attribute goes under the # minimum (default is: "is too short (minimum is %{count} characters)"). # * :wrong_length - The error message if using the :is # method and the attribute is the wrong size (default is: "is the wrong # length (should be %{count} characters)"). # * :message - The error message to use for a :minimum, # :maximum, or :is violation. An alias of the appropriate # too_long/too_short/wrong_length message. # # There is also a list of default options supported by every validator: # +:if+, +:unless+, +:on+, and +:strict+. # See ActiveModel::Validations::ClassMethods#validates for more information. # # source://activemodel//lib/active_model/validations/length.rb#123 def validates_size_of(*attr_names); end private # source://activemodel//lib/active_model/validations/helper_methods.rb#7 def _merge_attributes(attr_names); end end # source://activemodel//lib/active_model/validations/inclusion.rb#7 class ActiveModel::Validations::InclusionValidator < ::ActiveModel::EachValidator include ::ActiveModel::Validations::ResolveValue include ::ActiveModel::Validations::Clusivity # source://activemodel//lib/active_model/validations/inclusion.rb#10 def validate_each(record, attribute, value); end end # source://activemodel//lib/active_model/validations/length.rb#7 class ActiveModel::Validations::LengthValidator < ::ActiveModel::EachValidator include ::ActiveModel::Validations::ResolveValue # @return [LengthValidator] a new instance of LengthValidator # # source://activemodel//lib/active_model/validations/length.rb#15 def initialize(options); end # source://activemodel//lib/active_model/validations/length.rb#29 def check_validity!; end # source://activemodel//lib/active_model/validations/length.rb#47 def validate_each(record, attribute, value); end private # @return [Boolean] # # source://activemodel//lib/active_model/validations/length.rb#69 def skip_nil_check?(key); end end # source://activemodel//lib/active_model/validations/length.rb#11 ActiveModel::Validations::LengthValidator::CHECKS = T.let(T.unsafe(nil), Hash) # source://activemodel//lib/active_model/validations/length.rb#10 ActiveModel::Validations::LengthValidator::MESSAGES = T.let(T.unsafe(nil), Hash) # source://activemodel//lib/active_model/validations/length.rb#13 ActiveModel::Validations::LengthValidator::RESERVED_OPTIONS = T.let(T.unsafe(nil), Array) # source://activemodel//lib/active_model/validations/numericality.rb#9 class ActiveModel::Validations::NumericalityValidator < ::ActiveModel::EachValidator include ::ActiveModel::Validations::Comparability include ::ActiveModel::Validations::ResolveValue # source://activemodel//lib/active_model/validations/numericality.rb#22 def check_validity!; end # source://activemodel//lib/active_model/validations/numericality.rb#36 def validate_each(record, attr_name, value, precision: T.unsafe(nil), scale: T.unsafe(nil)); end private # @return [Boolean] # # source://activemodel//lib/active_model/validations/numericality.rb#118 def allow_only_integer?(record); end # source://activemodel//lib/active_model/validations/numericality.rb#112 def filtered_options(value); end # @return [Boolean] # # source://activemodel//lib/active_model/validations/numericality.rb#108 def is_hexadecimal_literal?(raw_value); end # @return [Boolean] # # source://activemodel//lib/active_model/validations/numericality.rb#104 def is_integer?(raw_value); end # @return [Boolean] # # source://activemodel//lib/active_model/validations/numericality.rb#94 def is_number?(raw_value, precision, scale); end # source://activemodel//lib/active_model/validations/numericality.rb#68 def option_as_number(record, option_value, precision, scale); end # source://activemodel//lib/active_model/validations/numericality.rb#72 def parse_as_number(raw_value, precision, scale); end # source://activemodel//lib/active_model/validations/numericality.rb#86 def parse_float(raw_value, precision, scale); end # source://activemodel//lib/active_model/validations/numericality.rb#122 def prepare_value_for_validation(value, record, attr_name); end # @return [Boolean] # # source://activemodel//lib/active_model/validations/numericality.rb#143 def record_attribute_changed_in_place?(record, attr_name); end # source://activemodel//lib/active_model/validations/numericality.rb#90 def round(raw_value, scale); end end # source://activemodel//lib/active_model/validations/numericality.rb#20 ActiveModel::Validations::NumericalityValidator::HEXADECIMAL_REGEX = T.let(T.unsafe(nil), Regexp) # source://activemodel//lib/active_model/validations/numericality.rb#18 ActiveModel::Validations::NumericalityValidator::INTEGER_REGEX = T.let(T.unsafe(nil), Regexp) # source://activemodel//lib/active_model/validations/numericality.rb#14 ActiveModel::Validations::NumericalityValidator::NUMBER_CHECKS = T.let(T.unsafe(nil), Hash) # source://activemodel//lib/active_model/validations/numericality.rb#13 ActiveModel::Validations::NumericalityValidator::RANGE_CHECKS = T.let(T.unsafe(nil), Hash) # source://activemodel//lib/active_model/validations/numericality.rb#16 ActiveModel::Validations::NumericalityValidator::RESERVED_OPTIONS = T.let(T.unsafe(nil), Array) # source://activemodel//lib/active_model/validations/presence.rb#5 class ActiveModel::Validations::PresenceValidator < ::ActiveModel::EachValidator # source://activemodel//lib/active_model/validations/presence.rb#6 def validate_each(record, attr_name, value); end end # source://activemodel//lib/active_model/validations/resolve_value.rb#5 module ActiveModel::Validations::ResolveValue # source://activemodel//lib/active_model/validations/resolve_value.rb#6 def resolve_value(record, value); end end # source://activemodel//lib/active_model/validations/with.rb#7 class ActiveModel::Validations::WithValidator < ::ActiveModel::EachValidator # source://activemodel//lib/active_model/validations/with.rb#8 def validate_each(record, attr, val); end end # = Active \Model \Validator # # A simple base class that can be used along with # ActiveModel::Validations::ClassMethods.validates_with # # class Person # include ActiveModel::Validations # validates_with MyValidator # end # # class MyValidator < ActiveModel::Validator # def validate(record) # if some_complex_logic # record.errors.add(:base, "This record is invalid") # end # end # # private # def some_complex_logic # # ... # end # end # # Any class that inherits from \ActiveModel::Validator must implement a method # called +validate+ which accepts a +record+. # # class Person # include ActiveModel::Validations # validates_with MyValidator # end # # class MyValidator < ActiveModel::Validator # def validate(record) # record # => The person instance being validated # options # => Any non-standard options passed to validates_with # end # end # # To cause a validation error, you must add to the +record+'s errors directly # from within the validators message. # # class MyValidator < ActiveModel::Validator # def validate(record) # record.errors.add :base, "This is some custom error message" # record.errors.add :first_name, "This is some complex validation" # # etc... # end # end # # To add behavior to the initialize method, use the following signature: # # class MyValidator < ActiveModel::Validator # def initialize(options) # super # @my_custom_field = options[:field_name] || :first_name # end # end # # Note that the validator is initialized only once for the whole application # life cycle, and not on each validation run. # # The easiest way to add custom validators for validating individual attributes # is with the convenient ActiveModel::EachValidator class. # # class TitleValidator < ActiveModel::EachValidator # def validate_each(record, attribute, value) # record.errors.add attribute, 'must be Mr., Mrs., or Dr.' unless %w(Mr. Mrs. Dr.).include?(value) # end # end # # This can now be used in combination with the +validates+ method. # See ActiveModel::Validations::ClassMethods#validates for more on this. # # class Person # include ActiveModel::Validations # attr_accessor :title # # validates :title, presence: true, title: true # end # # It can be useful to access the class that is using that validator when there are prerequisites such # as an +attr_accessor+ being present. This class is accessible via options[:class] in the constructor. # To set up your validator override the constructor. # # class MyValidator < ActiveModel::Validator # def initialize(options={}) # super # options[:class].attr_accessor :custom_attribute # end # end # # source://activemodel//lib/active_model/validator.rb#96 class ActiveModel::Validator # Accepts options that will be made available through the +options+ reader. # # @return [Validator] a new instance of Validator # # source://activemodel//lib/active_model/validator.rb#108 def initialize(options = T.unsafe(nil)); end # Returns the kind for this validator. # # PresenceValidator.new(attributes: [:username]).kind # => :presence # AcceptanceValidator.new(attributes: [:terms]).kind # => :acceptance # # source://activemodel//lib/active_model/validator.rb#116 def kind; end # Returns the value of attribute options. # # source://activemodel//lib/active_model/validator.rb#97 def options; end # Override this method in subclasses with validation logic, adding errors # to the records +errors+ array where necessary. # # @raise [NotImplementedError] # # source://activemodel//lib/active_model/validator.rb#122 def validate(record); end class << self # Returns the kind of the validator. # # PresenceValidator.kind # => :presence # AcceptanceValidator.kind # => :acceptance # # source://activemodel//lib/active_model/validator.rb#103 def kind; end end end