cconfig 1.3.0 → 1.3.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|