Module: GenerativeUI

Defined in:
lib/generative_ui.rb,
lib/generative_ui/tool.rb,
lib/generative_ui/engine.rb,
lib/generative_ui/catalog.rb,
lib/generative_ui/version.rb,
lib/generative_ui/renderer.rb,
lib/generative_ui/component.rb,
lib/generative_ui/attributes.rb,
lib/generative_ui/conventions.rb,
lib/generative_ui/component_set.rb,
lib/generative_ui/renderers/json.rb,
lib/generative_ui/structural_ref.rb,
lib/generative_ui/renderers/partial.rb,
app/helpers/generative_ui/view_helper.rb,
lib/generative_ui/component_validator.rb,
lib/generative_ui/component_definition.rb,
lib/generative_ui/component_tree_validator.rb,
lib/generative_ui/renderers/view_component.rb,
lib/generative_ui/invalid_component_tree_error.rb

Defined Under Namespace

Modules: Conventions, Renderers, ViewHelper Classes: Attributes, Catalog, Component, ComponentDefinition, ComponentSet, ComponentTreeValidator, ComponentValidator, Configuration, Engine, InvalidComponentTreeError, Renderer, StructuralRef, Tool

Constant Summary collapse

VERSION =
'0.0.1'

Class Method Summary collapse

Class Method Details

.configurationObject



74
75
76
# File 'lib/generative_ui.rb', line 74

def configuration
  @configuration ||= Configuration.new
end

.configure {|configuration| ... } ⇒ Object

Yields:



70
71
72
# File 'lib/generative_ui.rb', line 70

def configure
  yield configuration
end

.render(arguments, renderer:, catalog: :default, view_context: nil) ⇒ Object

Raises:

  • (ArgumentError)


92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/generative_ui.rb', line 92

def render(arguments, renderer:, catalog: :default, view_context: nil)
  raise ArgumentError, 'arguments must be a Hash' unless arguments.is_a?(Hash)

  unknown = arguments.keys.map(&:to_s) - %w[components]
  raise InvalidComponentTreeError, { '_arguments' => ["unknown arguments: #{unknown.join(', ')}"] } if unknown.any?

  components = arguments['components'] || arguments[:components]
  raise InvalidComponentTreeError, { '_arguments' => ['components must be an array'] } unless components.is_a?(Array)

  catalog = Catalog.coerce(catalog)
  raise ArgumentError, 'generative UI catalog is empty' if catalog.empty?

  set = ComponentSet.from_args(components)
  validation = ComponentTreeValidator.call(set, catalog:)
  raise InvalidComponentTreeError, validation.errors unless validation.valid?

  resolve_renderer(renderer, view_context:, catalog:).call(set)
end

.renderer_for(view_context, renderer: nil, catalog: nil) ⇒ Object

Raises:

  • (ArgumentError)


82
83
84
85
86
87
88
89
90
# File 'lib/generative_ui.rb', line 82

def renderer_for(view_context, renderer: nil, catalog: nil)
  name = (renderer || configuration.default_renderer).to_sym
  factory = configuration.renderers[name]
  raise ArgumentError, "Unknown renderer: #{name}" unless factory

  factory.call(view_context).tap do |renderer|
    renderer.catalog = catalog if catalog && renderer.respond_to?(:catalog=)
  end
end

.reset_configuration!Object



78
79
80
# File 'lib/generative_ui.rb', line 78

def reset_configuration!
  @configuration = Configuration.new
end