Class: Trestle::Form::Fields::Select

Inherits:
Trestle::Form::Field show all
Defined in:
lib/trestle/form/fields/select.rb

Direct Known Subclasses

TagSelect

Defined Under Namespace

Classes: Choices

Instance Attribute Summary collapse

Attributes inherited from Trestle::Form::Field

#block, #builder, #name, #options, #template

Instance Method Summary collapse

Methods inherited from Trestle::Form::Field

#defaults, #disabled?, #errors, #form_group, #normalize_options!, #readonly?, #render

Constructor Details

#initialize(builder, template, name, choices = nil, options = {}, html_options = {}, &block) ⇒ Select

Returns a new instance of Select.



7
8
9
10
11
12
13
14
# File 'lib/trestle/form/fields/select.rb', line 7

def initialize(builder, template, name, choices=nil, options={}, html_options={}, &block)
  super(builder, template, name, options, &block)

  @choices = choices || default_choices
  @choices = Choices.new(@choices) if @choices.nil? || @choices.is_a?(Enumerable)

  @html_options = default_html_options.merge(html_options)
end

Instance Attribute Details

#choicesObject (readonly)

Returns the value of attribute choices.



5
6
7
# File 'lib/trestle/form/fields/select.rb', line 5

def choices
  @choices
end

#html_optionsObject (readonly)

Returns the value of attribute html_options.



5
6
7
# File 'lib/trestle/form/fields/select.rb', line 5

def html_options
  @html_options
end

Instance Method Details

#clearable?Boolean

Returns:

  • (Boolean)


40
41
42
# File 'lib/trestle/form/fields/select.rb', line 40

def clearable?
  options[:allow_clear] || options[:prompt].present? || options[:include_blank].present?
end

#default_choicesObject



24
25
26
# File 'lib/trestle/form/fields/select.rb', line 24

def default_choices
  builder.object.send(name) if builder.object
end

#default_html_optionsObject



20
21
22
# File 'lib/trestle/form/fields/select.rb', line 20

def default_html_options
  Trestle::Options.new(class: ["form-select"], disabled: disabled? || readonly?, data: { controller: "select", placeholder: placeholder, allow_clear: clearable? })
end

#fieldObject



16
17
18
# File 'lib/trestle/form/fields/select.rb', line 16

def field
  builder.raw_select(name, choices, options, html_options, &block)
end

#placeholderObject



28
29
30
31
32
33
34
35
36
37
38
# File 'lib/trestle/form/fields/select.rb', line 28

def placeholder
  prompt = options[:prompt] || options[:include_blank]

  if prompt.kind_of?(String)
    prompt
  elsif options[:prompt]
    I18n.translate("helpers.select.prompt", default: "Please select")
  elsif options[:include_blank]
    ""
  end
end