public_activity 0.2 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,8 +1,11 @@
1
1
  require 'rails/generators/named_base'
2
2
 
3
3
  module PublicActivity
4
+ # A generator module with Activity table schema.
4
5
  module Generators
6
+ # A base module
5
7
  module Base
8
+ # Get path for migration template
6
9
  def source_root
7
10
  @_public_activity_source_root ||= File.expand_path(File.join('../public_activity', generator_name, 'templates'), __FILE__)
8
11
  end
@@ -3,11 +3,12 @@ require 'rails/generators/active_record'
3
3
 
4
4
  module PublicActivity
5
5
  module Generators
6
+ # Migration generator that creates migration file from template
6
7
  class MigrationGenerator < ActiveRecord::Generators::Base
7
8
  extend Base
8
9
 
9
10
  argument :name, :type => :string, :default => 'create_activities'
10
-
11
+ # Create migration in project's folder
11
12
  def generate_files
12
13
  migration_template 'migration.rb', "db/migrate/#{name}"
13
14
  end
@@ -1,4 +1,6 @@
1
+ # Migration responsible for creating a table with activities
1
2
  class CreateActivities < ActiveRecord::Migration
3
+ # Create table
2
4
  def self.up
3
5
  create_table :activities do |t|
4
6
  t.belongs_to :trackable, :polymorphic => true
@@ -9,7 +11,7 @@ class CreateActivities < ActiveRecord::Migration
9
11
  t.timestamps
10
12
  end
11
13
  end
12
-
14
+ # Drop table
13
15
  def self.down
14
16
  drop_table :activities
15
17
  end
@@ -51,6 +51,7 @@ module PublicActivity
51
51
  include Tracked
52
52
  end
53
53
 
54
+ # Module with basic +tracked+ method that enables tracking models.
54
55
  module ClassMethods
55
56
  # Adds required callbacks for creating and updating
56
57
  # tracked models and adds +activities+ relation for listing
@@ -1,14 +1,15 @@
1
1
  module PublicActivity
2
+ # Common methods shared across the gem.
2
3
  module Common
3
4
  extend ActiveSupport::Concern
4
-
5
+ # Instance methods used by other methods in PublicActivity module.
5
6
  module InstanceMethods
6
7
  private
7
8
  # Creates activity based on supplied arguments
8
9
  def create_activity(key, owner, params)
9
10
  self.activities.create(:key => key, :owner => owner, :parameters => params)
10
11
  end
11
- # Prepare settings used during creation of Activity record.
12
+ # Prepares settings used during creation of Activity record.
12
13
  # params passed directly to tracked model have priority over
13
14
  # settings specified in tracked() method
14
15
  def prepare_settings
@@ -23,10 +24,11 @@ module PublicActivity
23
24
  owner = self.class.activity_owner_global.call
24
25
  end
25
26
  end
27
+
26
28
  #customizable parameters
27
29
  parameters = self.class.activity_params_global
28
30
  parameters.merge! self.activity_params if self.activity_params
29
- return {:owner => owner, :parameters => parameters}
31
+ return {:key => self.activity_key,:owner => owner, :parameters => parameters}
30
32
  end
31
33
  end
32
34
  end
@@ -1,24 +1,25 @@
1
1
  module PublicActivity
2
+ # Handles creation of Activities upon destruction and update of tracked model.
2
3
  module Creation
3
4
  extend ActiveSupport::Concern
4
-
5
+
5
6
  included do
6
7
  after_create :activity_on_create
7
8
  after_update :activity_on_update
8
9
  end
9
-
10
+ # Handlers responsible for creating Activities.
10
11
  module InstanceMethods
11
12
  private
12
13
  # Creates activity upon creation of the tracked model
13
14
  def activity_on_create
14
15
  settings = prepare_settings
15
- create_activity("activity."+self.class.name.downcase+".create", settings[:owner], settings[:parameters])
16
+ create_activity(settings[:key] || "activity."+self.class.name.parameterize('_')+".create", settings[:owner], settings[:parameters])
16
17
  end
17
18
 
18
19
  # Creates activity upon modification of the tracked model
19
20
  def activity_on_update
20
21
  settings = prepare_settings
21
- create_activity("activity."+self.class.name.downcase+".update", settings[:owner], settings[:parameters])
22
+ create_activity(settings[:key] || "activity."+self.class.name.parameterize('_')+".update", settings[:owner], settings[:parameters])
22
23
  end
23
24
  end
24
25
  end
