cconfig 1.3.0 → 1.3.1
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.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +31 -0
- data/.rubocop.yml +69 -43
- data/CHANGELOG.md +9 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +42 -33
- data/README.md +16 -3
- data/Rakefile +4 -2
- data/cconfig.gemspec +19 -18
- data/lib/cconfig/cconfig.rb +8 -6
- data/lib/cconfig/errors.rb +2 -2
- data/lib/cconfig/hash_utils.rb +9 -9
- data/lib/cconfig/railtie.rb +9 -9
- data/lib/cconfig/version.rb +2 -2
- data/lib/cconfig.rb +3 -3
- data/lib/tasks/info.rake +37 -5
- data/spec/config_spec.rb +62 -57
- data/spec/fixtures/empty.yml +1 -0
- data/spec/hash_utils_spec.rb +24 -24
- data/spec/spec_helper.rb +4 -4
- metadata +31 -16
- data/.rspec +0 -1
- data/.travis.yml +0 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 25e896fa02704f037946c79957dd9c5b7e6b12175061439293ff5e5a81e9db03
|
4
|
+
data.tar.gz: 6887a80da282ca21f94c99527de39e185035ab0b79f5a6d7ddec1405ac11005e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6cddc61a22a2de01b9e55ff6672d1762801a94a6d74f2799067c62004fc518c413dd2b85bbee06bfc9ca3a3e37013a81a007e93f6cfc68cf35638f41a6769e60
|
7
|
+
data.tar.gz: 0cb7e8c92998154af72be21e8e4292d0b64c25e2560142bce558bed055db66bbc91136c6b587a86e1da90adbb64937136f93ae92c843c353b219288febef80cb
|
@@ -0,0 +1,31 @@
|
|
1
|
+
---
|
2
|
+
|
3
|
+
name: Ruby
|
4
|
+
|
5
|
+
on:
|
6
|
+
push:
|
7
|
+
branches: ["main"]
|
8
|
+
pull_request:
|
9
|
+
branches: ["main"]
|
10
|
+
|
11
|
+
jobs:
|
12
|
+
test:
|
13
|
+
runs-on: ubuntu-latest
|
14
|
+
strategy:
|
15
|
+
matrix:
|
16
|
+
ruby-version: [2.7, 3.0, 3.1, head]
|
17
|
+
|
18
|
+
steps:
|
19
|
+
- uses: actions/checkout@v3
|
20
|
+
|
21
|
+
- name: Set up Ruby
|
22
|
+
uses: ruby/setup-ruby@v1
|
23
|
+
with:
|
24
|
+
ruby-version: ${{ matrix.ruby-version }}
|
25
|
+
bundler-cache: true
|
26
|
+
|
27
|
+
- name: Run tests
|
28
|
+
run: bundle exec rake
|
29
|
+
|
30
|
+
- name: Run rubocop
|
31
|
+
run: bundle exec rubocop
|
data/.rubocop.yml
CHANGED
@@ -1,66 +1,92 @@
|
|
1
|
-
|
2
|
-
- rubocop-rspec
|
1
|
+
---
|
3
2
|
|
4
3
|
AllCops:
|
5
|
-
TargetRubyVersion: 2.
|
4
|
+
TargetRubyVersion: 2.7
|
5
|
+
|
6
6
|
DisplayCopNames: true
|
7
7
|
DisplayStyleGuide: false
|
8
|
+
SuggestExtensions: false
|
9
|
+
|
10
|
+
NewCops: enable
|
11
|
+
|
12
|
+
Exclude:
|
13
|
+
- spec/**/*
|
14
|
+
- vendor/**/*
|
15
|
+
|
16
|
+
##
|
17
|
+
# Plugins
|
18
|
+
|
19
|
+
require:
|
20
|
+
- rubocop-performance
|
21
|
+
- rubocop-rake
|
22
|
+
|
23
|
+
#
|
24
|
+
# Layout
|
25
|
+
#
|
8
26
|
|
9
|
-
#
|
10
|
-
# looks more human readable.
|
27
|
+
# The table format is more human readable.
|
11
28
|
Layout/HashAlignment:
|
12
29
|
EnforcedHashRocketStyle: table
|
13
30
|
EnforcedColonStyle: table
|
14
31
|
|
15
|
-
#
|
16
|
-
|
17
|
-
|
32
|
+
# The default is just too small. A limit of 100 looks reasonable.
|
33
|
+
Layout/LineLength:
|
34
|
+
Max: 100
|
18
35
|
|
19
|
-
#
|
20
|
-
Metrics
|
21
|
-
|
36
|
+
#
|
37
|
+
# Metrics
|
38
|
+
#
|
39
|
+
|
40
|
+
# The default is just too small.
|
41
|
+
Metrics/AbcSize:
|
42
|
+
Max: 30
|
43
|
+
|
44
|
+
# We will skip it for Rake tasks.
|
45
|
+
Metrics/ClassLength:
|
22
46
|
Exclude:
|
23
|
-
-
|
47
|
+
- test/**/*
|
24
48
|
|
25
|
-
#
|
26
|
-
|
27
|
-
|
28
|
-
|
49
|
+
# We will skip it for Rake tasks.
|
50
|
+
Metrics/BlockLength:
|
51
|
+
Exclude:
|
52
|
+
- lib/tasks/**/*
|
53
|
+
- test/**/*
|
29
54
|
|
55
|
+
# The default is just too small.
|
30
56
|
Metrics/MethodLength:
|
31
57
|
Max: 20
|
32
58
|
|
33
|
-
#
|
34
|
-
#
|
35
|
-
#
|
36
|
-
Style/StringLiterals:
|
37
|
-
EnforcedStyle: double_quotes
|
59
|
+
#
|
60
|
+
# Style
|
61
|
+
#
|
38
62
|
|
39
|
-
#
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
# Sometimes we need more than one "expect" command to build our actual
|
44
|
-
# expectation.
|
45
|
-
RSpec/MultipleExpectations:
|
46
|
-
Max: 6
|
47
|
-
|
48
|
-
# Setting a more reasonable value.
|
49
|
-
RSpec/ExampleLength:
|
50
|
-
Max: 10
|
63
|
+
# It's not needed to add documentation for obvious modules or classes. The main
|
64
|
+
# idea is that documentation will be asked during the review process if needed.
|
65
|
+
Style/Documentation:
|
66
|
+
Enabled: false
|
51
67
|
|
52
|
-
#
|
53
|
-
|
68
|
+
# This forces us to create a new object for no real reason.
|
69
|
+
Style/MultipleComparison:
|
54
70
|
Enabled: false
|
55
71
|
|
56
|
-
|
57
|
-
#
|
72
|
+
# There are some false positives (e.g. "module ::Module", in which we want to
|
73
|
+
# make sure there are no clashes or misunderstandings). Therefore, we just
|
74
|
+
# disable this cop.
|
75
|
+
Style/ClassAndModuleChildren:
|
76
|
+
Enabled: false
|
58
77
|
|
59
|
-
|
60
|
-
|
78
|
+
# I do need to write non-ASCII words from time to time since, you know, this is
|
79
|
+
# a language application and latin words can have macrons.
|
80
|
+
Style/AsciiComments:
|
81
|
+
Enabled: false
|
61
82
|
|
62
|
-
|
63
|
-
|
83
|
+
#
|
84
|
+
# Naming
|
85
|
+
#
|
64
86
|
|
65
|
-
|
66
|
-
|
87
|
+
# The default minimum length is 3, which is too long for good names like
|
88
|
+
# "js". Variables with only one letter are usually disallowed, but there are
|
89
|
+
# some names which are easy to understand (e.g. convention).
|
90
|
+
Naming/MethodParameterName:
|
91
|
+
MinNameLength: 2
|
92
|
+
AllowedNames: [_, n]
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 1.3.1
|
4
|
+
|
5
|
+
- Don't throw an error if the local file is empty. See
|
6
|
+
[6c464709605f](https://github.com/mssola/cconfig/commit/6c464709605f).
|
7
|
+
- rake: print config when it's been already defined. See
|
8
|
+
[b1d862551ed1](https://github.com/mssola/cconfig/commit/b1d862551ed1).
|
9
|
+
- railtie: don't fetch the name by inspecting. See
|
10
|
+
[0c87a22c324d](https://github.com/mssola/cconfig/commit/0c87a22c324d).
|
11
|
+
|
3
12
|
## 1.3.0
|
4
13
|
|
5
14
|
- Added Ruby on Rails 6.x support. See
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,47 +1,55 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
cconfig (1.3.
|
4
|
+
cconfig (1.3.1)
|
5
5
|
safe_yaml (~> 1.0.0, >= 1.0.0)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
ast (2.4.
|
11
|
-
diff-lcs (1.
|
12
|
-
|
13
|
-
parallel (1.
|
14
|
-
parser (
|
15
|
-
ast (~> 2.4.
|
16
|
-
rainbow (3.
|
17
|
-
rake (13.0.
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
rspec-
|
22
|
-
rspec-
|
23
|
-
|
24
|
-
|
25
|
-
|
10
|
+
ast (2.4.2)
|
11
|
+
diff-lcs (1.5.0)
|
12
|
+
json (2.6.2)
|
13
|
+
parallel (1.22.1)
|
14
|
+
parser (3.1.3.0)
|
15
|
+
ast (~> 2.4.1)
|
16
|
+
rainbow (3.1.1)
|
17
|
+
rake (13.0.6)
|
18
|
+
regexp_parser (2.6.1)
|
19
|
+
rexml (3.2.5)
|
20
|
+
rspec (3.12.0)
|
21
|
+
rspec-core (~> 3.12.0)
|
22
|
+
rspec-expectations (~> 3.12.0)
|
23
|
+
rspec-mocks (~> 3.12.0)
|
24
|
+
rspec-core (3.12.0)
|
25
|
+
rspec-support (~> 3.12.0)
|
26
|
+
rspec-expectations (3.12.0)
|
26
27
|
diff-lcs (>= 1.2.0, < 2.0)
|
27
|
-
rspec-support (~> 3.
|
28
|
-
rspec-mocks (3.
|
28
|
+
rspec-support (~> 3.12.0)
|
29
|
+
rspec-mocks (3.12.0)
|
29
30
|
diff-lcs (>= 1.2.0, < 2.0)
|
30
|
-
rspec-support (~> 3.
|
31
|
-
rspec-support (3.
|
32
|
-
rubocop (
|
33
|
-
|
31
|
+
rspec-support (~> 3.12.0)
|
32
|
+
rspec-support (3.12.0)
|
33
|
+
rubocop (1.39.0)
|
34
|
+
json (~> 2.3)
|
34
35
|
parallel (~> 1.10)
|
35
|
-
parser (>=
|
36
|
+
parser (>= 3.1.2.1)
|
36
37
|
rainbow (>= 2.2.2, < 4.0)
|
37
|
-
|
38
|
+
regexp_parser (>= 1.8, < 3.0)
|
39
|
+
rexml (>= 3.2.5, < 4.0)
|
40
|
+
rubocop-ast (>= 1.23.0, < 2.0)
|
38
41
|
ruby-progressbar (~> 1.7)
|
39
|
-
unicode-display_width (>= 1.4.0, <
|
40
|
-
rubocop-
|
41
|
-
|
42
|
-
|
42
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
43
|
+
rubocop-ast (1.23.0)
|
44
|
+
parser (>= 3.1.1.0)
|
45
|
+
rubocop-performance (1.15.1)
|
46
|
+
rubocop (>= 1.7.0, < 2.0)
|
47
|
+
rubocop-ast (>= 0.4.0)
|
48
|
+
rubocop-rake (0.6.0)
|
49
|
+
rubocop (~> 1.0)
|
50
|
+
ruby-progressbar (1.11.0)
|
43
51
|
safe_yaml (1.0.5)
|
44
|
-
unicode-display_width (
|
52
|
+
unicode-display_width (2.3.0)
|
45
53
|
|
46
54
|
PLATFORMS
|
47
55
|
ruby
|
@@ -51,8 +59,9 @@ DEPENDENCIES
|
|
51
59
|
cconfig!
|
52
60
|
rake (>= 10.0)
|
53
61
|
rspec (>= 3.0)
|
54
|
-
rubocop (
|
55
|
-
rubocop-
|
62
|
+
rubocop (>= 1.0)
|
63
|
+
rubocop-performance
|
64
|
+
rubocop-rake
|
56
65
|
|
57
66
|
BUNDLED WITH
|
58
|
-
|
67
|
+
2.3.18
|
data/README.md
CHANGED
@@ -1,4 +1,9 @@
|
|
1
|
-
|
1
|
+
<p align="center">
|
2
|
+
<a href="https://github.com/mssola/cconfig/actions/workflows/ruby.yml" title="CI status for the main branch"><img src="https://github.com/mssola/cconfig/actions/workflows/ruby.yml/badge.svg?branch=main" alt="Build Status for main branch" /></a>
|
3
|
+
<a href="http://www.gnu.org/licenses/lgpl-3.0.txt" rel="nofollow"><img alt="License LGPL 3+" src="https://img.shields.io/badge/license-LGPL_3-blue.svg" style="max-width:100%;"></a>
|
4
|
+
</p>
|
5
|
+
|
6
|
+
---
|
2
7
|
|
3
8
|
CConfig (Container Config) is a container-aware configuration management
|
4
9
|
gem. This is useful for applications that want to keep a reference configuration
|
@@ -115,7 +120,15 @@ Last but not least, this Railtie also offers a rake task called
|
|
115
120
|
`cconfig:info`. This rake task prints to standard output the evaluated
|
116
121
|
configuration.
|
117
122
|
|
118
|
-
This gem supports Ruby on Rails `5.x` and `
|
123
|
+
This gem supports Ruby on Rails `5.x`, `6.x` and `7.x`.
|
124
|
+
|
125
|
+
## Contributing
|
126
|
+
|
127
|
+
Read the [CONTRIBUTING.md](./CONTRIBUTING.md) file.
|
128
|
+
|
129
|
+
## [Changelog](https://pbs.twimg.com/media/DJDYCcLXcAA_eIo?format=jpg&name=small)
|
130
|
+
|
131
|
+
Read the [CHANGELOG.md](./CHANGELOG.md) file.
|
119
132
|
|
120
133
|
## License
|
121
134
|
|
@@ -124,7 +137,7 @@ This project is based on work I did for the
|
|
124
137
|
gem so it can be also used for other projects that might be interested in this.
|
125
138
|
|
126
139
|
```
|
127
|
-
Copyright (C) 2017-
|
140
|
+
Copyright (C) 2017-2022 Miquel Sabaté Solà <msabate@suse.com>
|
128
141
|
|
129
142
|
CConfig is free software: you can redistribute it and/or modify
|
130
143
|
it under the terms of the GNU Lesser General Public License as published by
|
data/Rakefile
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright (C) 2017-
|
3
|
+
# Copyright (C) 2017-2022 Miquel Sabaté Solà <msabate@suse.com>
|
4
4
|
#
|
5
5
|
# This file is part of CConfig.
|
6
6
|
#
|
@@ -17,8 +17,10 @@
|
|
17
17
|
# You should have received a copy of the GNU Lesser General Public License
|
18
18
|
# along with CConfig. If not, see <http://www.gnu.org/licenses/>.
|
19
19
|
|
20
|
-
require
|
20
|
+
require 'rspec/core/rake_task'
|
21
21
|
RSpec::Core::RakeTask.new(:spec)
|
22
22
|
|
23
23
|
task default: [:spec]
|
24
|
+
|
25
|
+
desc 'Run RSpec'
|
24
26
|
task test: :spec
|
data/cconfig.gemspec
CHANGED
@@ -1,31 +1,32 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
lib = File.expand_path(
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
4
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
5
|
|
6
|
-
require
|
6
|
+
require 'cconfig/version'
|
7
7
|
|
8
8
|
Gem::Specification.new do |spec|
|
9
|
-
spec.name =
|
9
|
+
spec.name = 'cconfig'
|
10
10
|
spec.version = CConfig::VERSION
|
11
|
-
spec.authors = [
|
12
|
-
spec.email = [
|
13
|
-
spec.description =
|
14
|
-
spec.summary =
|
15
|
-
spec.homepage =
|
16
|
-
spec.license =
|
11
|
+
spec.authors = ['mssola']
|
12
|
+
spec.email = ['mssola@suse.com']
|
13
|
+
spec.description = 'Configuration management for container-aware applications'
|
14
|
+
spec.summary = 'Configuration management for container-aware applications.'
|
15
|
+
spec.homepage = 'https://github.com/mssola/cconfig'
|
16
|
+
spec.license = 'LGPL-3.0'
|
17
17
|
|
18
18
|
spec.files = `git ls-files`.split($RS)
|
19
|
-
spec.
|
20
|
-
spec.require_paths = ["lib"]
|
19
|
+
spec.require_paths = ['lib']
|
21
20
|
|
22
|
-
spec.required_ruby_version =
|
21
|
+
spec.required_ruby_version = '>= 2.7.0'
|
23
22
|
|
24
|
-
spec.add_dependency
|
23
|
+
spec.add_dependency 'safe_yaml', '~> 1.0.0', '>= 1.0.0'
|
25
24
|
|
26
|
-
spec.add_development_dependency
|
27
|
-
spec.add_development_dependency
|
28
|
-
spec.add_development_dependency
|
29
|
-
spec.add_development_dependency
|
30
|
-
spec.add_development_dependency
|
25
|
+
spec.add_development_dependency 'bundler', '>= 1.0.0'
|
26
|
+
spec.add_development_dependency 'rake', '>= 10.0'
|
27
|
+
spec.add_development_dependency 'rspec', '>= 3.0'
|
28
|
+
spec.add_development_dependency 'rubocop', '>= 1.0'
|
29
|
+
spec.add_development_dependency 'rubocop-performance'
|
30
|
+
spec.add_development_dependency 'rubocop-rake'
|
31
|
+
spec.metadata['rubygems_mfa_required'] = 'true'
|
31
32
|
end
|
data/lib/cconfig/cconfig.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright (C) 2017-
|
3
|
+
# Copyright (C) 2017-2022 Miquel Sabaté Solà <msabate@suse.com>
|
4
4
|
#
|
5
5
|
# This file is part of CConfig.
|
6
6
|
#
|
@@ -17,9 +17,9 @@
|
|
17
17
|
# You should have received a copy of the GNU Lesser General Public License
|
18
18
|
# along with CConfig. If not, see <http://www.gnu.org/licenses/>.
|
19
19
|
|
20
|
-
require
|
21
|
-
require
|
22
|
-
require
|
20
|
+
require 'cconfig/hash_utils'
|
21
|
+
require 'cconfig/errors'
|
22
|
+
require 'yaml'
|
23
23
|
|
24
24
|
module CConfig
|
25
25
|
# Config is the main class of this library. It allows you to fetch the current
|
@@ -37,8 +37,8 @@ module CConfig
|
|
37
37
|
# `#{prefix}_LOCAL_CONFIG_PATH` environment variable if it was set.
|
38
38
|
def initialize(default:, local:, prefix:)
|
39
39
|
@default = default
|
40
|
-
@prefix = prefix ||
|
41
|
-
@local = ENV
|
40
|
+
@prefix = prefix || 'cconfig'
|
41
|
+
@local = ENV.fetch("#{@prefix.upcase}_LOCAL_CONFIG_PATH") { local }
|
42
42
|
end
|
43
43
|
|
44
44
|
# Returns a hash with the app configuration contained in it.
|
@@ -65,6 +65,8 @@ module CConfig
|
|
65
65
|
if File.file?(@local)
|
66
66
|
# Check for bad user input in the local config.yml file.
|
67
67
|
local = YAML.load_file(@local)
|
68
|
+
return {} if local.nil?
|
69
|
+
|
68
70
|
raise FormatError unless local.is_a?(::Hash)
|
69
71
|
|
70
72
|
local
|
data/lib/cconfig/errors.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright (C) 2017-
|
3
|
+
# Copyright (C) 2017-2022 Miquel Sabaté Solà <msabate@suse.com>
|
4
4
|
#
|
5
5
|
# This file is part of CConfig.
|
6
6
|
#
|
@@ -21,7 +21,7 @@ module CConfig
|
|
21
21
|
# FormatError is the exception to be raised when a configuration file cannot
|
22
22
|
# be parsed.
|
23
23
|
class FormatError < StandardError
|
24
|
-
DEFAULT_MSG =
|
24
|
+
DEFAULT_MSG = 'Wrong format for the config-local file!'
|
25
25
|
|
26
26
|
def initialize
|
27
27
|
super(DEFAULT_MSG)
|
data/lib/cconfig/hash_utils.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright (C) 2017-
|
3
|
+
# Copyright (C) 2017-2022 Miquel Sabaté Solà <msabate@suse.com>
|
4
4
|
#
|
5
5
|
# This file is part of CConfig.
|
6
6
|
#
|
@@ -34,14 +34,14 @@ module CConfig
|
|
34
34
|
# enabled: true
|
35
35
|
def enabled?(feature)
|
36
36
|
cur = self
|
37
|
-
parts = feature.split(
|
37
|
+
parts = feature.split('.')
|
38
38
|
|
39
39
|
parts.each do |part|
|
40
40
|
cur = cur[part]
|
41
41
|
return false if !cur || cur.empty?
|
42
42
|
end
|
43
43
|
|
44
|
-
cur.key?(
|
44
|
+
cur.key?('enabled') && cur['enabled'].eql?(true)
|
45
45
|
end
|
46
46
|
|
47
47
|
# Returns true if the given feature is disabled or doesn't exist. This is
|
@@ -55,7 +55,7 @@ module CConfig
|
|
55
55
|
def default_of(key)
|
56
56
|
cur = defaults
|
57
57
|
|
58
|
-
key.split(
|
58
|
+
key.split('.').each do |part|
|
59
59
|
cur = cur[part]
|
60
60
|
break if cur.nil?
|
61
61
|
end
|
@@ -106,8 +106,8 @@ module CConfig
|
|
106
106
|
hsh.each do |k, v|
|
107
107
|
if v.is_a?(Hash)
|
108
108
|
hsh[k] = hide_password(v)
|
109
|
-
elsif k ==
|
110
|
-
hsh[k] =
|
109
|
+
elsif k == 'password'
|
110
|
+
hsh[k] = '****'
|
111
111
|
end
|
112
112
|
end
|
113
113
|
hsh
|
@@ -119,12 +119,12 @@ module CConfig
|
|
119
119
|
# exist, it will return nil. Otherwise, it will try to cast the fetched
|
120
120
|
# value into the proper type and return it.
|
121
121
|
def get_env(key)
|
122
|
-
env = ENV
|
122
|
+
env = ENV.fetch(key.upcase, nil)
|
123
123
|
return nil if env.nil?
|
124
124
|
|
125
125
|
# Try to convert it into a boolean value.
|
126
|
-
return true if env.casecmp(
|
127
|
-
return false if env.casecmp(
|
126
|
+
return true if env.casecmp('true').zero?
|
127
|
+
return false if env.casecmp('false').zero?
|
128
128
|
|
129
129
|
# Try to convert it into an integer. Otherwise just keep the string.
|
130
130
|
begin
|
data/lib/cconfig/railtie.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright (C) 2017-
|
3
|
+
# Copyright (C) 2017-2022 Miquel Sabaté Solà <msabate@suse.com>
|
4
4
|
#
|
5
5
|
# This file is part of CConfig.
|
6
6
|
#
|
@@ -17,7 +17,7 @@
|
|
17
17
|
# You should have received a copy of the GNU Lesser General Public License
|
18
18
|
# along with CConfig. If not, see <http://www.gnu.org/licenses/>.
|
19
19
|
|
20
|
-
require
|
20
|
+
require 'rails'
|
21
21
|
|
22
22
|
module CConfig
|
23
23
|
# This class will set up this gem for Ruby on Rails:
|
@@ -27,10 +27,10 @@ module CConfig
|
|
27
27
|
class Railtie < Rails::Railtie
|
28
28
|
railtie_name :cconfig
|
29
29
|
|
30
|
-
initializer
|
30
|
+
initializer 'cconfig' do |app|
|
31
31
|
prefix = ::CConfig::Railtie.fetch_prefix(app)
|
32
|
-
default = Rails.root.join(
|
33
|
-
local = Rails.root.join(
|
32
|
+
default = Rails.root.join('config', 'config.yml')
|
33
|
+
local = Rails.root.join('config', 'config-local.yml')
|
34
34
|
cfg = ::CConfig::Config.new(default: default, local: local, prefix: prefix)
|
35
35
|
|
36
36
|
# NOTE: this is a global constant from now on. The Rails application
|
@@ -39,7 +39,7 @@ module CConfig
|
|
39
39
|
end
|
40
40
|
|
41
41
|
rake_tasks do
|
42
|
-
Dir[File.join(File.dirname(__FILE__),
|
42
|
+
Dir[File.join(File.dirname(__FILE__), '../tasks/*.rake')].each do |task|
|
43
43
|
load task
|
44
44
|
end
|
45
45
|
end
|
@@ -49,10 +49,10 @@ module CConfig
|
|
49
49
|
#
|
50
50
|
# app contains the Rails application as given by the railtie API.
|
51
51
|
def self.fetch_prefix(app)
|
52
|
-
if ENV[
|
53
|
-
ENV[
|
52
|
+
if ENV['CCONFIG_PREFIX'].present?
|
53
|
+
ENV['CCONFIG_PREFIX']
|
54
54
|
elsif Rails::VERSION::MAJOR >= 6
|
55
|
-
app.class.module_parent_name
|
55
|
+
app.class.module_parent_name
|
56
56
|
else
|
57
57
|
app.class.parent_name.inspect
|
58
58
|
end
|
data/lib/cconfig/version.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright (C) 2017-
|
3
|
+
# Copyright (C) 2017-2022 Miquel Sabaté Solà <msabate@suse.com>
|
4
4
|
#
|
5
5
|
# This file is part of CConfig.
|
6
6
|
#
|
@@ -19,5 +19,5 @@
|
|
19
19
|
|
20
20
|
module CConfig
|
21
21
|
# The current version of CConfig.
|
22
|
-
VERSION =
|
22
|
+
VERSION = '1.3.1'
|
23
23
|
end
|
data/lib/cconfig.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright (C) 2017-
|
3
|
+
# Copyright (C) 2017-2022 Miquel Sabaté Solà <msabate@suse.com>
|
4
4
|
#
|
5
5
|
# This file is part of CConfig.
|
6
6
|
#
|
@@ -21,5 +21,5 @@
|
|
21
21
|
module CConfig
|
22
22
|
end
|
23
23
|
|
24
|
-
require
|
25
|
-
require
|
24
|
+
require 'cconfig/cconfig'
|
25
|
+
require 'cconfig/railtie' if defined?(Rails)
|
data/lib/tasks/info.rake
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright (C) 2017-
|
3
|
+
# Copyright (C) 2017-2022 Miquel Sabaté Solà <msabate@suse.com>
|
4
4
|
#
|
5
5
|
# This file is part of CConfig.
|
6
6
|
#
|
@@ -17,12 +17,44 @@
|
|
17
17
|
# You should have received a copy of the GNU Lesser General Public License
|
18
18
|
# along with CConfig. If not, see <http://www.gnu.org/licenses/>.
|
19
19
|
|
20
|
+
require 'yaml'
|
21
|
+
|
22
|
+
# This is indeed identical to the `hide_password` method from the HashUtils
|
23
|
+
# module. That being said, it's easier to just repeat this simple piece of code
|
24
|
+
# than restructure things around.
|
25
|
+
def to_secure_hash(hsh)
|
26
|
+
hsh.each do |k, v|
|
27
|
+
if v.is_a?(Hash)
|
28
|
+
hsh[k] = to_secure_hash(v)
|
29
|
+
elsif k == 'password'
|
30
|
+
hsh[k] = '****'
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
20
35
|
namespace :cconfig do
|
21
|
-
desc
|
36
|
+
desc 'Prints the evaluated configuration'
|
22
37
|
task :info, [:prefix] => :environment do |_, args|
|
23
|
-
|
24
|
-
|
25
|
-
|
38
|
+
# If this is a Rails application, chances are that when calling this Rake
|
39
|
+
# task the `::APP_CONFIG` variable has already been set by the Rails
|
40
|
+
# initializer.
|
41
|
+
if defined?(::APP_CONFIG)
|
42
|
+
hsh = to_secure_hash(::APP_CONFIG)
|
43
|
+
puts "Evaluated configuration:\n#{hsh.to_yaml}"
|
44
|
+
next
|
45
|
+
end
|
46
|
+
|
47
|
+
# There might be a weird case in which Rails is being used but the
|
48
|
+
# `::APP_CONFIG` variable has not been set. In these cases, try to fetch the
|
49
|
+
# application name from within Rails if a prefix was not given.
|
50
|
+
prefix = if args[:prefix].nil? && defined?(Rails)
|
51
|
+
::CConfig::Railtie.fetch_prefix(Rails.application)
|
52
|
+
else
|
53
|
+
args[:prefix]
|
54
|
+
end
|
55
|
+
|
56
|
+
default = File.join(Rails.root, 'config', 'config.yml')
|
57
|
+
local = File.join(Rails.root, 'config', 'config-local.yml')
|
26
58
|
|
27
59
|
# Note that local will change if "#{prefix.upcase}_LOCAL_CONFIG_PATH" was
|
28
60
|
# specified.
|
data/spec/config_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright (C) 2017-
|
3
|
+
# Copyright (C) 2017-2022 Miquel Sabaté Solà <msabate@suse.com>
|
4
4
|
#
|
5
5
|
# This file is part of CConfig.
|
6
6
|
#
|
@@ -17,14 +17,14 @@
|
|
17
17
|
# You should have received a copy of the GNU Lesser General Public License
|
18
18
|
# along with CConfig. If not, see <http://www.gnu.org/licenses/>.
|
19
19
|
|
20
|
-
require
|
20
|
+
require 'cconfig/cconfig'
|
21
21
|
|
22
22
|
# Returns a Config configured with the two given config files.
|
23
23
|
def get_config(default, local)
|
24
|
-
base = File.join(File.dirname(__FILE__),
|
24
|
+
base = File.join(File.dirname(__FILE__), 'fixtures')
|
25
25
|
default = File.join(base, default)
|
26
26
|
local = File.join(base, local)
|
27
|
-
::CConfig::Config.new(default: default, local: local, prefix:
|
27
|
+
::CConfig::Config.new(default: default, local: local, prefix: 'test')
|
28
28
|
end
|
29
29
|
|
30
30
|
describe CConfig::Config do
|
@@ -35,100 +35,105 @@ describe CConfig::Config do
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
-
it
|
38
|
+
it 'selects the proper local file depending of the environment variable' do
|
39
39
|
# Instead of bad.yml (which will raise an error on `fetch`), we will pick up
|
40
40
|
# the local.yml file.
|
41
|
-
base = File.join(File.dirname(__FILE__),
|
42
|
-
local = File.join(base,
|
43
|
-
ENV[
|
41
|
+
base = File.join(File.dirname(__FILE__), 'fixtures')
|
42
|
+
local = File.join(base, 'bad.yml')
|
43
|
+
ENV['CCONFIG_LOCAL_CONFIG_PATH'] = File.join(base, 'local.yml')
|
44
44
|
|
45
45
|
# Passing nil to the prefix on purpose (see SUSE/Portus#1379)
|
46
|
-
cfg = ::CConfig::Config.new(default:
|
46
|
+
cfg = ::CConfig::Config.new(default: 'config.yml', local: local, prefix: nil)
|
47
47
|
expect { cfg.fetch }.not_to raise_error
|
48
48
|
end
|
49
49
|
|
50
|
-
describe
|
51
|
-
it
|
52
|
-
cfg = get_config(
|
50
|
+
describe 'Merging configuration values' do
|
51
|
+
it 'returns an empty config if neither the global nor the local were found' do
|
52
|
+
cfg = get_config('', '').fetch
|
53
53
|
expect(cfg).to be_empty
|
54
54
|
end
|
55
55
|
|
56
|
-
it
|
57
|
-
cfg = get_config(
|
58
|
-
expect(cfg[
|
56
|
+
it 'only uses the global if the local config was not found' do
|
57
|
+
cfg = get_config('config.yml', '').fetch
|
58
|
+
expect(cfg['gravatar']['enabled']).to be_truthy
|
59
59
|
end
|
60
60
|
|
61
|
-
it
|
62
|
-
cfg = get_config(
|
61
|
+
it 'merges both config files and work as expected' do
|
62
|
+
cfg = get_config('config.yml', 'local.yml').fetch
|
63
63
|
|
64
|
-
expect(cfg).to be_enabled(
|
65
|
-
expect(cfg).to be_enabled(
|
66
|
-
expect(cfg[
|
67
|
-
expect(cfg[
|
68
|
-
expect(cfg[
|
69
|
-
expect(cfg[
|
64
|
+
expect(cfg).to be_enabled('gravatar')
|
65
|
+
expect(cfg).to be_enabled('ldap')
|
66
|
+
expect(cfg['ldap']['hostname']).to eq 'ldap.example.com'
|
67
|
+
expect(cfg['ldap']['port']).to eq 389
|
68
|
+
expect(cfg['ldap']['base']).to eq 'ou=users,dc=example,dc=com'
|
69
|
+
expect(cfg['unknown']).to be_nil
|
70
70
|
end
|
71
71
|
|
72
|
-
it
|
73
|
-
bad = get_config(
|
74
|
-
msg =
|
72
|
+
it 'raises an error when the local file is badly formatted' do
|
73
|
+
bad = get_config('config.yml', 'bad.yml')
|
74
|
+
msg = 'Wrong format for the config-local file!'
|
75
75
|
expect { bad.fetch }.to raise_error(::CConfig::FormatError, msg)
|
76
76
|
end
|
77
77
|
|
78
|
-
it
|
79
|
-
|
78
|
+
it 'does not raise an error if the local file is simply empty' do
|
79
|
+
empty = get_config('config.yml', 'empty.yml')
|
80
|
+
expect { empty.fetch }.not_to raise_error
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'returns the proper config while hiding passwords' do
|
84
|
+
cfg = get_config('config.yml', 'local.yml')
|
80
85
|
fetched = cfg.fetch
|
81
86
|
evaled = YAML.safe_load(cfg.to_s)
|
82
87
|
|
83
88
|
expect(fetched).not_to eq(evaled)
|
84
|
-
fetched[
|
89
|
+
fetched['ldap']['authentication']['password'] = '****'
|
85
90
|
expect(fetched).to eq(evaled)
|
86
91
|
end
|
87
92
|
end
|
88
93
|
|
89
|
-
describe
|
90
|
-
it
|
91
|
-
cfg = get_config(
|
92
|
-
expect(cfg.enabled?(
|
94
|
+
describe '#enabled?' do
|
95
|
+
it 'works for nested options' do
|
96
|
+
cfg = get_config('config.yml', '').fetch
|
97
|
+
expect(cfg.enabled?('email.smtp')).to be true
|
93
98
|
end
|
94
99
|
|
95
|
-
it
|
96
|
-
ENV[
|
97
|
-
cfg = get_config(
|
98
|
-
expect(cfg.enabled?(
|
100
|
+
it 'works with environment variables' do
|
101
|
+
ENV['TEST_EMAIL_SMTP_ENABLED'] = 'false'
|
102
|
+
cfg = get_config('config.yml', '').fetch
|
103
|
+
expect(cfg.enabled?('email.smtp')).to be false
|
99
104
|
end
|
100
105
|
|
101
|
-
it
|
102
|
-
cfg = get_config(
|
103
|
-
expect(cfg).to be_disabled(
|
106
|
+
it 'offers the #disabled? method' do
|
107
|
+
cfg = get_config('config.yml', '').fetch
|
108
|
+
expect(cfg).to be_disabled('ldap')
|
104
109
|
end
|
105
110
|
|
106
|
-
it
|
107
|
-
cfg = get_config(
|
108
|
-
expect(cfg).to be_enabled(
|
109
|
-
expect(cfg).to be_disabled(
|
111
|
+
it 'handles enabled on nested elements' do
|
112
|
+
cfg = get_config('config.yml', '').fetch
|
113
|
+
expect(cfg).to be_enabled('delete')
|
114
|
+
expect(cfg).to be_disabled('delete.garbage_collector')
|
110
115
|
end
|
111
116
|
end
|
112
117
|
|
113
|
-
describe
|
114
|
-
it
|
115
|
-
cfg = get_config(
|
118
|
+
describe '#default_of' do
|
119
|
+
it 'returns the default when a local file has been added' do
|
120
|
+
cfg = get_config('config.yml', 'local.yml').fetch
|
116
121
|
|
117
|
-
expect(cfg[
|
118
|
-
expect(cfg.default_of(
|
122
|
+
expect(cfg['ldap']['hostname']).to eq('ldap.example.com')
|
123
|
+
expect(cfg.default_of('ldap.hostname')).to eq('ldap_hostname')
|
119
124
|
end
|
120
125
|
|
121
|
-
it
|
122
|
-
ENV[
|
123
|
-
cfg = get_config(
|
126
|
+
it 'returns the default even if an environment variable was set' do
|
127
|
+
ENV['TEST_LDAP_AUTHENTICATION_BIND_DN'] = '2'
|
128
|
+
cfg = get_config('config.yml', 'local.yml').fetch
|
124
129
|
|
125
|
-
expect(cfg[
|
126
|
-
expect(cfg.default_of(
|
130
|
+
expect(cfg['ldap']['authentication']['bind_dn']).to eq(2)
|
131
|
+
expect(cfg.default_of('ldap.authentication.bind_dn')).to eq('')
|
127
132
|
end
|
128
133
|
|
129
|
-
it
|
130
|
-
cfg = get_config(
|
131
|
-
expect(cfg.default_of(
|
134
|
+
it 'returns nil for an unknown key' do
|
135
|
+
cfg = get_config('config.yml', 'local.yml').fetch
|
136
|
+
expect(cfg.default_of('something.that.does.not.exist')).to be_nil
|
132
137
|
end
|
133
138
|
end
|
134
139
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
---
|
data/spec/hash_utils_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright (C) 2017-
|
3
|
+
# Copyright (C) 2017-2022 Miquel Sabaté Solà <msabate@suse.com>
|
4
4
|
#
|
5
5
|
# This file is part of CConfig.
|
6
6
|
#
|
@@ -34,45 +34,45 @@ describe ::CConfig::HashUtils do
|
|
34
34
|
|
35
35
|
let(:default) do
|
36
36
|
{
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
37
|
+
'gravatar' => { 'enabled' => true },
|
38
|
+
'another' => { 'enabled' => true },
|
39
|
+
'ldap' => {
|
40
|
+
'enabled' => false,
|
41
|
+
'count' => 0,
|
42
|
+
'string' => ''
|
43
43
|
}
|
44
44
|
}.freeze
|
45
45
|
end
|
46
46
|
|
47
47
|
let(:local) do
|
48
48
|
{
|
49
|
-
|
50
|
-
|
51
|
-
|
49
|
+
'ldap' => {
|
50
|
+
'enabled' => true,
|
51
|
+
'count' => 1
|
52
52
|
}
|
53
53
|
}.freeze
|
54
54
|
end
|
55
55
|
|
56
|
-
it
|
57
|
-
ENV[
|
58
|
-
ENV[
|
59
|
-
ENV[
|
56
|
+
it 'merges hashes in a strict manner while evaluating env variables first' do
|
57
|
+
ENV['TEST_LDAP_COUNT'] = '2'
|
58
|
+
ENV['TEST_ANOTHER_ENABLED'] = 'false'
|
59
|
+
ENV['TEST_LDAP_STRING'] = 'string'
|
60
60
|
|
61
|
-
cfg = ConfigMock.new.strict_merge_with_env_test(default: default, local: local, prefix:
|
62
|
-
expect(cfg[
|
63
|
-
expect(cfg[
|
64
|
-
expect(cfg[
|
65
|
-
expect(cfg[
|
66
|
-
expect(cfg[
|
61
|
+
cfg = ConfigMock.new.strict_merge_with_env_test(default: default, local: local, prefix: 'test')
|
62
|
+
expect(cfg['gravatar']['enabled']).to be true # default
|
63
|
+
expect(cfg['another']['enabled']).to be false # env
|
64
|
+
expect(cfg['ldap']['enabled']).to be true # local
|
65
|
+
expect(cfg['ldap']['count']).to eq 2 # env
|
66
|
+
expect(cfg['ldap']['string']).to eq 'string' # env
|
67
67
|
end
|
68
68
|
|
69
69
|
# See issue #3
|
70
70
|
it "does not crash on nested default that doesn't exist" do
|
71
|
-
cfg = ConfigMock.new.strict_merge_with_env_test(default: default, local: local, prefix:
|
71
|
+
cfg = ConfigMock.new.strict_merge_with_env_test(default: default, local: local, prefix: 'test')
|
72
72
|
|
73
73
|
cfg.extend(::CConfig::HashUtils::Extensions)
|
74
|
-
expect(cfg).to be_enabled(
|
75
|
-
expect(cfg).not_to be_enabled(
|
76
|
-
expect(cfg).not_to be_enabled(
|
74
|
+
expect(cfg).to be_enabled('gravatar')
|
75
|
+
expect(cfg).not_to be_enabled('oauth.google_oauth2')
|
76
|
+
expect(cfg).not_to be_enabled('something.that.does.not.exist')
|
77
77
|
end
|
78
78
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright (C) 2017-
|
3
|
+
# Copyright (C) 2017-2022 Miquel Sabaté Solà <msabate@suse.com>
|
4
4
|
#
|
5
5
|
# This file is part of CConfig.
|
6
6
|
#
|
@@ -17,14 +17,14 @@
|
|
17
17
|
# You should have received a copy of the GNU Lesser General Public License
|
18
18
|
# along with CConfig. If not, see <http://www.gnu.org/licenses/>.
|
19
19
|
|
20
|
-
require
|
20
|
+
require 'codeclimate-test-reporter'
|
21
21
|
CodeClimate::TestReporter.start
|
22
22
|
|
23
|
-
require
|
23
|
+
require 'simplecov'
|
24
24
|
|
25
25
|
SimpleCov.minimum_coverage 100
|
26
26
|
SimpleCov.start do
|
27
|
-
add_group
|
27
|
+
add_group 'lib', 'lib'
|
28
28
|
end
|
29
29
|
|
30
30
|
RSpec.configure do |config|
|
metadata
CHANGED
@@ -1,33 +1,33 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cconfig
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- mssola
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-11-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: safe_yaml
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 1.0.0
|
20
|
-
- - "
|
20
|
+
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: 1.0.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
|
-
- - "
|
27
|
+
- - "~>"
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: 1.0.0
|
30
|
-
- - "
|
30
|
+
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 1.0.0
|
33
33
|
- !ruby/object:Gem::Dependency
|
@@ -76,18 +76,32 @@ dependencies:
|
|
76
76
|
name: rubocop
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|
78
78
|
requirements:
|
79
|
-
- - "
|
79
|
+
- - ">="
|
80
80
|
- !ruby/object:Gem::Version
|
81
|
-
version:
|
81
|
+
version: '1.0'
|
82
82
|
type: :development
|
83
83
|
prerelease: false
|
84
84
|
version_requirements: !ruby/object:Gem::Requirement
|
85
85
|
requirements:
|
86
|
-
- - "
|
86
|
+
- - ">="
|
87
87
|
- !ruby/object:Gem::Version
|
88
|
-
version:
|
88
|
+
version: '1.0'
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: rubocop-performance
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
type: :development
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
89
103
|
- !ruby/object:Gem::Dependency
|
90
|
-
name: rubocop-
|
104
|
+
name: rubocop-rake
|
91
105
|
requirement: !ruby/object:Gem::Requirement
|
92
106
|
requirements:
|
93
107
|
- - ">="
|
@@ -107,10 +121,9 @@ executables: []
|
|
107
121
|
extensions: []
|
108
122
|
extra_rdoc_files: []
|
109
123
|
files:
|
124
|
+
- ".github/workflows/ruby.yml"
|
110
125
|
- ".gitignore"
|
111
|
-
- ".rspec"
|
112
126
|
- ".rubocop.yml"
|
113
|
-
- ".travis.yml"
|
114
127
|
- CHANGELOG.md
|
115
128
|
- CONTRIBUTING.md
|
116
129
|
- COPYING
|
@@ -130,13 +143,15 @@ files:
|
|
130
143
|
- spec/config_spec.rb
|
131
144
|
- spec/fixtures/bad.yml
|
132
145
|
- spec/fixtures/config.yml
|
146
|
+
- spec/fixtures/empty.yml
|
133
147
|
- spec/fixtures/local.yml
|
134
148
|
- spec/hash_utils_spec.rb
|
135
149
|
- spec/spec_helper.rb
|
136
150
|
homepage: https://github.com/mssola/cconfig
|
137
151
|
licenses:
|
138
152
|
- LGPL-3.0
|
139
|
-
metadata:
|
153
|
+
metadata:
|
154
|
+
rubygems_mfa_required: 'true'
|
140
155
|
post_install_message:
|
141
156
|
rdoc_options: []
|
142
157
|
require_paths:
|
@@ -145,14 +160,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
145
160
|
requirements:
|
146
161
|
- - ">="
|
147
162
|
- !ruby/object:Gem::Version
|
148
|
-
version:
|
163
|
+
version: 2.7.0
|
149
164
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
150
165
|
requirements:
|
151
166
|
- - ">="
|
152
167
|
- !ruby/object:Gem::Version
|
153
168
|
version: '0'
|
154
169
|
requirements: []
|
155
|
-
rubygems_version: 3.
|
170
|
+
rubygems_version: 3.3.7
|
156
171
|
signing_key:
|
157
172
|
specification_version: 4
|
158
173
|
summary: Configuration management for container-aware applications.
|
data/.rspec
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
--color
|
data/.travis.yml
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
|
3
|
-
cache: bundler
|
4
|
-
|
5
|
-
sudo: false
|
6
|
-
|
7
|
-
rvm:
|
8
|
-
- 2.3
|
9
|
-
- 2.4
|
10
|
-
- 2.5
|
11
|
-
- 2.6
|
12
|
-
- 2.7
|
13
|
-
- ruby-head
|
14
|
-
|
15
|
-
before_install:
|
16
|
-
- gem update --system
|
17
|
-
- gem install bundler
|
18
|
-
|
19
|
-
script:
|
20
|
-
- bundle exec rspec
|
21
|
-
- bundle exec rubocop -V
|
22
|
-
- bundle exec rubocop -F
|
23
|
-
|
24
|
-
matrix:
|
25
|
-
allow_failures:
|
26
|
-
- rvm: ruby-head
|
27
|
-
fast_finish: true
|