legion-settings 1.3.14 → 1.3.16

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6916c1cced7ef98b95b8e6e62b6f1c21eb7981afdb5acccdd649d7de0c4509d5
4
- data.tar.gz: 7317a016bcbccbc30f554453342882913f127fd9e7ff257949381619ff7640a8
3
+ metadata.gz: 4263d479bb6b10a4fad1e5e0337153a8ff3f4ae6ff29beaf1089968e70b15f0c
4
+ data.tar.gz: 3f760ac986406ee7bd6ea9bdad044674e9e591936a01db682c315e63c9d52dfd
5
5
  SHA512:
6
- metadata.gz: cbd256e6a54095c29557798fa828db210e2b4e305201f6022848e7d48a87ae8d50ca1703af0071c3408cee6388531676dca6472442ae2a6058cf8428be5d9c22
7
- data.tar.gz: fba8430817f85d31713cc877bdd2258e1bcec190c32d9628de99e2afe671b8c465150c23fa6d3bd1a1ac20627a7bbbcf3ad9b1ba7a36d74ab1a939d7a411bf4c
6
+ metadata.gz: 3739c42b861c346d5e5915680bcd2a80277e9ecc77ca784106051003e7a03af6720e348a291c689b9f66ac5611bb4d74b41c24f5b5abbb1182493661d172bbfe
7
+ data.tar.gz: 2c1710786b2786c4ba263a7eb49d67701d20ad332245a99fa8fee2b28ce128faeffc0895efe52af0bc4512a4e2fc0dc068f0f2db71e0a6c3b8334bd664c8aaf0
@@ -0,0 +1,6 @@
1
+ # Auto-generated from team-config.yml
2
+ # Team: core
3
+ #
4
+ # To apply: scripts/apply-codeowners.sh legion-settings
5
+
6
+ * @LegionIO/maintainers @LegionIO/core
@@ -0,0 +1,18 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: bundler
4
+ directory: /
5
+ schedule:
6
+ interval: weekly
7
+ day: monday
8
+ open-pull-requests-limit: 5
9
+ labels:
10
+ - "type:dependencies"
11
+ - package-ecosystem: github-actions
12
+ directory: /
13
+ schedule:
14
+ interval: weekly
15
+ day: monday
16
+ open-pull-requests-limit: 5
17
+ labels:
18
+ - "type:dependencies"
@@ -3,14 +3,32 @@ on:
3
3
  push:
4
4
  branches: [main]
5
5
  pull_request:
6
+ schedule:
7
+ - cron: '0 9 * * 1'
6
8
 
7
9
  jobs:
8
10
  ci:
9
11
  uses: LegionIO/.github/.github/workflows/ci.yml@main
10
12
 
13
+ lint:
14
+ uses: LegionIO/.github/.github/workflows/lint-patterns.yml@main
15
+
16
+ security:
17
+ uses: LegionIO/.github/.github/workflows/security-scan.yml@main
18
+
19
+ version-changelog:
20
+ uses: LegionIO/.github/.github/workflows/version-changelog.yml@main
21
+
22
+ dependency-review:
23
+ uses: LegionIO/.github/.github/workflows/dependency-review.yml@main
24
+
25
+ stale:
26
+ if: github.event_name == 'schedule'
27
+ uses: LegionIO/.github/.github/workflows/stale.yml@main
28
+
11
29
  release:
12
- needs: ci
30
+ needs: [ci, lint]
13
31
  if: github.event_name == 'push' && github.ref == 'refs/heads/main'
14
32
  uses: LegionIO/.github/.github/workflows/release.yml@main
15
33
  secrets:
16
- rubygems-api-key: ${{ secrets.RUBYGEMS_API_KEY }}
34
+ rubygems-api-key: ${{ secrets.RUBYGEMS_API_KEY }}
data/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # Legion::Settings Changelog
2
2
 
