elasticsearch-paramedic-rack 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.travis.yml +1 -0
- data/CHANGELOG.md +4 -0
- data/README.md +6 -3
- data/lib/elasticsearch-paramedic-rack.rb +1 -0
- data/lib/elasticsearch-paramedic-rack/middleware.rb +6 -5
- data/lib/elasticsearch-paramedic-rack/version.rb +1 -1
- data/public/elasticsearch-paramedic/css/app.css +20 -0
- data/public/elasticsearch-paramedic/index.html +101 -83
- data/public/elasticsearch-paramedic/js/app.js +44 -11
- data/public/elasticsearch-paramedic/js/libs/cubism.elasticsearch.js +2 -2
- data/test/{middelware_test.rb → middleware_test.rb} +4 -4
- metadata +18 -31
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 3d1cdf93047a52b62e6de9e09532324df11f3e38
|
4
|
+
data.tar.gz: 97c20190845cc5be4e89f0d53bd01894aff368bb
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 05309b2af64c022f0c29d7e566b927dd6cfecbe94e539a03a559423d85517bed3a9c8a459244407e5ea61c9310fbe061edcab5ab9aa9e8843111c725d0eca218
|
7
|
+
data.tar.gz: 0eeea24c0aa9ec1cfe03b338bbfb90d029ffdc340f8fd5b95fbc5c3671adc8d12bd2c7e3fc514c8017caf531d386ef2f283b3ec1154d80b5d19ee795447b0771
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -16,17 +16,20 @@ Or install it yourself as:
|
|
16
16
|
|
17
17
|
$ gem install elasticsearch-paramedic-rack
|
18
18
|
|
19
|
-
##
|
19
|
+
## Config
|
20
20
|
|
21
21
|
use Elasticsearch::Paramedic::Rack::Middleware
|
22
22
|
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
Visit `http://host:port/elasticsearch-paramedic`, for example `http://localhost:3000/elasticsearch-paramedic`
|
26
|
+
|
23
27
|
## Todos
|
24
28
|
|
25
29
|
* Authlogic
|
26
30
|
* Tests
|
27
31
|
* Rails integration
|
28
|
-
* Proxy to
|
29
|
-
* Usage
|
32
|
+
* Proxy to Elasticsearch to use on remote Server
|
30
33
|
* Configuration
|
31
34
|
* debug options / logger
|
32
35
|
|
@@ -5,14 +5,15 @@ module Elasticsearch
|
|
5
5
|
module Rack
|
6
6
|
class Middleware < ::Rack::Static
|
7
7
|
def initialize app
|
8
|
-
super app, :root => Elasticsearch::Paramedic::Rack::ROOT, :urls => [
|
8
|
+
super app, :root => Elasticsearch::Paramedic::Rack::ROOT, :urls => [PATH]
|
9
9
|
end
|
10
10
|
|
11
11
|
def call env
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
case env["PATH_INFO"]
|
13
|
+
when PATH
|
14
|
+
return [302, {"Location" => "#{PATH}/", "Content-Type" => "text/plain"}, []]
|
15
|
+
when "#{PATH}/"
|
16
|
+
env["PATH_INFO"] = "#{PATH}/index.html"
|
16
17
|
end
|
17
18
|
|
18
19
|
super
|
@@ -122,6 +122,16 @@ header section .label.darker
|
|
122
122
|
|
123
123
|
/* Nodes */
|
124
124
|
|
125
|
+
#nodes-wrapper h2 a
|
126
|
+
{ color: #999;
|
127
|
+
text-transform: none;
|
128
|
+
float: right; }
|
129
|
+
|
130
|
+
#nodes-wrapper h2 a:hover
|
131
|
+
{ color: #666;
|
132
|
+
border-bottom: 1px solid #666;
|
133
|
+
cursor: pointer; }
|
134
|
+
|
125
135
|
#nodes .node
|
126
136
|
{ margin: 0.25em 0.5em 0.25em 0;
|
127
137
|
padding: 0.25em 0.5em 0.25em 0;
|
@@ -138,6 +148,16 @@ header section .label.darker
|
|
138
148
|
|
139
149
|
/* Indices */
|
140
150
|
|
151
|
+
#indices-wrapper h2 a
|
152
|
+
{ color: #999;
|
153
|
+
text-transform: none;
|
154
|
+
float: right; }
|
155
|
+
|
156
|
+
#indices-wrapper h2 a:hover
|
157
|
+
{ color: #666;
|
158
|
+
border-bottom: 1px solid #666;
|
159
|
+
cursor: pointer; }
|
160
|
+
|
141
161
|
#indices
|
142
162
|
{ counter-reset: index; }
|
143
163
|
|
@@ -86,98 +86,116 @@
|
|
86
86
|
<div id="chart"></div>
|
87
87
|
</section>
|
88
88
|
|
89
|
-
<
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
<
|
101
|
-
<
|
102
|
-
<
|
103
|
-
|
104
|
-
|
89
|
+
<section id="nodes-wrapper">
|
90
|
+
<script type="text/x-handlebars">
|
91
|
+
<h2 class="label clear">
|
92
|
+
Nodes
|
93
|
+
<small><a {{action "toggle" target="App.toggleNodes"}}>{{App.toggleNodes.text}}</a></small>
|
94
|
+
</h2>
|
95
|
+
</script>
|
96
|
+
<script type="text/x-handlebars">
|
97
|
+
{{#unless App.nodes.hidden}}
|
98
|
+
<div id="nodes" class="clearfix">
|
99
|
+
{{#each App.nodes}}
|
100
|
+
<div {{bindAttr class=":node master"}}>
|
101
|
+
<h3><span {{bindAttr class="master:icon-star"}}></span> {{name}}</h3>
|
102
|
+
<div class="meta">
|
103
|
+
<p><span class="label">ID: </span>{{id}}</p>
|
104
|
+
<p><span class="label">IP: </span>{{http_address}}</p>
|
105
|
+
<p><span class="label">Host: </span>{{hostname}}</p>
|
106
|
+
<p><span class="label">Load: </span>{{load}}</p>
|
107
|
+
<p><span class="label">Size: </span>{{disk}}</p>
|
108
|
+
<p><span class="label">Docs: </span>{{#bind docs}}{{number_with_delimiter docs}}{{/bind}}</p>
|
109
|
+
<p><span class="label">Heap: </span>{{jvm_heap_used}}
|
110
|
+
<small class="dimmed" title="Heap max">/{{jvm_heap_max}}</small></p>
|
111
|
+
</div>
|
112
|
+
</div>
|
113
|
+
{{/each}}
|
105
114
|
</div>
|
106
|
-
|
107
|
-
</
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
<
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
{{
|
126
|
-
|
115
|
+
{{/unless}}
|
116
|
+
</script>
|
117
|
+
<br>
|
118
|
+
</section>
|
119
|
+
|
120
|
+
<section id="indices-wrapper">
|
121
|
+
<script type="text/x-handlebars">
|
122
|
+
<h2 class="label clear">
|
123
|
+
Indices
|
124
|
+
<small><a {{action "toggle" target="App.toggleIndices"}}>{{App.toggleIndices.text}}</a></small>
|
125
|
+
</h2>
|
126
|
+
</script>
|
127
|
+
<script type="text/x-handlebars">
|
128
|
+
{{#unless App.indices.hidden}}
|
129
|
+
<div id="indices">
|
130
|
+
{{#each index in App.indices.sorted}}
|
131
|
+
{{#with index}}
|
132
|
+
<div {{bindAttr class=":index :clearfix state show_detail:expanded"}}>
|
133
|
+
<div class="basic-info clearfix">
|
134
|
+
<h3><a {{bindAttr href="url"}} title="Browse Index">{{name}}</a></h3>
|
135
|
+
|
136
|
+
<div class="buttons">
|
137
|
+
{{#unless closed}}
|
138
|
+
<button {{action "showDetail" target="App.indices"}}>
|
139
|
+
{{#if show_detail}}Hide details{{else}}Show details{{/if}}
|
140
|
+
</button>
|
141
|
+
{{/unless}}
|
142
|
+
</div>
|
127
143
|
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
144
|
+
<div class="shards">
|
145
|
+
{{#each shards}}
|
146
|
+
<div {{bindAttr class=":shard primary state recovery.stage" title="state"}}>
|
147
|
+
{{name}}
|
148
|
+
</div>
|
149
|
+
{{/each}}
|
132
150
|
</div>
|
133
|
-
{{/each}}
|
134
|
-
</div>
|
135
151
|
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
152
|
+
<div class="meta">
|
153
|
+
<p>
|
154
|
+
{{settings.number_of_shards}} shards /
|
155
|
+
{{settings.number_of_replicas}} replicas /
|
156
|
+
{{#bind docs}}{{number_with_delimiter docs}}{{/bind}} docs /
|
157
|
+
{{size}} /
|
158
|
+
{{indexing.index_time}} indexing /
|
159
|
+
{{search.query_time}} querying /
|
160
|
+
{{state}}
|
161
|
+
</p>
|
162
|
+
</div>
|
146
163
|
</div>
|
147
|
-
</div>
|
148
164
|
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
165
|
+
<!-- Shard Allocation -->
|
166
|
+
{{#if show_detail}}
|
167
|
+
<div class="extra-info shards clearfix">
|
168
|
+
{{#unless show_detail_loaded}}
|
169
|
+
<div class="loading">Waiting for data...</div>
|
170
|
+
{{/unless}}
|
171
|
+
{{#each nodes}}
|
172
|
+
<div class="node">
|
173
|
+
<h3>{{name}} <small>{{hostname}}</small></h3>
|
174
|
+
<div class="clearfix">
|
175
|
+
{{#each shards}}
|
176
|
+
<div {{bindAttr class=":shard primary state recovery.stage" title="state"}}>
|
177
|
+
<h3>{{name}}</h3>
|
178
|
+
<div class="meta">
|
179
|
+
<p>{{state}}/{{recovery.stage}}</p>
|
180
|
+
<p>
|
181
|
+
{{recovery.time}}
|
182
|
+
{{recovery.size}}
|
183
|
+
</p>
|
184
|
+
</div>
|
185
|
+
</div>
|
186
|
+
{{/each}}
|
187
|
+
</div>
|
171
188
|
</div>
|
189
|
+
{{/each}}
|
172
190
|
</div>
|
173
|
-
|
174
|
-
|
175
|
-
|
191
|
+
{{/if}}
|
192
|
+
</div>
|
193
|
+
{{/with}}
|
194
|
+
{{/each}}
|
176
195
|
</div>
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
</script>
|
196
|
+
{{/unless}}
|
197
|
+
</script>
|
198
|
+
</section>
|
181
199
|
|
182
200
|
<audio id="alert-green" src="audio/alert-green.mp3"></audio>
|
183
201
|
<audio id="alert-yellow" src="audio/alert-yellow.mp3"></audio>
|
@@ -12,8 +12,9 @@ var App = Em.Application.create({
|
|
12
12
|
},
|
13
13
|
|
14
14
|
elasticsearch_url: function() {
|
15
|
-
var
|
16
|
-
|
15
|
+
var href = window.location.href.toString()
|
16
|
+
|
17
|
+
return /_plugin/.test(href) ? href.substring(0, href.indexOf('/_plugin/')) : "http://localhost:9200"
|
17
18
|
}(),
|
18
19
|
|
19
20
|
refresh_intervals : Ember.ArrayController.create({
|
@@ -94,6 +95,7 @@ App.cluster = Ember.Object.create({
|
|
94
95
|
});
|
95
96
|
|
96
97
|
App.nodes = Ember.ArrayController.create({
|
98
|
+
hidden: false,
|
97
99
|
content: [],
|
98
100
|
|
99
101
|
contains: function(item) {
|
@@ -101,6 +103,8 @@ App.nodes = Ember.ArrayController.create({
|
|
101
103
|
},
|
102
104
|
|
103
105
|
refresh: function() {
|
106
|
+
if (App.nodes.hidden) { return }
|
107
|
+
|
104
108
|
clearTimeout(App.nodes.poller)
|
105
109
|
setTimeout(function() { App.set("refreshing", false) }, 1000)
|
106
110
|
App.nodes.poller = setTimeout( function() { App.nodes.__perform_refresh() }, App.refresh_interval.value )
|
@@ -152,12 +156,13 @@ App.nodes = Ember.ArrayController.create({
|
|
152
156
|
};
|
153
157
|
|
154
158
|
App.set("refreshing", true)
|
155
|
-
$.getJSON(App.elasticsearch_url+"/
|
156
|
-
$.getJSON(App.elasticsearch_url+"/
|
159
|
+
$.getJSON(App.elasticsearch_url+"/_nodes?jvm", __load_nodes_info);
|
160
|
+
$.getJSON(App.elasticsearch_url+"/_nodes/stats?indices&os&process&jvm", __load_nodes_stats);
|
157
161
|
}
|
158
162
|
});
|
159
163
|
|
160
164
|
App.indices = Ember.ArrayController.create({
|
165
|
+
hidden: false,
|
161
166
|
content: [],
|
162
167
|
|
163
168
|
contains: function(item) {
|
@@ -165,6 +170,8 @@ App.indices = Ember.ArrayController.create({
|
|
165
170
|
},
|
166
171
|
|
167
172
|
refresh: function() {
|
173
|
+
if (App.indices.hidden) { return }
|
174
|
+
|
168
175
|
clearTimeout(App.indices.poller)
|
169
176
|
setTimeout(function() { App.set("refreshing", false) }, 1000)
|
170
177
|
App.indices.poller = setTimeout( function() { App.indices.__perform_refresh() }, App.refresh_interval.value )
|
@@ -330,17 +337,19 @@ App.indices = Ember.ArrayController.create({
|
|
330
337
|
App.cluster.set("docs_count",
|
331
338
|
data._all.primaries.docs ? data._all.primaries.docs.count : 0)
|
332
339
|
|
333
|
-
|
340
|
+
var indices = data._all.indices || data.indices
|
341
|
+
|
342
|
+
for (var index_name in indices) {
|
334
343
|
var index = self.findProperty("name", index_name)
|
335
344
|
if (!index) continue
|
336
345
|
|
337
346
|
index
|
338
|
-
.set("size",
|
339
|
-
.set("size_in_bytes",
|
340
|
-
.set("docs",
|
341
|
-
.set("indexing",
|
342
|
-
.set("search",
|
343
|
-
.set("get",
|
347
|
+
.set("size", indices[index_name]['primaries']['store']['size'])
|
348
|
+
.set("size_in_bytes", indices[index_name]['primaries']['store']['size_in_bytes'])
|
349
|
+
.set("docs", indices[index_name]['primaries']['docs']['count'])
|
350
|
+
.set("indexing", indices[index_name]['primaries']['indexing'])
|
351
|
+
.set("search", indices[index_name]['primaries']['search'])
|
352
|
+
.set("get", indices[index_name]['primaries']['get'])
|
344
353
|
}
|
345
354
|
};
|
346
355
|
|
@@ -413,6 +422,30 @@ App.toggleChart = Ember.View.create({
|
|
413
422
|
|
414
423
|
this.set("text", visible ? 'Show' : 'Hide')
|
415
424
|
visible ? chart.hide('fast') : chart.show('fast')
|
425
|
+
App.nodes.refresh();
|
426
|
+
}
|
427
|
+
});
|
428
|
+
|
429
|
+
App.toggleIndices = Ember.View.create({
|
430
|
+
hidden: false,
|
431
|
+
text: 'Hide',
|
432
|
+
|
433
|
+
toggle: function(event) {
|
434
|
+
this.set("text", this.get('hidden') ? 'Hide' : 'Show')
|
435
|
+
this.toggleProperty('hidden')
|
436
|
+
App.indices.toggleProperty('hidden')
|
437
|
+
App.indices.refresh();
|
438
|
+
}
|
439
|
+
});
|
440
|
+
|
441
|
+
App.toggleNodes = Ember.View.create({
|
442
|
+
hidden: false,
|
443
|
+
text: 'Hide',
|
444
|
+
|
445
|
+
toggle: function(event) {
|
446
|
+
this.set("text", this.get('hidden') ? 'Hide' : 'Show')
|
447
|
+
this.toggleProperty('hidden')
|
448
|
+
App.nodes.toggleProperty('hidden')
|
416
449
|
}
|
417
450
|
});
|
418
451
|
|
@@ -209,7 +209,7 @@ cubism.elasticsearch = function(context, options, callback) {
|
|
209
209
|
// Load information about ElasticSearch nodes from the Nodes Info API
|
210
210
|
// [http://www.elasticsearch.org/guide/reference/api/admin-cluster-nodes-info.html]
|
211
211
|
//
|
212
|
-
d3.json(options.host + "/
|
212
|
+
d3.json(options.host + "/_nodes", function(cluster) {
|
213
213
|
source.cluster = cluster
|
214
214
|
source.node_names = d3.keys(cluster.nodes)
|
215
215
|
|
@@ -267,7 +267,7 @@ cubism.elasticsearch = function(context, options, callback) {
|
|
267
267
|
})
|
268
268
|
|
269
269
|
source.toString = function() { return options.host };
|
270
|
-
source.url = function() { return options.host + "/
|
270
|
+
source.url = function() { return options.host + "/_nodes/stats?all" };
|
271
271
|
|
272
272
|
return source;
|
273
273
|
};
|
@@ -3,19 +3,19 @@ require 'minitest/autorun'
|
|
3
3
|
require 'rack/lint'
|
4
4
|
require 'rack/mock'
|
5
5
|
|
6
|
-
require "elasticsearch-paramedic-rack/
|
6
|
+
require "elasticsearch-paramedic-rack/middleware"
|
7
7
|
|
8
8
|
class MiddlewareTest < Minitest::Unit::TestCase
|
9
|
-
PATH =
|
9
|
+
PATH = Elasticsearch::Paramedic::Rack::PATH
|
10
10
|
|
11
11
|
def middelware
|
12
|
-
Rack::Lint.new Elasticsearch::Paramedic::Rack::
|
12
|
+
Rack::Lint.new Elasticsearch::Paramedic::Rack::Middleware.new(RackApp.new)
|
13
13
|
end
|
14
14
|
|
15
15
|
def test_root
|
16
16
|
res = Rack::MockRequest.new(middelware).get(PATH)
|
17
17
|
assert_equal 302, res.status
|
18
|
-
assert_equal "/
|
18
|
+
assert_equal "#{PATH}/", res.header["Location"]
|
19
19
|
end
|
20
20
|
|
21
21
|
def test_root2
|
metadata
CHANGED
@@ -1,62 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elasticsearch-paramedic-rack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Timo Schilling
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-04-07 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rack
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - ">="
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rake
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - ">="
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - ">="
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: minitest
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- - ~>
|
45
|
+
- - "~>"
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '3.0'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- - ~>
|
52
|
+
- - "~>"
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '3.0'
|
62
55
|
description: A gemed version of elasticsearch-paramedic with Rack support.
|
@@ -66,8 +59,8 @@ executables: []
|
|
66
59
|
extensions: []
|
67
60
|
extra_rdoc_files: []
|
68
61
|
files:
|
69
|
-
- .gitignore
|
70
|
-
- .travis.yml
|
62
|
+
- ".gitignore"
|
63
|
+
- ".travis.yml"
|
71
64
|
- CHANGELOG.md
|
72
65
|
- Gemfile
|
73
66
|
- LICENSE.txt
|
@@ -98,38 +91,32 @@ files:
|
|
98
91
|
- public/elasticsearch-paramedic/js/libs/ember-0.9.8.js
|
99
92
|
- public/elasticsearch-paramedic/js/libs/ember-0.9.8.min.js
|
100
93
|
- public/elasticsearch-paramedic/js/libs/jquery-1.7.2.min.js
|
101
|
-
- test/
|
94
|
+
- test/middleware_test.rb
|
102
95
|
- test/test_helper.rb
|
103
96
|
homepage: https://github.com/timoschilling/elasticsearch-paramedic-rack
|
104
97
|
licenses: []
|
98
|
+
metadata: {}
|
105
99
|
post_install_message:
|
106
100
|
rdoc_options: []
|
107
101
|
require_paths:
|
108
102
|
- lib
|
109
103
|
required_ruby_version: !ruby/object:Gem::Requirement
|
110
|
-
none: false
|
111
104
|
requirements:
|
112
|
-
- -
|
105
|
+
- - ">="
|
113
106
|
- !ruby/object:Gem::Version
|
114
107
|
version: '0'
|
115
|
-
segments:
|
116
|
-
- 0
|
117
|
-
hash: 217892655081849790
|
118
108
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
119
|
-
none: false
|
120
109
|
requirements:
|
121
|
-
- -
|
110
|
+
- - ">="
|
122
111
|
- !ruby/object:Gem::Version
|
123
112
|
version: '0'
|
124
|
-
segments:
|
125
|
-
- 0
|
126
|
-
hash: 217892655081849790
|
127
113
|
requirements: []
|
128
114
|
rubyforge_project:
|
129
|
-
rubygems_version:
|
115
|
+
rubygems_version: 2.2.2
|
130
116
|
signing_key:
|
131
|
-
specification_version:
|
117
|
+
specification_version: 4
|
132
118
|
summary: A gemed version of elasticsearch-paramedic with Rack support.
|
133
119
|
test_files:
|
134
|
-
- test/
|
120
|
+
- test/middleware_test.rb
|
135
121
|
- test/test_helper.rb
|
122
|
+
has_rdoc:
|