Class: NextRailsScaffold::Generators::ScaffoldGenerator

Inherits:
Rails::Generators::ScaffoldGenerator
  • Object
show all
Includes:
Actions
Defined in:
lib/generators/next_rails_scaffold/scaffold_generator.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Actions

#route

Constructor Details

#initialize(args, *options) ⇒ ScaffoldGenerator

:nodoc:



21
22
23
24
# File 'lib/generators/next_rails_scaffold/scaffold_generator.rb', line 21

def initialize(args, *options) # :nodoc:
  super
  self.attributes = shell.base.attributes
end

Instance Attribute Details

#selected_package_managerObject

Returns the value of attribute selected_package_manager.



19
20
21
# File 'lib/generators/next_rails_scaffold/scaffold_generator.rb', line 19

def selected_package_manager
  @selected_package_manager
end

Instance Method Details

#add_resource_routeObject



26
27
28
29
30
# File 'lib/generators/next_rails_scaffold/scaffold_generator.rb', line 26

def add_resource_route
  return if options[:actions].present? || options[:skip_routes]

  route "resources :#{file_name.pluralize}", namespace: regular_class_path, scope: "/api"
end

#create_frontend_projectObject

Check Javascript dependencies and create a new Next.js project. Install the the useful packages and create the scaffold code for frontend application.



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/generators/next_rails_scaffold/scaffold_generator.rb', line 38

def create_frontend_project
  return say_status :remove, "skip frontend folder", :yellow if shell.base.behavior == :revoke

  append_gitignore!

  node_package_manager = NodePackageManager.new(shell)

  inside("frontend") do
    node_package_manager.check_node!
    node_package_manager.check_pm_version!
    node_package_manager.create_next_app!
    node_package_manager.install_hygen!

    return if Rails.env.test?

    selected_package_manager = node_package_manager.selected_package_manager
    language = File.exist?("tsconfig.json") ? "typescript" : "javascript"

    run("#{selected_package_manager.fetch} hygen scaffold #{language} #{name} #{mapped_attributes.join(" ")}")
    if !options[:skip_build] && !@prompt.no?("Do you want to build your Next.js project?")
      run("#{selected_package_manager.run} build")
    end
  end
end

#create_root_folderObject



32
33
34
# File 'lib/generators/next_rails_scaffold/scaffold_generator.rb', line 32

def create_root_folder
  empty_directory "frontend"
end