Module: StimulusPlumbers::Components::Plumber::HtmlOptions
- Extended by:
- ActiveSupport::Concern
- Included in:
- Base, Form::Builder
- Defined in:
- lib/stimulus_plumbers/components/plumber/html_options.rb
Instance Method Summary collapse
- #merge_html_options(*hashes) ⇒ Object
- #merge_string_option(*parts, delimiter: " ") ⇒ Object
- #normalize_part(value, delimiter) ⇒ Object
Instance Method Details
#merge_html_options(*hashes) ⇒ Object
11 12 13 14 15 16 |
# File 'lib/stimulus_plumbers/components/plumber/html_options.rb', line 11 def (*hashes) classes = hashes.flat_map { |h| [h[:class], h[:classes]] } rest = hashes.map { |h| h.except(:class, :classes) }.reduce({}, :deep_merge) class_value = merge_string_option(*classes).presence class_value ? rest.merge(class: class_value) : rest end |
#merge_string_option(*parts, delimiter: " ") ⇒ Object
18 19 20 21 |
# File 'lib/stimulus_plumbers/components/plumber/html_options.rb', line 18 def merge_string_option(*parts, delimiter: " ") tokens = parts.flat_map { |part| normalize_part(part, delimiter) } tokens.compact.uniq.join(delimiter) end |
#normalize_part(value, delimiter) ⇒ Object
23 24 25 26 27 28 29 30 |
# File 'lib/stimulus_plumbers/components/plumber/html_options.rb', line 23 def normalize_part(value, delimiter) case value when String then value.present? ? value.split(delimiter) : [] when Hash then value.filter_map { |key, val| key if val } when Array then [merge_string_option(*value).presence] else [] end end |