active_model_serializers/lib/active_model/serializer.rb
Steve Klabnik 970b542549 Implement basic rendering
Woo actioncontroller
2014-07-09 17:52:31 -04:00

57 lines
1.1 KiB
Ruby

module ActiveModel
class Serializer
class << self
attr_accessor :_attributes
end
def self.inherited(base)
base._attributes = []
end
def self.attributes(*attrs)
@_attributes.concat attrs
attrs.each do |attr|
define_method attr do
object.read_attribute_for_serialization(attr)
end unless method_defined?(attr)
end
end
if RUBY_VERSION >= '2.0'
def self.serializer_for(resource)
if resource.respond_to?(:to_ary)
ArraySerializer
else
begin
Object.const_get "#{resource.class.name}Serializer"
rescue NameError
nil
end
end
end
else
def self.serializer_for(resource)
if resource.respond_to?(:to_ary)
ArraySerializer
else
"#{resource.class.name}Serializer".safe_constantize
end
end
end
attr_accessor :object
def initialize(object)
@object = object
end
def attributes
self.class._attributes.dup.each_with_object({}) do |name, hash|
hash[name] = send(name)
end
end
end
end