aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--actionpack/lib/action_view/helpers/prototype_helper.rb4
-rw-r--r--activesupport/CHANGELOG2
-rw-r--r--activesupport/lib/active_support/core_ext/string/inflections.rb7
-rw-r--r--activesupport/lib/active_support/inflector.rb8
-rw-r--r--activesupport/test/inflector_test.rb15
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