active_metadata 0.6.9 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -52,7 +52,12 @@ module ActiveMetadata::Persistence::Attachment
52
52
  ActiveMetadata::Attachment.find(id)
53
53
  end
54
54
 
55
- # not cached
55
+ # return all the starred notes for the current model and for any field
56
+ # datas does not come from cache
57
+ def starred_attachments
58
+ fetch_attachments_for nil, true
59
+ end
60
+
56
61
  def starred_attachments_for(field)
57
62
  fetch_attachments_for field, true
58
63
  end
@@ -75,8 +80,9 @@ module ActiveMetadata::Persistence::Attachment
75
80
  end
76
81
 
77
82
  def fetch_attachments_for(field, starred=nil, order_by="updated_at DESC")
78
- conditions = {:document_class => metadata_class, :document_id => metadata_id, :label => field}
79
- conditions[:starred] = starred if !starred.nil?
83
+ conditions = {:document_class => metadata_class, :document_id => metadata_id}
84
+ conditions[:label] = field unless field.nil?
85
+ conditions[:starred] = starred unless starred.nil?
80
86
  ActiveMetadata::Attachment.all(:conditions => conditions, :order => order_by)
81
87
  end
82
88
 
@@ -56,16 +56,27 @@ module ActiveMetadata::Persistence::Note
56
56
  notes_for(field).size
57
57
  end
58
58
 
59
- # not cached
59
+ # return all the starred notes for the current model and for any field
60
+ # datas does not come from cache
61
+ def starred_notes
62
+ fetch_notes_for nil, true
63
+ end
64
+
65
+ # return all the starred notes for a particular field
66
+ # datas does not come from cache
60
67
  def starred_notes_for(field)
61
68
  fetch_notes_for field, true
62
69
  end
63
70
 
71
+ # star a note
72
+ # reload the cache calling update
64
73
  def star_note(id)
65
74
  n = ActiveMetadata::Note.find(id)
66
75
  update_note id, n.note, true
67
76
  end
68
77
 
78
+ # unstar a note
79
+ # reload the cache calling update
69
80
  def unstar_note(id)
70
81
  n = ActiveMetadata::Note.find(id)
71
82
  update_note id, n.note, false
@@ -78,10 +89,9 @@ module ActiveMetadata::Persistence::Note
78
89
  end
79
90
 
80
91
  def fetch_notes_for(field, starred=nil, order_by="updated_at DESC")
81
- conditions = {:label => field, :document_class => metadata_class, :document_id => metadata_id}
82
- unless starred.nil?
83
- conditions[:starred] = starred
84
- end
92
+ conditions = {:document_class => metadata_class, :document_id => metadata_id}
93
+ conditions[:label] = field unless field.nil?
94
+ conditions[:starred] = starred unless starred.nil?
85
95
  ActiveMetadata::Note.all(:conditions => conditions, :order => order_by)
86
96
  end
87
97
 
@@ -1,9 +1,16 @@
1
1
  module ActiveMetadata::Streamable
2
2
 
3
- def stream_for(field, order_by = :created_at)
3
+ # return the streamables items by field in an ordered array
4
+ # ActiveMetadata::CONFIG['streamables'] defines what models will be retrieved
5
+ def stream_for(field, order_by = :updated_at)
4
6
  sort_stream(collect_stream_data(field), order_by)
5
7
  end
6
8
 
9
+ # same as #stream_for but not filtered by field
10
+ def stream_all_starred order_by = :updated_at
11
+ sort_stream(collect_starred_stream_data, order_by)
12
+ end
13
+
7
14
  private
8
15
  def sort_stream stream, order_by
9
16
  stream.sort{ |a,b| b.send(order_by) <=> a.send(order_by) }
@@ -17,6 +24,14 @@ module ActiveMetadata::Streamable
17
24
  res
18
25
  end
19
26
 
