class Shaped::Shapes::Class

Public Class Methods

new(expected_klass, validations = {}) click to toggle source
# File lib/shaped/shapes/class.rb, line 4
def initialize(expected_klass, validations = {})
  if !expected_klass.is_a?(Class)
    raise(Shaped::InvalidShapeDescription, "A #{self.class} description must be a Class.")
  end

  @expected_klass = expected_klass
  @validations = validations
  @validator_klass = validator_klass(validations)
end

Public Instance Methods

matched_by?(object) click to toggle source
# File lib/shaped/shapes/class.rb, line 14
def matched_by?(object)
  object.is_a?(@expected_klass) && validations_satisfied?(object)
end
to_s() click to toggle source
# File lib/shaped/shapes/class.rb, line 18
def to_s
  if @validations.empty?
    @expected_klass.name
  else
    "#{@expected_klass} validating #{@validations}"
  end
end

Private Instance Methods

validations_satisfied?(object) click to toggle source
# File lib/shaped/shapes/class.rb, line 40
def validations_satisfied?(object)
  return true if @validator_klass.nil?

  validator_instance = @validator_klass.new
  validator_instance.value = object
  validator_instance.valid?
end
validator_klass(validations) click to toggle source
# File lib/shaped/shapes/class.rb, line 28
def validator_klass(validations)
  return nil if validations.empty?

  Class.new do
    include ActiveModel::Validations

    attr_accessor :value

    validates :value, validations
  end
end