Skip to content

Commit

Permalink
Move Class::ModelName to Active Support module core_ext
Browse files Browse the repository at this point in the history
  • Loading branch information
jeremy committed Jun 6, 2008
1 parent c1a9820 commit 566d717
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 18 deletions.
20 changes: 2 additions & 18 deletions actionpack/lib/action_controller/record_identifier.rb
@@ -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
Expand Down Expand Up @@ -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

Expand Down
5 changes: 5 additions & 0 deletions activesupport/lib/active_support/core_ext/module.rb
Expand Up @@ -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 changes: 22 additions & 0 deletions activesupport/lib/active_support/core_ext/module/model_naming.rb
@@ -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 changes: 19 additions & 0 deletions activesupport/test/core_ext/module/model_naming_test.rb
@@ -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

0 comments on commit 566d717

Please sign in to comment.