Class: Charming::Generators::Name

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

Constructor Details

#initialize(value) ⇒ Name

Raises Error when value doesn’t match ‘VALID_NAME`.

Raises:



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_nameObject (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_nameObject

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_nameObject

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_nameObject

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