Sha256: 9655ff248b878e97188efdb105cc34c7f94b3f85fe6514611ea609078371222f

Contents?: true

Size: 1.08 KB

Versions: 6

Compression:

Stored size: 1.08 KB

Contents

require 'object_attorney/allegation'

module ObjectAttorney
  module ClassMethods
    attr_writer :allegations, :defendant_options

    def defendant_options
      @defendant_options ||= {}
    end

    def defend(name, options = {})
      defendant_options.merge!(options.merge(name: name))
    end

    def allegations
      @allegations ||= Hash.new { |hash, key| hash[key] = [] }
    end

    def validate(*args, &block)
      allegations[nil] << Allegation.new(:custom, args, &block)
    end

    def validates_with(*args, &block)
      options = args.extract_options!

      # certain ActiveModel::Validations::<Class> need this
      options[:class] = self

      args.each do |validation_class|
        allegation = Allegation.new(validation_class, options, &block)

        allegation.attributes.each do |attribute|
          allegations[attribute.to_sym].push allegation
        end
      end
    end

    # Copy allegations on inheritance.
    def inherited(base)
      base.allegations = allegations.clone
      base.defendant_options = defendant_options.clone

      super
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
object_attorney-3.2.0 lib/object_attorney/class_methods.rb
object_attorney-3.1.2 lib/object_attorney/class_methods.rb
object_attorney-3.1.1 lib/object_attorney/class_methods.rb
object_attorney-3.1.0 lib/object_attorney/class_methods.rb
object_attorney-3.0.7 lib/object_attorney/class_methods.rb
object_attorney-3.0.6 lib/object_attorney/class_methods.rb