influxdb 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/README.md +5 -5
- data/influxdb.gemspec +4 -1
- data/lib/influxdb/client.rb +2 -1
- data/lib/influxdb/client/http.rb +1 -2
- data/lib/influxdb/config.rb +24 -3
- data/lib/influxdb/point_value.rb +32 -20
- data/lib/influxdb/query/core.rb +8 -3
- data/lib/influxdb/version.rb +1 -1
- data/spec/influxdb/cases/querying_spec.rb +101 -0
- data/spec/influxdb/client_spec.rb +29 -0
- data/spec/influxdb/point_value_spec.rb +14 -37
- metadata +2 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a1cd5af0d4500c96303b8c3c336926772eefedde
|
4
|
+
data.tar.gz: f5b17bce835b6973d763a0b0faad0d1a4882beb1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a9a1e9d0df4907d754ab2fe0b7898b5852a0f9541f2a36ac12d0c2d6e0701406b88ff7d58461ead70b4c6833dd3bffc0c6048c3003911b3788ab18e9878101a1
|
7
|
+
data.tar.gz: 6d6703b9f341b8d1bb791a4548172d588165d537896b122c8d4fc6f902ad88b97d872fb15c1e078ddb36a3ec1341e7c9d3113b54d082659a295f5f803887d5c9
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
influxdb-ruby
|
2
2
|
=============
|
3
3
|
|
4
|
-
[![Build Status](https://travis-ci.org/
|
4
|
+
[![Build Status](https://travis-ci.org/influxdata/influxdb-ruby.svg?branch=master)](https://travis-ci.org/influxdata/influxdb-ruby)
|
5
5
|
|
6
|
-
The official ruby client library for [InfluxDB](https://influxdb.com/).
|
6
|
+
The official ruby client library for [InfluxDB](https://influxdata.com/time-series-platform/influxdb/). Maintained by [@toddboom](https://github.com/toddboom).
|
7
7
|
|
8
8
|
> **Support for InfluxDB v0.8.x is now deprecated**. The final version of this library that will support the older InfluxDB interface is `v0.1.9`, which is available as a gem and tagged on this repository. If you're reading this message, then you should only expect support for InfluxDB v0.9.1 and higher.
|
9
9
|
|
@@ -292,7 +292,7 @@ Write multiple points in a batch (performance boost):
|
|
292
292
|
data = [
|
293
293
|
{
|
294
294
|
series: 'cpu',
|
295
|
-
tags: { host: 'server_1',
|
295
|
+
tags: { host: 'server_1', region: 'us' },
|
296
296
|
values: {internal: 5, external: 0.453345}
|
297
297
|
},
|
298
298
|
{
|
@@ -317,7 +317,7 @@ Write multiple points in a batch with a specific retention policy:
|
|
317
317
|
data = [
|
318
318
|
{
|
319
319
|
series: 'cpu',
|
320
|
-
tags: { host: 'server_1',
|
320
|
+
tags: { host: 'server_1', region: 'us' },
|
321
321
|
values: {internal: 5, external: 0.453345}
|
322
322
|
},
|
323
323
|
{
|
@@ -477,7 +477,7 @@ Testing
|
|
477
477
|
-------
|
478
478
|
|
479
479
|
```
|
480
|
-
git clone git@github.com:
|
480
|
+
git clone git@github.com:influxdata/influxdb-ruby.git
|
481
481
|
cd influxdb-ruby
|
482
482
|
bundle
|
483
483
|
bundle exec rake
|
data/influxdb.gemspec
CHANGED
@@ -19,7 +19,10 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_runtime_dependency "json"
|
22
|
-
|
22
|
+
|
23
|
+
if RUBY_VERSION < '2.1'
|
24
|
+
spec.add_runtime_dependency "cause"
|
25
|
+
end
|
23
26
|
|
24
27
|
spec.add_development_dependency "bundler", "~> 1.3"
|
25
28
|
spec.add_development_dependency "rake"
|
data/lib/influxdb/client.rb
CHANGED
data/lib/influxdb/client/http.rb
CHANGED
@@ -37,12 +37,11 @@ module InfluxDB
|
|
37
37
|
private
|
38
38
|
|
39
39
|
def connect_with_retry(&block)
|
40
|
-
|
40
|
+
host = config.next_host
|
41
41
|
delay = config.initial_delay
|
42
42
|
retry_count = 0
|
43
43
|
|
44
44
|
begin
|
45
|
-
hosts.push(host = hosts.shift)
|
46
45
|
http = Net::HTTP.new(host, config.port)
|
47
46
|
http.open_timeout = config.open_timeout
|
48
47
|
http.read_timeout = config.read_timeout
|
data/lib/influxdb/config.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
|
+
require 'thread'
|
2
|
+
|
1
3
|
module InfluxDB
|
2
4
|
# InfluxDB client configuration
|
3
5
|
class Config
|
4
6
|
AUTH_METHODS = %w(params basic_auth)
|
5
7
|
|
6
|
-
attr_accessor :
|
7
|
-
:port,
|
8
|
+
attr_accessor :port,
|
8
9
|
:username,
|
9
10
|
:password,
|
10
11
|
:database,
|
@@ -27,7 +28,13 @@ module InfluxDB
|
|
27
28
|
# rubocop:disable all
|
28
29
|
def initialize(opts = {})
|
29
30
|
@database = opts[:database]
|
30
|
-
@
|
31
|
+
@hosts_queue = Queue.new
|
32
|
+
|
33
|
+
# load the hosts into a Queue for thread safety
|
34
|
+
Array(opts[:hosts] || opts[:host] || ["localhost"]).each do |host|
|
35
|
+
@hosts_queue.push(host)
|
36
|
+
end
|
37
|
+
|
31
38
|
@port = opts.fetch(:port, 8086)
|
32
39
|
@prefix = opts.fetch(:prefix, '')
|
33
40
|
@username = opts.fetch(:username, "root")
|
@@ -64,5 +71,19 @@ module InfluxDB
|
|
64
71
|
def async?
|
65
72
|
!!async
|
66
73
|
end
|
74
|
+
|
75
|
+
def next_host
|
76
|
+
host = @hosts_queue.pop
|
77
|
+
@hosts_queue.push(host)
|
78
|
+
host
|
79
|
+
end
|
80
|
+
|
81
|
+
def hosts
|
82
|
+
Array.new(@hosts_queue.length) do
|
83
|
+
host = @hosts_queue.pop
|
84
|
+
@hosts_queue.push(host)
|
85
|
+
host
|
86
|
+
end
|
87
|
+
end
|
67
88
|
end
|
68
89
|
end
|
data/lib/influxdb/point_value.rb
CHANGED
@@ -4,9 +4,24 @@ module InfluxDB
|
|
4
4
|
attr_reader :series, :values, :tags, :timestamp
|
5
5
|
|
6
6
|
def initialize(data)
|
7
|
-
@series = data[:series]
|
8
|
-
|
9
|
-
@
|
7
|
+
@series = escape(data[:series], :measurement)
|
8
|
+
|
9
|
+
@values = data[:values].map{|k, v|
|
10
|
+
key = escape(k.to_s, :field_key)
|
11
|
+
val = if v.is_a?(String)
|
12
|
+
'"' + escape(v, :field_value) + '"'
|
13
|
+
else
|
14
|
+
v.to_s
|
15
|
+
end
|
16
|
+
"#{key}=#{val}"
|
17
|
+
}.join(',') if data[:values]
|
18
|
+
|
19
|
+
@tags = data[:tags].map{|k, v|
|
20
|
+
key = escape(k.to_s, :tag_key)
|
21
|
+
val = escape(v.to_s, :tag_value)
|
22
|
+
"#{key}=#{val}"
|
23
|
+
}.join(',') if data[:tags]
|
24
|
+
|
10
25
|
@timestamp = data[:timestamp]
|
11
26
|
end
|
12
27
|
|
@@ -20,31 +35,28 @@ module InfluxDB
|
|
20
35
|
|
21
36
|
private
|
22
37
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
38
|
+
ESCAPES = {
|
39
|
+
measurement: [' ', ','],
|
40
|
+
tag_key: ['=', ' ', ','],
|
41
|
+
tag_value: ['=', ' ', ','],
|
42
|
+
field_key: ['=', ' ', ',', '"'],
|
43
|
+
field_value: ['"'],
|
44
|
+
}
|
45
|
+
|
46
|
+
def escape(s, type)
|
47
|
+
ESCAPES[type].each do |ch|
|
48
|
+
s = s.gsub(ch){ "\\#{ch}" }
|
49
|
+
end
|
50
|
+
s
|
27
51
|
end
|
28
52
|
|
29
53
|
def map(data, quote_escape)
|
30
54
|
data.map do |k, v|
|
31
55
|
key = escape_key(k)
|
32
56
|
val = v.is_a?(String) ? escape_value(v, quote_escape) : v
|
57
|
+
val = val.is_a?(Integer) ? "#{val}i" : v
|
33
58
|
"#{key}=#{val}"
|
34
59
|
end
|
35
60
|
end
|
36
|
-
|
37
|
-
def escape_value(value, quote_escape)
|
38
|
-
val = value.
|
39
|
-
gsub(/\s/, '\ ').
|
40
|
-
gsub(',', '\,').
|
41
|
-
gsub('"', '\"')
|
42
|
-
val = %("#{val}") if quote_escape
|
43
|
-
val
|
44
|
-
end
|
45
|
-
|
46
|
-
def escape_key(key)
|
47
|
-
key.to_s.gsub(/\s/, '\ ').gsub(',', '\,')
|
48
|
-
end
|
49
61
|
end
|
50
62
|
end
|
data/lib/influxdb/query/core.rb
CHANGED
@@ -6,6 +6,11 @@ module InfluxDB
|
|
6
6
|
get "/ping"
|
7
7
|
end
|
8
8
|
|
9
|
+
def version
|
10
|
+
resp = get "/ping"
|
11
|
+
resp.header['x-influxdb-version']
|
12
|
+
end
|
13
|
+
|
9
14
|
# rubocop:disable Metrics/MethodLength
|
10
15
|
def query(query, opts = {})
|
11
16
|
denormalize = opts.fetch(:denormalize, config.denormalize)
|
@@ -78,9 +83,9 @@ module InfluxDB
|
|
78
83
|
end
|
79
84
|
|
80
85
|
def fetch_series(response)
|
81
|
-
response.fetch('results', [])
|
82
|
-
.fetch(
|
83
|
-
|
86
|
+
response.fetch('results', []).flat_map{|result|
|
87
|
+
result.fetch('series', [])
|
88
|
+
}
|
84
89
|
end
|
85
90
|
|
86
91
|
def generate_payload(data)
|
data/lib/influxdb/version.rb
CHANGED
@@ -179,4 +179,105 @@ describe InfluxDB::Client do
|
|
179
179
|
end
|
180
180
|
end
|
181
181
|
end
|
182
|
+
|
183
|
+
describe "multiple select queries" do
|
184
|
+
context "with single series with multiple points" do
|
185
|
+
let(:response) do
|
186
|
+
{ "results" => [{ "series" => [{ "name" => "cpu", "tags" => { "region" => "us" },
|
187
|
+
"columns" => %w(time temp value),
|
188
|
+
"values" => [["2015-07-07T14:58:37Z", 92, 0.3445], ["2015-07-07T14:59:09Z", 68, 0.8787]] }] },
|
189
|
+
{ "series" => [{ "name" => "memory", "tags" => { "region" => "us" },
|
190
|
+
"columns" => %w(time free total),
|
191
|
+
"values" => [["2015-07-07T14:58:37Z", 96468992, 134217728], ["2015-07-07T14:59:09Z", 71303168, 134217728]] }] }] }
|
192
|
+
end
|
193
|
+
let(:expected_result) do
|
194
|
+
[{ "name" => "cpu", "tags" => { "region" => "us" },
|
195
|
+
"values" => [{ "time" => "2015-07-07T14:58:37Z", "temp" => 92, "value" => 0.3445 },
|
196
|
+
{ "time" => "2015-07-07T14:59:09Z", "temp" => 68, "value" => 0.8787 }] },
|
197
|
+
{ "name" => "memory", "tags" => { "region" => "us" },
|
198
|
+
"values" => [{ "time" => "2015-07-07T14:58:37Z", "free" => 92*2**20, "total" => 128*2**20 },
|
199
|
+
{ "time" => "2015-07-07T14:59:09Z", "free" => 68*2**20, "total" => 128*2**20 }] }]
|
200
|
+
end
|
201
|
+
let(:query) { 'SELECT * FROM cpu; SELECT * FROM memory' }
|
202
|
+
|
203
|
+
before do
|
204
|
+
stub_request(:get, "http://influxdb.test:9999/query").with(
|
205
|
+
query: { q: query, u: "username", p: "password", precision: 's', db: database }
|
206
|
+
).to_return(body: JSON.generate(response))
|
207
|
+
end
|
208
|
+
|
209
|
+
it "should return array with single hash containing multiple values" do
|
210
|
+
expect(subject.query(query)).to eq(expected_result)
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
context "with series with different tags" do
|
215
|
+
let(:response) do
|
216
|
+
{ "results" => [{ "series" => [{ "name" => "cpu", "tags" => { "region" => "pl" }, "columns" => %w(time temp value), "values" => [["2015-07-07T15:13:04Z", 34, 0.343443]] },
|
217
|
+
{ "name" => "cpu", "tags" => { "region" => "us" }, "columns" => %w(time temp value), "values" => [["2015-07-07T14:58:37Z", 92, 0.3445], ["2015-07-07T14:59:09Z", 68, 0.8787]] }] },
|
218
|
+
{ "series" => [{ "name" => "memory", "tags" => { "region" => "pl" }, "columns" => %w(time free total), "values" => [["2015-07-07T15:13:04Z", 35651584, 134217728]] },
|
219
|
+
{ "name" => "memory", "tags" => { "region" => "us" }, "columns" => %w(time free total), "values" => [["2015-07-07T14:58:37Z", 96468992, 134217728], ["2015-07-07T14:59:09Z", 71303168, 134217728]] }] }] }
|
220
|
+
end
|
221
|
+
let(:expected_result) do
|
222
|
+
[{ "name" => "cpu", "tags" => { "region" => "pl" },
|
223
|
+
"values" => [{ "time" => "2015-07-07T15:13:04Z", "temp" => 34, "value" => 0.343443 }] },
|
224
|
+
{ "name" => "cpu", "tags" => { "region" => "us" },
|
225
|
+
"values" => [{ "time" => "2015-07-07T14:58:37Z", "temp" => 92, "value" => 0.3445 },
|
226
|
+
{ "time" => "2015-07-07T14:59:09Z", "temp" => 68, "value" => 0.8787 }] },
|
227
|
+
{ "name" => "memory", "tags" => { "region" => "pl" },
|
228
|
+
"values" => [{ "time" => "2015-07-07T15:13:04Z", "free" => 34*2**20, "total" => 128*2**20 }] },
|
229
|
+
{ "name" => "memory", "tags" => { "region" => "us" },
|
230
|
+
"values" => [{ "time" => "2015-07-07T14:58:37Z", "free" => 92*2**20, "total" => 128*2**20 },
|
231
|
+
{ "time" => "2015-07-07T14:59:09Z", "free" => 68*2**20, "total" => 128*2**20 }] }]
|
232
|
+
end
|
233
|
+
let(:query) { 'SELECT * FROM cpu; SELECT * FROM memory' }
|
234
|
+
|
235
|
+
before do
|
236
|
+
stub_request(:get, "http://influxdb.test:9999/query").with(
|
237
|
+
query: { q: query, u: "username", p: "password", precision: 's', db: database }
|
238
|
+
).to_return(body: JSON.generate(response))
|
239
|
+
end
|
240
|
+
|
241
|
+
it "should return array with 2 elements grouped by tags" do
|
242
|
+
expect(subject.query(query)).to eq(expected_result)
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
context "with a block" do
|
247
|
+
let(:response) do
|
248
|
+
{ "results" => [{ "series" => [{ "name" => "cpu", "tags" => { "region" => "pl" }, "columns" => %w(time temp value), "values" => [["2015-07-07T15:13:04Z", 34, 0.343443]] },
|
249
|
+
{ "name" => "cpu", "tags" => { "region" => "us" }, "columns" => %w(time temp value), "values" => [["2015-07-07T14:58:37Z", 92, 0.3445], ["2015-07-07T14:59:09Z", 68, 0.8787]] }] },
|
250
|
+
{ "series" => [{ "name" => "memory", "tags" => { "region" => "pl" }, "columns" => %w(time free total), "values" => [["2015-07-07T15:13:04Z", 35651584, 134217728]] },
|
251
|
+
{ "name" => "memory", "tags" => { "region" => "us" }, "columns" => %w(time free total), "values" => [["2015-07-07T14:58:37Z", 96468992, 134217728], ["2015-07-07T14:59:09Z", 71303168, 134217728]] }] }] }
|
252
|
+
end
|
253
|
+
|
254
|
+
let(:expected_result) do
|
255
|
+
[{ "name" => "cpu", "tags" => { "region" => "pl" },
|
256
|
+
"values" => [{ "time" => "2015-07-07T15:13:04Z", "temp" => 34, "value" => 0.343443 }] },
|
257
|
+
{ "name" => "cpu", "tags" => { "region" => "us" },
|
258
|
+
"values" => [{ "time" => "2015-07-07T14:58:37Z", "temp" => 92, "value" => 0.3445 },
|
259
|
+
{ "time" => "2015-07-07T14:59:09Z", "temp" => 68, "value" => 0.8787 }] },
|
260
|
+
{ "name" => "memory", "tags" => { "region" => "pl" },
|
261
|
+
"values" => [{ "time" => "2015-07-07T15:13:04Z", "free" => 34*2**20, "total" => 128*2**20 }] },
|
262
|
+
{ "name" => "memory", "tags" => { "region" => "us" },
|
263
|
+
"values" => [{ "time" => "2015-07-07T14:58:37Z", "free" => 92*2**20, "total" => 128*2**20 },
|
264
|
+
{ "time" => "2015-07-07T14:59:09Z", "free" => 68*2**20, "total" => 128*2**20 }] }]
|
265
|
+
end
|
266
|
+
let(:query) { 'SELECT * FROM cpu; SELECT * FROM memory' }
|
267
|
+
|
268
|
+
before do
|
269
|
+
stub_request(:get, "http://influxdb.test:9999/query").with(
|
270
|
+
query: { q: query, u: "username", p: "password", precision: 's', db: database }
|
271
|
+
).to_return(body: JSON.generate(response))
|
272
|
+
end
|
273
|
+
|
274
|
+
it "should accept a block and yield name, tags and points" do
|
275
|
+
results = []
|
276
|
+
subject.query(query) do |name, tags, points|
|
277
|
+
results << { 'name' => name, 'tags' => tags, 'values' => points }
|
278
|
+
end
|
279
|
+
expect(results).to eq(expected_result)
|
280
|
+
end
|
281
|
+
end
|
282
|
+
end
|
182
283
|
end
|
@@ -63,4 +63,33 @@ describe InfluxDB::Client do
|
|
63
63
|
expect(subject.ping).to be_a(Net::HTTPNoContent)
|
64
64
|
end
|
65
65
|
end
|
66
|
+
|
67
|
+
describe "GET #version" do
|
68
|
+
it "returns 1.1.1" do
|
69
|
+
stub_request(:get, "http://influxdb.test:9999/ping").to_return(
|
70
|
+
{ :status => 204, :headers => {'x-influxdb-version' => '1.1.1'} })
|
71
|
+
|
72
|
+
expect(subject.version).to eq('1.1.1')
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe "Load balancing" do
|
77
|
+
let(:args) { { hosts: hosts } }
|
78
|
+
let(:hosts) do
|
79
|
+
[
|
80
|
+
"influxdb.test0",
|
81
|
+
"influxdb.test1",
|
82
|
+
"influxdb.test2"
|
83
|
+
]
|
84
|
+
end
|
85
|
+
let(:cycle) { 3 }
|
86
|
+
let!(:stubs) do
|
87
|
+
hosts.map { |host| stub_request(:get, "http://#{host}:9999/ping").to_return(status: 204) }
|
88
|
+
end
|
89
|
+
|
90
|
+
it "balance requests" do
|
91
|
+
(hosts.size * cycle).times { subject.ping }
|
92
|
+
stubs.cycle(cycle) { |stub| expect(stub).to have_been_requested.times(cycle) }
|
93
|
+
end
|
94
|
+
end
|
66
95
|
end
|
@@ -1,43 +1,20 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe InfluxDB::PointValue do
|
4
|
-
describe "
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
point
|
18
|
-
values: { response_time: 0.34343 },
|
19
|
-
tags: { city: "Twin Peaks" })
|
20
|
-
expect(point.tags.split("=").last).to eq("Twin\\ Peaks")
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe "comma escaping" do
|
25
|
-
it 'should escape series name' do
|
26
|
-
point = InfluxDB::PointValue.new(series: "Some Long String,", values: { value: 5 })
|
27
|
-
expect(point.series).to eq("Some\\ Long\\ String\\,")
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'should escape keys of passed value keys' do
|
31
|
-
point = InfluxDB::PointValue.new(series: "responses",
|
32
|
-
values: { 'some string key,' => 5 })
|
33
|
-
expect(point.values.split("=").first).to eq("some\\ string\\ key\\,")
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'should escape passed values' do
|
37
|
-
point = InfluxDB::PointValue.new(series: "responses",
|
38
|
-
values: { response_time: 0.34343 },
|
39
|
-
tags: { city: "Twin Peaks," })
|
40
|
-
expect(point.tags.split("=").last).to eq("Twin\\ Peaks\\,")
|
4
|
+
describe "escaping" do
|
5
|
+
let(:data) do
|
6
|
+
{
|
7
|
+
series: '1= ,"\\1',
|
8
|
+
tags: {'2= ,"\\2' => '3= ,"\\3'},
|
9
|
+
values: {'4= ,"\\4' => '5= ,"\\5'},
|
10
|
+
}
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should escape correctly' do
|
14
|
+
point = InfluxDB::PointValue.new(data)
|
15
|
+
expected = %(1=\\ \\,"\\1,2\\=\\ \\,"\\2=3\\=\\ \\,"\\3 )+
|
16
|
+
%(4\\=\\ \\,\\"\\4="5= ,\\"\\5")
|
17
|
+
expect(point.dump).to eq(expected)
|
41
18
|
end
|
42
19
|
end
|
43
20
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: influxdb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Todd Persen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-04-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -24,20 +24,6 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: cause
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: bundler
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|