aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel/README
diff options
context:
space:
mode:
Diffstat (limited to 'activemodel/README')
-rw-r--r--activemodel/README85
1 files changed, 37 insertions, 48 deletions
diff --git a/activemodel/README b/activemodel/README
index 0d6fd1f21c..3945a6da06 100644
--- a/activemodel/README
+++ b/activemodel/README
@@ -11,9 +11,9 @@ Active Model is a solution for this problem.
Active Model provides a known set of interfaces that your objects can implement
to then present a common interface to the Action Pack helpers. You can include
functionality from the following modules:
-
+
* Adding attribute magic to your objects
-
+
Add prefixes and suffixes to defined attribute methods...
class Person
@@ -34,7 +34,7 @@ functionality from the following modules:
{Learn more}[link:classes/ActiveModel/AttributeMethods.html]
* Adding callbacks to your objects
-
+
class Person
extend ActiveModel::Callbacks
define_model_callbacks :create
@@ -50,19 +50,19 @@ functionality from the following modules:
wrap your create method.
{Learn more}[link:classes/ActiveModel/CallBacks.html]
-
+
* For classes that already look like an Active Record object
-
+
class Person
include ActiveModel::Conversion
end
...returns the class itself when sent :to_model
-
+
{Learn more}[link:classes/ActiveModel/Conversion.html]
-
+
* Tracking changes in your object
-
+
Provides all the value tracking features implemented by ActiveRecord...
person = Person.new
@@ -77,29 +77,29 @@ functionality from the following modules:
person.previous_changes # => {'name' => ['bob, 'robert']}
{Learn more}[link:classes/ActiveModel/Dirty.html]
-
+
* Adding +errors+ support to your object
-
+
Provides the error messages to allow your object to interact with Action Pack
helpers seamlessly...
class Person
-
+
def initialize
@errors = ActiveModel::Errors.new(self)
end
-
+
attr_accessor :name
attr_reader :errors
-
+
def validate!
errors.add(:name, "can not be nil") if name == nil
end
-
+
def ErrorsPerson.human_attribute_name(attr, options = {})
"Name"
end
-
+
end
... gives you...
@@ -108,18 +108,18 @@ functionality from the following modules:
# => ["Name Can not be nil"]
person.errors.full_messages
# => ["Name Can not be nil"]
-
+
{Learn more}[link:classes/ActiveModel/Errors.html]
-
+
* Testing the compliance of your object
-
+
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...
@@ -131,19 +131,19 @@ functionality from the following modules:
NamedPerson.model_name #=> "NamedPerson"
NamedPerson.model_name.human #=> "Named person"
-
+
{Learn more}[link:classes/ActiveModel/Naming.html]
-
+
* Adding observer support to your objects
-
+
ActiveModel::Observers allows your object to implement the Observer
pattern in a Rails App and take advantage of all the standard observer
functions.
{Learn more}[link:classes/ActiveModel/Observer.html]
-
+
* Making your object serializable
-
+
ActiveModel::Serialization provides a standard interface for your object
to provide to_json or to_xml serialization...
@@ -153,48 +153,37 @@ functionality from the following modules:
s.to_xml # => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<serial-person...
{Learn more}[link:classes/ActiveModel/Serialization.html]
-
-
-* Turning your object into a finite State Machine
-
- ActiveModel::StateMachine provides a clean way to include all the methods
- you need to transform your object into a finite State Machine...
-
- light = TrafficLight.new
- light.current_state #=> :red
- light.change_color! #=> true
- light.current_state #=> :green
-
- {Learn more}[link:classes/ActiveModel/StateMachine.html]
-
+
* Integrating with Rail's internationalization (i18n) handling through
ActiveModel::Translations...
-
+
class Person
extend ActiveModel::Translation
end
{Learn more}[link:classes/ActiveModel/Translation.html]
-
+
* Providing a full Validation stack for your objects...
-
+
class Person
include ActiveModel::Validations
-
+
attr_accessor :first_name, :last_name
-
+
+
validates_each :first_name, :last_name do |record, attr, value|
record.errors.add attr, 'starts with z.' if value.to_s[0] == ?z
end
end
-
+
+
person = Person.new(:first_name => 'zoolander')
person.valid? #=> false
-
+
{Learn more}[link:classes/ActiveModel/Validations.html]
* Make custom validators
-
+
class Person
include ActiveModel::Validations
validates_with HasNameValidator
@@ -212,5 +201,5 @@ functionality from the following modules:
p.errors.full_messages #=> ["Name must exist"]
p.name = "Bob"
p.valid? #=> true
-
+
{Learn more}[link:classes/ActiveModel/Validator.html]