elasticsearch-persistence 5.0.2 → 6.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +5 -5
  2. data/.rspec +2 -0
  3. data/Gemfile +9 -0
  4. data/README.md +206 -338
  5. data/Rakefile +15 -12
  6. data/elasticsearch-persistence.gemspec +6 -7
  7. data/examples/notes/application.rb +3 -4
  8. data/lib/elasticsearch/persistence.rb +2 -110
  9. data/lib/elasticsearch/persistence/repository.rb +212 -53
  10. data/lib/elasticsearch/persistence/repository/dsl.rb +94 -0
  11. data/lib/elasticsearch/persistence/repository/find.rb +27 -10
  12. data/lib/elasticsearch/persistence/repository/response/results.rb +21 -8
  13. data/lib/elasticsearch/persistence/repository/search.rb +30 -18
  14. data/lib/elasticsearch/persistence/repository/serialize.rb +65 -7
  15. data/lib/elasticsearch/persistence/repository/store.rb +38 -44
  16. data/lib/elasticsearch/persistence/version.rb +1 -1
  17. data/spec/repository/find_spec.rb +179 -0
  18. data/spec/repository/response/results_spec.rb +128 -0
  19. data/spec/repository/search_spec.rb +181 -0
  20. data/spec/repository/serialize_spec.rb +53 -0
  21. data/spec/repository/store_spec.rb +327 -0
  22. data/spec/repository_spec.rb +723 -0
  23. data/spec/spec_helper.rb +32 -0
  24. metadata +26 -104
  25. data/examples/music/album.rb +0 -54
  26. data/examples/music/artist.rb +0 -70
  27. data/examples/music/artists/_form.html.erb +0 -8
  28. data/examples/music/artists/artists_controller.rb +0 -67
  29. data/examples/music/artists/artists_controller_test.rb +0 -53
  30. data/examples/music/artists/index.html.erb +0 -60
  31. data/examples/music/artists/show.html.erb +0 -54
  32. data/examples/music/assets/application.css +0 -257
  33. data/examples/music/assets/autocomplete.css +0 -48
  34. data/examples/music/assets/blank_artist.png +0 -0
  35. data/examples/music/assets/blank_cover.png +0 -0
  36. data/examples/music/assets/form.css +0 -113
  37. data/examples/music/index_manager.rb +0 -73
  38. data/examples/music/search/index.html.erb +0 -95
  39. data/examples/music/search/search_controller.rb +0 -41
  40. data/examples/music/search/search_controller_test.rb +0 -12
  41. data/examples/music/search/search_helper.rb +0 -15
  42. data/examples/music/suggester.rb +0 -69
  43. data/examples/music/template.rb +0 -430
  44. data/examples/music/vendor/assets/jquery-ui-1.10.4.custom.min.css +0 -7
  45. data/examples/music/vendor/assets/jquery-ui-1.10.4.custom.min.js +0 -6
  46. data/examples/music/vendor/assets/stylesheets/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  47. data/lib/elasticsearch/persistence/client.rb +0 -51
  48. data/lib/elasticsearch/persistence/model.rb +0 -135
  49. data/lib/elasticsearch/persistence/model/base.rb +0 -87
  50. data/lib/elasticsearch/persistence/model/errors.rb +0 -8
  51. data/lib/elasticsearch/persistence/model/find.rb +0 -180
  52. data/lib/elasticsearch/persistence/model/rails.rb +0 -47
  53. data/lib/elasticsearch/persistence/model/store.rb +0 -254
  54. data/lib/elasticsearch/persistence/model/utils.rb +0 -0
  55. data/lib/elasticsearch/persistence/repository/class.rb +0 -71
  56. data/lib/elasticsearch/persistence/repository/naming.rb +0 -115
  57. data/lib/rails/generators/elasticsearch/model/model_generator.rb +0 -21
  58. data/lib/rails/generators/elasticsearch/model/templates/model.rb.tt +0 -9
  59. data/lib/rails/generators/elasticsearch_generator.rb +0 -2
  60. data/test/integration/model/model_basic_test.rb +0 -233
  61. data/test/integration/repository/custom_class_test.rb +0 -85
  62. data/test/integration/repository/customized_class_test.rb +0 -82
  63. data/test/integration/repository/default_class_test.rb +0 -116
  64. data/test/integration/repository/virtus_model_test.rb +0 -118
  65. data/test/test_helper.rb +0 -55
  66. data/test/unit/model_base_test.rb +0 -72
  67. data/test/unit/model_find_test.rb +0 -153
  68. data/test/unit/model_gateway_test.rb +0 -101
  69. data/test/unit/model_rails_test.rb +0 -112
  70. data/test/unit/model_store_test.rb +0 -576
  71. data/test/unit/persistence_test.rb +0 -32
  72. data/test/unit/repository_class_test.rb +0 -51
  73. data/test/unit/repository_client_test.rb +0 -32
  74. data/test/unit/repository_find_test.rb +0 -388
  75. data/test/unit/repository_indexing_test.rb +0 -37
  76. data/test/unit/repository_module_test.rb +0 -146
  77. data/test/unit/repository_naming_test.rb +0 -146
  78. data/test/unit/repository_response_results_test.rb +0 -98
  79. data/test/unit/repository_search_test.rb +0 -117
  80. data/test/unit/repository_serialize_test.rb +0 -57
  81. data/test/unit/repository_store_test.rb +0 -303
