Class: Shadwire::Commands::Add

Inherits:
Object
  • Object
show all
Defined in:
lib/shadwire/commands/add.rb

Overview

Installs one or more components and their transitive registry dependencies: writes files (overwrite policy from flags, content-aware prompting), applies the union of gems + importmap pins, and records each named component in shadwire.json.

Instance Method Summary collapse

Constructor Details

#initialize(root:, names:, yes: false, overwrite: false, no_deps: false, registry: nil, json: false, ui: UI.new(yes:), runner: Dependencies::DEFAULT_RUNNER) ⇒ Add

Returns a new instance of Add.



10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/shadwire/commands/add.rb', line 10

def initialize(root:, names:, yes: false, overwrite: false, no_deps: false,
               registry: nil, json: false, ui: UI.new(yes:), runner: Dependencies::DEFAULT_RUNNER)
  @root = root.to_s
  @names = names
  @yes = yes
  @overwrite = overwrite
  @no_deps = no_deps
  @registry_override = registry
  @json = json
  @ui = ui
  @runner = runner
end

Instance Method Details

#callObject



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/shadwire/commands/add.rb', line 23

def call
  project = Project.new(@root)
  project.raise_unless_rails!

  config = Config.load(@root)
  client = RegistryClient.new(@registry_override || config.registry)

  items = resolve_items(client)
  files = items.flat_map { |item| item.fetch("files") }
  report = install_files(files)

  deps = Dependencies.new(project, runner: @runner)
  dep_confirm = ->(desc) { @ui.confirm?(desc) }
  gems = deps.ensure_gems(union(items, "gems"), yes: @yes, confirm: dep_confirm)
  pins = deps.ensure_importmap_pins(union(items, "importmap"), yes: @yes, confirm: dep_confirm)

  record_installed(config, client, items)
  config.save

  result = { report:, gems:, pins: }
  emit(result)
  Dependencies.raise_on_failure!(gems, pins)

  result
end