public_activity 0.3.2 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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