@@ -1,17 +1,18 @@
1
1
  module PublicActivity
2
+ # Handles creation of Activities upon destruction of tracked model.
2
3
  module Destruction
3
4
  extend ActiveSupport::Concern
4
5
 
5
6
  included do
6
7
  before_destroy :activity_on_destroy
7
8
  end
8
-
9
+ # Handlers responsible for adding {Activity} when object is destroyed.
9
10
  module InstanceMethods
10
11
  private
11
12
  # Records an activity upon destruction of the tracked model
12
13
  def activity_on_destroy
13
14
  settings = prepare_settings
14
- create_activity("activity."+self.class.name.downcase+".destroy", settings[:owner], settings[:parameters])
15
+ create_activity("activity."+self.class.name.parameterize('_')+".destroy", settings[:owner], settings[:parameters])
15
16
  end
16
17
  end
17
18
  end
@@ -1,5 +1,5 @@
1
1
  module PublicActivity
2
- # Add a flag to determine whether a model class is being tracked
2
+ # Main module extending classes we want to keep track of.
3
3
  module Tracked
4
4
  extend ActiveSupport::Concern
5
5
 
@@ -16,7 +16,7 @@ module PublicActivity
16
16
  # @article = Article.new
17
17
  # @article.activity_params = {:article_title => @article.title}
18
18
  # @article.save
19
- # This way you can pass strings that should remain constant, even when {Article}
19
+ # This way you can pass strings that should remain constant, even when Article
20
20
  # changes after creating this {Activity}.
21
21
  attr_accessor :activity_params
22
22
  @activity_params = {}
@@ -51,7 +51,7 @@ module PublicActivity
51
51
  # @article = Article.new
52
52
  # @article.save
53
53
  # @article.activities.last.key #=> "activity.article.create"
54
- # By default, key looks like "activity.{class_name}.{create|update}"
54
+ # By default, key looks like "activity.[class_name].[create|update|destroy]"
55
55
  #
56
56
  # You can customize it, by setting your own key:
57
57
  # @article = Article.new
@@ -60,9 +60,10 @@ module PublicActivity
60
60
  # @article.activities.last.key #=> "my.custom.article.key"
61
61
  attr_accessor :activity_key
62
62
  @activity_key = nil
63
+ # Placeholder methods for classes not tracked by public_activity gem.
64
+ module ClassMethods
63
65
  # Overrides the +tracked+ method to first define the +tracked?+ class method before
64
66
  # deferring to the original +tracked+.
65
- module ClassMethods
66
67
  def tracked(*args)
67
68
  super(*args)
68
69
 
@@ -79,6 +80,34 @@ module PublicActivity
79
80
  false
80
81
  end
81
82
  end
82
-
83
+
84
+ # A module with shortcut method for setting own parameters to the {Activity} model
85
+ module InstanceMethods
86
+ # A shortcut method for setting custom key, owner and parameters of {Activity}
87
+ # in one line. Accepts a hash with 3 keys:
88
+ # :key, :owner, :params. You can specify all of them or just the ones you want to overwrite.
89
+ #
90
+ # == Usage:
91
+ # In model:
92
+ #
93
+ # class Article < ActiveRecord::Base
94
+ # tracked
95
+ # end
96
+ #
97
+ # In controller:
98
+ #
99
+ # @article = Article.new
100
+ # @article.title = "New article"
101
+ # @article.activity :key => "my.custom.article.key", :owner => @article.author, :params => {:title => @article.title}
102
+ # @article.save
103
+ # @article.activities.last.key #=> "my.custom.article.key"
104
+ # @article.activities.last.parameters #=> {:title => "New article"}
105
+ def activity(options = {})
106
+ self.activity_key = options[:key] if options[:key]
107
+ self.activity_owner = options[:owner] if options[:owner]
108
+ self.activity_params = options[:params] if options[:params]
109
+ end
110
+ end
111
+
83
112
  end
84
113
  end
@@ -1,3 +1,4 @@
1
1
  module PublicActivity
2
- VERSION = '0.2'
2
+ # A constant with gem's version
3
+ VERSION = '0.2.5'
3
4
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: public_activity
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: "0.2"
5
+ version: 0.2.5
6
6
  platform: ruby
7
7
  authors:
8
8
  - "Piotrek Oko\xC5\x84ski"
@@ -11,7 +11,7 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2011-03-10 00:00:00 +01:00
14
+ date: 2011-04-09 00:00:00 +02:00
15
15
  default_executable:
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency