Class: RailsForge::Generators::BaseGenerator
- Inherits:
-
Object
- Object
- RailsForge::Generators::BaseGenerator
- Defined in:
- lib/railsforge/generators/base_generator.rb
Overview
Base class for all generators
Direct Known Subclasses
ApiGenerator, DemoGenerator, DevopsGenerator, FormGenerator, JobGenerator, MonitoringGenerator, PolicyGenerator, PresenterGenerator, QueryGenerator, SerializerGenerator, ServiceGenerator, StimulusControllerGenerator, TestGenerator, ViewComponentGenerator
Defined Under Namespace
Classes: InvalidNameError
Constant Summary collapse
- TEMPLATE_VERSION =
Default template version
"v1".freeze
Instance Method Summary collapse
-
#camelize ⇒ String
Convert to camelize.
-
#find_rails_app_path ⇒ String?
Find Rails app path.
-
#generate ⇒ Object
Generate the file.
-
#initialize(name, options = {}) ⇒ BaseGenerator
constructor
Initialize generator.
-
#underscore ⇒ String
Convert to underscore.
-
#validate_name!(name, pattern, error_class) ⇒ Object
Validate name.
Constructor Details
#initialize(name, options = {}) ⇒ BaseGenerator
Initialize generator
19 20 21 22 23 |
# File 'lib/railsforge/generators/base_generator.rb', line 19 def initialize(name, = {}) @name = name = @base_path = find_rails_app_path end |
Instance Method Details
#camelize ⇒ String
Convert to camelize
60 61 62 63 64 65 66 67 |
# File 'lib/railsforge/generators/base_generator.rb', line 60 def camelize result = @name.to_s.gsub(/::/, '/') result.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2') .gsub(/([a-z\d])([A-Z])/, '\1_\2') .split('_') .map(&:capitalize) .join end |
#find_rails_app_path ⇒ String?
Find Rails app path
27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/railsforge/generators/base_generator.rb', line 27 def find_rails_app_path path = Dir.pwd max_depth = 10 max_depth.times do return path if File.exist?(File.join(path, "config", "application.rb")) parent = File.dirname(path) break if parent == path path = parent end nil end |
#generate ⇒ Object
Generate the file
70 71 72 |
# File 'lib/railsforge/generators/base_generator.rb', line 70 def generate raise NotImplementedError, "Subclasses must implement #generate" end |
#underscore ⇒ String
Convert to underscore
52 53 54 55 56 |
# File 'lib/railsforge/generators/base_generator.rb', line 52 def underscore @name.to_s.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2') .gsub(/([a-z\d])([A-Z])/, '\1_\2') .downcase end |
#validate_name!(name, pattern, error_class) ⇒ Object
Validate name
45 46 47 48 |
# File 'lib/railsforge/generators/base_generator.rb', line 45 def validate_name!(name, pattern, error_class) raise error_class, "#{self.class.name.split('::').last} name cannot be empty" if name.nil? || name.strip.empty? raise error_class, "Name must match pattern: #{pattern}" unless name =~ pattern end |