2008年 06月 15日

feature name

def feature_name(class_name)
	class_name.split(/::/).map {|const|
		const.scan(/[A-Z](?:(?![A-Z][a-z])[A-Za-z])*/).map {|i| i.downcase }.join("_")
	}.join("/")
end


require "rubygems"
require "spec"

describe "feature_name" do
	it "should generate filename from class_name" do
		feature_name("A").should           == "a"
		feature_name("Foo").should         == "foo"
		feature_name("FooBar").should      == "foo_bar"
		feature_name("FOOBar").should      == "foo_bar"
		feature_name("Foo::Bar").should    == "foo/bar"
		feature_name("Foo::BarBaz").should == "foo/bar_baz"
	end
end

def feature_name_(class_name)
	class_name.split(/::/).map {|const|
		const.downcase
	}.join("/")
end

require "rubygems"
require "spec"

describe "feature_name_" do
	it "should generate filename from class_name" do
		feature_name_("A").should           == "a"
		feature_name_("Foo").should         == "foo"
		feature_name_("FooBar").should      == "foobar"
		feature_name_("FOOBar").should      == "foobar"
		feature_name_("Foo::Bar").should    == "foo/bar"
		feature_name_("Foo::BarBaz").should == "foo/barbaz"
	end
end

アンダースコアださいなぁ…… どうせ逆変換できないなら後者でいい感じかなぁ。。