This repository is private.
All pages are served over SSL and all pushing and pulling is done over SSH.
No one may fork, clone, or view it unless they are added as a member.
Every repository with this icon (
) is private.
Every repository with this icon (
This repository is public.
Anyone may fork, clone, or view it.
Every repository with this icon (
) is public.
Every repository with this icon (
commit c0545bc51de4565bfa3c37f04d90d011fa397f96
tree d0ab9be2ad793980105ef23c50eea5c75f16875b
parent ae92c75afbe1a4478b0fb8d82abdea70ae45fa06
tree d0ab9be2ad793980105ef23c50eea5c75f16875b
parent ae92c75afbe1a4478b0fb8d82abdea70ae45fa06
shadow /
| name | age | message | |
|---|---|---|---|
| |
MIT-LICENSE | Fri May 02 15:52:03 -0700 2008 | |
| |
README.markdown | Fri Sep 19 13:30:54 -0700 2008 | |
| |
Rakefile | Fri May 02 15:52:03 -0700 2008 | |
| |
TODO | Fri May 02 16:18:17 -0700 2008 | |
| |
init.rb | Fri May 02 15:52:03 -0700 2008 | |
| |
lib/ | Thu Aug 27 00:09:13 -0700 2009 | |
| |
test/ | Fri May 02 15:52:03 -0700 2008 |
README.markdown
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/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
# 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/).







