Class: ActionView::LookupContext
- Inherits:
-
Object
- Object
- ActionView::LookupContext
- Includes:
- Accessors, DetailsCache, ViewPaths
- Defined in:
- lib/action_view/lookup_context.rb
Overview
Action View Lookup Context
LookupContext is the object responsible to hold all information required to lookup templates, i.e. view paths and details. The LookupContext is also responsible to generate a key, given to view paths, used in the resolver cache lookup. Since this key is generated just once during the request, it speeds up all cache accesses.
Defined Under Namespace
Modules: Accessors, DetailsCache, ViewPaths Classes: DetailsKey
Constant Summary collapse
- @@fallbacks =
FallbackFileSystemResolver.instances
Instance Attribute Summary collapse
-
#prefixes ⇒ Object
:nodoc:.
-
#rendered_format ⇒ Object
:nodoc:.
Attributes included from ViewPaths
#html_fallback_for_js, #view_paths
Attributes included from DetailsCache
Class Method Summary collapse
Instance Method Summary collapse
-
#formats=(values) ⇒ Object
Override formats= to expand [“/”] values and automatically add :html as fallback to :js.
-
#initialize(view_paths, details = {}, prefixes = []) ⇒ LookupContext
constructor
A new instance of LookupContext.
-
#locale ⇒ Object
Override locale to return a symbol instead of array.
-
#locale=(value) ⇒ Object
Overload locale= to also set the I18n.locale.
-
#skip_default_locale! ⇒ Object
Do not use the default locale on template lookup.
-
#with_layout_format ⇒ Object
Uses the first format in the formats array for layout lookup.
Methods included from ViewPaths
#exists?, #find, #find_all, #with_fallbacks
Methods included from DetailsCache
Constructor Details
#initialize(view_paths, details = {}, prefixes = []) ⇒ LookupContext
Returns a new instance of LookupContext.
192 193 194 195 196 197 198 199 200 201 |
# File 'lib/action_view/lookup_context.rb', line 192 def initialize(view_paths, details = {}, prefixes = []) @details, @details_key = {}, nil @skip_default_locale = false @cache = true @prefixes = prefixes @rendered_format = nil self.view_paths = view_paths initialize_details(details) end |
Instance Attribute Details
#prefixes ⇒ Object
:nodoc:
14 15 16 |
# File 'lib/action_view/lookup_context.rb', line 14 def prefixes @prefixes end |
#rendered_format ⇒ Object
:nodoc:
14 15 16 |
# File 'lib/action_view/lookup_context.rb', line 14 def rendered_format @rendered_format end |
Class Method Details
.register_detail(name, options = {}, &block) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/action_view/lookup_context.rb', line 22 def self.register_detail(name, = {}, &block) self.registered_details << name initialize = registered_details.map { |n| "@details[:#{n}] = details[:#{n}] || default_#{n}" } Accessors.send :define_method, :"default_#{name}", &block Accessors.module_eval <<-METHOD, __FILE__, __LINE__ + 1 def #{name} @details.fetch(:#{name}, []) end def #{name}=(value) value = value.present? ? Array(value) : default_#{name} _set_detail(:#{name}, value) if value != @details[:#{name}] end remove_possible_method :initialize_details def initialize_details(details) #{initialize.join("\n")} end METHOD end |
Instance Method Details
#formats=(values) ⇒ Object
Override formats= to expand [“/”] values and automatically add :html as fallback to :js.
205 206 207 208 209 210 211 212 213 214 |
# File 'lib/action_view/lookup_context.rb', line 205 def formats=(values) if values values.concat(default_formats) if values.delete "*/*" if values == [:js] values << :html @html_fallback_for_js = true end end super(values) end |
#locale ⇒ Object
Override locale to return a symbol instead of array.
223 224 225 |
# File 'lib/action_view/lookup_context.rb', line 223 def locale @details[:locale].first end |
#locale=(value) ⇒ Object
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.
230 231 232 233 234 235 236 237 |
# File 'lib/action_view/lookup_context.rb', line 230 def locale=(value) if value config = I18n.config.respond_to?(:original_config) ? I18n.config.original_config : I18n.config config.locale = value end super(@skip_default_locale ? I18n.locale : default_locale) end |
#skip_default_locale! ⇒ Object
Do not use the default locale on template lookup.
217 218 219 220 |
# File 'lib/action_view/lookup_context.rb', line 217 def skip_default_locale! @skip_default_locale = true self.locale = nil end |
#with_layout_format ⇒ Object
Uses the first format in the formats array for layout lookup.
240 241 242 243 244 245 246 247 248 249 250 251 252 253 |
# File 'lib/action_view/lookup_context.rb', line 240 def with_layout_format if formats.size == 1 yield else old_formats = formats _set_detail(:formats, formats[0,1]) begin yield ensure _set_detail(:formats, old_formats) end end end |