mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-23 06:16:50 +00:00
Add a deprecation DSL
This commit is contained in:
parent
6b4c8df6fb
commit
b50195fde7
@ -3,40 +3,37 @@ module ActiveModel
|
|||||||
# @deprecated Use ActiveModelSerializers::Adapter instead
|
# @deprecated Use ActiveModelSerializers::Adapter instead
|
||||||
module Adapter
|
module Adapter
|
||||||
class << self
|
class << self
|
||||||
|
extend ActiveModelSerializers::Deprecate
|
||||||
|
|
||||||
def create(resource, options = {})
|
def create(resource, options = {})
|
||||||
warn_deprecation
|
|
||||||
ActiveModelSerializers::Adapter.create(resource, options)
|
ActiveModelSerializers::Adapter.create(resource, options)
|
||||||
end
|
end
|
||||||
|
deprecate :create, 'ActiveModelSerializers::Adapter.'
|
||||||
|
|
||||||
def adapter_class(adapter)
|
def adapter_class(adapter)
|
||||||
warn_deprecation
|
|
||||||
ActiveModelSerializers::Adapter.adapter_class(adapter)
|
ActiveModelSerializers::Adapter.adapter_class(adapter)
|
||||||
end
|
end
|
||||||
|
deprecate :adapter_class, 'ActiveModelSerializers::Adapter.'
|
||||||
|
|
||||||
def adapter_map
|
def adapter_map
|
||||||
warn_deprecation
|
|
||||||
ActiveModelSerializers::Adapter.adapter_map
|
ActiveModelSerializers::Adapter.adapter_map
|
||||||
end
|
end
|
||||||
|
deprecate :adapter_map, 'ActiveModelSerializers::Adapter.'
|
||||||
|
|
||||||
def adapters
|
def adapters
|
||||||
warn_deprecation
|
|
||||||
ActiveModelSerializers::Adapter.adapters
|
ActiveModelSerializers::Adapter.adapters
|
||||||
end
|
end
|
||||||
|
deprecate :adapters, 'ActiveModelSerializers::Adapter.'
|
||||||
|
|
||||||
def register(name, klass = name)
|
def register(name, klass = name)
|
||||||
warn_deprecation
|
|
||||||
ActiveModelSerializers::Adapter.register(name, klass)
|
ActiveModelSerializers::Adapter.register(name, klass)
|
||||||
end
|
end
|
||||||
|
deprecate :register, 'ActiveModelSerializers::Adapter.'
|
||||||
|
|
||||||
def lookup(adapter)
|
def lookup(adapter)
|
||||||
warn_deprecation
|
|
||||||
ActiveModelSerializers::Adapter.lookup(adapter)
|
ActiveModelSerializers::Adapter.lookup(adapter)
|
||||||
end
|
end
|
||||||
|
deprecate :lookup, 'ActiveModelSerializers::Adapter.'
|
||||||
def warn_deprecation
|
|
||||||
warn "Calling deprecated #{name} (#{__FILE__}) from #{caller[1..3].join(', ')}. Please use ActiveModelSerializers::Adapter"
|
|
||||||
end
|
|
||||||
private :warn_deprecation
|
|
||||||
end
|
end
|
||||||
|
|
||||||
require 'active_model/serializer/adapter/base'
|
require 'active_model/serializer/adapter/base'
|
||||||
|
|||||||
@ -1,13 +1,14 @@
|
|||||||
require 'active_model_serializers/adapter/attributes'
|
|
||||||
|
|
||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
module Adapter
|
module Adapter
|
||||||
class Attributes < DelegateClass(ActiveModelSerializers::Adapter::Attributes)
|
class Attributes < DelegateClass(ActiveModelSerializers::Adapter::Attributes)
|
||||||
def initialize(serializer, options = {})
|
def initialize(serializer, options = {})
|
||||||
warn "Calling deprecated #{self.class.name} (#{__FILE__}) from #{caller[0..2].join(', ')}. Please use #{self.class.name.sub('ActiveModel::Serializer', 'ActiveModelSerializers')}"
|
|
||||||
super(ActiveModelSerializers::Adapter::Attributes.new(serializer, options))
|
super(ActiveModelSerializers::Adapter::Attributes.new(serializer, options))
|
||||||
end
|
end
|
||||||
|
class << self
|
||||||
|
extend ActiveModelSerializers::Deprecate
|
||||||
|
deprecate :new, 'ActiveModelSerializers::Adapter::Json.'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -2,9 +2,9 @@ module ActiveModel
|
|||||||
class Serializer
|
class Serializer
|
||||||
module Adapter
|
module Adapter
|
||||||
class Base < DelegateClass(ActiveModelSerializers::Adapter::Base)
|
class Base < DelegateClass(ActiveModelSerializers::Adapter::Base)
|
||||||
def self.inherited(base)
|
class << self
|
||||||
warn "Inheriting deprecated ActiveModel::Serializer::Adapter::Base in #{caller[0..2].join(', ')}. Please use ActiveModelSerializers::Adapter::Base"
|
extend ActiveModelSerializers::Deprecate
|
||||||
super
|
deprecate :inherited, 'ActiveModelSerializers::Adapter::Base.'
|
||||||
end
|
end
|
||||||
|
|
||||||
def initialize(serializer, options = {})
|
def initialize(serializer, options = {})
|
||||||
|
|||||||
@ -1,13 +1,14 @@
|
|||||||
require 'active_model_serializers/adapter/json'
|
|
||||||
|
|
||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
module Adapter
|
module Adapter
|
||||||
class Json < DelegateClass(ActiveModelSerializers::Adapter::Json)
|
class Json < DelegateClass(ActiveModelSerializers::Adapter::Json)
|
||||||
def initialize(serializer, options = {})
|
def initialize(serializer, options = {})
|
||||||
warn "Calling deprecated #{self.class.name} (#{__FILE__}) from #{caller[0..2].join(', ')}. Please use #{self.class.name.sub('ActiveModel::Serializer', 'ActiveModelSerializers')}"
|
|
||||||
super(ActiveModelSerializers::Adapter::Json.new(serializer, options))
|
super(ActiveModelSerializers::Adapter::Json.new(serializer, options))
|
||||||
end
|
end
|
||||||
|
class << self
|
||||||
|
extend ActiveModelSerializers::Deprecate
|
||||||
|
deprecate :new, 'ActiveModelSerializers::Adapter::Json.new'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -1,13 +1,14 @@
|
|||||||
require 'active_model_serializers/adapter/json_api'
|
|
||||||
|
|
||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
module Adapter
|
module Adapter
|
||||||
class JsonApi < DelegateClass(ActiveModelSerializers::Adapter::JsonApi)
|
class JsonApi < DelegateClass(ActiveModelSerializers::Adapter::JsonApi)
|
||||||
def initialize(serializer, options = {})
|
def initialize(serializer, options = {})
|
||||||
warn "Calling deprecated #{self.class.name} (#{__FILE__}) from #{caller[0..2].join(', ')}. Please use #{self.class.name.sub('ActiveModel::Serializer', 'ActiveModelSerializers')}"
|
|
||||||
super(ActiveModelSerializers::Adapter::JsonApi.new(serializer, options))
|
super(ActiveModelSerializers::Adapter::JsonApi.new(serializer, options))
|
||||||
end
|
end
|
||||||
|
class << self
|
||||||
|
extend ActiveModelSerializers::Deprecate
|
||||||
|
deprecate :new, 'ActiveModelSerializers::Adapter::JsonApi.new'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -1,13 +1,14 @@
|
|||||||
require 'active_model_serializers/adapter/null'
|
|
||||||
|
|
||||||
module ActiveModel
|
module ActiveModel
|
||||||
class Serializer
|
class Serializer
|
||||||
module Adapter
|
module Adapter
|
||||||
class Null < DelegateClass(ActiveModelSerializers::Adapter::Null)
|
class Null < DelegateClass(ActiveModelSerializers::Adapter::Null)
|
||||||
def initialize(serializer, options = {})
|
def initialize(serializer, options = {})
|
||||||
warn "Calling deprecated #{self.class.name} (#{__FILE__}) from #{caller[0..2].join(', ')}. Please use #{self.class.name.sub('ActiveModel::Serializer', 'ActiveModelSerializers')}"
|
|
||||||
super(ActiveModelSerializers::Adapter::Null.new(serializer, options))
|
super(ActiveModelSerializers::Adapter::Null.new(serializer, options))
|
||||||
end
|
end
|
||||||
|
class << self
|
||||||
|
extend ActiveModelSerializers::Deprecate
|
||||||
|
deprecate :new, 'ActiveModelSerializers::Adapter::Null.new'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
require 'active_model/serializer/collection_serializer'
|
require 'active_model/serializer/collection_serializer'
|
||||||
class ActiveModel::Serializer
|
class ActiveModel::Serializer
|
||||||
class ArraySerializer < CollectionSerializer
|
class ArraySerializer < CollectionSerializer
|
||||||
def initialize(*)
|
class << self
|
||||||
warn "Calling deprecated ArraySerializer in #{caller[0..2].join(', ')}. Please use CollectionSerializer"
|
extend ActiveModelSerializers::Deprecate
|
||||||
super
|
deprecate :new, 'ActiveModel::CollectionSerializer.'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -11,6 +11,7 @@ module ActiveModelSerializers
|
|||||||
autoload :Test
|
autoload :Test
|
||||||
autoload :Adapter
|
autoload :Adapter
|
||||||
autoload :JsonPointer
|
autoload :JsonPointer
|
||||||
|
autoload :Deprecate
|
||||||
|
|
||||||
class << self; attr_accessor :logger; end
|
class << self; attr_accessor :logger; end
|
||||||
self.logger = ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new(STDOUT))
|
self.logger = ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new(STDOUT))
|
||||||
@ -19,6 +20,15 @@ module ActiveModelSerializers
|
|||||||
ActiveModel::Serializer.config
|
ActiveModel::Serializer.config
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# The file name and line number of the caller of the caller of this method.
|
||||||
|
def self.location_of_caller
|
||||||
|
caller[1] =~ /(.*?):(\d+).*?$/i
|
||||||
|
file = Regexp.last_match(1)
|
||||||
|
lineno = Regexp.last_match(2).to_i
|
||||||
|
|
||||||
|
[file, lineno]
|
||||||
|
end
|
||||||
|
|
||||||
require 'active_model/serializer/version'
|
require 'active_model/serializer/version'
|
||||||
require 'active_model/serializer'
|
require 'active_model/serializer'
|
||||||
require 'active_model/serializable_resource'
|
require 'active_model/serializable_resource'
|
||||||
|
|||||||
49
lib/active_model_serializers/deprecate.rb
Normal file
49
lib/active_model_serializers/deprecate.rb
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
##
|
||||||
|
# Provides a single method +deprecate+ to be used to declare when
|
||||||
|
# something is going away.
|
||||||
|
#
|
||||||
|
# class Legacy
|
||||||
|
# def self.klass_method
|
||||||
|
# # ...
|
||||||
|
# end
|
||||||
|
#
|
||||||
|
# def instance_method
|
||||||
|
# # ...
|
||||||
|
# end
|
||||||
|
#
|
||||||
|
# extend ActiveModelSerializers::Deprecate
|
||||||
|
# deprecate :instance_method, "ActiveModelSerializers::NewPlace#new_method"
|
||||||
|
#
|
||||||
|
# class << self
|
||||||
|
# extend ActiveModelSerializers::Deprecate
|
||||||
|
# deprecate :klass_method, :none
|
||||||
|
# end
|
||||||
|
# end
|
||||||
|
#
|
||||||
|
# Adapted from https://github.com/rubygems/rubygems/blob/1591331/lib/rubygems/deprecate.rb
|
||||||
|
module ActiveModelSerializers
|
||||||
|
module Deprecate
|
||||||
|
##
|
||||||
|
# Simple deprecation method that deprecates +name+ by wrapping it up
|
||||||
|
# in a dummy method. It warns on each call to the dummy method
|
||||||
|
# telling the user of +replacement+ (unless +replacement+ is :none) that it is planned to go away.
|
||||||
|
|
||||||
|
def deprecate(name, replacement)
|
||||||
|
old = "_deprecated_#{name}"
|
||||||
|
alias_method old, name
|
||||||
|
class_eval do
|
||||||
|
define_method(name) do |*args, &block|
|
||||||
|
target = self.is_a?(Module) ? "#{self}." : "#{self.class}#"
|
||||||
|
msg = ["NOTE: #{target}#{name} is deprecated",
|
||||||
|
replacement == :none ? ' with no replacement' : "; use #{replacement} instead",
|
||||||
|
"\n#{target}#{name} called from #{ActiveModelSerializers.location_of_caller.join(":")}"
|
||||||
|
]
|
||||||
|
warn "#{msg.join}."
|
||||||
|
send old, *args, &block
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
module_function :deprecate
|
||||||
|
end
|
||||||
|
end
|
||||||
@ -11,7 +11,7 @@ module ActiveModel
|
|||||||
_, stderr = capture_io do
|
_, stderr = capture_io do
|
||||||
super
|
super
|
||||||
end
|
end
|
||||||
if stderr !~ /Calling deprecated ArraySerializer/
|
if stderr !~ /NOTE: ActiveModel::Serializer::ArraySerializer.new is deprecated/
|
||||||
fail Minitest::Assertion, stderr
|
fail Minitest::Assertion, stderr
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -29,7 +29,7 @@ module ActiveModel
|
|||||||
serializer = ArraySerializer.new([comment, post])
|
serializer = ArraySerializer.new([comment, post])
|
||||||
assert_equal 'comments', serializer.json_key
|
assert_equal 'comments', serializer.json_key
|
||||||
end
|
end
|
||||||
assert_match(/Calling deprecated ArraySerializer/, stderr)
|
assert_match(/NOTE: ActiveModel::Serializer::ArraySerializer.new is deprecated/, stderr)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user