gummi 0.2.2 → 0.2.3

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.
@@ -6,12 +6,14 @@ module Gummi
6
6
  include Gummi::DbLayer::Document::Search::Searching
7
7
 
8
8
  attribute :query_string, Gummi::DbLayer::Fields::SanitizedString
9
- attribute :query_filters, Array[Hash], default: []
10
- attribute :facets, Hash, default: {}
9
+ attribute :query_filters, Array[Hash], default: []
10
+ attribute :facets, Hash, default: {}
11
+ attribute :sort, Hash, default: {}
11
12
 
12
13
  def to_client_args
13
14
  args = super
14
15
  args[:body] = { query: filtered, facets: facets }
16
+ args[:body].merge!(sort: sort) if sort.present?
15
17
  args
16
18
  end
17
19
 
@@ -18,9 +18,10 @@ module Gummi
18
18
 
19
19
  def to_client_args
20
20
  args = {
21
- index: index,
22
- from: from,
23
- size: size,
21
+ index: index,
22
+ from: from,
23
+ size: size,
24
+ lenient: true,
24
25
  }
25
26
  args[:type] = type if type
26
27
  args.merge options
@@ -0,0 +1,15 @@
1
+ def self.favored_by(user_id, lot_ids = nil, search_options = {})
2
+ seek = Seek.new search_options, valid_sort_bys: %w{ catalogue_number }, max_per_page: 50, default_sort_by: :catalogue_number, default_sort_direction: :asc
3
+ favor_query = { filtered: { query: { match_all: {} }, filter: { term: { user_id: user_id.to_i } } } }
4
+ favor_filter = { has_child: { type: DB::Favoring.document_type, query: favor_query } }
5
+ if lot_ids
6
+ lot_ids = lot_ids.presence || [-1]
7
+ lot_query = { ids: { values: lot_ids } }
8
+ query = { filtered: { query: lot_query, filter: favor_filter }}
9
+ body = { query: query }
10
+ else
11
+ body = { query: favor_filter }
12
+ end
13
+ body.merge! sort: { seek.sort_by => seek.sort_direction }
14
+ raw_search seek.to_hash.merge options: { body: body }
15
+ end
data/lib/gummi/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Gummi
2
- VERSION = '0.2.2'
2
+ VERSION = '0.2.3'
3
3
  end
@@ -57,7 +57,7 @@ describe Gummi::DbLayer::Document do
57
57
 
58
58
  context 'attributes' do
59
59
 
60
- context 'date times' do
60
+ context 'date times', elastic: true do
61
61
  it 'coerces from elastics strings to real Time' do
62
62
  time = Time.now
63
63
  person = DB::Person.new(born_at: time)
@@ -96,7 +96,7 @@ describe Gummi::DbLayer::Document do
96
96
  end
97
97
  end
98
98
 
99
- context 'getting from elastic' do
99
+ context 'getting from elastic', elastic: true do
100
100
  let(:person) { DB::Person.create(name: 'Buzz Lightyear') }
101
101
 
102
102
  it 'returns an instance of the document_class' do
@@ -105,7 +105,7 @@ describe Gummi::DbLayer::Document do
105
105
  end
106
106
  end
107
107
 
108
- context 'child documents' do
108
+ context 'child documents', elastic: true do
109
109
  let(:person) { DB::Person.create name: 'Superman' }
110
110
  let(:rating) { DB::Rating.create person_id: person.id, stars: 5 }
111
111
 
@@ -16,7 +16,7 @@ describe Gummi::RepositoryLayer::Repository do
16
16
  end
17
17
  end
18
18
 
19
- describe '.get' do
19
+ describe '.get', elastic: true do
20
20
  context 'existing record' do
21
21
  let (:db_person) { DB::Person.create name: 'Buzz Lightyear' }
22
22
 
@@ -34,14 +34,20 @@ describe Gummi::RepositoryLayer::Repository do
34
34
  end
35
35
  end
36
36
 
37
- describe '.search' do
37
+ describe '.search', elastic: true do
38
+ let(:buzz) { DB::Person.create name: 'Buzz Lightyear' }
39
+ let(:woody) { DB::Person.create name: 'Woody' }
38
40
 
39
41
  before do
40
- DB::Person.create name: 'Buzz Lightyear'
41
- DB::Person.create name: 'Woody'
42
+ buzz && woody
42
43
  Gummi::DbLayer::DefaultIndex.refresh
43
44
  end
44
45
 
46
+ it 'sorts correctly' do
47
+ People.search(sort: { name: :asc }).records.map(&:name).should == [buzz.name, woody.name]
48
+ People.search(sort: { name: :desc }).records.map(&:name).should == [woody.name, buzz.name]
49
+ end
50
+
45
51
  it 'finds the correct documents' do
46
52
  result = People.search do |search|
47
53
  search.query_string = 'Woody'
data/spec/spec_helper.rb CHANGED
@@ -33,14 +33,25 @@ require 'db/person'
33
33
  require 'db/rating'
34
34
  require 'db/ship'
35
35
 
36
+ def setup_elastic
37
+ Gummi::DbLayer::DefaultIndex.setup
38
+ DB::Person.sync_mapping!
39
+ DB::Rating.sync_mapping!
40
+ DB::Ship.sync_mapping!
41
+ end
42
+
36
43
  RSpec.configure do |config|
37
44
  config.before(:suite) do
38
- Gummi::DbLayer::DefaultIndex.setup
39
- DB::Person.sync_mapping!
40
- DB::Rating.sync_mapping!
41
- DB::Ship.sync_mapping!
45
+ setup_elastic
46
+ end
47
+
48
+ config.before(:each, elastic: true) do
49
+ setup_elastic
42
50
  end
43
51
 
52
+ config.after(:each, elastic: true) do
53
+ Gummi::DbLayer::DefaultIndex.teardown
54
+ end
44
55
  config.after(:suite) do
45
56
  Gummi::DbLayer::DefaultIndex.teardown
46
57
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gummi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -214,6 +214,7 @@ files:
214
214
  - lib/gummi/db_layer/document/search/raw.rb
215
215
  - lib/gummi/db_layer/document/search/result.rb
216
216
  - lib/gummi/db_layer/document/search/searching.rb
217
+ - lib/gummi/db_layer/favorstuff.rb
217
218
  - lib/gummi/db_layer/fields/boolean.rb
218
219
  - lib/gummi/db_layer/fields/integer.rb
219
220
  - lib/gummi/db_layer/fields/keyword.rb