Sha256: c9ee9fc45f7f3a281b10bbdee03c964d44a0f7f3c44bc819e10d7c14adc287fc

Contents?: true

Size: 1.66 KB

Versions: 1

Compression:

Stored size: 1.66 KB

Contents

module ValidatesTimeliness
  module ORM
    module Mongoid
      extend ActiveSupport::Concern
      # You need define the fields before you define the validations.
      # It is best to use the plugin parser to avoid errors on a bad
      # field value in Mongoid. Parser will return nil rather than error.

      module ClassMethods 
        # Mongoid has no bulk attribute method definition hook. It defines
        # them with each field definition. So we likewise define them after
        # each validation is defined.
        #
        def timeliness_validation_for(attr_names, type)
          super
          attr_names.each { |attr_name| define_timeliness_write_method(attr_name) }
        end

        def timeliness_type_cast_code(attr_name, var_name)
          type = timeliness_attribute_type(attr_name)

          "#{var_name} = Timeliness::Parser.parse(value, :#{type})"
        end

        def timeliness_attribute_type(attr_name)
          {
            Date => :date,
            Time => :datetime,
            DateTime => :datetime
          }[fields[attr_name.to_s].type] || :datetime
        end
      end

    end
  end
end
 
module Mongoid::Document
  # Due to how Mongoid misuses ActiveSupport::Concern,
  # the only way to override a core component method is 
  # using an append_features hook.
  #
  module TimelinessConcern
    def append_features(base)
      super
      base.send :include, ValidatesTimeliness::AttributeMethods
      base.send :include, ValidatesTimeliness::ORM::Mongoid
    end
  end
  extend TimelinessConcern

  def reload_with_timeliness
    _clear_timeliness_cache
    reload_without_timeliness
  end
  alias_method_chain :reload, :timeliness
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
validates_timeliness-3.0.6 lib/validates_timeliness/orm/mongoid.rb