GitHub Sale: sign up for any paid plan this week and pay nothing until January 1, 2009!  [ hide ]

public
Description: Provides a history of attribute and association updates for models. This coincides with a versioning system (such as acts_as_versioned). When used in tandem, you get both a history of changes and a history of what changed.
Homepage: http://rubyforge.org/projects/ruby-shadow/
Clone URL: git://github.com/TheBreeze/shadow.git
shadow /
name age message
file MIT-LICENSE Fri May 02 15:52:03 -0700 2008 Initial import of shadow. [TheBreeze]
file README.markdown Fri May 30 12:25:11 -0700 2008 Updated README with Installation instructions. [TheBreeze]
file Rakefile Fri May 02 15:52:03 -0700 2008 Initial import of shadow. [TheBreeze]
file TODO Fri May 02 16:18:17 -0700 2008 Updated README, added TODO, updated method names. [TheBreeze]
file init.rb Fri May 02 15:52:03 -0700 2008 Initial import of shadow. [TheBreeze]
directory lib/ Mon Jul 21 15:30:59 -0700 2008 Updated find_version to versions.find_by_versio... [TheBreeze]
directory test/ Fri May 02 15:52:03 -0700 2008 Initial import of shadow. [TheBreeze]
README.markdown

Shadow

Provides a history of attribute and association updates for models. This coincides with a versioning system (such as actsasversioned). When used in tandem, you get both a history of changes and a history of what changed.

Installation

If you are running Edge Rails, installation is straightforward:


  $ ./script/plugin install git://github.com/TheBreeze/shadow.git

Otherwise, the process is a bit more involved, see below:


  $ cd /path/to/your/rails/app
  $ git clone --depth 1 git://github.com/TheBreeze/shadow.git "./vendor/plugins/shadow/"; rm -rf ./vendor/plugins/shadow/.git

Example

HTML parse error: 
<pre><code>
  # After creating your migrations (see TODO)

  # In your model

  class Vacation < ActiveRecord::Base
    has_many :photos

    # By default, shadows all :attributes and :associations. Here we're attaching a user, so we know who added a photo.
    shadow :associations => :photos, :attach => :user
  end
</code></pre>
HTML parse error: 
<pre><code>
  # In your controller (here we assume nested under VacationController)

  class PhotosController < ApplicationController
    def create
      @vacation = Vacation.find params[:vacation_id]

      # This is where you attach the :user to the photo. If Photo doesn't have a user attribute or association, shadow
      # will attach an attr_accessor to it and store it with the AssociationShadow record.
      @photo = Photo.new params[:photo].merge(:user => current_user)

      # You must either use the #association<<, #association.push, or #association.create for the shadow to be created.
      if @vacation.photos << @photo
        # success!
      end
    end
  end
</code></pre>

  # In your view (displaying the updates in the show action of VacationController)

  <h1>Vacation Updates</h1>

  <% @vacation.association_updates.each do |update| -%>
    <p><%= update.user.name %> <%= update.action %> <%= update.record.thumbnail %> to <%= update.association %></p>
  <% end -%>

  # Example result from view:

  <h1>Vacation Updates</h1>
  <p>Jordan added [photo thumbnail] to photos</p>

Copyright (c) 2008 Jordan Fowler, released under the MIT license, and originally developed for Cinema Treasures, LLC (http://www.cinematreasures.org/).