es-elasticity 0.2.7 → 0.2.8

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: 92bedfd2fa34df6c303c9c0945ba55c7613c7a31
4
- data.tar.gz: bc68cc7bd8bd36ec8d195a53df1684871b20caec
3
+ metadata.gz: b092a148409adc4a7e11885a4be8a235d7933dcb
4
+ data.tar.gz: 8049626e93cbeb9f26d5f88859fa422b6425925c
5
5
  SHA512:
6
- metadata.gz: 87b00d0798444997de4c2fe057a5cd1c7bd4990a38b3cecaa78795fb0dd1a069ab3aff3311df61abfd828175e1db9f7cebb66a36007c643d68b4a4cfc883b92e
7
- data.tar.gz: ea32e3c290a7ec6238fc64e43f0b2792ea259ab444ac3868eb8a9ff1944ff05c59cd2fdd1de410a9353eb91db52d98a3a8cd811d7c7751534e884628ed30deb0
6
+ metadata.gz: fa7dd7e2e17f990df9a65fc62ca31b7c498374e35ff95051f77747a3d41ec859eb65ecef3bf33ebd9149eadf7781f4b6d1d94cd0e7b632314f0150e8007295d6
7
+ data.tar.gz: ec226e57b6332ee5734a91272e3939218d7d80dc71c4eebe60d86a275eebbea0563e52ced4f5452f4bad57ef4b079ffe6fcb5b9302e354ffa7e445807386c5e9
data/.travis.yml ADDED
@@ -0,0 +1,9 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.1
4
+ - 2.0.0
5
+ services:
6
+ - elasticsearch
7
+ env:
8
+ global:
9
+ - secure: "HZa3D2GGwC6Jl062LJulbWZLTCieeBFC3FOJrArC5ul7ACGR5CEtANe0/UTnIf/Ad40p7I5VhiTdNFTcHunTbNc7Ae7dE5fOkiBHtxo/zwgpvHZK0iPvIoxsSfdcHobHeaF7NvfcXUkYUKcdRUyplHdB56eHQqYPVsah66K/4XA="
data/README.md CHANGED
@@ -1,8 +1,10 @@
1
1
  # Elasticity
2
2
 
