Class: ActionView::Helpers::InstanceTag

Inherits:
Object
  • Object
show all
Includes:
DateHelper, FormOptionsHelper, TagHelper
Defined in:
lib/action_view/helpers/date_helper.rb,
lib/action_view/helpers/form_helper.rb,
lib/action_view/helpers/form_options_helper.rb,
lib/action_view/helpers/active_record_helper.rb

Overview

:nodoc:

Constant Summary collapse

DEFAULT_FIELD_OPTIONS =
{ "size" => 30 }.freeze
DEFAULT_RADIO_OPTIONS =
{ }.freeze
DEFAULT_TEXT_AREA_OPTIONS =
{ "cols" => 40, "rows" => 20 }.freeze
DEFAULT_DATE_OPTIONS =
{ :discard_type => true }.freeze

Constants included from FormOptionsHelper

FormOptionsHelper::COUNTRIES

Constants included from DateHelper

DateHelper::DEFAULT_PREFIX

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from FormOptionsHelper

#collection_select, #country_options_for_select, #country_select, #option_groups_from_collection_for_select, #options_for_select, #options_from_collection_for_select, #select, #time_zone_options_for_select, #time_zone_select

Methods included from TagHelper

#cdata_section, #escape_once

Methods included from DateHelper

#date_select, #datetime_select, #distance_of_time_in_words, #select_date, #select_datetime, #select_day, #select_hour, #select_minute, #select_month, #select_second, #select_time, #select_year, #time_ago_in_words, #time_select

Constructor Details

#initialize(object_name, method_name, template_object, local_binding = nil, object = nil) ⇒ InstanceTag

Returns a new instance of InstanceTag.



238
239
240
241
242
243
244
245
246
247
248
249
# File 'lib/action_view/helpers/form_helper.rb', line 238

def initialize(object_name, method_name, template_object, local_binding = nil, object = nil)
  @object_name, @method_name = object_name.to_s.dup, method_name.to_s.dup
  @template_object, @local_binding = template_object, local_binding
  @object = object
  if @object_name.sub!(/\[\]$/,"")
    if object ||= @template_object.instance_variable_get("@#{Regexp.last_match.pre_match}") and object.respond_to?(:id_before_type_cast)
      @auto_index = object.id_before_type_cast
    else
      raise ArgumentError, "object[] naming but object param and @object var don't exist or don't respond to id_before_type_cast: #{object.inspect}"
    end
  end
end

Instance Attribute Details

#method_nameObject (readonly)

Returns the value of attribute method_name.



231
232
233
# File 'lib/action_view/helpers/form_helper.rb', line 231

def method_name
  @method_name
end

#object_nameObject (readonly)

Returns the value of attribute object_name.



231
232
233
# File 'lib/action_view/helpers/form_helper.rb', line 231

def object_name
  @object_name
end

Class Method Details

.check_box_checked?(value, checked_value) ⇒ Boolean

Returns:

  • (Boolean)


360
361
362
363
364
365
366
367
368
369
370
371
372
373
# File 'lib/action_view/helpers/form_helper.rb', line 360

def check_box_checked?(value, checked_value)
  case value
  when TrueClass, FalseClass
    value
  when NilClass
    false
  when Integer
    value != 0
  when String
    value == checked_value
  else
    value.to_i != 0
  end
end

.radio_button_checked?(value, checked_value) ⇒ Boolean

Returns:

  • (Boolean)


375
376
377
# File 'lib/action_view/helpers/form_helper.rb', line 375

def radio_button_checked?(value, checked_value)
  value.to_s == checked_value.to_s
end

.value(object, method_name) ⇒ Object



348
349
350
# File 'lib/action_view/helpers/form_helper.rb', line 348

def value(object, method_name)
  object.send method_name unless object.nil?
end

.value_before_type_cast(object, method_name) ⇒ Object



352
353
354
355
356
357
358
# File 'lib/action_view/helpers/form_helper.rb', line 352

def value_before_type_cast(object, method_name)
  unless object.nil?
    object.respond_to?(method_name + "_before_type_cast") ?
    object.send(method_name + "_before_type_cast") :
    object.send(method_name)
  end
end

Instance Method Details

#column_typeObject



232
233
234
# File 'lib/action_view/helpers/active_record_helper.rb', line 232

def column_type
  object.send("column_for_attribute", @method_name).type
end

#content_tag(name, value, options) ⇒ Object



189
190
191
192
193
194
195
# File 'lib/action_view/helpers/active_record_helper.rb', line 189

def (name, value, options)
  if object.respond_to?("errors") && object.errors.respond_to?("on")
    error_wrapping((name, value, options), object.errors.on(@method_name))
  else
    (name, value, options)
  end
end

#content_tag_without_error_wrappingObject



