loadable_config 1.0.3 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 33c373a5e0f4a214006136bab94ad6c340569d39243d42239aa6d585666b5504
4
- data.tar.gz: 346a2170ef3e5c8c8c675ee63e725d775fe6b58918f37fb5cc90b720277cf7f9
3
+ metadata.gz: 9c974e84d16ca1f1e101cdec3f960c9ddda833f662aed89801c62bf5a1242a42
4
+ data.tar.gz: 947f347ea37ed0a39d95d2efce098e885ecbd1617a5bc21ada7fddc1582bf30c
5
5
  SHA512:
6
- metadata.gz: 2a7a4699f631c1929510007fb0bb2f57aedbe8b9dd948f2646fada1e5e1ab9ccad49fe33b5b801450658e667acf308c481e5222cb3c80ab7396c4f99ec4ad972
7
- data.tar.gz: 444ed617779485ad69f4667c4be6d6781e57b304d1e7d24b9860c3f324d3f8fbc40f46f265d428bf131689228d1a8ea9c6d95240a5c9a26b648a93bad394af5a
6
+ metadata.gz: e40f35dee22f84221bcf392d4cc8c0333ea8367418402bbd8fdf31be47c2729ab8d2a5434e348b47ce3084bfbeb232974763108a1bfbb7fc8030a45d7dd3de70
7
+ data.tar.gz: 49c65edd385e9c30aaaa3ab7d4b5e40b62fa48f13959a535905ce5acc245060b1aba65425aad517b12f4d46aec3fb5332a66b7377d1e0e12881cbb9ea5ff3a0e
@@ -0,0 +1,31 @@
1
+ name: Publish Ruby Gem
2
+
3
+ on:
4
+ push:
5
+ branches: [ "master" ]
6
+
7
+ jobs:
8
+ build:
9
+ name: Build + Publish
10
+ runs-on: ubuntu-latest
11
+ permissions:
12
+ contents: read
13
+ packages: write
14
+
15
+ steps:
16
+ - uses: actions/checkout@v3
17
+ - name: Set up Ruby 2.7
18
+ uses: ruby/setup-ruby@v1
19
+ with:
20
+ ruby-version: 2.7
21
+
22
+ - name: Publish to RubyGems
23
+ run: |
24
+ mkdir -p $HOME/.gem
25
+ touch $HOME/.gem/credentials
26
+ chmod 0600 $HOME/.gem/credentials
27
+ printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
28
+ gem build *.gemspec
29
+ gem push *.gem
30
+ env:
31
+ GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"
@@ -0,0 +1,42 @@
1
+ name: Run Tests
2
+
3
+ on:
4
+ pull_request:
5
+ branches: "**"
6
+
7
+ permissions:
8
+ contents: read
9
+ checks: write
10
+ pull-requests: write
11
+
12
+ jobs:
13
+ test:
14
+ runs-on: ubuntu-latest
15
+
16
+ strategy:
17
+ fail-fast: false
18
+ matrix:
19
+ ruby-version: ['2.7', '3.0', '3.1', '3.2']
20
+
21
+ steps:
22
+ - uses: actions/checkout@v3
23
+ - name: Set up Ruby
24
+ uses: ruby/setup-ruby@v1
25
+ with:
26
+ ruby-version: ${{ matrix.ruby-version }}
27
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
28
+ - name: Run tests
29
+ run: bundle exec rspec --profile 10 --format RspecJunitFormatter --out test_results/rspec.xml --format progress
30
+ - name: Upload result
31
+ uses: actions/upload-artifact@v3
32
+ if: always()
33
+ with:
34
+ name: rspec_${{ matrix.ruby-version }}.xml
35
+ path: test_results/rspec.xml
36
+ - name: Test Report
37
+ uses: dorny/test-reporter@v1
38
+ if: always()
39
+ with:
40
+ name: Rspec Tests - ${{ matrix.ruby-version }}
41
+ path: test_results/rspec.xml
42
+ reporter: java-junit
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class LoadableConfig::Options
4
- attr_reader :config_path_prefix, :environment_key, :preprocessor
4
+ attr_reader :config_path_prefix, :environment_key, :preprocessor, :overlay_function
5
5
 
6
6
  def initialize
7
7
  # Prefix for configuration file paths. Must be a valid directory, for
@@ -18,6 +18,11 @@ class LoadableConfig::Options
18
18
  # If set, uses the provided block to preprocess the configuration file
19
19
  # before YAML parsing.
20
20
  @preprocessor = nil
21
+
22
+ # If set, calls the provided block with the configuration class after
23
+ # parsing to obtain a configuration overlay. If a value is returned, it is
24
+ # deep_merged into the application.
25
+ @overlay_function = nil
21
26
  end
22
27
 
23
28
  def config_path_prefix=(val)
@@ -35,4 +40,8 @@ class LoadableConfig::Options
35
40
  def preprocess(&block)
36
41
  @preprocessor = block
37
42
  end
43
+
44
+ def overlay(&block)
45
+ @overlay_function = block
46
+ end
38
47
  end
@@ -1,3 +1,3 @@
1
1
  class LoadableConfig
2
- VERSION = '1.0.3'
2
+ VERSION = '1.0.4'
3
3
  end
@@ -103,6 +103,11 @@ class LoadableConfig
103
103
  end
104
104
  end
105
105
 
106
+ if (overlay_function = LoadableConfig._configuration.overlay_function)
107
+ overlay_data = overlay_function.call(self.class)
108
+ config = _deep_merge(config, overlay_data) if overlay_data
109
+ end
110
+
106
111
  unless config
107
112
  raise RuntimeError.new("Configuration file missing config for #{self.class.name}.")
108
113
  end
@@ -142,4 +147,14 @@ class LoadableConfig
142
147
  'additionalProperties' => false,
143
148
  )
144
149
  end
150
+
151
+ def _deep_merge(a_hash, b_hash)
152
+ a_hash.merge(b_hash) do |_key, a_val, b_val|
153
+ if a_val.is_a?(Hash) && b_val.is_a?(Hash)
154
+ _deep_merge(a_val, b_val)
155
+ else
156
+ b_val
157
+ end
158
+ end
159
+ end
145
160
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: loadable_config
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - iKnow Team
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-06-21 00:00:00.000000000 Z
11
+ date: 2023-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json_schema
@@ -73,7 +73,8 @@ executables: []
73
73
  extensions: []
74
74
  extra_rdoc_files: []
75
75
  files:
76
- - ".circleci/config.yml"
76
+ - ".github/workflows/gem-push.yml"
77
+ - ".github/workflows/test.yml"
77
78
  - ".gitignore"
78
79
  - ".rspec"
79
80
  - ".travis.yml"
@@ -106,7 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
107
  - !ruby/object:Gem::Version
107
108
  version: '0'
108
109
  requirements: []
109
- rubygems_version: 3.3.11
110
+ rubygems_version: 3.1.6
110
111
  signing_key:
111
112
  specification_version: 4
112
113
  summary: Simple declarative configuration files
data/.circleci/config.yml DELETED
@@ -1,102 +0,0 @@
1
- version: 2.1
2
-
3
- executors:
4
- ruby:
5
- parameters:
6
- ruby-version:
7
- type: string
8
- default: "2.6"
9
- gemfile:
10
- type: string
11
- default: "Gemfile"
12
- docker:
13
- - image: cimg/ruby:<< parameters.ruby-version >>
14
- environment:
15
- BUNDLE_JOBS: 3
16
- BUNDLE_RETRY: 3
17
- BUNDLE_PATH: vendor/bundle
18
- RAILS_ENV: test
19
- BUNDLE_GEMFILE: << parameters.gemfile >>
20
-
21
- jobs:
22
- test:
23
- parameters:
24
- ruby-version:
25
- type: string
26
- executor:
27
- name: ruby
28
- ruby-version: << parameters.ruby-version >>
29
- parallelism: 1
30
- steps:
31
- - checkout
32
-
33
- - run:
34
- # Remove the non-appraisal gemfile for safety: we never want to use it.
35
- name: Prepare bundler
36
- command: bundle -v
37
-
38
- - run:
39
- name: Compute a gemfile lock
40
- command: bundle lock && cp "${BUNDLE_GEMFILE}.lock" /tmp/gem-lock
41
-
42
- - restore_cache:
43
- keys:
44
- - loadable_config-<< parameters.ruby-version >>-{{ checksum "/tmp/gem-lock" }}
45
- - loadable_config-
46
-
47
- - run:
48
- name: Bundle Install
49
- command: bundle check || bundle install
50
-
51
- - save_cache:
52
- key: loadable_config-<< parameters.ruby-version >>-{{ checksum "/tmp/gem-lock" }}
53
- paths:
54
- - vendor/bundle
55
-
56
- - run:
57
- name: Run rspec
58
- command: bundle exec rspec --profile 10 --format RspecJunitFormatter --out test_results/rspec.xml --format progress
59
-
60
- - store_test_results:
61
- path: test_results
62
-
63
- publish:
64
- executor: ruby
65
- steps:
66
- - checkout
67
- - run:
68
- name: Setup Rubygems
69
- command: |
70
- mkdir ~/.gem &&
71
- echo -e "---\r\n:rubygems_api_key: $RUBYGEMS_API_KEY" > ~/.gem/credentials &&
72
- chmod 0600 ~/.gem/credentials
73
- - run:
74
- name: Publish to Rubygems
75
- command: |
76
- gem build loadable_config.gemspec
77
- gem push loadable_config-*.gem
78
-
79
-
80
- workflows:
81
- version: 2.1
82
- build:
83
- jobs:
84
- - test:
85
- name: 'ruby 2.7'
86
- ruby-version: "2.7"
87
- - test:
88
- name: 'ruby 3.0'
89
- ruby-version: "3.0"
90
- - test:
91
- name: 'ruby 3.1'
92
- ruby-version: "3.1"
93
- - publish:
94
- requires:
95
- - 'ruby 2.7'
96
- - 'ruby 3.0'
97
- - 'ruby 3.1'
98
- filters:
99
- branches:
100
- only: master
101
- tags:
102
- ignore: /.*/