elastomer-client 3.1.5 → 3.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.travis.yml +13 -2
- data/CHANGELOG.md +5 -0
- data/README.md +15 -1
- data/elastomer-client.gemspec +2 -1
- data/lib/elastomer/client.rb +30 -5
- data/lib/elastomer/version.rb +1 -1
- data/script/bootstrap +1 -1
- data/script/cibuild-elastomer-client +1 -1
- data/test/client_test.rb +65 -0
- metadata +19 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: a3abce6a0da503d9a912b1f444cfb1911aa230db717c703d3eba42d31122295f
|
4
|
+
data.tar.gz: 5ad2807d576cf3a48665217ad8601a531d308de10a1264ee63b131779014bdda
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8c390f6c7fb21ae298beacd9eac8d471a897b7e6f53a642c4db2024b011f1f8b07118edcb0e3df6ce217509a86a05735c51424c46eb7bda537c8d4e213512c71
|
7
|
+
data.tar.gz: b4ff217cd41090457e10cbb70b0beabfc5f672745d626afe4552f618ddb69367ff070691cc0743f00325ef06e8808e03a5c1509ff7da3e0e9fb9bcf1b983d8d8
|
data/.travis.yml
CHANGED
@@ -1,17 +1,21 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
- 2.3.
|
3
|
+
- 2.3.8
|
4
4
|
env:
|
5
5
|
# NOTE: Ancient versions of Elasticsearch have different download URLs
|
6
6
|
- ES_VERSION=2.3.5 ES_DOWNLOAD_URL=https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/${ES_VERSION}/elasticsearch-${ES_VERSION}.tar.gz
|
7
|
-
- ES_VERSION=
|
7
|
+
- ES_VERSION=2.4.6 ES_DOWNLOAD_URL=https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/${ES_VERSION}/elasticsearch-${ES_VERSION}.tar.gz
|
8
|
+
- ES_VERSION=5.6.15 ES_DOWNLOAD_URL=https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${ES_VERSION}.tar.gz
|
8
9
|
|
9
10
|
# Configure a specific version of Elasticsearch
|
10
11
|
# See: https://docs.travis-ci.com/user/database-setup/#Installing-ElasticSearch-on-trusty-container-based-infrastructure
|
11
12
|
install:
|
13
|
+
# - sudo apt install openjdk-8-jdk
|
14
|
+
# - sudo update-java-alternatives -l
|
12
15
|
- wget ${ES_DOWNLOAD_URL}
|
13
16
|
- tar -xzf elasticsearch-${ES_VERSION}.tar.gz
|
14
17
|
- ./elasticsearch-${ES_VERSION}/bin/elasticsearch &
|
18
|
+
- gem install bundler
|
15
19
|
- bundle install
|
16
20
|
- wget --quiet --waitretry=1 --retry-connrefused --timeout=10 --output-document=- http://127.0.0.1:9200
|
17
21
|
|
@@ -21,3 +25,10 @@ notifications:
|
|
21
25
|
email: false
|
22
26
|
|
23
27
|
sudo: false
|
28
|
+
dist: trusty
|
29
|
+
jdk:
|
30
|
+
- oraclejdk8
|
31
|
+
addons:
|
32
|
+
apt:
|
33
|
+
packages:
|
34
|
+
- oracle-java8-installer
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
## 3.2.0 (2019-08-22)
|
2
|
+
- Add config based basic and token auth to `Elastomer::Client#connection`
|
3
|
+
- Filter `Elastomer::Client#inspect` output to hide basic and token auth info,
|
4
|
+
and reduce noisiness when debugging
|
5
|
+
|
1
6
|
## 3.1.5 (2019-06-26)
|
2
7
|
- Add new more granular exception type
|
3
8
|
|
data/README.md
CHANGED
@@ -10,7 +10,7 @@ Get started by cloning and running a few scripts:
|
|
10
10
|
$ git clone https://github.com/github/elastomer-client.git
|
11
11
|
$ cd elastomer-client
|
12
12
|
$ script/bootstrap
|
13
|
-
$ rake test
|
13
|
+
$ bundle exec rake test
|
14
14
|
```
|
15
15
|
|
16
16
|
## Client
|
@@ -105,3 +105,17 @@ thusly:
|
|
105
105
|
```ruby
|
106
106
|
Elastomer::Client.new(url: YOUR_ES_URL, adapter: :excon)
|
107
107
|
```
|
108
|
+
|
109
|
+
## Releasing
|
110
|
+
|
111
|
+
1. Create a new branch from `master`
|
112
|
+
2. Bump the version number in `lib/elastomer/version.rb`
|
113
|
+
3. Update `CHANGELOG.md` with info about the new version
|
114
|
+
4. Execute `bin/rake build`. This will place a new gem file in the `pkg/` folder.
|
115
|
+
5. Run `gem install pkg/elastomer-client-{VERSION}.gem` to install the new gem locally
|
116
|
+
6. Start an `irb` session, `require "elastomer/client"` and make sure things work as you expect
|
117
|
+
7. Once everything is working as you expect, commit the version bump and open a PR
|
118
|
+
8. Once you get approval and merge it to master, pull down a fresh copy of master and then...
|
119
|
+
9. Run `rake release`
|
120
|
+
10. If necessary, manually push the new version to rubygems.org
|
121
|
+
11. 🕺 💃 🎉
|
data/elastomer-client.gemspec
CHANGED
@@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_dependency "multi_json", "~> 1.12"
|
26
26
|
spec.add_dependency "semantic", "~> 1.6"
|
27
27
|
|
28
|
-
spec.add_development_dependency "bundler", "~>
|
28
|
+
spec.add_development_dependency "bundler", "~> 2.0"
|
29
29
|
spec.add_development_dependency "activesupport", ">= 3.0"
|
30
30
|
spec.add_development_dependency "minitest", "~> 5.10"
|
31
31
|
spec.add_development_dependency "minitest-fail-fast", "~> 0.1.0"
|
@@ -33,5 +33,6 @@ Gem::Specification.new do |spec|
|
|
33
33
|
spec.add_development_dependency "webmock", "~> 2.3"
|
34
34
|
spec.add_development_dependency "awesome_print", "~> 1.8"
|
35
35
|
spec.add_development_dependency "pry-byebug", "~> 3.4"
|
36
|
+
spec.add_development_dependency "spy", "~> 1.0"
|
36
37
|
spec.add_development_dependency "rake"
|
37
38
|
end
|
data/lib/elastomer/client.rb
CHANGED
@@ -3,6 +3,7 @@ require "faraday"
|
|
3
3
|
require "faraday_middleware"
|
4
4
|
require "multi_json"
|
5
5
|
require "semantic"
|
6
|
+
require "zlib"
|
6
7
|
|
7
8
|
require "elastomer/version"
|
8
9
|
require "elastomer/version_support"
|
@@ -10,6 +11,9 @@ require "elastomer/version_support"
|
|
10
11
|
module Elastomer
|
11
12
|
|
12
13
|
class Client
|
14
|
+
IVAR_BLACK_LIST = [:@basic_auth, :@token_auth]
|
15
|
+
IVAR_NOISY_LIST = [:@api_spec, :@cluster]
|
16
|
+
|
13
17
|
MAX_REQUEST_SIZE = 250 * 2**20 # 250 MB
|
14
18
|
|
15
19
|
RETRYABLE_METHODS = %i[get head].freeze
|
@@ -36,11 +40,14 @@ module Elastomer
|
|
36
40
|
# :es_version - set to the Elasticsearch version (example: "5.6.6") to avoid an HTTP request to get the version.
|
37
41
|
# :compress_body - set to true to enable request body compression (default: false)
|
38
42
|
# :compression - The compression level (0-9) when request body compression is enabled (default: Zlib::DEFAULT_COMPRESSION)
|
43
|
+
# :basic_auth - a Hash containing basic authentication :username and :password values to use on connections
|
44
|
+
# :token_auth - an authentication token as a String to use on connections (overrides :basic_auth)
|
39
45
|
#
|
40
46
|
def initialize(host: "localhost", port: 9200, url: nil,
|
41
47
|
read_timeout: 5, open_timeout: 2, max_retries: 0, retry_delay: 0.075,
|
42
48
|
opaque_id: false, adapter: Faraday.default_adapter, max_request_size: MAX_REQUEST_SIZE,
|
43
|
-
strict_params: false, es_version: nil, compress_body: false, compression: Zlib::DEFAULT_COMPRESSION
|
49
|
+
strict_params: false, es_version: nil, compress_body: false, compression: Zlib::DEFAULT_COMPRESSION,
|
50
|
+
basic_auth: nil, token_auth: nil)
|
44
51
|
|
45
52
|
@url = url || "http://#{host}:#{port}"
|
46
53
|
|
@@ -59,6 +66,8 @@ module Elastomer
|
|
59
66
|
@es_version = es_version
|
60
67
|
@compress_body = compress_body
|
61
68
|
@compression = compression
|
69
|
+
@basic_auth = basic_auth
|
70
|
+
@token_auth = token_auth
|
62
71
|
end
|
63
72
|
|
64
73
|
attr_reader :host, :port, :url
|
@@ -79,7 +88,9 @@ module Elastomer
|
|
79
88
|
open_timeout: open_timeout,
|
80
89
|
adapter: @adapter,
|
81
90
|
opaque_id: @opaque_id,
|
82
|
-
max_request_size: max_request_size
|
91
|
+
max_request_size: max_request_size,
|
92
|
+
basic_auth: @basic_auth,
|
93
|
+
token_auth: @token_auth
|
83
94
|
end
|
84
95
|
|
85
96
|
# Returns true if the server is available; returns false otherwise.
|
@@ -133,14 +144,20 @@ module Elastomer
|
|
133
144
|
conn.request(:limit_size, max_request_size: max_request_size) if max_request_size
|
134
145
|
conn.request(:elastomer_compress, compression: compression) if compress_body
|
135
146
|
|
147
|
+
conn.options[:timeout] = read_timeout
|
148
|
+
conn.options[:open_timeout] = open_timeout
|
149
|
+
|
150
|
+
if @token_auth.present?
|
151
|
+
conn.token_auth(@token_auth)
|
152
|
+
elsif @basic_auth.present?
|
153
|
+
conn.basic_auth(@basic_auth.fetch(:username), @basic_auth.fetch(:password))
|
154
|
+
end
|
155
|
+
|
136
156
|
if @adapter.is_a?(Array)
|
137
157
|
conn.adapter(*@adapter)
|
138
158
|
else
|
139
159
|
conn.adapter(@adapter)
|
140
160
|
end
|
141
|
-
|
142
|
-
conn.options[:timeout] = read_timeout
|
143
|
-
conn.options[:open_timeout] = open_timeout
|
144
161
|
end
|
145
162
|
end
|
146
163
|
|
@@ -458,6 +475,14 @@ module Elastomer
|
|
458
475
|
@version_support ||= VersionSupport.new(version)
|
459
476
|
end
|
460
477
|
|
478
|
+
def inspect
|
479
|
+
public_vars = self.instance_variables.reject do |var|
|
480
|
+
IVAR_NOISY_LIST.include?(var)
|
481
|
+
end.map do |var|
|
482
|
+
"#{var}=#{IVAR_BLACK_LIST.include?(var) ? "[FILTERED]" : instance_variable_get(var).inspect}"
|
483
|
+
end.join(", ")
|
484
|
+
"<##{self.class}:#{self.object_id.to_s(16)} #{public_vars}>"
|
485
|
+
end
|
461
486
|
end # Client
|
462
487
|
end # Elastomer
|
463
488
|
|
data/lib/elastomer/version.rb
CHANGED
data/script/bootstrap
CHANGED
@@ -1 +1 @@
|
|
1
|
-
cibuild-elastomer-client-es24
|
1
|
+
script/cibuild-elastomer-client-es24
|
data/test/client_test.rb
CHANGED
@@ -88,6 +88,71 @@ describe Elastomer::Client do
|
|
88
88
|
}
|
89
89
|
end
|
90
90
|
|
91
|
+
it "hides basic_auth and token_auth params from inspection" do
|
92
|
+
client_params = $client_params.merge(basic_auth: {
|
93
|
+
username: "my_user",
|
94
|
+
password: "my_secret_password"
|
95
|
+
}, token_auth: "my_secret_token")
|
96
|
+
client = Elastomer::Client.new client_params
|
97
|
+
refute_match(/my_user/, client.inspect)
|
98
|
+
refute_match(/my_secret_password/, client.inspect)
|
99
|
+
refute_match(/my_secret_token/, client.inspect)
|
100
|
+
assert_match(/@basic_auth=\[FILTERED\]/, client.inspect)
|
101
|
+
assert_match(/@token_auth=\[FILTERED\]/, client.inspect)
|
102
|
+
end
|
103
|
+
|
104
|
+
describe "authorization" do
|
105
|
+
it "can use basic authentication" do
|
106
|
+
client_params = $client_params.merge(basic_auth: {
|
107
|
+
username: "my_user",
|
108
|
+
password: "my_secret_password"
|
109
|
+
})
|
110
|
+
client = Elastomer::Client.new client_params
|
111
|
+
|
112
|
+
connection = Faraday::Connection.new
|
113
|
+
basic_auth_spy = Spy.on(connection, :basic_auth).and_return(nil)
|
114
|
+
|
115
|
+
Faraday.stub(:new, $client_params[:url], connection) do
|
116
|
+
client.ping
|
117
|
+
end
|
118
|
+
|
119
|
+
assert basic_auth_spy.has_been_called_with?("my_user", "my_secret_password")
|
120
|
+
end
|
121
|
+
|
122
|
+
it "can use token authentication" do
|
123
|
+
client_params = $client_params.merge(token_auth: "my_secret_token")
|
124
|
+
client = Elastomer::Client.new client_params
|
125
|
+
|
126
|
+
connection = Faraday::Connection.new
|
127
|
+
token_auth_spy = Spy.on(connection, :token_auth).and_return(nil)
|
128
|
+
|
129
|
+
Faraday.stub(:new, $client_params[:url], connection) do
|
130
|
+
client.ping
|
131
|
+
end
|
132
|
+
|
133
|
+
assert token_auth_spy.has_been_called_with?("my_secret_token")
|
134
|
+
end
|
135
|
+
|
136
|
+
it "prefers token authentication over basic" do
|
137
|
+
client_params = $client_params.merge(basic_auth: {
|
138
|
+
username: "my_user",
|
139
|
+
password: "my_secret_password"
|
140
|
+
}, token_auth: "my_secret_token")
|
141
|
+
client = Elastomer::Client.new client_params
|
142
|
+
|
143
|
+
connection = Faraday::Connection.new
|
144
|
+
basic_auth_spy = Spy.on(connection, :basic_auth).and_return(nil)
|
145
|
+
token_auth_spy = Spy.on(connection, :token_auth).and_return(nil)
|
146
|
+
|
147
|
+
Faraday.stub(:new, $client_params[:url], connection) do
|
148
|
+
client.ping
|
149
|
+
end
|
150
|
+
|
151
|
+
refute basic_auth_spy.has_been_called?
|
152
|
+
assert token_auth_spy.has_been_called_with?("my_secret_token")
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
91
156
|
describe "when extracting and converting :body params" do
|
92
157
|
it "deletes the :body from the params (or it gets the hose)" do
|
93
158
|
params = { :body => nil, :q => "what what?" }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elastomer-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Pease
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-
|
12
|
+
date: 2019-08-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: addressable
|
@@ -87,14 +87,14 @@ dependencies:
|
|
87
87
|
requirements:
|
88
88
|
- - "~>"
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version: '
|
90
|
+
version: '2.0'
|
91
91
|
type: :development
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
95
|
- - "~>"
|
96
96
|
- !ruby/object:Gem::Version
|
97
|
-
version: '
|
97
|
+
version: '2.0'
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
99
|
name: activesupport
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
@@ -199,6 +199,20 @@ dependencies:
|
|
199
199
|
- - "~>"
|
200
200
|
- !ruby/object:Gem::Version
|
201
201
|
version: '3.4'
|
202
|
+
- !ruby/object:Gem::Dependency
|
203
|
+
name: spy
|
204
|
+
requirement: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - "~>"
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '1.0'
|
209
|
+
type: :development
|
210
|
+
prerelease: false
|
211
|
+
version_requirements: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - "~>"
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '1.0'
|
202
216
|
- !ruby/object:Gem::Dependency
|
203
217
|
name: rake
|
204
218
|
requirement: !ruby/object:Gem::Requirement
|
@@ -340,8 +354,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
340
354
|
- !ruby/object:Gem::Version
|
341
355
|
version: '0'
|
342
356
|
requirements: []
|
343
|
-
|
344
|
-
rubygems_version: 2.5.2
|
357
|
+
rubygems_version: 3.0.3
|
345
358
|
signing_key:
|
346
359
|
specification_version: 4
|
347
360
|
summary: A library for interacting with Elasticsearch
|