188
# File 'lib/action_view/helpers/active_record_helper.rb', line 188

alias_method :content_tag_without_error_wrapping, :content_tag

#error_messageObject



228
229
230
# File 'lib/action_view/helpers/active_record_helper.rb', line 228

def error_message
  object.errors.on(@method_name)
end

#error_wrapping(html_tag, has_error) ⇒ Object



224
225
226
# File 'lib/action_view/helpers/active_record_helper.rb', line 224

def error_wrapping(html_tag, has_error)
  has_error ? Base.field_error_proc.call(html_tag, self) : html_tag
end

#objectObject



335
336
337
# File 'lib/action_view/helpers/form_helper.rb', line 335

def object
  @object || @template_object.instance_variable_get("@#{@object_name}")
end

#tag(name, options) ⇒ Object



180
181
182
183
184
185
186
# File 'lib/action_view/helpers/active_record_helper.rb', line 180

def tag(name, options)
  if object.respond_to?("errors") && object.errors.respond_to?("on")
    error_wrapping(tag_without_error_wrapping(name, options), object.errors.on(@method_name))
  else
    tag_without_error_wrapping(name, options)
  end
end

#tag_without_error_wrappingObject



179
# File 'lib/action_view/helpers/active_record_helper.rb', line 179

alias_method :tag_without_error_wrapping, :tag

#to_boolean_select_tag(options = {}) ⇒ Object



318
319
320
321
322
323
324
325
326
327
328
329
# File 'lib/action_view/helpers/form_helper.rb', line 318

def to_boolean_select_tag(options = {})
  options = options.stringify_keys
  add_default_name_and_id(options)
  value = value(object)
  tag_text = "<select"
  tag_text << tag_options(options)
  tag_text << "><option value=\"false\""
  tag_text << " selected" if value == false
  tag_text << ">False</option><option value=\"true\""
  tag_text << " selected" if value
  tag_text << ">True</option></select>"
end

#to_check_box_tag(options = {}, checked_value = "1", unchecked_value = "0") ⇒ Object



294
295
296
297
298
299
300
301
302
303
304
305
306
307
# File 'lib/action_view/helpers/form_helper.rb', line 294

def to_check_box_tag(options = {}, checked_value = "1", unchecked_value = "0")
  options = options.stringify_keys
  options["type"]     = "checkbox"
  options["value"]    = checked_value
  if options.has_key?("checked")
    cv = options.delete "checked"
    checked = cv == true || cv == "checked"
  else
    checked = self.class.check_box_checked?(value(object), checked_value)
  end
  options["checked"] = "checked" if checked
  add_default_name_and_id(options)
  tag("input", options) << tag("input", "name" => options["name"], "type" => "hidden", "value" => unchecked_value)
end

#to_collection_select_tag(collection, value_method, text_method, options, html_options) ⇒ Object



305
306
307
308
309
310
311
312
# File 'lib/action_view/helpers/form_options_helper.rb', line 305

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)
  (
    "select", add_options(options_from_collection_for_select(collection, value_method, text_method, value), options, value), html_options
  )
end

#to_content_tag(tag_name, options = {}) ⇒ Object



331
332
333
# File 'lib/action_view/helpers/form_helper.rb', line 331

def (tag_name, options = {})
  (tag_name, value(object), options)
end

#to_country_select_tag(priority_countries, options, html_options) ⇒ Object



314
315
316
317
318
319
# File 'lib/action_view/helpers/form_options_helper.rb', line 314

def to_country_select_tag(priority_countries, options, html_options)
  html_options = html_options.stringify_keys
  add_default_name_and_id(html_options)
  value = value(object)
  ("select", add_options(country_options_for_select(value, priority_countries), options, value), html_options)
end

#to_date_select_tag(options = {}) ⇒ Object



347
348
349
# File 'lib/action_view/helpers/date_helper.rb', line 347

def to_date_select_tag(options = {})
  date_or_time_select options.merge(:discard_hour => true)
end

#to_date_select_tag_without_error_wrappingObject



197
198
199
# File 'lib/action_view/helpers/active_record_helper.rb', line 197

def to_date_select_tag(options = {})
  date_or_time_select options.merge(:discard_hour => true)
end

#to_date_tagObject



309
310
311
312
313
314
315
316
# File 'lib/action_view/helpers/form_helper.rb', line 309

def to_date_tag()
  defaults = DEFAULT_DATE_OPTIONS.dup
  date     = value(object) || Date.today
  options  = Proc.new { |position| defaults.merge(:prefix => "#{@object_name}[#{@method_name}(#{position}i)]") }
  html_day_select(date, options.call(3)) +
  html_month_select(date, options.call(2)) +
  html_year_select(date, options.call(1))
end

#to_datetime_select_tag(options = {}) ⇒ Object



355
356
357
# File 'lib/action_view/helpers/date_helper.rb', line 355

def to_datetime_select_tag(options = {})
  date_or_time_select options
end

#to_datetime_select_tag_without_error_wrappingObject



206
207
208
# File 'lib/action_view/helpers/active_record_helper.rb', line 206

def to_datetime_select_tag(options = {})
  date_or_time_select options
end

#to_input_field_tag(field_type, options = {}) ⇒ Object



251
252
253
254
255
256
257
258
259
260
261
262
# File 'lib/action_view/helpers/form_helper.rb', line 251

def to_input_field_tag(field_type, options = {})
  options = options.stringify_keys
  options["size"] ||= options["maxlength"] || DEFAULT_FIELD_OPTIONS["size"]
  options = DEFAULT_FIELD_OPTIONS.merge(options)
  if field_type == "hidden"
    options.delete("size")
  end
  options["type"] = field_type
  options["value"] ||= value_before_type_cast(object) unless field_type == "file"
  add_default_name_and_id(options)
  tag("input", options)
end

#to_radio_button_tag(tag_value, options = {}) ⇒ Object



264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
# File 'lib/action_view/helpers/form_helper.rb', line 264

def to_radio_button_tag(tag_value, options = {})
  options = DEFAULT_RADIO_OPTIONS.merge(options.stringify_keys)
  options["type"]     = "radio"
  options["value"]    = tag_value
  if options.has_key?("checked")
    cv = options.delete "checked"
    checked = cv == true || cv == "checked"
  else
    checked = self.class.radio_button_checked?(value(object), tag_value)
  end
  options["checked"]  = "checked" if checked
  pretty_tag_value    = tag_value.to_s.gsub(/\s/, "_").gsub(/\W/, "").downcase
  options["id"]     ||= defined?(@auto_index) ?             
    "#{@object_name}_#{@auto_index}_#{@method_name}_#{pretty_tag_value}" :
    "#{@object_name}_#{@method_name}_#{pretty_tag_value}"
  add_default_name_and_id(options)
  tag("input", options)
end

#to_select_tag(choices, options, html_options) ⇒ Object



297
298
299
300
301
302
303
# File 'lib/action_view/helpers/form_options_helper.rb', line 297

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
  ("select", add_options(options_for_select(choices, selected_value), options, selected_value), html_options)
end

#to_tag(options = {}) ⇒ Object



159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
# File 'lib/action_view/helpers/active_record_helper.rb', line 159

def to_tag(options = {})
  case column_type
    when :string
      field_type = @method_name.include?("password") ? "password" : "text"
      to_input_field_tag(field_type, options)
    when :text
      to_text_area_tag(options)
    when :integer, :float, :decimal
      to_input_field_tag("text", options)
    when :date
      to_date_select_tag(options)
    when :datetime, :timestamp
      to_datetime_select_tag(options)
    when :time
      to_time_select_tag(options)
    when :boolean
      to_boolean_select_tag(options)
  end
end

#to_text_area_tag(options = {}) ⇒ Object



283
284
285
286
287
288
289
290
291
292
# File 'lib/action_view/helpers/form_helper.rb', line 283

def to_text_area_tag(options = {})
  options = DEFAULT_TEXT_AREA_OPTIONS.merge(options.stringify_keys)
  add_default_name_and_id(options)

  if size = options.delete("size")
    options["cols"], options["rows"] = size.split("x")
  end

  ("textarea", html_escape(options.delete('value') || value_before_type_cast(object)), options)
end

#to_time_select_tag(options = {}) ⇒ Object



351
352
353
# File 'lib/action_view/helpers/date_helper.rb', line 351

def to_time_select_tag(options = {})
  date_or_time_select options.merge(:discard_year => true, :discard_month => true)
end

#to_time_select_tag_without_error_wrappingObject



215
216
217
# File 'lib/action_view/helpers/active_record_helper.rb', line 215

def to_time_select_tag(options = {})
  date_or_time_select options.merge(:discard_year => true, :discard_month => true)
end

#to_time_zone_select_tag(priority_zones, options, html_options) ⇒ Object



321
322
323
324
325
326
327
328
329
330
331
# File 'lib/action_view/helpers/form_options_helper.rb', line 321

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)
  ("select",
    add_options(
      time_zone_options_for_select(value, priority_zones, options[:model] || TimeZone),
      options, value
    ), html_options
  )
end

#value(object) ⇒ Object



339
340
341
# File 'lib/action_view/helpers/form_helper.rb', line 339

def value(object)
  self.class.value(object, @method_name)
end

#value_before_type_cast(object) ⇒ Object



343
344
345
# File 'lib/action_view/helpers/form_helper.rb', line 343

def value_before_type_cast(object)
  self.class.value_before_type_cast(object, @method_name)
end