Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Move Class::ModelName to Active Support module core_ext

  • Loading branch information...
commit faec7f5fd1fe476165e65830a8f3fea10176cd1c 1 parent fc6385f
Jeremy Kemper jeremy authored
20 actionpack/lib/action_controller/record_identifier.rb
View
@@ -1,19 +1,3 @@
-class Class
- def model_name
- @model_name ||= ModelName.new(name)
- end
-
- class ModelName
- attr_reader :singular, :plural, :path
-
- def initialize(name)
- @singular = name.underscore.tr('/', '_').freeze
- @plural = @singular.pluralize.freeze
- @path = "#{name.tableize}/#{name.demodulize.underscore}".freeze
- end
- end
-end
-
module ActionController
# The record identifier encapsulates a number of naming conventions for dealing with records, like Active Records or
# Active Resources or pretty much any other model type that has an id. These patterns are then used to try elevate
@@ -59,9 +43,9 @@ def partial_path(record_or_class, controller_path = nil)
name = model_name_from_record_or_class(record_or_class)
if controller_path && controller_path.include?("/")
- "#{File.dirname(controller_path)}/#{name.path}"
+ "#{File.dirname(controller_path)}/#{name.partial_path}"
else
- name.path
+ name.partial_path
end
end
5 activesupport/lib/active_support/core_ext/module.rb
View
@@ -6,3 +6,8 @@
require 'active_support/core_ext/module/introspection'
require 'active_support/core_ext/module/loading'
require 'active_support/core_ext/module/aliasing'
+require 'active_support/core_ext/module/model_naming'
+
+class Module
+ include ActiveSupport::CoreExt::Module::ModelNaming
+end
22 activesupport/lib/active_support/core_ext/module/model_naming.rb
View
@@ -0,0 +1,22 @@
+module ActiveSupport
+ class ModelName < String
+ attr_reader :singular, :plural, :partial_path
+
+ def initialize(name)
+ super
+ @singular = underscore.tr('/', '_').freeze
+ @plural = @singular.pluralize.freeze
+ @partial_path = "#{tableize}/#{demodulize.underscore}".freeze
+ end
+ end
+
+ module CoreExt
+ module Module
+ module ModelNaming
+ def model_name
+ @model_name ||= ModelName.new(name)
+ end
+ end
+ end
+ end
+end
19 activesupport/test/core_ext/module/model_naming_test.rb
View
@@ -0,0 +1,19 @@
+require 'abstract_unit'
+
+class ModelNamingTest < Test::Unit::TestCase
+ def setup
+ @name = ActiveSupport::ModelName.new('Post::TrackBack')
+ end
+
+ def test_singular
+ assert_equal 'post_track_back', @name.singular
+ end
+
+ def test_plural
+ assert_equal 'post_track_backs', @name.plural
+ end
+
+ def test_partial_path
+ assert_equal 'post/track_backs/track_back', @name.partial_path
+ end
+end
Please sign in to comment.
Something went wrong with that request. Please try again.