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
This commit is contained in:
David Heinemeier Hansson 2006-03-20 03:32:28 +00:00
parent f49ba114db
commit 4e7c6f58fb
5 changed files with 29 additions and 7 deletions

View File

@ -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]

View File

@ -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]

View File

@ -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

View File

@ -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)

View File

@ -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