activity_hub 0.0.1

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.
Files changed (63) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +4 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README.md +260 -0
  5. data/Rakefile +20 -0
  6. data/lib/generators/public_activity.rb +16 -0
  7. data/lib/generators/public_activity/migration/migration_generator.rb +19 -0
  8. data/lib/generators/public_activity/migration_upgrade/migration_upgrade_generator.rb +19 -0
  9. data/lib/generators/public_activity/migration_upgrade/templates/upgrade.rb +11 -0
  10. data/lib/public_activity.rb +70 -0
  11. data/lib/public_activity/actions/creation.rb +19 -0
  12. data/lib/public_activity/actions/destruction.rb +19 -0
  13. data/lib/public_activity/actions/update.rb +20 -0
  14. data/lib/public_activity/activity.rb +8 -0
  15. data/lib/public_activity/common.rb +363 -0
  16. data/lib/public_activity/config.rb +102 -0
  17. data/lib/public_activity/models/activist.rb +11 -0
  18. data/lib/public_activity/models/activity.rb +6 -0
  19. data/lib/public_activity/models/adapter.rb +7 -0
  20. data/lib/public_activity/models/trackable.rb +11 -0
  21. data/lib/public_activity/orm/active_record.rb +7 -0
  22. data/lib/public_activity/orm/active_record/activist.rb +35 -0
  23. data/lib/public_activity/orm/active_record/activity.rb +66 -0
  24. data/lib/public_activity/orm/active_record/adapter.rb +23 -0
  25. data/lib/public_activity/orm/active_record/trackable.rb +17 -0
  26. data/lib/public_activity/orm/mongo_mapper.rb +6 -0
  27. data/lib/public_activity/orm/mongo_mapper/activist.rb +36 -0
  28. data/lib/public_activity/orm/mongo_mapper/activity.rb +35 -0
  29. data/lib/public_activity/orm/mongo_mapper/adapter.rb +19 -0
  30. data/lib/public_activity/orm/mongo_mapper/trackable.rb +13 -0
  31. data/lib/public_activity/orm/mongoid.rb +6 -0
  32. data/lib/public_activity/orm/mongoid/activist.rb +36 -0
  33. data/lib/public_activity/orm/mongoid/activity.rb +34 -0
  34. data/lib/public_activity/orm/mongoid/adapter.rb +19 -0
  35. data/lib/public_activity/orm/mongoid/trackable.rb +13 -0
  36. data/lib/public_activity/renderable.rb +166 -0
  37. data/lib/public_activity/roles/deactivatable.rb +44 -0
  38. data/lib/public_activity/roles/tracked.rb +196 -0
  39. data/lib/public_activity/testing.rb +37 -0
  40. data/lib/public_activity/utility/store_controller.rb +32 -0
  41. data/lib/public_activity/utility/view_helpers.rb +30 -0
  42. data/lib/public_activity/version.rb +6 -0
  43. data/test/migrations/001_create_activities.rb +25 -0
  44. data/test/migrations/002_create_articles.rb +15 -0
  45. data/test/migrations/003_create_users.rb +12 -0
  46. data/test/migrations/004_add_nonstandard_to_activities.rb +11 -0
  47. data/test/migrations_base.rb +7 -0
  48. data/test/mongo_mapper.yml +4 -0
  49. data/test/mongoid.yml +6 -0
  50. data/test/test_activist.rb +58 -0
  51. data/test/test_activity.rb +89 -0
  52. data/test/test_common.rb +194 -0
  53. data/test/test_controller_integration.rb +42 -0
  54. data/test/test_generators.rb +31 -0
  55. data/test/test_helper.rb +144 -0
  56. data/test/test_testing.rb +37 -0
  57. data/test/test_tracking.rb +385 -0
  58. data/test/test_view_helpers.rb +38 -0
  59. data/test/views/custom/_layout.erb +1 -0
  60. data/test/views/custom/_test.erb +1 -0
  61. data/test/views/layouts/_activity.erb +1 -0
  62. data/test/views/public_activity/_test.erb +8 -0
  63. metadata +295 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 463e1aba9dc9f50fddf18b2686b57ddb1a3d85ae7580b2c3ee87fb2162b3f2fd
