active_metadata 0.8.1 → 0.8.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -32,8 +32,9 @@ module ActiveMetadata
32
32
 
33
33
  before_update :manage_concurrency
34
34
  after_save :save_history
35
- attr_accessor :conflicts
36
- attr_accessor :active_metadata_timestamp
35
+ attr_accessor :conflicts, :active_metadata_timestamp, :skip_history_notification
36
+
37
+ alias_method :skip_history_notification?, :skip_history_notification
37
38
 
38
39
  instance_variable_set("@active_metadata_options", options)
39
40
 
@@ -12,7 +12,7 @@ module ActiveMetadata::Persistence::History
12
12
  next if ActiveMetadata::CONFIG['history_skip_fields'].include?(key)
13
13
  ActiveMetadata::History.create! :value => value[1],:model_class => metadata_class, :model_id => metadata_id,:label => key.to_s, :created_by => current_user_id
14
14
  invalidate_history_cache_for key.to_s
15
- self.send(:send_notification, key, value[0], value[1], :history_message, current_user_id)
15
+ self.send(:send_notification, key, value[0], value[1], :history_message, current_user_id) unless skip_history_notification?
16
16
  end
17
17
  end
18
18
 
@@ -30,7 +30,7 @@ module ActiveMetadata::Persistence::Watcher
30
30
  ActiveMetadata::Watcher.where(:model_class => metadata_class, :model_id => metadata_id, :label => field, :owner_id => owner.id).empty? ? false : true
31
31
  end
32
32
 
33
- def send_notification(field, old_value, new_value, type=:default_message, created_by=nil)
33
+ def send_notification(field, old_value, new_value, type=:default_message, created_by=nil)
34
34
  watchers_for(field).each { |watch| notify_changes(field, old_value, new_value, self.class.to_s, self.id, watch.owner_id, type, created_by) }
35
35
  end
36
36
 
@@ -1,3 +1,3 @@
1
1
  module ActiveMetadata
2
- VERSION = "0.8.1"
2
+ VERSION = "0.8.2"
3
3
  end
@@ -3,13 +3,14 @@ require "time"
3
3
 
4
4
  describe ActiveMetadata do
5
5
 
6
- before(:each) do
7
- @document = Document.create! { |d| d.name = "John" }
8
- @document.reload
9
- end
10
6
 
11
7
  describe "history" do
12
8
 
9
+ before(:each) do
10
+ @document = Document.create! { |d| d.name = "John" }
11
+ @document.reload
12
+ end
13
+
13
14
  it "should create history when a document is created" do
14
15
  @document.history_for(:name).should have(1).record
15
16
  end
@@ -78,4 +79,53 @@ describe ActiveMetadata do
78
79
 
79
80
  end
80
81
 
82
+ describe "skip_history_notification" do
83
+
84
+ context "given an user that watch Document#name" do
85
+
86
+ before do
87
+ @user = User.create!(:email => "email@email.it", :firstname => 'John', :lastname => 'smith')
88
+ ActiveMetadata::Watcher.create! :model_class => "Document", :label => :name, :owner_id => @user.id
89
+ end
90
+
91
+ it "and skip_history_notification false creating a Document with name not null should save the history and generate a notification" do
92
+ @document = Document.create! name: "John"
93
+ @document.history_for(:name)[0].value.should eq(@document.name)
94
+ @document.notifier.should_not be_nil
95
+ end
96
+
97
+ it "when true creating a Document with name not null should save the history but do not generate any notification" do
98
+ @document = Document.create! name: "John", skip_history_notification: true
99
+ @document.history_for(:name)[0].value.should eq(@document.name)
100
+ @document.notifier.should be_nil
101
+ end
102
+
103
+ end
104
+
105
+ context "given an user that watch Author#name (does not persist ancestor)" do
106
+
107
+ before do
108
+ @user = User.create!(:email => "email@email.it", :firstname => 'John', :lastname => 'smith')
109
+ ActiveMetadata::Watcher.create! :model_class => "Author", :label => :name, :owner_id => @user.id
110
+ end
111
+
112
+ it "when a new record is craeted by the parent document instance should save history and generate a notification" do
113
+ @document = Document.create! name: "John"
114
+ @author = @document.create_author name: "my title"
115
+ @author.history_for(:name)[0].value.should eq(@author.name)
116
+ @author.notifier.should_not be_nil
117
+ end
118
+
119
+ it "when a new record is craeted by the parent document skipping notifications should save history and not generate any notification" do
120
+ @document = Document.create! name: "John"
121
+ @author = @document.create_author name: "my title", skip_history_notification: true
122
+ @author.history_for(:name)[0].value.should eq(@author.name)
123
+ @author.notifier.should be_nil
124
+ end
125
+
126
+ end
127
+
128
+ end
129
+
130
+
81
131
  end
