Permalink
Browse files

Adding ActiveModel::Naming documentation

  • Loading branch information...
1 parent 87bd8c8 commit fbc7c2beca0433d4b070e3292a1009a94987d5c0 @mikel mikel committed Jan 17, 2010
Showing with 35 additions and 1 deletion.
  1. +18 −1 activemodel/README
  2. +17 −0 activemodel/lib/active_model/naming.rb
View
@@ -113,7 +113,24 @@ functionality from the following modules:
* Testing the compliance of your object
- User ActiveModel::Lint to test the compliance of your object to the
+ Use ActiveModel::Lint to test the compliance of your object to the
basic ActiveModel API...
{Learn more}[link:classes/ActiveModel/Lint/Tests.html]
+
+* Providing a human face to your object
+
+ ActiveModel::Naming provides your model with the model_name convention
+ and a human_name attribute...
+
+ class NamedPerson
+ extend ActiveModel::Naming
+ end
+
+ ...gives you...
+
+ NamedPerson.model_name #=> "NamedPerson"
+ NamedPerson.model_name.human #=> "Named person"
+
+ {Learn more}[link:classes/ActiveModel/Naming.html]
+
@@ -1,6 +1,7 @@
require 'active_support/inflector'
module ActiveModel
+
class Name < String
attr_reader :singular, :plural, :element, :collection, :partial_path
alias_method :cache_key, :collection
@@ -35,11 +36,27 @@ def human(options={})
end
end
+ # ActiveModel::Naming is a module that creates a +model_name+ method on your
+ # object.
+ #
+ # To implement, just extend ActiveModel::Naming in your object:
+ #
+ # class BookCover
+ # exten ActiveModel::Naming
+ # end
+ #
+ # BookCover.model_name #=> "BookCover"
+ # BookCover.model_name.human #=> "Book cover"
+ #
+ # Providing the functionality that ActiveModel::Naming provides in your object
+ # is required to pass the ActiveModel Lint test. So either extending the provided
+ # method below, or rolling your own is required..
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(self)
end
end
+
end

0 comments on commit fbc7c2b

Please sign in to comment.