123456789_123456789_123456789_123456789_123456789_

Module: ActionView::Helpers::Tags::CollectionHelpers

Do not use. This module is for internal use only.
Relationships & Source Files
Namespace Children
Classes:
Extension / Inclusion / Inheritance Descendants
Included In:
Defined in: actionview/lib/action_view/helpers/tags/collection_helpers.rb

Instance Method Summary

Instance Method Details

#default_html_options_for_collection(item, value) (private)

Generate default options for collection helpers, such as :checked and :disabled.

[ GitHub ]

  
# File 'actionview/lib/action_view/helpers/tags/collection_helpers.rb', line 47

def default_html_options_for_collection(item, value)
  html_options = @html_options.dup

  [:checked, :selected, :disabled, :readonly].each do |option|
    current_value = @options[option]
    next if current_value.nil?

    accept = if current_value.respond_to?(:call)
      current_value.call(item)
    else
      Array(current_value).map(&:to_s).include?(value.to_s)
    end

    if accept
      html_options[option] = true
    elsif option == :checked
      html_options[option] = false
    end
  end

  html_options[:object] = @object
  html_options
end

#hidden_field (private)

[ GitHub ]

  
# File 'actionview/lib/action_view/helpers/tags/collection_helpers.rb', line 117

def hidden_field
  hidden_name = @html_options[:name] || hidden_field_name
  options = { id: nil, form: @html_options[:form] }
  @template_object.hidden_field_tag(hidden_name, "", options)
end

#hidden_field_name (private)

[ GitHub ]

  
# File 'actionview/lib/action_view/helpers/tags/collection_helpers.rb', line 123

def hidden_field_name
  "#{tag_name(false, @options[:index])}"
end

#initialize(object_name, method_name, template_object, collection, value_method, text_method, options, html_options)

[ GitHub ]

  
# File 'actionview/lib/action_view/helpers/tags/collection_helpers.rb', line 30

def initialize(object_name, method_name, template_object, collection, value_method, text_method, options, html_options)
  @collection   = collection
  @value_method = value_method
  @text_method  = text_method
  @html_options = html_options

  super(object_name, method_name, template_object, options)
end

#instantiate_builder(builder_class, item, value, text, html_options) (private)

[ GitHub ]

  
# File 'actionview/lib/action_view/helpers/tags/collection_helpers.rb', line 40

def instantiate_builder(builder_class, item, value, text, html_options)
  builder_class.new(@template_object, @object_name, @method_name, item,
                    sanitize_attribute_name(value), text, value, html_options)
end

#render_collection (private)

[ GitHub ]

  
# File 'actionview/lib/action_view/helpers/tags/collection_helpers.rb', line 85

def render_collection
  @collection.map do |item|
    value = value_for_collection(item, @value_method)
    text  = value_for_collection(item, @text_method)
    default_html_options = default_html_options_for_collection(item, value)
    additional_html_options = option_html_attributes(item)

    yield item, value, text, default_html_options.merge(additional_html_options)
  end.join.html_safe
end

#render_collection_for(builder_class, &block) (private)

[ GitHub ]

  
# File 'actionview/lib/action_view/helpers/tags/collection_helpers.rb', line 96

def render_collection_for(builder_class, &block)
  options = @options.stringify_keys
  rendered_collection = render_collection do |item, value, text, default_html_options|
    builder = instantiate_builder(builder_class, item, value, text, default_html_options)

    if block_given?
      @template_object.capture(builder, &block)
    else
      render_component(builder)
    end
  end

  # Prepend a hidden field to make sure something will be sent back to the
  # server if all radio buttons are unchecked.
  if options.fetch("include_hidden", true)
    hidden_field + rendered_collection
  else
    rendered_collection
  end
end

#sanitize_attribute_name(value) (private)

Sanitize the attribute name used for the label's for attribute in collection helpers. When the value is nil or results in an empty sanitized string, skip the trailing underscore to match the id generated by add_default_name_and_id_for_value.

[ GitHub ]

  
# File 'actionview/lib/action_view/helpers/tags/collection_helpers.rb', line 75

def sanitize_attribute_name(value)
  sanitized = sanitized_value(value)

  if sanitized.empty?
    sanitized_method_name.dup
  else
    "#{sanitized_method_name}_#{sanitized}"
  end
end