class Fakecrm::ResourceView

Attributes

additional[RW]
custom_attributes[RW]
exclude[RW]
include[RW]
properties[RW]
resource[RW]

Public Class Methods

decorate(source, options={}) click to toggle source
# File lib/fakecrm/resource/views/resource_view.rb, line 6
def decorate(source, options={})
  if source.class.include?(::Enumerable)
    source.map {|item| self.new(item, options)}
  else
    self.new(source, options)
  end
end
new(resource, options={}) click to toggle source
# File lib/fakecrm/resource/views/resource_view.rb, line 15
def initialize(resource, options={})
  self.resource = resource

  self.custom_attributes = get_custom_attributes(self.resource)
  self.properties = get_resource_properties(self.resource)

  self.include = options.fetch(:include, :all)
  self.exclude = options.fetch(:exclude, [])
  self.additional = options.fetch(:methods, get_additional_methods(self.resource))
end

Public Instance Methods

as_json(*args) click to toggle source
# File lib/fakecrm/resource/views/resource_view.rb, line 31
def as_json(*args)
  result = {}

  self.properties.each do |property|
    if available?(property) && include?(property)
      result[property] = resource.send(property)
    end
  end

  self.additional.each do |method|
    result[method] = resource.send(method)
  end

  return result
end
available?(property) click to toggle source
# File lib/fakecrm/resource/views/resource_view.rb, line 47
def available?(property)
  if property =~ /^custom/
    self.custom_attributes.include?(property)
  else
    true
  end
end
exclude?(property) click to toggle source
# File lib/fakecrm/resource/views/resource_view.rb, line 59
def exclude?(property)
  !include?(property)
end
get_additional_methods(resource) click to toggle source
# File lib/fakecrm/resource/views/resource_view.rb, line 63
def get_additional_methods(resource)
  if resource.class.respond_to? :virtual_properties
    resource.class.virtual_properties || []
  else
    []
  end
end
get_custom_attributes(resource) click to toggle source
# File lib/fakecrm/resource/views/resource_view.rb, line 75
def get_custom_attributes(resource)
  if resource.respond_to?(:one_of_a_kind?) && resource.one_of_a_kind?
    CustomType.get!(resource.kind).custom_attributes.map { |attr| :"custom_#{attr.name}" }
  else
    get_resource_properties(resource).select {|property| property =~ /^custom/ }
  end
end
get_resource_properties(resource) click to toggle source
# File lib/fakecrm/resource/views/resource_view.rb, line 71
def get_resource_properties(resource)
  resource.class.properties.map(&:name)
end
include?(property) click to toggle source
# File lib/fakecrm/resource/views/resource_view.rb, line 55
def include?(property)
  !self.exclude.include?(property) && (self.include == :all || self.include.include?(property))
end
to_json(*args) click to toggle source
# File lib/fakecrm/resource/views/resource_view.rb, line 27
def to_json(*args)
  return as_json.to_json
end