Skip to content

Commit 3ba5254

Browse files
committed
Merge pull request #1559 from groyoh/deperecation_dsl
Deperecation dsl
2 parents 1a312bc + 8dfbc48 commit 3ba5254

File tree

11 files changed

+95
-51
lines changed

11 files changed

+95
-51
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ Fixes:
2929
- [#1488](https://github.com/rails-api/active_model_serializers/pull/1488) Require ActiveSupport's string inflections (@nate00)
3030

3131
Misc:
32+
- [#1559](https://github.com/rails-api/active_model_serializers/pull/1559) Add a deprecation DSL. (@bf4 @groyoh)
3233
- [#1543](https://github.com/rails-api/active_model_serializers/pull/1543) Add the changes missing from #1535. (@groyoh)
3334
- [#1535](https://github.com/rails-api/active_model_serializers/pull/1535) Move the adapter and adapter folder to
3435
active_model_serializers folder and changes the module namespace. (@domitian @bf4)

lib/active_model/serializer/adapter.rb

Lines changed: 11 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,40 +3,20 @@ class Serializer
33
# @deprecated Use ActiveModelSerializers::Adapter instead
44
module Adapter
55
class << self
6-
def create(resource, options = {})
7-
warn_deprecation
8-
ActiveModelSerializers::Adapter.create(resource, options)
9-
end
10-
11-
def adapter_class(adapter)
12-
warn_deprecation
13-
ActiveModelSerializers::Adapter.adapter_class(adapter)
14-
end
15-
16-
def adapter_map
17-
warn_deprecation
18-
ActiveModelSerializers::Adapter.adapter_map
19-
end
6+
extend ActiveModelSerializers::Deprecate
207

21-
def adapters
22-
warn_deprecation
23-
ActiveModelSerializers::Adapter.adapters
8+
def self.delegate_and_deprecate(method)
9+
delegate method, to: ActiveModelSerializers::Adapter
10+
deprecate method, 'ActiveModelSerializers::Adapter.'
2411
end
12+
private_class_method :delegate_and_deprecate
2513

26-
def register(name, klass = name)
27-
warn_deprecation
28-
ActiveModelSerializers::Adapter.register(name, klass)
29-
end
30-
31-
def lookup(adapter)
32-
warn_deprecation
33-
ActiveModelSerializers::Adapter.lookup(adapter)
34-
end
35-
36-
def warn_deprecation
37-
warn "Calling deprecated #{name} (#{__FILE__}) from #{caller[1..3].join(', ')}. Please use ActiveModelSerializers::Adapter"
38-
end
39-
private :warn_deprecation
14+
delegate_and_deprecate :create
15+
delegate_and_deprecate :adapter_class
16+
delegate_and_deprecate :adapter_map
17+
delegate_and_deprecate :adapters
18+
delegate_and_deprecate :register
19+
delegate_and_deprecate :lookup
4020
end
4121

4222
require 'active_model/serializer/adapter/base'

lib/active_model/serializer/adapter/attributes.rb

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
require 'active_model_serializers/adapter/attributes'
2-
31
module ActiveModel
42
class Serializer
53
module Adapter
64
class Attributes < DelegateClass(ActiveModelSerializers::Adapter::Attributes)
75
def initialize(serializer, options = {})
8-
warn "Calling deprecated #{self.class.name} (#{__FILE__}) from #{caller[0..2].join(', ')}. Please use #{self.class.name.sub('ActiveModel::Serializer', 'ActiveModelSerializers')}"
96
super(ActiveModelSerializers::Adapter::Attributes.new(serializer, options))
107
end
8+
class << self
9+
extend ActiveModelSerializers::Deprecate
10+
deprecate :new, 'ActiveModelSerializers::Adapter::Json.'
11+
end
1112
end
1213
end
1314
end

lib/active_model/serializer/adapter/base.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ module ActiveModel
22
class Serializer
33
module Adapter
44
class Base < DelegateClass(ActiveModelSerializers::Adapter::Base)
5-
def self.inherited(base)
6-
warn "Inheriting deprecated ActiveModel::Serializer::Adapter::Base in #{caller[0..2].join(', ')}. Please use ActiveModelSerializers::Adapter::Base"
7-
super
5+
class << self
6+
extend ActiveModelSerializers::Deprecate
7+
deprecate :inherited, 'ActiveModelSerializers::Adapter::Base.'
88
end
99

1010
def initialize(serializer, options = {})

lib/active_model/serializer/adapter/json.rb

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
require 'active_model_serializers/adapter/json'
2-
31
module ActiveModel
42
class Serializer
53
module Adapter
64
class Json < DelegateClass(ActiveModelSerializers::Adapter::Json)
75
def initialize(serializer, options = {})
8-
warn "Calling deprecated #{self.class.name} (#{__FILE__}) from #{caller[0..2].join(', ')}. Please use #{self.class.name.sub('ActiveModel::Serializer', 'ActiveModelSerializers')}"
96
super(ActiveModelSerializers::Adapter::Json.new(serializer, options))
107
end
8+
class << self
9+
extend ActiveModelSerializers::Deprecate
10+
deprecate :new, 'ActiveModelSerializers::Adapter::Json.new'
11+
end
1112
end
1213
end
1314
end

lib/active_model/serializer/adapter/json_api.rb

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
require 'active_model_serializers/adapter/json_api'
2-
31
module ActiveModel
42
class Serializer
53
module Adapter
64
class JsonApi < DelegateClass(ActiveModelSerializers::Adapter::JsonApi)
75
def initialize(serializer, options = {})
8-
warn "Calling deprecated #{self.class.name} (#{__FILE__}) from #{caller[0..2].join(', ')}. Please use #{self.class.name.sub('ActiveModel::Serializer', 'ActiveModelSerializers')}"
96
super(ActiveModelSerializers::Adapter::JsonApi.new(serializer, options))
107
end
8+
class << self
9+
extend ActiveModelSerializers::Deprecate
10+
deprecate :new, 'ActiveModelSerializers::Adapter::JsonApi.new'
11+
end
1112
end
1213
end
1314
end

lib/active_model/serializer/adapter/null.rb

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
require 'active_model_serializers/adapter/null'
2-
31
module ActiveModel
42
class Serializer
53
module Adapter
64
class Null < DelegateClass(ActiveModelSerializers::Adapter::Null)
75
def initialize(serializer, options = {})
8-
warn "Calling deprecated #{self.class.name} (#{__FILE__}) from #{caller[0..2].join(', ')}. Please use #{self.class.name.sub('ActiveModel::Serializer', 'ActiveModelSerializers')}"
96
super(ActiveModelSerializers::Adapter::Null.new(serializer, options))
107
end
8+
class << self
9+
extend ActiveModelSerializers::Deprecate
10+
deprecate :new, 'ActiveModelSerializers::Adapter::Null.new'
11+
end
1112
end
1213
end
1314
end
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
require 'active_model/serializer/collection_serializer'
22
class ActiveModel::Serializer
33
class ArraySerializer < CollectionSerializer
4-
def initialize(*)
5-
warn "Calling deprecated ArraySerializer in #{caller[0..2].join(', ')}. Please use CollectionSerializer"
6-
super
4+
class << self
5+
extend ActiveModelSerializers::Deprecate
6+
deprecate :new, 'ActiveModel::CollectionSerializer.'
77
end
88
end
99
end

lib/active_model_serializers.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ module ActiveModelSerializers
1111
autoload :Test
1212
autoload :Adapter
1313
autoload :JsonPointer
14+
autoload :Deprecate
1415

1516
class << self; attr_accessor :logger; end
1617
self.logger = ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new(STDOUT))
@@ -19,6 +20,15 @@ def self.config
1920
ActiveModel::Serializer.config
2021
end
2122

23+
# The file name and line number of the caller of the caller of this method.
24+
def self.location_of_caller
25+
caller[1] =~ /(.*?):(\d+).*?$/i
26+
file = Regexp.last_match(1)
27+
lineno = Regexp.last_match(2).to_i
28+
29+
[file, lineno]
30+
end
31+
2232
require 'active_model/serializer/version'
2333
require 'active_model/serializer'
2434
require 'active_model/serializable_resource'
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
##
2+
# Provides a single method +deprecate+ to be used to declare when
3+
# something is going away.
4+
#
5+
# class Legacy
6+
# def self.klass_method
7+
# # ...
8+
# end
9+
#
10+
# def instance_method
11+
# # ...
12+
# end
13+
#
14+
# extend ActiveModelSerializers::Deprecate
15+
# deprecate :instance_method, "ActiveModelSerializers::NewPlace#new_method"
16+
#
17+
# class << self
18+
# extend ActiveModelSerializers::Deprecate
19+
# deprecate :klass_method, :none
20+
# end
21+
# end
22+
#
23+
# Adapted from https://github.com/rubygems/rubygems/blob/1591331/lib/rubygems/deprecate.rb
24+
module ActiveModelSerializers
25+
module Deprecate
26+
##
27+
# Simple deprecation method that deprecates +name+ by wrapping it up
28+
# in a dummy method. It warns on each call to the dummy method
29+
# telling the user of +replacement+ (unless +replacement+ is :none) that it is planned to go away.
30+
31+
def deprecate(name, replacement)
32+
old = "_deprecated_#{name}"
33+
alias_method old, name
34+
class_eval do
35+
define_method(name) do |*args, &block|
36+
target = self.is_a?(Module) ? "#{self}." : "#{self.class}#"
37+
msg = ["NOTE: #{target}#{name} is deprecated",
38+
replacement == :none ? ' with no replacement' : "; use #{replacement} instead",
39+
"\n#{target}#{name} called from #{ActiveModelSerializers.location_of_caller.join(":")}"
40+
]
41+
warn "#{msg.join}."
42+
send old, *args, &block
43+
end
44+
end
45+
end
46+
47+
module_function :deprecate
48+
end
49+
end

0 commit comments

Comments
 (0)