class Robert

Constants

VERSION

Attributes

attributes[R]
errors[R]

Public Class Methods

build(klass, args = {}) click to toggle source
# File lib/robert.rb, line 7
def build(klass, args = {})
  new(args).build(klass)
end
build!(klass, args = {}) click to toggle source
# File lib/robert.rb, line 11
def build!(klass, args = {})
  new(args).build!(klass)
end
new(args = {}) click to toggle source
# File lib/robert.rb, line 18
def initialize(args = {})
  args.each do |key, value|
    writer = :"#{key}="

    if respond_to?(writer)
      send(writer, value)
    end
  end

  reset
end

Public Instance Methods

build(klass) click to toggle source
# File lib/robert.rb, line 38
def build(klass)
  valid? && klass.new(attributes)
end
build!(klass) click to toggle source
# File lib/robert.rb, line 42
def build!(klass)
  build(klass) || raise(ValidationError, errors)
end
default_attributes() click to toggle source
# File lib/robert.rb, line 30
def default_attributes
  {}
end
default_errors() click to toggle source
# File lib/robert.rb, line 34
def default_errors
  Hash.new { |h, k| h[k] = [] }
end
valid?() click to toggle source
# File lib/robert.rb, line 46
def valid?
  reset

  validate

  errors.empty?
end

Private Instance Methods

add_attribute(key, value) click to toggle source
# File lib/robert.rb, line 56
def add_attribute(key, value)
  attributes[key] = clean(value) unless errors.has_key?(key)
end
add_error(key, error) click to toggle source
# File lib/robert.rb, line 60
def add_error(key, error)
  attributes.delete(key)

  errors[key] << error
end
clean(value) click to toggle source
# File lib/robert.rb, line 66
def clean(value)
  value
end
error(key, error, &condition) click to toggle source
# File lib/robert.rb, line 70
def error(key, error, &condition)
  value = send(key)

  if value.instance_eval &condition
    add_error(key, error)

    true
  else
    add_attribute(key, value)

    false
  end
end
reset() click to toggle source
# File lib/robert.rb, line 84
def reset
  @attributes = default_attributes
  @errors = default_errors
end
validate() click to toggle source
# File lib/robert.rb, line 89
def validate
  raise NotImplementedError
end