es-elasticity 0.2.4 → 0.2.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: 858cb2be175394c54d6764ee32e64e467c82ae42
4
- data.tar.gz: a78140e39c9a3eba158aa9c8196622de078206e5
3
+ metadata.gz: 930171d9343f5f51201e859afbc8f227e108a855
4
+ data.tar.gz: 7a949337b0c6265451e00bf5bc8ac9eef3170321
5
5
  SHA512:
6
- metadata.gz: 3b76a96bc437e1a3015c3e2cde9ce3eb41777163cd572ae23fac8a344234e0d6d4f7e4d545b44e177d5ac8a11a15e90236f6fe8d87f3ebdc37a5484b31c7a07b
7
- data.tar.gz: d4fc42b3ca6f553ceeb4a761cb7a89146a008bafbadfcbb9076c6622ff59d39f8a135e751c93e8509628f8dd3bd4c1411208a029a7b546b1c0f0c7406ff095ac
6
+ metadata.gz: 4f9cc21bea9324244cc52ffee24d4f4b6feddfaf59cc01962ce13162f99ff1af50a740a85408426328c98dd2566caab4524d7525a585d9efe04f2e82ce9abd1d
7
+ data.tar.gz: 16752b85bdcd775b75b59e0e9b11a2a1b53bbaad7e44e40485e700888214df93d9978e1a0330055ebf7dc86ce6783010aef7905a9686e155529039b49017afb1
data/README.md CHANGED
@@ -105,12 +105,16 @@ adults.active_recors(Database::User) # => Array of Database::User instances
105
105
 
106
106
  ## Roadmap
107
107
 
108
+ - [ ] Use mapping instead of mappings, we wanna be consistent to ES not to elasticsearch-ruby
109
+ - [ ] Better automatic index name and document type
110
+ - [ ] Support for multiple document types
108
111
  - [ ] Write more detailed documentation section for:
109
112
  - [ ] Model definition
110
113
  - [ ] Indexing, Bulk Indexing and Delete By Query
111
114
  - [ ] Search and Multi Search
112
115
  - [ ] ActiveRecord integration
113
116
  - [ ] Get rid of to_document, generate automatically based on attributes
117
+ - [ ] Add some delegations on Document to Index
114
118
  - [ ] Define from_active_record interface
115
119
 
116
120
  ## Contributing
@@ -70,7 +70,7 @@ module Elasticity
70
70
  # Fetches one specific document from the index by ID.
71
71
  def self.get(id)
72
72
  if doc = index.get_document(document_type, id)
73
- new(doc["_source"])
73
+ new(doc["_source"].merge(_id: doc['_id']))
74
74
  end
75
75
  end
76
76
 
@@ -88,22 +88,28 @@ module Elasticity
88
88
  def self.bulk_index(documents)
89
89
  index.bulk do |b|
90
90
  documents.each do |doc|
91
- b.index(self.document_type, doc.id, doc.to_document)
91
+ b.index(self.document_type, doc._id, doc.to_document)
92
92
  end
93
93
  end
94
94
  end
95
95
 
96
96
  # Define common attributes for all documents
97
- attr_accessor :id
97
+ attr_accessor :_id
98
98
 
99
99
  # Creates a new Document instance with the provided attributes.
100
100
  def initialize(attributes = {})
101
101
  super(attributes)
102
102
  end
103
103
 
104
+ def attributes=(attributes)
105
+ attributes.each do |attr, value|
106
+ self.public_send("#{attr}=", value)
107
+ end
108
+ end
109
+
104
110
  # Defines equality by comparing the ID and values of each instance variable.
105
111
  def ==(other)
106
- return false if id != other.id
112
+ return false if _id != other._id
107
113
 
108
114
  instance_variables.all? do |ivar|
109
115
  instance_variable_get(ivar) == other.instance_variable_get(ivar)
@@ -119,7 +125,7 @@ module Elasticity
119
125
 
120
126
  # Update this object on the index, creating or updating the document.
121
127
  def update
122
- self.class.index.index_document(self.class.document_type, id, to_document)
128
+ self.class.index.index_document(self.class.document_type, _id, to_document)
123
129
  end
124
130
  end
125
131
  end
@@ -24,7 +24,7 @@ module Elasticity
24
24
  # into ActiveRecord models using the provided relation.
25
25
  def active_records(relation)
26
26
  return @active_record if defined?(@active_record)
