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

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