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