ladder 0.2.1 → 0.3.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.
@@ -0,0 +1,50 @@
1
+ shared_context 'a Searchable File' do
2
+
3
+ describe '#save' do
4
+ before do
5
+ subject.save
6
+ Elasticsearch::Model.client.indices.flush
7
+ end
8
+
9
+ it 'should exist in the index' do
10
+ results = subject.class.search('*')
11
+ expect(results.count).to eq 1
12
+ expect(results.first.id).to eq subject.id.to_s
13
+ end
14
+
15
+ it 'should contain full-text content' do
16
+ results = subject.class.search 'Moomin*', fields: '*'
17
+ expect(results.count).to eq 1
18
+ expect(results.first.fields.file.first).to include 'Moomin'
19
+ end
20
+ end
21
+
22
+ describe '#save with update' do
23
+ before do
24
+ subject.save
25
+ subject.file = StringIO.new('It was a more serious smell than any he had met before, and slightly frightening.')
26
+ subject.save
27
+ Elasticsearch::Model.client.indices.flush
28
+ end
29
+
30
+ it 'should have updated full-text content' do
31
+ results = subject.class.search 'frightening', fields: '*'
32
+ expect(results.count).to eq 1
33
+ expect(results.first.fields.file.first).to include 'frightening'
34
+ end
35
+ end
36
+
37
+ describe '#destroy' do
38
+ before do
39
+ subject.save
40
+ subject.destroy
41
+ Elasticsearch::Model.client.indices.flush
42
+ end
43
+
44
+ it 'should not exist in the index' do
45
+ results = subject.class.search('*')
46
+ expect(results).to be_empty
47
+ end
48
+ end
49
+
50
+ end
@@ -0,0 +1,223 @@
1
+ shared_examples 'a Searchable' do
2
+
3
+ describe '#index_for_search' do
4
+
5
+ context 'with default' do
6
+ before do
7
+ subject.save
8
+ Elasticsearch::Model.client.indices.flush
9
+ end
10
+
11
+ it 'should exist in the index' do
12
+ results = subject.class.search('title:moomin*')
13
+ expect(results.count).to eq 1
14
+ expect(results.first._source.to_hash).to eq JSON.parse(subject.as_indexed_json.to_json)
15
+ end
16
+ end
17
+
18
+ context 'with as_qname' do
19
+ before do
20
+ subject.class.index_for_search { as_qname }
21
+ subject.save
22
+ Elasticsearch::Model.client.indices.flush
23
+ end
24
+
25
+ it 'should exist in the index' do
26
+ results = subject.class.search('dc.title.en:moomin*')
27
+ expect(results.count).to eq 1
28
+ expect(results.first._source.to_hash).to eq JSON.parse(subject.as_qname.to_json)
29
+ end
30
+ end
31
+
32
+ context 'with as_jsonld' do
33
+ before do
34
+ subject.class.index_for_search { as_jsonld }
35
+ subject.save
36
+ Elasticsearch::Model.client.indices.flush
37
+ end
38
+
39
+ it 'should exist in the index' do
40
+ results = subject.class.search('dc\:title.@value:moomin*')
41
+ expect(results.count).to eq 1
42
+ expect(results.first._source.to_hash).to eq subject.as_jsonld
43
+ end
44
+ end
45
+
46
+ end
47
+
48
+ describe '#save with update' do
49
+ before do
50
+ subject.save
51
+ subject.title = 'Kometen kommer'
52
+ subject.save
53
+ Elasticsearch::Model.client.indices.flush
54
+ end
55
+
56
+ it 'should have updated values' do
57
+ results = subject.class.search('title:kometen*')
58
+ expect(results.count).to eq 1
59
+ expect(results.first._source.to_hash).to eq JSON.parse(subject.as_indexed_json.to_json)
60
+ end
61
+ end
62
+
63
+ describe '#destroy' do
64
+ before do
65
+ subject.save
66
+ subject.destroy
67
+ Elasticsearch::Model.client.indices.flush
68
+ end
69
+
70
+ it 'should not exist in the index' do
71
+ results = subject.class.search('*')
72
+ expect(results).to be_empty
73
+ end
74
+ end
75
+
76
+ end
77
+
78
+ shared_examples 'a Searchable with related' do
79
+
80
+ describe '#index_for_search related' do
81
+
82
+ context 'with default' do
83
+ before do
84
+ subject.save
85
+ Elasticsearch::Model.client.indices.flush
86
+ end
87
+
88
+ it 'should contain an ID for the related object' do
89
+ results = subject.class.search('person_ids.$oid:' + person.id)
90
+ expect(results.count).to eq 1
91
+ expect(results.first._source.to_hash).to eq JSON.parse(subject.as_indexed_json.to_json)
92
+ end
93
+
94
+ it 'should include the related object in the index' do
95
+ results = person.class.search('foaf_name:tove')
96
+ expect(results.count).to eq 1
97
+ expect(results.first._source.to_hash).to eq JSON.parse(person.as_indexed_json.to_json)
98
+ end
99
+
100
+ it 'should contain an ID for the subject' do
101
+ results = person.class.search('thing_ids.$oid:' + subject.id)
102
+ expect(results.count).to eq 1
103
+ end
104
+ end
105
+
106
+ context 'with as qname' do
107
+ before do
108
+ person.class.index_for_search { as_qname }
109
+ subject.class.index_for_search { as_qname }
110
+ subject.save
111
+ Elasticsearch::Model.client.indices.flush
112
+ end
113
+
114
+ it 'should contain an ID for the related object' do
115
+ results = subject.class.search('dc.creator:' + person.id)
116
+ expect(results.count).to eq 1
117
+ expect(results.first._source.to_hash).to eq JSON.parse(subject.as_qname.to_json)
118
+ end
119
+
120
+ it 'should include the related object in the index' do
121
+ results = person.class.search('foaf.name.en:tove')
122
+ expect(results.count).to eq 1
123
+ expect(results.first._source.to_hash).to eq JSON.parse(person.as_qname.to_json)
124
+ end
125
+
126
+ it 'should contain an ID for the subject' do
127
+ results = person.class.search('dc.relation:' + subject.id)
128
+ expect(results.count).to eq 1
129
+ end
130
+ end
131
+
132
+ context 'with as_qname related' do
133
+ before do
134
+ person.class.index_for_search { as_qname related: true }
135
+ subject.class.index_for_search { as_qname related: true }
136
+ subject.save
137
+ Elasticsearch::Model.client.indices.flush
138
+ end
139
+
140
+ it 'should contain a embedded related object' do
141
+ results = subject.class.search('dc.creator.foaf.name.en:tove')
142
+ expect(results.count).to eq 1
143
+ expect(results.first._source.to_hash).to eq JSON.parse(subject.as_qname(related: true).to_json)
144
+ end
145
+
146
+ it 'should contain an embedded subject in the related object' do
147
+ results = person.class.search('dc.relation.dc.title.en:moomin*')
148
+ expect(results.count).to eq 1
149
+ expect(results.first._source.to_hash).to eq JSON.parse(person.as_qname(related: true).to_json)
150
+ end
151
+ end
152
+
153
+ context 'with as_jsonld' do
154
+ before do
155
+ person.class.index_for_search { as_jsonld }
156
+ subject.class.index_for_search { as_jsonld }
157
+ subject.save
158
+ Elasticsearch::Model.client.indices.flush
159
+ end
160
+
161
+ it 'should contain an ID for the related object' do
162
+ results = subject.class.search('dc\:creator.@id:' + person.id)
163
+ expect(results.count).to eq 1
164
+ expect(results.first._source.to_hash).to eq subject.as_jsonld
165
+ end
166
+
167
+ it 'should include the related object in the index' do
168
+ results = person.class.search('foaf\:name.@value:tove')
169
+ expect(results.count).to eq 1
170
+ expect(results.first._source.to_hash).to eq person.as_jsonld
171
+ end
172
+
173
+ it 'should contain an ID for the subject' do
174
+ results = person.class.search('dc\:relation.@id:' + subject.id)
175
+ expect(results.count).to eq 1
176
+ end
177
+ end
178
+
179
+ context 'with as_jsonld related' do
180
+ before do
181
+ person.class.index_for_search { as_jsonld related: true }
182
+ subject.class.index_for_search { as_jsonld related: true }
183
+ subject.save
184
+ Elasticsearch::Model.client.indices.flush
185
+ end
186
+
187
+ it 'should contain a embedded related object' do
188
+ results = subject.class.search('@graph.foaf\:name.@value:tove')
189
+ expect(results.count).to eq 1
190
+ expect(results.first._source.to_hash).to eq JSON.parse(subject.as_jsonld(related: true).to_json)
191
+ end
192
+
193
+ it 'should contain an embedded subject in the related object' do
194
+ results = person.class.search('@graph.dc\:title.@value:moomin*')
195
+ expect(results.count).to eq 1
196
+ expect(results.first._source.to_hash).to eq JSON.parse(person.as_jsonld(related: true).to_json)
197
+ end
198
+ end
199
+
200
+ context 'with as_framed_jsonld' do
201
+ before do
202
+ person.class.index_for_search { as_framed_jsonld }
203
+ subject.class.index_for_search { as_framed_jsonld }
204
+ subject.save
205
+ Elasticsearch::Model.client.indices.flush
206
+ end
207
+
208
+ it 'should contain a embedded related object' do
209
+ results = subject.class.search('dc\:creator.foaf\:name.@value:tove')
210
+ expect(results.count).to eq 1
211
+ expect(results.first._source.to_hash).to eq JSON.parse(subject.as_framed_jsonld.to_json)
212
+ end
213
+
214
+ it 'should contain an embedded subject in the related object' do
215
+ results = person.class.search('dc\:relation.dc\:title.@value:moomin*')
216
+ expect(results.count).to eq 1
217
+ expect(results.first._source.to_hash).to eq JSON.parse(person.as_framed_jsonld.to_json)
218
+ end
219
+ end
220
+
221
+ end
222
+
223
+ end
data/spec/spec_helper.rb CHANGED
@@ -2,6 +2,7 @@ require 'bundler/setup'
2
2
  Bundler.setup
