elastic_record 4.1.4 → 4.1.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 421498813d046dccefd30ad42c6f838aa9f9eb68
4
- data.tar.gz: a86f63e2eac01170619fe51bf2531b856186e676
3
+ metadata.gz: a164c34c1dc47a0290401edc67c7b1e38d296cdb
4
+ data.tar.gz: 26045f57baec0c90aca634cc853794e1782b1abd
5
5
  SHA512:
6
- metadata.gz: 84eec08e7e9e8dfea71136e8865e9a487f436674f04ec6de93c652e6193c184d3b072af6334157ca3f4176ef0532126c93b19e57f1e366248bb6171536785986
7
- data.tar.gz: '05934bd3792f3b6a264aa7ec12cb93e9bcf9a50c518bc4f45780c8cb8fad46456cc45f87bfcc7d590eff9166145192e2c12a433753cf4c99b5e494ef9a2bc4b6'
6
+ metadata.gz: 6a03d0a53928c5ff59653eaa3e7cd00d414cbdb7244e533541426612b233a0fe90abe27b903f391664c1fa3763c42923245d3c2cb54f4c19d521632686d64102
7
+ data.tar.gz: 84348d5ad734efc2a9a350fc16d58d890e6d2e7765e7841c0d9d857ee99e031a8b4acd76cb9c530c2b84dc164054e5e346d61723f73e2b06553703c05d0e8f9f
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'elastic_record'
5
- s.version = '4.1.4'
5
+ s.version = '4.1.5'
6
6
  s.summary = 'An Elasticsearch querying ORM'
7
7
  s.description = 'Find your records with Elasticsearch'
8
8
 
@@ -54,7 +54,7 @@ module ElasticRecord
54
54
  def index_record(record, index_name: alias_name)
55
55
  unless disabled
56
56
  index_document(
57
- record.send(record.class.primary_key),
57
+ record.try(:id),
58
58
  record.as_search_document,
59
59
  doctype: record.doctype,
60
60
  index_name: index_name
@@ -65,7 +65,7 @@ module ElasticRecord
65
65
  def update_record(record, index_name: alias_name)
66
66
  unless disabled
67
67
  update_document(
68
- record.send(record.class.primary_key),
68
+ record.id,
69
69
  record.as_partial_update_document,
70
70
  doctype: record.doctype,
71
71
  index_name: index_name
@@ -84,11 +84,16 @@ module ElasticRecord
84
84
  path = "/#{index_name}/#{doctype.name}/#{id}"
85
85
  path << "?parent=#{parent}" if parent
86
86
 
87
- connection.json_put path, document
87
+ if id
88
+ connection.json_put path, document
89
+ else
90
+ connection.json_post path, document
91
+ end
88
92
  end
89
93
  end
90
94
 
91
95
  def update_document(id, document, doctype: model.doctype, parent: nil, index_name: alias_name)
96
+ raise "Cannot update a document with empty id" if id.blank?
92
97
  params = {doc: document, doc_as_upsert: true}
93
98
 
94
99
  if batch = current_bulk_batch
@@ -1,5 +1,19 @@
1
1
  class Warehouse
2
- include TestModel
2
+ class << self
3
+ def base_class
4
+ self
5
+ end
6
+ end
3
7
 
4
- define_attributes [:name]
8
+ include ActiveModel::Model
9
+ include ElasticRecord::Model
10
+
11
+ attr_accessor :id, :name
12
+ alias_method :as_json, :as_search_document
13
+
14
+ elastic_index.load_from_source = true
15
+
16
+ def as_search_document
17
+ { name: name }
18
+ end
5
19
  end
@@ -16,6 +16,17 @@ class ElasticRecord::Index::DocumentsTest < MiniTest::Test
16
16
  refute index.record_exists?('7')
17
17
  end
18
18
 
19
+ def test_index_record_without_id
20
+ index = Warehouse.elastic_index
21
+ without_deferring(index) do
22
+ warehouse = Warehouse.new(name: 'Amazon')
23
+ result = index.index_record(warehouse)
24
+
25
+ assert index.record_exists?(result['_id'])
26
+ refute index.record_exists?('xyz')
27
+ end
28
+ end
29
+
19
30
  def test_index_document
20
31
  index.index_document('abc', color: 'red')
21
32
 
@@ -23,12 +34,26 @@ class ElasticRecord::Index::DocumentsTest < MiniTest::Test
23
34
  refute index.record_exists?('xyz')
24
35
  end
25
36
 
37
+ def test_index_document_without_id
38
+ index = Warehouse.elastic_index
39
+ without_deferring(index) do
40
+ result = index.index_document(nil, name: 'red')
41
+
42
+ assert index.record_exists?(result['_id'])
43
+ refute index.record_exists?('xyz')
44
+ end
45
+ end
46
+
26
47
  def test_update_document
27
48
  index.index_document('abc', warehouse_id: '5', color: 'red')
28
49
  index.update_document('abc', color: 'blue')
29
50
 
30
51
  expected = {'warehouse_id' => '5', 'color' => 'blue'}
31
52
  assert_equal expected, index.get('abc', Widget.doctype)['_source']
53
+
54
+ assert_raises RuntimeError do
55
+ index.update_document(nil, color: 'blue')
56
+ end
32
57
  end
33
58
 
34
59
  def test_delete_document
@@ -94,7 +119,7 @@ class ElasticRecord::Index::DocumentsTest < MiniTest::Test
94
119
  end
95
120
 
96
121
  def test_bulk_error
97
- without_deferring do
122
+ without_deferring(index) do
98
123
  begin
99
124
  index.bulk do
100
125
  index.index_document '5', color: 'green'
@@ -109,7 +134,7 @@ class ElasticRecord::Index::DocumentsTest < MiniTest::Test
109
134
  end
110
135
 
111
136
  def test_bulk_inheritence
112
- without_deferring do
137
+ without_deferring(index) do
113
138
  index.bulk do
114
139
  InheritedWidget.elastic_index.index_document '5', color: 'green'
115
140
 
@@ -124,7 +149,7 @@ class ElasticRecord::Index::DocumentsTest < MiniTest::Test
124
149
 
125
150
  private
126
151
 
127
- def without_deferring
152
+ def without_deferring(index)
128
153
  index.disable_deferring!
129
154
  yield
130
155
  index.reset
@@ -43,16 +43,16 @@ class ElasticRecord::RelationTest < MiniTest::Test
43
43
  end
44
44
 
45
45
  def test_to_a_from_source
46
- Widget.elastic_index.loading_from_source do
47
- create_widgets [Widget.new(id: 5, color: 'red'), Widget.new(id: 10, color: 'blue')]
46
+ warehouses = [Warehouse.new(name: 'Amazon'), Warehouse.new(name: 'Walmart')]
47
+ result = Warehouse.elastic_index.bulk_add(warehouses)
48
48
 
49
- array = Widget.elastic_relation.to_a
49
+ array = Warehouse.elastic_relation.to_a
50
50
 
51
- assert_equal 2, array.size
52
- assert array.first.is_a?(Widget)
53
- assert_equal 'red', array.first.color
54
- assert_equal 'blue', array.last.color
55
- end
51
+ assert_equal 2, array.size
52
+ assert array.first.is_a?(Warehouse)
53
+ names = array.map(&:name)
54
+ assert_includes names, 'Amazon'
55
+ assert_includes names, 'Walmart'
56
56
  end
57
57
 
58
58
  def test_delete_all
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elastic_record
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.4
4
+ version: 4.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Infogroup
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-09-08 00:00:00.000000000 Z
12
+ date: 2017-09-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: arelastic