mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-24 14:56:50 +00:00
Extract delegatable
This commit is contained in:
parent
94bf22ae2a
commit
793ee3dd11
37
lib/ams/delegatable.rb
Normal file
37
lib/ams/delegatable.rb
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
module AMS
|
||||||
|
module Delegatable
|
||||||
|
# delegate constant lookup to Object
|
||||||
|
def const_missing(name)
|
||||||
|
::Object.const_get(name)
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.extended(base)
|
||||||
|
base.class_eval do
|
||||||
|
# @!visibility private
|
||||||
|
def send(*args)
|
||||||
|
__send__(*args)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def method_missing(name, *args, &block)
|
||||||
|
object.send(name, *args, &block)
|
||||||
|
end
|
||||||
|
|
||||||
|
def respond_to_missing?(name, include_private = false)
|
||||||
|
object.respond_to?(name, include_private)
|
||||||
|
end
|
||||||
|
|
||||||
|
const_set(:KERNEL_METHOD_METHOD, ::Kernel.instance_method(:method))
|
||||||
|
def method_handle_for(method_name)
|
||||||
|
KERNEL_METHOD_METHOD.bind(self).call(method_name)
|
||||||
|
rescue NameError => original
|
||||||
|
handle = self.method(method_name)
|
||||||
|
raise original unless handle.is_a? Method
|
||||||
|
handle
|
||||||
|
end
|
||||||
|
alias method method_handle_for
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@ -3,6 +3,7 @@
|
|||||||
require "json"
|
require "json"
|
||||||
require "ams/inflector"
|
require "ams/inflector"
|
||||||
require "ams/dsl_support"
|
require "ams/dsl_support"
|
||||||
|
require "ams/delegatable"
|
||||||
module AMS
|
module AMS
|
||||||
# Lightweight mapping of a model to a JSON API resource object
|
# Lightweight mapping of a model to a JSON API resource object
|
||||||
# with attributes and relationships
|
# with attributes and relationships
|
||||||
@ -32,11 +33,8 @@ module AMS
|
|||||||
# ums = UserModelSerializer.new(user)
|
# ums = UserModelSerializer.new(user)
|
||||||
# ums.to_json
|
# ums.to_json
|
||||||
class Serializer < BasicObject
|
class Serializer < BasicObject
|
||||||
extend DSLSupport
|
extend ::AMS::DSLSupport
|
||||||
# delegate constant lookup to Object
|
extend ::AMS::Delegatable
|
||||||
def self.const_missing(name)
|
|
||||||
::Object.const_get(name)
|
|
||||||
end
|
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
attr_accessor :_attributes, :_relations, :_id_field, :_type
|
attr_accessor :_attributes, :_relations, :_id_field, :_type
|
||||||
@ -422,16 +420,6 @@ module AMS
|
|||||||
JSON.dump(obj)
|
JSON.dump(obj)
|
||||||
end
|
end
|
||||||
|
|
||||||
# @!visibility private
|
|
||||||
def send(*args)
|
|
||||||
__send__(*args)
|
|
||||||
end
|
|
||||||
|
|
||||||
KERNEL_METHOD_METHOD = ::Kernel.instance_method(:method)
|
|
||||||
def method(method_name)
|
|
||||||
KERNEL_METHOD_METHOD.bind(self).call(method_name)
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def link_builder?
|
def link_builder?
|
||||||
@ -467,9 +455,5 @@ module AMS
|
|||||||
def foreign_key
|
def foreign_key
|
||||||
"#{object.class.table_name.singularize}_id"
|
"#{object.class.table_name.singularize}_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
def method_missing(name, *args, &block)
|
|
||||||
object.send(name, *args, &block)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user