oxidized-web 0.17.0 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of oxidized-web might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.github/workflows/codeql.yml +4 -4
- data/.github/workflows/ruby.yml +1 -1
- data/.github/workflows/stale.yml +1 -1
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +25 -1
- data/docs/development.md +31 -26
- data/lib/oxidized/web/public/css/oxidized.css +22 -11
- data/lib/oxidized/web/public/scripts/theme-toggle.js +55 -0
- data/lib/oxidized/web/public/weblibs/bootstrap.bundle.js +2 -5
- data/lib/oxidized/web/public/weblibs/bootstrap.bundle.js.map +1 -1
- data/lib/oxidized/web/public/weblibs/bootstrap.css +6 -1
- data/lib/oxidized/web/public/weblibs/bootstrap.css.map +1 -1
- data/lib/oxidized/web/public/weblibs/bootstrap.js +2 -5
- data/lib/oxidized/web/public/weblibs/bootstrap.js.map +1 -1
- data/lib/oxidized/web/public/weblibs/buttons.bootstrap5.css +56 -39
- data/lib/oxidized/web/public/weblibs/buttons.bootstrap5.js +14 -6
- data/lib/oxidized/web/public/weblibs/dataTables.bootstrap5.css +7 -8
- data/lib/oxidized/web/public/weblibs/dataTables.buttons.js +15 -8
- data/lib/oxidized/web/public/weblibs/dataTables.js +331 -277
- data/lib/oxidized/web/version.rb +1 -1
- data/lib/oxidized/web/views/head.haml +2 -0
- data/lib/oxidized/web/views/layout.haml +2 -0
- data/lib/oxidized/web/views/node.haml +3 -3
- data/lib/oxidized/web/views/nodes.haml +3 -3
- data/lib/oxidized/web/views/versions.haml +2 -2
- data/lib/oxidized/web/webapp.rb +9 -2
- data/oxidized-web.gemspec +12 -10
- data/package-lock.json +20 -20
- data/spec/web/node/show_spec.rb +89 -60
- data/spec/web/nodes_spec.rb +7 -0
- metadata +43 -41
data/lib/oxidized/web/version.rb
CHANGED
|
@@ -29,6 +29,8 @@
|
|
|
29
29
|
:'aria-label' => 'Search in Configs'}
|
|
30
30
|
%button.btn.btn-primary{type: 'submit'}
|
|
31
31
|
%i.bi.bi-search
|
|
32
|
+
%button.btn.btn-outline-secondary.ms-2#theme-toggle{type: 'button', :'aria-label' => 'Toggle theme'}
|
|
33
|
+
%i.bi.bi-moon-fill
|
|
32
34
|
|
|
33
35
|
.container-fluid
|
|
34
36
|
=yield
|
|
@@ -5,13 +5,13 @@
|
|
|
5
5
|
%span /
|
|
6
6
|
=@data[:name]
|
|
7
7
|
|
|
8
|
-
%a.link-
|
|
8
|
+
%a.link-body-emphasis.link-underline-opacity-0{title: 'configuration',
|
|
9
9
|
href: url_for("/node/fetch/#{@data[:full_name]}")}
|
|
10
10
|
%i.bi.bi-cloud-download
|
|
11
|
-
%a.link-
|
|
11
|
+
%a.link-body-emphasis.link-underline-opacity-0{title: 'versions',
|
|
12
12
|
href: url_for("/node/version?node_full=#{@data[:full_name]}")}
|
|
13
13
|
%i.bi.bi-stack
|
|
14
|
-
%a.link-
|
|
14
|
+
%a.link-body-emphasis.link-underline-opacity-0{title: 'update',
|
|
15
15
|
href: url_for("/node/next/#{@data[:full_name]}")}
|
|
16
16
|
%i.bi.bi-repeat
|
|
17
17
|
%pre.bg-body-tertiary.border.border-secondary-subtle.rounded
|
|
@@ -45,15 +45,15 @@
|
|
|
45
45
|
%td.time{ epoch: node[:time].to_i }= node[:time]
|
|
46
46
|
%td.time{ epoch: node[:mtime].to_i }= node[:mtime]
|
|
47
47
|
%td
|
|
48
|
-
%a.link-
|
|
48
|
+
%a.link-body-emphasis.link-underline-opacity-0{title: 'Configuration',
|
|
49
49
|
href: url_for("/node/fetch/#{node[:full_name]}")}
|
|
50
50
|
%i.bi.bi-cloud-download
|
|
51
51
|
|
|
52
|
-
%a.link-
|
|
52
|
+
%a.link-body-emphasis.link-underline-opacity-0{title: 'Versions',
|
|
53
53
|
href: url_for("/node/version?node_full=#{node[:full_name]}")}
|
|
54
54
|
%i.bi.bi-stack
|
|
55
55
|
|
|
56
|
-
%a.link-
|
|
56
|
+
%a.link-body-emphasis.link-underline-opacity-0{title: 'Update configuration',
|
|
57
57
|
href: url_for("/node/next/#{node[:full_name]}")}
|
|
58
58
|
%i.bi.bi-repeat
|
|
59
59
|
|
|
@@ -30,12 +30,12 @@
|
|
|
30
30
|
%td
|
|
31
31
|
- params = "node=#{@node}&group=#{@group}&oid=#{x[:oid]}"
|
|
32
32
|
- params = "#{params}&epoch=#{x[:time].to_i}&num=#{nb}"
|
|
33
|
-
%a.link-
|
|
33
|
+
%a.link-body-emphasis.link-underline-opacity-0{title: 'configuration',
|
|
34
34
|
href: url_for("/node/version/view?#{params}")}
|
|
35
35
|
%i.bi.bi-cloud-download
|
|
36
36
|
|
|
37
37
|
- if nb > 1
|
|
38
|
-
%a.link-
|
|
38
|
+
%a.link-body-emphasis.link-underline-opacity-0{title: 'Compare with previous version', href: url_for("/node/version/diffs?#{params}")}
|
|
39
39
|
%i.bi.bi-file-earmark-diff
|
|
40
40
|
|
|
41
41
|
:javascript
|
data/lib/oxidized/web/webapp.rb
CHANGED
|
@@ -31,7 +31,12 @@ module Oxidized
|
|
|
31
31
|
get '/nodes/:filter/*' do
|
|
32
32
|
value, @json = route_parse params[:splat].first
|
|
33
33
|
@data = nodes.list.select do |node|
|
|
34
|
-
next unless node[params[:filter].to_sym] == value
|
|
34
|
+
next unless node[params[:filter].to_sym] == value ||
|
|
35
|
+
(
|
|
36
|
+
params[:filter].to_sym == :group &&
|
|
37
|
+
node[params[:filter].to_sym].nil? &&
|
|
38
|
+
value.to_sym == :default
|
|
39
|
+
)
|
|
35
40
|
|
|
36
41
|
node[:status] = 'never'
|
|
37
42
|
node[:time] = 'never'
|
|
@@ -331,8 +336,10 @@ module Oxidized
|
|
|
331
336
|
def filter_node_vars(serialized_node)
|
|
332
337
|
# Make a deep copy of the data, so we do not impact oxidized
|
|
333
338
|
data = Marshal.load(Marshal.dump(serialized_node))
|
|
339
|
+
# Make sure we work on strings (Oxidized <= 0.34.1 uses symbols)
|
|
340
|
+
data[:vars] = data[:vars].transform_keys(&:to_s)
|
|
334
341
|
|
|
335
|
-
hide_node_vars = settings.configuration[:hide_node_vars]
|
|
342
|
+
hide_node_vars = settings.configuration[:hide_node_vars].map(&:to_s)
|
|
336
343
|
if data[:vars].is_a?(Hash) && hide_node_vars&.any?
|
|
337
344
|
hide_node_vars.each do |key|
|
|
338
345
|
data[:vars][key] = '<hidden>' if data[:vars].has_key?(key)
|
data/oxidized-web.gemspec
CHANGED
|
@@ -33,23 +33,25 @@ Gem::Specification.new do |s|
|
|
|
33
33
|
|
|
34
34
|
s.add_dependency 'charlock_holmes', '>= 0.7.5', '< 0.8.0'
|
|
35
35
|
s.add_dependency 'emk-sinatra-url-for', '~> 0.2'
|
|
36
|
-
|
|
37
|
-
s.add_dependency '
|
|
38
|
-
s.add_dependency '
|
|
39
|
-
s.add_dependency '
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
s.add_dependency '
|
|
36
|
+
# haml 7.0 requires ruby >= 3.2, so keep it < 7
|
|
37
|
+
s.add_dependency 'haml', '>= 6.0.0', '< 7.0.0'
|
|
38
|
+
s.add_dependency 'htmlentities', '>= 4.3.0', '< 4.5.0'
|
|
39
|
+
s.add_dependency 'json', '>= 2.3.0', '< 2.17.0'
|
|
40
|
+
# Only depend on a minimal version of Oxidized so we don't need to
|
|
41
|
+
# update the gemspec for new Oxidized releases
|
|
42
|
+
s.add_dependency 'oxidized', '>= 0.34.1'
|
|
43
|
+
s.add_dependency 'puma', '>= 6.6', '< 7.2'
|
|
44
|
+
s.add_dependency 'sinatra', '>= 4.1.1', '< 4.3.0'
|
|
45
|
+
s.add_dependency 'sinatra-contrib', '>= 4.1.1', '< 4.3.0'
|
|
43
46
|
|
|
44
|
-
s.add_development_dependency 'bundler', '~> 2.2'
|
|
45
47
|
s.add_development_dependency 'minitest', '~> 5.18'
|
|
46
48
|
s.add_development_dependency 'mocha', '~> 2.1'
|
|
47
49
|
s.add_development_dependency 'rack-test', '~> 2.1'
|
|
48
50
|
s.add_development_dependency 'rails_best_practices', '~> 1.19'
|
|
49
51
|
s.add_development_dependency 'rake', '~> 13.0'
|
|
50
|
-
s.add_development_dependency 'rubocop', '~> 1.
|
|
52
|
+
s.add_development_dependency 'rubocop', '~> 1.81.1'
|
|
51
53
|
s.add_development_dependency 'rubocop-minitest', '~> 0.38.0'
|
|
52
|
-
s.add_development_dependency 'rubocop-rails', '~> 2.
|
|
54
|
+
s.add_development_dependency 'rubocop-rails', '~> 2.34.2'
|
|
53
55
|
s.add_development_dependency 'rubocop-rake', '~> 0.7.1'
|
|
54
56
|
s.add_development_dependency 'simplecov', '~> 0.22.0'
|
|
55
57
|
s.add_development_dependency 'simplecov-html', '~> 0.13.1'
|
data/package-lock.json
CHANGED
|
@@ -29,9 +29,9 @@
|
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
31
|
"node_modules/bootstrap": {
|
|
32
|
-
"version": "5.3.
|
|
33
|
-
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.
|
|
34
|
-
"integrity": "sha512-
|
|
32
|
+
"version": "5.3.8",
|
|
33
|
+
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.8.tgz",
|
|
34
|
+
"integrity": "sha512-HP1SZDqaLDPwsNiqRqi5NcP0SSXciX2s9E+RyqJIIqGo+vJeN5AJVM98CXmW/Wux0nQ5L7jeWUdplCEf0Ee+tg==",
|
|
35
35
|
"funding": [
|
|
36
36
|
{
|
|
37
37
|
"type": "github",
|
|
@@ -62,45 +62,45 @@
|
|
|
62
62
|
]
|
|
63
63
|
},
|
|
64
64
|
"node_modules/datatables.net": {
|
|
65
|
-
"version": "2.3.
|
|
66
|
-
"resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-2.3.
|
|
67
|
-
"integrity": "sha512-
|
|
65
|
+
"version": "2.3.5",
|
|
66
|
+
"resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-2.3.5.tgz",
|
|
67
|
+
"integrity": "sha512-Qrwc+vuw8GHo42u1usWTuriNAMW0VvLPSW3j8g3GxvatiD8wS/ZGW32VAYLLfmF4Hz0C/fo2KB3xZBfcpqqVTQ==",
|
|
68
68
|
"dependencies": {
|
|
69
69
|
"jquery": ">=1.7"
|
|
70
70
|
}
|
|
71
71
|
},
|
|
72
72
|
"node_modules/datatables.net-bs5": {
|
|
73
|
-
"version": "2.3.
|
|
74
|
-
"resolved": "https://registry.npmjs.org/datatables.net-bs5/-/datatables.net-bs5-2.3.
|
|
75
|
-
"integrity": "sha512-
|
|
73
|
+
"version": "2.3.5",
|
|
74
|
+
"resolved": "https://registry.npmjs.org/datatables.net-bs5/-/datatables.net-bs5-2.3.5.tgz",
|
|
75
|
+
"integrity": "sha512-2JA2WZz1tBxdVpYAspiqI8POdqEoAZZzqp7tISKaof2P5ufBJb+OLaahxwuB0sF9qcQh1azlU+JH1zsLBXVwXg==",
|
|
76
76
|
"dependencies": {
|
|
77
|
-
"datatables.net": "2.3.
|
|
77
|
+
"datatables.net": "2.3.5",
|
|
78
78
|
"jquery": ">=1.7"
|
|
79
79
|
}
|
|
80
80
|
},
|
|
81
81
|
"node_modules/datatables.net-buttons": {
|
|
82
|
-
"version": "3.2.
|
|
83
|
-
"resolved": "https://registry.npmjs.org/datatables.net-buttons/-/datatables.net-buttons-3.2.
|
|
84
|
-
"integrity": "sha512-
|
|
82
|
+
"version": "3.2.5",
|
|
83
|
+
"resolved": "https://registry.npmjs.org/datatables.net-buttons/-/datatables.net-buttons-3.2.5.tgz",
|
|
84
|
+
"integrity": "sha512-OSTl7evbfe0SMee11lyzu5iv/z8Yp05eh3s1QBte/FNqHcoXN8hlAVSSGpYgk5pj8zwHPYIu6fHeMEue4ARUNg==",
|
|
85
85
|
"dependencies": {
|
|
86
86
|
"datatables.net": "^2",
|
|
87
87
|
"jquery": ">=1.7"
|
|
88
88
|
}
|
|
89
89
|
},
|
|
90
90
|
"node_modules/datatables.net-buttons-bs5": {
|
|
91
|
-
"version": "3.2.
|
|
92
|
-
"resolved": "https://registry.npmjs.org/datatables.net-buttons-bs5/-/datatables.net-buttons-bs5-3.2.
|
|
93
|
-
"integrity": "sha512-
|
|
91
|
+
"version": "3.2.5",
|
|
92
|
+
"resolved": "https://registry.npmjs.org/datatables.net-buttons-bs5/-/datatables.net-buttons-bs5-3.2.5.tgz",
|
|
93
|
+
"integrity": "sha512-3eT/Sd90x7imq9MRcKP9X3j70qg/u+OvtZSNWJEihRf1Mb/Sr8NexQw/Bag/ui6GJHa5dhUeFrOgBSKtEW70iA==",
|
|
94
94
|
"dependencies": {
|
|
95
95
|
"datatables.net-bs5": "^2",
|
|
96
|
-
"datatables.net-buttons": "3.2.
|
|
96
|
+
"datatables.net-buttons": "3.2.5",
|
|
97
97
|
"jquery": ">=1.7"
|
|
98
98
|
}
|
|
99
99
|
},
|
|
100
100
|
"node_modules/dayjs": {
|
|
101
|
-
"version": "1.11.
|
|
102
|
-
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.
|
|
103
|
-
"integrity": "sha512-
|
|
101
|
+
"version": "1.11.19",
|
|
102
|
+
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz",
|
|
103
|
+
"integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw=="
|
|
104
104
|
},
|
|
105
105
|
"node_modules/dayjs-plugin-utc": {
|
|
106
106
|
"version": "0.1.2",
|
data/spec/web/node/show_spec.rb
CHANGED
|
@@ -6,6 +6,28 @@ describe Oxidized::API::WebApp do
|
|
|
6
6
|
Oxidized::API::WebApp
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
+
def expected_json_body(hide_vars: false)
|
|
10
|
+
enable_val = hide_vars ? "<hidden>" : "secret_enable"
|
|
11
|
+
password_val = hide_vars ? "<hidden>" : "secret_password"
|
|
12
|
+
|
|
13
|
+
"<code>{\n "name": "sw5"," \
|
|
14
|
+
"\n "full_name": "sw5.example.com"," \
|
|
15
|
+
"\n "ip": "10.42.12.42"," \
|
|
16
|
+
"\n "group": null,\n "model": "ios"," \
|
|
17
|
+
"\n "last": {" \
|
|
18
|
+
"\n "start": "2025-02-05 19:49:00 +0100"," \
|
|
19
|
+
"\n "end": "2025-02-05 19:49:10 +0100"," \
|
|
20
|
+
"\n "status": "no_connection"," \
|
|
21
|
+
"\n "time": 10\n }," \
|
|
22
|
+
"\n "vars": {" \
|
|
23
|
+
"\n "oxi": "dized"," \
|
|
24
|
+
"\n "enable": "#{enable_val}"," \
|
|
25
|
+
"\n "username": "oxidized"," \
|
|
26
|
+
"\n "password": "#{password_val}"" \
|
|
27
|
+
"\n },\n "mtime": "2025-02-05 19:49:11 +0100"" \
|
|
28
|
+
"\n}</code>"
|
|
29
|
+
end
|
|
30
|
+
|
|
9
31
|
before do
|
|
10
32
|
@nodes = mock('Oxidized::Nodes')
|
|
11
33
|
app.set(:nodes, @nodes)
|
|
@@ -30,71 +52,78 @@ describe Oxidized::API::WebApp do
|
|
|
30
52
|
},
|
|
31
53
|
mtime: Time.parse("2025-02-05 19:49:11 +0100")
|
|
32
54
|
}
|
|
55
|
+
|
|
56
|
+
@nodes.expects(:show).with("sw5").returns(@serialized_node)
|
|
33
57
|
end
|
|
34
58
|
|
|
35
59
|
describe "get /node/show/:node" do
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
60
|
+
describe "Oxidized <= 0.34.1" do
|
|
61
|
+
it "shows the metadata of a node" do
|
|
62
|
+
app.set(:configuration, { hide_node_vars: [] })
|
|
63
|
+
|
|
64
|
+
get '/node/show/sw5'
|
|
65
|
+
_(last_response.ok?).must_equal true
|
|
66
|
+
body = last_response.body
|
|
67
|
+
|
|
68
|
+
_(body).must_match(/secret_enable/)
|
|
69
|
+
_(body).must_match(/secret_password/)
|
|
70
|
+
_(body.include?(expected_json_body(hide_vars: false))).must_equal true
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it "hides vars in hide_node_vars" do
|
|
74
|
+
app.set(:configuration, { hide_node_vars: %i[enable password] })
|
|
75
|
+
|
|
76
|
+
get '/node/show/sw5'
|
|
77
|
+
_(last_response.ok?).must_equal true
|
|
78
|
+
body = last_response.body
|
|
79
|
+
|
|
80
|
+
_(body).wont_match(/secret_enable/)
|
|
81
|
+
_(body).wont_match(/secret_password/)
|
|
82
|
+
_(body).must_match(/<hidden>/)
|
|
83
|
+
_(body.include?(expected_json_body(hide_vars: true))).must_equal true
|
|
84
|
+
|
|
85
|
+
# The note data is not changed (deep copy with Marshal)
|
|
86
|
+
_(@serialized_node[:vars][:enable]).must_equal "secret_enable"
|
|
87
|
+
end
|
|
64
88
|
end
|
|
65
89
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
90
|
+
describe "Oxidized > 0.34.1" do
|
|
91
|
+
before do
|
|
92
|
+
@serialized_node[:vars] = {
|
|
93
|
+
"oxi" => "dized",
|
|
94
|
+
"enable" => "secret_enable",
|
|
95
|
+
"username" => "oxidized",
|
|
96
|
+
"password" => "secret_password"
|
|
97
|
+
}
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
it "shows the metadata of a node" do
|
|
101
|
+
app.set(:configuration, { hide_node_vars: [] })
|
|
102
|
+
|
|
103
|
+
get '/node/show/sw5'
|
|
104
|
+
_(last_response.ok?).must_equal true
|
|
105
|
+
body = last_response.body
|
|
106
|
+
|
|
107
|
+
_(body).must_match(/secret_enable/)
|
|
108
|
+
_(body).must_match(/secret_password/)
|
|
109
|
+
_(body.include?(expected_json_body(hide_vars: false))).must_equal true
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
it "hides vars in hide_node_vars" do
|
|
113
|
+
app.set(:configuration, { hide_node_vars: %w[enable password] })
|
|
114
|
+
|
|
115
|
+
get '/node/show/sw5'
|
|
116
|
+
_(last_response.ok?).must_equal true
|
|
117
|
+
body = last_response.body
|
|
118
|
+
|
|
119
|
+
_(body).wont_match(/secret_enable/)
|
|
120
|
+
_(body).wont_match(/secret_password/)
|
|
121
|
+
_(body).must_match(/<hidden>/)
|
|
122
|
+
_(body.include?(expected_json_body(hide_vars: true))).must_equal true
|
|
123
|
+
|
|
124
|
+
# The note data is not changed (deep copy with Marshal)
|
|
125
|
+
_(@serialized_node[:vars]["enable"]).must_equal "secret_enable"
|
|
126
|
+
end
|
|
98
127
|
end
|
|
99
128
|
end
|
|
100
129
|
end
|
data/spec/web/nodes_spec.rb
CHANGED
|
@@ -53,5 +53,12 @@ describe Oxidized::API::WebApp do
|
|
|
53
53
|
result = JSON.parse(last_response.body)
|
|
54
54
|
_(result.length).must_equal 4
|
|
55
55
|
end
|
|
56
|
+
it 'shows all nodes of the default group' do
|
|
57
|
+
get '/nodes/group/default.json'
|
|
58
|
+
|
|
59
|
+
_(last_response.ok?).must_equal true
|
|
60
|
+
result = JSON.parse(last_response.body)
|
|
61
|
+
_(result.length).must_equal 3
|
|
62
|
+
end
|
|
56
63
|
end
|
|
57
64
|
end
|
metadata
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: oxidized-web
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.18.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Saku Ytti
|
|
8
8
|
- Samer Abdel-Hafez
|
|
9
|
-
autorequire:
|
|
10
9
|
bindir: bin
|
|
11
10
|
cert_chain: []
|
|
12
|
-
date:
|
|
11
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
13
12
|
dependencies:
|
|
14
13
|
- !ruby/object:Gem::Dependency
|
|
15
14
|
name: charlock_holmes
|
|
@@ -54,7 +53,7 @@ dependencies:
|
|
|
54
53
|
version: 6.0.0
|
|
55
54
|
- - "<"
|
|
56
55
|
- !ruby/object:Gem::Version
|
|
57
|
-
version:
|
|
56
|
+
version: 7.0.0
|
|
58
57
|
type: :runtime
|
|
59
58
|
prerelease: false
|
|
60
59
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -64,7 +63,7 @@ dependencies:
|
|
|
64
63
|
version: 6.0.0
|
|
65
64
|
- - "<"
|
|
66
65
|
- !ruby/object:Gem::Version
|
|
67
|
-
version:
|
|
66
|
+
version: 7.0.0
|
|
68
67
|
- !ruby/object:Gem::Dependency
|
|
69
68
|
name: htmlentities
|
|
70
69
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -74,7 +73,7 @@ dependencies:
|
|
|
74
73
|
version: 4.3.0
|
|
75
74
|
- - "<"
|
|
76
75
|
- !ruby/object:Gem::Version
|
|
77
|
-
version: 4.
|
|
76
|
+
version: 4.5.0
|
|
78
77
|
type: :runtime
|
|
79
78
|
prerelease: false
|
|
80
79
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -84,7 +83,7 @@ dependencies:
|
|
|
84
83
|
version: 4.3.0
|
|
85
84
|
- - "<"
|
|
86
85
|
- !ruby/object:Gem::Version
|
|
87
|
-
version: 4.
|
|
86
|
+
version: 4.5.0
|
|
88
87
|
- !ruby/object:Gem::Dependency
|
|
89
88
|
name: json
|
|
90
89
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -94,7 +93,7 @@ dependencies:
|
|
|
94
93
|
version: 2.3.0
|
|
95
94
|
- - "<"
|
|
96
95
|
- !ruby/object:Gem::Version
|
|
97
|
-
version: 2.
|
|
96
|
+
version: 2.17.0
|
|
98
97
|
type: :runtime
|
|
99
98
|
prerelease: false
|
|
100
99
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -104,77 +103,81 @@ dependencies:
|
|
|
104
103
|
version: 2.3.0
|
|
105
104
|
- - "<"
|
|
106
105
|
- !ruby/object:Gem::Version
|
|
107
|
-
version: 2.
|
|
106
|
+
version: 2.17.0
|
|
108
107
|
- !ruby/object:Gem::Dependency
|
|
109
108
|
name: oxidized
|
|
110
109
|
requirement: !ruby/object:Gem::Requirement
|
|
111
110
|
requirements:
|
|
112
|
-
- - "
|
|
111
|
+
- - ">="
|
|
113
112
|
- !ruby/object:Gem::Version
|
|
114
|
-
version: 0.34.
|
|
113
|
+
version: 0.34.1
|
|
115
114
|
type: :runtime
|
|
116
115
|
prerelease: false
|
|
117
116
|
version_requirements: !ruby/object:Gem::Requirement
|
|
118
117
|
requirements:
|
|
119
|
-
- - "
|
|
118
|
+
- - ">="
|
|
120
119
|
- !ruby/object:Gem::Version
|
|
121
|
-
version: 0.34.
|
|
120
|
+
version: 0.34.1
|
|
122
121
|
- !ruby/object:Gem::Dependency
|
|
123
122
|
name: puma
|
|
124
123
|
requirement: !ruby/object:Gem::Requirement
|
|
125
124
|
requirements:
|
|
126
|
-
- - "
|
|
125
|
+
- - ">="
|
|
127
126
|
- !ruby/object:Gem::Version
|
|
128
|
-
version: 6.6
|
|
127
|
+
version: '6.6'
|
|
128
|
+
- - "<"
|
|
129
|
+
- !ruby/object:Gem::Version
|
|
130
|
+
version: '7.2'
|
|
129
131
|
type: :runtime
|
|
130
132
|
prerelease: false
|
|
131
133
|
version_requirements: !ruby/object:Gem::Requirement
|
|
132
134
|
requirements:
|
|
133
|
-
- - "
|
|
135
|
+
- - ">="
|
|
134
136
|
- !ruby/object:Gem::Version
|
|
135
|
-
version: 6.6
|
|
137
|
+
version: '6.6'
|
|
138
|
+
- - "<"
|
|
139
|
+
- !ruby/object:Gem::Version
|
|
140
|
+
version: '7.2'
|
|
136
141
|
- !ruby/object:Gem::Dependency
|
|
137
142
|
name: sinatra
|
|
138
143
|
requirement: !ruby/object:Gem::Requirement
|
|
139
144
|
requirements:
|
|
140
|
-
- - "
|
|
145
|
+
- - ">="
|
|
141
146
|
- !ruby/object:Gem::Version
|
|
142
147
|
version: 4.1.1
|
|
148
|
+
- - "<"
|
|
149
|
+
- !ruby/object:Gem::Version
|
|
150
|
+
version: 4.3.0
|
|
143
151
|
type: :runtime
|
|
144
152
|
prerelease: false
|
|
145
153
|
version_requirements: !ruby/object:Gem::Requirement
|
|
146
154
|
requirements:
|
|
147
|
-
- - "
|
|
155
|
+
- - ">="
|
|
148
156
|
- !ruby/object:Gem::Version
|
|
149
157
|
version: 4.1.1
|
|
158
|
+
- - "<"
|
|
159
|
+
- !ruby/object:Gem::Version
|
|
160
|
+
version: 4.3.0
|
|
150
161
|
- !ruby/object:Gem::Dependency
|
|
151
162
|
name: sinatra-contrib
|
|
152
163
|
requirement: !ruby/object:Gem::Requirement
|
|
153
164
|
requirements:
|
|
154
|
-
- - "
|
|
165
|
+
- - ">="
|
|
155
166
|
- !ruby/object:Gem::Version
|
|
156
167
|
version: 4.1.1
|
|
168
|
+
- - "<"
|
|
169
|
+
- !ruby/object:Gem::Version
|
|
170
|
+
version: 4.3.0
|
|
157
171
|
type: :runtime
|
|
158
172
|
prerelease: false
|
|
159
173
|
version_requirements: !ruby/object:Gem::Requirement
|
|
160
174
|
requirements:
|
|
161
|
-
- - "
|
|
175
|
+
- - ">="
|
|
162
176
|
- !ruby/object:Gem::Version
|
|
163
177
|
version: 4.1.1
|
|
164
|
-
-
|
|
165
|
-
name: bundler
|
|
166
|
-
requirement: !ruby/object:Gem::Requirement
|
|
167
|
-
requirements:
|
|
168
|
-
- - "~>"
|
|
169
|
-
- !ruby/object:Gem::Version
|
|
170
|
-
version: '2.2'
|
|
171
|
-
type: :development
|
|
172
|
-
prerelease: false
|
|
173
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
174
|
-
requirements:
|
|
175
|
-
- - "~>"
|
|
178
|
+
- - "<"
|
|
176
179
|
- !ruby/object:Gem::Version
|
|
177
|
-
version:
|
|
180
|
+
version: 4.3.0
|
|
178
181
|
- !ruby/object:Gem::Dependency
|
|
179
182
|
name: minitest
|
|
180
183
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -251,14 +254,14 @@ dependencies:
|
|
|
251
254
|
requirements:
|
|
252
255
|
- - "~>"
|
|
253
256
|
- !ruby/object:Gem::Version
|
|
254
|
-
version: 1.
|
|
257
|
+
version: 1.81.1
|
|
255
258
|
type: :development
|
|
256
259
|
prerelease: false
|
|
257
260
|
version_requirements: !ruby/object:Gem::Requirement
|
|
258
261
|
requirements:
|
|
259
262
|
- - "~>"
|
|
260
263
|
- !ruby/object:Gem::Version
|
|
261
|
-
version: 1.
|
|
264
|
+
version: 1.81.1
|
|
262
265
|
- !ruby/object:Gem::Dependency
|
|
263
266
|
name: rubocop-minitest
|
|
264
267
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -279,14 +282,14 @@ dependencies:
|
|
|
279
282
|
requirements:
|
|
280
283
|
- - "~>"
|
|
281
284
|
- !ruby/object:Gem::Version
|
|
282
|
-
version: 2.
|
|
285
|
+
version: 2.34.2
|
|
283
286
|
type: :development
|
|
284
287
|
prerelease: false
|
|
285
288
|
version_requirements: !ruby/object:Gem::Requirement
|
|
286
289
|
requirements:
|
|
287
290
|
- - "~>"
|
|
288
291
|
- !ruby/object:Gem::Version
|
|
289
|
-
version: 2.
|
|
292
|
+
version: 2.34.2
|
|
290
293
|
- !ruby/object:Gem::Dependency
|
|
291
294
|
name: rubocop-rake
|
|
292
295
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -358,6 +361,7 @@ files:
|
|
|
358
361
|
- lib/oxidized/web/public/images/oxidizing.png
|
|
359
362
|
- lib/oxidized/web/public/images/oxidizing_40px.png
|
|
360
363
|
- lib/oxidized/web/public/scripts/oxidized.js
|
|
364
|
+
- lib/oxidized/web/public/scripts/theme-toggle.js
|
|
361
365
|
- lib/oxidized/web/public/weblibs/bootstrap-icons.css
|
|
362
366
|
- lib/oxidized/web/public/weblibs/bootstrap.bundle.js
|
|
363
367
|
- lib/oxidized/web/public/weblibs/bootstrap.bundle.js.map
|
|
@@ -405,7 +409,6 @@ licenses:
|
|
|
405
409
|
- Apache-2.0
|
|
406
410
|
metadata:
|
|
407
411
|
rubygems_mfa_required: 'true'
|
|
408
|
-
post_install_message:
|
|
409
412
|
rdoc_options: []
|
|
410
413
|
require_paths:
|
|
411
414
|
- lib
|
|
@@ -420,8 +423,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
420
423
|
- !ruby/object:Gem::Version
|
|
421
424
|
version: '0'
|
|
422
425
|
requirements: []
|
|
423
|
-
rubygems_version: 3.
|
|
424
|
-
signing_key:
|
|
426
|
+
rubygems_version: 3.6.7
|
|
425
427
|
specification_version: 4
|
|
426
428
|
summary: sinatra API + webUI for oxidized
|
|
427
429
|
test_files: []
|