influxdb-client 1.0.0.beta

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,75 @@
1
+ # The MIT License
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in
11
+ # all copies or substantial portions of the Software.
12
+ #
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ # THE SOFTWARE.
20
+
21
+ require 'test_helper'
22
+ require 'csv'
23
+
24
+ class WriteApiIntegrationTest < MiniTest::Test
25
+ def setup
26
+ WebMock.allow_net_connect!
27
+ end
28
+
29
+ def test_write_into_influx_db
30
+ client = InfluxDB2::Client.new('http://localhost:9999', 'my-token',
31
+ bucket: 'my-bucket',
32
+ org: 'my-org',
33
+ precision: InfluxDB2::WritePrecision::NANOSECOND,
34
+ use_ssl: false)
35
+
36
+ now = Time.now.utc
37
+
38
+ measurement = 'h2o_' + now.to_i.to_s
39
+ point = InfluxDB2::Point.new(name: measurement)
40
+ .add_tag('location', 'europe')
41
+ .add_field('level', 2)
42
+ .time(now, InfluxDB2::WritePrecision::NANOSECOND)
43
+
44
+ client.create_write_api.write(data: point)
45
+
46
+ csv = _query(measurement)
47
+
48
+ refute_nil csv
49
+ assert_equal measurement, csv[0]['_measurement']
50
+ assert_equal 'europe', csv[0]['location']
51
+ assert_equal '2', csv[0]['_value']
52
+ assert_equal 'level', csv[0]['_field']
53
+ end
54
+
55
+ private
56
+
57
+ def _query(measurement)
58
+ query = { 'query': 'from(bucket: "my-bucket") |> range(start: -15m, stop: now()) '\
59
+ "|> filter(fn: (r) => r._measurement == \"#{measurement}\")", 'type': 'flux' }
60
+
61
+ uri = URI.parse('http://localhost:9999/api/v2/query?org=my-org')
62
+ request = Net::HTTP::Post.new(uri.request_uri)
63
+ request['Authorization'] = 'Token my-token'
64
+ request.body = query.to_json
65
+
66
+ http = Net::HTTP.new(uri.host, uri.port)
67
+ begin
68
+ response = http.request(request)
69
+
70
+ CSV.parse(response.body, headers: true)
71
+ ensure
72
+ http.finish if http.started?
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,235 @@
1
+ # The MIT License
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in
11
+ # all copies or substantial portions of the Software.
12
+ #
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ # THE SOFTWARE.
20
+
21
+ require 'test_helper'
22
+
23
+ class WriteApiTest < MiniTest::Test
24
+ def setup
25
+ WebMock.disable_net_connect!
26
+ end
27
+
28
+ def test_required_arguments
29
+ client = InfluxDB2::Client.new('http://localhost:9999', 'my-token')
30
+ write_api = client.create_write_api
31
+
32
+ # precision
33
+ assert_raises ArgumentError do
34
+ write_api.write(data: {}, bucket: 'my-bucket', org: 'my-org')
35
+ end
36
+ # bucket
37
+ assert_raises ArgumentError do
38
+ write_api.write(data: {}, org: 'my-org', precision: InfluxDB2::WritePrecision::NANOSECOND)
39
+ end
40
+ # org
41
+ assert_raises ArgumentError do
42
+ write_api.write(data: {}, bucket: 'my-bucket', precision: InfluxDB2::WritePrecision::NANOSECOND)
43
+ end
44
+ end
45
+
46
+ def test_default_arguments_
47
+ client = InfluxDB2::Client.new('http://localhost:9999', 'my-token',
48
+ bucket: 'my-bucket',
49
+ org: 'my-org',
50
+ precision: InfluxDB2::WritePrecision::NANOSECOND)
51
+ write_api = client.create_write_api
52
+
53
+ # without argument errors
54
+ write_api.write(data: {})
55
+ end
56
+
57
+ def test_write_line_protocol
58
+ stub_request(:any, 'http://localhost:9999/api/v2/write?bucket=my-bucket&org=my-org&precision=ns')
59
+ .to_return(status: 204)
60
+ client = InfluxDB2::Client.new('http://localhost:9999', 'my-token',
61
+ bucket: 'my-bucket',
62
+ org: 'my-org',
63
+ precision: InfluxDB2::WritePrecision::NANOSECOND,
64
+ use_ssl: false)
65
+
66
+ client.create_write_api.write(data: 'h2o,location=west value=33i 15')
67
+
68
+ assert_requested(:post, 'http://localhost:9999/api/v2/write?bucket=my-bucket&org=my-org&precision=ns',
69
+ times: 1, body: 'h2o,location=west value=33i 15')
70
+ end
71
+
72
+ def test_write_point
73
+ stub_request(:any, 'http://localhost:9999/api/v2/write?bucket=my-bucket&org=my-org&precision=ns')
74
+ .to_return(status: 204)
75
+ client = InfluxDB2::Client.new('http://localhost:9999', 'my-token',
76
+ bucket: 'my-bucket',
77
+ org: 'my-org',
78
+ precision: InfluxDB2::WritePrecision::NANOSECOND,
79
+ use_ssl: false)
80
+
81
+ client.create_write_api.write(data: InfluxDB2::Point.new(name: 'h2o')
82
+ .add_tag('location', 'europe')
83
+ .add_field('level', 2))
84
+
85
+ assert_requested(:post, 'http://localhost:9999/api/v2/write?bucket=my-bucket&org=my-org&precision=ns',
86
+ times: 1, body: 'h2o,location=europe level=2i')
87
+ end
88
+
89
+ def test_write_hash
90
+ stub_request(:any, 'http://localhost:9999/api/v2/write?bucket=my-bucket&org=my-org&precision=ns')
91
+ .to_return(status: 204)
92
+ client = InfluxDB2::Client.new('http://localhost:9999', 'my-token',
93
+ bucket: 'my-bucket',
94
+ org: 'my-org',
95
+ precision: InfluxDB2::WritePrecision::NANOSECOND,
96
+ use_ssl: false)
97
+
98
+ client.create_write_api.write(data: { name: 'h2o',
99
+ tags: { host: 'aws', region: 'us' },
100
+ fields: { level: 5, saturation: '99%' }, time: 123 })
101
+
102
+ expected = 'h2o,host=aws,region=us level=5i,saturation="99%" 123'
103
+ assert_requested(:post, 'http://localhost:9999/api/v2/write?bucket=my-bucket&org=my-org&precision=ns',
104
+ times: 1, body: expected)
105
+ end
106
+
107
+ def test_write_collection
108
+ stub_request(:any, 'http://localhost:9999/api/v2/write?bucket=my-bucket&org=my-org&precision=ns')
109
+ .to_return(status: 204)
110
+ client = InfluxDB2::Client.new('http://localhost:9999', 'my-token',
111
+ bucket: 'my-bucket',
112
+ org: 'my-org',
113
+ precision: InfluxDB2::WritePrecision::NANOSECOND,
114
+ use_ssl: false)
115
+
116
+ point = InfluxDB2::Point.new(name: 'h2o')
117
+ .add_tag('location', 'europe')
118
+ .add_field('level', 2)
119
+
120
+ hash = { name: 'h2o',
121
+ tags: { host: 'aws', region: 'us' },
122
+ fields: { level: 5, saturation: '99%' }, time: 123 }
123
+
124
+ client.create_write_api.write(data: ['h2o,location=west value=33i 15', nil, '', point, hash])
125
+
126
+ expected = "h2o,location=west value=33i 15\nh2o,location=europe level=2i"\
127
+ "\nh2o,host=aws,region=us level=5i,saturation=\"99%\" 123"
128
+ assert_requested(:post, 'http://localhost:9999/api/v2/write?bucket=my-bucket&org=my-org&precision=ns',
129
+ times: 1, body: expected)
130
+ end
131
+
132
+ def test_authorization_header
133
+ stub_request(:any, 'http://localhost:9999/api/v2/write?bucket=my-bucket&org=my-org&precision=ns')
134
+ .to_return(status: 204)
135
+ client = InfluxDB2::Client.new('http://localhost:9999', 'my-token',
136
+ bucket: 'my-bucket',
137
+ org: 'my-org',
138
+ precision: InfluxDB2::WritePrecision::NANOSECOND,
139
+ use_ssl: false)
140
+
141
+ client.create_write_api.write(data: 'h2o,location=west value=33i 15')
142
+
143
+ assert_requested(:post, 'http://localhost:9999/api/v2/write?bucket=my-bucket&org=my-org&precision=ns',
144
+ times: 1, headers: { 'Authorization' => 'Token my-token' })
145
+ end
146
+
147
+ def test_without_data
148
+ stub_request(:any, 'http://localhost:9999/api/v2/write?bucket=my-bucket&org=my-org&precision=ns')
149
+ .to_return(status: 204)
150
+ client = InfluxDB2::Client.new('http://localhost:9999', 'my-token',
151
+ bucket: 'my-bucket',
152
+ org: 'my-org',
153
+ precision: InfluxDB2::WritePrecision::NANOSECOND)
154
+
155
+ client.create_write_api.write(data: '')
156
+
157
+ assert_requested(:post, 'http://localhost:9999/api/v2/write?bucket=my-bucket&org=my-org&precision=ns', times: 0)
158
+ end
159
+
160
+ def test_influx_exception
161
+ error_body = '{"code":"invalid","message":"unable to parse '\
162
+ '\'h2o_feet, location=coyote_creek water_level=1.0 1\': missing tag key"}'
163
+
164
+ stub_request(:any, 'http://localhost:9999/api/v2/write?bucket=my-bucket&org=my-org&precision=ns')
165
+ .to_return(status: 400, headers: { 'X-Platform-Error-Code' => 'invalid' }, body: error_body)
166
+
167
+ client = InfluxDB2::Client.new('http://localhost:9999', 'my-token',
168
+ bucket: 'my-bucket',
169
+ org: 'my-org',
170
+ precision: InfluxDB2::WritePrecision::NANOSECOND,
171
+ use_ssl: false)
172
+
173
+ error = assert_raises InfluxDB2::InfluxError do
174
+ client.create_write_api.write(data: 'h2o,location=west value=33i 15')
175
+ end
176
+
177
+ assert_equal '400', error.code
178
+ assert_equal 'invalid', error.reference
179
+ assert_equal "unable to parse 'h2o_feet, location=coyote_creek water_level=1.0 1': missing tag key", error.message
180
+ end
181
+
182
+ def test_follow_redirect
183
+ stub_request(:any, 'http://localhost:9999/api/v2/write?bucket=my-bucket&org=my-org&precision=ns')
184
+ .to_return(status: 307, headers:
185
+ { 'location' => 'http://localhost:9090/api/v2/write?bucket=my-bucket&org=my-org&precision=ns' })
186
+ .then.to_return(status: 204)
187
+ stub_request(:any, 'http://localhost:9090/api/v2/write?bucket=my-bucket&org=my-org&precision=ns')
188
+ .to_return(status: 204)
189
+
190
+ client = InfluxDB2::Client.new('http://localhost:9999', 'my-token',
191
+ bucket: 'my-bucket',
192
+ org: 'my-org',
193
+ precision: InfluxDB2::WritePrecision::NANOSECOND,
194
+ use_ssl: false)
195
+
196
+ client.create_write_api.write(data: 'h2o,location=west value=33i 15')
197
+
198
+ assert_requested(:post, 'http://localhost:9999/api/v2/write?bucket=my-bucket&org=my-org&precision=ns',
199
+ times: 1, body: 'h2o,location=west value=33i 15')
200
+ assert_requested(:post, 'http://localhost:9090/api/v2/write?bucket=my-bucket&org=my-org&precision=ns',
201
+ times: 1, body: 'h2o,location=west value=33i 15')
202
+ end
203
+
204
+ def test_follow_redirect_max
205
+ stub_request(:any, 'http://localhost:9999/api/v2/write?bucket=my-bucket&org=my-org&precision=ns')
206
+ .to_return(status: 307, headers:
207
+ { 'location' => 'http://localhost:9999/api/v2/write?bucket=my-bucket&org=my-org&precision=ns' })
208
+
209
+ client = InfluxDB2::Client.new('http://localhost:9999', 'my-token',
210
+ bucket: 'my-bucket',
211
+ org: 'my-org',
212
+ precision: InfluxDB2::WritePrecision::NANOSECOND,
213
+ max_redirect_count: 5,
214
+ use_ssl: false)
215
+
216
+ error = assert_raises InfluxDB2::InfluxError do
217
+ client.create_write_api.write(data: 'h2o,location=west value=33i 15')
218
+ end
219
+
220
+ assert_equal 'Too many HTTP redirects. Exceeded limit: 5', error.message
221
+ end
222
+
223
+ def test_write_precision_constant
224
+ assert_equal InfluxDB2::WritePrecision::SECOND, InfluxDB2::WritePrecision.new.get_from_value('s')
225
+ assert_equal InfluxDB2::WritePrecision::MILLISECOND, InfluxDB2::WritePrecision.new.get_from_value('ms')
226
+ assert_equal InfluxDB2::WritePrecision::MICROSECOND, InfluxDB2::WritePrecision.new.get_from_value('us')
227
+ assert_equal InfluxDB2::WritePrecision::NANOSECOND, InfluxDB2::WritePrecision.new.get_from_value('ns')
228
+
229
+ error = assert_raises RuntimeError do
230
+ InfluxDB2::WritePrecision.new.get_from_value('not_supported')
231
+ end
232
+
233
+ assert_equal 'The time precision not_supported is not supported.', error.message
234
+ end
235
+ end
@@ -0,0 +1,36 @@
1
+ # The MIT License
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in
11
+ # all copies or substantial portions of the Software.
12
+ #
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ # THE SOFTWARE.
20
+
21
+ require 'simplecov'
22
+ SimpleCov.start
23
+
24
+ if ENV['CI'] == 'true'
25
+ require 'codecov'
26
+ SimpleCov.formatter = SimpleCov::Formatter::Codecov
27
+ end
28
+
29
+ $LOAD_PATH.unshift File.expand_path('../lib', __dir__)
30
+ require 'influxdb2/client'
31
+
32
+ require 'minitest/autorun'
33
+ require 'minitest/reporters'
34
+ Minitest::Reporters.use!
35
+
36
+ require 'webmock/minitest'
metadata ADDED
@@ -0,0 +1,187 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: influxdb-client
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0.beta
5
+ platform: ruby
6
+ authors:
7
+ - Jakub Bednar
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-01-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: codecov
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.1.16
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.1.16
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest-reporters
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.4'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.4'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '10.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.66.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.66.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: simplecov
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 0.17.1
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.17.1
111
+ - !ruby/object:Gem::Dependency
112
+ name: webmock
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '3.7'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '3.7'
125
+ description: This is the official Ruby library for InfluxDB 2.
126
+ email:
127
+ - jakub.bednar@gmail.com
128
+ executables: []
129
+ extensions: []
130
+ extra_rdoc_files: []
131
+ files:
132
+ - ".circleci/config.yml"
133
+ - ".circleci/setup-rubygems.sh"
134
+ - ".github/PULL_REQUEST_TEMPLATE"
135
+ - ".gitignore"
136
+ - ".rubocop.yml"
137
+ - CHANGELOG.md
138
+ - Gemfile
139
+ - LICENSE
140
+ - README.md
141
+ - Rakefile
142
+ - bin/influxdb-onboarding.sh
143
+ - bin/influxdb-restart.sh
144
+ - influxdb-client.gemspec
145
+ - lib/influxdb2/client.rb
146
+ - lib/influxdb2/client/client.rb
147
+ - lib/influxdb2/client/influx_error.rb
148
+ - lib/influxdb2/client/point.rb
149
+ - lib/influxdb2/client/version.rb
150
+ - lib/influxdb2/client/write_api.rb
151
+ - test/influxdb/client_test.rb
152
+ - test/influxdb/point_test.rb
153
+ - test/influxdb/write_api_integration_test.rb
154
+ - test/influxdb/write_api_test.rb
155
+ - test/test_helper.rb
156
+ homepage: https://github.com/influxdata/influxdb-client-ruby
157
+ licenses:
158
+ - MIT
159
+ metadata:
160
+ homepage_uri: https://github.com/influxdata/influxdb-client-ruby
161
+ source_code_uri: https://github.com/influxdata/influxdb-client-ruby
162
+ changelog_uri: https://raw.githubusercontent.com/influxdata/influxdb-client-ruby/master/CHANGELOG.md
163
+ post_install_message:
164
+ rdoc_options: []
165
+ require_paths:
166
+ - lib
167
+ required_ruby_version: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ version: 2.2.0
172
+ required_rubygems_version: !ruby/object:Gem::Requirement
173
+ requirements:
174
+ - - ">"
175
+ - !ruby/object:Gem::Version
176
+ version: 1.3.1
177
+ requirements: []
178
+ rubygems_version: 3.0.3
179
+ signing_key:
180
+ specification_version: 4
181
+ summary: Ruby library for InfluxDB 2.
182
+ test_files:
183
+ - test/influxdb/client_test.rb
184
+ - test/influxdb/point_test.rb
185
+ - test/influxdb/write_api_integration_test.rb
186
+ - test/influxdb/write_api_test.rb
187
+ - test/test_helper.rb