Module: RubyUiScaffold::ComponentResolver

Defined in:
lib/ruby_ui_scaffold/component_resolver.rb

Overview

Resolves which ruby_ui components a scaffold references, given its attributes and options. Only DIRECT references are listed — the ‘ruby_ui:component NAME` generator resolves transitive dependencies itself (e.g. `date_picker` pulls `calendar` + `popover` + `input`; `data_table` pulls `table`, `checkbox`, `native_select`, `pagination`, `dropdown_menu`, `input`, `button`). See ruby_ui’s ‘dependencies.yml`.

Examples:

RubyUiScaffold::ComponentResolver.call(attributes: attrs, datatable: false)
# => ["alert_dialog", "badge", "button", ...]

Constant Summary collapse

BASE =

Components every generated scaffold uses, regardless of columns/flags. The install generator pre-installs these so a bare ‘:install` leaves the ground ready; the scaffold then adds the column/flag-specific ones.

index  → table, link, button, dropdown_menu, alert_dialog
show   → card, typography (Text), link, button
form   → form (FormField*), input, button
%w[
  table
  link
  button
  card
  typography
  dropdown_menu
  alert_dialog
  form
  input
].freeze

Class Method Summary collapse

Class Method Details

.call(attributes:, datatable: false) ⇒ Object

The full set of ruby_ui component generator names a scaffold with these attributes/options references — BASE plus the column/flag conditionals. Returns a sorted, de-duplicated array.



39
40
41
42
43
44
45
46
47
48
# File 'lib/ruby_ui_scaffold/component_resolver.rb', line 39

def call(attributes:, datatable: false)
  components = BASE.dup
  components << "data_table" if datatable

  attributes.each do |attribute|
    components.concat(components_for_attribute(attribute))
  end

  components.uniq.sort
end

.components_for_attribute(attribute) ⇒ Object

Conditional components a single attribute pulls in:

boolean   → Badge (index/show) + Checkbox (form)
text      → Textarea (form)
reference → Combobox + Select (form) — polymorphic falls back to a
            plain number Input, so it adds nothing
date      → DatePicker (form)

Everything else (string/integer/float/decimal/time/datetime/password/ attachment/polymorphic reference) maps to the base ‘input`.



58
59
60
61
62
63
64
65
66
67
# File 'lib/ruby_ui_scaffold/component_resolver.rb', line 58

def components_for_attribute(attribute)
  return %w[combobox select] if reference?(attribute)

  case attribute.type
  when :boolean then %w[badge checkbox]
  when :text    then %w[textarea]
  when :date    then %w[date_picker]
  else               []
  end
end

.reference?(attribute) ⇒ Boolean

Returns:

  • (Boolean)


69
70
71
72
# File 'lib/ruby_ui_scaffold/component_resolver.rb', line 69

def reference?(attribute)
  attribute.respond_to?(:reference?) && attribute.reference? &&
    !(attribute.respond_to?(:polymorphic?) && attribute.polymorphic?)
end