Class: Charming::Generators::Name
- Inherits:
-
Object
- Object
- Charming::Generators::Name
- Defined in:
- lib/charming/generators/name.rb
Overview
Name validates a generator resource name and exposes the conventional Ruby class-name variants (singular class, controller, component) derived from it. The original input must match ‘VALID_NAME` (lowercase, snake_case, must start with a letter).
Constant Summary collapse
- VALID_NAME =
Regex matching a valid snake_case resource name: lowercase letter, then any combination of lowercase letters, digits, and underscores.
/\A[a-z][a-z0-9_]*\z/
Instance Attribute Summary collapse
-
#snake_name ⇒ Object
readonly
The original snake_case name as supplied.
Instance Method Summary collapse
-
#class_name ⇒ Object
The CamelCase class name (e.g., “user” → “User”).
-
#component_class_name ⇒ Object
The component class name (e.g., “user” → “UserComponent”).
-
#controller_class_name ⇒ Object
The controller class name (e.g., “user” → “UserController”).
-
#initialize(value) ⇒ Name
constructor
Raises Error when value doesn’t match ‘VALID_NAME`.
Constructor Details
#initialize(value) ⇒ Name
Raises Error when value doesn’t match ‘VALID_NAME`.
17 18 19 20 |
# File 'lib/charming/generators/name.rb', line 17 def initialize(value) @snake_name = value.to_s raise Error, "Invalid name: #{value}" unless VALID_NAME.match?(@snake_name) end |
Instance Attribute Details
#snake_name ⇒ Object (readonly)
The original snake_case name as supplied.
14 15 16 |
# File 'lib/charming/generators/name.rb', line 14 def snake_name @snake_name end |
Instance Method Details
#class_name ⇒ Object
The CamelCase class name (e.g., “user” → “User”).
23 24 25 |
# File 'lib/charming/generators/name.rb', line 23 def class_name snake_name.split("_").map(&:capitalize).join end |
#component_class_name ⇒ Object
The component class name (e.g., “user” → “UserComponent”).
33 34 35 |
# File 'lib/charming/generators/name.rb', line 33 def component_class_name "#{class_name}Component" end |
#controller_class_name ⇒ Object
The controller class name (e.g., “user” → “UserController”).
28 29 30 |
# File 'lib/charming/generators/name.rb', line 28 def controller_class_name "#{class_name}Controller" end |