<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>features/scribe.feature</filename>
    </added>
    <added>
      <filename>features/steps/scribe_steps.rb</filename>
    </added>
    <added>
      <filename>features/support/env.rb</filename>
    </added>
    <added>
      <filename>spec/factories.rb</filename>
    </added>
    <added>
      <filename>spec/models.rb</filename>
    </added>
    <added>
      <filename>spec/models/activity_spec.rb</filename>
    </added>
    <added>
      <filename>spec/schema.rb</filename>
    </added>
    <added>
      <filename>spec/spec.opts</filename>
    </added>
    <added>
      <filename>spec/spec_helper.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -23,20 +23,47 @@ Install
  
  `rake db:migrate`
  
-Usage
------
+Record activities in your models
+---------------------------------------------
  
- * Make your ActiveRecord model acts as scribe.
 &lt;pre&gt;
   class Comment &lt; ActiveRecord::Base    
     record_activity_of :user
   end
 &lt;/pre&gt;
+You can use any association that is related to an user:
+&lt;pre&gt;
+  class Post &lt; ActiveRecord::Base
+    belongs_to :author, :class_name =&gt; &quot;User&quot;
+    record_activity_of :author
+  end
+&lt;/pre&gt;
+
+This will register automatically a new activity when you create or destroy a new record. If you want control over the activities registration based on your model's state just use the :if option
 
- * If you want to record activities not related to any specific model just use `record_activities :activity` in your user model:
 &lt;pre&gt;