27
+ def collect_starred_stream_data
28
+ res = []
29
+ ActiveMetadata::CONFIG['streamables'].each do |model|
30
+ res.concat self.send("starred_#{model.to_s.pluralize}".to_sym).collect { |el| el }
31
+ end
32
+ res
33
+ end
34
+
20
35
  def stream_collect_method model
21
36
  model.to_s == 'note' ? 'notes_for' : 'attachments_for'
22
37
  end
@@ -1,3 +1,3 @@
1
1
  module ActiveMetadata
2
- VERSION = "0.6.9"
2
+ VERSION = "0.7.0"
3
3
  end
Binary file
@@ -176,6 +176,21 @@ describe ActiveMetadata do
176
176
 
177
177
  end
178
178
 
179
+ describe "#starred_attachments" do
180
+
181
+ it "should return all the starred attachments for any model field" do
182
+ @document.save_attachment_for(:name, @attachment, true)
183
+ @document.save_attachment_for(:title, @attachment, true)
184
+ @document.save_attachment_for(:title, @attachment2 )
185
+
186
+ starred = @document.starred_attachments
187
+ starred.count.should eq 2
188
+ starred.find{|att| att.attach.instance_read(:file_name) == "pdf_test_2.pdf"}.should be_nil
189
+ end
190
+
191
+ end
192
+
193
+
179
194
 
180
195
  end
181
196
 
@@ -204,5 +204,19 @@ describe ActiveMetadata do
204
204
 
205
205
  end
206
206
 
207
+ describe "#starred_notes" do
208
+
209
+ it "should return all the starred notes for any model field" do
210
+ @document.create_note_for :name, "starred note for name", true
211
+ @document.create_note_for :title, "starred note for title", true
212
+ @document.create_note_for :title, "not starred note for title"
213
+
214
+ starred = @document.starred_notes
215
+ starred.count.should eq 2
216
+ starred.find{|note| note.note == "not starred note for title"}.should be_nil
217
+ end
218
+
219
+ end
220
+
207
221
  end
208
222
  end
@@ -131,5 +131,35 @@ describe ActiveMetadata::Streamable do
131
131
 
132
132
  end
133
133
 
134
+ describe "#stream_all_starred" do
135
+
136
+ context "given 2 notes (only one starred) and 2 attachments (only one starred)" do
137
+
138
+ before(:each) do
139
+ @document = Document.create! { |d| d.name = "John" }
140
+ (1..2).each do |i|
141
+ @document.save_attachment_for(:name,test_pdf("pdf_test_#{i}"), i.odd? )
142
+ @document.create_note_for(:name, "note_#{i}", i.odd? )
143
+ end
144
+ end
145
+
146
+ it "should return 2 elements" do
147
+ @document.stream_all_starred.count.should eq 2
148
+ end
149
+
150
+ it "should return only the starred items" do
151
+ @document.stream_all_starred.collect{|el| el.starred? }.count.should eq 2
152
+ end
153
+
154
+ it "should return the starred stream ordered by UPDATED_AT DESC" do
155
+ starred = @document.stream_all_starred
156
+ starred.first.should be_kind_of ActiveMetadata::Note
157
+ @document.update_attachment starred.last.id, starred.last.attach.to_file
158
+ @document.stream_all_starred.first.should be_kind_of ActiveMetadata::Attachment
159
+ end
160
+
161
+ end
162
+
163
+ end
134
164
 
135
165
  end
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.6.9
4
+ version: 0.7.0
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: 2012-03-23 00:00:00.000000000Z
13
+ date: 2012-04-17 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
17
- requirement: &70324883600380 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,10 +22,15 @@ dependencies:
22
22
  version: 3.2.0
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70324883600380
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ version: 3.2.0
26
31
  - !ruby/object:Gem::Dependency
27
32
  name: sqlite3
28
- requirement: &70324883599960 !ruby/object:Gem::Requirement
33
+ requirement: !ruby/object:Gem::Requirement
29
34
  none: false
30
35
  requirements:
31
36
  - - ! '>='
@@ -33,10 +38,15 @@ dependencies:
33
38
  version: '0'
