public_activity 1.1.0 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +0 -20
  3. data/README.md +50 -62
  4. data/lib/public_activity/activity.rb +2 -0
  5. data/lib/public_activity/common.rb +9 -7
  6. data/lib/public_activity/config.rb +15 -0
  7. data/lib/public_activity/models/activist.rb +2 -0
  8. data/lib/public_activity/models/adapter.rb +1 -0
  9. data/lib/public_activity/models/trackable.rb +2 -0
  10. data/lib/public_activity/orm/active_record/activist.rb +9 -6
  11. data/lib/public_activity/orm/active_record/activity.rb +4 -3
  12. data/lib/public_activity/orm/active_record/adapter.rb +4 -0
  13. data/lib/public_activity/orm/active_record/trackable.rb +4 -0
  14. data/lib/public_activity/orm/mongo_mapper/activist.rb +46 -0
  15. data/lib/public_activity/orm/mongo_mapper/activity.rb +33 -0
  16. data/lib/public_activity/orm/mongo_mapper/adapter.rb +12 -0
  17. data/lib/public_activity/orm/mongo_mapper/trackable.rb +11 -0
  18. data/lib/public_activity/orm/mongo_mapper.rb +4 -0
  19. data/lib/public_activity/orm/mongoid/activity.rb +1 -0
  20. data/lib/public_activity/renderable.rb +12 -8
  21. data/lib/public_activity/roles/deactivatable.rb +3 -0
  22. data/lib/public_activity/roles/tracked.rb +6 -6
  23. data/lib/public_activity/utility/view_helpers.rb +11 -3
  24. data/lib/public_activity/version.rb +1 -1
  25. data/test/migrations/001_create_activities.rb +23 -0
  26. data/test/migrations/002_create_articles.rb +11 -0
  27. data/test/migrations/003_create_users.rb +8 -0
  28. data/test/migrations/004_add_nonstandard_to_activities.rb +7 -0
  29. data/test/mongo_mapper.yml +4 -0
  30. data/test/mongoid.yml +6 -0
  31. data/test/test_activist.rb +56 -0
  32. data/test/test_activity.rb +67 -0
  33. data/test/test_common.rb +168 -0
  34. data/test/test_controller_integration.rb +41 -0
  35. data/test/test_generators.rb +41 -0
  36. data/test/test_helper.rb +124 -0
  37. data/test/test_tracking.rb +378 -0
  38. data/test/test_view_helpers.rb +36 -0
  39. data/test/views/layouts/_activity.erb +1 -0
  40. data/test/views/public_activity/_test.erb +8 -0
  41. metadata +139 -22
  42. data/UPGRADING +0 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8fd39acfbf854c069a2b94620e3053830683b8fb
4
- data.tar.gz: d8c98bb1597029b47b4926aa98afd16a5afaf7ce
3
+ metadata.gz: 86fca5f56a3715cdc7aa50a5429478d3da652e2a
4
+ data.tar.gz: 6873ddaac083d14044c4e9eb7f4137b257d7bfec
5
5
  SHA512:
6
- metadata.gz: b21e5ce84fd4c69efb5c0a8ea47ad594c46d2405340ee51930ce7d05f9249adc173a25f2120bb404d475339a7c95716ee23053b1c8dcd1dab5b544a9e6bda888
7
- data.tar.gz: e41642ab559c0616592d20e59ccbbec11e0bd3183855b493fe819bddb60bc04d9a5cd820086afc97c77eb055faa06daa44a726b569b7ec21ececb3748c54fcc5
6
+ metadata.gz: 8b432bcada38def3820e0a72b49d233e14bd1c87ceb6fdca7263e5b442a1c4d888cf88cc106a3df66febf6b5a6785b1a92a15b148c5410a72b8608596732a540
7
+ data.tar.gz: 8ace1656f39368a932ff0e5883d710a59a546ce269f25608bfaa9e08e6fde99881681e8eade10461f0d8142e3a72751545016a0a9eda3aae5f3c319332cb731c
data/Gemfile CHANGED
@@ -1,22 +1,2 @@
1
- ENV['PA_ORM'] ||= 'active_record'
2
-
3
1
  source "https://rubygems.org"
