Class: SvelteOnRails::Generators::InstallGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Defined in:
lib/generators/svelte_on_rails/install/install_generator.rb

Constant Summary collapse

NPM_PACKAGE_NAME =
'@csedl/svelte-on-rails'

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ InstallGenerator

Returns a new instance of InstallGenerator.



16
17
18
19
20
21
22
# File 'lib/generators/svelte_on_rails/install/install_generator.rb', line 16

def initialize(*args)

  super
  validate_raw_options!(args)
  @utils = SvelteOnRails::Installer::Utils
  @template_placeholders = []
end

Instance Method Details

#add_package_json_build_scriptObject



63
64
65
66
67
# File 'lib/generators/svelte_on_rails/install/install_generator.rb', line 63

def add_package_json_build_script
  pkg_js = JSON.parse(File.read('package.json'))
  pkg_js['scripts'] ||= { 'build:ssr': "vite build --config vite-ssr.config.ts" }
  File.write('package.json', JSON.pretty_generate(pkg_js))
end

#completed_noteObject



82
83
84
85
86
# File 'lib/generators/svelte_on_rails/install/install_generator.rb', line 82

def completed_note
  puts '-' * 80
  puts ' ▶︎▶︎▶︎ INSTALLATION COMPLETE'
  puts '-' * 80
end

#config_baseObject



54
55
56
57
58
59
60
61
# File 'lib/generators/svelte_on_rails/install/install_generator.rb', line 54

def config_base
  @utils.write_templates(
    ['config_base'],
    ask_for_overwrite: !options[:force],
    placeholders: @template_placeholders,
    vite_dir: @vite_source_code_dir
  )
end

#initial_questionsObject



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/generators/svelte_on_rails/install/install_generator.rb', line 32

def initial_questions

  @vite_source_code_dir = SvelteOnRails::Lib::Utils.vite_source_code_dir
  if @vite_source_code_dir != 'app/frontend'
    say "WARNING: The Vite source code directory is «#{@vite_source_code_dir}», instead of the usual «app/frontend», in config/vite.json.", :yellow
    q = "         Do you want to continue with «#{@vite_source_code_dir}»?"
    exit(0) unless @utils.ask_yn(q)
  end

  @template_placeholders.push(['$$vite-source-code-dir$$',@vite_source_code_dir])

  unless @utils.write_templates(['config_base'], ask_for_overwrite: !options[:force], dry_run: true)
    say "Installation aborted.", :red
    exit(0)
  end

end

#installer_noteObject



24
25
26
27
28
29
30
# File 'lib/generators/svelte_on_rails/install/install_generator.rb', line 24

def installer_note
  puts
  puts '-' * 80
  puts ' ▶︎▶︎▶︎ INSTALLING SVELTE-ON-RAILS'
  puts "  • FORCED (option --force was given)" if options[:force]
  puts '-' * 80
end

#npmObject



50
51
52
# File 'lib/generators/svelte_on_rails/install/install_generator.rb', line 50

def npm
  npm_i = SvelteOnRails::Installer::Npm
end

#npm_packageObject



76
77
78
79
80
# File 'lib/generators/svelte_on_rails/install/install_generator.rb', line 76

def npm_package
  js_i = SvelteOnRails::Installer::Javascript
  init_stat = '@csedl/svelte-on-rails'
  js_i.append_import_statement(application_js_path, init_stat, "import '#{init_stat}';")
end

#typescriptObject



69
70
71
72
73
74
# File 'lib/generators/svelte_on_rails/install/install_generator.rb', line 69

def typescript
  npm_i = SvelteOnRails::Installer::Npm
  npm_i.install_or_update_package(NPM_PACKAGE_NAME)
  npm_i.install_or_update_package('typescript')
  npm_i.install_or_update_package('@types/node')
end