@@ -3,12 +3,13 @@ require "time"
3
3
 
4
4
  describe ActiveMetadata do
5
5
 
6
- before(:each) do
7
- @document = Document.create! { |d| d.name = "John" }
8
- end
9
6
 
10
7
  describe "watchers" do
11
8
 
9
+ before(:each) do
10
+ @document = Document.create! { |d| d.name = "John" }
11
+ end
12
+
12
13
  it "should create a watcher for a given field" do
13
14
  user = User.create!(:email => "email@email.it", :firstname => 'John', :lastname => 'smith' )
14
15
  @document.create_watcher_for(:name, user)
@@ -33,28 +34,6 @@ describe ActiveMetadata do
33
34
  @document.is_watched_by(:name,another_user).should be_false
34
35
  end
35
36
 
36
-
37
- it "should create an unread message by default" do
38
- pending "to be moved in virgilio project"
39
- user = User.create!(:email => "email@email.it", :firstname => 'John', :lastname => 'smith' )
40
- @document.create_watcher_for(:name, user)
41
- @document.update_attribute(:name, 'new_value')
42
-
43
-
44
- user.inbox.messages.should have(1).record
45
- user.inbox.messages.first.read.should be_false
46
- end
47
-
48
- it "should read an unread message" do
49
- pending "to be moved in virgilio project"
50
- user = User.create!(:email => "email@email.it", :firstname => 'John', :lastname => 'smith' )
51
- @document.create_watcher_for(:name, user)
52
- @document.update_attribute(:name, 'new_value')
53
- alert_message = user.inbox.messages.first
54
- alert_message.mark_as_read
55
- user.inbox.messages.first.read.should be_true
56
- end
57
-
58
37
  end
59
38
 
60
39
  describe "#watchers_for" do
@@ -64,6 +43,7 @@ describe ActiveMetadata do
64
43
  before do
65
44
  @user = User.create!(:email => "email@email.it", :firstname => 'John', :lastname => 'smith' )
66
45
  @another_user = User.create!(:email => "email2@email.it", :firstname => 'George', :lastname => 'Washington' )
46
+ @document = Document.create! { |d| d.name = "John" }
67
47
  @document.create_watcher_for(:name, @user)
68
48
  ActiveMetadata::Watcher.create! :model_class => "Document", :label => :name, :owner_id => @another_user.id
69
49
  end
@@ -18,6 +18,12 @@ module TestDb
18
18
  t.timestamps
19
19
  end
20
20
 
21
+ ActiveRecord::Base.connection.create_table :authors, force: true do |t|
22
+ t.string :name
23
+ t.integer :document_id
24
+ t.timestamps
25
+ end
26
+
21
27
  ActiveRecord::Base.connection.create_table :chapters, force: true do |t|
22
28
  t.string :title
23
29
  t.timestamps
@@ -0,0 +1,34 @@
1
+ # encoding: utf-8
2
+ class Document < ActiveRecord::Base
3
+ has_one :section
4
+ has_one :author
5
+ acts_as_metadata
6
+ end
7
+
8
+ # Persist ancestor
9
+ class Section < ActiveRecord::Base
10
+ belongs_to :document
11
+ acts_as_metadata :ancestors => [:document], :persists_ancestor => true
12
+ end
13
+
14
+ # Does not persist ancestor
15
+ class Author < ActiveRecord::Base
16
+ belongs_to :document
17
+ acts_as_metadata :ancestors => [:document]
18
+ end
19
+
20
+ class Chapter < ActiveRecord::Base
21
+ acts_as_metadata ancestors: [:sections, :document]
22
+ has_many :sections
23
+ end
24
+
25
+ class User < ActiveRecord::Base
26
+ has_one :inbox
27
+
28
+ @@current_user = User.create!
29
+
30
+ def self.current
31
+ @@current_user
32
+ end
33
+
34
+ end
@@ -5,7 +5,7 @@ class WatcherNotifier
5
5
  puts "---------------------------------------->"
