aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel/lib/active_model
diff options
context:
space:
mode:
authorJoshua Peek <josh@joshpeek.com>2009-06-17 10:37:39 -0500
committerJoshua Peek <josh@joshpeek.com>2009-06-17 10:37:39 -0500
commit1c4d28ba314c8cdd0039becf3bc9e678219b8f46 (patch)
tree67a4b6db06cc9c26145de94f06f3fe8e1adf7953 /activemodel/lib/active_model
parent85f2f34d5ec8ccdea4755740b810ac514d9f3dd9 (diff)
downloadrails-1c4d28ba314c8cdd0039becf3bc9e678219b8f46.tar.gz
rails-1c4d28ba314c8cdd0039becf3bc9e678219b8f46.tar.bz2
rails-1c4d28ba314c8cdd0039becf3bc9e678219b8f46.zip
Move model naming into ActiveModel
Diffstat (limited to 'activemodel/lib/active_model')
-rw-r--r--activemodel/lib/active_model/naming.rb25
1 files changed, 25 insertions, 0 deletions
diff --git a/activemodel/lib/active_model/naming.rb b/activemodel/lib/active_model/naming.rb
new file mode 100644
index 0000000000..ffb44e3824
--- /dev/null
+++ b/activemodel/lib/active_model/naming.rb
@@ -0,0 +1,25 @@
+require 'active_support/inflector'
+
+module ActiveModel
+ class Name < String
+ attr_reader :singular, :plural, :element, :collection, :partial_path
+ alias_method :cache_key, :collection
+
+ def initialize(name)
+ super
+ @singular = ActiveSupport::Inflector.underscore(self).tr('/', '_').freeze
+ @plural = ActiveSupport::Inflector.pluralize(@singular).freeze
+ @element = ActiveSupport::Inflector.underscore(ActiveSupport::Inflector.demodulize(self)).freeze
+ @collection = ActiveSupport::Inflector.tableize(self).freeze
+ @partial_path = "#{@collection}/#{@element}".freeze
+ end
+ end
+
+ module Naming
+ # Returns an ActiveModel::Name object for module. It can be
+ # used to retrieve all kinds of naming-related information.
+ def model_name
+ @_model_name ||= ActiveModel::Name.new(name)
+ end
+ end
+end