Class: Fluxbit::ScaffoldGenerator

Inherits:
Rails::Generators::NamedBase
  • Object
show all
Defined in:
lib/generators/fluxbit/scaffold_generator.rb

Instance Method Summary collapse

Instance Method Details

#generate_model_and_migrationObject



24
25
26
27
28
# File 'lib/generators/fluxbit/scaffold_generator.rb', line 24

def generate_model_and_migration
  # Use Rails model generator to create model & migration (if not already present)
  model_args = [ name ] + attributes
  generate("model", *model_args)
end

#generate_scaffold_filesObject



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/generators/fluxbit/scaffold_generator.rb', line 30

def generate_scaffold_files
  # Add resource route
  if namespaced?
    # Build nested namespace blocks
    namespace_parts = namespace_path.split("/")
    namespace_opens = namespace_parts.map.with_index do |part, idx|
      "  " * idx + "namespace :#{part} do"
    end.join("\n")
    namespace_closes = namespace_parts.size.times.map { |i| "  " * (namespace_parts.size - 1 - i) + "end" }.join("\n")
    indent = "  " * namespace_parts.size

    route %(#{namespace_opens}
#{indent}resources :#{file_name.pluralize} do
#{indent}  collection do
#{indent}    put "update_all"
#{indent}    patch "update_all"
#{indent}    delete "destroy_all"
#{indent}  end
#{indent}end
#{namespace_closes})
  else
    route %(resources :#{file_name.pluralize} do
collection do
  put "update_all"
  patch "update_all"
  delete "destroy_all"
end
  end)
  end

  # Ensure controller directory exists
  empty_directory controller_dir if namespaced?

  # Generate controller from template
  template "controller.rb.tt", File.join(controller_dir, "#{file_name.pluralize}_controller.rb")

  # Ensure view directory exists
  empty_directory view_dir

  # Generate view templates from templates
  template "index.html.erb.tt",     File.join(view_dir, "index.html.erb")
  template "show.html.erb.tt",      File.join(view_dir, "show.html.erb")
  template "new.html.erb.tt",       File.join(view_dir, "new.html.erb")
  template "edit.html.erb.tt",      File.join(view_dir, "edit.html.erb")
  template "_form.html.erb.tt",     File.join(view_dir, "_form.html.erb")
  template "_metadata.html.erb.tt", File.join(view_dir, "_metadata.html.erb")
  template "partial.html.erb.tt",   File.join(view_dir, "_#{file_name.pluralize}.html.erb")

  # Generate Jbuilder templates
  template "index.json.jbuilder.tt", File.join(view_dir, "index.json.jbuilder")
  template "show.json.jbuilder.tt",  File.join(view_dir, "show.json.jbuilder")

  # Generate Turbo Stream response templates
  template "create.turbo_stream.erb.tt",      File.join(view_dir, "create.turbo_stream.erb")
  template "update.turbo_stream.erb.tt",      File.join(view_dir, "update.turbo_stream.erb")
  template "update_all.turbo_stream.erb.tt",  File.join(view_dir, "update_all.turbo_stream.erb")
  template "destroy.turbo_stream.erb.tt",     File.join(view_dir, "destroy.turbo_stream.erb")
  template "destroy_all.turbo_stream.erb.tt", File.join(view_dir, "destroy_all.turbo_stream.erb")

  # Generate i18n
  template "i18n.en.yml.tt",    File.join("config", "locales", "#{file_name.pluralize}.en.yml")
  template "i18n.pt-BR.yml.tt", File.join("config", "locales", "#{file_name.pluralize}.pt-BR.yml")
  template "i18n.general.en.yml.tt",    File.join("config", "locales", "general.en.yml")
  template "i18n.general.pt-BR.yml.tt", File.join("config", "locales", "general.pt-BR.yml")

  # Generate Policy
  template "policy.rb.tt", File.join("app/policies", "#{file_name.singularize}_policy.rb")

  # Generate shared partials
  template "_alert.html.erb.tt", File.join("app/views/shared", "_alert.html.erb")
  template "send_alert_via_drawer.html.erb.tt", File.join("app/views/shared", "send_alert_via_drawer_alert.html.erb")
  template "_flash.html.erb.tt", File.join("app/views/shared", "_flash.html.erb")
  template "sortable.rb.tt", File.join("app/controllers/concerns", "sortable.rb")
end