Class: Trenni::Formatters::HTML::OptionSelect
- Inherits:
-
Object
- Object
- Trenni::Formatters::HTML::OptionSelect
- Defined in:
- lib/trenni/formatters/html/option_select.rb
Overview
Standard drop-down select box:
Class Method Summary collapse
Instance Method Summary collapse
- #call(&block) ⇒ Object
- #group(**options, &block) ⇒ Object
- #group_attributes_for(**options) ⇒ Object
-
#initialize(formatter, builder, **options) ⇒ OptionSelect
constructor
A new instance of OptionSelect.
- #item(**options, &block) ⇒ Object
- #name_for(**options) ⇒ Object
- #option_attributes_for(**options) ⇒ Object
- #optional? ⇒ Boolean
- #optional_title_for(**options) ⇒ Object
- #raw_value ⇒ Object
- #raw_value_for(**options) ⇒ Object
- #select_attributes_for(**options) ⇒ Object
- #title_for(**options) ⇒ Object
- #value_for(**options) ⇒ Object
Constructor Details
#initialize(formatter, builder, **options) ⇒ OptionSelect
Returns a new instance of OptionSelect.
36 37 38 39 40 |
# File 'lib/trenni/formatters/html/option_select.rb', line 36 def initialize(formatter, builder, **) @formatter = formatter @builder = builder @options = end |
Class Method Details
.call(formatter, builder, **options, &block) ⇒ Object
30 31 32 33 34 |
# File 'lib/trenni/formatters/html/option_select.rb', line 30 def self.call(formatter, builder, **, &block) instance = self.new(formatter, builder, **) instance.call(&block) end |
Instance Method Details
#call(&block) ⇒ Object
134 135 136 137 138 139 140 141 142 143 144 |
# File 'lib/trenni/formatters/html/option_select.rb', line 134 def call(&block) Builder.fragment(@builder) do |builder| builder.tag :select, select_attributes_for(**@options) do if self.optional? builder << item(title: optional_title_for(**@options), value: nil) end builder.capture(self, &block) end end end |
#group(**options, &block) ⇒ Object
109 110 111 112 113 114 115 116 117 |
# File 'lib/trenni/formatters/html/option_select.rb', line 109 def group(**, &block) @builder.tag :optgroup, group_attributes_for(**) do if [:optional] item(title: optional_title_for(**), value: nil) end @builder.capture(&block) end end |
#group_attributes_for(**options) ⇒ Object
100 101 102 103 104 105 106 107 |
# File 'lib/trenni/formatters/html/option_select.rb', line 100 def group_attributes_for(**) return { :label => title_for(**), :id => [:id], :class => [:class], :data => [:data], } end |
#item(**options, &block) ⇒ Object
78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/trenni/formatters/html/option_select.rb', line 78 def item(**, &block) [:field] ||= 'id' Builder.fragment(block&.binding || @builder) do |builder| builder.inline(:option, option_attributes_for(**)) do if block_given? builder.capture(self, &block) else builder.text title_for(**) end end end end |
#name_for(**options) ⇒ Object
42 43 44 45 46 47 48 49 50 |
# File 'lib/trenni/formatters/html/option_select.rb', line 42 def name_for(**) if name = @formatter.name_for(**) if [:multiple] name = "#{name}[]" end return name end end |
#option_attributes_for(**options) ⇒ Object
68 69 70 71 72 73 74 75 76 |
# File 'lib/trenni/formatters/html/option_select.rb', line 68 def option_attributes_for(**) return { :value => value_for(**), :selected => .fetch(:selected) {raw_value == raw_value_for(**)}, :id => [:id], :class => [:class], :data => [:data], } end |
#optional? ⇒ Boolean
130 131 132 |
# File 'lib/trenni/formatters/html/option_select.rb', line 130 def optional? @options[:optional] end |
#optional_title_for(**options) ⇒ Object
92 93 94 95 96 97 98 |
# File 'lib/trenni/formatters/html/option_select.rb', line 92 def optional_title_for(**) if [:optional] == true [:blank] || '' else [:optional] end end |
#raw_value ⇒ Object
56 57 58 |
# File 'lib/trenni/formatters/html/option_select.rb', line 56 def raw_value @raw_value ||= raw_value_for(**@options) end |
#raw_value_for(**options) ⇒ Object
52 53 54 |
# File 'lib/trenni/formatters/html/option_select.rb', line 52 def raw_value_for(**) @formatter.raw_value_for(**) end |
#select_attributes_for(**options) ⇒ Object
119 120 121 122 123 124 125 126 127 128 |
# File 'lib/trenni/formatters/html/option_select.rb', line 119 def select_attributes_for(**) return { :name => name_for(**), :id => [:id], :class => [:class], :multiple => [:multiple], :data => [:data], :required => [:required], } end |
#title_for(**options) ⇒ Object
64 65 66 |
# File 'lib/trenni/formatters/html/option_select.rb', line 64 def title_for(**) @formatter.title_for(**) end |
#value_for(**options) ⇒ Object
60 61 62 |
# File 'lib/trenni/formatters/html/option_select.rb', line 60 def value_for(**) @formatter.value_for(**) end |