stretcher 1.14.0 → 1.15.0
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.
- data/.travis.yml +0 -1
- data/Gemfile +1 -0
- data/README.md +1 -0
- data/lib/stretcher/index.rb +7 -6
- data/lib/stretcher/server.rb +10 -16
- data/lib/stretcher/version.rb +1 -1
- data/spec/lib/stretcher_index_spec.rb +17 -3
- data/spec/lib/stretcher_server_spec.rb +6 -0
- data/spec/spec_helper.rb +0 -1
- metadata +2 -2
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
data/lib/stretcher/index.rb
CHANGED
@@ -44,9 +44,10 @@ module Stretcher
|
|
44
44
|
body = documents.reduce("") {|post_data, d_raw|
|
45
45
|
d = Hashie::Mash.new(d_raw)
|
46
46
|
index_meta = { :_index => name, :_id => (d.delete(:id) || d.delete(:_id)) }
|
47
|
-
|
47
|
+
|
48
|
+
system_fields = %w{_type _parent _routing}
|
48
49
|
d.keys.reduce(index_meta) do |memo, key|
|
49
|
-
index_meta[key] = d.delete(key) if key.to_s
|
50
|
+
index_meta[key] = d.delete(key) if system_fields.include?(key.to_s)
|
50
51
|
end
|
51
52
|
|
52
53
|
post_data << ({action => index_meta}.to_json + "\n")
|
@@ -56,9 +57,9 @@ module Stretcher
|
|
56
57
|
@server.bulk body, options
|
57
58
|
end
|
58
59
|
|
59
|
-
# Creates the index, with the supplied hash as the
|
60
|
-
def create(options=
|
61
|
-
request(:put,
|
60
|
+
# Creates the index, with the supplied hash as the options body (usually mappings: and settings:))
|
61
|
+
def create(options=nil)
|
62
|
+
request(:put, nil, nil, options)
|
62
63
|
end
|
63
64
|
|
64
65
|
# Deletes the index
|
@@ -94,7 +95,7 @@ module Stretcher
|
|
94
95
|
rescue Stretcher::RequestError::NotFound
|
95
96
|
false
|
96
97
|
end
|
97
|
-
|
98
|
+
|
98
99
|
# Delete documents by a given query.
|
99
100
|
# Per: http://www.elasticsearch.org/guide/reference/api/delete-by-query.html
|
100
101
|
def delete_query(query)
|
data/lib/stretcher/server.rb
CHANGED
@@ -30,26 +30,20 @@ module Stretcher
|
|
30
30
|
if uri_components.user || uri_components.password
|
31
31
|
http.basic_auth(uri_components.user, uri_components.password)
|
32
32
|
end
|
33
|
-
|
33
|
+
|
34
34
|
http
|
35
35
|
end
|
36
|
-
|
36
|
+
|
37
37
|
# Internal use only.
|
38
38
|
# Builds a logger when initializing an instance
|
39
39
|
def self.build_logger(options)
|
40
|
-
logger =
|
41
|
-
|
42
|
-
|
43
|
-
logger = options[:logger]
|
44
|
-
else
|
45
|
-
logger = Logger.new(STDOUT)
|
46
|
-
logger.level = Logger::WARN
|
47
|
-
end
|
40
|
+
logger = options[:logger] || Logger.new(STDOUT)
|
41
|
+
log_level = options[:log_level] || :debug
|
42
|
+
logger.level = Logger.const_get(log_level.to_s.upcase)
|
48
43
|
|
49
44
|
logger.formatter = proc do |severity, datetime, progname, msg|
|
50
45
|
"[Stretcher][#{severity}]: #{msg}\n"
|
51
46
|
end
|
52
|
-
|
53
47
|
logger
|
54
48
|
end
|
55
49
|
|
@@ -66,7 +60,7 @@ module Stretcher
|
|
66
60
|
# The options hash takes an optional instance of Logger under :logger.
|
67
61
|
#
|
68
62
|
# server = Stretcher::Server.new('http://localhost:9200')
|
69
|
-
#
|
63
|
+
#
|
70
64
|
# The default implementation here uses the net_http_persistent adapter
|
71
65
|
# for faraday. If you would like to use a different HTTP library, or alter
|
72
66
|
# other faraday config settings you may specify an optional :faraday_configurator
|
@@ -92,7 +86,7 @@ module Stretcher
|
|
92
86
|
idx = Index.new(self, name, :logger => logger)
|
93
87
|
block ? block.call(idx) : idx
|
94
88
|
end
|
95
|
-
|
89
|
+
|
96
90
|
# Perform a raw bulk operation. You probably want to use Stretcher::Index#bulk_index
|
97
91
|
# which properly formats a bulk index request.
|
98
92
|
def bulk(data, options={})
|
@@ -128,7 +122,7 @@ module Stretcher
|
|
128
122
|
def msearch(body=[])
|
129
123
|
raise ArgumentError, "msearch takes an array!" unless body.is_a?(Array)
|
130
124
|
fmt_body = body.map(&:to_json).join("\n") + "\n"
|
131
|
-
|
125
|
+
|
132
126
|
res = request(:get, path_uri("/_msearch"), {}, fmt_body)
|
133
127
|
|
134
128
|
errors = res.responses.map(&:error).compact
|
@@ -181,12 +175,12 @@ module Stretcher
|
|
181
175
|
end
|
182
176
|
|
183
177
|
# Handy way to query the server, returning *only* the body
|
184
|
-
# Will raise an exception when the status is not in the 2xx range
|
178
|
+
# Will raise an exception when the status is not in the 2xx range
|
185
179
|
def request(method, path, params={}, body=nil, headers={}, &block)
|
186
180
|
req = http.build_request(method)
|
187
181
|
req.path = path
|
188
182
|
req.params.update(Util.clean_params(params)) if params
|
189
|
-
req.body = body
|
183
|
+
req.body = body
|
190
184
|
req.headers.update(headers) if headers
|
191
185
|
block.call(req) if block
|
192
186
|
logger.debug { Util.curl_format(req) }
|
data/lib/stretcher/version.rb
CHANGED
@@ -23,10 +23,11 @@ describe Stretcher::Index do
|
|
23
23
|
i
|
24
24
|
}
|
25
25
|
let(:corpus) {
|
26
|
+
# underscore field that are not system fields should make it through to _source
|
26
27
|
[
|
27
|
-
{:text => "Foo", "_type" => 'tweet', "_id" => 'fooid'},
|
28
|
-
{:text => "Bar", "_type" => 'tweet', "_id" => 'barid'},
|
29
|
-
{:text => "Baz", "_type" => 'tweet', "id" => 'bazid'} # Note we support both _id and id
|
28
|
+
{:text => "Foo", :_text => '_Foo', "_type" => 'tweet', "_id" => 'fooid'},
|
29
|
+
{:text => "Bar", :_text => '_Bar', "_type" => 'tweet', "_id" => 'barid'},
|
30
|
+
{:text => "Baz", :_text => '_Baz', "_type" => 'tweet', "id" => 'bazid'} # Note we support both _id and id
|
30
31
|
]
|
31
32
|
}
|
32
33
|
|
@@ -41,6 +42,18 @@ describe Stretcher::Index do
|
|
41
42
|
index.refresh
|
42
43
|
end
|
43
44
|
|
45
|
+
it 'creates an index with the correct HTTP command' do
|
46
|
+
index.delete rescue nil
|
47
|
+
|
48
|
+
options = { :mappings => { :movie => { :properties => { :category => { :type => 'string' } } } } }
|
49
|
+
|
50
|
+
server.logger.should_receive(:debug) do |&block|
|
51
|
+
block.call.should == %{curl -XPUT http://localhost:9200/foo -d '#{options.to_json}' '-H Accept: application/json' '-H Content-Type: application/json' '-H User-Agent: Stretcher Ruby Gem 1.14.0'}
|
52
|
+
end
|
53
|
+
|
54
|
+
index.create(options)
|
55
|
+
end
|
56
|
+
|
44
57
|
it "should work on an existential level" do
|
45
58
|
index.delete rescue nil
|
46
59
|
index.exists?.should be_false
|
@@ -81,6 +94,7 @@ describe Stretcher::Index do
|
|
81
94
|
corpus.each {|doc|
|
82
95
|
fetched_doc = index.type(doc["_type"]).get(doc["_id"] || doc["id"], {}, true)
|
83
96
|
fetched_doc._source.text.should == doc[:text]
|
97
|
+
fetched_doc._source._text.should == doc[:_text]
|
84
98
|
fetched_doc._source._id.should be_nil
|
85
99
|
fetched_doc._source._type.should be_nil
|
86
100
|
}
|
@@ -7,6 +7,11 @@ describe Stretcher::Server do
|
|
7
7
|
server.class.should == Stretcher::Server
|
8
8
|
end
|
9
9
|
|
10
|
+
it 'sets log level from options' do
|
11
|
+
server = Stretcher::Server.new(ES_URL, :log_level => :info)
|
12
|
+
server.logger.level.should == Logger::INFO
|
13
|
+
end
|
14
|
+
|
10
15
|
it "should support the block friendly 'with_server'" do
|
11
16
|
exposed = nil
|
12
17
|
res = Stretcher::Server.with_server() {|s|
|
@@ -80,4 +85,5 @@ describe Stretcher::Server do
|
|
80
85
|
end
|
81
86
|
server.analyze("Candles", :analyzer => :snowball)
|
82
87
|
end
|
88
|
+
|
83
89
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stretcher
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.15.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-06-
|
12
|
+
date: 2013-06-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: faraday
|