4
-
5
-
6
- case ENV['PA_ORM']
7
- when 'active_record'
8
- gem 'activerecord', '~> 3.0'
9
- when 'mongoid'
10
- gem 'mongoid', '~> 3.0'
11
- end
12
-
13
- group :development, :test do
14
- gem 'sqlite3', '~> 1.3.7' if ENV['PA_ORM'] == 'active_record'
15
- gem 'mocha', '~> 0.13.0', require: false
16
- gem 'simplecov', '~> 0.7.0'
17
- gem 'minitest', '< 5.0.0'
18
- gem 'redcarpet'
19
- gem 'yard', '~> 0.8'
20
- end
21
-
22
2
  gemspec
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # PublicActivity [![Build Status](https://secure.travis-ci.org/pokonski/public_activity.png)](http://travis-ci.org/pokonski/public_activity) [![Dependency Status](https://gemnasium.com/pokonski/public_activity.png)](https://gemnasium.com/pokonski/public_activity)
2
2
 
3
- _public_activity_ provides smooth activity tracking for your **ActiveRecord** and **Mongoid 3** models in Rails 3.
4
- Simply put: it records what has been changed or created and gives you the ability to present those
3
+ _public_activity_ provides easy activity tracking for your **ActiveRecord**, **Mongoid 3** and **MongoMapper** models
4
+ in Rails 3. Simply put: it records what has been changed or created and gives you the ability to present those
5
5
  recorded activities to users - in a similar way to how GitHub does it.
6
6
 
7
7
  ## Table of contents
