Skip to content

Commit

Permalink
Merge pull request #14271 from akshay-vishnoi/fixes
Browse files Browse the repository at this point in the history
Deprecate superclass_delegating_accessor, use class_attribute instead.
  • Loading branch information
carlosantoniodasilva committed Mar 20, 2014
2 parents 3980d40 + 41548df commit a2a7f8b
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 6 deletions.
4 changes: 4 additions & 0 deletions activesupport/CHANGELOG.md
@@ -1,3 +1,7 @@
* Deprecate `Class#superclass_delegating_accessor`, use `Class#class_attribute` instead.

*Akshay Vishnoi*

* Ensure classes which `include Enumerable` get `#to_json` in addition to
`#as_json`.

Expand Down
@@ -1,5 +1,7 @@
require 'active_support/core_ext/kernel/singleton_class'
require 'active_support/core_ext/module/remove_method'
require 'active_support/core_ext/module/deprecation'


class Class
def superclass_delegating_accessor(name, options = {})
Expand All @@ -21,6 +23,8 @@ def superclass_delegating_accessor(name, options = {})
end
end

deprecate superclass_delegating_accessor: :class_attribute

private
# Take the object being set and store it in a method. This gives us automatic
# inheritance behavior, without having to store the object in an instance
Expand Down
34 changes: 28 additions & 6 deletions activesupport/test/core_ext/class/delegating_attributes_test.rb
Expand Up @@ -6,14 +6,18 @@ class Parent
end

class Child < Parent
superclass_delegating_accessor :some_attribute
ActiveSupport::Deprecation.silence do
superclass_delegating_accessor :some_attribute
end
end

class Mokopuna < Child
end

class PercysMom
superclass_delegating_accessor :superpower
ActiveSupport::Deprecation.silence do
superclass_delegating_accessor :superpower
end
end

class Percy < PercysMom
Expand All @@ -29,7 +33,10 @@ def setup
end

def test_simple_accessor_declaration
single_class.superclass_delegating_accessor :both
ActiveSupport::Deprecation.silence do
single_class.superclass_delegating_accessor :both
end

# Class should have accessor and mutator
# the instance should have an accessor only
assert_respond_to single_class, :both
Expand All @@ -40,7 +47,11 @@ def test_simple_accessor_declaration

def test_simple_accessor_declaration_with_instance_reader_false
_instance_methods = single_class.public_instance_methods
single_class.superclass_delegating_accessor :no_instance_reader, :instance_reader => false

ActiveSupport::Deprecation.silence do
single_class.superclass_delegating_accessor :no_instance_reader, :instance_reader => false
end

assert_respond_to single_class, :no_instance_reader
assert_respond_to single_class, :no_instance_reader=
assert !_instance_methods.include?(:no_instance_reader)
Expand All @@ -49,7 +60,9 @@ def test_simple_accessor_declaration_with_instance_reader_false
end

def test_working_with_simple_attributes
single_class.superclass_delegating_accessor :both
ActiveSupport::Deprecation.silence do
single_class.superclass_delegating_accessor :both
end

single_class.both = "HMMM"

Expand All @@ -65,7 +78,11 @@ def test_working_with_simple_attributes

def test_child_class_delegates_to_parent_but_can_be_overridden
parent = Class.new
parent.superclass_delegating_accessor :both

ActiveSupport::Deprecation.silence do
parent.superclass_delegating_accessor :both
end

child = Class.new(parent)
parent.both = "1"
assert_equal "1", child.both
Expand Down Expand Up @@ -97,4 +114,9 @@ def test_delegation_stops_for_nil
Child.some_attribute=nil
end

def test_deprecation_warning
assert_deprecated(/superclass_delegating_accessor is deprecated/) do
single_class.superclass_delegating_accessor :test_attribute
end
end
end

0 comments on commit a2a7f8b

Please sign in to comment.