Class: NextRailsScaffold::Generators::NodePackageManager

Inherits:
Object
  • Object
show all
Defined in:
lib/generators/next_rails_scaffold/node_package_manager.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(shell) ⇒ NodePackageManager



39
40
41
42
# File 'lib/generators/next_rails_scaffold/node_package_manager.rb', line 39

def initialize(shell)
  @prompt = TTY::Prompt.new
  @shell = shell
end

Instance Attribute Details

#selected_package_managerObject (readonly)

Returns the value of attribute selected_package_manager.



31
32
33
# File 'lib/generators/next_rails_scaffold/node_package_manager.rb', line 31

def selected_package_manager
  @selected_package_manager
end

Class Method Details

.get_version(command) ⇒ Object



33
34
35
36
37
# File 'lib/generators/next_rails_scaffold/node_package_manager.rb', line 33

def self.get_version(command)
  Open3.capture3(command, "--version").first.gsub(/[^0-9.]/, "")
rescue Errno::ENOENT
  nil
end

Instance Method Details

#check_node!Object



44
45
46
47
48
49
50
# File 'lib/generators/next_rails_scaffold/node_package_manager.rb', line 44

def check_node!
  node_version = self.class.get_version("node")

  return if Gem::Dependency.new("", NODE_REQUIRED_VERSION).match?("", node_version)

  raise node_version ? "Your Node version is '#{node_version}'" : "Node not found"
end

#check_pm_version!Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/generators/next_rails_scaffold/node_package_manager.rb', line 52

def check_pm_version!
  package_manager = @shell.base.options[:package_manager]

  unless package_manager
    PACKAGE_MANAGERS.each do |manager, details|
      if File.exist?(details.lock_file)
        package_manager = manager
        break
      end
    end
  end

  until PACKAGE_MANAGERS.keys.include?(package_manager)
    raise "Invalid package manager" unless package_manager.nil?

    package_manager = @prompt.select(
      "Which package manager do you want to use?",
      PACKAGE_MANAGERS.keys.map { |pm| { name: pm, value: pm, disabled: !PACKAGE_MANAGERS[pm].available? } }
    )
  end

  @selected_package_manager = PACKAGE_MANAGERS[package_manager]
end

#create_next_app!Object



76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/generators/next_rails_scaffold/node_package_manager.rb', line 76

def create_next_app!
  return if File.exist?("package.json")

  system(
    "#{selected_package_manager.fetch} create-next-app@#{NEXT_VERSION} . --use-#{selected_package_manager} " \
    "--no-app --src-dir --import-alias \"@/*\" #{@shell.base.options[:typescript] ? "--ts" : ""} #{Rails.env.test? ? "--yes" : ""}"
  )

  if selected_package_manager.to_s == "yarn" &&
     Gem::Dependency.new("", ">= 2.0").match?("", selected_package_manager.version)
    system("yarn config set nodeLinker node-modules")
  end
end

#install_hygen!Object



90
91
92
93
94
95
96
97
# File 'lib/generators/next_rails_scaffold/node_package_manager.rb', line 90

def install_hygen!
  return if Dir.exist?("_templates")

  hygen_add = "hygen-add@https://github.com/raphox/hygen-add"

  system("#{selected_package_manager.add} -D hygen #{hygen_add}")
  system("#{selected_package_manager.fetch} #{hygen_add} next-rails-scaffold --pm #{selected_package_manager}")
end