class PPT::Presenters::Attribute

Attributes

instance[RW]
name[R]

Public Class Methods

new(name) click to toggle source
# File lib/simple-orm/presenters.rb, line 24
def initialize(name)
  @name = name
  @validators, @hooks = Array.new, Hash.new
end

Public Instance Methods

default(value = nil, &block) click to toggle source
# File lib/simple-orm/presenters.rb, line 53
def default(value = nil, &block)
  @hooks[:default] = value ? Proc.new { value } : block
  self
end
get(stage = nil) click to toggle source
# File lib/simple-orm/presenters.rb, line 85
def get(stage = nil)
  if stage.nil?
    @value ||= self.run_hook(:default)
  elsif stage == :create
    @value ||= self.run_hook(:on_create)
  elsif stage == :update
    @value ||= self.run_hook(:on_update)
  else
    raise ArgumentError.new("Attribute#get takes an optional argument which can be either :create or :update.")
  end
end
on_create(value = nil, &block) click to toggle source
# File lib/simple-orm/presenters.rb, line 58
def on_create(value = nil, &block)
  @hooks[:on_create] = value ? Proc.new { value } : block
  self
end
on_update(value = nil, &block) click to toggle source
# File lib/simple-orm/presenters.rb, line 63
def on_update(value = nil, &block)
  @hooks[:on_update] = value ? Proc.new { value } : block
  self
end
private() click to toggle source

DSL

# File lib/simple-orm/presenters.rb, line 30
def private
  @private = true
  self
end
private?() click to toggle source

API

# File lib/simple-orm/presenters.rb, line 69
def private?
  @private
end
required() click to toggle source
# File lib/simple-orm/presenters.rb, line 35
def required
  @validators << Validator.new('is required') do |value|
    value != nil && ! value.empty?
  end

  self
end
run_hook(name) click to toggle source
# File lib/simple-orm/presenters.rb, line 73
def run_hook(name)
  @hooks[name] && @instance.instance_eval(&@hooks[name])
end
set(value) click to toggle source
# File lib/simple-orm/presenters.rb, line 77
def set(value)
  if self.private?
    raise "Attribute #{@name} is private!"
  end

  @value = value
end
type(type) click to toggle source
# File lib/simple-orm/presenters.rb, line 48
def type(type)
  @type = type
  self
end
validate(message, &block) click to toggle source
# File lib/simple-orm/presenters.rb, line 43
def validate(message, &block)
  self.validators << Validator.new(message, &block)
  self
end
validate!(stage = nil) click to toggle source
# File lib/simple-orm/presenters.rb, line 97
def validate!(stage = nil)
  @validators.each do |validator|
    validator.validate!(self.name, self.get(stage))
  end
end