3
+ ## [1.3.16] - 2026-03-24
4
+
5
+ ### Fixed
6
+ - `Loader#load_module_settings` and `#load_module_default` now reset `@indifferent_access = false` after replacing `@settings` with a new plain Hash from `deep_merge`, preventing stale state where string key access silently returned nil on subsequent `to_hash` calls (fixes #4)
7
+
8
+ ## [1.3.15] - 2026-03-23
9
+
10
+ ### Added
11
+ - `Loader.default_directories` class method: canonical settings directory discovery with `LEGION_SETTINGS_DIRS` env var override
12
+ - Returns `~/.legionio/settings` + `/etc/legionio/settings` (unix) or `~/.legionio/settings` + optional `%APPDATA%\legionio\settings` (windows, when APPDATA is set)
13
+ - `log_info` private helper for info-level logging in Loader
14
+
15
+ ### Changed
16
+ - `load_directory` logging upgraded from debug to info level
17
+
3
18
  ## [1.3.14] - 2026-03-22
4
19
 
5
20
  ### Added
@@ -13,6 +13,23 @@ module Legion
13
13
  class Error < RuntimeError; end
14
14
  attr_reader :warnings, :errors, :loaded_files, :settings
15
15
 
16
+ def self.default_directories
17
+ env_dirs = ENV.fetch('LEGION_SETTINGS_DIRS', nil)
18
+ if env_dirs && !env_dirs.strip.empty?
19
+ env_dirs_list = env_dirs.split(File::PATH_SEPARATOR).map(&:strip).reject(&:empty?).map { |p| File.expand_path(p) }
20
+ return env_dirs_list unless env_dirs_list.empty?
21
+ end
22
+
23
+ dirs = [File.expand_path('~/.legionio/settings')]
24
+ if OS.windows?
25
+ appdata = ENV.fetch('APPDATA', nil)
26
+ dirs << File.join(appdata, 'legionio', 'settings') if appdata && !appdata.strip.empty?
27
+ else
28
+ dirs << '/etc/legionio/settings'
29
+ end
30
+ dirs
31
+ end
32
+
16
33
  def initialize
17
34
  @warnings = []
18
35
  @errors = []
@@ -160,6 +177,7 @@ module Legion
160
177
  mod_name = config.keys.first
161
178
  log_debug("Loading module settings: #{mod_name}")
162
179
  @settings = deep_merge(config, @settings)
180
+ @indifferent_access = false
163
181
  end
164
182
 
165
183
  def load_module_default(config)
@@ -168,6 +186,7 @@ module Legion
168
186
  merged = deep_merge(@settings, config)
169
187
  deep_diff(@settings, merged) unless @loaded_files.empty?
170
188
  @settings = merged
189
+ @indifferent_access = false
171
190
  end
172
191
 
173
192
  def load_file(file)
@@ -195,7 +214,7 @@ module Legion
195
214
  if File.readable?(path) && File.executable?(path)
196
215
  files = Dir.glob(File.join(path, '**{,/*/**}/*.json')).uniq
197
216
  files.each { |file| load_file(file) }
198
- log_debug("Loaded directory #{path}: #{files.size} files")
217
+ log_info("Settings: loaded directory #{path} (#{files.size} files)")
199
218
  else
200
219
  load_error('insufficient permissions for loading', directory: directory)
201
220
  end
@@ -373,6 +392,10 @@ module Legion
373
392
  'unknown'
374
393
  end
375
394
 
395
+ def log_info(message)
396
+ defined?(Legion::Logging) ? Legion::Logging.info(message) : $stdout.puts(message)
397
+ end
398
+
376
399
  def log_debug(message)
377
400
  Legion::Logging.debug(message) if defined?(Legion::Logging)
378
401
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Legion
4
4
  module Settings
5
- VERSION = '1.3.14'
5
+ VERSION = '1.3.16'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: legion-settings
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.14
4
+ version: 1.3.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity
@@ -34,6 +34,8 @@ extra_rdoc_files:
34
34
  - LICENSE
35
35
  - README.md
36
36
  files:
37
+ - ".github/CODEOWNERS"
38
+ - ".github/dependabot.yml"
37
39
  - ".github/workflows/ci.yml"
38
40
  - ".gitignore"
39
41
  - ".rubocop.yml"