@@ -9,8 +9,8 @@ recorded activities to users - in a similar way to how GitHub does it.
9
9
  1. [Example](#example)
10
10
  * [Demo](#online-demo)
11
11
  * [Screencast](#screencast)
12
- 3. **[Upgrading](#upgrading)**
13
- 4. [Setup](#setup)
12
+ * **[Common examples](#common-examples)**
13
+ 2. [Setup](#setup)
14
14
  1. [Gem installation](#gem-installation)
15
15
  2. [Database setup](#database-setup)
16
16
  3. [Model configuration](#model-configuration)
@@ -18,8 +18,9 @@ recorded activities to users - in a similar way to how GitHub does it.
18
18
  5. [Displaying activities](#displaying-activities)
19
19
  1. [Activity views](#activity-views)
20
20
  2. [i18n](#i18n)
21
- 5. [Documentation](#documentation)
22
- 6. **[Help](#help)**
21
+ 3. [Documentation](#documentation)
22
+ 4. **[Help](#help)**
23
+ 5. [Upgrading](https://github.com/pokonski/public_activity/wiki/Upgrading-from-pre-0.4.0-versions)
23
24
 
24
25
  ## Example
25
26
 
@@ -37,10 +38,6 @@ The source code of the demo is hosted here: https://github.com/pokonski/activity
37
38
 
38
39
  Ryan Bates made a [great screencast](http://railscasts.com/episodes/406-public-activity) describing how to integrate Public Activity in your Rails Application.
39
40
 
40
- ## Upgrading from pre-0.4.0
41
-
42
- If you are using versions earlier than 0.4.0 please click [here](#upgrading) or scroll to the "Upgrading" section at the bottom of this README.
43
-
44
41
  ## Setup
45
42
 
46
43
  ### Gem installation
@@ -57,8 +54,10 @@ gem 'public_activity'
57
54
 
58
55
  ### Database setup
59
56
 
60
- By default _public_activity_ uses Active Record. If you want to use Mongoid as your backend, create
61
- an initializer file in your Rails application with this code inside:
57
+ By default _public_activity_ uses Active Record. If you want to use Mongoid or MongoMapper as your backend, create
58
+ an initializer file in your Rails application with the corresponding code inside:
59
+
60
+ For _Mongoid:_
62
61
 
63
62
  ```ruby
64
63
  # config/initializers/public_activity.rb
@@ -67,6 +66,15 @@ PublicActivity::Config.set do
67
66
  end
68
67
  ```
69
68
 
69
+ For _MongoMapper:_
70
+
71
+ ```ruby
72
+ # config/initializers/public_activity.rb
73
+ PublicActivity::Config.set do
74
+ orm :mongo_mapper
75
+ end
76
+ ```
77
+
70
78
  **(ActiveRecord only)** Create migration for activities and migrate the database (in your Rails project):
71
79
 
72
80
  rails g public_activity:migration
@@ -95,6 +103,16 @@ class Article
95
103
  end
96
104
  ```
97
105
 
106
+ For _MongoMapper:_
107
+
108
+ ```ruby
109
+ class Article
110
+ include MongoMapper::Document
111
+ include PublicActivity::Model
112
+ tracked
113
+ end
114
+ ```
115
+
98
116
  And now, by default create/update/destroy activities are recorded in activities table.
99
117
  This is all you need to start recording activities for basic CRUD actions.
100
118
 
@@ -126,13 +144,13 @@ end
126
144
  And in your views:
127
145
 
128
146
  ```erb
129
- <% @activities.each do |activity| %>
130
- <%= render_activity(activity) %>
131
- <% end %>
147
+ <%= render_activities(@activities) %>
132
148
  ```
133
149
 
134
150
  *Note*: `render_activity` is a helper for use in view templates. `render_activity(activity)` can be written as `activity.render(self)` and it will have the same meaning.
135
151
 
152
+ *Note*: `render_activities` is an alias for `render_activity` and does the same.
153
+
136
154
  #### Layouts
137
155
 
138
156
  You can also pass options to both `activity#render` and `#render_activity` methods, which are passed deeper
@@ -141,18 +159,26 @@ A useful example would be to render activities wrapped in layout, which shares c
141
159
  like a timestamp, owner's avatar etc:
142
160
 
143
161
  ```erb
144
- <% @activities.each do |activity| %>
145
- <%= render_activity(activity, :layout => :activity) %>
146
- <% end %>
162
+ <%= render_activities(@activities, layout: :activity) %>
147
163
  ```
148
164
 
149
165
  The activity will be wrapped with the `app/views/layouts/_activity.erb` layout, in the above example.
150
166
 
151
167
  **Important**: please note that layouts for activities are also partials. Hence the `_` prefix.
152
168
 
169
+ #### Locals
170
+
171
+ Sometimes, it's desirable to pass additional local variables to partials. It can be done this way:
172
+
173
+ ```erb
174
+ <%= render_activity(@activity, locals: {friends: current_user.friends} %>
175
+ ```
176
+
177
+ *Note*: Before 1.4.0, one could pass variables directly to the options hash for `#render_activity` and access it from activity parameters. This functionality is retained in 1.4.0 and later, but the `:locals` method is **preferred**, since it prevents bugs from shadowing variables from activity parameters in the database.
178
+
153
179
  #### Activity views
154
180
 
155
- Since version `0.4.0` you can use views to render activities. `public_activity` looks for views in `app/views/public_activity`, and this is now the *default* behaviour.
181
+ `public_activity` looks for views in `app/views/public_activity`.
156
182
 
157
183
  For example, if you have an activity with `:key` set to `"activity.user.changed_avatar"`, the gem will look for a partial in `app/views/public_activity/user/_changed_avatar.(erb|haml|slim|something_else)`.
158
184
 
@@ -162,7 +188,7 @@ If a view file does not exist, then p_a falls back to the old behaviour and trie
162
188
 
163
189
  #### i18n
164
190
 
165
- Translations are used by the `#text` method, to which you can pass additional options in form of a hash. `#render` method uses translations when view templates have not been provided.
191
+ Translations are used by the `#text` method, to which you can pass additional options in form of a hash. `#render` method uses translations when view templates have not been provided. You can render pure i18n strings by passing `{display: :i18n}` to `#render_activity` or `#render`.
166
192
 
167
193
  Translations should be put in your locale `.yml` files. To render pure strings from I18n Example structure:
168
194
 
@@ -176,54 +202,16 @@ activity:
176
202
 
177
203
  This structure is valid for activities with keys `"activity.article.create"` or `"article.create"`. As mentioned before, `"activity."` part of the key is optional.
178
204
 
179
- ## Upgrading
180
-
181
- **Read this if you have been using versions older than 0.4.**
182
-
183
- There are a couple of major differences between 0.3 and 0.4 version. To upgrade, follow these steps:
184
-
185
- 1. Add `include PublicActivity::Model` above `tracked` method call in your tracked models, like this:
186
-
187
- _ActiveRecord:_
188
-
189
- ```ruby
190
- class Article < ActiveRecord::Base
191
- include PublicActivity::Model
192
- tracked
193
- end
194
- ```
195
-
196
- _Mongoid:_
197
-
198
- ```ruby
199
- class Article
200
- include Mongoid::Document
201
- include PublicActivity::Model
202
- tracked
203
- end
204
- ```
205
-
206
- 2. _public_activity_'s config YAML file is no longer used (by default in `config/pba.yml`). Move your YAML contents to your `config/locales/*.yml` files.
207
-
208
- <br/>**IMPORTANT**: Locales are no longer rendered with ERB, this has been removed in favor of real view partials like in actual Rails apps.
209
- Read [Activity views](#activity-views) section above to learn how to use those templates.<br/>
210
-
211
- 3. **(ActiveRecord only)** Generate and run migration which adds new column to `activities` table:
212
-
213
- ```bash
214
- rails g public_activity:migration_upgrade
215
- rake db:migrate
216
- ```
217
-
218
205
  ## Documentation
219
206
 
220
- For more customization go [here](http://rubydoc.info/gems/public_activity/index)
207
+ For more documentation go [here](http://rubydoc.info/gems/public_activity/index)
221
208
 
222
- ## Useful examples
209
+ ## Common examples
223
210
 
224
211
  * [[How to] Set the Activity's owner to current_user by default](https://github.com/pokonski/public_activity/wiki/%5BHow-to%5D-Set-the-Activity's-owner-to-current_user-by-default)
225
212
  * [[How to] Disable tracking for a class or globally](https://github.com/pokonski/public_activity/wiki/%5BHow-to%5D-Disable-tracking-for-a-class-or-globally)
226
213
  * [[How to] Create custom activities](https://github.com/pokonski/public_activity/wiki/%5BHow-to%5D-Create-custom-activities)
214
+ * [[How to] Use custom fields on Activity](https://github.com/pokonski/public_activity/wiki/%5BHow-to%5D-Use-custom-fields-on-Activity)
227
215
 
228
216
  ## Help
229
217
 
@@ -234,4 +222,4 @@ https://groups.google.com/forum/?fromgroups#!forum/public-activity
234
222
  Please do not ask general questions in the Github Issues.
235
223
 
236
224
  ## License
237
- Copyright (c) 2012 Piotrek Okoński, released under the MIT license
225
+ Copyright (c) 2011-2013 Piotrek Okoński, released under the MIT license
@@ -1,4 +1,6 @@
1
1
  module PublicActivity
2
+ # Main model, stores all information about what happened,
3
+ # who caused it, when and anything else.
2
4
  class Activity < inherit_orm("Activity")
3
5
  end
4
6
  end
@@ -96,7 +96,7 @@ module PublicActivity
96
96
  # @return (see #activity_owner)
97
97
  attr_accessor :activity_recipient
98
98
  @activity_recipient = nil
99
- # Set or get custom i18n key passed to {Activity}, later used in {Activity#text}
99
+ # Set or get custom i18n key passed to {Activity}, later used in {Renderable#text}
100
100
  #
101
101
  # == Usage:
102
102
  #
@@ -119,6 +119,8 @@ module PublicActivity
119
119
  @@activity_hooks = {}
120
120
 
121
121
  # @!endgroup
122
+
123
+ # Provides some global methods for every model class.
122
124
  module ClassMethods
123
125
  #
124
126
  # @since 1.0.0
@@ -134,7 +136,7 @@ module PublicActivity
134
136
  # Extracts a hook from the _:on_ option provided in
135
137
  # {Tracked::ClassMethods#tracked}. Returns nil when no hook exists for
136
138
  # given action
137
- # {Tracked#get_hook}
139
+ # {Common#get_hook}
138
140
  #
139
141
  # @see Tracked#get_hook
140
142
  # @param key [String, Symbol] action to retrieve a hook for
@@ -160,11 +162,11 @@ module PublicActivity
160
162
  PublicActivity.enabled?
161
163
  end
162
164
  #
163
- # Shortcut for {Tracked::ClassMethods#get_hook}
164
- # @param (see Tracked::ClassMethods#get_hook)
165
- # @return (see Tracked::ClassMethods#get_hook)
166
- # @since (see Tracked::ClassMethods#get_hook)
167
- # @api (see Tracked::ClassMethods#get_hook)
165
+ # Shortcut for {ClassMethods#get_hook}
166
+ # @param (see ClassMethods#get_hook)
167
+ # @return (see ClassMethods#get_hook)
168
+ # @since (see ClassMethods#get_hook)
169
+ # @api (see ClassMethods#get_hook)
168
170
  def get_hook(key)
169
171
  self.class.get_hook(key)
170
172
  end
@@ -13,6 +13,12 @@ module PublicActivity
13
13
  @enabled = true
14
14
  end
15
15
 
16
+ # Evaluates given block to provide DSL configuration.
17
+ # @example Initializer for Rails
18
+ # PublicActivity::Config.set do
19
+ # orm :mongo_mapper
20
+ # enabled false
21
+ # end
16
22
  def self.set &block
17
23
  b = Block.new
18
24
  b.instance_eval &block
@@ -23,23 +29,32 @@ module PublicActivity
23
29
  instance.instance_variable_set(:@enabled, enabled) unless enabled.nil?
24
30
  end
25
31
 
32
+ # Set the ORM for use by PublicActivity.
26
33
  def self.orm(orm = nil)
27
34
  @@orm = (orm ? orm.to_sym : false) || @@orm
28
35
  end
29
36
 
37
+ # alias for {#orm}
38
+ # @see #orm
30
39
  def self.orm=(orm = nil)
31
40
  orm(orm)
32
41
  end
33
42
 
43
+ # instance version of {Config#orm}
44
+ # @see Config#orm
34
45
  def orm(orm=nil)
35
46
  self.class.orm(orm)
36
47
  end
37
48
 
49
+ # Provides simple DSL for the config block.
38
50
  class Block
51
+ # @see Config#orm
39
52
  def orm(orm = nil)
40
53
  @orm = (orm ? orm.to_sym : false) || @orm
41
54
  end
42
55
 
56
+ # Decides whether to enable PublicActivity.
57
+ # @param en [Boolean] Enabled?
43
58
  def enabled(en = nil)
44
59
  @en = (en.nil? ? @en : en)
45
60
  end
@@ -1,5 +1,7 @@
1
1
  module PublicActivity
2
+ # Provides helper methods for selecting activities from a user.
2
3
  module Activist
4
+ # Delegates to configured ORM.
3
5
  def self.included(base)
4
6
  base.extend PublicActivity::inherit_orm("Activist")
5
7
  end
@@ -1,4 +1,5 @@
1
1
  module PublicActivity
2
+ # Loads database-specific routines for use by PublicActivity.
2
3
  class Adapter < inherit_orm("Adapter")
3
4
  end
4
5
  end
@@ -1,5 +1,7 @@
1
1
  module PublicActivity
2
+ # Provides association for activities bound to this object by *trackable*.
2
3
  module Trackable
4
+ # Delegates to ORM.
3
5
  def self.included(base)
4
6
  base.extend PublicActivity::inherit_orm("Trackable")
5
7
  end
@@ -5,16 +5,12 @@ module PublicActivity
5
5
  module Activist
6
6
  extend ActiveSupport::Concern
7
7
 
8
+ # Loads the {ClassMethods#activist} method for declaring the class
9
+ # as an activist.
8
10
  def self.extended(base)
9
11
  base.extend(ClassMethods)
10
12
  end
11
- # Association of activities as their owner.
12
- # @!method activities
13
- # @return [Array<Activity>] Activities which self is the owner of.
14
13
 
15
- # Association of activities as their recipient.
16
- # @!method private_activities
17
- # @return [Array<Activity>] Activities which self is the recipient of.
18
14
 
19
15
  # Module extending classes that serve as owners
20
16
  module ClassMethods
@@ -35,7 +31,14 @@ module PublicActivity
35
31
  # User.first.activities
36
32
  #
37
33
  def activist
34
+ # Association of activities as their owner.
35
+ # @!method activities_as_owner
36
+ # @return [Array<Activity>] Activities which self is the owner of.
38
37
  has_many :activities_as_owner, :class_name => "::PublicActivity::Activity", :as => :owner
38
+
39
+ # Association of activities as their recipient.
40
+ # @!method activities_as_recipient
41
+ # @return [Array<Activity>] Activities which self is the recipient of.
39
42
  has_many :activities_as_recipient, :class_name => "::PublicActivity::Activity", :as => :recipient
40
43
  end
41
44
  end
@@ -15,9 +15,10 @@ module PublicActivity
15
15
  # Serialize parameters Hash
16
16
  serialize :parameters, Hash
17
17
 
18
- # should recipient and owner be accessible?
19
- attr_accessible :key, :owner, :parameters, :recipient, :trackable
18
+ if ::ActiveRecord::VERSION::MAJOR < 4
19
+ attr_accessible :key, :owner, :parameters, :recipient, :trackable
20
+ end
20
21
  end
21
22
  end
22
23
  end
23
- end
24
+ end
@@ -1,6 +1,10 @@
1
1
  module PublicActivity
2
2
  module ORM
3
+ # Support for ActiveRecord for PublicActivity. Used by default and supported
4
+ # officialy.
3
5
  module ActiveRecord
6
+ # Provides ActiveRecord specific, database-related routines for use by
7
+ # PublicActivity.
4
8
  class Adapter
5
9
  # Creates the activity on `trackable` with `options`
6
10
  def self.create_activity(trackable, options)
@@ -1,7 +1,11 @@
1
1
  module PublicActivity
2
2
  module ORM
3
3
  module ActiveRecord
4
+ # Implements {PublicActivity::Trackable} for ActiveRecord
5
+ # @see PublicActivity::Trackable
4
6
  module Trackable
7
+ # Creates an association for activities where self is the *trackable*
8
+ # object.
5
9
  def self.extended(base)
6
10
  base.has_many :activities, :class_name => "::PublicActivity::Activity", :as => :trackable
7
11
  end
@@ -0,0 +1,46 @@
1
+ module PublicActivity
2
+ module ORM
3
+ module MongoMapper
4
+ # Module extending classes that serve as owners
5
+ module Activist
6
+ extend ActiveSupport::Concern
7
+
8
+ def self.extended(base)
9
+ base.extend(ClassMethods)
10
+ end
11
+ # Association of activities as their owner.
12
+ # @!method activities
13
+ # @return [Array<Activity>] Activities which self is the owner of.
14
+
15
+ # Association of activities as their recipient.
16
+ # @!method private_activities
17
+ # @return [Array<Activity>] Activities which self is the recipient of.
18
+
19
+ # Module extending classes that serve as owners
20
+ module ClassMethods
21
+ # Adds MongoMapper associations to model to simplify fetching
22
+ # so you can list activities performed by the owner.
23
+ # It is completely optional. Any model can be an owner to an activity
24
+ # even without being an explicit activist.
25
+ #
26
+ # == Usage:
27
+ # In model:
28
+ #
29
+ # class User
30
+ # include MongoMapper::Document
31
+ # include PublicActivity::Model
32
+ # activist
33
+ # end
34
+ #
35
+ # In controller:
36
+ # User.first.activities
37
+ #
38
+ def activist
39
+ many :activities_as_owner, :class_name => "::PublicActivity::Activity", :as => :owner
40
+ many :activities_as_recipient, :class_name => "::PublicActivity::Activity", :as => :recipient
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,33 @@
1
+ require 'mongo_mapper'
2
+ require 'active_support/core_ext'
3
+
4
+ module PublicActivity
5
+ module ORM
6
+ module MongoMapper
7
+ # The MongoMapper document containing
8
+ # details about recorded activity.
9
+ class Activity
10
+ include ::MongoMapper::Document
11
+ include Renderable
12
+
13
+ class SymbolHash < Hash
14
+ def self.from_mongo(value)
15
+ value.symbolize_keys unless value.nil?
16
+ end
17
+ end
18
+
19
+ # Define polymorphic association to the parent
20
+ belongs_to :trackable, polymorphic: true
21
+ # Define ownership to a resource responsible for this activity
22
+ belongs_to :owner, polymorphic: true
23
+ # Define ownership to a resource targeted by this activity
24
+ belongs_to :recipient, polymorphic: true
25
+
26
+ key :key, String
27
+ key :parameters, SymbolHash
28
+
29
+ timestamps!
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,12 @@
1
+ module PublicActivity
2
+ module ORM
3
+ module MongoMapper
4
+ class Adapter
5
+ # Creates the activity on `trackable` with `options`
6
+ def self.create_activity(trackable, options)
7
+ trackable.activities.create options
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,11 @@
1
+ module PublicActivity
2
+ module ORM
3
+ module MongoMapper
4
+ module Trackable
5
+ def self.extended(base)
6
+ base.many :activities, :class_name => "::PublicActivity::Activity", order: :created_at.asc, :as => :trackable
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,4 @@
1
+ require_relative "mongo_mapper/activity.rb"
2
+ require_relative "mongo_mapper/adapter.rb"
3
+ require_relative "mongo_mapper/activist.rb"
4
+ require_relative "mongo_mapper/trackable.rb"
@@ -8,6 +8,7 @@ module PublicActivity
8
8
  class Activity
9
9
  include ::Mongoid::Document
10
10
  include ::Mongoid::Timestamps
11
+ include ::Mongoid::Attributes::Dynamic if (::Mongoid::VERSION =~ /^4/) == 0
11
12
  include Renderable
12
13
 
13
14
  # Define polymorphic association to the parent
@@ -1,4 +1,6 @@
1
1
  module PublicActivity
2
+ # Provides logic for rendering activities. Handles both i18n strings
3
+ # support and smart partials rendering (different templates per activity key).
2
4
  module Renderable
3
5
  # Virtual attribute returning text description of the activity
4
6
  # using the activity's key to translate using i18n.
@@ -80,23 +82,25 @@ module PublicActivity
80
82
  return context.render :text => self.text(params) if params[:display].to_sym == :"i18n"
81
83
  partial_path = 'public_activity/'+params[:display].to_s
82
84
  end
83
- # if we're going to render a partial, let it throw when none can be found
84
- params_indifferent = self.parameters.with_indifferent_access
85
- params_indifferent.merge!(params)
85
+
86
86
  controller = PublicActivity.get_controller
87
- layout = params_indifferent.delete(:layout)
88
- if layout
87
+ if layout = params.delete(:layout)
89
88
  layout = layout.to_s
90
89
  layout = layout[0,8] == "layouts/" ? layout : "layouts/#{layout}"
91
90
  end
91
+
92
+ locals = params.delete(:locals) || Hash.new
93
+
94
+ params_indifferent = self.parameters.with_indifferent_access
95
+ params_indifferent.merge!(params)
96
+
92
97
  context.render :partial => (partial_path || self.template_path(self.key)),
93
98
  :layout => layout,
94
- :locals =>
95
- {:a => self, :activity => self,
99
+ :locals => locals.merge(:a => self, :activity => self,
96
100
  :controller => controller,
97
101
  :current_user => controller.respond_to?(:current_user) ?
98
102
  controller.current_user : nil ,
99
- :p => params_indifferent, :params => params_indifferent}
103
+ :p => params_indifferent, :params => params_indifferent)
100
104
  end
101
105
 
102
106
  protected
@@ -1,4 +1,5 @@
1
1
  module PublicActivity
2
+ # Enables per-class disabling of PublicActivity functionality.
2
3
  module Deactivatable
3
4
  extend ActiveSupport::Concern
4
5
 
@@ -17,6 +18,8 @@ module PublicActivity
17
18
  PublicActivity.enabled? && self.class.public_activity_enabled_for_model
18
19
  end
19
20
 
21
+ # Provides global methods to disable or enable PublicActivity on a per-class
22
+ # basis.
20
23
  module ClassMethods
21
24
  # Switches public_activity off for this class
22
25
  def public_activity_off
@@ -9,13 +9,13 @@ module PublicActivity
9
9
  # == Options
10
10
  #
11
11
  # [:key]
12
- # See {#activity_key}
12
+ # See {Common#activity_key}
13
13
  # [:owner]
14
- # See {#activity_owner}
14
+ # See {Common#activity_owner}
15
15
  # [:params]
16
- # See {#activity_params}
16
+ # See {Common#activity_params}
17
17
  # [:recipient]
18
- # Set the recipient for this activity. Useful for private notifications, which should only be visible to a certain user. See {#activity_recipient}.
18
+ # Set the recipient for this activity. Useful for private notifications, which should only be visible to a certain user. See {Common#activity_recipient}.
19
19
  # @example
20
20
  #
21
21
  # @article = Article.new
@@ -66,7 +66,7 @@ module PublicActivity
66
66
  # provide id number of the owner object.
67
67
  # [:params]
68
68
  # Accepts a Hash with custom parameters you want to pass to i18n.translate
69
- # method. It is later used in {Activity#text} method.
69
+ # method. It is later used in {Renderable#text} method.
70
70
  # == Example:
71
71
  # class Article < ActiveRecord::Base
72
72
  # include PublicActivity::Model
@@ -128,7 +128,7 @@ module PublicActivity
128
128
  # In the example above, given a model Article with boolean column _published_.
129
129
  # The activities with key _article.update_ will only be created
130
130
  # if the published status is set to true on that article.
131
- # @param options [Hash] options
131
+ # @param opts [Hash] options
132
132
  # @return [nil] options
133
133
  def tracked(opts = {})
134
134
  options = opts.clone