public_activity 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # PublicActivity ![Build Status](http://travis-ci.org/sbower/public_activity.png)
1
+ # PublicActivity ![Build Status](http://travis-ci.org/pokonski/public_activity.png)
2
2
 
3
3
  public_activity provides smooth acitivity tracking for your ActiveRecord models in Rails 3.
4
4
  Simply put: it records what has been changed or edited and gives you the ability to present those recorded activities to users - in a similar way Github does it.
@@ -25,12 +25,15 @@ Create migration for activities (in your Rails project):
25
25
 
26
26
  Add 'tracked' to the model you want to keep track of:
27
27
 
28
+ ```ruby
28
29
  class Article < ActiveRecord::Base
29
30
  tracked
30
31
  end
32
+ ```
31
33
 
32
34
  To default the owner to the current user (optional)
33
-
35
+
36
+ ```ruby
34
37
  #Aplication Controller
35
38
  before_filter :define_current_user
36
39
 
@@ -42,32 +45,40 @@ To default the owner to the current user (optional)
42
45
  class User < ActiveRecord::Base
43
46
  cattr_accessor :current_user
44
47
  end
45
-
48
+ ```
49
+
46
50
  And now, by default create/update/destroy activities are recorded in activities table.
47
51
  To display them you can do a simple query:
48
52
 
53
+ ```ruby
49
54
  # some_controller.rb
50
55
  def index
51
56
  @activities = PublicActivity::Activity.all
52
57
  end
53
-
58
+ ```
59
+
54
60
  And in your views:
55
61
 
62
+ ```erb
56
63
  <% for activity in @activities %>
57
64
  <%= activity.text %><br/>
58
65
  <% end %>
59
-
66
+ ```
67
+
60
68
  The only thing left is to add templates (config/pba.yml), for example:
61
69
 
70
+ ```yaml
62
71
  activity:
63
72
  article:
64
73
  create: 'Article has been created'
65
74
  update: 'Someone has edited the article'
66
75
  destroy: 'Some user removed an article!'
76
+ ```
77
+ Place this in a file and reference it in a Rails initializer.
67
78
 
68
- Place this in a file and reference it in a rail initializer.
69
-
79
+ ```ruby
70
80
  PublicActivity::Activity.template = YAML.load_file("#{RAILS_ROOT}/config/pba.yml")
81
+ ```
71
82
 
72
83
  This is only a basic example, refer to documentation for more options and customization!
73
84
  ## Documentation
