Module: NameNormalizer
- Defined in:
- lib/scaffolding/name_normalizer.rb
Constant Summary collapse
- SUFFIXES =
%w[_page _spec _steps _helper _test _feature].freeze
Class Method Summary collapse
- .camel_to_snake(str) ⇒ Object
-
.leaf_name(input) ⇒ Object
Get the leaf name: ‘admin/users’ -> ‘users’.
-
.module_parts(input) ⇒ Object
Get the module path for nested names: ‘admin/users’ -> [‘Admin’].
-
.nested?(input) ⇒ Boolean
Check if the input contains a nested path.
-
.normalize(input) ⇒ Object
Normalize raw user input to a clean base name ‘LoginPage’ -> ‘login’, ‘login_page’ -> ‘login’, ‘admin/users’ -> ‘admin/users’.
- .strip_suffixes(name) ⇒ Object
-
.to_class_name(input, suffix = '') ⇒ Object
Convert to class name: ‘login’ -> ‘LoginPage’, ‘admin/users’ -> ‘Admin::UsersPage’.
-
.to_file_name(input) ⇒ Object
Convert to file name: ‘LoginPage’ -> ‘login’, ‘admin/users’ -> ‘admin/users’.
-
.to_page_class(input) ⇒ Object
Convert to page class: ‘login’ -> ‘LoginPage’.
Class Method Details
.camel_to_snake(str) ⇒ Object
49 50 51 52 53 54 |
# File 'lib/scaffolding/name_normalizer.rb', line 49 def camel_to_snake(str) str.gsub(/::/, '/') .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2') .gsub(/([a-z\d])([A-Z])/, '\1_\2') .downcase end |
.leaf_name(input) ⇒ Object
Get the leaf name: ‘admin/users’ -> ‘users’
45 46 47 |
# File 'lib/scaffolding/name_normalizer.rb', line 45 def leaf_name(input) normalize(input).split('/').last end |
.module_parts(input) ⇒ Object
Get the module path for nested names: ‘admin/users’ -> [‘Admin’]
39 40 41 42 |
# File 'lib/scaffolding/name_normalizer.rb', line 39 def module_parts(input) parts = normalize(input).split('/') parts[0..-2].map { |p| p.split('_').map(&:capitalize).join } end |
.nested?(input) ⇒ Boolean
Check if the input contains a nested path
34 35 36 |
# File 'lib/scaffolding/name_normalizer.rb', line 34 def nested?(input) normalize(input).include?('/') end |
.normalize(input) ⇒ Object
Normalize raw user input to a clean base name ‘LoginPage’ -> ‘login’, ‘login_page’ -> ‘login’, ‘admin/users’ -> ‘admin/users’
10 11 12 13 14 |
# File 'lib/scaffolding/name_normalizer.rb', line 10 def normalize(input) name = input.to_s.strip name = camel_to_snake(name) if name.match?(/[A-Z]/) strip_suffixes(name) end |
.strip_suffixes(name) ⇒ Object
56 57 58 59 60 61 62 |
# File 'lib/scaffolding/name_normalizer.rb', line 56 def strip_suffixes(name) result = name.dup SUFFIXES.each do |suffix| result = result.delete_suffix(suffix) if result.end_with?(suffix) end result end |
.to_class_name(input, suffix = '') ⇒ Object
Convert to class name: ‘login’ -> ‘LoginPage’, ‘admin/users’ -> ‘Admin::UsersPage’
17 18 19 20 21 |
# File 'lib/scaffolding/name_normalizer.rb', line 17 def to_class_name(input, suffix = '') normalized = normalize(input) parts = normalized.split('/') parts.map { |part| part.split('_').map(&:capitalize).join }.join('::') + suffix end |
.to_file_name(input) ⇒ Object
Convert to file name: ‘LoginPage’ -> ‘login’, ‘admin/users’ -> ‘admin/users’
29 30 31 |
# File 'lib/scaffolding/name_normalizer.rb', line 29 def to_file_name(input) normalize(input) end |
.to_page_class(input) ⇒ Object
Convert to page class: ‘login’ -> ‘LoginPage’
24 25 26 |
# File 'lib/scaffolding/name_normalizer.rb', line 24 def to_page_class(input) to_class_name(input, 'Page') end |