mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-23 06:16: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 "ams/inflector"
|
||||
require "ams/dsl_support"
|
||||
require "ams/delegatable"
|
||||
module AMS
|
||||
# Lightweight mapping of a model to a JSON API resource object
|
||||
# with attributes and relationships
|
||||
@ -32,11 +33,8 @@ module AMS
|
||||
# ums = UserModelSerializer.new(user)
|
||||
# ums.to_json
|
||||
class Serializer < BasicObject
|
||||
extend DSLSupport
|
||||
# delegate constant lookup to Object
|
||||
def self.const_missing(name)
|
||||
::Object.const_get(name)
|
||||
end
|
||||
extend ::AMS::DSLSupport
|
||||
extend ::AMS::Delegatable
|
||||
|
||||
class << self
|
||||
attr_accessor :_attributes, :_relations, :_id_field, :_type
|
||||
@ -422,16 +420,6 @@ module AMS
|
||||
JSON.dump(obj)
|
||||
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
|
||||
|
||||
def link_builder?
|
||||
@ -467,9 +455,5 @@ module AMS
|
||||
def foreign_key
|
||||
"#{object.class.table_name.singularize}_id"
|
||||
end
|
||||
|
||||
def method_missing(name, *args, &block)
|
||||
object.send(name, *args, &block)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Loading…
Reference in New Issue
Block a user