@@ -0,0 +1,32 @@
1
+ require 'pry-nav'
2
+ require 'elasticsearch/persistence'
3
+
4
+ unless defined?(ELASTICSEARCH_URL)
5
+ ELASTICSEARCH_URL = ENV['ELASTICSEARCH_URL'] || "localhost:#{(ENV['TEST_CLUSTER_PORT'] || 9200)}"
6
+ end
7
+
8
+ RSpec.configure do |config|
9
+ config.formatter = 'documentation'
10
+ config.color = true
11
+
12
+ config.after(:suite) do
13
+ DEFAULT_CLIENT.indices.delete(index: '_all')
14
+ end
15
+ end
16
+
17
+ # The default client to be used by the repositories.
18
+ #
19
+ # @since 6.0.0
20
+ DEFAULT_CLIENT = Elasticsearch::Client.new(host: ELASTICSEARCH_URL,
21
+ tracer: (ENV['QUIET'] ? nil : ::Logger.new(STDERR)))
22
+
23
+ class MyTestRepository
24
+ include Elasticsearch::Persistence::Repository
25
+ include Elasticsearch::Persistence::Repository::DSL
26
+ client DEFAULT_CLIENT
27
+ end
28
+
29
+ # The default repository to be used by tests.
30
+ #
31
+ # @since 6.0.0
32
+ DEFAULT_REPOSITORY = MyTestRepository.new(index_name: 'my_test_repository', document_type: 'test')
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: 5.0.2
4
+ version: 6.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Karel Minarik
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-04 00:00:00.000000000 Z
11
+ date: 2020-08-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: elasticsearch
@@ -16,26 +16,26 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '5'
19
+ version: '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: '5'
26
+ version: '6'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: elasticsearch-model
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '5'
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
40
  version: '5'
41
41
  - !ruby/object:Gem::Dependency
@@ -81,33 +81,19 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: virtus
84
+ name: bundler
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
- type: :runtime
90
+ type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: bundler
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: '1.5'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: '1.5'
111
97
  - !ruby/object:Gem::Dependency
112
98
  name: rake
113
99
  requirement: !ruby/object:Gem::Requirement
@@ -314,34 +300,13 @@ extra_rdoc_files:
314
300
  - LICENSE.txt
315
301
  files:
316
302
  - ".gitignore"
303
+ - ".rspec"
317
304
  - CHANGELOG.md
318
305
  - Gemfile
319
306
  - LICENSE.txt
320
307
  - README.md
321
308
  - Rakefile
322
309
  - elasticsearch-persistence.gemspec
