mongoid_activity_tracker 0.0.2 → 0.1.0
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/README.md +25 -13
- data/lib/mongoid_activity_tracker/tracker.rb +12 -3
- data/lib/mongoid_activity_tracker/version.rb +1 -1
- data/lib/mongoid_activity_tracker.rb +0 -1
- data/test/mongoid_activity_tracker/tracker_test.rb +33 -12
- data/test/test_helper.rb +2 -7
- metadata +2 -5
- data/lib/mongoid_activity_tracker/track_activity.rb +0 -22
- data/test/mongoid_activity_tracker/track_activity_test.rb +0 -33
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ee823c459da4ba5e2237e1b4f37781bd4cd2e415
|
4
|
+
data.tar.gz: 973cfac3d8cb5b3cb8ffa5e1dad4dd7537a2b46f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ed8320caa536de6ff2da6b6fce30c55e48860a50895415643161290d3d69d853a1ae481e4c7256427e574026f556db9e3bf211697db6cfce8253c579edc43068
|
7
|
+
data.tar.gz: d31ffa48203b59524e927a7d4e50662c7ac3f35c11b00c61998e1222017a0214ab3c5921bfad4eb5ea5405709267bd1d643147c0a5a4ff01c1fe41cd59d639cc
|
data/README.md
CHANGED
@@ -37,42 +37,54 @@ end
|
|
37
37
|
Track the activity:
|
38
38
|
|
39
39
|
```Ruby
|
40
|
-
|
41
|
-
|
42
|
-
res = my_tracker.track('create')
|
40
|
+
res = MyTracker.track(current_user, :create)
|
43
41
|
|
44
42
|
res.actor # returns the current_user
|
45
43
|
res.actor_cache # => { to_s: … }
|
46
44
|
res.actor_cache_object.to_s # the 'actor_cache_object' wraps the actor_cache hash into an OpenStruct
|
47
|
-
res.action # =>
|
45
|
+
res.action # => :create
|
48
46
|
```
|
49
47
|
|
50
48
|
## Configuration
|
51
49
|
|
52
50
|
Along the action, it is possible to track any number of related documents.
|
53
51
|
|
54
|
-
First, configure
|
52
|
+
First, configure the tracker class using the `.tracks` macros:
|
55
53
|
|
56
54
|
```Ruby
|
57
55
|
class MyTracker
|
58
56
|
include MongoidActivityTracker::Tracker
|
59
|
-
tracks :subject
|
57
|
+
tracks :subject
|
60
58
|
end
|
61
59
|
```
|
62
60
|
|
63
|
-
Then, specify
|
61
|
+
Then, specify the subject when tracking the activity:
|
64
62
|
|
65
63
|
```Ruby
|
66
|
-
|
67
|
-
|
68
|
-
res = my_tracker.track('create', subject: my_subject)
|
64
|
+
res = MyTracker.track(current_user, :create, subject: my_subject)
|
69
65
|
|
70
|
-
res.subject #
|
71
|
-
res.subject_cache # => { to_s:
|
66
|
+
res.subject # => my_subject
|
67
|
+
res.subject_cache # => { to_s: … }
|
72
68
|
res.subject_cache_object.to_s # …
|
73
69
|
```
|
74
70
|
|
75
|
-
By default, the `:cache_methods`
|
71
|
+
By default, the `:cache_methods` parameter is set to track [:to_s]. It can be customised to cache results of other methods as follows:
|
72
|
+
|
73
|
+
```Ruby
|
74
|
+
class MyTracker
|
75
|
+
include MongoidActivityTracker::Tracker
|
76
|
+
tracks :actor, cache_methods: [:to_s, :first_name, :last_name]
|
77
|
+
tracks :subject, cache_methods: [:to_s, :my_custom_method]
|
78
|
+
end
|
79
|
+
```
|
80
|
+
|
81
|
+
The tracker class can be also subclassed:
|
82
|
+
|
83
|
+
```Ruby
|
84
|
+
class MyTrackerWithTarget < MyTracker
|
85
|
+
tracks :target
|
86
|
+
end
|
87
|
+
```
|
76
88
|
|
77
89
|
## Contributing
|
78
90
|
|
@@ -7,6 +7,15 @@ module MongoidActivityTracker
|
|
7
7
|
attr_accessor :actor_cache_methods
|
8
8
|
|
9
9
|
module ClassMethods
|
10
|
+
|
11
|
+
def track _actor, _action, options={}
|
12
|
+
self.create(
|
13
|
+
{ action: _action, actor: _actor }.merge(options)
|
14
|
+
)
|
15
|
+
end
|
16
|
+
|
17
|
+
# ---------------------------------------------------------------------
|
18
|
+
|
10
19
|
def tracks relation_name, cache_methods: %i(to_s)
|
11
20
|
belongs_to relation_name, polymorphic: true
|
12
21
|
|
@@ -15,8 +24,8 @@ module MongoidActivityTracker
|
|
15
24
|
attr_accessor "#{relation_name}_cache_methods"
|
16
25
|
|
17
26
|
define_method "#{relation_name}_cache_methods" do
|
18
|
-
instance_variable_set
|
19
|
-
instance_variable_get
|
27
|
+
instance_variable_set("@#{relation_name}_cache_methods", cache_methods) unless instance_variable_get("@#{relation_name}_cache_methods")
|
28
|
+
instance_variable_get("@#{relation_name}_cache_methods")
|
20
29
|
end
|
21
30
|
|
22
31
|
define_method "#{relation_name}_cache_object" do
|
@@ -34,7 +43,7 @@ module MongoidActivityTracker
|
|
34
43
|
base.class_eval do
|
35
44
|
include Mongoid::Document
|
36
45
|
|
37
|
-
field :action, type:
|
46
|
+
field :action, type: Symbol
|
38
47
|
|
39
48
|
tracks :actor
|
40
49
|
|
@@ -1,11 +1,10 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
require_relative '../../lib/mongoid_activity_tracker/tracker'
|
4
|
-
|
5
3
|
module MongoidActivityTracker
|
6
4
|
describe Tracker do
|
7
5
|
|
8
6
|
let(:actor) { TestActor.new }
|
7
|
+
let(:sub) { TestSubject.new }
|
9
8
|
subject { TestTracker.new }
|
10
9
|
|
11
10
|
describe 'associations' do
|
@@ -24,31 +23,53 @@ module MongoidActivityTracker
|
|
24
23
|
end
|
25
24
|
end
|
26
25
|
|
26
|
+
# ---------------------------------------------------------------------
|
27
|
+
|
28
|
+
describe '.track' do
|
29
|
+
before do
|
30
|
+
@result = TestTracker.track(actor, :create, subject: sub)
|
31
|
+
end
|
32
|
+
it 'returns new object' do
|
33
|
+
@result.must_be_kind_of TestTracker
|
34
|
+
end
|
35
|
+
it 'always sets the :actor' do
|
36
|
+
@result.actor.must_equal actor
|
37
|
+
end
|
38
|
+
it 'sets the :actor_cache with :to_s by default' do
|
39
|
+
@result.actor_cache.must_equal({ to_s: actor.to_s })
|
40
|
+
end
|
41
|
+
it 'sets the :action' do
|
42
|
+
@result.action.must_equal :create
|
43
|
+
end
|
44
|
+
it 'sets any other attributes' do
|
45
|
+
@result.subject.must_equal sub
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
27
49
|
# ---------------------------------------------------------------------
|
28
50
|
|
29
51
|
describe '.tracks' do
|
30
|
-
let(:tracker_two) { TestTrackerTwo.new }
|
31
52
|
it 'adds the belongs_to :subject relation' do
|
32
|
-
|
53
|
+
subject.must_respond_to :subject
|
33
54
|
end
|
34
55
|
it 'adds the :subject_cache field' do
|
35
|
-
|
36
|
-
|
56
|
+
subject.must_respond_to :subject_cache
|
57
|
+
subject.subject_cache.must_be_kind_of Hash
|
37
58
|
end
|
38
59
|
it 'defines the :subject_cache_methods accessor' do
|
39
|
-
|
60
|
+
subject.must_respond_to :subject_cache_methods
|
40
61
|
end
|
41
62
|
it 'sets :to_s as a default for the :subject_cache_methods' do
|
42
|
-
|
63
|
+
subject.subject_cache_methods.must_equal %i(to_s)
|
43
64
|
end
|
44
65
|
it 'adds the :subject_cache_object wrapper' do
|
45
|
-
|
66
|
+
subject.subject_cache_object.must_respond_to :to_s
|
46
67
|
end
|
47
68
|
it 'sets the cache before :save' do
|
48
69
|
test_subject = TestSubject.new
|
49
|
-
|
50
|
-
|
51
|
-
|
70
|
+
subject.subject = test_subject
|
71
|
+
subject.run_callbacks(:save)
|
72
|
+
subject.subject_cache.fetch(:to_s).must_equal test_subject.to_s
|
52
73
|
end
|
53
74
|
end
|
54
75
|
|
data/test/test_helper.rb
CHANGED
@@ -3,9 +3,9 @@ require 'database_cleaner'
|
|
3
3
|
require 'minitest'
|
4
4
|
require 'minitest/autorun'
|
5
5
|
require 'minitest/spec'
|
6
|
+
|
6
7
|
require 'mongoid'
|
7
8
|
require 'mongoid_activity_tracker'
|
8
|
-
require 'mongoid_activity_tracker/tracker'
|
9
9
|
|
10
10
|
if ENV["CI"]
|
11
11
|
require "coveralls"
|
@@ -39,18 +39,13 @@ DatabaseCleaner.orm = :mongoid
|
|
39
39
|
DatabaseCleaner.strategy = :truncation
|
40
40
|
|
41
41
|
class MiniTest::Spec
|
42
|
-
before(:each) { DatabaseCleaner.
|
43
|
-
after(:each) { DatabaseCleaner.clean }
|
42
|
+
before(:each) { DatabaseCleaner.clean }
|
44
43
|
end
|
45
44
|
|
46
45
|
# ---------------------------------------------------------------------
|
47
46
|
|
48
47
|
class TestTracker
|
49
48
|
include MongoidActivityTracker::Tracker
|
50
|
-
end
|
51
|
-
|
52
|
-
class TestTrackerTwo
|
53
|
-
include MongoidActivityTracker::Tracker
|
54
49
|
tracks :subject
|
55
50
|
end
|
56
51
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid_activity_tracker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomas Celizna
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mongoid
|
@@ -137,11 +137,9 @@ files:
|
|
137
137
|
- README.md
|
138
138
|
- Rakefile
|
139
139
|
- lib/mongoid_activity_tracker.rb
|
140
|
-
- lib/mongoid_activity_tracker/track_activity.rb
|
141
140
|
- lib/mongoid_activity_tracker/tracker.rb
|
142
141
|
- lib/mongoid_activity_tracker/version.rb
|
143
142
|
- mongoid_activity_tracker.gemspec
|
144
|
-
- test/mongoid_activity_tracker/track_activity_test.rb
|
145
143
|
- test/mongoid_activity_tracker/tracker_test.rb
|
146
144
|
- test/test_helper.rb
|
147
145
|
homepage: https://github.com/tomasc/mongoid_activity_tracker
|
@@ -169,6 +167,5 @@ signing_key:
|
|
169
167
|
specification_version: 4
|
170
168
|
summary: Minimal set of classes and modules to help with activity tracking.
|
171
169
|
test_files:
|
172
|
-
- test/mongoid_activity_tracker/track_activity_test.rb
|
173
170
|
- test/mongoid_activity_tracker/tracker_test.rb
|
174
171
|
- test/test_helper.rb
|
@@ -1,22 +0,0 @@
|
|
1
|
-
module MongoidActivityTracker
|
2
|
-
class TrackActivity
|
3
|
-
|
4
|
-
def self.with *args
|
5
|
-
new(*args)
|
6
|
-
end
|
7
|
-
|
8
|
-
# ---------------------------------------------------------------------
|
9
|
-
|
10
|
-
def initialize tracker_class, actor
|
11
|
-
@tracker_class = tracker_class
|
12
|
-
@actor = actor
|
13
|
-
end
|
14
|
-
|
15
|
-
def track action, options={}
|
16
|
-
@tracker_class.create(
|
17
|
-
{ action: action, actor: @actor}.merge(options)
|
18
|
-
)
|
19
|
-
end
|
20
|
-
|
21
|
-
end
|
22
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
require_relative '../../lib/mongoid_activity_tracker/track_activity'
|
4
|
-
|
5
|
-
module MongoidActivityTracker
|
6
|
-
describe TrackActivity do
|
7
|
-
let(:actor) { TestActor.new }
|
8
|
-
subject { TrackActivity.with(TestTrackerTwo, actor) }
|
9
|
-
let(:sub) { TestSubject.new }
|
10
|
-
|
11
|
-
describe '.call' do
|
12
|
-
before do
|
13
|
-
@tracker = subject.track('create', subject: sub)
|
14
|
-
end
|
15
|
-
it 'returns the tracker instance' do
|
16
|
-
@tracker.must_be_kind_of TestTrackerTwo
|
17
|
-
end
|
18
|
-
it 'always sets the :actor' do
|
19
|
-
@tracker.actor.must_equal actor
|
20
|
-
end
|
21
|
-
it 'sets the :actor_cache with :to_s by default' do
|
22
|
-
@tracker.actor_cache.must_equal({ to_s: actor.to_s })
|
23
|
-
end
|
24
|
-
it 'always sets the :action' do
|
25
|
-
@tracker.action.must_equal 'create'
|
26
|
-
end
|
27
|
-
it 'sets any other attributes' do
|
28
|
-
@tracker.subject.must_equal sub
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
33
|
-
end
|