-  class User &lt; ActiveRecord::Base
-    record_activities [:featured_on_home, :logged_in, :logged_out]
+  class Post &lt; ActiveRecord::Base
+    belongs_to :author, :class_name =&gt; &quot;User&quot;
+    record_activity_of :author, :if =&gt; Proc.new { |post| post.private == false }
+  end
+&lt;/pre&gt;
+
+
+Record activities without related item
+--------------------------------------
+
+If you want to record activities not related to any specific model just use `Activity.report` in your code:
+&lt;pre&gt;
+  def grant_admin(user)
+    user.admin = true
+    Activity.report(current_user, :grant_admin, user)
+  end
+&lt;/pre&gt;
+If the action is not related to any item, just don't use it.
+&lt;pre&gt;
+  def login
+    current_user = User.find(&#8230;)
+    Activity.report(current_user, :login)
   end
 &lt;/pre&gt;
  </diff>
      <filename>README.markdown</filename>
    </modified>
    <modified>
      <diff>@@ -1,22 +1,51 @@
 require 'rake'
-require 'rake/testtask'
-require 'rake/rdoctask'
 
-desc 'Default: run unit tests.'
-task :default =&gt; :test
-
-desc 'Test the acts_as_scribe plugin.'
-Rake::TestTask.new(:test) do |t|
-  t.libs &lt;&lt; 'lib'
-  t.pattern = 'test/**/*_test.rb'
-  t.verbose = true
+begin
+  require 'jeweler'
+  Jeweler::Tasks.new do |s|
+    s.name = &quot;acts_as_scribe&quot;
+    s.summary = %Q{A simple plugin that allows to keep track of the users activity. Common uses could be user's wall, public timeline portlets, etc...}
+    s.email = &quot;aitor@linkingpaths.com&quot;
+    s.homepage = &quot;http://github.com/linkingpaths/acts_as_scribe&quot;
+    s.description = &quot;A simple plugin that allows to keep track of the users activity. Common uses could be user's wall, public timeline portlets, etc...&quot;
+    s.authors = [&quot;Linking Paths&quot;, &quot;Aitor Garc&#237;a&quot;, &quot;Roberto Salicio&quot;]
+  end
+rescue LoadError
+  puts &quot;Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com&quot;
 end
 
-desc 'Generate documentation for the acts_as_scribe plugin.'
-Rake::RDocTask.new(:rdoc) do |rdoc|
+require 'rake/rdoctask'
+Rake::RDocTask.new do |rdoc|
   rdoc.rdoc_dir = 'rdoc'
-  rdoc.title    = 'ActsAsScribe'
+  rdoc.title = 'acts_as_scribe'
   rdoc.options &lt;&lt; '--line-numbers' &lt;&lt; '--inline-source'
-  rdoc.rdoc_files.include('README')
+  rdoc.rdoc_files.include('README*')
   rdoc.rdoc_files.include('lib/**/*.rb')
 end
+
+require 'rake/testtask'
+Rake::TestTask.new(:test) do |t|
+  t.libs &lt;&lt; 'lib' &lt;&lt; 'test'
+  t.pattern = 'test/**/*_test.rb'
+  t.verbose = false
+end
+
+begin
+  require 'rcov/rcovtask'
+  Rcov::RcovTask.new do |t|
+    t.libs &lt;&lt; 'test'
+    t.test_files = FileList['test/**/*_test.rb']
+    t.verbose = true
+  end
+rescue LoadError
+  puts &quot;RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov&quot;
+end
+
+begin
+  require 'cucumber/rake/task'
+  Cucumber::Rake::Task.new(:features)
+rescue LoadError
+  puts &quot;Cucumber is not available. In order to run features, you must: sudo gem install cucumber&quot;
+end
+
+task :default =&gt; :test</diff>
      <filename>Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -1,22 +1,29 @@
+# -*- encoding: utf-8 -*-
+
 Gem::Specification.new do |s|
   s.name = %q{acts_as_scribe}
-  s.version = &quot;0.0.2&quot;
+  s.version = &quot;0.1.0&quot;
 
   s.required_rubygems_version = Gem::Requirement.new(&quot;&gt;= 0&quot;) if s.respond_to? :required_rubygems_version=
-  s.authors = [&quot;Linking Paths&quot;]
-  s.date = %q{2008-10-16}
+  s.authors = [&quot;Linking Paths&quot;, &quot;Aitor Garc\303\255a&quot;, &quot;Roberto Salicio&quot;]
+  s.date = %q{2009-02-24}
   s.description = %q{A simple plugin that allows to keep track of the users activity. Common uses could be user's wall, public timeline portlets, etc...}
-  s.email = [&quot;aitor@linkingpaths.com&quot;]
-  s.files = [&quot;MIT-LICENSE&quot;, &quot;README.markdown&quot;, &quot;Rakefile&quot;, &quot;acts_as_scribe.gemspec&quot;, &quot;generators&quot;, &quot;generators/acts_as_scribe_migration&quot;, &quot;generators/acts_as_scribe_migration/acts_as_scribe_migration_generator.rb&quot;, &quot;generators/acts_as_scribe_migration/templates&quot;, &quot;generators/acts_as_scribe_migration/templates/migration.rb&quot;, &quot;generators/acts_as_scribe_migration/USAGE&quot;, &quot;init.rb&quot;, &quot;lib&quot;, &quot;lib/activity.rb&quot;, &quot;lib/acts_as_scribe.rb&quot;, &quot;lib/scribe.rb&quot;, &quot;test&quot;, &quot;test/.DS_Store&quot;, &quot;test/factories.rb&quot;, &quot;test/functional&quot;, &quot;test/functional/acts_as_scribe_test.rb&quot;, &quot;test/schema.rb&quot;, &quot;test/test_helper.rb&quot;, &quot;test/unit&quot;, &quot;test/unit/activity_test.rb&quot; ]
+  s.email = %q{aitor@linkingpaths.com}
+  s.files = [&quot;README.markdown&quot;, &quot;VERSION.yml&quot;, &quot;generators/acts_as_scribe_migration&quot;, &quot;generators/acts_as_scribe_migration/acts_as_scribe_migration_generator.rb&quot;, &quot;generators/acts_as_scribe_migration/templates&quot;, &quot;generators/acts_as_scribe_migration/templates/migration.rb&quot;, &quot;generators/acts_as_scribe_migration/USAGE&quot;, &quot;lib/activity.rb&quot;, &quot;lib/acts_as_scribe.rb&quot;, &quot;lib/scribe.rb&quot;, &quot;spec/factories.rb&quot;, &quot;spec/models&quot;, &quot;spec/models/activity_spec.rb&quot;, &quot;spec/models.rb&quot;, &quot;spec/schema.rb&quot;, &quot;spec/spec.opts&quot;, &quot;spec/spec_helper.rb&quot;]
   s.has_rdoc = true
   s.homepage = %q{http://github.com/linkingpaths/acts_as_scribe}
-  s.post_install_message = %q{
-For more information on acts_as_scribe, see http://github.com/linkingpaths/acts_as_scribe
-
-}
+  s.rdoc_options = [&quot;--inline-source&quot;, &quot;--charset=UTF-8&quot;]
   s.require_paths = [&quot;lib&quot;]
-  s.rubyforge_project = %q{acts_as_scribe}
-  s.rubygems_version = %q{1.2.0}
+  s.rubygems_version = %q{1.3.1}
   s.summary = %q{A simple plugin that allows to keep track of the users activity. Common uses could be user's wall, public timeline portlets, etc...}
 
+  if s.respond_to? :specification_version then
+    current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
+    s.specification_version = 2
+
+    if Gem::Version.new(Gem::RubyGemsVersion) &gt;= Gem::Version.new('1.2.0') then
+    else
+    end
+  else
+  end
 end</diff>
      <filename>acts_as_scribe.gemspec</filename>
    </modified>
    <modified>
      <diff>@@ -8,9 +8,11 @@ class ActsAsScribeMigration &lt; ActiveRecord::Migration
       t.string  :item_type
       t.timestamps
     end
+    add_index :activities, [:item_type, :item_id]
   end
 
   def self.down
+    remove_index :activities, [:item_type, :item_id]
     drop_table :activities
   end
 </diff>
      <filename>generators/acts_as_scribe_migration/templates/migration.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,17 +1,44 @@
 class Activity &lt; ActiveRecord::Base
+  named_scope :by_user, lambda { |users|
+     { :conditions =&gt; { :user_id =&gt; users}}
+  }
+
+  named_scope :by_action, lambda { |action|
+     { :conditions =&gt; { :action =&gt; action }}
+  }
+
+  named_scope :by_item, lambda { |item|
+     { :conditions =&gt; { :item_type =&gt; item.class.name, :item_id =&gt; item.id }}
+  }
+  
+  named_scope :created_since, lambda { |time_ago| 
+    { :conditions =&gt; ['created_at &gt; ?', time_ago]}
+  }
+    
+
   belongs_to :user
   belongs_to :item, :polymorphic =&gt; true
   validates_presence_of :user_id
 
   def self.created_by(user)
-    Activity.find(:all, :conditions =&gt; { :user_id =&gt; user.id})
+    raise &quot;Activity.created_by(user) has been deprecated. Use Activity.by_user(user) instead.&quot;
   end
 
   def self.without_model_created_by(user)
-    Activity.find(:all, :conditions =&gt; { :user_id =&gt; user.id, :item_type =&gt; nil, :item_id =&gt; nil})
+    raise &quot;Activity.without_model_created_by(user) has been deprecated. Use Activity.by_user(user) and filter the results instead.&quot;
   end
 
   def without_model?
     item.nil?
   end
-end
+  
+  def self.report(user, action, object=nil)
+    returning Activity.new do |a|
+      a.item = object if object
+      a.action = action
+      a.user = user
+      a.save!
+    end
+  end
+
+end
\ No newline at end of file</diff>
      <filename>lib/activity.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,4 @@
+require 'activity'
 require 'scribe'
 
 ActiveRecord::Base.send :include, LinkingPaths::Acts::Scribe
\ No newline at end of file</diff>
      <filename>lib/acts_as_scribe.rb</filename>
    </modified>
    <modified>
      <diff>@@ -14,7 +14,14 @@ module LinkingPaths
             has_many :activities, :as =&gt; :item, :dependent =&gt; :destroy
             after_create do |record|
               unless options[:if].kind_of?(Proc) and not options[:if].call(record)
-                record.create_activity_from_self 
+                user = record.send(activity_options[:actor])
+                Activity.report(user, :create, record)
+              end
+            end
+            after_destroy do |record|
+              unless options[:if].kind_of?(Proc) and not options[:if].call(record)
+                user = record.send(activity_options[:actor])
+                Activity.report(user, :destroy, record)
               end
             end
           }
@@ -22,13 +29,9 @@ module LinkingPaths
         end
 
         def record_activities(actions = [])
-          include_scribe_instance_methods {
-            has_many :activities
-            has_many :activities_without_model, :class_name =&gt; &quot;Activity&quot;, :conditions =&gt; { :item_type =&gt; nil, :item_id =&gt; nil }
-          }
-          self.activity_options.merge! :actions =&gt; actions
+          raise &quot;record_activities(#{actions.join ','}) has been deprecated. Use Activity.report(user, #{actions.first}), etc. instead.&quot;
         end
-        
+
         def include_scribe_instance_methods(&amp;block)
           unless included_modules.include? InstanceMethods
             yield if block_given?
@@ -37,32 +40,13 @@ module LinkingPaths
             include InstanceMethods
           end
         end
-        
+
       end
 
       module InstanceMethods
-
-        def create_activity_from_self
-          activity = Activity.new
-          activity.item = self
-          activity.action = ActiveSupport::Inflector::underscore(self.class)
-          actor_id = self.send( activity_options[:actor].to_s + &quot;_id&quot; )
-          activity.user_id = actor_id
-          activity.save
-        end
-
         def record_activity(action)
-          if activity_options[:actions] &amp;&amp; activity_options[:actions].include?(action)
-            activity = Activity.new
-            activity.action = action.to_s
-            activity.user_id = self.id
-            activity.save!
-          else
-            raise &quot;The action #{action} can't be tracked.&quot;
-          end
-        end    
-
-
+            raise &quot;record_activity has been deprecated. Use Activity.report(actor, action, item).&quot;
+        end
       end
 
     end</diff>
      <filename>lib/scribe.rb</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>test/factories.rb</filename>
    </removed>
    <removed>
      <filename>test/functional/acts_as_scribe_test.rb</filename>
    </removed>
    <removed>
      <filename>test/schema.rb</filename>
    </removed>
    <removed>
      <filename>test/test_helper.rb</filename>
    </removed>
    <removed>
      <filename>test/unit/activity_test.rb</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>cd0780ef713b35a7f102436bf40dd5043b7b0cfe</id>
    </parent>
  </parents>
  <author>
    <name>Aitor Garc&#237;a</name>
    <email>aitor.garcia@gmail.com</email>
  </author>
  <url>http://github.com/linkingpaths/acts_as_scribe/commit/519713f521f2c714fef18bbc2edfe23ac00b8a0e</url>
  <id>519713f521f2c714fef18bbc2edfe23ac00b8a0e</id>
  <committed-date>2009-02-24T10:14:36-08:00</committed-date>
  <authored-date>2009-02-24T10:14:36-08:00</authored-date>
  <message>New version 0.1</message>
  <tree>9b7e931c10b1330450093822f5b65ee6148e7162</tree>
  <committer>
    <name>Aitor Garc&#237;a</name>
    <email>aitor.garcia@gmail.com</email>
  </committer>
</commit>