6
6
  end
7
7
 
8
- def notify(matched_label, old_value, new_value, model_class, model_id,owner_id,type, created_by)
8
+ def notify(matched_label, old_value, new_value, model_class, model_id,owner_id,type, created_by)
9
9
  @matched_label= matched_label
10
10
  @old_value = old_value
11
11
  @new_value = new_value
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_metadata
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: 0.8.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-09-17 00:00:00.000000000 Z
13
+ date: 2012-09-21 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
@@ -240,14 +240,11 @@ files:
240
240
  - spec/models/history_spec.rb
241
241
  - spec/routing/active_metadata/stream_controller_routing_spec.rb
242
242
  - spec/spec_helper.rb
243
- - spec/support/chapter.rb
244
- - spec/support/document.rb
245
243
  - spec/support/migrations.rb
244
+ - spec/support/models.rb
246
245
  - spec/support/pdf_test.pdf
247
246
  - spec/support/pdf_test_1.pdf
248
247
  - spec/support/pdf_test_2.pdf
249
- - spec/support/section.rb
250
- - spec/support/user.rb
251
248
  - spec/support/watcher_notifier.rb
252
249
  - spec/views/active_metadata/stream/index.html.erb_spec.rb
253
250
  homepage: ''
@@ -264,7 +261,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
264
261
  version: '0'
265
262
  segments:
266
263
  - 0
267
- hash: -3451596570019589333
264
+ hash: 2514822335632258370
268
265
  required_rubygems_version: !ruby/object:Gem::Requirement
269
266
  none: false
270
267
  requirements:
@@ -273,7 +270,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
273
270
  version: '0'
274
271
  segments:
275
272
  - 0
276
- hash: -3451596570019589333
273
+ hash: 2514822335632258370
277
274
  requirements: []
278
275
  rubyforge_project: active_metadata
279
276
  rubygems_version: 1.8.19
@@ -337,13 +334,10 @@ test_files:
337
334
  - spec/models/history_spec.rb
338
335
  - spec/routing/active_metadata/stream_controller_routing_spec.rb
339
336
  - spec/spec_helper.rb
340
- - spec/support/chapter.rb
341
- - spec/support/document.rb
342
337
  - spec/support/migrations.rb
338
+ - spec/support/models.rb
343
339
  - spec/support/pdf_test.pdf
344
340
  - spec/support/pdf_test_1.pdf
345
341
  - spec/support/pdf_test_2.pdf
346
- - spec/support/section.rb
347
- - spec/support/user.rb
348
342
  - spec/support/watcher_notifier.rb
349
343
  - spec/views/active_metadata/stream/index.html.erb_spec.rb
@@ -1,5 +0,0 @@
1
- # encoding: utf-8
2
- class Chapter < ActiveRecord::Base
3
- acts_as_metadata ancestors: [:sections, :document]
4
- has_many :sections
5
- end
@@ -1,6 +0,0 @@
1
- # encoding: utf-8
2
- class Document < ActiveRecord::Base
3
- has_one :section
4
- acts_as_metadata
5
-
6
- end
@@ -1,5 +0,0 @@
1
- # encoding: utf-8
2
- class Section < ActiveRecord::Base
3
- belongs_to :document
4
- acts_as_metadata :ancestors => [:document], :persists_ancestor => true
5
- end
data/spec/support/user.rb DELETED
@@ -1,11 +0,0 @@
1
- # encoding: utf-8
2
- class User < ActiveRecord::Base
3
- has_one :inbox
4
-
5
- @@current_user = User.create!
6
-
7
- def self.current
8
- @@current_user
9
- end
10
-
11
- end