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