Module: Vident::TagHelper

Included in:
Component
Defined in:
lib/vident/tag_helper.rb

Instance Method Summary collapse

Instance Method Details

#tag(tag_name, stimulus_controllers: nil, stimulus_targets: nil, stimulus_actions: nil, stimulus_outlets: nil, stimulus_values: nil, stimulus_classes: nil, stimulus_controller: nil, stimulus_target: nil, stimulus_action: nil, stimulus_outlet: nil, stimulus_value: nil, stimulus_class: nil, **options, &block) ⇒ Object

Generate a tag with the given name and options, including stimulus data attributes



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/vident/tag_helper.rb', line 6

def tag(
  tag_name,
  stimulus_controllers: nil,
  stimulus_targets: nil,
  stimulus_actions: nil,
  stimulus_outlets: nil,
  stimulus_values: nil,
  stimulus_classes: nil,
  stimulus_controller: nil,
  stimulus_target: nil,
  stimulus_action: nil,
  stimulus_outlet: nil,
  stimulus_value: nil,
  stimulus_class: nil,
  **options,
  &block
)
  # Ensure the plural attributes are actually enumerables
  tag_attribute_must_be_collection!(stimulus_controllers, "stimulus_controllers")
  tag_attribute_must_be_collection!(stimulus_targets, "stimulus_targets")
  tag_attribute_must_be_collection!(stimulus_actions, "stimulus_actions")
  tag_attribute_must_be_collection!(stimulus_outlets, "stimulus_outlets")
  tag_attribute_must_be_collection!(stimulus_values, "stimulus_values")
  tag_attribute_must_be_collection!(stimulus_classes, "stimulus_classes")

  stimulus_controllers_collection = send(:stimulus_controllers, *tag_wrap_single_stimulus_attribute(stimulus_controllers, stimulus_controller))
  stimulus_targets_collection = send(:stimulus_targets, *tag_wrap_single_stimulus_attribute(stimulus_targets, stimulus_target))
  stimulus_actions_collection = send(:stimulus_actions, *tag_wrap_single_stimulus_attribute(stimulus_actions, stimulus_action))
  stimulus_outlets_collection = send(:stimulus_outlets, *tag_wrap_single_stimulus_attribute(stimulus_outlets, stimulus_outlet))
  stimulus_values_collection = send(:stimulus_values, stimulus_values || stimulus_value)
  stimulus_classes_collection = send(:stimulus_classes, stimulus_classes || stimulus_class)

  stimulus_data_attributes = StimulusDataAttributeBuilder.new(
    controllers: stimulus_controllers_collection,
    actions: stimulus_actions_collection,
    targets: stimulus_targets_collection,
    outlets: stimulus_outlets_collection,
    values: stimulus_values_collection,
    classes: stimulus_classes_collection
  ).build
  generate_tag(tag_name, stimulus_data_attributes, options, &block)
end