active_metadata 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/db/test.sqlite3 +0 -0
- data/lib/active_metadata/base.rb +11 -2
- data/lib/active_metadata/persistence/active_record/attachment.rb +19 -3
- data/lib/active_metadata/persistence/active_record/history.rb +15 -1
- data/lib/active_metadata/persistence/active_record/note.rb +21 -6
- data/lib/active_metadata/version.rb +1 -1
- data/spec/active_metadata_spec.rb +0 -1
- data/spec/spec_helper.rb +2 -0
- metadata +20 -20
data/db/test.sqlite3
CHANGED
Binary file
|
data/lib/active_metadata/base.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
module ActiveMetadata
|
2
2
|
|
3
3
|
CONFIG = File.exists?('config/active_metadata.yml') ? YAML.load_file('config/active_metadata.yml')[Rails.env] : {}
|
4
|
-
|
4
|
+
CONFIG['cache_expires_in'] ||= 60
|
5
|
+
|
5
6
|
## Define ModelMethods
|
6
7
|
module Base
|
7
8
|
|
@@ -29,6 +30,14 @@ module ActiveMetadata
|
|
29
30
|
end
|
30
31
|
|
31
32
|
module InstanceMethods
|
33
|
+
|
34
|
+
def self.included(klass)
|
35
|
+
[:notes,:attachments,:history].each do |item|
|
36
|
+
klass.send(:define_method,"#{item.to_s}_cache_key".to_sym) do |field|
|
37
|
+
"active_metadata/#{item.to_s}/#{self.class}/#{metadata_id}/#{field}/"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
32
41
|
|
33
42
|
def metadata_id
|
34
43
|
metadata_id_from = self.class.class_variable_get("@@metadata_id_from")
|
@@ -46,7 +55,7 @@ module ActiveMetadata
|
|
46
55
|
else
|
47
56
|
nil
|
48
57
|
end
|
49
|
-
end
|
58
|
+
end
|
50
59
|
|
51
60
|
end # InstanceMethods
|
52
61
|
end
|
@@ -8,17 +8,21 @@ module ActiveMetadata::Persistence::ActiveRecord::Attachment
|
|
8
8
|
|
9
9
|
def save_attachment_for(field, file)
|
10
10
|
attachment = Attachment.create! :document_id => metadata_id, :label => field, :attach => file, :created_by => current_user_id
|
11
|
+
reload_attachments_cache_for field
|
11
12
|
self.send(:send_notification, field, "", attachment.attach.original_filename, :attachment_message, current_user_id)
|
12
13
|
end
|
13
14
|
|
14
15
|
def attachments_for(field)
|
15
|
-
|
16
|
+
Rails.cache.fetch(attachments_cache_key(field), :expires_in => ActiveMetadata::CONFIG['cache_expires_in'].minutes) do
|
17
|
+
fetch_attachments_for field
|
18
|
+
end
|
16
19
|
end
|
17
20
|
|
18
21
|
def delete_attachment_for(field,id)
|
19
22
|
a = Attachment.find(id)
|
20
23
|
filename = a.attach.original_filename
|
21
24
|
a.destroy
|
25
|
+
reload_attachments_cache_for field
|
22
26
|
self.send(:send_notification, field, filename, "", :attachment_message)
|
23
27
|
end
|
24
28
|
|
@@ -29,13 +33,25 @@ module ActiveMetadata::Persistence::ActiveRecord::Attachment
|
|
29
33
|
a.updated_by = current_user_id
|
30
34
|
a.save
|
31
35
|
new_filename = a.attach.original_filename
|
32
|
-
|
36
|
+
|
37
|
+
reload_attachments_cache_for field
|
33
38
|
self.send(:send_notification, field, old_filename, new_filename, :attachment_message, current_user_id)
|
34
39
|
end
|
35
40
|
|
36
41
|
def has_attachments_for field
|
37
|
-
|
42
|
+
attachments_for(field).size == 0 ? false : true
|
38
43
|
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def reload_attachments_cache_for field
|
48
|
+
Rails.cache.write(attachments_cache_key(field),fetch_attachments_for(field), :expires_in => ActiveMetadata::CONFIG['cache_expires_in'].minutes )
|
49
|
+
end
|
50
|
+
|
51
|
+
def fetch_attachments_for field
|
52
|
+
Attachment.all(:conditions => {:document_id => metadata_id,:label => field}, :order => "attach_updated_at DESC")
|
53
|
+
end
|
54
|
+
|
39
55
|
|
40
56
|
end
|
41
57
|
|
@@ -10,13 +10,27 @@ module ActiveMetadata::Persistence::ActiveRecord::History
|
|
10
10
|
self.changes.each do |key, value|
|
11
11
|
next if ActiveMetadata::CONFIG['history_skip_fields'].include?(key)
|
12
12
|
History.create! :value => value[1],:document_id => metadata_id,:label => key.to_s, :created_by => current_user_id
|
13
|
+
invalidate_history_cache_for key.to_s
|
13
14
|
self.send(:send_notification, key, value[0], value[1], :history_message,current_user_id)
|
14
15
|
end
|
15
16
|
end
|
16
17
|
|
17
18
|
def history_for field
|
18
|
-
|
19
|
+
Rails.cache.fetch(history_cache_key(field), :expires_in => ActiveMetadata::CONFIG['cache_expires_in'].minutes) do
|
20
|
+
fetch_histories_for field
|
21
|
+
end
|
19
22
|
end
|
20
23
|
|
24
|
+
private
|
25
|
+
|
26
|
+
def invalidate_history_cache_for field
|
27
|
+
Rails.cache.delete history_cache_key(field)
|
28
|
+
end
|
29
|
+
|
30
|
+
def fetch_histories_for field
|
31
|
+
History.all(:conditions => {:document_id => metadata_id,:label => field}, :order => "created_at DESC")
|
32
|
+
end
|
33
|
+
|
34
|
+
|
21
35
|
end
|
22
36
|
end
|
@@ -7,20 +7,23 @@ module ActiveMetadata::Persistence::ActiveRecord::Note
|
|
7
7
|
module InstanceMethods
|
8
8
|
|
9
9
|
def create_note_for(field, note)
|
10
|
-
Note.create! :document_id => metadata_id,:label => field.to_s,:note => note, :created_by => current_user_id
|
10
|
+
Note.create! :document_id => metadata_id,:label => field.to_s,:note => note, :created_by => current_user_id
|
11
|
+
reload_notes_cache_for field
|
11
12
|
self.send(:send_notification, field, "", note, :note_message, current_user_id)
|
12
13
|
end
|
13
14
|
|
14
15
|
def update_note(id, note)
|
15
16
|
n = Note.find(id)
|
16
17
|
old_value = n.note
|
17
|
-
n.update_attributes! :note => note, :updated_by => current_user_id, :updated_at => Time.now.utc
|
18
|
-
|
18
|
+
n.update_attributes! :note => note, :updated_by => current_user_id, :updated_at => Time.now.utc
|
19
|
+
reload_notes_cache_for n.label
|
19
20
|
self.send(:send_notification, n.label, old_value, note, :note_message, current_user_id)
|
20
21
|
end
|
21
22
|
|
22
23
|
def notes_for(field)
|
23
|
-
|
24
|
+
Rails.cache.fetch(notes_cache_key(field), :expires_in => ActiveMetadata::CONFIG['cache_expires_in'].minutes) do
|
25
|
+
fetch_notes_for field
|
26
|
+
end
|
24
27
|
end
|
25
28
|
|
26
29
|
def note_for(field,id)
|
@@ -35,11 +38,23 @@ module ActiveMetadata::Persistence::ActiveRecord::Note
|
|
35
38
|
n = Note.find(id)
|
36
39
|
old_value = n.note
|
37
40
|
n.destroy
|
41
|
+
reload_notes_cache_for field
|
38
42
|
self.send(:send_notification, field, old_value, "", :note_message)
|
39
43
|
end
|
40
44
|
|
41
|
-
def has_notes_for field
|
42
|
-
|
45
|
+
def has_notes_for field
|
46
|
+
notes_for(field).size == 0 ? false : true
|
43
47
|
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def reload_notes_cache_for field
|
52
|
+
Rails.cache.write(notes_cache_key(field),fetch_notes_for(field), :expires_in => ActiveMetadata::CONFIG['cache_expires_in'].minutes )
|
53
|
+
end
|
54
|
+
|
55
|
+
def fetch_notes_for field
|
56
|
+
Note.all(:conditions => {:label => field, :document_id => metadata_id}, :order => "updated_at DESC" )
|
57
|
+
end
|
58
|
+
|
44
59
|
end
|
45
60
|
end
|
@@ -314,7 +314,6 @@ describe ActiveMetadata do
|
|
314
314
|
it "should update an attachment" do
|
315
315
|
@document.save_attachment_for(:name,@attachment)
|
316
316
|
att = @document.attachments_for(:name).last
|
317
|
-
|
318
317
|
@document.update_attachment_for :name,att.id,@attachment2
|
319
318
|
att2 = @document.attachments_for(:name).last
|
320
319
|
|
data/spec/spec_helper.rb
CHANGED
@@ -5,6 +5,7 @@ require "logger"
|
|
5
5
|
require 'rspec/core'
|
6
6
|
require "sqlite3"
|
7
7
|
require "rack/test/uploaded_file"
|
8
|
+
require 'active_support/cache'
|
8
9
|
|
9
10
|
$: << File.expand_path(File.dirname(__FILE__) + "/../app")
|
10
11
|
gemfile = File.expand_path('../Gemfile', __FILE__)
|
@@ -25,6 +26,7 @@ ENV["ACTIVE_METADATA_ENV"] ||= 'test'
|
|
25
26
|
ActiveRecord::Base.establish_connection YAML.load_file("config/database.yml")[ENV["RAILS_ENV"]]
|
26
27
|
ActiveRecord::Base.logger = Logger.new "log/test.log"
|
27
28
|
Rails.logger = ActiveRecord::Base.logger
|
29
|
+
RAILS_CACHE = ActiveSupport::Cache::MemoryStore.new
|
28
30
|
|
29
31
|
# loading ruby files
|
30
32
|
require "#{File.dirname(__FILE__)}/../lib/engine.rb"
|
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.2.
|
4
|
+
version: 0.2.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2011-10-
|
13
|
+
date: 2011-10-13 00:00:00.000000000Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rspec-rails
|
17
|
-
requirement: &
|
17
|
+
requirement: &2154095180 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: '0'
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *2154095180
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: sqlite3
|
28
|
-
requirement: &
|
28
|
+
requirement: &2154154560 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *2154154560
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: sqlite3-ruby
|
39
|
-
requirement: &
|
39
|
+
requirement: &2154205940 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: '0'
|
45
45
|
type: :development
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *2154205940
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: cucumber
|
50
|
-
requirement: &
|
50
|
+
requirement: &2154241320 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ! '>='
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: '0'
|
56
56
|
type: :development
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *2154241320
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: ci_reporter
|
61
|
-
requirement: &
|
61
|
+
requirement: &2154310080 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ! '>='
|
@@ -66,10 +66,10 @@ dependencies:
|
|
66
66
|
version: '0'
|
67
67
|
type: :development
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *2154310080
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: rails
|
72
|
-
requirement: &
|
72
|
+
requirement: &2154507860 !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
75
|
- - =
|
@@ -77,10 +77,10 @@ dependencies:
|
|
77
77
|
version: 3.0.1
|
78
78
|
type: :runtime
|
79
79
|
prerelease: false
|
80
|
-
version_requirements: *
|
80
|
+
version_requirements: *2154507860
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
82
|
name: activerecord
|
83
|
-
requirement: &
|
83
|
+
requirement: &2154597420 !ruby/object:Gem::Requirement
|
84
84
|
none: false
|
85
85
|
requirements:
|
86
86
|
- - =
|
@@ -88,10 +88,10 @@ dependencies:
|
|
88
88
|
version: 3.0.1
|
89
89
|
type: :runtime
|
90
90
|
prerelease: false
|
91
|
-
version_requirements: *
|
91
|
+
version_requirements: *2154597420
|
92
92
|
- !ruby/object:Gem::Dependency
|
93
93
|
name: paperclip
|
94
|
-
requirement: &
|
94
|
+
requirement: &2154656840 !ruby/object:Gem::Requirement
|
95
95
|
none: false
|
96
96
|
requirements:
|
97
97
|
- - ! '>='
|
@@ -99,10 +99,10 @@ dependencies:
|
|
99
99
|
version: '0'
|
100
100
|
type: :runtime
|
101
101
|
prerelease: false
|
102
|
-
version_requirements: *
|
102
|
+
version_requirements: *2154656840
|
103
103
|
- !ruby/object:Gem::Dependency
|
104
104
|
name: to_xls
|
105
|
-
requirement: &
|
105
|
+
requirement: &2154806000 !ruby/object:Gem::Requirement
|
106
106
|
none: false
|
107
107
|
requirements:
|
108
108
|
- - ! '>='
|
@@ -110,7 +110,7 @@ dependencies:
|
|
110
110
|
version: '0'
|
111
111
|
type: :runtime
|
112
112
|
prerelease: false
|
113
|
-
version_requirements: *
|
113
|
+
version_requirements: *2154806000
|
114
114
|
description: First implementation will write metadata on mongodb
|
115
115
|
email:
|
116
116
|
- acampolonghi@gmail.com
|