4
+ data.tar.gz: 8544f01f08091445b991813eb03f240ca68817f9b13ea8a9ef3288b3edeebf63
5
+ SHA512:
6
+ metadata.gz: e2aec02d6f9a434d7b95573e1ff0598b6a539843002a09c5e5cb0f1c7b014efb8572f7ea8e400f2b06ecd2748917326b2a4682d1aef85d581f4c812687829fc0
7
+ data.tar.gz: 720a2da75369d503bc079a91aad9f8068d17612dd9ae54957fc771fcdddd1c2984708370fdf61a81ab8b17bbcf0bdb0bf2c1481e7870a1de98a87062778bd420
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+ gemspec
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011-2013 Piotrek Okoński
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,260 @@
1
+ # PublicActivity [![Build Status](https://secure.travis-ci.org/chaps-io/public_activity.svg)](http://travis-ci.org/chaps-io/public_activity) [![Code Climate](https://codeclimate.com/github/chaps-io/public_activity.svg)](https://codeclimate.com/github/chaps-io/public_activity) [![Gem Version](https://badge.fury.io/rb/public_activity.svg)](http://badge.fury.io/rb/public_activity)
2
+
3
+ `public_activity` provides easy activity tracking for your **ActiveRecord**, **Mongoid 3** and **MongoMapper** models
4
+ in Rails 3.0 - 5.0. Simply put: it records what has been changed or created and gives you the ability to present those
5
+ recorded activities to users - in a similar way to how GitHub does it.
6
+
7
+ ## Rails 6
8
+
9
+ **As of 1.6.4 version, public_activity also supports Rails up to 6.0.**
10
+
11
+ ## Table of contents
12
+
13
+ - [PublicActivity ![Build Status](http://travis-ci.org/chaps-io/public_activity) ![Code Climate](https://codeclimate.com/github/chaps-io/public_activity) ![Gem Version](http://badge.fury.io/rb/public_activity)](#publicactivity-build-statushttptravis-ciorgchaps-iopublicactivity-code-climatehttpscodeclimatecomgithubchaps-iopublicactivity-gem-versionhttpbadgefuryiorbpublicactivity)
14
+ - [Rails 6](#rails-6)
15
+ - [Table of contents](#table-of-contents)
16
+ - [Example](#example)
17
+ - [Online demo](#online-demo)
18
+ - [Screencast](#screencast)
19
+ - [Setup](#setup)
20
+ - [Gem installation](#gem-installation)
21
+ - [Database setup](#database-setup)
22
+ - [Model configuration](#model-configuration)
23
+ - [Custom activities](#custom-activities)
24
+ - [Displaying activities](#displaying-activities)
25
+ - [Layouts](#layouts)
26
+ - [Locals](#locals)
27
+ - [Activity views](#activity-views)
28
+ - [i18n](#i18n)
29
+ - [Testing](#testing)
30
+ - [Documentation](#documentation)
31
+ - [Common examples](#common-examples)
32
+ - [Help](#help)
33
+ - [License](#license)
34
+
35
+ ## Example
36
+
37
+ Here is a simple example showing what this gem is about:
38
+
39
+ ![Example usage](http://i.imgur.com/q0TVx.png)
40
+
41
+ ### Online demo
42
+
43
+ You can see an actual application using this gem here: http://public-activity-example.herokuapp.com/feed
44
+
45
+ The source code of the demo is hosted here: https://github.com/pokonski/activity_blog
46
+
47
+ ## Screencast
48
+
49
+ Ryan Bates made a [great screencast](http://railscasts.com/episodes/406-public-activity) describing how to integrate Public Activity in your Rails Application.
50
+
51
+ ## Setup
52
+
53
+ ### Gem installation
54
+
55
+ You can install `public_activity` as you would any other gem:
56
+
57
+ gem install public_activity
58
+
59
+ or in your Gemfile:
60
+
61
+ ```ruby
62
+ gem 'public_activity'
63
+ ```
64
+
65
+ ### Database setup
66
+
67
+ By default _public_activity_ uses Active Record. If you want to use Mongoid or MongoMapper as your backend, create
68
+ an initializer file in your Rails application with the corresponding code inside:
69
+
70
+ For _Mongoid:_
71
+
72
+ ```ruby
73
+ # config/initializers/public_activity.rb
74
+ PublicActivity::Config.set do
75
+ orm :mongoid
76
+ end
77
+ ```
78
+
79
+ For _MongoMapper:_
80
+
81
+ ```ruby
82
+ # config/initializers/public_activity.rb
83
+ PublicActivity::Config.set do
84
+ orm :mongo_mapper
85
+ end
86
+ ```
87
+
88
+ **(ActiveRecord only)** Create migration for activities and migrate the database (in your Rails project):
89
+
90
+ rails g public_activity:migration
91
+ rake db:migrate
92
+
93
+ ### Model configuration
94
+
95
+ Include `PublicActivity::Model` and add `tracked` to the model you want to keep track of:
96
+
97
+ For _ActiveRecord:_
98
+
99
+ ```ruby
100
+ class Article < ActiveRecord::Base
101
+ include PublicActivity::Model
102
+ tracked
103
+ end
104
+ ```
105
+
106
+ For _Mongoid:_
107
+
108
+ ```ruby
109
+ class Article
110
+ include Mongoid::Document
111
+ include PublicActivity::Model
112
+ tracked
113
+ end
114
+ ```
115
+
116
+ For _MongoMapper:_
117
+
118
+ ```ruby
119
+ class Article
120
+ include MongoMapper::Document
121
+ include PublicActivity::Model
122
+ tracked
123
+ end
124
+ ```
125
+
126
+ And now, by default create/update/destroy activities are recorded in activities table.
127
+ This is all you need to start recording activities for basic CRUD actions.
128
+
129
+ _Optional_: If you don't need `#tracked` but still want the comfort of `#create_activity`,
130
+ you can include only the lightweight `Common` module instead of `Model`.
131
+
132
+ #### Custom activities
133
+
134
+ You can trigger custom activities by setting all your required parameters and triggering `create_activity`
135
+ on the tracked model, like this:
136
+
137
+ ```ruby
138
+ @article.create_activity key: 'article.commented_on', owner: current_user
139
+ ```
140
+
141
+ See this entry http://rubydoc.info/gems/public_activity/PublicActivity/Common:create_activity for more details.
142
+
143
+ ### Displaying activities
144
+
145
+ To display them you simply query the `PublicActivity::Activity` model:
146
+
147
+ ```ruby
148
+ # notifications_controller.rb
149
+ def index
150
+ @activities = PublicActivity::Activity.all
151
+ end
152
+ ```
153
+
154
+ And in your views:
155
+
156
+ ```erb
157
+ <%= render_activities(@activities) %>
158
+ ```
159
+
160
+ *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.
161
+
162
+ *Note*: `render_activities` is an alias for `render_activity` and does the same.
163
+
164
+ #### Layouts
165
+
166
+ You can also pass options to both `activity#render` and `#render_activity` methods, which are passed deeper
167
+ to the internally used `render_partial` method.
168
+ A useful example would be to render activities wrapped in layout, which shares common elements of an activity,
169
+ like a timestamp, owner's avatar etc:
170
+
171
+ ```erb
172
+ <%= render_activities(@activities, layout: :activity) %>
173
+ ```
174
+
175
+ The activity will be wrapped with the `app/views/layouts/_activity.erb` layout, in the above example.
176
+
177
+ **Important**: please note that layouts for activities are also partials. Hence the `_` prefix.
178
+
179
+ #### Locals
180
+
181
+ Sometimes, it's desirable to pass additional local variables to partials. It can be done this way:
182
+
183
+ ```erb
184
+ <%= render_activity(@activity, locals: {friends: current_user.friends}) %>
185
+ ```
186
+
187
+ *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.
188
+
189
+ #### Activity views
190
+
191
+ `public_activity` looks for views in `app/views/public_activity`.
192
+
193
+ 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)`.
194
+
195
+ *Hint*: the `"activity."` prefix in `:key` is completely optional and kept for backwards compatibility, you can skip it in new projects.
196
+
197
+ If a view file does not exist, then p_a falls back to the old behaviour and tries to translate the activity `:key` using `I18n#translate` method (see the section below).
198
+
199
+ #### i18n
200
+
201
+ 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`.
202
+
203
+ Translations should be put in your locale `.yml` files. To render pure strings from I18n Example structure:
204
+
205
+ ```yaml
206
+ activity:
207
+ article:
208
+ create: 'Article has been created'
209
+ update: 'Someone has edited the article'
210
+ destroy: 'Some user removed an article!'
211
+ ```
212
+
213
+ This structure is valid for activities with keys `"activity.article.create"` or `"article.create"`. As mentioned before, `"activity."` part of the key is optional.
214
+
215
+ ## Testing
216
+
217
+ For RSpec you can first disable `public_activity` and add the `test_helper` in `rails_helper.rb` with:
218
+
219
+ ```ruby
220
+ #rails_helper.rb
221
+ require 'public_activity/testing'
222
+
223
+ PublicActivity.enabled = false
224
+ ```
225
+
226
+ In your specs you can then blockwise decide wether to turn `public_activity` on
227
+ or off.
228
+
229
+ ```ruby
230
+ # file_spec.rb
231
+ PublicActivity.with_tracking do
232
+ # your test code goes here
233
+ end
234
+
235
+ PublicActivity.without_tracking do
236
+ # your test code goes here
237
+ end
238
+ ```
239
+
240
+ ## Documentation
241
+
242
+ For more documentation go [here](http://rubydoc.info/gems/public_activity/index)
243
+
244
+ ## Common examples
245
+
246
+ * [[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)
247
+ * [[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)
248
+ * [[How to] Create custom activities](https://github.com/pokonski/public_activity/wiki/%5BHow-to%5D-Create-custom-activities)
249
+ * [[How to] Use custom fields on Activity](https://github.com/pokonski/public_activity/wiki/%5BHow-to%5D-Use-custom-fields-on-Activity)
250
+
251
+ ## Help
252
+
253
+ If you need help with using public_activity please visit our discussion group and ask a question there:
254
+
255
+ https://groups.google.com/forum/?fromgroups#!forum/public-activity
256
+
257
+ Please do not ask general questions in the Github Issues.
258
+
259
+ ## License
260
+ Copyright (c) 2011-2013 Piotrek Okoński, released under the MIT license
data/Rakefile ADDED
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require 'rake'
5
+ require 'yard'
6
+ require 'yard/rake/yardoc_task'
7
+ require 'rake/testtask'
8
+
9
+ task :default => :test
10
+
11
+ desc 'Generate documentation for the public_activity plugin.'
12
+ YARD::Rake::YardocTask.new do |doc|
13
+ doc.files = ['lib/**/*.rb']
14
+ end
15
+
16
+ Rake::TestTask.new do |t|
17
+ t.libs << "test"
18
+ t.test_files = FileList['test/test*.rb']
19
+ end
20
+
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails/generators/named_base'
4
+
5
+ module PublicActivity
6
+ # A generator module with Activity table schema.
7
+ module Generators
8
+ # A base module
9
+ module Base
10
+ # Get path for migration template
11
+ def source_root
12
+ @_public_activity_source_root ||= File.expand_path(File.join('../public_activity', generator_name, 'templates'), __FILE__)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'generators/public_activity'
4
+ require 'rails/generators/active_record'
5
+
6
+ module PublicActivity
7
+ module Generators
8
+ # Migration generator that creates migration file from template
9
+ class MigrationGenerator < ActiveRecord::Generators::Base
10
+ extend Base
11
+
12
+ argument :name, :type => :string, :default => 'create_activities'
13
+ # Create migration in project's folder
14
+ def generate_files
15
+ migration_template 'migration.rb', "db/migrate/#{name}.rb"
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'generators/public_activity'
4
+ require 'rails/generators/active_record'
5
+
6
+ module PublicActivity
7
+ module Generators
8
+ # Migration generator that creates migration file from template
9
+ class MigrationUpgradeGenerator < ActiveRecord::Generators::Base
10
+ extend Base
11
+
12
+ argument :name, :type => :string, :default => 'upgrade_activities'
13
+ # Create migration in project's folder
14
+ def generate_files
15
+ migration_template 'upgrade.rb', "db/migrate/#{name}.rb"
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Migration responsible for creating a table with activities
4
+ class UpgradeActivities < ActiveRecord::Migration
5
+ # Create table
6
+ def self.change
7
+ change_table :activities do |t|
8
+ t.belongs_to :recipient, :polymorphic => true
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support'
4
+ require 'action_view'
5
+ # +public_activity+ keeps track of changes made to models
6
+ # and allows you to display them to the users.
7
+ #
8
+ # Check {PublicActivity::Tracked::ClassMethods#tracked} for more details about customizing and specifying
9
+ # ownership to users.
10
+ module PublicActivity
11
+ extend ActiveSupport::Concern
12
+ extend ActiveSupport::Autoload
13
+
14
+ autoload :Activity, 'public_activity/models/activity'
15
+ autoload :Activist, 'public_activity/models/activist'
16
+ autoload :Adapter, 'public_activity/models/adapter'
17
+ autoload :Trackable, 'public_activity/models/trackable'
18
+ autoload :Common
19
+ autoload :Config
20
+ autoload :Creation, 'public_activity/actions/creation.rb'
21
+ autoload :Deactivatable,'public_activity/roles/deactivatable.rb'
22
+ autoload :Destruction, 'public_activity/actions/destruction.rb'
23
+ autoload :Renderable
24
+ autoload :Tracked, 'public_activity/roles/tracked.rb'
25
+ autoload :Update, 'public_activity/actions/update.rb'
26
+ autoload :VERSION
27
+
28
+ # Switches PublicActivity on or off.
29
+ # @param value [Boolean]
30
+ # @since 0.5.0
31
+ def self.enabled=(value)
32
+ config.enabled(value)
33
+ end
34
+
35
+ # Returns `true` if PublicActivity is on, `false` otherwise.
36
+ # Enabled by default.
37
+ # @return [Boolean]
38
+ # @since 0.5.0
39
+ def self.enabled?
40
+ config.enabled
41
+ end
42
+
43
+ # Returns PublicActivity's configuration object.
44
+ # @since 0.5.0
45
+ def self.config
46
+ @@config ||= PublicActivity::Config.instance
47
+ end
48
+
49
+ # Method used to choose which ORM to load
50
+ # when PublicActivity::Activity class is being autoloaded
51
+ def self.inherit_orm(model="Activity")
52
+ orm = PublicActivity.config.orm
53
+ require "public_activity/orm/#{orm.to_s}"
54
+ "PublicActivity::ORM::#{orm.to_s.classify}::#{model}".constantize
55
+ end
56
+
57
+ # Module to be included in ActiveRecord models. Adds required functionality.
58
+ module Model
59
+ extend ActiveSupport::Concern
60
+ included do
61
+ include Common
62
+ include Deactivatable
63
+ include Tracked
64
+ include Activist # optional associations by recipient|owner
65
+ end
66
+ end
67
+ end
68
+
69
+ require 'public_activity/utility/store_controller'
70
+ require 'public_activity/utility/view_helpers'