Class: Optics::ApplicationViewComponent
- Inherits:
-
ViewComponent::Base
- Object
- ViewComponent::Base
- Optics::ApplicationViewComponent
- Defined in:
- app/components/optics/application_view_component.rb
Direct Known Subclasses
Button::Component, Icon::Component, Sidebar::Component, Sidebar::Component::Brand, Sidebar::Component::LinksComponent, Sidebar::Component::SidebarContent
Class Attribute Summary collapse
-
.allow_db_queries ⇒ Object
(also: allow_db_queries?)
To allow DB queries, put this in the class definition: self.allow_db_queries = true.
Class Method Summary collapse
- .accepts(parameter, default: nil) ⇒ Object
- .inherited(subclass) ⇒ Object
- .requires(parameter, default: nil) ⇒ Object
Instance Method Summary collapse
- #class_for(name) ⇒ Object
- #class_names(*args) ⇒ Object
- #class_names_for(*args) ⇒ Object
- #container_class ⇒ Object
-
#data_for(method:, target:) ⇒ Object
Helper for Stimulus data attributes.
-
#data_method(method, event: 'click') ⇒ Object
Helper for Stimulus controller method.
-
#data_target(target) ⇒ Object
Helper for Stimulus controller target.
-
#data_values(values) ⇒ Object
Helper for Stimulus controller value.
-
#identifier ⇒ Object
Used by Stimulus.
-
#initialize(**attributes) ⇒ ApplicationViewComponent
constructor
A new instance of ApplicationViewComponent.
Constructor Details
#initialize(**attributes) ⇒ ApplicationViewComponent
Returns a new instance of ApplicationViewComponent.
33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'app/components/optics/application_view_component.rb', line 33 def initialize(**attributes) super initialize_instance_variables(required_attributes, attributes) do |key, _default| raise ArgumentError, "Missing keyword: :#{key}" end initialize_instance_variables(optional_attributes, attributes) do |key, default| instance_variable_set("@#{key}", default) end @attributes = attributes.except(*optional_attributes.keys, *required_attributes.keys) end |
Class Attribute Details
.allow_db_queries ⇒ Object Also known as: allow_db_queries?
To allow DB queries, put this in the class definition: self.allow_db_queries = true
11 12 13 |
# File 'app/components/optics/application_view_component.rb', line 11 def allow_db_queries @allow_db_queries end |
Class Method Details
.accepts(parameter, default: nil) ⇒ Object
20 21 22 23 24 |
# File 'app/components/optics/application_view_component.rb', line 20 def accepts(parameter, default: nil) optional_attributes[parameter] = default attr_reader parameter end |
.inherited(subclass) ⇒ Object
26 27 28 29 30 |
# File 'app/components/optics/application_view_component.rb', line 26 def inherited(subclass) subclass.optional_attributes = optional_attributes.dup subclass.required_attributes = required_attributes.dup super end |
.requires(parameter, default: nil) ⇒ Object
14 15 16 17 18 |
# File 'app/components/optics/application_view_component.rb', line 14 def requires(parameter, default: nil) required_attributes[parameter] = default attr_reader parameter end |
Instance Method Details
#class_for(name) ⇒ Object
47 48 49 |
# File 'app/components/optics/application_view_component.rb', line 47 def class_for(name) "c--#{identifier}--#{name}" end |
#class_names(*args) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'app/components/optics/application_view_component.rb', line 60 def class_names(*args) # rubocop:disable Metrics/MethodLength [].tap do |classes| args.each do |class_name| case class_name when String classes << class_name when Hash class_name.each do |key, val| classes << key if val end end end classes.compact! classes.uniq! end end |
#class_names_for(*args) ⇒ Object
55 56 57 |
# File 'app/components/optics/application_view_component.rb', line 55 def class_names_for(*args) class_names(*args).map { |name| class_for(name) }.join(' ') end |
#container_class ⇒ Object
51 52 53 |
# File 'app/components/optics/application_view_component.rb', line 51 def container_class "c--#{identifier}" end |
#data_for(method:, target:) ⇒ Object
Helper for Stimulus data attributes
84 85 86 |
# File 'app/components/optics/application_view_component.rb', line 84 def data_for(method:, target:) data_method(method).merge(data_target(target)) end |
#data_method(method, event: 'click') ⇒ Object
Helper for Stimulus controller method
89 90 91 |
# File 'app/components/optics/application_view_component.rb', line 89 def data_method(method, event: 'click') { action: "#{event}->#{identifier}##{method}" } end |
#data_target(target) ⇒ Object
Helper for Stimulus controller target
94 95 96 |
# File 'app/components/optics/application_view_component.rb', line 94 def data_target(target) { "#{identifier}": { target: } } end |
#data_values(values) ⇒ Object
Helper for Stimulus controller value
99 100 101 102 103 |
# File 'app/components/optics/application_view_component.rb', line 99 def data_values(values) values.transform_keys do |key| "#{identifier}-#{key}-value" end end |
#identifier ⇒ Object
Used by Stimulus. E.g. data-controller=identifier => data-controller=‘dynamic-form–field’
79 80 81 |
# File 'app/components/optics/application_view_component.rb', line 79 def identifier @identifier ||= self.class.name.sub('::Component', '').underscore.gsub('_', '-').gsub('/', '--') end |