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
getter()
Alias for: name
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