3
3
 
4
4
  require 'ladder'
5
+ require 'mongoid'
5
6
  require 'pry'
6
7
  require 'simplecov'
7
8
  SimpleCov.start
metadata CHANGED
@@ -1,85 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ladder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - MJ Suhonos
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-08 00:00:00.000000000 Z
11
+ date: 2015-01-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: mongoid
14
+ name: active-triples
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '4.0'
19
+ version: '0.6'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '4.0'
26
+ version: '0.6'
27
27
  - !ruby/object:Gem::Dependency
28
- name: mongoid-grid_fs
28
+ name: activejob
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '2.1'
33
+ version: '4.2'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '2.1'
40
+ version: '4.2'
41
41
  - !ruby/object:Gem::Dependency
42
- name: active-triples
42
+ name: elasticsearch-model
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0.4'
47
+ version: '0.1'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0.4'
54
+ version: '0.1'
55
55
  - !ruby/object:Gem::Dependency
56
- name: elasticsearch-model
56
+ name: mongoid
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0.1'
61
+ version: '4.0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0.1'
68
+ version: '4.0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: mimemagic
70
+ name: mongoid-grid_fs
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0.2'
75
+ version: '2.1'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0.2'
82
+ version: '2.1'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: bundler
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -95,33 +95,33 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '1.7'
97
97
  - !ruby/object:Gem::Dependency
98
- name: pry
98
+ name: mimemagic
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '0.10'
103
+ version: '0.2'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '0.10'
110
+ version: '0.2'
111
111
  - !ruby/object:Gem::Dependency
112
- name: wirble
112
+ name: pry
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '0.1'
117
+ version: '0.10'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '0.1'
124
+ version: '0.10'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: rspec
127
127
  requirement: !ruby/object:Gem::Requirement
@@ -151,33 +151,47 @@ dependencies:
151
151
  - !ruby/object:Gem::Version
152
152
  version: '10.4'
153
153
  - !ruby/object:Gem::Dependency
154
- name: yard
154
+ name: simplecov
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
157
  - - "~>"
158
158
  - !ruby/object:Gem::Version
159
- version: '0.8'
159
+ version: '0.9'
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
- version: '0.8'
166
+ version: '0.9'
167
167
  - !ruby/object:Gem::Dependency
168
- name: simplecov
168
+ name: wirble
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
171
  - - "~>"
172
172
  - !ruby/object:Gem::Version
173
- version: '0.9'
173
+ version: '0.1'
174
174
  type: :development
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
178
  - - "~>"
179
179
  - !ruby/object:Gem::Version
180
- version: '0.9'
180
+ version: '0.1'
181
+ - !ruby/object:Gem::Dependency
182
+ name: yard
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '0.8'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '0.8'
181
195
  description: Dynamic framework for Linked Data modelling, persistence, and full-text
182
196
  indexing.
183
197
  email: mj@suhonos.ca
@@ -198,20 +212,25 @@ files:
198
212
  - lib/ladder/file.rb
199
213
  - lib/ladder/resource.rb
200
214
  - lib/ladder/resource/dynamic.rb
215
+ - lib/ladder/resource/serializable.rb
201
216
  - lib/ladder/searchable.rb
217
+ - lib/ladder/searchable/background.rb
202
218
  - lib/ladder/searchable/file.rb
203
219
  - lib/ladder/searchable/resource.rb
204
220
  - lib/ladder/version.rb
205
221
  - logo.png
206
222
  - mongoid.yml
207
- - spec/ladder/file/searchable_spec.rb
208
223
  - spec/ladder/file_spec.rb
209
224
  - spec/ladder/resource/dynamic_spec.rb
210
- - spec/ladder/resource/searchable_spec.rb
211
225
  - spec/ladder/resource_spec.rb
226
+ - spec/ladder/searchable/background_spec.rb
227
+ - spec/ladder/searchable/file_spec.rb
228
+ - spec/ladder/searchable/resource_spec.rb
212
229
  - spec/shared/file.rb
213
230
  - spec/shared/moomin.pdf
214
231
  - spec/shared/resource.rb
232
+ - spec/shared/searchable/file.rb
233
+ - spec/shared/searchable/resource.rb
215
234
  - spec/spec_helper.rb
216
235
  homepage: https://github.com/ladder/ladder
217
236
  licenses:
@@ -238,13 +257,16 @@ signing_key:
238
257
  specification_version: 4
239
258
  summary: ActiveModel Linked Data framework.
240
259
  test_files:
241
- - spec/ladder/file/searchable_spec.rb
242
260
  - spec/ladder/file_spec.rb
243
261
  - spec/ladder/resource/dynamic_spec.rb
244
- - spec/ladder/resource/searchable_spec.rb
245
262
  - spec/ladder/resource_spec.rb
263
+ - spec/ladder/searchable/background_spec.rb
264
+ - spec/ladder/searchable/file_spec.rb
265
+ - spec/ladder/searchable/resource_spec.rb
246
266
  - spec/shared/file.rb
247
267
  - spec/shared/moomin.pdf
248
268
  - spec/shared/resource.rb
269
+ - spec/shared/searchable/file.rb
270
+ - spec/shared/searchable/resource.rb
249
271
  - spec/spec_helper.rb
250
272
  has_rdoc: