github
Advanced Search
  • Home
  • Pricing and Signup
  • Explore GitHub
  • Blog
  • Login

rails / rails

  • Admin
  • Watch Unwatch
  • Fork
  • Your Fork
  • Pull Request
  • Download Source
    • 4,959
    • 829
  • Source
  • Commits
  • Network (829)
  • Downloads (61)
  • Wiki (4)
  • Graphs
  • Branch: master

click here to add a description

click here to add a homepage

  • Branches (6)
    • 1-2-stable
    • 2-0-stable
    • 2-1-stable
    • 2-2-stable
    • 2-3-stable
    • master ✓
  • Tags (61)
    • v3.0.0.beta1
    • v2.3.5
    • v2.3.4
    • v2.3.3.1
    • v2.3.3
    • v2.3.2.1
    • v2.3.2
    • v2.3.1
    • v2.3.0
    • v2.2.3
    • v2.2.2
    • v2.2.1
    • v2.2.0
    • v2.1.2
    • v2.1.1
    • v2.1.0_RC1
    • v2.1.0
    • v2.0.5
    • v2.0.4
    • v2.0.3
    • v2.0.2
    • v2.0.1
    • v2.0.0_RC2
    • v2.0.0_RC1
    • v2.0.0_PR
    • v2.0.0
    • v1.2.6
    • v1.2.5
    • v1.2.4
    • v1.2.3
    • v1.2.2
    • v1.2.1
    • v1.2.0_RC2
    • v1.2.0_RC1
    • v1.2.0
    • v1.1.6
    • v1.1.5
    • v1.1.4
    • v1.1.3
    • v1.1.2
    • v1.1.1
    • v1.1.0_RC1
    • v1.1.0
    • v1.0.0
    • v0.14.4
    • v0.14.3
    • v0.14.2
    • v0.14.1
    • v0.13.1
    • v0.13.0
    • v0.12.0
    • v0.11.1
    • v0.11.0
    • v0.10.1
    • v0.10.0
    • v0.9.5
    • v0.9.4.1
    • v0.9.4
    • v0.9.3
    • v0.9.2
    • v0.9.1
Sending Request…
Enable Donations

Pledgie Donations

Once activated, we'll place the following badge in your repository's detail box:
Pledgie_example
This service is courtesy of Pledgie.

Ruby on Rails — Read more

  cancel

http://rubyonrails.org

  cancel
  • Private
  • Read-Only
  • HTTP Read-Only

This URL has Read+Write access

Fix a couple failing tests. 
josevalim (author)
Tue Feb 09 23:33:41 -0800 2010
commit  97650bf54a8c50cd7ee9e41a500503d9be5b5b5d
tree    702c67a12a81cea4b3f84c73855f4abeafbd5862
parent  9c654744fbc5f3035e07f741997d37f287729103
rails / activemodel
name age
history
message
..
file CHANGELOG Sun Jan 03 19:02:10 -0800 2010 Change the ActiveModel::Base.include_root_in_js... [dhh]
file CHANGES Sun Aug 09 22:47:56 -0700 2009 Introduce validates_with to encapsulate attribu... [zilkey]
file MIT-LICENSE Sun Jan 31 15:10:53 -0800 2010 Updating copyright dates on all licenses [mikel]
file README Sun Jan 31 15:08:20 -0800 2010 Full update on ActiveModel documentation [mikel]
file Rakefile Fri Feb 05 00:03:03 -0800 2010 Submarine the rake-gemcutter dep in Rakefiles [jeremy]
file activemodel.gemspec Mon Feb 08 00:42:12 -0800 2010 Adding ruby version spec to all gemspec files t... [mikel]
directory examples/ Mon Sep 14 13:04:43 -0700 2009 Fix deprecated gem-name requires [jeremy]
directory lib/ Sat Feb 06 06:51:44 -0800 2010 Fix tiny version number from '3.0.0beta' to '3.... [Prem Sichanugrist]
directory test/ Sun Jan 31 19:13:43 -0800 2010 Get rails tests running on bundler 0.9 [carllerche]
activemodel/README
= Active Model - defined interfaces for Rails
 
Prior to Rails 3.0, if a plugin or gem developer wanted to be able to have
an object interact with Action Pack helpers, it was required to either
copy chunks of code from Rails, or monkey patch entire helpers to make them
handle objects that did not look like Active Record.  This generated code
duplication and fragile applications that broke on upgrades.
 
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
      include ActiveModel::AttributeMethods
      
      attribute_method_prefix 'clear_'
      define_attribute_methods [:name, :age]
      
      attr_accessor :name, :age
    
      def clear_attribute(attr)
        send("#{attr}=", nil)
      end
    end
    
    ...gives you clear_name, clear_age.
  
  {Learn more}[link:classes/ActiveModel/AttributeMethods.html]
  
* Adding callbacks to your objects
 
    class Person
      extend ActiveModel::Callbacks
      define_model_callbacks :create
    
      def create
        _run_create_callbacks do
          # Your create action methods here
        end
      end
    end
    
    ...gives you before_create, around_create and after_create class methods that
    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
    person.name # => nil
    person.changed? # => false
    person.name = 'bob'
    person.changed? # => true
    person.changed # => ['name']
    person.changes # => { 'name' => [nil, 'bob'] }
    person.name = 'robert'
    person.save
    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...
    
    person.errors.full_messages
    # => ["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...
    
    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]
 
* 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...
    
    s = SerialPerson.new
    s.serializable_hash   # => {"name"=>nil}
    s.to_json             # => "{\"name\":null}"
    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
     attr_accessor :name
   end
   
   class HasNameValidator < ActiveModel::Validator
     def validate(record)
      record.errors[:name] = "must exist" if record.name.blank?
     end
   end
  
   p = ValidatorPerson.new
   p.valid?                  #=>  false
   p.errors.full_messages    #=> ["Name must exist"]
   p.name = "Bob"
   p.valid?                  #=>  true
 
  {Learn more}[link:classes/ActiveModel/Validator.html]
Blog | Support | Training | Contact | API | Status | Twitter | Help | Security
© 2010 GitHub Inc. All rights reserved. | Terms of Service | Privacy Policy
Powered by the Dedicated Servers and
Cloud Computing of Rackspace Hosting®
Dedicated Server