es-elasticity 0.2.4 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
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