From 0a678d412f1350631c69b8429d4bc011ac2eb4e7 Mon Sep 17 00:00:00 2001 From: Jon Higgs Date: Thu, 10 Jul 2014 16:20:01 +0200 Subject: [PATCH] snake_case to deal with numbers in string. --- lib/extlib/string.rb | 2 +- spec/string_spec.rb | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/extlib/string.rb b/lib/extlib/string.rb index 11f028c..5b5b67a 100644 --- a/lib/extlib/string.rb +++ b/lib/extlib/string.rb @@ -38,7 +38,7 @@ def unescape_regexp def snake_case return downcase if match(/\A[A-Z]+\z/) gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2'). - gsub(/([a-z])([A-Z])/, '\1_\2'). + gsub(/([a-z0-9])([A-Z])/, '\1_\2'). downcase end diff --git a/spec/string_spec.rb b/spec/string_spec.rb index d5ac258..5e444aa 100644 --- a/spec/string_spec.rb +++ b/spec/string_spec.rb @@ -57,6 +57,12 @@ it "leaves CamelCase as is" do "TestController".camel_case.should == "TestController" end + + it "handle when section ends in a number" do + "ec2_instance".camel_case.should == "Ec2Instance" + "ec2".camel_case.should == "Ec2" + "s3_bucket_name".camel_case.should == "S3BucketName" + end end @@ -79,6 +85,8 @@ "CNNNews".snake_case.should == "cnn_news" "HeadlineCNNNews".snake_case.should == "headline_cnn_news" "NameACRONYM".snake_case.should == "name_acronym" + "EC2".snake_case.should == "ec2" + "EC2Instance".snake_case.should == "ec2_instance" end it "does NOT change one word lowercase" do @@ -88,6 +96,12 @@ it "leaves snake_case as is" do "merb_core".snake_case.should == "merb_core" end + + it "detects a capital after a number" do + "Ec2Instance".snake_case.should == "ec2_instance" + "Route53".snake_case.should == "route53" + "S3BucketName".snake_case.should == "s3_bucket_name" + end end