Module: RubyUIConverter::Naming
- Defined in:
- lib/ruby_ui_converter/naming.rb
Overview
Converts file paths into Ruby constant names following Rails-ish conventions: app/views/users/index.html.erb -> Views::Users::Index.
Class Method Summary collapse
- .camelize(string) ⇒ Object
-
.class_name(basename) ⇒ Object
Class name for a template basename (“index” / “_form” -> Index / Form).
-
.namespace_parts(dir_rel, base_namespace) ⇒ Object
Module segments derived from base namespace + relative directory.
-
.partial_const(path, base_namespace:, current_namespace_parts: []) ⇒ Object
Resolves a render partial path to a fully-qualified constant.
Class Method Details
.camelize(string) ⇒ Object
9 10 11 12 13 |
# File 'lib/ruby_ui_converter/naming.rb', line 9 def camelize(string) string.to_s.split(/[_\-\s]+/).reject(&:empty?).map do |part| part[0].upcase + part[1..].to_s end.join end |
.class_name(basename) ⇒ Object
Class name for a template basename (“index” / “_form” -> Index / Form).
16 17 18 |
# File 'lib/ruby_ui_converter/naming.rb', line 16 def class_name(basename) camelize(basename.sub(/\A_/, "")) end |
.namespace_parts(dir_rel, base_namespace) ⇒ Object
Module segments derived from base namespace + relative directory. (“users”, “Views”) -> [“Views”, “Users”]
22 23 24 25 26 |
# File 'lib/ruby_ui_converter/naming.rb', line 22 def namespace_parts(dir_rel, base_namespace) base_parts = base_namespace.to_s.split("::").reject(&:empty?) dir_parts = dir_rel.to_s.split("/").reject(&:empty?).map { |part| camelize(part) } base_parts + dir_parts end |
.partial_const(path, base_namespace:, current_namespace_parts: []) ⇒ Object
Resolves a render partial path to a fully-qualified constant.
"shared/header" -> "Views::Shared::Header"
"form" -> "<current namespace>::Form"
31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/ruby_ui_converter/naming.rb', line 31 def partial_const(path, base_namespace:, current_namespace_parts: []) segments = path.to_s.split("/") name = segments.pop.to_s.sub(/\A_/, "") if path.to_s.include?("/") base_parts = base_namespace.to_s.split("::").reject(&:empty?) dir_parts = segments.map { |segment| camelize(segment) } (base_parts + dir_parts + [camelize(name)]).join("::") else current = current_namespace_parts.empty? ? [base_namespace.to_s].reject(&:empty?) : current_namespace_parts (current + [camelize(name)]).join("::") end end |