class Cpb::Generators::ClassGenerator

Public Instance Methods

create_class() click to toggle source
# File lib/cpb/generators/class_generator.rb, line 11
def create_class
  create_file "lib/#{class_path(name)}.rb" do
    verbose_namespace_definition(name)
  end
end
create_spec() click to toggle source
# File lib/cpb/generators/class_generator.rb, line 17
def create_spec
  template "spec.rb.tt", "spec/#{class_path(name)}_spec.rb"
end
create_spec_helper() click to toggle source
# File lib/cpb/generators/class_generator.rb, line 21
def create_spec_helper
  create_file "spec/spec_helper.rb" do
    "$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)"
  end
end

Private Instance Methods

class_path(name) click to toggle source
# File lib/cpb/generators/class_generator.rb, line 28
def class_path(name)
  @class_path ||= if name =~ /[A-Z]/
    name.gsub(/::/, '/').
    gsub!(/(.)([A-Z])/,'\1_\2').
    downcase
  else
    name
  end
end
constant_string(level,type,name,children=nil) click to toggle source
# File lib/cpb/generators/class_generator.rb, line 57
def constant_string(level,type,name,children=nil)
  return_value = tabs(level)
  return_value += [type,name].join(" ")+"\n"
  return_value += children if children
  return_value += tabs(level)
  return_value += "end\n"
end
described_class(name) click to toggle source
# File lib/cpb/generators/class_generator.rb, line 38
def described_class(name)
  @described_class ||= name.split(/[\/-]/).map do |frag|
    frag.split('_').map(&:capitalize).join("")
  end.join("::")
end
tabs(i) click to toggle source
# File lib/cpb/generators/class_generator.rb, line 65
def tabs(i)
  "  "*i
end
verbose_namespace_definition(name) click to toggle source
# File lib/cpb/generators/class_generator.rb, line 44
def verbose_namespace_definition(name)
  first_part, *parts = described_class(name).split("::").reverse

  unless parts.empty?
    i = parts.length
    parts.inject(constant_string(i,"class",first_part)) do |memo, namespace|
      constant_string(i-=1,"module",namespace,memo)
    end
  else
    "class #{first_part}\nend"
  end
end