aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/core_ext/object/with_options.rb
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2009-05-20 16:49:21 -0700
committerJeremy Kemper <jeremy@bitsweat.net>2009-05-20 18:12:44 -0700
commit68398838544a778244e6028f2c30deb7313ea0b2 (patch)
treed37102f36827549733ac8f241fd965003d7eedd8 /activesupport/lib/active_support/core_ext/object/with_options.rb
parent429a00f225b24b938575ed40d11fa07987e12a6f (diff)
downloadrails-68398838544a778244e6028f2c30deb7313ea0b2.tar.gz
rails-68398838544a778244e6028f2c30deb7313ea0b2.tar.bz2
rails-68398838544a778244e6028f2c30deb7313ea0b2.zip
Break up misc Object extensions
Diffstat (limited to 'activesupport/lib/active_support/core_ext/object/with_options.rb')
-rw-r--r--activesupport/lib/active_support/core_ext/object/with_options.rb24
1 files changed, 24 insertions, 0 deletions
diff --git a/activesupport/lib/active_support/core_ext/object/with_options.rb b/activesupport/lib/active_support/core_ext/object/with_options.rb
new file mode 100644
index 0000000000..dd38b7d261
--- /dev/null
+++ b/activesupport/lib/active_support/core_ext/object/with_options.rb
@@ -0,0 +1,24 @@
+class Object
+ # An elegant way to factor duplication out of options passed to a series of
+ # method calls. Each method called in the block, with the block variable as
+ # the receiver, will have its options merged with the default +options+ hash
+ # provided. Each method called on the block variable must take an options
+ # hash as its final argument.
+ #
+ # with_options :order => 'created_at', :class_name => 'Comment' do |post|
+ # post.has_many :comments, :conditions => ['approved = ?', true], :dependent => :delete_all
+ # post.has_many :unapproved_comments, :conditions => ['approved = ?', false]
+ # post.has_many :all_comments
+ # end
+ #
+ # Can also be used with an explicit receiver:
+ #
+ # map.with_options :controller => "people" do |people|
+ # people.connect "/people", :action => "index"
+ # people.connect "/people/:id", :action => "show"
+ # end
+ #
+ def with_options(options)
+ yield ActiveSupport::OptionMerger.new(self, options)
+ end
+end