class ActionView::Helpers::InstanceTag

def add_options(option_tags, options, value = nil)

def add_options(option_tags, options, value = nil)
  if options[:include_blank]
    option_tags = content_tag('option', options[:include_blank].kind_of?(String) ? options[:include_blank] : nil, :value => '') + "\n" + option_tags
  end
  if value.blank? && options[:prompt]
    prompt = options[:prompt].kind_of?(String) ? options[:prompt] : I18n.translate('helpers.select.prompt', :default => 'Please select')
    option_tags = content_tag('option', prompt, :value => '') + "\n" + option_tags
  end
  option_tags
end

def datetime_selector(options, html_options)

def datetime_selector(options, html_options)
  datetime = value(object) || default_datetime(options)
  options = options.dup
  options[:field_name]           = @method_name
  options[:include_position]     = true
  options[:prefix]             ||= @object_name
  options[:index]                = @auto_index if @auto_index && !options.has_key?(:index)
  DateTimeSelector.new(datetime, options, html_options)
end

def default_datetime(options)

def default_datetime(options)
  return if options[:include_blank] || options[:prompt]
  case options[:default]
    when nil
      Time.current
    when Date, Time
      options[:default]
    else
      default = options[:default].dup
      # Rename :minute and :second to :min and :sec
      default[:min] ||= default[:minute]
      default[:sec] ||= default[:second]
      time = Time.current
      [:year, :month, :day, :hour, :min, :sec].each do |key|
        default[key] ||= time.send(key)
      end
      Time.utc_time(
        default[:year], default[:month], default[:day],
        default[:hour], default[:min], default[:sec]
      )
  end
end

def to_collection_select_tag(collection, value_method, text_method, options, html_options)

def to_collection_select_tag(collection, value_method, text_method, options, html_options)
  html_options = html_options.stringify_keys
  add_default_name_and_id(html_options)
  value = value(object)
  disabled_value = options.has_key?(:disabled) ? options[:disabled] : nil
  selected_value = options.has_key?(:selected) ? options[:selected] : value
  content_tag(
    "select", add_options(options_from_collection_for_select(collection, value_method, text_method, :selected => selected_value, :disabled => disabled_value), options, value), html_options
  )
end

def to_date_select_tag(options = {}, html_options = {})

:nodoc:
def to_date_select_tag(options = {}, html_options = {})
  datetime_selector(options, html_options).select_date.html_safe
end

def to_datetime_select_tag(options = {}, html_options = {})

def to_datetime_select_tag(options = {}, html_options = {})
  datetime_selector(options, html_options).select_datetime.html_safe
end

def to_grouped_collection_select_tag(collection, group_method, group_label_method, option_key_method, option_value_method, options, html_options)

def to_grouped_collection_select_tag(collection, group_method, group_label_method, option_key_method, option_value_method, options, html_options)
  html_options = html_options.stringify_keys
  add_default_name_and_id(html_options)
  value = value(object)
  content_tag(
    "select", add_options(option_groups_from_collection_for_select(collection, group_method, group_label_method, option_key_method, option_value_method, value), options, value), html_options
  )
end

def to_select_tag(choices, options, html_options)

def to_select_tag(choices, options, html_options)
  html_options = html_options.stringify_keys
  add_default_name_and_id(html_options)
  value = value(object)
  selected_value = options.has_key?(:selected) ? options[:selected] : value
  disabled_value = options.has_key?(:disabled) ? options[:disabled] : nil
  content_tag("select", add_options(options_for_select(choices, :selected => selected_value, :disabled => disabled_value), options, selected_value), html_options)
end

def to_time_select_tag(options = {}, html_options = {})

def to_time_select_tag(options = {}, html_options = {})
  datetime_selector(options, html_options).select_time.html_safe
end

def to_time_zone_select_tag(priority_zones, options, html_options)

def to_time_zone_select_tag(priority_zones, options, html_options)
  html_options = html_options.stringify_keys
  add_default_name_and_id(html_options)
  value = value(object)
  content_tag("select",
    add_options(
      time_zone_options_for_select(value || options[:default], priority_zones, options[:model] || ActiveSupport::TimeZone),
      options, value
    ), html_options
  )
end