HEX
Server: Apache
System: Windows NT MAGNETO-ARM 10.0 build 22000 (Windows 10) AMD64
User: Michel (0)
PHP: 7.4.7
Disabled: NONE
Upload Files
File: C:/Ruby27-x64/lib/ruby/gems/2.7.0/doc/activesupport-7.0.4.2/ri/Object/with_options-i.ri
U:RDoc::AnyMethod[iI"with_options:ETI"Object#with_options;TF:publico:RDoc::Markup::Document:@parts[#o:RDoc::Markup::Paragraph;	[
I"OAn elegant way to factor duplication out of options passed to a series of ;TI"Omethod calls. Each method called in the block, with the block variable as ;TI"Pthe receiver, will have its options merged with the default +options+ hash ;TI"Mprovided. Each method called on the block variable must take an options ;TI" hash as its final argument.;To:RDoc::Markup::BlankLineo;
;	[I"CWithout <tt>with_options</tt>, this code contains duplication:;T@o:RDoc::Markup::Verbatim;	[I"(class Account < ActiveRecord::Base
;TI"0  has_many :customers, dependent: :destroy
;TI"0  has_many :products,  dependent: :destroy
;TI"0  has_many :invoices,  dependent: :destroy
;TI"0  has_many :expenses,  dependent: :destroy
;TI"	end
;T:@format0o;
;	[I"@Using <tt>with_options</tt>, we can remove the duplication:;T@o;;	[
I"(class Account < ActiveRecord::Base
;TI"3  with_options dependent: :destroy do |assoc|
;TI"#    assoc.has_many :customers
;TI""    assoc.has_many :products
;TI""    assoc.has_many :invoices
;TI""    assoc.has_many :expenses
;TI"  end
;TI"	end
;T;
0o;
;	[I"3It can also be used with an explicit receiver:;T@o;;	[	I"JI18n.with_options locale: user.locale, scope: 'newsletter' do |i18n|
;TI"  subject i18n.t :subject
;TI"2  body    i18n.t :body, user_name: user.name
;TI"	end
;T;
0o;
;	[I"KWhen you don't pass an explicit receiver, it executes the whole block ;TI" in merging options context:;T@o;;	[
I"(class Account < ActiveRecord::Base
;TI"+  with_options dependent: :destroy do
;TI"    has_many :customers
;TI"    has_many :products
;TI"    has_many :invoices
;TI"    has_many :expenses
;TI"  end
;TI"	end
;T;
0o;
;	[I"Z<tt>with_options</tt> can also be nested since the call is forwarded to its receiver.;T@o;
;	[I"UNOTE: Each nesting level will merge inherited defaults in addition to their own.;T@o;;	[
I"%class Post < ActiveRecord::Base
;TI"@  with_options if: :persisted?, length: { minimum: 50 } do
;TI"9    validates :content, if: -> { content.present? }
;TI"  end
;TI"	end
;T;
0o;
;	[I"The code is equivalent to:;T@o;;	[I"Nvalidates :content, length: { minimum: 50 }, if: -> { content.present? }
;T;
0o;
;	[I"9Hence the inherited default for +if+ key is ignored.;T@o;
;	[I"LNOTE: You cannot call class methods implicitly inside of with_options. ;TI"?You can access these methods using the class name instead:;T@o;;	[I"&class Phone < ActiveRecord::Base
;TI"A  enum phone_number_type: { home: 0, office: 1, mobile: 2 }
;TI"
;TI"&  with_options presence: true do
;TI"X    validates :phone_number_type, inclusion: { in: Phone.phone_number_types.keys }
;TI"  end
;TI"	end
;T;
0o;
;	[I"SWhen the block argument is omitted, the decorated Object instance is returned:;T@o;;	[I"module MyStyledHelpers
;TI"  def styled
;TI"+    with_options style: "color: red;"
;TI"  end
;TI"	end
;TI"
;TI"%# styled.link_to "I'm red", "/"
;TI"7# #=> <a href="/" style="color: red;">I'm red</a>
;TI"
;TI"(# styled.button_tag "I'm red too!"
;TI"<# #=> <button style="color: red;">I'm red too!</button>;T;
0:
@fileI"7lib/active_support/core_ext/object/with_options.rb;T:0@omit_headings_from_table_of_contents_below000[I"(options, &block);T@uFI"Object;TcRDoc::NormalClass00