diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2006-03-20 03:32:28 +0000 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2006-03-20 03:32:28 +0000 |
commit | 4e7c6f58fb14ad8783062303191eebed7699965b (patch) | |
tree | c88321c7d094d0419f4e7fb7b418b65b7e1fec64 | |
parent | f49ba114dbb330c1865682c111a9ba372cb40bda (diff) | |
download | rails-4e7c6f58fb14ad8783062303191eebed7699965b.tar.gz rails-4e7c6f58fb14ad8783062303191eebed7699965b.tar.bz2 rails-4e7c6f58fb14ad8783062303191eebed7699965b.zip |
Added option to String#camelize to generate lower-cased camel case by passing in :lower, like "super_man".camelize(:lower) # => "superMan" [DHH]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3986 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
-rw-r--r-- | actionpack/lib/action_view/helpers/prototype_helper.rb | 4 | ||||
-rw-r--r-- | activesupport/CHANGELOG | 2 | ||||
-rw-r--r-- | activesupport/lib/active_support/core_ext/string/inflections.rb | 7 | ||||
-rw-r--r-- | activesupport/lib/active_support/inflector.rb | 8 | ||||
-rw-r--r-- | activesupport/test/inflector_test.rb | 15 |
5 files changed, 29 insertions, 7 deletions
diff --git a/actionpack/lib/action_view/helpers/prototype_helper.rb b/actionpack/lib/action_view/helpers/prototype_helper.rb index 3d15f2ecfd..efa3e7a14a 100644 --- a/actionpack/lib/action_view/helpers/prototype_helper.rb +++ b/actionpack/lib/action_view/helpers/prototype_helper.rb @@ -738,7 +738,7 @@ module ActionView if method.to_s =~ /(.*)=$/ assign($1, arguments.first) else - call("#{method.to_s.first}#{method.to_s.camelize[1..-1]}", *arguments) + call("#{method.to_s.camelize(:lower)}", *arguments) end end @@ -865,7 +865,7 @@ module ActionView method_args = arguments_for_call options[:method_args] # foo, bar, function method_args << ', ' unless method_args.blank? add_variable_assignment!(options[:variable]) if options[:variable] - append_enumerable_function!("#{enumerable.to_s.first}#{enumerable.to_s.camelize[1..-1]}(#{method_args}function(#{yield_args}) {") + append_enumerable_function!("#{enumerable.to_s.camelize(:lower)}(#{method_args}function(#{yield_args}) {") # only yield as many params as were passed in the block yield *options[:yield_args].collect { |p| JavaScriptVariableProxy.new(@generator, p) }[0..block.arity-1] add_return_statement! if options[:return] diff --git a/activesupport/CHANGELOG b/activesupport/CHANGELOG index 9217ed99d2..e07feb55a0 100644 --- a/activesupport/CHANGELOG +++ b/activesupport/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Added option to String#camelize to generate lower-cased camel case by passing in :lower, like "super_man".camelize(:lower) # => "superMan" [DHH] + * Added Hash#diff to show the difference between two hashes [Chris McGrath] * Fixed HashWithIndifferentAccess#delete to work with both symbols and strings #2176 [Caio Chassot] diff --git a/activesupport/lib/active_support/core_ext/string/inflections.rb b/activesupport/lib/active_support/core_ext/string/inflections.rb index eef8a5bc89..07291032a6 100644 --- a/activesupport/lib/active_support/core_ext/string/inflections.rb +++ b/activesupport/lib/active_support/core_ext/string/inflections.rb @@ -12,8 +12,11 @@ module ActiveSupport #:nodoc: Inflector.singularize(self) end - def camelize - Inflector.camelize(self) + def camelize(first_letter = :upper) + case first_letter + when :upper then Inflector.camelize(self, true) + when :lower then Inflector.camelize(self, false) + end end alias_method :camelcase, :camelize diff --git a/activesupport/lib/active_support/inflector.rb b/activesupport/lib/active_support/inflector.rb index 43620757c2..ce36d3ef54 100644 --- a/activesupport/lib/active_support/inflector.rb +++ b/activesupport/lib/active_support/inflector.rb @@ -109,8 +109,12 @@ module Inflector end end - def camelize(lower_case_and_underscored_word) - lower_case_and_underscored_word.to_s.gsub(/\/(.?)/) { "::" + $1.upcase }.gsub(/(^|_)(.)/) { $2.upcase } + def camelize(lower_case_and_underscored_word, first_letter_in_uppercase = true) + if first_letter_in_uppercase + lower_case_and_underscored_word.to_s.gsub(/\/(.?)/) { "::" + $1.upcase }.gsub(/(^|_)(.)/) { $2.upcase } + else + lower_case_and_underscored_word.first + camelize(lower_case_and_underscored_word)[1..-1] + end end def titleize(word) diff --git a/activesupport/test/inflector_test.rb b/activesupport/test/inflector_test.rb index 12976a6d92..c0a2b76a5a 100644 --- a/activesupport/test/inflector_test.rb +++ b/activesupport/test/inflector_test.rb @@ -110,7 +110,14 @@ class InflectorTest < Test::Unit::TestCase "Product" => "product", "SpecialGuest" => "special_guest", "ApplicationController" => "application_controller", - "Area51Controller" => "area51_controller", + "Area51Controller" => "area51_controller" + } + + UnderscoreToLowerCamel = { + "product" => "product", + "special_guest" => "specialGuest", + "application_controller" => "applicationController", + "area51_controller" => "area51Controller" } CamelToUnderscoreWithoutReverse = { @@ -308,4 +315,10 @@ class InflectorTest < Test::Unit::TestCase assert_equal(underscored, Inflector.underscore(Inflector.dasherize(underscored))) end end + + def test_underscore_to_lower_camel + UnderscoreToLowerCamel.each do |underscored, lower_camel| + assert_equal(lower_camel, Inflector.camelize(underscored, false)) + end + end end |