class Representable::Definition
Created at class compile time. Keeps configuration options for one property.
Public Class Methods
new(sym, options={}, &block)
click to toggle source
Calls superclass method
# File lib/representable/definition.rb, line 7 def initialize(sym, options={}, &block) options[:extend] = options[:nested] if options[:nested] super # defaults: options[:parse_filter] = Pipeline[*options[:parse_filter]] options[:render_filter] = Pipeline[*options[:render_filter]] setup!(options, &block) end
Public Instance Methods
[](name)
click to toggle source
# File lib/representable/definition.rb, line 40 def [](name) # return nil if name==:extend && self[:nested].nil? # return Uber::Options::Value.new(self[:nested]) if name==:extend @runtime_options[name] end
array?()
click to toggle source
# File lib/representable/definition.rb, line 59 def array? self[:collection] end
create_binding(*args)
click to toggle source
# File lib/representable/definition.rb, line 75 def create_binding(*args) self[:binding].call(self, *args) end
delete!(name)
click to toggle source
# File lib/representable/definition.rb, line 34 def delete!(name) @runtime_options.delete(name) @options.delete(name) self end
has_default?()
click to toggle source
# File lib/representable/definition.rb, line 67 def has_default? @options.has_key?(:default) end
hash?()
click to toggle source
# File lib/representable/definition.rb, line 63 def hash? self[:hash] end
inspect()
click to toggle source
# File lib/representable/definition.rb, line 79 def inspect state = (instance_variables-[:@runtime_options, :@name]).collect { |ivar| "#{ivar}=#{instance_variable_get(ivar)}" } "#<Representable::Definition ==>#{name} #{state.join(" ")}>" end
merge!(options, &block)
click to toggle source
# File lib/representable/definition.rb, line 24 def merge!(options, &block) options = options.clone options[:parse_filter] = @options[:parse_filter].push(*options[:parse_filter]) options[:render_filter] = @options[:render_filter].push(*options[:render_filter]) setup!(options, &block) # FIXME: this doesn't yield :as etc. self end
name()
click to toggle source
# File lib/representable/definition.rb, line 19 def name self[:name] end
Also aliased as: getter
representable?()
click to toggle source
# File lib/representable/definition.rb, line 54 def representable? return if self[:representable] == false self[:representable] or typed? end
representer_module()
click to toggle source
# File lib/representable/definition.rb, line 71 def representer_module @options[:extend] end
setter()
click to toggle source
# File lib/representable/definition.rb, line 46 def setter :"#{name}=" end
typed?()
click to toggle source
# File lib/representable/definition.rb, line 50 def typed? # TODO: remove. self[:class] or self[:extend] or self[:instance] end
Private Instance Methods
dynamic_options()
click to toggle source
# File lib/representable/definition.rb, line 109 def dynamic_options [:as, :getter, :setter, :class, :instance, :reader, :writer, :extend, :prepare, :if, :deserialize, :serialize, :skip_parse, :skip_render] end
handle_as!(options)
click to toggle source
# File lib/representable/definition.rb, line 117 def handle_as!(options) options[:as] = options[:as].to_s if options[:as].is_a?(Symbol) # Allow symbols for as: end
handle_extend!(options)
click to toggle source
# File lib/representable/definition.rb, line 113 def handle_extend!(options) mod = options.delete(:extend) || options.delete(:decorator) and options[:extend] = mod end
runtime_options!(options)
click to toggle source
wrapping dynamic options in Value does save runtime, as this is used very frequently (and totally unnecessary to wrap an option at runtime, its value never changes).
# File lib/representable/definition.rb, line 100 def runtime_options!(options) @runtime_options = {} for name, value in options value = ::Declarative::Option(value, instance_exec: true, callable: Uber::Callable) if dynamic_options.include?(name) @runtime_options[name] = value end end
setup!(options) { |options| ... }
click to toggle source
# File lib/representable/definition.rb, line 85 def setup!(options, &block) handle_extend!(options) handle_as!(options) # DISCUSS: we could call more macros here (e.g. for :nested). Representable::Populator.apply!(options) yield options if block_given? @options.merge!(options) runtime_options!(@options) end