class Cartograph::Property

Attributes

map[RW]
name[R]
options[R]

Public Class Methods

new(name, options = {}, &block) click to toggle source
# File lib/cartograph/property.rb, line 6
def initialize(name, options = {}, &block)
  @name = name
  @options = options

  if mapped_class = options[:include]
    # Perform a safe duplication into our properties map
    # This allows the user to define more attributes on the map should they need to
    @map = mapped_class.cartograph.dup
  end

  if block_given?
    @map ||= Map.new
    block.arity > 0 ? block.call(map) : map.instance_eval(&block)
  end
end

Public Instance Methods

==(other) click to toggle source
# File lib/cartograph/property.rb, line 52
def ==(other)
  %i(name options map).inject(true) do |equals, method|
    break unless equals
    send(method) == other.send(method)
  end
end
dup() click to toggle source
# File lib/cartograph/property.rb, line 46
def dup
  Property.new(name, options.dup).tap do |property|
    property.map = map.dup if self.map
  end
end
key() click to toggle source
# File lib/cartograph/property.rb, line 22
def key
  (options[:key] || name).to_s
end
plural?() click to toggle source
# File lib/cartograph/property.rb, line 42
def plural?
  !!options[:plural]
end
scopes() click to toggle source
# File lib/cartograph/property.rb, line 38
def scopes
  Array(options[:scopes] || [])
end
value_for(object, scope = nil) click to toggle source
# File lib/cartograph/property.rb, line 26
def value_for(object, scope = nil)
  value = object.send(name)
  return if value.nil?
  map ? artist_value(value, scope) : value
end
value_from(object, scope = nil) click to toggle source
# File lib/cartograph/property.rb, line 32
def value_from(object, scope = nil)
  return if object.nil?
  value = object.has_key?(key) ? object[key] : object[key.to_sym]
  map ? sculpt_value(value, scope) : value
end

Private Instance Methods

artist_value(value, scope) click to toggle source
# File lib/cartograph/property.rb, line 65
def artist_value(value, scope)
  plural? ? Array(value).map {|v| Artist.new(v, map).draw(scope) } : Artist.new(value, map).draw(scope)
end
sculpt_value(value, scope) click to toggle source
# File lib/cartograph/property.rb, line 61
def sculpt_value(value, scope)
  plural? ? Array(value).map {|v| Sculptor.new(v, map).sculpt(scope) } : Sculptor.new(value, map).sculpt(scope)
end