aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2014-08-01 10:07:38 -0700
committerDavid Heinemeier Hansson <david@loudthinking.com>2014-08-01 10:07:38 -0700
commit702ad710b57bef45b081ebf42e6fa70820fdd810 (patch)
treed6b1542c65b2e80d3e921d04e58d77b60d5b92d2
parent20405e516b031db4d8230014d1dcf9601ed0a0f8 (diff)
downloadrails-702ad710b57bef45b081ebf42e6fa70820fdd810.tar.gz
rails-702ad710b57bef45b081ebf42e6fa70820fdd810.tar.bz2
rails-702ad710b57bef45b081ebf42e6fa70820fdd810.zip
Added Object#self which returns the object itself
-rw-r--r--activesupport/CHANGELOG.md6
-rw-r--r--activesupport/lib/active_support/core_ext/object.rb1
-rw-r--r--activesupport/lib/active_support/core_ext/object/self.rb10
-rw-r--r--activesupport/test/core_ext/object/self_test.rb9
4 files changed, 26 insertions, 0 deletions
diff --git a/activesupport/CHANGELOG.md b/activesupport/CHANGELOG.md
index 61e9927a07..cb57ad0e0a 100644
--- a/activesupport/CHANGELOG.md
+++ b/activesupport/CHANGELOG.md
@@ -1,3 +1,9 @@
+* Added Object#self which returns the object itself. Useful when dealing with a chaining scenario, like Active Record scopes:
+
+ Event.public_send(state.presence_in?([ :trashed, :drafted ]) ? :self).order(:created_at)
+
+ *DHH*
+
* `Object#with_options` executes block in merging option context when
explicit receiver in not passed.
diff --git a/activesupport/lib/active_support/core_ext/object.rb b/activesupport/lib/active_support/core_ext/object.rb
index f4f9152d6a..2646342b2e 100644
--- a/activesupport/lib/active_support/core_ext/object.rb
+++ b/activesupport/lib/active_support/core_ext/object.rb
@@ -2,6 +2,7 @@ require 'active_support/core_ext/object/acts_like'
require 'active_support/core_ext/object/blank'
require 'active_support/core_ext/object/duplicable'
require 'active_support/core_ext/object/deep_dup'
+require 'active_support/core_ext/object/self'
require 'active_support/core_ext/object/try'
require 'active_support/core_ext/object/inclusion'
diff --git a/activesupport/lib/active_support/core_ext/object/self.rb b/activesupport/lib/active_support/core_ext/object/self.rb
new file mode 100644
index 0000000000..5c51bf56c9
--- /dev/null
+++ b/activesupport/lib/active_support/core_ext/object/self.rb
@@ -0,0 +1,10 @@
+class Object
+ # Returns the object itself. Useful when dealing with a chaining scenario, like Active Record scopes:
+ #
+ # Event.public_send(state.presence_in?([ :trashed, :drafted ]) ? :self).order(:created_at)
+ #
+ # @return Object
+ def self
+ self
+ end
+end \ No newline at end of file
diff --git a/activesupport/test/core_ext/object/self_test.rb b/activesupport/test/core_ext/object/self_test.rb
new file mode 100644
index 0000000000..751199e41c
--- /dev/null
+++ b/activesupport/test/core_ext/object/self_test.rb
@@ -0,0 +1,9 @@
+require 'abstract_unit'
+require 'active_support/core_ext/object'
+
+class Object::SelfTest < ActiveSupport::TestCase
+ test 'self returns self' do
+ object = 'fun'
+ assert_equal object, object.self
+ end
+end