27
- response = @index.search(@document_type, @body.merge(_source: []))
27
+ response = @index.search(@document_type, @body.merge(_source: false))
28
28
  @active_record = Result.new(response, ActiveRecordMapper.new(relation))
29
29
  end
30
30
 
@@ -95,7 +95,7 @@ module Elasticity
95
95
 
96
96
  def map(hits)
97
97
  hits.map do |hit|
98
- @document_klass.new(hit["_source"])
98
+ @document_klass.new(hit["_source"].merge(_id: hit['_id']))
99
99
  end
100
100
  end
101
101
  end
@@ -106,7 +106,7 @@ module Elasticity
106
106
  end
107
107
 
108
108
  def map(hits)
109
- ids = hits.map { |h| h["_source"]["id"] }
109
+ ids = hits.map { |h| h["_id"] }
110
110
 
111
111
  if ids.any?
112
112
  id_col = "#{quote(@relation.table_name)}.#{quote(@relation.klass.primary_key)}"
@@ -1,3 +1,3 @@
1
1
  module Elasticity
2
- VERSION = "0.2.4"
2
+ VERSION = "0.2.5"
3
3
  end
@@ -3,7 +3,6 @@ require "elasticity/search"
3
3
  RSpec.describe Elasticity::Document do
4
4
  mappings = {
5
5
  properties: {
6
- id: { type: "integer" },
7
6
  name: { type: "string" },
8
7
 
9
8
  items: {
@@ -27,7 +26,7 @@ RSpec.describe Elasticity::Document do
27
26
  attr_accessor :name, :items
28
27
 
29
28
  def to_document
30
- { id: id, name: name, items: items}
29
+ { name: name, items: items }
31
30
  end
32
31
  end
33
32
  end
@@ -78,9 +77,9 @@ RSpec.describe Elasticity::Document do
78
77
  end
79
78
 
80
79
  it "gets specific document from the index" do
81
- doc = { "_source" => { "id" => 1, "name" => "Foo", "items" => [{ "name" => "Item1" }]}}
80
+ doc = { "_id" => 1, "_source" => { "name" => "Foo", "items" => [{ "name" => "Item1" }]}}
82
81
  expect(index).to receive(:get_document).with("class_name", 1).and_return(doc)
83
- expect(subject.get(1)).to eq klass.new(id: 1, name: "Foo", items: [{ "name" => "Item1" }])
82
+ expect(subject.get(1)).to eq klass.new(_id: 1, name: "Foo", items: [{ "name" => "Item1" }])
84
83
  end
85
84
 
86
85
  it "deletes specific document from index" do
@@ -91,10 +90,10 @@ RSpec.describe Elasticity::Document do
91
90
  end
92
91
 
93
92
  context "instance" do
94
- subject { klass.new id: 1, name: "Foo", items: [{ name: "Item1" }] }
93
+ subject { klass.new _id: 1, name: "Foo", items: [{ name: "Item1" }] }
95
94
 
96
95
  it "stores the document in the index" do
97
- expect(index).to receive(:index_document).with("class_name", 1, {id: 1, name: "Foo", items: [{ name: "Item1" }]})
96
+ expect(index).to receive(:index_document).with("class_name", 1, { name: "Foo", items: [{ name: "Item1" }] })
98
97
  subject.update
99
98
  end
100
99
  end
@@ -5,10 +5,10 @@ RSpec.describe Elasticity::MultiSearch do
5
5
  let :klass do
6
6
  Class.new do
7
7
  include ActiveModel::Model
8
- attr_accessor :id, :name
8
+ attr_accessor :_id, :name
9
9
 
10
10
  def ==(other)
11
- self.id == other.id && self.name == other.name
11
+ self._id == other._id && self.name == other.name
12
12
  end
13
13
  end
14
14
  end
@@ -16,8 +16,8 @@ RSpec.describe Elasticity::MultiSearch do
16
16
  let :response do
17
17
  {
18
18
  "responses" => [
19
- { "hits" => { "total" => 2, "hits" => [{"_source" => { "id" => 1, "name" => "foo" }}, {"_source" => { "id" => 2, "name" => "bar" }}]}},
20
- { "hits" => { "total" => 1, "hits" => [{"_source" => { "id" => 3, "name" => "baz" }}]}},
19
+ { "hits" => { "total" => 2, "hits" => [{ "_id" => 1, "_source" => { "name" => "foo" }}, { "_id" => 2, "_source" => { "name" => "bar" }}]}},
20
+ { "hits" => { "total" => 1, "hits" => [{ "_id" => 3, "_source" => { "name" => "baz" }}]}},
21
21
  ]
22
22
  }
23
23
  end
@@ -31,7 +31,7 @@ RSpec.describe Elasticity::MultiSearch do
31
31
  { index: "index_second", type: "document_second", search: { search: :second } },
32
32
  ]).and_return(response)
33
33
 
34
- expect(Array(subject[:first])). to eq [klass.new(id: 1, name: "foo"), klass.new(id: 2, name: "bar")]
35
- expect(Array(subject[:second])). to eq [klass.new(id: 3, name: "baz")]
34
+ expect(Array(subject[:first])). to eq [klass.new(_id: 1, name: "foo"), klass.new(_id: 2, name: "bar")]
35
+ expect(Array(subject[:second])). to eq [klass.new(_id: 3, name: "baz")]
36
36
  end
37
37
  end
@@ -7,15 +7,15 @@ RSpec.describe "Search" do
7
7
 
8
8
  let :full_response do
9
9
  { "hits" => { "total" => 2, "hits" => [
10
- {"_source" => { "id" => 1, "name" => "foo" }},
11
- {"_source" => { "id" => 2, "name" => "bar" }},
10
+ { "_id" => 1, "_source" => { "name" => "foo" } },
11
+ { "_id" => 2, "_source" => { "name" => "bar" } },
12
12
  ]}}
13
13
  end
14
14
 
15
15
  let :ids_response do
16
16
  { "hits" => { "total" => 2, "hits" => [
17
- {"_source" => { "id" => 1, "name" => "foo" }},
18
- {"_source" => { "id" => 2, "name" => "bar" }},
17
+ { "_id" => 1 },
18
+ { "_id" => 2 },
19
19
  ]}}
20
20
  end
21
21
 
@@ -26,10 +26,10 @@ RSpec.describe "Search" do
26
26
  let :klass do
27
27
  Class.new do
28
28
  include ActiveModel::Model
29
- attr_accessor :id, :name
29
+ attr_accessor :_id, :name
30
30
 
31
31
  def ==(other)
32
- self.id == other.id && self.name == other.name
32
+ self._id == other._id && self.name == other.name
33
33
  end
34
34
  end
35
35
  end
@@ -43,7 +43,7 @@ RSpec.describe "Search" do
43
43
  expect(index).to receive(:search).with(document_type, body).and_return(full_response)
44
44
 
45
45
  docs = subject.documents(klass)
46
- expected = [klass.new(id: 1, name: "foo"), klass.new(id: 2, name: "bar")]
46
+ expected = [klass.new(_id: 1, name: "foo"), klass.new(_id: 2, name: "bar")]
47
47
 
48
48
  expect(docs.total).to eq 2
49
49
  expect(docs.size).to eq expected.size
@@ -59,7 +59,7 @@ RSpec.describe "Search" do
59
59
  end
60
60
 
61
61
  it "searches the index and return active record models" do
62
- expect(index).to receive(:search).with(document_type, body.merge(_source: [])).and_return(ids_response)
62
+ expect(index).to receive(:search).with(document_type, body.merge(_source: false)).and_return(ids_response)
63
63
 
64
64
  relation = double(:relation,
65
65
  connection: double(:connection),
@@ -75,7 +75,7 @@ RSpec.describe "Search" do
75
75
  end
76
76
 
77
77
  it "return relation.none from activerecord relation with no matches" do
78
- expect(index).to receive(:search).with(document_type, body.merge(_source: [])).and_return(empty_response)
78
+ expect(index).to receive(:search).with(document_type, body.merge(_source: false)).and_return(empty_response)
79
79
 
80
80
  relation = double(:relation)
81
81
  expect(relation).to receive(:none).and_return(relation)
@@ -95,7 +95,7 @@ RSpec.describe "Search" do
95
95
 
96
96
  it "automatically maps the documents into the provided Document class" do
97
97
  expect(index).to receive(:search).with(document_type, body).and_return(full_response)
98
- expect(Array(subject)).to eq [klass.new(id: 1, name: "foo"), klass.new(id: 2, name: "bar")]
98
+ expect(Array(subject)).to eq [klass.new(_id: 1, name: "foo"), klass.new(_id: 2, name: "bar")]
99
99
  end
100
100
 
101
101
  it "delegates active_records for the underlying search" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: es-elasticity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rodrigo Kochenburger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-07 00:00:00.000000000 Z
11
+ date: 2014-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler