public_activity 1.6.3 → 2.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.
- checksums.yaml +4 -4
- data/Gemfile +2 -0
- data/README.md +26 -28
- data/Rakefile +6 -5
- data/lib/generators/public_activity/migration/migration_generator.rb +3 -1
- data/lib/generators/public_activity/migration/templates/migration.rb +12 -10
- data/lib/generators/public_activity/migration_upgrade/migration_upgrade_generator.rb +4 -1
- data/lib/generators/public_activity/migration_upgrade/templates/upgrade.rb +4 -2
- data/lib/generators/public_activity.rb +2 -0
- data/lib/public_activity/actions/creation.rb +3 -1
- data/lib/public_activity/actions/destruction.rb +2 -0
- data/lib/public_activity/actions/update.rb +2 -0
- data/lib/public_activity/activity.rb +3 -1
- data/lib/public_activity/common.rb +16 -0
- data/lib/public_activity/config.rb +2 -0
- data/lib/public_activity/models/activist.rb +3 -1
- data/lib/public_activity/models/activity.rb +3 -1
- data/lib/public_activity/models/adapter.rb +3 -1
- data/lib/public_activity/models/trackable.rb +3 -1
- data/lib/public_activity/orm/active_record/activist.rb +2 -0
- data/lib/public_activity/orm/active_record/activity.rb +29 -11
- data/lib/public_activity/orm/active_record/adapter.rb +7 -0
- data/lib/public_activity/orm/active_record/trackable.rb +2 -0
- data/lib/public_activity/orm/active_record.rb +3 -1
- data/lib/public_activity/orm/mongo_mapper/activist.rb +2 -0
- data/lib/public_activity/orm/mongo_mapper/activity.rb +2 -0
- data/lib/public_activity/orm/mongo_mapper/adapter.rb +7 -0
- data/lib/public_activity/orm/mongo_mapper/trackable.rb +2 -0
- data/lib/public_activity/orm/mongo_mapper.rb +3 -1
- data/lib/public_activity/orm/mongoid/activist.rb +2 -0
- data/lib/public_activity/orm/mongoid/activity.rb +2 -0
- data/lib/public_activity/orm/mongoid/adapter.rb +7 -0
- data/lib/public_activity/orm/mongoid/trackable.rb +2 -0
- data/lib/public_activity/orm/mongoid.rb +3 -1
- data/lib/public_activity/renderable.rb +5 -2
- data/lib/public_activity/roles/deactivatable.rb +2 -0
- data/lib/public_activity/roles/tracked.rb +2 -0
- data/lib/public_activity/testing.rb +2 -0
- data/lib/public_activity/utility/store_controller.rb +2 -0
- data/lib/public_activity/utility/view_helpers.rb +2 -0
- data/lib/public_activity/version.rb +3 -1
- data/lib/public_activity.rb +2 -0
- data/test/migrations/001_create_activities.rb +1 -1
- data/test/migrations/002_create_articles.rb +2 -3
- data/test/migrations/003_create_users.rb +2 -2
- data/test/migrations/004_add_nonstandard_to_activities.rb +2 -2
- data/test/test_activist.rb +39 -36
- data/test/test_activity.rb +39 -38
- data/test/test_common.rb +66 -48
- data/test/test_controller_integration.rb +19 -11
- data/test/test_generators.rb +7 -17
- data/test/test_helper.rb +20 -24
- data/test/test_testing.rb +13 -10
- data/test/test_tracking.rb +171 -147
- data/test/test_view_helpers.rb +8 -6
- metadata +49 -40
- data/lib/generators/public_activity/activity/activity_generator.rb +0 -17
- data/lib/generators/public_activity/activity/templates/activity.rb +0 -3
- data/test/migrations_base.rb +0 -5
data/test/test_helper.rb
CHANGED
@@ -1,14 +1,16 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler'
|
3
5
|
Bundler.setup(:default, :test)
|
4
6
|
|
5
7
|
if ENV['COV']
|
6
8
|
require 'simplecov'
|
7
9
|
SimpleCov.start do
|
8
|
-
add_filter
|
10
|
+
add_filter '/test/'
|
9
11
|
end
|
10
12
|
end
|
11
|
-
$:.unshift File.expand_path('
|
13
|
+
$:.unshift File.expand_path('../lib', __dir__)
|
12
14
|
require 'active_support/testing/setup_and_teardown'
|
13
15
|
require 'public_activity'
|
14
16
|
require 'public_activity/testing'
|
@@ -24,46 +26,40 @@ when :active_record
|
|
24
26
|
require 'active_record/connection_adapters/sqlite3_adapter'
|
25
27
|
require 'stringio' # silence the output
|
26
28
|
$stdout = StringIO.new # from migrator
|
27
|
-
ActiveRecord::Base.establish_connection(:
|
29
|
+
ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
|
28
30
|
|
29
|
-
migrations_path = File.expand_path('
|
31
|
+
migrations_path = File.expand_path('migrations', __dir__)
|
32
|
+
active_record_version = ActiveRecord.version.release
|
30
33
|
|
31
|
-
if
|
32
|
-
|
33
|
-
|
34
|
+
if active_record_version >= Gem::Version.new('6.0.0')
|
35
|
+
schema_path = File.expand_path('../tmp/schema.rb', File.dirname(__FILE__))
|
36
|
+
ActiveRecord::MigrationContext.new(migrations_path, ActiveRecord::SchemaMigration).migrate
|
37
|
+
elsif active_record_version >= Gem::Version.new('5.2.0')
|
34
38
|
ActiveRecord::MigrationContext.new(migrations_path).migrate
|
39
|
+
else # active_record_version < Gem::Version.new('5.2.0')
|
40
|
+
ActiveRecord::Migrator.migrate(migrations_path)
|
35
41
|
end
|
36
42
|
|
37
43
|
$stdout = STDOUT
|
38
44
|
|
39
45
|
def article(options = {})
|
40
|
-
|
46
|
+
Class.new(ActiveRecord::Base) do
|
41
47
|
self.table_name = 'articles'
|
42
48
|
include PublicActivity::Model
|
43
49
|
tracked options
|
44
50
|
belongs_to :user
|
45
51
|
|
46
52
|
def self.name
|
47
|
-
|
48
|
-
end
|
49
|
-
|
50
|
-
if ::ActiveRecord::VERSION::MAJOR < 4
|
51
|
-
attr_accessible :name, :published, :user
|
53
|
+
'Article'
|
52
54
|
end
|
53
55
|
end
|
54
|
-
klass
|
55
56
|
end
|
56
|
-
class User < ActiveRecord::Base; end
|
57
57
|
|
58
|
-
|
59
|
-
PublicActivity::Activity.class_eval do
|
60
|
-
attr_accessible :nonstandard
|
61
|
-
end
|
62
|
-
end
|
58
|
+
class User < ActiveRecord::Base; end
|
63
59
|
when :mongoid
|
64
60
|
require 'mongoid'
|
65
61
|
|
66
|
-
Mongoid.load!(File.expand_path(
|
62
|
+
Mongoid.load!(File.expand_path('test/mongoid.yml'), :test)
|
67
63
|
|
68
64
|
class User
|
69
65
|
include Mongoid::Document
|
@@ -100,7 +96,7 @@ when :mongoid
|
|
100
96
|
when :mongo_mapper
|
101
97
|
require 'mongo_mapper'
|
102
98
|
|
103
|
-
config = YAML.load(File.read(
|
99
|
+
config = YAML.load(File.read('test/mongo_mapper.yml'))
|
104
100
|
MongoMapper.setup(config, :test)
|
105
101
|
|
106
102
|
class User
|
data/test/test_testing.rb
CHANGED
@@ -1,34 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'test_helper'
|
2
|
-
describe PublicActivity do
|
3
4
|
|
4
|
-
|
5
|
+
describe PublicActivity do
|
6
|
+
describe 'self.with_tracking' do
|
5
7
|
after do
|
6
8
|
PublicActivity.enabled = true
|
7
9
|
end
|
8
|
-
|
9
|
-
it
|
10
|
+
|
11
|
+
it 'enables tracking inside the block' do
|
10
12
|
PublicActivity.enabled = false
|
11
13
|
|
12
14
|
PublicActivity.with_tracking do
|
13
|
-
PublicActivity.enabled
|
15
|
+
assert PublicActivity.enabled?
|
14
16
|
end
|
15
17
|
end
|
16
18
|
|
17
|
-
it
|
19
|
+
it 'restores previous `enabled` state' do
|
18
20
|
PublicActivity.enabled = false
|
19
21
|
PublicActivity.with_tracking do
|
20
22
|
# something
|
21
23
|
end
|
22
|
-
|
24
|
+
|
25
|
+
assert_equal PublicActivity.enabled?, false
|
23
26
|
end
|
24
27
|
end
|
25
28
|
|
26
|
-
describe
|
27
|
-
it
|
29
|
+
describe 'self.without_tracking' do
|
30
|
+
it 'disables tracking inside the block' do
|
28
31
|
PublicActivity.enabled = true
|
29
32
|
|
30
33
|
PublicActivity.without_tracking do
|
31
|
-
PublicActivity.enabled
|
34
|
+
assert_equal PublicActivity.enabled?, false
|
32
35
|
end
|
33
36
|
end
|
34
37
|
end
|
data/test/test_tracking.rb
CHANGED
@@ -1,79 +1,80 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'test_helper'
|
2
4
|
|
3
5
|
describe PublicActivity::Tracked do
|
4
6
|
describe 'defining instance options' do
|
5
7
|
subject { article.new }
|
6
8
|
let :options do
|
7
|
-
{
|
8
|
-
:
|
9
|
-
:
|
10
|
-
:
|
9
|
+
{
|
10
|
+
key: 'key',
|
11
|
+
params: { a: 1 },
|
12
|
+
owner: User.create,
|
13
|
+
recipient: User.create
|
14
|
+
}
|
11
15
|
end
|
12
16
|
before(:each) { subject.activity(options) }
|
13
|
-
let(:activity){ subject.save; subject.activities.last }
|
17
|
+
let(:activity) { subject.save; subject.activities.last }
|
14
18
|
|
15
|
-
specify { subject.activity_key
|
16
|
-
specify { activity.key
|
19
|
+
specify { assert_same subject.activity_key, options[:key] }
|
20
|
+
specify { assert_equal activity.key, options[:key] }
|
17
21
|
|
18
|
-
specify { subject.activity_owner
|
19
|
-
specify { activity.owner
|
22
|
+
specify { assert_same subject.activity_owner, options[:owner] }
|
23
|
+
specify { assert_equal activity.owner, options[:owner] }
|
20
24
|
|
21
|
-
specify { subject.activity_params
|
22
|
-
specify { activity.parameters
|
25
|
+
specify { assert_same subject.activity_params, options[:params] }
|
26
|
+
specify { assert_equal activity.parameters, options[:params] }
|
23
27
|
|
24
|
-
specify { subject.activity_recipient
|
25
|
-
specify { activity.recipient
|
28
|
+
specify { assert_same subject.activity_recipient, options[:recipient] }
|
29
|
+
specify { assert_equal activity.recipient, options[:recipient] }
|
26
30
|
end
|
27
31
|
|
28
32
|
it 'can be tracked and be an activist at the same time' do
|
29
33
|
case PublicActivity.config.orm
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
belongs_to :user
|
40
|
-
end
|
41
|
-
|
42
|
-
field :name, type: String
|
43
|
-
field :published, type: Boolean
|
44
|
-
tracked
|
45
|
-
activist
|
46
|
-
end
|
47
|
-
when :mongo_mapper
|
48
|
-
class ActivistAndTrackedArticle
|
49
|
-
include MongoMapper::Document
|
50
|
-
include PublicActivity::Model
|
51
|
-
|
52
|
-
belongs_to :user
|
53
|
-
|
54
|
-
key :name, String
|
55
|
-
key :published, Boolean
|
56
|
-
tracked
|
57
|
-
activist
|
58
|
-
timestamps!
|
59
|
-
end
|
60
|
-
when :active_record
|
61
|
-
class ActivistAndTrackedArticle < ActiveRecord::Base
|
62
|
-
self.table_name = 'articles'
|
63
|
-
include PublicActivity::Model
|
64
|
-
tracked
|
65
|
-
activist
|
66
|
-
|
67
|
-
if ::ActiveRecord::VERSION::MAJOR < 4
|
68
|
-
attr_accessible :name, :published, :user
|
69
|
-
end
|
34
|
+
when :mongoid
|
35
|
+
class ActivistAndTrackedArticle
|
36
|
+
include Mongoid::Document
|
37
|
+
include Mongoid::Timestamps
|
38
|
+
include PublicActivity::Model
|
39
|
+
|
40
|
+
if ::Mongoid::VERSION.split('.')[0].to_i >= 7
|
41
|
+
belongs_to :user, optional: true
|
42
|
+
else
|
70
43
|
belongs_to :user
|
71
44
|
end
|
45
|
+
|
46
|
+
field :name, type: String
|
47
|
+
field :published, type: Boolean
|
48
|
+
tracked
|
49
|
+
activist
|
50
|
+
end
|
51
|
+
when :mongo_mapper
|
52
|
+
class ActivistAndTrackedArticle
|
53
|
+
include MongoMapper::Document
|
54
|
+
include PublicActivity::Model
|
55
|
+
|
56
|
+
belongs_to :user
|
57
|
+
|
58
|
+
key :name, String
|
59
|
+
key :published, Boolean
|
60
|
+
tracked
|
61
|
+
activist
|
62
|
+
timestamps!
|
63
|
+
end
|
64
|
+
when :active_record
|
65
|
+
class ActivistAndTrackedArticle < ActiveRecord::Base
|
66
|
+
self.table_name = 'articles'
|
67
|
+
include PublicActivity::Model
|
68
|
+
tracked
|
69
|
+
activist
|
70
|
+
|
71
|
+
belongs_to :user
|
72
|
+
end
|
72
73
|
end
|
73
74
|
|
74
75
|
art = ActivistAndTrackedArticle.new
|
75
76
|
art.save
|
76
|
-
art.activities.last.trackable_id
|
77
|
+
assert_equal art.activities.last.trackable_id, art.id
|
77
78
|
assert_nil art.activities.last.owner_id
|
78
79
|
end
|
79
80
|
|
@@ -82,13 +83,13 @@ describe PublicActivity::Tracked do
|
|
82
83
|
it 'should resolve symbols' do
|
83
84
|
a = article(nonstandard: :name).new(name: 'Symbol resolved')
|
84
85
|
a.save
|
85
|
-
a.activities.last.nonstandard
|
86
|
+
assert_equal a.activities.last.nonstandard, 'Symbol resolved'
|
86
87
|
end
|
87
88
|
|
88
89
|
it 'should resolve procs' do
|
89
|
-
a = article(nonstandard: proc {|_, model| model.name}).new(name: 'Proc resolved')
|
90
|
+
a = article(nonstandard: proc { |_, model| model.name }).new(name: 'Proc resolved')
|
90
91
|
a.save
|
91
|
-
a.activities.last.nonstandard
|
92
|
+
assert_equal a.activities.last.nonstandard, 'Proc resolved'
|
92
93
|
end
|
93
94
|
end
|
94
95
|
|
@@ -97,43 +98,43 @@ describe PublicActivity::Tracked do
|
|
97
98
|
a = article.new(name: 'Symbol resolved')
|
98
99
|
a.activity nonstandard: :name
|
99
100
|
a.save
|
100
|
-
a.activities.last.nonstandard
|
101
|
+
assert_equal a.activities.last.nonstandard, 'Symbol resolved'
|
101
102
|
end
|
102
103
|
|
103
104
|
it 'should resolve procs' do
|
104
105
|
a = article.new(name: 'Proc resolved')
|
105
|
-
a.activity nonstandard: proc {|_, model| model.name}
|
106
|
+
a.activity nonstandard: proc { |_, model| model.name }
|
106
107
|
a.save
|
107
|
-
a.activities.last.nonstandard
|
108
|
+
assert_equal a.activities.last.nonstandard, 'Proc resolved'
|
108
109
|
end
|
109
110
|
end
|
110
111
|
end
|
111
112
|
|
112
113
|
it 'should reset instance options on successful create_activity' do
|
113
114
|
a = article.new
|
114
|
-
a.activity key: 'test', params: {test: 1}
|
115
|
+
a.activity key: 'test', params: { test: 1 }
|
115
116
|
a.save
|
116
|
-
a.activities.count
|
117
|
-
|
118
|
-
a.activity_params
|
117
|
+
assert_equal a.activities.count, 1
|
118
|
+
assert_raises(PublicActivity::NoKeyProvided) { a.create_activity }
|
119
|
+
assert_empty a.activity_params
|
119
120
|
a.activity key: 'asd'
|
120
121
|
a.create_activity
|
121
|
-
|
122
|
+
assert_raises(PublicActivity::NoKeyProvided) { a.create_activity }
|
122
123
|
end
|
123
124
|
|
124
125
|
it 'should not accept global key option' do
|
125
126
|
# this example tests the lack of presence of sth that should not be here
|
126
127
|
a = article(key: 'asd').new
|
127
128
|
a.save
|
128
|
-
|
129
|
-
a.activities.count
|
129
|
+
assert_raises(PublicActivity::NoKeyProvided) { a.create_activity }
|
130
|
+
assert_equal a.activities.count, 1
|
130
131
|
end
|
131
132
|
|
132
133
|
it 'should not change global custom fields' do
|
133
134
|
a = article(nonstandard: 'global').new
|
134
135
|
a.activity nonstandard: 'instance'
|
135
136
|
a.save
|
136
|
-
a.class.activity_custom_fields_global
|
137
|
+
assert_equal a.class.activity_custom_fields_global, nonstandard: 'global'
|
137
138
|
end
|
138
139
|
|
139
140
|
describe 'disabling functionality' do
|
@@ -141,9 +142,9 @@ describe PublicActivity::Tracked do
|
|
141
142
|
PublicActivity.enabled = false
|
142
143
|
activity_count_before = PublicActivity::Activity.count
|
143
144
|
|
144
|
-
@article = article
|
145
|
+
@article = article.new
|
145
146
|
@article.save
|
146
|
-
PublicActivity::Activity.count
|
147
|
+
assert_equal PublicActivity::Activity.count, activity_count_before
|
147
148
|
|
148
149
|
PublicActivity.enabled = true
|
149
150
|
end
|
@@ -155,12 +156,12 @@ describe PublicActivity::Tracked do
|
|
155
156
|
klass.public_activity_off
|
156
157
|
@article = klass.new
|
157
158
|
@article.save
|
158
|
-
PublicActivity::Activity.count
|
159
|
+
assert_equal PublicActivity::Activity.count, activity_count_before
|
159
160
|
|
160
161
|
klass.public_activity_on
|
161
162
|
@article.name = 'Changed Article'
|
162
163
|
@article.save
|
163
|
-
PublicActivity::Activity.count
|
164
|
+
assert(PublicActivity::Activity.count > activity_count_before)
|
164
165
|
end
|
165
166
|
end
|
166
167
|
|
@@ -169,9 +170,10 @@ describe PublicActivity::Tracked do
|
|
169
170
|
let(:options) { {} }
|
170
171
|
|
171
172
|
it 'allows skipping the tracking on CRUD actions' do
|
172
|
-
|
173
|
+
art =
|
174
|
+
case PublicActivity.config.orm
|
173
175
|
when :mongoid
|
174
|
-
|
176
|
+
Class.new do
|
175
177
|
include Mongoid::Document
|
176
178
|
include Mongoid::Timestamps
|
177
179
|
include PublicActivity::Model
|
@@ -180,10 +182,10 @@ describe PublicActivity::Tracked do
|
|
180
182
|
|
181
183
|
field :name, type: String
|
182
184
|
field :published, type: Boolean
|
183
|
-
tracked :
|
185
|
+
tracked skip_defaults: true
|
184
186
|
end
|
185
187
|
when :mongo_mapper
|
186
|
-
|
188
|
+
Class.new do
|
187
189
|
include MongoMapper::Document
|
188
190
|
include PublicActivity::Model
|
189
191
|
|
@@ -191,44 +193,57 @@ describe PublicActivity::Tracked do
|
|
191
193
|
|
192
194
|
key :name, String
|
193
195
|
key :published, Boolean
|
194
|
-
tracked :
|
196
|
+
tracked skip_defaults: true
|
195
197
|
|
196
198
|
timestamps!
|
197
199
|
end
|
198
200
|
when :active_record
|
199
|
-
|
200
|
-
|
201
|
+
article(skip_defaults: true)
|
202
|
+
end
|
201
203
|
|
202
|
-
art
|
203
|
-
art
|
204
|
-
art
|
205
|
-
art
|
204
|
+
assert_includes art, PublicActivity::Common
|
205
|
+
refute_includes art, PublicActivity::Creation
|
206
|
+
refute_includes art, PublicActivity::Update
|
207
|
+
refute_includes art, PublicActivity::Destruction
|
206
208
|
end
|
207
209
|
|
208
210
|
describe 'default options' do
|
209
211
|
subject { article }
|
210
212
|
|
211
|
-
specify { subject
|
212
|
-
specify { subject
|
213
|
-
specify { subject
|
213
|
+
specify { assert_includes subject, PublicActivity::Creation }
|
214
|
+
specify { assert_includes subject, PublicActivity::Destruction }
|
215
|
+
specify { assert_includes subject, PublicActivity::Update }
|
214
216
|
|
215
|
-
specify
|
216
|
-
|
217
|
-
|
217
|
+
specify do
|
218
|
+
callbacks = subject._create_callbacks.select do |c|
|
219
|
+
c.kind.eql?(:after) && c.filter == :activity_on_create
|
220
|
+
end
|
221
|
+
|
222
|
+
refute_empty callbacks
|
223
|
+
end
|
224
|
+
|
225
|
+
specify do
|
226
|
+
callbacks = subject._update_callbacks.select do |c|
|
227
|
+
c.kind.eql?(:after) && c.filter == :activity_on_update
|
228
|
+
end
|
229
|
+
|
230
|
+
refute_empty callbacks
|
231
|
+
end
|
218
232
|
|
219
|
-
specify
|
220
|
-
|
221
|
-
|
233
|
+
specify do
|
234
|
+
callbacks = subject._destroy_callbacks.select do |c|
|
235
|
+
c.kind.eql?(:before) && c.filter == :activity_on_destroy
|
236
|
+
end
|
222
237
|
|
223
|
-
|
224
|
-
|
225
|
-
end.wont_be_empty }
|
238
|
+
refute_empty callbacks
|
239
|
+
end
|
226
240
|
end
|
227
241
|
|
228
242
|
it 'accepts :except option' do
|
229
|
-
|
243
|
+
art =
|
244
|
+
case PublicActivity.config.orm
|
230
245
|
when :mongoid
|
231
|
-
|
246
|
+
Class.new do
|
232
247
|
include Mongoid::Document
|
233
248
|
include Mongoid::Timestamps
|
234
249
|
include PublicActivity::Model
|
@@ -237,10 +252,10 @@ describe PublicActivity::Tracked do
|
|
237
252
|
|
238
253
|
field :name, type: String
|
239
254
|
field :published, type: Boolean
|
240
|
-
tracked :
|
255
|
+
tracked except: [:create]
|
241
256
|
end
|
242
257
|
when :mongo_mapper
|
243
|
-
|
258
|
+
Class.new do
|
244
259
|
include MongoMapper::Document
|
245
260
|
include PublicActivity::Model
|
246
261
|
|
@@ -248,23 +263,24 @@ describe PublicActivity::Tracked do
|
|
248
263
|
|
249
264
|
key :name, String
|
250
265
|
key :published, Boolean
|
251
|
-
tracked :
|
266
|
+
tracked except: [:create]
|
252
267
|
|
253
268
|
timestamps!
|
254
269
|
end
|
255
270
|
when :active_record
|
256
|
-
|
257
|
-
|
271
|
+
article(except: [:create])
|
272
|
+
end
|
258
273
|
|
259
|
-
art
|
260
|
-
art
|
261
|
-
art
|
274
|
+
refute_includes art, PublicActivity::Creation
|
275
|
+
assert_includes art, PublicActivity::Update
|
276
|
+
assert_includes art, PublicActivity::Destruction
|
262
277
|
end
|
263
278
|
|
264
279
|
it 'accepts :only option' do
|
265
|
-
|
280
|
+
art =
|
281
|
+
case PublicActivity.config.orm
|
266
282
|
when :mongoid
|
267
|
-
|
283
|
+
Class.new do
|
268
284
|
include Mongoid::Document
|
269
285
|
include Mongoid::Timestamps
|
270
286
|
include PublicActivity::Model
|
@@ -274,10 +290,10 @@ describe PublicActivity::Tracked do
|
|
274
290
|
field :name, type: String
|
275
291
|
field :published, type: Boolean
|
276
292
|
|
277
|
-
tracked :
|
293
|
+
tracked only: %i[create update]
|
278
294
|
end
|
279
295
|
when :mongo_mapper
|
280
|
-
|
296
|
+
Class.new do
|
281
297
|
include MongoMapper::Document
|
282
298
|
include PublicActivity::Model
|
283
299
|
|
@@ -286,61 +302,65 @@ describe PublicActivity::Tracked do
|
|
286
302
|
key :name, String
|
287
303
|
key :published, Boolean
|
288
304
|
|
289
|
-
tracked :
|
305
|
+
tracked only: %i[create update]
|
290
306
|
end
|
291
307
|
when :active_record
|
292
|
-
|
293
|
-
|
308
|
+
article(only: %I[create update])
|
309
|
+
end
|
294
310
|
|
295
|
-
art
|
296
|
-
art
|
297
|
-
art
|
311
|
+
assert_includes art, PublicActivity::Creation
|
312
|
+
refute_includes art, PublicActivity::Destruction
|
313
|
+
assert_includes art, PublicActivity::Update
|
298
314
|
end
|
299
315
|
|
300
316
|
it 'accepts :owner option' do
|
301
317
|
owner = mock('owner')
|
302
|
-
subject.tracked(:
|
303
|
-
subject.activity_owner_global
|
318
|
+
subject.tracked(owner: owner)
|
319
|
+
assert_equal subject.activity_owner_global, owner
|
304
320
|
end
|
305
321
|
|
306
322
|
it 'accepts :params option' do
|
307
|
-
params = {:
|
308
|
-
subject.tracked(:
|
309
|
-
subject.activity_params_global
|
323
|
+
params = { a: 1 }
|
324
|
+
subject.tracked(params: params)
|
325
|
+
assert_equal subject.activity_params_global, params
|
310
326
|
end
|
311
327
|
|
312
328
|
it 'accepts :on option' do
|
313
|
-
on = {:
|
314
|
-
subject.tracked(:
|
315
|
-
subject.activity_hooks
|
329
|
+
on = { a: -> {}, b: proc {} }
|
330
|
+
subject.tracked(on: on)
|
331
|
+
assert_equal subject.activity_hooks, on
|
316
332
|
end
|
317
333
|
|
318
334
|
it 'accepts :on option with string keys' do
|
319
|
-
on = {'a' =>
|
320
|
-
subject.tracked(:
|
321
|
-
subject.activity_hooks
|
335
|
+
on = { 'a' => -> {} }
|
336
|
+
subject.tracked(on: on)
|
337
|
+
assert_equal subject.activity_hooks, on.symbolize_keys
|
322
338
|
end
|
323
339
|
|
324
340
|
it 'accepts :on values that are procs' do
|
325
|
-
on = {:
|
326
|
-
subject.tracked(:
|
327
|
-
subject.activity_hooks
|
328
|
-
subject.activity_hooks
|
329
|
-
subject.activity_hooks
|
341
|
+
on = { unpassable: 1, proper: -> {}, proper_proc: proc {} }
|
342
|
+
subject.tracked(on: on)
|
343
|
+
assert_includes subject.activity_hooks, :proper
|
344
|
+
assert_includes subject.activity_hooks, :proper_proc
|
345
|
+
refute_includes subject.activity_hooks, :unpassable
|
330
346
|
end
|
331
347
|
|
332
348
|
describe 'global options' do
|
333
|
-
subject { article(recipient: :test, owner: :test2, params: {a: 'b'}) }
|
349
|
+
subject { article(recipient: :test, owner: :test2, params: { a: 'b' }) }
|
334
350
|
|
335
|
-
specify { subject.activity_recipient_global
|
336
|
-
specify { subject.activity_owner_global
|
337
|
-
specify { subject.activity_params_global
|
351
|
+
specify { assert_equal subject.activity_recipient_global, :test }
|
352
|
+
specify { assert_equal subject.activity_owner_global, :test2 }
|
353
|
+
specify { assert_equal subject.activity_params_global, a: 'b' }
|
338
354
|
end
|
339
355
|
end
|
340
356
|
|
341
357
|
describe 'activity hooks' do
|
342
|
-
subject
|
343
|
-
|
358
|
+
subject do
|
359
|
+
s = article
|
360
|
+
s.activity_hooks = { test: hook }
|
361
|
+
s
|
362
|
+
end
|
363
|
+
let(:hook) { -> {} }
|
344
364
|
|
345
365
|
it 'retrieves hooks' do
|
346
366
|
assert_same hook, subject.get_hook(:test)
|
@@ -351,33 +371,37 @@ describe PublicActivity::Tracked do
|
|
351
371
|
end
|
352
372
|
|
353
373
|
it 'returns nil when no matching hook is present' do
|
354
|
-
nil
|
374
|
+
assert_same nil, subject.get_hook(:nonexistent)
|
355
375
|
end
|
356
376
|
|
357
377
|
it 'allows hooks to decide if activity should be created' do
|
358
378
|
subject.tracked
|
359
|
-
@article = subject.new(:
|
379
|
+
@article = subject.new(name: 'Some Name')
|
360
380
|
PublicActivity.set_controller(mock('controller'))
|
361
381
|
pf = proc { |model, controller|
|
362
|
-
controller
|
363
|
-
model.name
|
382
|
+
assert_same controller, PublicActivity.get_controller
|
383
|
+
assert_equal model.name, 'Some Name'
|
364
384
|
false
|
365
385
|
}
|
366
386
|
pt = proc { |model, controller|
|
367
|
-
controller
|
368
|
-
model.name
|
387
|
+
assert_same controller, PublicActivity.get_controller
|
388
|
+
assert_equal model.name, 'Other Name'
|
369
389
|
true # this will save the activity with *.update key
|
370
390
|
}
|
371
|
-
@article.class.activity_hooks = {:
|
391
|
+
@article.class.activity_hooks = { create: pf, update: pt, destroy: pt }
|
372
392
|
|
373
|
-
@article.activities.to_a
|
393
|
+
assert_empty @article.activities.to_a
|
374
394
|
@article.save # create
|
375
395
|
@article.name = 'Other Name'
|
376
396
|
@article.save # update
|
377
397
|
@article.destroy # destroy
|
378
398
|
|
379
|
-
@article.activities.count
|
380
|
-
@article.activities.first.key
|
399
|
+
assert_equal @article.activities.count, 2
|
400
|
+
assert_equal @article.activities.first.key, 'article.update'
|
381
401
|
end
|
382
402
|
end
|
403
|
+
|
404
|
+
def teardown
|
405
|
+
PublicActivity.set_controller(nil)
|
406
|
+
end
|
383
407
|
end
|