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