On Sun, 20 Aug 2006, Daniel Schierbeck wrote: > Daniel Schierbeck wrote: >> ara.t.howard / noaa.gov wrote: >>> def snake_case string >>> return string unless string =~ %r/[A-Z]/ >>> reversed_words = string.reverse.scan(%r/[A-Z]+|[^A-Z]*[A-Z]+?|[^A-Z]+/) >>> reversed_words.reverse.map{|word| >>> word.reverse.downcase}.join('_').gsub(%r/_+/,'_') > > This is what I got: <snip and integrate into my test> this is what i have - anyone have improvments? comments on camel_case? harp:~ > cat a.rb def snake_case string return string unless string =~ /[A-Z]/ string.split('_').map do |part| break "" if part.empty? reversed_words = part.reverse.scan(/[A-Z]+|[^A-Z]*[A-Z]+?|[^A-Z]+/) reversed_words.reverse.map do |word| word.reverse.downcase end.join('_') end.join('_') end def camel_case string return string if string =~ %r/[A-Z]/ and string !~ %r/_/ words = string.strip.split %r/\s*_+\s*/ words.map!{|w| w.downcase.sub(%r/^./){|c| c.upcase}} words.join end if $0 == __FILE__ require 'test/unit' require 'enumerator' class T < Test::Unit::TestCase tests = { "snake_case" => %w[ ThisIsSomeString this_is_some_string FOOBar foo_bar FOO_BAR foo_bar FOO_Bar foo_bar FOO_bar foo_bar Foo foo FooBAR foo_bar FooBar foo_bar Foo_Bar foo_bar Foo_bar foo_bar fooBar foo_bar foo_BAR foo_bar foo_Bar foo_bar ], "camel_case" => %w[ foo Foo foo_bar FooBar foo_bar_foobar FooBarFoobar this_is_some_string ThisIsSomeString ] } tests.each do |meth, list| testno = -1 list.each_slice(2) do |arg, expected| define_method "test_#{ meth }_#{ testno += 1 }" do actual = send meth, arg assert_equal expected, actual end end end end end harp:~ > ruby a.rb Loaded suite snake_camel Started ................. Finished in 0.002831 seconds. 17 tests, 17 assertions, 0 failures, 0 errors thanks for the input! cheers. -a -- to foster inner awareness, introspection, and reasoning is more efficient than meditation and prayer. - h.h. the 14th dali lama