Skip to content

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.

License

Notifications You must be signed in to change notification settings

jordanfowler/shadow

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Shadow

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.

Installation

If you are running Rails 2.1 or later, installation is straightforward:

$ ./script/plugin install git://github.com/jordanfowler/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/jordanfowler/shadow.git "./vendor/plugins/shadow/"; rm -rf ./vendor/plugins/shadow/.git

Example

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

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

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/).

About

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.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages