global 2.0.0 → 2.1.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.
- checksums.yaml +4 -4
- data/.github/workflows/tests.yml +24 -0
- data/README.md +9 -3
- data/lib/global/backend/filesystem.rb +10 -7
- data/lib/global/base.rb +1 -1
- data/lib/global/configuration.rb +6 -2
- data/lib/global/version.rb +1 -1
- data/spec/global/configuration_spec.rb +16 -4
- metadata +6 -6
- data/.travis.yml +0 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0da470ddbf97c73984898898bbada287d1fef733da1059016dbe7021a6b4e55a
|
4
|
+
data.tar.gz: b5cf15fb7e5a9e4e9cb7b30a0bf1265a374693d6f1423b95940976c9beeca3f0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cbd030fd6ced5e6e3f0d47d75d14f59e16a69411814b1432f0bf66fb03444950006a87b86eed155f758c4a5535eb6e8d9d870edbecdc26c9a66b2a9230384e82
|
7
|
+
data.tar.gz: b99c7b6c92c33324834ad7fd92c75606a9abddbe7d8fe0fbe22b344013000a49073ece171b8063713b370d2c6526c6c0eee928584c90317e5592034506bc3790
|
@@ -0,0 +1,24 @@
|
|
1
|
+
name: Runs linter and tests
|
2
|
+
|
3
|
+
on: [push, pull_request]
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
linters_and_tests:
|
7
|
+
runs-on: ${{ matrix.os }}-latest
|
8
|
+
continue-on-error: ${{ matrix.experimental == true }}
|
9
|
+
name: Linter and tests on ${{ matrix.os }}-ruby-${{ matrix.ruby-version }}
|
10
|
+
strategy:
|
11
|
+
matrix:
|
12
|
+
os: [ubuntu, macos]
|
13
|
+
ruby-version: ['3.1', '3.0', '2.7', '2.6', '2.5']
|
14
|
+
steps:
|
15
|
+
- uses: actions/checkout@v2
|
16
|
+
|
17
|
+
- name: Set up Ruby
|
18
|
+
uses: ruby/setup-ruby@v1
|
19
|
+
with:
|
20
|
+
ruby-version: ${{ matrix.ruby-version }}
|
21
|
+
bundler-cache: true
|
22
|
+
|
23
|
+
- name: Runs linter and tests
|
24
|
+
run: bundle exec rake
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Global [](https://github.com/railsware/global/actions/workflows/tests.yml) [](https://codeclimate.com/github/railsware/global)
|
2
2
|
|
3
3
|
The 'global' gem provides accessor methods for your configuration data and share configuration across backend and frontend.
|
4
4
|
|
@@ -19,14 +19,14 @@ Refer to the documentation on your chosen backend class for other dependencies.
|
|
19
19
|
Refer to the documentation on your chosen backend class for configuration options.
|
20
20
|
|
21
21
|
```ruby
|
22
|
-
> Global.backend(:filesystem, environment: "YOUR_ENV_HERE",
|
22
|
+
> Global.backend(:filesystem, environment: "YOUR_ENV_HERE", path: "PATH_TO_DIRECTORY_WITH_FILES")
|
23
23
|
```
|
24
24
|
|
25
25
|
Or you can use `configure` block:
|
26
26
|
|
27
27
|
```ruby
|
28
28
|
Global.configure do |config|
|
29
|
-
config.backend :filesystem, environment: "YOUR_ENV_HERE",
|
29
|
+
config.backend :filesystem, environment: "YOUR_ENV_HERE", path: "PATH_TO_DIRECTORY_WITH_FILES"
|
30
30
|
# set up multiple backends and have them merged together:
|
31
31
|
config.backend :aws_parameter_store, prefix: '/prod/MyApp/'
|
32
32
|
config.backend :gcp_secret_manager, prefix: 'prod-myapp-', project_id: 'example'
|
@@ -252,6 +252,12 @@ Some steps you will need to follow:
|
|
252
252
|
- If you will use encrypted parameters: create a KMS key and allow the role to decrypt using the key.
|
253
253
|
- Create parameters in Parameter Store. Use encryption for sensitive data like private keys and API credentials.
|
254
254
|
|
255
|
+
#### Usage with Go
|
256
|
+
|
257
|
+
You can reuse the same configuration in your Go services. For this, we developed a Go module that loads the same configuration tree into Go structs.
|
258
|
+
|
259
|
+
See [github.com/railsware/go-global](https://github.com/railsware/go-global) for further instructions.
|
260
|
+
|
255
261
|
#### Configuration examples
|
256
262
|
|
257
263
|
Backend setup:
|
@@ -5,12 +5,12 @@ module Global
|
|
5
5
|
# Loads Global configuration from the filesystem
|
6
6
|
#
|
7
7
|
# Available options:
|
8
|
-
# - `
|
8
|
+
# - `path` (required): the directory with config files
|
9
9
|
# - `environment` (required): the environment to load
|
10
10
|
# - `yaml_whitelist_classes`: the set of classes that are permitted to unmarshal from the configuration files
|
11
11
|
#
|
12
12
|
# For Rails:
|
13
|
-
# - the `
|
13
|
+
# - the `path` is optional and defaults to `config/global`
|
14
14
|
# - the `environment` is optional and defaults to the current Rails environment
|
15
15
|
class Filesystem
|
16
16
|
|
@@ -60,11 +60,14 @@ module Global
|
|
60
60
|
end
|
61
61
|
|
62
62
|
def load_yml_file(file)
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
63
|
+
file_contents = ERB.new(IO.read(file)).result
|
64
|
+
permitted_classes = [Date, Time, DateTime, Symbol].concat(@yaml_whitelist_classes)
|
65
|
+
|
66
|
+
if Gem::Version.new(Psych::VERSION) >= Gem::Version.new('4')
|
67
|
+
YAML.safe_load(file_contents, permitted_classes: permitted_classes, aliases: true)
|
68
|
+
else
|
69
|
+
YAML.safe_load(file_contents, permitted_classes, [], true)
|
70
|
+
end
|
68
71
|
end
|
69
72
|
|
70
73
|
def load_from_directory(path)
|
data/lib/global/base.rb
CHANGED
@@ -34,7 +34,7 @@ module Global
|
|
34
34
|
# and the configuration hashes will be merged.
|
35
35
|
#
|
36
36
|
# Configure with either:
|
37
|
-
# Global.backend :filesystem,
|
37
|
+
# Global.backend :filesystem, path: 'config', environment: Rails.env
|
38
38
|
# or:
|
39
39
|
# Global.backend YourConfigurationBackend.new
|
40
40
|
#
|
data/lib/global/configuration.rb
CHANGED
@@ -45,7 +45,7 @@ module Global
|
|
45
45
|
|
46
46
|
def respond_to_missing?(method_name, include_private = false)
|
47
47
|
method = normalize_key_by_method(method_name)
|
48
|
-
key?(method) || super
|
48
|
+
key?(method) || boolean_method?(method) || super
|
49
49
|
end
|
50
50
|
|
51
51
|
def method_missing(method, *args, &block)
|
@@ -57,8 +57,12 @@ module Global
|
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
|
+
def boolean_method?(method)
|
61
|
+
'?' == method.to_s[-1]
|
62
|
+
end
|
63
|
+
|
60
64
|
def normalize_key_by_method(method)
|
61
|
-
|
65
|
+
boolean_method?(method) ? method.to_s[0..-2].to_sym : method
|
62
66
|
end
|
63
67
|
|
64
68
|
end
|
data/lib/global/version.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
5
|
RSpec.describe Global::Configuration do
|
6
|
-
let(:hash) { { 'key' => 'value', 'nested' => { 'key' => 'value' }} }
|
6
|
+
let(:hash) { { 'key' => 'value', 'boolean_key' => true, 'nested' => { 'key' => 'value' }} }
|
7
7
|
let(:configuration) { described_class.new hash }
|
8
8
|
|
9
9
|
describe '#hash' do
|
@@ -68,7 +68,7 @@ RSpec.describe Global::Configuration do
|
|
68
68
|
context 'when include all' do
|
69
69
|
let(:filter_options) { { only: :all } }
|
70
70
|
|
71
|
-
it { should == { 'key' => 'value', 'nested' => { 'key' => 'value' }} }
|
71
|
+
it { should == { 'key' => 'value', 'boolean_key' => true, 'nested' => { 'key' => 'value' }} }
|
72
72
|
end
|
73
73
|
|
74
74
|
context 'when except all' do
|
@@ -80,7 +80,7 @@ RSpec.describe Global::Configuration do
|
|
80
80
|
context 'when except present' do
|
81
81
|
let(:filter_options) { { except: %w[key] } }
|
82
82
|
|
83
|
-
it { should == { 'nested' => { 'key' => 'value' }} }
|
83
|
+
it { should == { 'boolean_key' => true, 'nested' => { 'key' => 'value' }} }
|
84
84
|
end
|
85
85
|
|
86
86
|
context 'when include present' do
|
@@ -97,18 +97,30 @@ RSpec.describe Global::Configuration do
|
|
97
97
|
end
|
98
98
|
|
99
99
|
describe '#method_missing' do
|
100
|
-
context 'when key
|
100
|
+
context 'when key exists' do
|
101
101
|
subject { configuration.key }
|
102
102
|
|
103
103
|
it { is_expected.to eq('value') }
|
104
104
|
end
|
105
105
|
|
106
|
+
context 'when boolean key exists' do
|
107
|
+
subject { configuration.boolean_key? }
|
108
|
+
|
109
|
+
it { is_expected.to eq(true) }
|
110
|
+
end
|
111
|
+
|
106
112
|
context 'when key does not exist' do
|
107
113
|
subject { configuration.some_key }
|
108
114
|
|
109
115
|
it { expect { subject }.to raise_error(NoMethodError) }
|
110
116
|
end
|
111
117
|
|
118
|
+
context 'when boolean key does not exist' do
|
119
|
+
subject { configuration.some_boolean_key? }
|
120
|
+
|
121
|
+
it { expect { subject }.to raise_error(NoMethodError) }
|
122
|
+
end
|
123
|
+
|
112
124
|
context 'with nested hash' do
|
113
125
|
subject { configuration.nested.key }
|
114
126
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: global
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Railsware LLC
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-01-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-ssm
|
@@ -115,11 +115,11 @@ executables:
|
|
115
115
|
extensions: []
|
116
116
|
extra_rdoc_files: []
|
117
117
|
files:
|
118
|
+
- ".github/workflows/tests.yml"
|
118
119
|
- ".gitignore"
|
119
120
|
- ".rspec"
|
120
121
|
- ".rubocop.yml"
|
121
122
|
- ".ruby-version"
|
122
|
-
- ".travis.yml"
|
123
123
|
- CODE_OF_CONDUCT.md
|
124
124
|
- Gemfile
|
125
125
|
- LICENSE.txt
|
@@ -150,7 +150,7 @@ homepage: https://github.com/railsware/global
|
|
150
150
|
licenses:
|
151
151
|
- MIT
|
152
152
|
metadata: {}
|
153
|
-
post_install_message:
|
153
|
+
post_install_message:
|
154
154
|
rdoc_options: []
|
155
155
|
require_paths:
|
156
156
|
- lib
|
@@ -166,7 +166,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
166
166
|
version: '0'
|
167
167
|
requirements: []
|
168
168
|
rubygems_version: 3.0.3
|
169
|
-
signing_key:
|
169
|
+
signing_key:
|
170
170
|
specification_version: 4
|
171
171
|
summary: Simple way to load your configs from yaml/aws/gcp
|
172
172
|
test_files:
|
data/.travis.yml
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
os: linux
|
3
|
-
dist: bionic
|
4
|
-
|
5
|
-
cache:
|
6
|
-
bundler: true
|
7
|
-
|
8
|
-
rvm:
|
9
|
-
- 2.4
|
10
|
-
- 2.5
|
11
|
-
- 2.6
|
12
|
-
- 2.7
|
13
|
-
- ruby-head
|
14
|
-
- jruby-head
|
15
|
-
|
16
|
-
notifications:
|
17
|
-
email: false
|
18
|
-
|
19
|
-
matrix:
|
20
|
-
allow_failures:
|
21
|
-
- rvm: ruby-head
|
22
|
-
- rvm: jruby-head
|