34
39
  type: :development
35
40
  prerelease: false
36
- version_requirements: *70324883599960
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
37
47
  - !ruby/object:Gem::Dependency
38
48
  name: rspec-rails
39
- requirement: &70324883599500 !ruby/object:Gem::Requirement
49
+ requirement: !ruby/object:Gem::Requirement
40
50
  none: false
41
51
  requirements:
42
52
  - - ! '>='
@@ -44,10 +54,15 @@ dependencies:
44
54
  version: '0'
45
55
  type: :development
46
56
  prerelease: false
47
- version_requirements: *70324883599500
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
48
63
  - !ruby/object:Gem::Dependency
49
64
  name: sqlite3
50
- requirement: &70324883599080 !ruby/object:Gem::Requirement
65
+ requirement: !ruby/object:Gem::Requirement
51
66
  none: false
52
67
  requirements:
53
68
  - - ! '>='
@@ -55,21 +70,15 @@ dependencies:
55
70
  version: '0'
56
71
  type: :development
57
72
  prerelease: false
58
- version_requirements: *70324883599080
59
- - !ruby/object:Gem::Dependency
60
- name: sqlite3-ruby
61
- requirement: &70324883598660 !ruby/object:Gem::Requirement
73
+ version_requirements: !ruby/object:Gem::Requirement
62
74
  none: false
63
75
  requirements:
64
76
  - - ! '>='
65
77
  - !ruby/object:Gem::Version
66
78
  version: '0'
67
- type: :development
68
- prerelease: false
69
- version_requirements: *70324883598660
70
79
  - !ruby/object:Gem::Dependency
71
80
  name: cucumber-rails
72
- requirement: &70324883598240 !ruby/object:Gem::Requirement
81
+ requirement: !ruby/object:Gem::Requirement
73
82
  none: false
74
83
  requirements:
75
84
  - - ! '>='
@@ -77,10 +86,15 @@ dependencies:
77
86
  version: '0'
78
87
  type: :development
79
88
  prerelease: false
80
- version_requirements: *70324883598240
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
81
95
  - !ruby/object:Gem::Dependency
82
96
  name: ci_reporter
83
- requirement: &70324883597820 !ruby/object:Gem::Requirement
97
+ requirement: !ruby/object:Gem::Requirement
84
98
  none: false
85
99
  requirements:
86
100
  - - ! '>='
@@ -88,10 +102,15 @@ dependencies:
88
102
  version: '0'
89
103
  type: :development
90
104
  prerelease: false
91
- version_requirements: *70324883597820
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
92
111
  - !ruby/object:Gem::Dependency
93
112
  name: paperclip
94
- requirement: &70324883596860 !ruby/object:Gem::Requirement
113
+ requirement: !ruby/object:Gem::Requirement
95
114
  none: false
96
115
  requirements:
97
116
  - - ! '>='
@@ -99,7 +118,12 @@ dependencies:
99
118
  version: '0'
100
119
  type: :runtime
101
120
  prerelease: false
102
- version_requirements: *70324883596860
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ! '>='
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
103
127
  description: First implementation will write metadata on mongodb
104
128
  email:
105
129
  - acampolonghi@gmail.com
@@ -235,7 +259,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
235
259
  version: '0'
236
260
  segments:
237
261
  - 0
238
- hash: -3812328665944082884
262
+ hash: -2284098148828860317
239
263
  required_rubygems_version: !ruby/object:Gem::Requirement
240
264
  none: false
241
265
  requirements:
@@ -244,10 +268,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
244
268
  version: '0'
245
269
  segments:
246
270
  - 0
247
- hash: -3812328665944082884
271
+ hash: -2284098148828860317
248
272
  requirements: []
249
273
  rubyforge_project: active_metadata
250
- rubygems_version: 1.8.10
274
+ rubygems_version: 1.8.19
251
275
  signing_key:
252
276
  specification_version: 3
253
277
  summary: Add metadata to fields in an active record model