3
+ [![Build Status](https://travis-ci.org/doximity/es-elasticity.svg)](https://travis-ci.org/doximity/es-elasticity) [![Test Coverage](https://codeclimate.com/github/doximity/es-elasticity/badges/coverage.svg)](https://codeclimate.com/github/doximity/es-elasticity) [![Code Climate](https://codeclimate.com/github/doximity/es-elasticity/badges/gpa.svg)](https://codeclimate.com/github/doximity/es-elasticity) [![Dependency Status](https://gemnasium.com/doximity/es-elasticity.svg)](https://gemnasium.com/doximity/es-elasticity)
4
+
3
5
  Elasticity provides a higher level abstraction on top of [elasticsearch-ruby](https://github.com/elasticsearch/elasticsearch-ruby) gem.
4
6
 
5
- Mainly, it provides a model-oriented approach to ElasticSearch, similar to what [ActiveRecord](https://github.com/rails/rails/tree/master/activerecord) provides to relational databases. It leverages [ActiveModel](https://github.com/rails/rails/tree/master/activemodel) to provide a familiar format for Rails developers.
7
+ Mainly, it provides a model-oriented approach to Elasticsearch, similar to what [ActiveRecord](https://github.com/rails/rails/tree/master/activerecord) provides to relational databases. It leverages [ActiveModel](https://github.com/rails/rails/tree/master/activemodel) to provide a familiar format for Rails developers.
6
8
 
7
9
  ## Installation
8
10
 
@@ -97,25 +99,27 @@ adults.active_recors(Database::User) # => Array of Database::User instances
97
99
 
98
100
  ## Design Goals
99
101
 
100
- - Provide model specific for ElasticSearch documents instead of an ActiveRecord mixin;
102
+ - Provide model specific for Elasticsearch documents instead of an ActiveRecord mixin;
101
103
  - proper separation of concerns and de-coupling;
102
104
  - lazy search evaluation and easy composition of multi-searches;
103
105
  - easy of debug;
104
- - higher level API that resembles ElasticSearch API;
106
+ - higher level API that resembles Elasticsearch API;
105
107
 
106
108
  ## Roadmap
107
109
 
110
+ - [ ] Index aliasing support
111
+ - [ ] Index hot swapping support
108
112
  - [ ] 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
113
+ - [ ] Define from_active_record interface
111
114
  - [ ] Write more detailed documentation section for:
112
115
  - [ ] Model definition
113
116
  - [ ] Indexing, Bulk Indexing and Delete By Query
114
117
  - [ ] Search and Multi Search
115
118
  - [ ] ActiveRecord integration
119
+ - [ ] Better automatic index name and document type
120
+ - [ ] Support for multiple document types
116
121
  - [ ] Get rid of to_document, generate automatically based on attributes
117
122
  - [ ] Add some delegations on Document to Index
118
- - [ ] Define from_active_record interface
119
123
 
120
124
  ## Contributing
121
125
 
data/Rakefile CHANGED
@@ -2,3 +2,5 @@ require "bundler/gem_tasks"
2
2
  require "rspec/core/rake_task"
3
3
 
4
4
  RSpec::Core::RakeTask.new
5
+
6
+ task default: :spec
data/elasticity.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.version = Elasticity::VERSION
9
9
  spec.authors = ["Rodrigo Kochenburger"]
10
10
  spec.email = ["rodrigo@doximity.com"]
11
- spec.summary = %q{ActiveModel-based library for working with ElasticSearch}
11
+ spec.summary = %q{ActiveModel-based library for working with Elasticsearch}
12
12
  spec.description = %q{Elasticity provides a higher level abstraction on top of [elasticsearch-ruby](https://github.com/elasticsearch/elasticsearch-ruby) gem}
13
13
  spec.homepage = ""
14
14
  spec.license = "MIT"
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
25
25
  spec.add_development_dependency "simplecov", "~> 0.7.1"
26
26
  spec.add_development_dependency "oj"
27
27
  spec.add_development_dependency "pry"
28
+ spec.add_development_dependency "codeclimate-test-reporter"
28
29
 
29
30
  spec.add_dependency "activesupport", "~> 4.0"
30
31
  spec.add_dependency "activemodel", "~> 4.0"
@@ -59,7 +59,7 @@ module Elasticity
59
59
  end
60
60
 
61
61
  # Searches the index using the parameters provided in the body hash, following the same
62
- # structure ElasticSearch expects.
62
+ # structure Elasticsearch expects.
63
63
  # Returns a DocumentSearch object.
64
64
  def self.search(body)
65
65
  DocumentSearchProxy.new(Search.new(index, document_type, body), self)
@@ -117,7 +117,7 @@ module Elasticity
117
117
 
118
118
  # IMPLEMENT
119
119
  # Returns a hash with the attributes as they should be stored in the index.
120
- # This will be stored as _source attributes on ElasticSearch.
120
+ # This will be stored as _source attributes on Elasticsearch.
121
121
  def to_document
122
122
  raise NotImplementedError, "to_document needs to be implemented for #{self.class}"
123
123
  end
@@ -90,7 +90,7 @@ module Elasticity
90
90
  private
91
91
 
92
92
  def instrument(name, extra = {})
93
- ActiveSupport::Notifications.instrument("elasticity.#{name}", args: extra) do
93
+ ActiveSupport::Notifications.instrument("#{name}.elasticity", args: extra) do
94
94
  yield
95
95
  end
96
96
  end
@@ -32,10 +32,12 @@ module Elasticity
32
32
  { index: search.index.name, type: search.document_type, search: search.body }
33
33
  end
34
34
 
35
- results = {}
35
+ response = ActiveSupport::Notifications.instrument("multi_search.elasticity", args: { body: multi_body }) do
36
+ Elasticity.config.client.msearch(body: multi_body)
37
+ end
36
38
 
37
- responses = Array(Elasticity.config.client.msearch(body: multi_body)["responses"])
38
- responses.each_with_index do |resp, idx|
39
+ results = {}
40
+ Array(response["responses"]).each_with_index do |resp, idx|
39
41
  name, search, mapper = @searches[idx]
40
42
  results[name] = Search::Result.new(resp, mapper)
41
43
  end
@@ -0,0 +1,19 @@
1
+ module Elasticity
2
+ class Railtie < Rails::Railtie
3
+ initializer 'elasticity.initialize_logging' do
4
+ ActiveSupport::Notifications.subscribe(/\.elasticity$/) do |name, start, finish, id, payload|
5
+ puts name
6
+ time = (finish - start)*1000
7
+
8
+ if logger = Elasticity.config.logger
9
+ logger.debug "#{name} #{"%.2f" % time}ms #{MultiJson.dump(payload[:args], pretty: Elasticity.config.pretty_json)}"
10
+
11
+ exception, message = payload[:exception]
12
+ if exception
13
+ logger.error "#{name} #{exception}: #{message}"
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,5 +1,5 @@
1
1
  module Elasticity
2
- # Search provides a simple interface for defining a search against an ElasticSearch
2
+ # Search provides a simple interface for defining a search against an Elasticsearch
3
3
  # index and fetching the results in different ways and mappings.
4
4
  #
5
5
  # Example:
@@ -12,7 +12,7 @@ module Elasticity
12
12
  # search is not performend until methods are called, each method represents a different
13
13
  # way of fetching and mapping the data.
14
14
  #
15
- # The body parameter is a hash following the exact same syntax as ElasticSearch's JSON
15
+ # The body parameter is a hash following the exact same syntax as Elasticsearch's JSON
16
16
  # query language.
17
17
  def initialize(index, document_type, body)
18
18
  @index = index
@@ -20,7 +20,7 @@ module Elasticity
20
20
  @body = body.freeze
21
21
  end
22
22
 
23
- # Execute the search, fetching only ids from ElasticSearch and then mapping the results
23
+ # Execute the search, fetching only ids from Elasticsearch and then mapping the results
24
24
  # into ActiveRecord models using the provided relation.
25
25
  def active_records(relation)
26
26
  return @active_record if defined?(@active_record)
@@ -1,3 +1,3 @@
1
1
  module Elasticity
2
- VERSION = "0.2.7"
2
+ VERSION = "0.2.8"
3
3
  end
@@ -7,13 +7,22 @@ require "active_support/core_ext"
7
7
  require "active_model"
8
8
  require "elasticsearch"
9
9
 
10
+ if defined?(Rails)
11
+ require "elasticity/railtie"
12
+ end
13
+
10
14
  module Elasticity
11
15
  class Config
12
16
  attr_writer :logger, :client, :settings, :namespace, :pretty_json
13
17
 
14
18
  def logger
15
19
  return @logger if defined?(@logger)
16
- @logger = Logger.new(STDOUT)
20
+
21
+ if defined?(Rails)
22
+ @logger = Rails.logger
23
+ else
24
+ @logger = Logger.new(STDOUT)
25
+ end
17
26
  end
18
27
 
19
28
  def client
@@ -45,16 +54,3 @@ module Elasticity
45
54
  @config = Config.new
46
55
  end
47
56
  end
48
-
49
- ActiveSupport::Notifications.subscribe(/^elasticity\./) do |name, start, finish, id, payload|
50
- time = (finish - start)*1000
51
-
52
- if logger = Elasticity.config.logger
53
- logger.debug "#{name} #{"%.2f" % time}ms #{MultiJson.dump(payload[:args], pretty: Elasticity.config.pretty_json)}"
54
-
55
- exception, message = payload[:exception]
56
- if exception
57
- logger.error "#{name} #{exception}: #{message}"
58
- end
59
- end
60
- end
data/spec/rspec_config.rb CHANGED
@@ -1,6 +1,10 @@
1
1
  require "elasticity_base"
2
+ require "codeclimate-test-reporter"
2
3
  require "simplecov"
3
4
  require "oj"
5
+
6
+ CodeClimate::TestReporter.start
7
+
4
8
  require "elasticity"
5
9
 
6
10
  def elastic_search_client
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.7
4
+ version: 0.2.8
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-10 00:00:00.000000000 Z
11
+ date: 2014-10-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: codeclimate-test-reporter
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: activesupport
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -147,6 +161,7 @@ files:
147
161
  - ".gitignore"
148
162
  - ".rspec"
149
163
  - ".simplecov"
164
+ - ".travis.yml"
150
165
  - Gemfile
151
166
  - LICENSE.txt
152
167
  - README.md
@@ -158,6 +173,7 @@ files:
158
173
  - lib/elasticity/document.rb
159
174
  - lib/elasticity/index.rb
160
175
  - lib/elasticity/multi_search.rb
176
+ - lib/elasticity/railtie.rb
161
177
  - lib/elasticity/search.rb
162
178
  - lib/elasticity/version.rb
163
179
  - lib/elasticity_base.rb
@@ -189,7 +205,7 @@ rubyforge_project:
189
205
  rubygems_version: 2.2.2
190
206
  signing_key:
191
207
  specification_version: 4
192
- summary: ActiveModel-based library for working with ElasticSearch
208
+ summary: ActiveModel-based library for working with Elasticsearch
193
209
  test_files:
194
210
  - spec/rspec_config.rb
195
211
  - spec/units/document_spec.rb