elasticsearch-persistence 6.0.0.pre → 6.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +48 -24
- data/examples/notes/application.rb +3 -4
- data/lib/elasticsearch/persistence/repository/response/results.rb +9 -8
- data/lib/elasticsearch/persistence/repository/search.rb +18 -17
- data/lib/elasticsearch/persistence/version.rb +1 -1
- data/spec/repository/response/results_spec.rb +23 -0
- metadata +4 -26
- data/examples/music/album.rb +0 -54
- data/examples/music/artist.rb +0 -70
- data/examples/music/artists/_form.html.erb +0 -8
- data/examples/music/artists/artists_controller.rb +0 -67
- data/examples/music/artists/artists_controller_test.rb +0 -53
- data/examples/music/artists/index.html.erb +0 -60
- data/examples/music/artists/show.html.erb +0 -54
- data/examples/music/assets/application.css +0 -257
- data/examples/music/assets/autocomplete.css +0 -48
- data/examples/music/assets/blank_artist.png +0 -0
- data/examples/music/assets/blank_cover.png +0 -0
- data/examples/music/assets/form.css +0 -113
- data/examples/music/index_manager.rb +0 -73
- data/examples/music/search/index.html.erb +0 -95
- data/examples/music/search/search_controller.rb +0 -41
- data/examples/music/search/search_controller_test.rb +0 -12
- data/examples/music/search/search_helper.rb +0 -15
- data/examples/music/suggester.rb +0 -69
- data/examples/music/template.rb +0 -430
- data/examples/music/vendor/assets/jquery-ui-1.10.4.custom.min.css +0 -7
- data/examples/music/vendor/assets/jquery-ui-1.10.4.custom.min.js +0 -6
- data/examples/music/vendor/assets/stylesheets/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 31bf48d65a26143768e093d3ef1a26f0d95adb5f4f009448b1b48cde4f1b643a
|
4
|
+
data.tar.gz: bf4f4581573e35a873cb8d1f2db6ec86ddf39420010fcaab6e00fced48f91376
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4e353c41e60cfa475821d87107aaceffaf399f0da68a28d8ecc529b5aadf3257bdc0df61f07a22055645ad143279cc1d30e895b505837bf540813e089622a95a
|
7
|
+
data.tar.gz: ec8f36fb64a038a5d0ec91bb51404b0c15d1d2b731175eba456098030c841c7e4d269c0e9f14c425b79a52b6531af1402c968a556560b29a8608df27c36b14a3
|
data/README.md
CHANGED
@@ -42,7 +42,7 @@ The library provides the Repository pattern for adding persistence to your Ruby
|
|
42
42
|
|
43
43
|
The `Elasticsearch::Persistence::Repository` module provides an implementation of the
|
44
44
|
[repository pattern](http://martinfowler.com/eaaCatalog/repository.html) and allows
|
45
|
-
to save, delete, find and search objects stored in Elasticsearch, as well as configure
|
45
|
+
you to save, delete, find and search objects stored in Elasticsearch, as well as configure
|
46
46
|
mappings and settings for the index. It's an unobtrusive and decoupled way of adding
|
47
47
|
persistence to your Ruby objects.
|
48
48
|
|
@@ -76,7 +76,7 @@ We can save a `Note` instance into the repository...
|
|
76
76
|
note = Note.new id: 1, text: 'Test'
|
77
77
|
|
78
78
|
repository.save(note)
|
79
|
-
# PUT http://localhost:9200/repository/
|
79
|
+
# PUT http://localhost:9200/repository/_doc/1 [status:201, request:0.210s, query:n/a]
|
80
80
|
# > {"id":1,"text":"Test"}
|
81
81
|
# < {"_index":"repository","_type":"note","_id":"1","_version":1,"created":true}
|
82
82
|
```
|
@@ -85,7 +85,7 @@ repository.save(note)
|
|
85
85
|
|
86
86
|
```ruby
|
87
87
|
n = repository.find(1)
|
88
|
-
# GET http://localhost:9200/repository/
|
88
|
+
# GET http://localhost:9200/repository/_doc/1 [status:200, request:0.003s, query:n/a]
|
89
89
|
# < {"_index":"repository","_type":"note","_id":"1","_version":2,"found":true, "_source" : {"id":1,"text":"Test"}}
|
90
90
|
=> <Note:0x007fcbfc0c4980 @attributes={"id"=>1, "text"=>"Test"}>
|
91
91
|
```
|
@@ -104,7 +104,7 @@ repository.search(query: { match: { text: 'test' } }).first
|
|
104
104
|
|
105
105
|
```ruby
|
106
106
|
repository.delete(note)
|
107
|
-
# DELETE http://localhost:9200/repository/
|
107
|
+
# DELETE http://localhost:9200/repository/_doc/1 [status:200, request:0.014s, query:n/a]
|
108
108
|
# < {"found":true,"_index":"repository","_type":"note","_id":"1","_version":3}
|
109
109
|
=> {"found"=>true, "_index"=>"repository", "_type"=>"note", "_id"=>"1", "_version"=>2}
|
110
110
|
```
|
@@ -145,7 +145,7 @@ class MyRepository
|
|
145
145
|
end
|
146
146
|
|
147
147
|
client = Elasticsearch::Client.new(url: ENV['ELASTICSEARCH_URL'], log: true)
|
148
|
-
repository = MyRepository.new(client: client, index_name: :my_notes, type: :
|
148
|
+
repository = MyRepository.new(client: client, index_name: :my_notes, type: :note, klass: Note)
|
149
149
|
repository.settings number_of_shards: 1 do
|
150
150
|
mapping do
|
151
151
|
indexes :text, analyzer: 'snowball'
|
@@ -168,7 +168,7 @@ Save the document with extra properties added by the `serialize` method:
|
|
168
168
|
|
169
169
|
```ruby
|
170
170
|
repository.save(note)
|
171
|
-
# PUT http://localhost:9200/my_notes/
|
171
|
+
# PUT http://localhost:9200/my_notes/note/1
|
172
172
|
# > {"id":1,"text":"Test","my_special_key":"my_special_stuff"}
|
173
173
|
{"_index"=>"my_notes", "_type"=>"my_note", "_id"=>"1", "_version"=>4, ... }
|
174
174
|
```
|
@@ -177,7 +177,7 @@ And `deserialize` it:
|
|
177
177
|
|
178
178
|
```ruby
|
179
179
|
repository.find(1)
|
180
|
-
# ***** CUSTOM DESERIALIZE LOGIC
|
180
|
+
# ***** CUSTOM DESERIALIZE LOGIC... *****
|
181
181
|
<Note:0x007f9bd782b7a0 @attributes={... "my_special_key"=>"my_special_stuff"}>
|
182
182
|
```
|
183
183
|
|
@@ -245,10 +245,10 @@ repository.create_index!(force: true)
|
|
245
245
|
note = Note.new('id' => 1, 'text' => 'Document with image', 'image' => '... BINARY DATA ...')
|
246
246
|
|
247
247
|
repository.save(note)
|
248
|
-
# PUT http://localhost:9200/notes_development/
|
248
|
+
# PUT http://localhost:9200/notes_development/_doc/1
|
249
249
|
# > {"id":1,"text":"Document with image","image":"Li4uIEJJTkFSWSBEQVRBIC4uLg==\n"}
|
250
250
|
puts repository.find(1).attributes['image']
|
251
|
-
# GET http://localhost:9200/notes_development/
|
251
|
+
# GET http://localhost:9200/notes_development/_doc/1
|
252
252
|
# < {... "_source" : { ... "image":"Li4uIEJJTkFSWSBEQVRBIC4uLg==\n"}}
|
253
253
|
# => ... BINARY DATA ...
|
254
254
|
```
|
@@ -257,9 +257,9 @@ puts repository.find(1).attributes['image']
|
|
257
257
|
|
258
258
|
Each of the following configurations can be set for a repository instance.
|
259
259
|
If you have included the `Elasticsearch::Persistence::Repository::DSL` mixin, then you can use the class-level DSL
|
260
|
-
methods to set each
|
260
|
+
methods to set each value. You can still override the configuration for any instance by passing options to the
|
261
261
|
`#initialize` method.
|
262
|
-
|
262
|
+
Even if you don't use the DSL mixin, you can set the instance configuration with options passed the `#initialize` method.
|
263
263
|
|
264
264
|
##### Client
|
265
265
|
|
@@ -269,6 +269,9 @@ The repository uses the standard Elasticsearch [client](https://github.com/elast
|
|
269
269
|
client = Elasticsearch::Client.new(url: 'http://search.server.org')
|
270
270
|
repository = NoteRepository.new(client: client)
|
271
271
|
repository.client.transport.logger = Logger.new(STDERR)
|
272
|
+
repository.client
|
273
|
+
# => Elasticsearch::Client
|
274
|
+
|
272
275
|
```
|
273
276
|
|
274
277
|
or with the DSL mixin:
|
@@ -282,6 +285,8 @@ class NoteRepository
|
|
282
285
|
end
|
283
286
|
|
284
287
|
repository = NoteRepository.new
|
288
|
+
repository.client
|
289
|
+
# => Elasticsearch::Client
|
285
290
|
|
286
291
|
```
|
287
292
|
|
@@ -292,6 +297,9 @@ is 'repository'.
|
|
292
297
|
|
293
298
|
```ruby
|
294
299
|
repository = NoteRepository.new(index_name: 'notes_development')
|
300
|
+
repository.index_name
|
301
|
+
# => 'notes_development'
|
302
|
+
|
295
303
|
```
|
296
304
|
|
297
305
|
or with the DSL mixin:
|
@@ -305,15 +313,20 @@ class NoteRepository
|
|
305
313
|
end
|
306
314
|
|
307
315
|
repository = NoteRepository.new
|
316
|
+
repository.index_name
|
317
|
+
# => 'notes_development'
|
308
318
|
|
309
319
|
```
|
310
320
|
|
311
|
-
The `
|
321
|
+
The `document_type` method specifies the Elasticsearch document type to use for storage, lookup and search. The default value is
|
312
322
|
'_doc'. Keep in mind that future versions of Elasticsearch will not allow you to set this yourself and will use the type,
|
313
323
|
'_doc'.
|
314
324
|
|
315
325
|
```ruby
|
316
326
|
repository = NoteRepository.new(document_type: 'note')
|
327
|
+
repository.document_type
|
328
|
+
# => 'note'
|
329
|
+
|
317
330
|
```
|
318
331
|
|
319
332
|
or with the DSL mixin:
|
@@ -327,6 +340,8 @@ class NoteRepository
|
|
327
340
|
end
|
328
341
|
|
329
342
|
repository = NoteRepository.new
|
343
|
+
repository.document_type
|
344
|
+
# => 'note'
|
330
345
|
|
331
346
|
```
|
332
347
|
|
@@ -336,6 +351,9 @@ returned instead.
|
|
336
351
|
|
337
352
|
```ruby
|
338
353
|
repository = NoteRepository.new(klass: Note)
|
354
|
+
repository.klass
|
355
|
+
# => Note
|
356
|
+
|
339
357
|
```
|
340
358
|
|
341
359
|
or with the DSL mixin:
|
@@ -349,6 +367,8 @@ class NoteRepository
|
|
349
367
|
end
|
350
368
|
|
351
369
|
repository = NoteRepository.new
|
370
|
+
repository.klass
|
371
|
+
# => Note
|
352
372
|
|
353
373
|
```
|
354
374
|
|
@@ -383,8 +403,10 @@ repository = NoteRepository.new
|
|
383
403
|
|
384
404
|
```
|
385
405
|
|
386
|
-
|
387
|
-
|
406
|
+
##### Create a Repository and set its configuration with a block
|
407
|
+
|
408
|
+
You can also use the `#create` method to instantiate and set the mappings and settings on an instance
|
409
|
+
with a block in one call:
|
388
410
|
|
389
411
|
```ruby
|
390
412
|
repository = NoteRepository.create(index_name: 'notes_development') do
|
@@ -399,13 +421,15 @@ repository = NoteRepository.create(index_name: 'notes_development') do
|
|
399
421
|
end
|
400
422
|
```
|
401
423
|
|
424
|
+
##### Index Management
|
425
|
+
|
402
426
|
The convenience methods `create_index!`, `delete_index!` and `refresh_index!` allow you to manage the index lifecycle.
|
403
427
|
These methods can only be called on repository instances and are not implemented at the class level.
|
404
428
|
|
405
429
|
##### Serialization
|
406
430
|
|
407
|
-
The `serialize` and `deserialize` methods allow you to customize the serialization of the document when
|
408
|
-
to
|
431
|
+
The `serialize` and `deserialize` methods allow you to customize the serialization of the document when it
|
432
|
+
is persisted to Elasticsearch, and define the initialization procedure when loading it from the storage:
|
409
433
|
|
410
434
|
```ruby
|
411
435
|
class NoteRepository
|
@@ -428,7 +452,7 @@ The `save` method allows you to store a domain object in the repository:
|
|
428
452
|
```ruby
|
429
453
|
note = Note.new id: 1, title: 'Quick Brown Fox'
|
430
454
|
repository.save(note)
|
431
|
-
# => {"_index"=>"notes_development", "_type"=>"
|
455
|
+
# => {"_index"=>"notes_development", "_type"=>"_doc", "_id"=>"1", "_version"=>1, "created"=>true}
|
432
456
|
```
|
433
457
|
|
434
458
|
The `update` method allows you to perform a partial update of a document in the repository.
|
@@ -436,18 +460,18 @@ Use either a partial document:
|
|
436
460
|
|
437
461
|
```ruby
|
438
462
|
repository.update id: 1, title: 'UPDATED', tags: []
|
439
|
-
# => {"_index"=>"notes_development", "_type"=>"
|
463
|
+
# => {"_index"=>"notes_development", "_type"=>"_doc", "_id"=>"1", "_version"=>2}
|
440
464
|
```
|
441
465
|
|
442
466
|
Or a script (optionally with parameters):
|
443
467
|
|
444
468
|
```ruby
|
445
469
|
repository.update 1, script: 'if (!ctx._source.tags.contains(t)) { ctx._source.tags += t }', params: { t: 'foo' }
|
446
|
-
# => {"_index"=>"notes_development", "_type"=>"
|
470
|
+
# => {"_index"=>"notes_development", "_type"=>"_doc", "_id"=>"1", "_version"=>3}
|
447
471
|
```
|
448
472
|
|
449
473
|
|
450
|
-
The `delete` method allows to remove objects from the repository (pass either the object itself or its ID):
|
474
|
+
The `delete` method allows you to remove objects from the repository (pass either the object itself or its ID):
|
451
475
|
|
452
476
|
```ruby
|
453
477
|
repository.delete(note)
|
@@ -456,7 +480,7 @@ repository.delete(1)
|
|
456
480
|
|
457
481
|
##### Finding
|
458
482
|
|
459
|
-
The `find` method allows to find one or many documents in the storage and returns them as deserialized Ruby objects:
|
483
|
+
The `find` method allows you to find one or many documents in the storage and returns them as deserialized Ruby objects:
|
460
484
|
|
461
485
|
```ruby
|
462
486
|
repository.save Note.new(id: 2, title: 'Fast White Dog')
|
@@ -479,15 +503,15 @@ Handle the missing objects in the application code, or call `compact` on the res
|
|
479
503
|
|
480
504
|
##### Search
|
481
505
|
|
482
|
-
The `search` method to retrieve objects from the repository by a query string or definition in the Elasticsearch DSL:
|
506
|
+
The `search` method is used to retrieve objects from the repository by a query string or definition in the Elasticsearch DSL:
|
483
507
|
|
484
508
|
```ruby
|
485
509
|
repository.search('fox or dog').to_a
|
486
|
-
# GET http://localhost:9200/notes_development/
|
510
|
+
# GET http://localhost:9200/notes_development/_doc/_search?q=fox
|
487
511
|
# => [<MyNote ... FOX ...>, <MyNote ... DOG ...>]
|
488
512
|
|
489
513
|
repository.search(query: { match: { title: 'fox dog' } }).to_a
|
490
|
-
# GET http://localhost:9200/notes_development/
|
514
|
+
# GET http://localhost:9200/notes_development/_doc/_search
|
491
515
|
# > {"query":{"match":{"title":"fox dog"}}}
|
492
516
|
# => [<MyNote ... FOX ...>, <MyNote ... DOG ...>]
|
493
517
|
```
|
@@ -54,11 +54,12 @@ end
|
|
54
54
|
|
55
55
|
class NoteRepository
|
56
56
|
include Elasticsearch::Persistence::Repository
|
57
|
+
include Elasticsearch::Persistence::Repository::DSL
|
57
58
|
|
58
59
|
client Elasticsearch::Client.new url: ENV['ELASTICSEARCH_URL'], log: true
|
59
60
|
|
60
|
-
|
61
|
-
|
61
|
+
index_name :notes
|
62
|
+
document_type :note
|
62
63
|
|
63
64
|
mapping do
|
64
65
|
indexes :text, analyzer: 'snowball'
|
@@ -66,8 +67,6 @@ class NoteRepository
|
|
66
67
|
indexes :created_at, type: 'date'
|
67
68
|
end
|
68
69
|
|
69
|
-
create_index!
|
70
|
-
|
71
70
|
def deserialize(document)
|
72
71
|
Note.new document['_source'].merge('id' => document['_id'])
|
73
72
|
end
|
@@ -11,6 +11,7 @@ module Elasticsearch
|
|
11
11
|
include Enumerable
|
12
12
|
|
13
13
|
attr_reader :repository
|
14
|
+
attr_reader :raw_response
|
14
15
|
|
15
16
|
# The key for accessing the results in an Elasticsearch query response.
|
16
17
|
#
|
@@ -30,8 +31,8 @@ module Elasticsearch
|
|
30
31
|
#
|
31
32
|
def initialize(repository, response, options={})
|
32
33
|
@repository = repository
|
33
|
-
@
|
34
|
-
@options
|
34
|
+
@raw_response = response
|
35
|
+
@options = options
|
35
36
|
end
|
36
37
|
|
37
38
|
def method_missing(method_name, *arguments, &block)
|
@@ -45,25 +46,25 @@ module Elasticsearch
|
|
45
46
|
# The number of total hits for a query
|
46
47
|
#
|
47
48
|
def total
|
48
|
-
|
49
|
+
raw_response[HITS][TOTAL]
|
49
50
|
end
|
50
51
|
|
51
52
|
# The maximum score for a query
|
52
53
|
#
|
53
54
|
def max_score
|
54
|
-
|
55
|
+
raw_response[HITS][MAX_SCORE]
|
55
56
|
end
|
56
57
|
|
57
58
|
# Yields [object, hit] pairs to the block
|
58
59
|
#
|
59
60
|
def each_with_hit(&block)
|
60
|
-
results.zip(
|
61
|
+
results.zip(raw_response[HITS][HITS]).each(&block)
|
61
62
|
end
|
62
63
|
|
63
64
|
# Yields [object, hit] pairs and returns the result
|
64
65
|
#
|
65
66
|
def map_with_hit(&block)
|
66
|
-
results.zip(
|
67
|
+
results.zip(raw_response[HITS][HITS]).map(&block)
|
67
68
|
end
|
68
69
|
|
69
70
|
# Return the collection of domain objects
|
@@ -76,7 +77,7 @@ module Elasticsearch
|
|
76
77
|
# @return [Array]
|
77
78
|
#
|
78
79
|
def results
|
79
|
-
@results ||=
|
80
|
+
@results ||= raw_response[HITS][HITS].map do |document|
|
80
81
|
repository.deserialize(document.to_hash)
|
81
82
|
end
|
82
83
|
end
|
@@ -93,7 +94,7 @@ module Elasticsearch
|
|
93
94
|
# @return [Elasticsearch::Model::HashWrapper]
|
94
95
|
#
|
95
96
|
def response
|
96
|
-
@response
|
97
|
+
@response ||= Elasticsearch::Model::HashWrapper.new(raw_response)
|
97
98
|
end
|
98
99
|
end
|
99
100
|
end
|
@@ -43,18 +43,18 @@ module Elasticsearch
|
|
43
43
|
# @return [Elasticsearch::Persistence::Repository::Response::Results]
|
44
44
|
#
|
45
45
|
def search(query_or_definition, options={})
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
response = client.search( { index: index_name, type: type, q: query_or_definition }.merge(options) )
|
46
|
+
request = { index: index_name,
|
47
|
+
type: document_type }
|
48
|
+
if query_or_definition.respond_to?(:to_hash)
|
49
|
+
request[:body] = query_or_definition.to_hash
|
50
|
+
elsif query_or_definition.is_a?(String)
|
51
|
+
request[:q] = query_or_definition
|
53
52
|
else
|
54
53
|
raise ArgumentError, "[!] Pass the search definition as a Hash-like object or pass the query as a String" +
|
55
|
-
|
54
|
+
" -- #{query_or_definition.class} given."
|
56
55
|
end
|
57
|
-
|
56
|
+
|
57
|
+
Response::Results.new(self, client.search(request.merge(options)))
|
58
58
|
end
|
59
59
|
|
60
60
|
# Return the number of domain object in the index
|
@@ -81,18 +81,19 @@ module Elasticsearch
|
|
81
81
|
#
|
82
82
|
def count(query_or_definition=nil, options={})
|
83
83
|
query_or_definition ||= { query: { match_all: {} } }
|
84
|
-
|
84
|
+
request = { index: index_name,
|
85
|
+
type: document_type }
|
85
86
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
response = client.count( { index: index_name, type: type, q: query_or_definition }.merge(options) )
|
87
|
+
if query_or_definition.respond_to?(:to_hash)
|
88
|
+
request[:body] = query_or_definition.to_hash
|
89
|
+
elsif query_or_definition.is_a?(String)
|
90
|
+
request[:q] = query_or_definition
|
91
91
|
else
|
92
|
-
raise ArgumentError, "[!] Pass the search definition as a Hash-like object or pass the query as a String
|
92
|
+
raise ArgumentError, "[!] Pass the search definition as a Hash-like object or pass the query as a String" +
|
93
|
+
" -- #{query_or_definition.class} given."
|
93
94
|
end
|
94
95
|
|
95
|
-
|
96
|
+
client.count(request.merge(options))[COUNT]
|
96
97
|
end
|
97
98
|
|
98
99
|
private
|
@@ -66,6 +66,22 @@ describe Elasticsearch::Persistence::Repository::Response::Results do
|
|
66
66
|
it 'wraps the response in a HashWrapper' do
|
67
67
|
expect(results.response._shards.total).to eq(5)
|
68
68
|
end
|
69
|
+
|
70
|
+
context 'when the response method is not called' do
|
71
|
+
|
72
|
+
it 'does not create an instance of HashWrapper' do
|
73
|
+
expect(Elasticsearch::Model::HashWrapper).not_to receive(:new)
|
74
|
+
results
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
context 'when the response method is called' do
|
79
|
+
|
80
|
+
it 'does create an instance of HashWrapper' do
|
81
|
+
expect(Elasticsearch::Model::HashWrapper).to receive(:new)
|
82
|
+
results.response
|
83
|
+
end
|
84
|
+
end
|
69
85
|
end
|
70
86
|
|
71
87
|
describe '#total' do
|
@@ -102,4 +118,11 @@ describe Elasticsearch::Persistence::Repository::Response::Results do
|
|
102
118
|
expect(results.map_with_hit { |pair| pair[0] }).to eq(['Object', 'Object'])
|
103
119
|
end
|
104
120
|
end
|
121
|
+
|
122
|
+
describe '#raw_response' do
|
123
|
+
|
124
|
+
it 'returns the raw response from Elasticsearch' do
|
125
|
+
expect(results.raw_response).to eq(response)
|
126
|
+
end
|
127
|
+
end
|
105
128
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elasticsearch-persistence
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.0.0
|
4
|
+
version: 6.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Karel Minarik
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-09-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: elasticsearch
|
@@ -307,28 +307,6 @@ files:
|
|
307
307
|
- README.md
|
308
308
|
- Rakefile
|
309
309
|
- elasticsearch-persistence.gemspec
|
310
|
-
- examples/music/album.rb
|
311
|
-
- examples/music/artist.rb
|
312
|
-
- examples/music/artists/_form.html.erb
|
313
|
-
- examples/music/artists/artists_controller.rb
|
314
|
-
- examples/music/artists/artists_controller_test.rb
|
315
|
-
- examples/music/artists/index.html.erb
|
316
|
-
- examples/music/artists/show.html.erb
|
317
|
-
- examples/music/assets/application.css
|
318
|
-
- examples/music/assets/autocomplete.css
|
319
|
-
- examples/music/assets/blank_artist.png
|
320
|
-
- examples/music/assets/blank_cover.png
|
321
|
-
- examples/music/assets/form.css
|
322
|
-
- examples/music/index_manager.rb
|
323
|
-
- examples/music/search/index.html.erb
|
324
|
-
- examples/music/search/search_controller.rb
|
325
|
-
- examples/music/search/search_controller_test.rb
|
326
|
-
- examples/music/search/search_helper.rb
|
327
|
-
- examples/music/suggester.rb
|
328
|
-
- examples/music/template.rb
|
329
|
-
- examples/music/vendor/assets/jquery-ui-1.10.4.custom.min.css
|
330
|
-
- examples/music/vendor/assets/jquery-ui-1.10.4.custom.min.js
|
331
|
-
- examples/music/vendor/assets/stylesheets/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
|
332
310
|
- examples/notes/.gitignore
|
333
311
|
- examples/notes/Gemfile
|
334
312
|
- examples/notes/README.markdown
|
@@ -367,9 +345,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
367
345
|
version: 1.9.3
|
368
346
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
369
347
|
requirements:
|
370
|
-
- - "
|
348
|
+
- - ">="
|
371
349
|
- !ruby/object:Gem::Version
|
372
|
-
version:
|
350
|
+
version: '0'
|
373
351
|
requirements: []
|
374
352
|
rubyforge_project:
|
375
353
|
rubygems_version: 2.7.7
|