dyndnsd 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a8373e34fd44e861f221c7c1161190b337ef9c29b0ab1e78ffffba5a71640424
4
- data.tar.gz: 0c65baa8f6ec8f2da2e2b0cd9789f7b0ed3c704fecb44d7463b9181044281a8c
3
+ metadata.gz: 52b78d9faf8be67cd76202d2f6060ee5f6b96c382603d7431f906a5b03b3c468
4
+ data.tar.gz: 889f266280f47c44418fca138d5253f1eaee7ef5ab79555d96e76b455d74d029
5
5
  SHA512:
6
- metadata.gz: e6b2c0fa580f6cb11317cf22444ff86833bf2cf5615c1a27519e2ef0f9b5d0855be5cb12ad527f013bc8274e4992d360e34dcc3a4c07be8db185dc126c249137
7
- data.tar.gz: 25d1751affc10bfb8210142440fe6c191e1d84396f3d75d9eb1d71f7a9727aa41a9a09984fd4ff68caaec07abf8b44d2b620fdd78e360c0af3d6313ada441142
6
+ metadata.gz: 72c3cb12a042ebbc9c5ccb8ee00d6278165e5f25acc00e0666793e9ed0bae8bffbcb9057b63fbf7d4ed22c696fee664ce0ffd872c554042ec098437df6853181
7
+ data.tar.gz: 44dae96b17ce80eaf60de42bf5ae30444b911659c779182598bd06ce5d936db55d672c5c1b846deb76e911752b81b2613ae3d5eebb4d823631deb49ca4473f29
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
1
  .DS_Store
2
2
  *.lock
3
3
  pkg/*
4
+ .yardoc
data/.rubocop.yml CHANGED
@@ -1,14 +1,9 @@
1
- inherit_from: .rubocop_todo.yml
2
-
3
1
  AllCops:
4
2
  TargetRubyVersion: '2.3'
5
3
 
6
4
  Gemspec/OrderedDependencies:
7
5
  Enabled: false
8
6
 
9
- Layout/AlignHash:
10
- Enabled: false
11
-
12
7
  Layout/EmptyLineAfterGuardClause:
13
8
  Enabled: false
14
9
 
@@ -16,9 +11,15 @@ Layout/EmptyLineAfterGuardClause:
16
11
  Layout/EmptyLinesAroundArguments:
17
12
  Enabled: false
18
13
 
19
- Layout/LeadingBlankLines:
14
+ Layout/HashAlignment:
20
15
  Enabled: false
21
16
 
17
+ Layout/LeadingEmptyLines:
18
+ Enabled: false
19
+
20
+ Layout/LineLength:
21
+ Max: 200
22
+
22
23
  Layout/SpaceInsideHashLiteralBraces:
23
24
  Enabled: false
24
25
 
@@ -34,16 +35,13 @@ Metrics/ClassLength:
34
35
  Metrics/CyclomaticComplexity:
35
36
  Enabled: false
36
37
 
37
- Metrics/LineLength:
38
- Max: 200
39
-
40
38
  Metrics/MethodLength:
41
39
  Enabled: false
42
40
 
43
41
  Metrics/PerceivedComplexity:
44
42
  Enabled: false
45
43
 
46
- Naming/UncommunicativeMethodParamName:
44
+ Naming/MethodParameterName:
47
45
  Enabled: false
48
46
 
49
47
  Naming/MemoizedInstanceVariableName:
@@ -64,6 +62,15 @@ Style/FrozenStringLiteralComment:
64
62
  Style/GuardClause:
65
63
  Enabled: false
66
64
 
65
+ Style/HashEachMethods:
66
+ Enabled: true
67
+
68
+ Style/HashTransformKeys:
69
+ Enabled: true
70
+
71
+ Style/HashTransformValues:
72
+ Enabled: true
73
+
67
74
  Style/IdenticalConditionalBranches:
68
75
  Enabled: false
69
76
 
data/.solargraph.yml ADDED
@@ -0,0 +1,16 @@
1
+ ---
2
+ include:
3
+ - "**/*.rb"
4
+ - "bin/dyndnsd"
5
+ exclude:
6
+ - spec/**/*
7
+ - test/**/*
8
+ - vendor/**/*
9
+ - ".bundle/**/*"
10
+ require: []
11
+ domains: []
12
+ reporters:
13
+ - rubocop
14
+ - require_not_found
15
+ require_paths: []
16
+ max_files: 5000
data/.travis.yml CHANGED
@@ -1,8 +1,12 @@
1
1
  ---
2
- sudo: false
2
+ os: linux
3
3
  language: ruby
4
4
  rvm:
5
- - 2.6
6
- - 2.5
7
- - 2.4
8
- - 2.3
5
+ - 2.7
6
+ - 2.6
7
+ - 2.5
8
+ - 2.4
9
+ - 2.3
10
+
11
+ script:
12
+ - bundle exec rake travis
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.1.0 (March 1, 2020)
4
+
5
+ IMPROVEMENTS:
6
+
7
+ - Add Ruby 2.7 support
8
+ - Add [solargraph](https://github.com/castwide/solargraph) to dev tooling as Ruby Language Server usable e.g. for IDEs (used solargraph version not compatible with Ruby 2.7 as bundler-audit 0.6.x requires old `thor` gem)
9
+ - Document code using YARD tags, e.g. for type information and better code completion
10
+
3
11
  ## 2.0.0 (January 25, 2019)
4
12
 
5
13
  IMPROVEMENTS:
@@ -9,7 +17,7 @@ IMPROVEMENTS:
9
17
  - Better code maintainability by refactorings
10
18
  - Update dependencies, mainly `rack` to new major version 2
11
19
  - Add Ruby 2.5 and Ruby 2.6 support
12
- - Add experimental [OpenTracing](http://opentracing.io/) support with [CNCF Jaeger](https://github.com/jaegertracing/jaeger)
20
+ - Add experimental [OpenTracing](https://opentracing.io/) support with [CNCF Jaeger](https://github.com/jaegertracing/jaeger)
13
21
  - Support host offlining by deleting the associated DNS records
14
22
  - Add textfile reporter to write Graphite-style metrics (also compatible with [Prometheus](https://prometheus.io/)) into a file
15
23
 
data/Rakefile CHANGED
@@ -7,4 +7,16 @@ RSpec::Core::RakeTask.new(:spec)
7
7
  RuboCop::RakeTask.new
8
8
  Bundler::Audit::Task.new
9
9
 
10
+ desc 'Should be run by developer once to prepare initial solargraph usage (fill caches etc.)'
11
+ task :'solargraph:init' do
12
+ sh 'solargraph download-core'
13
+ end
14
+
15
+ desc 'Run experimental solargraph type checker'
16
+ task :'solargraph:tc' do
17
+ sh 'solargraph typecheck'
18
+ end
19
+
10
20
  task default: [:rubocop, :spec, 'bundle:audit']
21
+
22
+ task travis: [:default, :'solargraph:tc']
data/dyndnsd.gemspec CHANGED
@@ -24,13 +24,14 @@ Gem::Specification.new do |s|
24
24
  s.add_runtime_dependency 'json'
25
25
  s.add_runtime_dependency 'metriks'
26
26
  s.add_runtime_dependency 'opentracing', '~> 0.5.0'
27
- s.add_runtime_dependency 'rack-tracer', '~> 0.8.0'
27
+ s.add_runtime_dependency 'rack-tracer', '~> 0.9.0'
28
28
  s.add_runtime_dependency 'jaeger-client', '~> 0.10.0'
29
29
 
30
30
  s.add_development_dependency 'bundler'
31
31
  s.add_development_dependency 'rake'
32
32
  s.add_development_dependency 'rspec'
33
33
  s.add_development_dependency 'rack-test'
34
- s.add_development_dependency 'rubocop', '~> 0.63.0'
35
- s.add_development_dependency 'bundler-audit'
34
+ s.add_development_dependency 'rubocop', '~> 0.80.0'
35
+ s.add_development_dependency 'bundler-audit', '~> 0.6.0'
36
+ s.add_development_dependency 'solargraph'
36
37
  end
@@ -7,10 +7,12 @@ module Dyndnsd
7
7
 
8
8
  def_delegators :@db, :[], :[]=, :each, :has_key?
9
9
 
10
+ # @param db_file [String]
10
11
  def initialize(db_file)
11
12
  @db_file = db_file
12
13
  end
13
14
 
15
+ # @return [void]
14
16
  def load
15
17
  if File.file?(@db_file)
16
18
  @db = JSON.parse(File.open(@db_file, 'r', &:read))
@@ -20,6 +22,7 @@ module Dyndnsd
20
22
  @db_hash = @db.hash
21
23
  end
22
24
 
25
+ # @return [void]
23
26
  def save
24
27
  Helper.span('database_save') do |_span|
25
28
  File.open(@db_file, 'w') { |f| JSON.dump(@db, f) }
@@ -27,6 +30,7 @@ module Dyndnsd
27
30
  end
28
31
  end
29
32
 
33
+ # @return [Boolean]
30
34
  def changed?
31
35
  @db_hash != @db.hash
32
36
  end
@@ -2,6 +2,8 @@
2
2
  module Dyndnsd
3
3
  module Generator
4
4
  class Bind
5
+ # @param domain [String]
6
+ # @param config [Hash{String => Object}]
5
7
  def initialize(domain, config)
6
8
  @domain = domain
7
9
  @ttl = config['ttl']
@@ -10,6 +12,8 @@ module Dyndnsd
10
12
  @additional_zone_content = config['additional_zone_content']
11
13
  end
12
14
 
15
+ # @param db [Dyndnsd::Database]
16
+ # @return [String]
13
17
  def generate(db)
14
18
  out = []
15
19
  out << "$TTL #{@ttl}"
@@ -3,6 +3,9 @@ require 'ipaddr'
3
3
 
4
4
  module Dyndnsd
5
5
  class Helper
6
+ # @param hostname [String]
7
+ # @param domain [String]
8
+ # @return [Boolean]
6
9
  def self.fqdn_valid?(hostname, domain)
7
10
  return false if hostname.length < domain.length + 2
8
11
  return false if !hostname.end_with?(domain)
@@ -11,6 +14,8 @@ module Dyndnsd
11
14
  true
12
15
  end
13
16
 
17
+ # @param ip [String]
18
+ # @return [Boolean]
14
19
  def self.ip_valid?(ip)
15
20
  IPAddr.new(ip)
16
21
  true
@@ -18,15 +23,26 @@ module Dyndnsd
18
23
  false
19
24
  end
20
25
 
26
+ # @param username [String]
27
+ # @param password [String]
28
+ # @param users [Hash]
29
+ # @return [Boolean]
21
30
  def self.user_allowed?(username, password, users)
22
31
  (users.key? username) && (users[username]['password'] == password)
23
32
  end
24
33
 
34
+ # @param hostname [String]
35
+ # @param myips [Array]
36
+ # @param hosts [Hash]
37
+ # @return [Boolean]
25
38
  def self.changed?(hostname, myips, hosts)
26
39
  # myips order is always deterministic
27
40
  ((!hosts.include? hostname) || (hosts[hostname] != myips)) && !myips.empty?
28
41
  end
29
42
 
43
+ # @param operation [String]
44
+ # @param block [Proc]
45
+ # @return [void]
30
46
  def self.span(operation, &block)
31
47
  scope = OpenTracing.start_active_span(operation)
32
48
  span = scope.span
@@ -2,10 +2,13 @@
2
2
  module Dyndnsd
3
3
  module Responder
4
4
  class DynDNSStyle
5
+ # @param app [#call]
5
6
  def initialize(app)
6
7
  @app = app
7
8
  end
8
9
 
10
+ # @param env [Hash{String => String}]
11
+ # @return [Array{Integer,Hash{String => String},Array{String}}]
9
12
  def call(env)
10
13
  @app.call(env).tap do |status_code, headers, body|
11
14
  if headers.key?('X-DynDNS-Response')
@@ -18,6 +21,10 @@ module Dyndnsd
18
21
 
19
22
  private
20
23
 
24
+ # @param status_code [Integer]
25
+ # @param headers [Hash{String => String}]
26
+ # @param body [Array{String}]
27
+ # @return [Array{Integer,Hash{String => String},Array{String}}]
21
28
  def decorate_dyndnsd_response(status_code, headers, body)
22
29
  if status_code == 200
23
30
  [200, {'Content-Type' => 'text/plain'}, [get_success_body(body[0], body[1])]]
@@ -26,6 +33,10 @@ module Dyndnsd
26
33
  end
27
34
  end
28
35
 
36
+ # @param status_code [Integer]
37
+ # @param headers [Hash{String => String}]
38
+ # @param _body [Array{String}]
39
+ # @return [Array{Integer,Hash{String => String},Array{String}}]
29
40
  def decorate_other_response(status_code, headers, _body)
30
41
  if status_code == 400
31
42
  [status_code, headers, ['Bad Request']]
@@ -34,10 +45,14 @@ module Dyndnsd
34
45
  end
35
46
  end
36
47
 
48
+ # @param changes [Array{Symbol}]
49
+ # @param myips [Array{String}]
50
+ # @return [String]
37
51
  def get_success_body(changes, myips)
38
52
  changes.map { |change| "#{change} #{myips.join(' ')}" }.join("\n")
39
53
  end
40
54
 
55
+ # @return [Hash{String => Object}]
41
56
  def error_response_map
42
57
  {
43
58
  # general http errors
@@ -2,10 +2,13 @@
2
2
  module Dyndnsd
3
3
  module Responder
4
4
  class RestStyle
5
+ # @param app [#call]
5
6
  def initialize(app)
6
7
  @app = app
7
8
  end
8
9
 
10
+ # @param env [Hash{String => String}]
11
+ # @return [Array{Integer,Hash{String => String},Array{String}}]
9
12
  def call(env)
10
13
  @app.call(env).tap do |status_code, headers, body|
11
14
  if headers.key?('X-DynDNS-Response')
@@ -18,6 +21,10 @@ module Dyndnsd
18
21
 
19
22
  private
20
23
 
24
+ # @param status_code [Integer]
25
+ # @param headers [Hash{String => String}]
26
+ # @param body [Array{String}]
27
+ # @return [Array{Integer,Hash{String => String},Array{String}}]
21
28
  def decorate_dyndnsd_response(status_code, headers, body)
22
29
  if status_code == 200
23
30
  [200, {'Content-Type' => 'text/plain'}, [get_success_body(body[0], body[1])]]
@@ -26,6 +33,10 @@ module Dyndnsd
26
33
  end
27
34
  end
28
35
 
36
+ # @param status_code [Integer]
37
+ # @param headers [Hash{String => String}]
38
+ # @param _body [Array{String}]
39
+ # @return [Array{Integer,Hash{String => String},Array{String}}]
29
40
  def decorate_other_response(status_code, headers, _body)
30
41
  if status_code == 400
31
42
  [status_code, headers, ['Bad Request']]
@@ -34,10 +45,14 @@ module Dyndnsd
34
45
  end
35
46
  end
36
47
 
48
+ # @param changes [Array{Symbol}]
49
+ # @param myips [Array{String}]
50
+ # @return [String]
37
51
  def get_success_body(changes, myips)
38
52
  changes.map { |change| change == :good ? "Changed to #{myips.join(' ')}" : "No change needed for #{myips.join(' ')}" }.join("\n")
39
53
  end
40
54
 
55
+ # @return [Hash{String => Object}]
41
56
  def error_response_map
42
57
  {
43
58
  # general http errors
@@ -5,8 +5,11 @@ require 'metriks'
5
5
 
6
6
  module Dyndnsd
7
7
  class TextfileReporter
8
+ # @return [String]
8
9
  attr_reader :file
9
10
 
11
+ # @param file [String]
12
+ # @param options [Hash{Symbol => Object}]
10
13
  def initialize(file, options = {})
11
14
  @file = file
12
15
 
@@ -17,6 +20,7 @@ module Dyndnsd
17
20
  @on_error = options[:on_error] || proc { |ex| }
18
21
  end
19
22
 
23
+ # @return [void]
20
24
  def start
21
25
  @thread ||= Thread.new do
22
26
  loop do
@@ -33,16 +37,19 @@ module Dyndnsd
33
37
  end
34
38
  end
35
39
 
40
+ # @return [void]
36
41
  def stop
37
42
  @thread&.kill
38
43
  @thread = nil
39
44
  end
40
45
 
46
+ # @return [void]
41
47
  def restart
42
48
  stop
43
49
  start
44
50
  end
45
51
 
52
+ # @return [void]
46
53
  def write
47
54
  File.open(@file, 'w') do |f|
48
55
  @registry.each do |name, metric|
@@ -85,6 +92,12 @@ module Dyndnsd
85
92
  end
86
93
  end
87
94
 
95
+ # @param file [String]
96
+ # @param base_name [String]
97
+ # @param metric [Object]
98
+ # @param keys [Array{Symbol}]
99
+ # @param snapshot_keys [Array{Symbol}]
100
+ # @return [void]
88
101
  def write_metric(file, base_name, metric, keys, snapshot_keys = [])
89
102
  time = Time.now.to_i
90
103
 
@@ -2,18 +2,22 @@
2
2
  module Dyndnsd
3
3
  module Updater
4
4
  class CommandWithBindZone
5
+ # @param domain [String]
6
+ # @param config [Hash{String => Object}]
5
7
  def initialize(domain, config)
6
8
  @zone_file = config['zone_file']
7
9
  @command = config['command']
8
10
  @generator = Generator::Bind.new(domain, config)
9
11
  end
10
12
 
11
- def update(zone)
13
+ # @param db [Dyndnsd::Database]
14
+ # @return [void]
15
+ def update(db)
12
16
  Helper.span('updater_update') do |span|
13
17
  span.set_tag('dyndnsd.updater.name', self.class.name.split('::').last)
14
18
 
15
19
  # write zone file in bind syntax
16
- File.open(@zone_file, 'w') { |f| f.write(@generator.generate(zone)) }
20
+ File.open(@zone_file, 'w') { |f| f.write(@generator.generate(db)) }
17
21
  # call user-defined command
18
22
  pid = fork do
19
23
  exec @command
@@ -1,4 +1,4 @@
1
1
 
2
2
  module Dyndnsd
3
- VERSION = '2.0.0'.freeze
3
+ VERSION = '2.1.0'.freeze
4
4
  end
data/lib/dyndnsd.rb CHANGED
@@ -21,21 +21,32 @@ require 'dyndnsd/textfile_reporter'
21
21
  require 'dyndnsd/version'
22
22
 
23
23
  module Dyndnsd
24
+ # @return [Logger]
24
25
  def self.logger
25
26
  @logger
26
27
  end
27
28
 
29
+ # @param logger [Logger]
30
+ # @return [Logger]
28
31
  def self.logger=(logger)
29
32
  @logger = logger
30
33
  end
31
34
 
32
35
  class LogFormatter
36
+ # @param lvl [Object]
37
+ # @param _time [DateTime]
38
+ # @param _progname [String]
39
+ # @param msg [Object]
40
+ # @return [String]
33
41
  def call(lvl, _time, _progname, msg)
34
42
  format("[%s] %-5s %s\n", Time.now.strftime('%Y-%m-%d %H:%M:%S'), lvl, msg.to_s)
35
43
  end
36
44
  end
37
45
 
38
46
  class Daemon
47
+ # @param config [Hash{String => Object}]
48
+ # @param db [Dyndnsd::Database]
49
+ # @param updater [#update]
39
50
  def initialize(config, db, updater)
40
51
  @users = config['users']
41
52
  @domain = config['domain']
@@ -51,6 +62,9 @@ module Dyndnsd
51
62
  end
52
63
  end
53
64
 
65
+ # @param username [String]
66
+ # @param password [String]
67
+ # @return [Boolean]
54
68
  def authorized?(username, password)
55
69
  Helper.span('check_authorized') do |span|
56
70
  span.set_tag('dyndnsd.user', username)
@@ -64,6 +78,8 @@ module Dyndnsd
64
78
  end
65
79
  end
66
80
 
81
+ # @param env [Hash{String => String}]
82
+ # @return [Array{Integer,Hash{String => String},Array{String}}]
67
83
  def call(env)
68
84
  return [422, {'X-DynDNS-Response' => 'method_forbidden'}, []] if env['REQUEST_METHOD'] != 'GET'
69
85
  return [422, {'X-DynDNS-Response' => 'not_found'}, []] if env['PATH_INFO'] != '/nic/update'
@@ -71,6 +87,7 @@ module Dyndnsd
71
87
  handle_dyndns_request(env)
72
88
  end
73
89
 
90
+ # @return [void]
74
91
  def self.run!
75
92
  if ARGV.length != 1
76
93
  puts 'Usage: dyndnsd config_file'
@@ -109,6 +126,8 @@ module Dyndnsd
109
126
 
110
127
  private
111
128
 
129
+ # @param params [Hash{String => String}]
130
+ # @return [Array{String}]
112
131
  def extract_v4_and_v6_address(params)
113
132
  return [] if !(params['myip'])
114
133
  begin
@@ -120,6 +139,9 @@ module Dyndnsd
120
139
  end
121
140
  end
122
141
 
142
+ # @param env [Hash{String => String}]
143
+ # @param params [Hash{String => String}]
144
+ # @return [Array{String}]
123
145
  def extract_myips(env, params)
124
146
  # require presence of myip parameter as valid IPAddr (v4) and valid myip6
125
147
  return extract_v4_and_v6_address(params) if params.key?('myip6')
@@ -134,6 +156,9 @@ module Dyndnsd
134
156
  [env['REMOTE_ADDR']]
135
157
  end
136
158
 
159
+ # @param hostnames [String]
160
+ # @param myips [Array{String}]
161
+ # @return [Array{Symbol}]
137
162
  def process_changes(hostnames, myips)
138
163
  changes = []
139
164
  Helper.span('process_changes') do |span|
@@ -158,6 +183,7 @@ module Dyndnsd
158
183
  changes
159
184
  end
160
185
 
186
+ # @return [void]
161
187
  def update_db
162
188
  @db['serial'] += 1
163
189
  Dyndnsd.logger.info "Committing update ##{@db['serial']}"
@@ -166,6 +192,8 @@ module Dyndnsd
166
192
  Metriks.meter('updates.committed').mark
167
193
  end
168
194
 
195
+ # @param env [Hash{String => String}]
196
+ # @return [Array{Integer,Hash{String => String},Array{String}}]
169
197
  def handle_dyndns_request(env)
170
198
  params = Rack::Utils.parse_query(env['QUERY_STRING'])
171
199
 
@@ -204,6 +232,8 @@ module Dyndnsd
204
232
 
205
233
  # SETUP
206
234
 
235
+ # @param config [Hash{String => Object}]
236
+ # @return [void]
207
237
  private_class_method def self.setup_logger(config)
208
238
  if config['logfile']
209
239
  Dyndnsd.logger = Logger.new(config['logfile'])
@@ -215,6 +245,7 @@ module Dyndnsd
215
245
  Dyndnsd.logger.formatter = LogFormatter.new
216
246
  end
217
247
 
248
+ # @return [void]
218
249
  private_class_method def self.setup_traps
219
250
  Signal.trap('INT') do
220
251
  Dyndnsd.logger.info 'Quitting...'
@@ -226,6 +257,8 @@ module Dyndnsd
226
257
  end
227
258
  end
228
259
 
260
+ # @param config [Hash{String => Object}]
261
+ # @return [void]
229
262
  private_class_method def self.setup_monitoring(config)
230
263
  # configure metriks
231
264
  if config['graphite']
@@ -253,6 +286,8 @@ module Dyndnsd
253
286
  end
254
287
  end
255
288
 
289
+ # @param config [Hash{String => Object}]
290
+ # @return [void]
256
291
  private_class_method def self.setup_tracing(config)
257
292
  # configure OpenTracing
258
293
  if config.dig('tracing', 'jaeger')
@@ -267,10 +302,12 @@ module Dyndnsd
267
302
  end
268
303
  end
269
304
 
305
+ # @param config [Hash{String => Object}]
306
+ # @return [void]
270
307
  private_class_method def self.setup_rack(config)
271
308
  # configure daemon
272
309
  db = Database.new(config['db'])
273
- updater = Updater::CommandWithBindZone.new(config['domain'], config['updater']['params']) if config['updater']['name'] == 'command_with_bind_zone'
310
+ updater = Updater::CommandWithBindZone.new(config['domain'], config.dig('updater', 'params')) if config.dig('updater', 'name') == 'command_with_bind_zone'
274
311
  daemon = Daemon.new(config, db, updater)
275
312
 
276
313
  # configure rack
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dyndnsd
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christian Nicolai
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-25 00:00:00.000000000 Z
11
+ date: 2020-03-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 0.8.0
75
+ version: 0.9.0
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 0.8.0
82
+ version: 0.9.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: jaeger-client
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -156,16 +156,30 @@ dependencies:
156
156
  requirements:
157
157
  - - "~>"
158
158
  - !ruby/object:Gem::Version
159
- version: 0.63.0
159
+ version: 0.80.0
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
- version: 0.63.0
166
+ version: 0.80.0
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: bundler-audit
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: 0.6.0
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: 0.6.0
181
+ - !ruby/object:Gem::Dependency
182
+ name: solargraph
169
183
  requirement: !ruby/object:Gem::Requirement
170
184
  requirements:
171
185
  - - ">="
@@ -188,7 +202,7 @@ extra_rdoc_files: []
188
202
  files:
189
203
  - ".gitignore"
190
204
  - ".rubocop.yml"
191
- - ".rubocop_todo.yml"
205
+ - ".solargraph.yml"
192
206
  - ".travis.yml"
193
207
  - CHANGELOG.md
194
208
  - Gemfile
@@ -230,8 +244,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
230
244
  - !ruby/object:Gem::Version
231
245
  version: '0'
232
246
  requirements: []
233
- rubyforge_project:
234
- rubygems_version: 2.7.7
247
+ rubygems_version: 3.0.6
235
248
  signing_key:
236
249
  specification_version: 4
237
250
  summary: dyndnsd.rb
data/.rubocop_todo.yml DELETED
@@ -1,7 +0,0 @@
1
- # This configuration was generated by
2
- # `rubocop --auto-gen-config`
3
- # on 2018-02-23 12:54:10 +0100 using RuboCop version 0.52.1.
4
- # The point is for the user to remove these configuration records
5
- # one by one as the offenses are removed from the code base.
6
- # Note that changes in the inspected code, or installation of new
7
- # versions of RuboCop, may require this file to be generated again.