mirror of
https://github.com/github/rails.git
synced 2026-01-10 07:07:54 -05:00
47 lines
877 B
Ruby
47 lines
877 B
Ruby
require "active_support/core_ext/class/attribute"
|
|
require "active_support/core_ext/string/inflections"
|
|
require "set"
|
|
|
|
module ActiveModel
|
|
class Serializer
|
|
class_attribute :_attributes
|
|
self._attributes = Set.new
|
|
|
|
def self.attributes(*attrs)
|
|
self._attributes += attrs
|
|
end
|
|
|
|
attr_reader :object, :scope
|
|
|
|
def self.inherited(klass)
|
|
name = klass.name.demodulize.underscore.sub(/_serializer$/, '')
|
|
|
|
klass.class_eval do
|
|
alias_method name.to_sym, :object
|
|
end
|
|
end
|
|
|
|
def initialize(object, scope)
|
|
@object, @scope = object, scope
|
|
end
|
|
|
|
def as_json(*)
|
|
serializable_hash
|
|
end
|
|
|
|
def serializable_hash
|
|
attributes
|
|
end
|
|
|
|
def attributes
|
|
hash = {}
|
|
|
|
_attributes.each do |name|
|
|
hash[name] = @object.read_attribute_for_serialization(name)
|
|
end
|
|
|
|
hash
|
|
end
|
|
end
|
|
end
|