Skip to content

Commit 43158e5

Browse files
committed
Merge pull request rails#3696 from lest/fix-plugin-generator
fix rails plugin new CamelCasedName bug
2 parents bc04455 + c220b4d commit 43158e5

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

railties/lib/rails/generators/rails/plugin_new/plugin_new_generator.rb

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -246,8 +246,20 @@ def self.banner
246246
"rails plugin new #{self.arguments.map(&:usage).join(' ')} [options]"
247247
end
248248

249+
def original_name
250+
@original_name ||= File.basename(destination_root)
251+
end
252+
249253
def name
250-
@name ||= File.basename(destination_root)
254+
@name ||= begin
255+
# same as ActiveSupport::Inflector#underscore except not replacing '-'
256+
underscored = original_name.dup
257+
underscored.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
258+
underscored.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
259+
underscored.downcase!
260+
261+
underscored
262+
end
251263
end
252264

253265
def camelized
@@ -256,11 +268,11 @@ def camelized
256268

257269
def valid_const?
258270
if camelized =~ /^\d/
259-
raise Error, "Invalid plugin name #{name}. Please give a name which does not start with numbers."
271+
raise Error, "Invalid plugin name #{original_name}. Please give a name which does not start with numbers."
260272
elsif RESERVED_NAMES.include?(name)
261-
raise Error, "Invalid plugin name #{name}. Please give a name which does not match one of the reserved rails words."
273+
raise Error, "Invalid plugin name #{original_name}. Please give a name which does not match one of the reserved rails words."
262274
elsif Object.const_defined?(camelized)
263-
raise Error, "Invalid plugin name #{name}, constant #{camelized} is already in use. Please choose another plugin name."
275+
raise Error, "Invalid plugin name #{original_name}, constant #{camelized} is already in use. Please choose another plugin name."
264276
end
265277
end
266278

railties/test/generators/plugin_new_generator_test.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@ def test_invalid_plugin_name_is_fixed
3737
assert_file "things-43/lib/things-43.rb", /module Things43/
3838
end
3939

40+
def test_camelcase_plugin_name_underscores_filenames
41+
run_generator [File.join(destination_root, "CamelCasedName")]
42+
assert_no_file "CamelCasedName/lib/CamelCasedName.rb"
43+
assert_file "CamelCasedName/lib/camel_cased_name.rb", /module CamelCasedName/
44+
end
45+
4046
def test_generating_without_options
4147
run_generator
4248
assert_file "README.rdoc", /Bukkits/

0 commit comments

Comments
 (0)