Class: Shadwire::Commands::Init

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

Overview

Bootstraps a consuming Rails app: writes shadwire.json, installs the base files, and applies the base gems + the Tailwind @import (confirm-then-apply, auto on yes:). Idempotent on re-run; --force resets shadwire.json.

Instance Method Summary collapse

Constructor Details

#initialize(root:, registry: nil, yes: false, force: false, json: false, ui: UI.new(yes:), runner: Dependencies::DEFAULT_RUNNER) ⇒ Init

Returns a new instance of Init.



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

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

Instance Method Details

#callObject



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
# File 'lib/shadwire/commands/init.rb', line 22

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

  config = build_config
  client = RegistryClient.new(config.registry)
  base = client.index.fetch("base")

  report = Installer.new(@root, overwrite: :always).install(base.fetch("files"))

  deps = Dependencies.new(project, runner: @runner)
  confirm = ->(desc) { @ui.confirm?(desc) }
  gems = deps.ensure_gems(Array(base["gems"]), yes: @yes, confirm:)
  tailwind = deps.ensure_tailwind_import(
    vendor_css_target(config, base), css_entry: config.tailwind_css, yes: @yes, confirm:
  )

  config.save
  warn_missing_stack(project)
  result = { config:, report:, gems:, tailwind: }
  emit(result)
  Dependencies.raise_on_failure!(gems)

  result
end