Sha256: e8e288ea1480d1732cab2431f836213e52086537b37736990a2d984f81bb65d8

Contents?: true

Size: 819 Bytes

Versions: 187

Compression:

Stored size: 819 Bytes

Contents

class Lalala::Pages::ChildTypeValidator < ActiveModel::Validator

  def validate(record)
    types = normalize_types(options[:types], record)

    record.children.each do |child|
      valid = types.any? do |type|
        child.is_a?(type)
      end

      unless valid
        record.errors.add :base, "Invalid child type: #{child.class.to_s.humanize}"
      end
    end
  end

private

  def normalize_types(types, record)
    if Proc === types
      types = types.call(record)
    end

    if types.nil?
      types = []
    end

    unless Array === types
      raise ArgumentError, "ChildTypeValidator expected a list of class names for :types."
    end

    types = types.map do |type|
      if Class === type
        type
      else
        type.to_s.classify.constantize
      end
    end

    types
  end

end

Version data entries

187 entries across 187 versions & 1 rubygems

Version Path
lalala-4.1.0.dev.425 lib/lalala/pages/child_type_validator.rb
lalala-4.1.0.dev.420 lib/lalala/pages/child_type_validator.rb
lalala-4.1.0.dev.419 lib/lalala/pages/child_type_validator.rb
lalala-4.1.0.dev.418 lib/lalala/pages/child_type_validator.rb
lalala-4.1.0.dev.417 lib/lalala/pages/child_type_validator.rb
lalala-4.0.0.dev.416 lib/lalala/pages/child_type_validator.rb
lalala-4.1.0.dev.415 lib/lalala/pages/child_type_validator.rb
lalala-4.1.0.dev.414 lib/lalala/pages/child_type_validator.rb
lalala-4.1.0.dev.413 lib/lalala/pages/child_type_validator.rb
lalala-4.1.0.dev.412 lib/lalala/pages/child_type_validator.rb
lalala-4.1.0.dev.411 lib/lalala/pages/child_type_validator.rb
lalala-4.1.0.dev.410 lib/lalala/pages/child_type_validator.rb
lalala-4.1.0.dev.409 lib/lalala/pages/child_type_validator.rb
lalala-4.0.0.dev.407 lib/lalala/pages/child_type_validator.rb
lalala-4.1.0.dev.408 lib/lalala/pages/child_type_validator.rb
lalala-4.1.0.dev.398 lib/lalala/pages/child_type_validator.rb
lalala-4.1.0.dev.397 lib/lalala/pages/child_type_validator.rb
lalala-4.0.0.dev.396 lib/lalala/pages/child_type_validator.rb
lalala-4.0.0.dev.395 lib/lalala/pages/child_type_validator.rb
lalala-4.1.0.dev.394 lib/lalala/pages/child_type_validator.rb