Class: Securial::Generators::ScaffoldGenerator

Inherits:
Rails::Generators::NamedBase
  • Object
show all
Includes:
Rails::Generators::ResourceHelpers
Defined in:
lib/generators/securial/scaffold/scaffold_generator.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.file_nameObject



26
27
28
# File 'lib/generators/securial/scaffold/scaffold_generator.rb', line 26

def self.file_name
  "generator_manifest.txt"
end

Instance Method Details

#add_routesObject (private)



125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# File 'lib/generators/securial/scaffold/scaffold_generator.rb', line 125

def add_routes
  say_status(:routes, "routes", :cyan) unless Rails.env.test?

  routes_path = File.join(root_path, "config/routes.rb")

  route_config = "resources :#{plain_plural_name}"
  template("routes.erb", routes_path, verbose: false) unless File.exist?(routes_path)

  if behavior == :invoke
    inject_into_file routes_path,
                     "    #{route_config}\n",
                     after: "defaults format: :json do\n",
                     verbose: !Rails.env.test?
  else
    content = File.read(routes_path)

    # Remove the route line and write back
    new_content = content.gsub(/^\s*#{Regexp.escape(route_config)}\n/, "")
    File.write(routes_path, new_content)
  end
end

#controller_class_nameObject (private)



90
91
92
# File 'lib/generators/securial/scaffold/scaffold_generator.rb', line 90

def controller_class_name
  class_name.pluralize
end

#controller_file_nameObject (private)



94
95
96
# File 'lib/generators/securial/scaffold/scaffold_generator.rb', line 94

def controller_file_name
  plain_plural_name
end

#controller_pathObject (private)



106
107
108
109
# File 'lib/generators/securial/scaffold/scaffold_generator.rb', line 106

def controller_path
  base_path = root_path.join("app/controllers/securial")
  @controller_path ||= File.join(base_path, "#{controller_file_name}_controller.rb")
end

#namespaced_nameObject (private)



74
75
76
# File 'lib/generators/securial/scaffold/scaffold_generator.rb', line 74

def namespaced_name
  @namespaced_name ||= "securial_#{name.underscore}"
end

#plain_plural_nameObject (private)



78
79
80
# File 'lib/generators/securial/scaffold/scaffold_generator.rb', line 78

def plain_plural_name
  @plain_plural_name ||= name.underscore.pluralize
end

#request_spec_pathObject (private)



111
112
113
114
# File 'lib/generators/securial/scaffold/scaffold_generator.rb', line 111

def request_spec_path
  base_path = root_path.join("spec/requests/securial")
  @request_spec_path ||= File.join(base_path, "#{resource_path_name}_spec.rb")
end

#resource_path_nameObject (private)



82
83
84
# File 'lib/generators/securial/scaffold/scaffold_generator.rb', line 82

def resource_path_name
  plain_plural_name
end

#root_pathObject (private)



121
122
123
# File 'lib/generators/securial/scaffold/scaffold_generator.rb', line 121

def root_path
  Rails.env.test? ? Rails.root.join("tmp/") : Engine.root
end

#routing_spec_pathObject (private)



116
117
118
119
# File 'lib/generators/securial/scaffold/scaffold_generator.rb', line 116

def routing_spec_path
  base_path = root_path.join("spec/routing/securial")
  @routing_spec_path ||= File.join(base_path, "#{resource_path_name}_routing_spec.rb")
end

#run_scaffoldObject

rubocop:disable Metrics/MethodLength



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
# File 'lib/generators/securial/scaffold/scaffold_generator.rb', line 30

def run_scaffold # rubocop:disable Metrics/MethodLength
  say_status(:scaffold, "Running built-in scaffold generator with custom options", :cyan) unless Rails.env.test?

  # Generate model and migration
  Rails::Generators.invoke(
    "model",
    [name, *attributes.map(&:to_s)],
    behavior: behavior,
    destination_root: root_path,
  )

  indent = "  " # two-space indent

  # Generate controller from template
  say_status(:scaffold, "controller", :cyan) unless Rails.env.test?
  say_status(status_behavior, "#{indent}#{controller_path}", status_color) unless Rails.env.test?
  template("controller.erb", controller_path, verbose: false)

  # Generate views
  say_status(:scaffold, "JBuilder views", :cyan) unless Rails.env.test?
  Rails::Generators.invoke(
    "securial:jbuilder",
    [name, *attributes.map(&:to_s)],
    behavior: behavior,
    destination_root: Securial::Engine.root,
  )

  add_routes

  say_status(:scaffold, "controller specs: #{@routing_spec_path}", :cyan) unless Rails.env.test?

  # Generate request specs
  say_status(status_behavior, "#{indent}#{request_spec_path}", status_color) unless Rails.env.test?
  template("request_spec.erb", request_spec_path, verbose: false)

  # Generate routing specs
  say_status(status_behavior, "#{indent}#{routing_spec_path}", status_color) unless Rails.env.test?
  template("routing_spec.erb", routing_spec_path, verbose: false)

  say_status(:success, "Scaffold complete ✨✨", :green) unless Rails.env.test?
end

#status_behaviorObject (private)



98
99
100
# File 'lib/generators/securial/scaffold/scaffold_generator.rb', line 98

def status_behavior
  behavior == :invoke ? :create : :remove
end

#status_colorObject (private)



102
103
104
# File 'lib/generators/securial/scaffold/scaffold_generator.rb', line 102

def status_color
  behavior == :invoke ? :green : :red
end

#table_nameObject (private)



86
87
88
# File 'lib/generators/securial/scaffold/scaffold_generator.rb', line 86

def table_name
  @table_name ||= namespaced_name.pluralize
end