Module: ActionView::AbstractRenderer::ObjectRendering
Do not use. This module is for internal use only.
Relationships & Source Files | |
Defined in: | actionview/lib/action_view/renderer/abstract_renderer.rb |
Constant Summary
-
IDENTIFIER_ERROR_MESSAGE =
# File 'actionview/lib/action_view/renderer/abstract_renderer.rb', line 54"The partial name (%s) is not a valid Ruby identifier; " \ "make sure your partial name starts with underscore."
-
OPTION_AS_ERROR_MESSAGE =
# File 'actionview/lib/action_view/renderer/abstract_renderer.rb', line 57"The value (%s) of the option `as` is not a valid Ruby identifier; " \ "make sure it starts with lowercase letter, " \ "and is followed by any combination of letters, numbers and underscores."
-
PREFIXED_PARTIAL_NAMES =
# File 'actionview/lib/action_view/renderer/abstract_renderer.rb', line 33Concurrent::Map.new do |h, k| h.compute_if_absent(k) { Concurrent::Map.new } end
Instance Method Summary
- #initialize(lookup_context, options)
- #local_variable(path) private
- #merge_prefix_into_object_path(prefix, object_path) private
-
#partial_path(object, view)
private
Obtains the path to where the object’s partial is located.
- #raise_invalid_identifier(path) private
- #raise_invalid_option_as(as) private
Instance Method Details
#initialize(lookup_context, options)
[ GitHub ]# File 'actionview/lib/action_view/renderer/abstract_renderer.rb', line 37
def initialize(lookup_context, ) super @context_prefix = lookup_context.prefixes.first end
#local_variable(path) (private)
[ GitHub ]# File 'actionview/lib/action_view/renderer/abstract_renderer.rb', line 43
def local_variable(path) if as = @options[:as] raise_invalid_option_as(as) unless /\A[a-z_]\w*\z/.match?(as.to_s) as.to_sym else base = path.end_with?("/") ? "" : File.basename(path) raise_invalid_identifier(path) unless base =~ /\A_?(.*?)(?:\.\w+)*\z/ $1.to_sym end end
#merge_prefix_into_object_path(prefix, object_path) (private)
[ GitHub ]# File 'actionview/lib/action_view/renderer/abstract_renderer.rb', line 92
def merge_prefix_into_object_path(prefix, object_path) if prefix.include?(?/) && object_path.include?(?/) prefixes = [] prefix_array = File.dirname(prefix).split("/") object_path_array = object_path.split("/")[0..-3] # skip model dir & partial prefix_array.each_with_index do |dir, index| break if dir == object_path_array[index] prefixes << dir end (prefixes << object_path).join("/") else object_path end end
#partial_path(object, view) (private)
Obtains the path to where the object’s partial is located. If the object responds to to_partial_path
, then to_partial_path
will be called and will provide the path. If the object does not respond to to_partial_path
, then an ArgumentError
is raised.
If prefix_partial_path_with_controller_namespace
is true, then this method will prefix the partial paths with a namespace.
# File 'actionview/lib/action_view/renderer/abstract_renderer.rb', line 76
def partial_path(object, view) object = object.to_model if object.respond_to?(:to_model) path = if object.respond_to?(:to_partial_path) object.to_partial_path else raise ArgumentError.new("'#{object.inspect}' is not an ActiveModel-compatible object. It must implement #to_partial_path.") end if view.prefix_partial_path_with_controller_namespace PREFIXED_PARTIAL_NAMES[@context_prefix][path] ||= merge_prefix_into_object_path(@context_prefix, path.dup) else path end end
#raise_invalid_identifier(path) (private)
# File 'actionview/lib/action_view/renderer/abstract_renderer.rb', line 61
def raise_invalid_identifier(path) raise ArgumentError, IDENTIFIER_ERROR_MESSAGE % path end
#raise_invalid_option_as(as) (private)
# File 'actionview/lib/action_view/renderer/abstract_renderer.rb', line 65
def raise_invalid_option_as(as) raise ArgumentError, OPTION_AS_ERROR_MESSAGE % as end