323
- - examples/music/album.rb
324
- - examples/music/artist.rb
325
- - examples/music/artists/_form.html.erb
326
- - examples/music/artists/artists_controller.rb
327
- - examples/music/artists/artists_controller_test.rb
328
- - examples/music/artists/index.html.erb
329
- - examples/music/artists/show.html.erb
330
- - examples/music/assets/application.css
331
- - examples/music/assets/autocomplete.css
332
- - examples/music/assets/blank_artist.png
333
- - examples/music/assets/blank_cover.png
334
- - examples/music/assets/form.css
335
- - examples/music/index_manager.rb
336
- - examples/music/search/index.html.erb
337
- - examples/music/search/search_controller.rb
338
- - examples/music/search/search_controller_test.rb
339
- - examples/music/search/search_helper.rb
340
- - examples/music/suggester.rb
341
- - examples/music/template.rb
342
- - examples/music/vendor/assets/jquery-ui-1.10.4.custom.min.css
343
- - examples/music/vendor/assets/jquery-ui-1.10.4.custom.min.js
344
- - examples/music/vendor/assets/stylesheets/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
345
310
  - examples/notes/.gitignore
346
311
  - examples/notes/Gemfile
347
312
  - examples/notes/README.markdown
@@ -349,48 +314,21 @@ files:
349
314
  - examples/notes/config.ru
350
315
  - examples/notes/test.rb
351
316
  - lib/elasticsearch/persistence.rb
352
- - lib/elasticsearch/persistence/client.rb
353
- - lib/elasticsearch/persistence/model.rb
354
- - lib/elasticsearch/persistence/model/base.rb
355
- - lib/elasticsearch/persistence/model/errors.rb
356
- - lib/elasticsearch/persistence/model/find.rb
357
- - lib/elasticsearch/persistence/model/rails.rb
358
- - lib/elasticsearch/persistence/model/store.rb
359
- - lib/elasticsearch/persistence/model/utils.rb
360
317
  - lib/elasticsearch/persistence/repository.rb
361
- - lib/elasticsearch/persistence/repository/class.rb
318
+ - lib/elasticsearch/persistence/repository/dsl.rb
362
319
  - lib/elasticsearch/persistence/repository/find.rb
363
- - lib/elasticsearch/persistence/repository/naming.rb
364
320
  - lib/elasticsearch/persistence/repository/response/results.rb
365
321
  - lib/elasticsearch/persistence/repository/search.rb
366
322
  - lib/elasticsearch/persistence/repository/serialize.rb
367
323
  - lib/elasticsearch/persistence/repository/store.rb
368
324
  - lib/elasticsearch/persistence/version.rb
369
- - lib/rails/generators/elasticsearch/model/model_generator.rb
370
- - lib/rails/generators/elasticsearch/model/templates/model.rb.tt
371
- - lib/rails/generators/elasticsearch_generator.rb
372
- - test/integration/model/model_basic_test.rb
373
- - test/integration/repository/custom_class_test.rb
374
- - test/integration/repository/customized_class_test.rb
375
- - test/integration/repository/default_class_test.rb
376
- - test/integration/repository/virtus_model_test.rb
377
- - test/test_helper.rb
378
- - test/unit/model_base_test.rb
379
- - test/unit/model_find_test.rb
380
- - test/unit/model_gateway_test.rb
381
- - test/unit/model_rails_test.rb
382
- - test/unit/model_store_test.rb
383
- - test/unit/persistence_test.rb
384
- - test/unit/repository_class_test.rb
385
- - test/unit/repository_client_test.rb
386
- - test/unit/repository_find_test.rb
387
- - test/unit/repository_indexing_test.rb
388
- - test/unit/repository_module_test.rb
389
- - test/unit/repository_naming_test.rb
390
- - test/unit/repository_response_results_test.rb
391
- - test/unit/repository_search_test.rb
392
- - test/unit/repository_serialize_test.rb
393
- - test/unit/repository_store_test.rb
325
+ - spec/repository/find_spec.rb
326
+ - spec/repository/response/results_spec.rb
327
+ - spec/repository/search_spec.rb
328
+ - spec/repository/serialize_spec.rb
329
+ - spec/repository/store_spec.rb
330
+ - spec/repository_spec.rb
331
+ - spec/spec_helper.rb
394
332
  homepage: https://github.com/elasticsearch/elasticsearch-rails/
395
333
  licenses:
396
334
  - Apache 2
@@ -404,38 +342,22 @@ required_ruby_version: !ruby/object:Gem::Requirement
404
342
  requirements:
405
343
  - - ">="
406
344
  - !ruby/object:Gem::Version
407
- version: 1.9.3
345
+ version: '2.2'
408
346
  required_rubygems_version: !ruby/object:Gem::Requirement
409
347
  requirements:
410
348
  - - ">="
411
349
  - !ruby/object:Gem::Version
412
350
  version: '0'
413
351
  requirements: []
414
- rubyforge_project:
415
- rubygems_version: 2.5.2
352
+ rubygems_version: 3.1.2
416
353
  signing_key:
417
354
  specification_version: 4
418
355
  summary: Persistence layer for Ruby models and Elasticsearch.
419
356
  test_files:
420
- - test/integration/model/model_basic_test.rb
421
- - test/integration/repository/custom_class_test.rb
422
- - test/integration/repository/customized_class_test.rb
423
- - test/integration/repository/default_class_test.rb
424
- - test/integration/repository/virtus_model_test.rb
425
- - test/test_helper.rb
426
- - test/unit/model_base_test.rb
427
- - test/unit/model_find_test.rb
428
- - test/unit/model_gateway_test.rb
429
- - test/unit/model_rails_test.rb
430
- - test/unit/model_store_test.rb
431
- - test/unit/persistence_test.rb
432
- - test/unit/repository_class_test.rb
433
- - test/unit/repository_client_test.rb
434
- - test/unit/repository_find_test.rb
435
- - test/unit/repository_indexing_test.rb
436
- - test/unit/repository_module_test.rb
437
- - test/unit/repository_naming_test.rb
438
- - test/unit/repository_response_results_test.rb
439
- - test/unit/repository_search_test.rb
440
- - test/unit/repository_serialize_test.rb
441
- - test/unit/repository_store_test.rb
357
+ - spec/repository/find_spec.rb
358
+ - spec/repository/response/results_spec.rb
359
+ - spec/repository/search_spec.rb
360
+ - spec/repository/serialize_spec.rb
361
+ - spec/repository/store_spec.rb
362
+ - spec/repository_spec.rb
363
+ - spec/spec_helper.rb
@@ -1,54 +0,0 @@
1
- class Meta
2
- include Virtus.model
3
-
4
- attribute :rating
5
- attribute :have
6
- attribute :want
7
- attribute :formats
8
- end
9
-
10
- class Album
11
- include Elasticsearch::Persistence::Model
12
-
13
- index_name [Rails.application.engine_name, Rails.env].join('-')
14
-
15
-
16
- mapping _parent: { type: 'artist' } do
17
- end
18
-
19
- attribute :artist
20
- attribute :artist_id, String, mapping: { index: 'not_analyzed' }
21
- attribute :label, Hash, mapping: { type: 'object' }
22
-
23
- attribute :title
24
- attribute :released, Date
25
- attribute :notes
26
- attribute :uri
27
-
28
- attribute :tracklist, Array, mapping: { type: 'object' }
29
-
30
- attribute :styles
31
- attribute :meta, Meta, mapping: { type: 'object' }
32
-
33
- attribute :suggest, Hashie::Mash, mapping: {
34
- type: 'object',
35
- properties: {
36
- title: {
37
- type: 'object',
38
- properties: {
39
- input: { type: 'completion' },
40
- output: { type: 'keyword', index: false },
41
- payload: { type: 'object', enabled: false }
42
- }
43
- },
44
- track: {
45
- type: 'object',
46
- properties: {
47
- input: { type: 'completion' },
48
- output: { type: 'keyword', index: false },
49
- payload: { type: 'object', enabled: false }
50
- }
51
- }
52
- }
53
- }
54
- end
@@ -1,70 +0,0 @@
1
- class Artist
2
- include Elasticsearch::Persistence::Model
3
-
4
- index_name [Rails.application.engine_name, Rails.env].join('-')
5
-
6
- analyzed_and_raw = { fields: {
7
- name: { type: 'text', analyzer: 'snowball' },
8
- raw: { type: 'keyword' }
9
- } }
10
-
11
- attribute :name, String, mapping: analyzed_and_raw
12
-
13
- attribute :profile
14
- attribute :date, Date
15
-
16
- attribute :members, String, default: [], mapping: analyzed_and_raw
17
- attribute :members_combined, String, default: [], mapping: { analyzer: 'snowball' }
18
-
19
- attribute :urls, String, default: []
20
- attribute :album_count, Integer, default: 0
21
-
22
- attribute :suggest, Hashie::Mash, mapping: {
23
- type: 'object',
24
- properties: {
25
- name: {
26
- type: 'object',
27
- properties: {
28
- input: { type: 'completion' },
29
- output: { type: 'keyword', index: false },
30
- payload: { type: 'object', enabled: false }
31
- }
32
- },
33
- member: {
34
- type: 'object',
35
- properties: {
36
- input: { type: 'completion' },
37
- output: { type: 'keyword', index: false },
38
- payload: { type: 'object', enabled: false }
39
- }
40
- }
41
- }
42
- }
43
-
44
- validates :name, presence: true
45
-
46
- def albums
47
- Album.search(
48
- { query: {
49
- has_parent: {
50
- type: 'artist',
51
- query: {
52
- bool: {
53
- filter: {
54
- ids: { values: [ self.id ] }
55
- }
56
- }
57
- }
58
- }
59
- },
60
- sort: 'released',
61
- size: 100
62
- },
63
- { type: 'album' }
64
- )
65
- end
66
-
67
- def to_param
68
- [id, name.parameterize].join('-')
69
- end
70
- end
@@ -1,8 +0,0 @@
1
- <%= simple_form_for @artist do |f| %>
2
- <%= f.input :name %>
3
- <%= f.input :profile, as: :text %>
4
- <%= f.input :date, as: :date %>
5
- <%= f.input :members, hint: 'Separate names by comma', input_html: { value: f.object.members.join(', ') } %>
6
-
7
- <%= f.button :submit %>
8
- <% end %>
@@ -1,67 +0,0 @@
1
- class ArtistsController < ApplicationController
2
- before_action :set_artist, only: [:show, :edit, :update, :destroy]
3
-
4
- rescue_from Elasticsearch::Persistence::Repository::DocumentNotFound do
5
- render file: "public/404.html", status: 404, layout: false
6
- end
7
-
8
- def index
9
- @artists = Artist.all sort: 'name.raw', _source: ['name', 'album_count']
10
- end
11
-
12
- def show
13
- @albums = @artist.albums
14
- end
15
-
16
- def new
17
- @artist = Artist.new
18
- end
19
-
20
- def edit
21
- end
22
-
23
- def create
24
- @artist = Artist.new(artist_params)
25
-
26
- respond_to do |format|
27
- if @artist.save refresh: true
28
- format.html { redirect_to @artist, notice: 'Artist was successfully created.' }
29
- format.json { render :show, status: :created, location: @artist }
30
- else
31
- format.html { render :new }
32
- format.json { render json: @artist.errors, status: :unprocessable_entity }
33
- end
34
- end
35
- end
36
-
37
- def update
38
- respond_to do |format|
39
- if @artist.update(artist_params, refresh: true)
40
- format.html { redirect_to @artist, notice: 'Artist was successfully updated.' }
41
- format.json { render :show, status: :ok, location: @artist }
42
- else
43
- format.html { render :edit }
44
- format.json { render json: @artist.errors, status: :unprocessable_entity }
45
- end
46
- end
47
- end
48
-
49
- def destroy
50
- @artist.destroy refresh: true
51
- respond_to do |format|
52
- format.html { redirect_to artists_url, notice: 'Artist was successfully destroyed.' }
53
- format.json { head :no_content }
54
- end
55
- end
56
-
57
- private
58
- def set_artist
59
- @artist = Artist.find(params[:id].split('-').first)
60
- end
61
-
62
- def artist_params
63
- a = params.require(:artist)
64
- a[:members] = a[:members].split(/,\s?/) unless a[:members].is_a?(Array) || a[:members].blank?
65
- return a
66
- end
67
- end