Class: ActionView::LookupContext
Relationships & Source Files | |
Namespace Children | |
Modules:
| |
Classes:
| |
Super Chains via Extension / Inclusion / Inheritance | |
Instance Chain:
|
|
Inherits: | Object |
Defined in: | actionview/lib/action_view/lookup_context.rb |
Overview
LookupContext
is the object responsible for holding all information required for looking up templates, i.e. view paths and details. LookupContext
is also responsible for generating a key, given to view paths, used in the resolver cache lookup. Since this key is generated only once during the request, it speeds up all cache accesses.
Constant Summary
Accessors
- Included
Class Method Summary
Instance Attribute Summary
-
#formats=(values)
writeonly
Override formats= to expand [“/”] values and automatically add
:html
as fallback to:js
. -
#locale
rw
Override locale to return a symbol instead of array.
-
#locale=(value)
rw
Overload locale= to also set the
I18n.locale
. - #prefixes rw
- #registered_details rw
ViewPaths
- Included
DetailsCache
- Included
Instance Method Summary
ViewPaths
- Included
#any_templates?, | |
#append_view_path | Append a path to the list of view paths for the current |
#details_for_lookup, | |
#lookup_context |
|
#prepend_view_path | Prepend a path to the list of view paths for the current |
#template_exists?, | |
#_prefixes | The prefixes used in render “foo” shortcuts. |
DetailsCache
- Included
#disable_cache | Temporary skip passing the details_key forward. |
#_set_detail, | |
#details_key | Calculate the details key. |
Constructor Details
.new(view_paths, details = {}, prefixes = []) ⇒ LookupContext
# File 'actionview/lib/action_view/lookup_context.rb', line 232
def initialize(view_paths, details = {}, prefixes = []) @details_key = nil @digest_cache = nil @cache = true @prefixes = prefixes @details = initialize_details({}, details) @view_paths = build_view_paths(view_paths) end
Class Method Details
.register_detail(name, &block)
[ GitHub ]# File 'actionview/lib/action_view/lookup_context.rb', line 21
def self.register_detail(name, &block) registered_details << name Accessors::DEFAULT_PROCS[name] = block Accessors.define_method(:"default_#{name}", &block) Accessors.module_eval <<-METHOD, __FILE__, __LINE__ + 1 def #{name} @details[:#{name}] || [] end def #{name}=(value) value = value.present? ? Array(value) : default_#{name} _set_detail(:#{name}, value) if value != @details[:#{name}] end METHOD end
Instance Attribute Details
#formats=(values) (writeonly)
Override formats= to expand [“/”] values and automatically add :html
as fallback to :js
.
# File 'actionview/lib/action_view/lookup_context.rb', line 263
def formats=(values) if values values = values.dup values.concat(default_formats) if values.delete "*/*" values.uniq! unless Template::Types.valid_symbols?(values) invalid_values = values - Template::Types.symbols raise ArgumentError, "Invalid formats: #{invalid_values.map(&:inspect).join(", ")}" end if (values.length == 1) && (values[0] == :js) values << :html @html_fallback_for_js = true end end super(values) end
#locale (rw)
Override locale to return a symbol instead of array.
# File 'actionview/lib/action_view/lookup_context.rb', line 283
def locale @details[:locale].first end
#locale=(value) (rw)
Overload locale= to also set the I18n.locale
. If the current I18n.config
object responds to original_config, it means that it has a copy of the original ::I18n
configuration and it’s acting as proxy, which we need to skip.
#prefixes (rw)
[ GitHub ]# File 'actionview/lib/action_view/lookup_context.rb', line 16
attr_accessor :prefixes
#registered_details (rw)
[ GitHub ]# File 'actionview/lib/action_view/lookup_context.rb', line 18
singleton_class.attr_accessor :registered_details
Instance Method Details
#digest_cache
[ GitHub ]# File 'actionview/lib/action_view/lookup_context.rb', line 242
def digest_cache @digest_cache ||= DetailsKey.digest_cache(@details) end
#initialize_details(target, details) (private)
[ GitHub ]# File 'actionview/lib/action_view/lookup_context.rb', line 253
def initialize_details(target, details) LookupContext.registered_details.each do |k| target[k] = details[k] || Accessors::DEFAULT_PROCS[k].call end target end
#with_prepended_formats(formats)
[ GitHub ]# File 'actionview/lib/action_view/lookup_context.rb', line 246
def with_prepended_formats(formats) details = @details.dup details[:formats] = formats self.class.new(@view_paths, details, @prefixes) end