@@ -75,4 +86,4 @@ This is only a basic example, refer to documentation for more options and custom
75
86
  You can find documentation [here](http://rubydoc.info/gems/public_activity/)
76
87
 
77
88
  ## License
78
- Copyright (c) 2011 Piotrek Okoński, released under the MIT license
89
+ Copyright (c) 2012 Piotrek Okoński, released under the MIT license
@@ -12,7 +12,8 @@ module PublicActivity
12
12
  serialize :parameters, Hash
13
13
 
14
14
  class_attribute :template
15
-
15
+
16
+ attr_accessible :key, :owner, :parameters
16
17
  # Virtual attribute returning text description of the activity
17
18
  # using basic ERB templating
18
19
  #
@@ -2,58 +2,55 @@ module PublicActivity
2
2
  # Common methods shared across the gem.
3
3
  module Common
4
4
  extend ActiveSupport::Concern
5
- # Instance methods used by other methods in PublicActivity module.
6
- module InstanceMethods
7
- # Directly creates activity record in the database, based on supplied arguments.
8
- # Only first argument - key - is required.
9
- #
10
- # == Usage:
11
- #
12
- # current_user.create_activity("activity.user.avatar_changed") if @user.avatar_file_name_changed?
13
- #
14
- # == Parameters:
15
- # [key]
16
- # Custom key that will be used as a i18n translation key - *required*
17
- # [owner]
18
- # Polymorphic relation specifying the owner of this activity (for example, a User who performed this task) - *optional*
19
- # [params]
20
- # Hash with parameters passed directly into i18n.translate method - *optional*
21
- #
22
- def create_activity(key, owner = nil, params = {})
23
-
24
- if owner.nil? && ((defined? User) != nil) && User.respond_to?(:current_user)
25
- owner = User.current_user
26
- end
27
-
28
- activity = self.activities.create(:key => key, :owner => owner, :parameters => params)
29
- if !Pusher.app_id.nil? && !Pusher.key.nil? && !Pusher.secret.nil?
30
- Pusher['acitivty-channel'].trigger('acitivty-create', {:key => key, :owner => owner, :parameters => params, :text => activity.text, :object => self})
31
- end
5
+ # Directly creates activity record in the database, based on supplied arguments.
6
+ # Only first argument - key - is required.
7
+ #
8
+ # == Usage:
9
+ #
10
+ # current_user.create_activity("activity.user.avatar_changed") if @user.avatar_file_name_changed?
11
+ #
12
+ # == Parameters:
13
+ # [key]
14
+ # Custom key that will be used as a i18n translation key - *required*
15
+ # [owner]
16
+ # Polymorphic relation specifying the owner of this activity (for example, a User who performed this task) - *optional*
17
+ # [params]
18
+ # Hash with parameters passed directly into i18n.translate method - *optional*
19
+ #
20
+ def create_activity(key, owner = nil, params = {})
21
+
22
+ if owner.nil? && ((defined? User) != nil) && User.respond_to?(:current_user)
23
+ owner = User.current_user
32
24
  end
33
25
 
34
- private
35
- # Prepares settings used during creation of Activity record.
36
- # params passed directly to tracked model have priority over
37
- # settings specified in tracked() method
38
- def prepare_settings
39
- # user responsible for the activity
40
- if self.activity_owner
41
- owner = self.activity_owner
42
- else
43
- owner = self.class.activity_owner_global
44
- end
45
-
46
- case owner
47
- when Symbol
48
- owner = self.try(owner)
49
- when Proc
50
- owner = owner.call(self)
51
- end
52
- #customizable parameters
53
- parameters = self.class.activity_params_global
54
- parameters.merge! self.activity_params if self.activity_params
55
- return {:key => self.activity_key,:owner => owner, :parameters => parameters}
56
- end
26
+ activity = self.activities.create(:key => key, :owner => owner, :parameters => params)
27
+ if !Pusher.app_id.nil? && !Pusher.key.nil? && !Pusher.secret.nil?
28
+ Pusher['acitivty-channel'].trigger('acitivty-create', {:key => key, :owner => owner, :parameters => params, :text => activity.text, :object => self})
29
+ end
57
30
  end
31
+
32
+ private
33
+ # Prepares settings used during creation of Activity record.
34
+ # params passed directly to tracked model have priority over
35
+ # settings specified in tracked() method
36
+ def prepare_settings
37
+ # user responsible for the activity
38
+ if self.activity_owner
39
+ owner = self.activity_owner
40
+ else
41
+ owner = self.class.activity_owner_global
42
+ end
43
+
44
+ case owner
45
+ when Symbol
46
+ owner = self.try(owner)
47
+ when Proc
48
+ owner = owner.call(self)
49
+ end
50
+ #customizable parameters
51
+ parameters = self.class.activity_params_global
52
+ parameters.merge! self.activity_params if self.activity_params
53
+ return {:key => self.activity_key,:owner => owner, :parameters => parameters}
54
+ end
58
55
  end
59
56
  end
@@ -6,14 +6,11 @@ module PublicActivity
6
6
  included do
7
7
  after_create :activity_on_create
8
8
  end
9
- # Handlers responsible for creating Activities.
10
- module InstanceMethods
11
- private
12
- # Creates activity upon creation of the tracked model
13
- def activity_on_create
14
- settings = prepare_settings
15
- create_activity(settings[:key] || "activity."+self.class.name.parameterize('_')+".create", settings[:owner], settings[:parameters])
16
- end
17
- end
9
+ private
10
+ # Creates activity upon creation of the tracked model
11
+ def activity_on_create
12
+ settings = prepare_settings
13
+ create_activity(settings[:key] || "activity."+self.class.name.parameterize('_')+".create", settings[:owner], settings[:parameters])
14
+ end
18
15
  end
19
16
  end
@@ -6,14 +6,11 @@ module PublicActivity
6
6
  included do
7
7
  before_destroy :activity_on_destroy
8
8
  end
9
- # Handlers responsible for adding {Activity} when object is destroyed.
10
- module InstanceMethods
11
- private
12
- # Records an activity upon destruction of the tracked model
13
- def activity_on_destroy
14
- settings = prepare_settings
15
- create_activity("activity."+self.class.name.parameterize('_')+".destroy", settings[:owner], settings[:parameters])
16
- end
17
- end
9
+ private
10
+ # Records an activity upon destruction of the tracked model
11
+ def activity_on_destroy
12
+ settings = prepare_settings
13
+ create_activity("activity."+self.class.name.parameterize('_')+".destroy", settings[:owner], settings[:parameters])
14
+ end
18
15
  end
19
16
  end
@@ -87,12 +87,12 @@ module PublicActivity
87
87
  # method. It is later used in {Activity#text} method.
88
88
  # == Example:
89
89
  # @article.activity :parameters => {:title => @article.title, :short => truncate(@article.text, :length => 50)}
90
- # Everything specified here has a lower priority than parameters specified directly in {Tracked::InstanceMethods#activity} method.
90
+ # Everything specified here has a lower priority than parameters specified directly in {#activity} method.
91
91
  # So treat it as a place where you provide 'default' values.
92
92
  # For more dynamic settings refer to {Activity} model
93
93
  # documentation.
94
94
  # [:skip_defaults]
95
- # Disables recording of activities on create/update/destroy leaving that to programmer's choice. Check {PublicActivity::Common::InstanceMethods#create_activity}
95
+ # Disables recording of activities on create/update/destroy leaving that to programmer's choice. Check {PublicActivity::Common#create_activity}
96
96
  # for a guide on how to manually record activities.
97
97
  def tracked(options = {})
98
98
  include Common
@@ -131,8 +131,6 @@ module PublicActivity
131
131
  end
132
132
  end
133
133
 
134
- # A module with shortcut method for setting own parameters to the {Activity} model
135
- module InstanceMethods
136
134
  # A shortcut method for setting custom key, owner and parameters of {Activity}
137
135
  # in one line. Accepts a hash with 3 keys:
138
136
  # :key, :owner, :params. You can specify all of them or just the ones you want to overwrite.
@@ -145,7 +143,7 @@ module PublicActivity
145
143
  # Specify the owner of the {Activity} (person responsible for the action).
146
144
  # It can be a Proc, Symbol or an ActiveRecord object:
147
145
  # == Examples:
148
- # @article.activity :owner => :author
146
+ # @article.activity :owner => :author
149
147
  # @article.activity :owner => {|o| o.author}
150
148
  # @article.activity :owner => User.where(:login => 'piotrek').first
151
149
  # Keep in mind that owner relation is polymorphic, so you can't just provide id number of the owner object.
@@ -160,22 +158,21 @@ module PublicActivity
160
158
  #
161
159
  # class Article < ActiveRecord::Base
162
160
  # tracked
163
- # end
161
+ # end
164
162
  #
165
163
  # In controller:
166
164
  #
167
165
  # @article = Article.new
168
- # @article.title = "New article"
166
+ # @article.title = "New article"
169
167
  # @article.activity :key => "my.custom.article.key", :owner => @article.author, :params => {:title => @article.title}
170
168
  # @article.save
171
169
  # @article.activities.last.key #=> "my.custom.article.key"
172
170
  # @article.activities.last.parameters #=> {:title => "New article"}
173
- def activity(options = {})
174
- self.activity_key = options[:key] if options[:key]
175
- self.activity_owner = options[:owner] if options[:owner]
176
- self.activity_params = options[:params] if options[:params]
177
- end
171
+ def activity(options = {})
172
+ self.activity_key = options[:key] if options[:key]
173
+ self.activity_owner = options[:owner] if options[:owner]
174
+ self.activity_params = options[:params] if options[:params]
178
175
  end
179
-
176
+
180
177
  end
181
178
  end
@@ -6,14 +6,11 @@ module PublicActivity
6
6
  included do
7
7
  after_update :activity_on_update
8
8
  end
9
- # Handlers responsible for updating Activities.
10
- module InstanceMethods
11
- private
12
- # Creates activity upon modification of the tracked model
13
- def activity_on_update
14
- settings = prepare_settings
15
- create_activity(settings[:key] || "activity."+self.class.name.parameterize('_')+".update", settings[:owner], settings[:parameters])
16
- end
17
- end
9
+ private
10
+ # Creates activity upon modification of the tracked model
11
+ def activity_on_update
12
+ settings = prepare_settings
13
+ create_activity(settings[:key] || "activity."+self.class.name.parameterize('_')+".update", settings[:owner], settings[:parameters])
14
+ end
18
15
  end
19
16
  end
@@ -1,4 +1,4 @@
1
1
  module PublicActivity
2
2
  # A constant with gem's version
3
- VERSION = '0.3.2'
3
+ VERSION = '0.3.3'
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: public_activity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-01-19 00:00:00.000000000 Z
13
+ date: 2012-05-19 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activerecord
17
- requirement: &74294530 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,15 @@ dependencies:
22
22
  version: 3.0.0
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *74294530
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: 3.0.0
26
31
  - !ruby/object:Gem::Dependency
27
32
  name: activesupport
28
- requirement: &74293790 !ruby/object:Gem::Requirement
33
+ requirement: !ruby/object:Gem::Requirement
29
34
  none: false
30
35
  requirements:
31
36
  - - ! '>='
@@ -33,10 +38,15 @@ dependencies:
33
38
  version: 3.0.0
34
39
  type: :runtime
35
40
  prerelease: false
36
- version_requirements: *74293790
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: 3.0.0
37
47
  - !ruby/object:Gem::Dependency
38
48
  name: i18n
39
- requirement: &74287740 !ruby/object:Gem::Requirement
49
+ requirement: !ruby/object:Gem::Requirement
40
50
  none: false
41
51
  requirements:
42
52
  - - ! '>='
@@ -44,10 +54,15 @@ dependencies:
44
54
  version: 0.5.0
45
55
  type: :runtime
46
56
  prerelease: false
47
- version_requirements: *74287740
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: 0.5.0
48
63
  - !ruby/object:Gem::Dependency
49
64
  name: pusher
50
- requirement: &74287260 !ruby/object:Gem::Requirement
65
+ requirement: !ruby/object:Gem::Requirement
51
66
  none: false
52
67
  requirements:
53
68
  - - ! '>='
@@ -55,10 +70,15 @@ dependencies:
55
70
  version: '0'
56
71
  type: :runtime
57
72
  prerelease: false
58
- version_requirements: *74287260
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
59
79
  - !ruby/object:Gem::Dependency
60
80
  name: rspec
61
- requirement: &74286440 !ruby/object:Gem::Requirement
81
+ requirement: !ruby/object:Gem::Requirement
62
82
  none: false
63
83
  requirements:
64
84
  - - ! '>='
@@ -66,7 +86,12 @@ dependencies:
66
86
  version: '0'
67
87
  type: :development
68
88
  prerelease: false
69
- version_requirements: *74286440
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
70
95
  description: Smooth activity tracking for your ActiveRecord models. Provides Activity
71
96
  model with details about actions performed by your users, like adding comments,
72
97
  responding etc.
@@ -122,7 +147,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
122
147
  version: '0'
123
148
  requirements: []
124
149
  rubyforge_project:
125
- rubygems_version: 1.8.10
150
+ rubygems_version: 1.8.19
126
151
  signing_key:
127
152
  specification_version: 3
128
153
  summary: Smooth activity tracking for ActiveRecord models