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

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 merge_html_options(*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