kreds 1.1.6 → 2.0.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/CHANGELOG.md +13 -0
- data/README.md +18 -6
- data/kreds.gemspec +5 -5
- data/lib/kreds/fetch.rb +7 -17
- data/lib/kreds/inputs.rb +13 -16
- data/lib/kreds/show.rb +5 -1
- data/lib/kreds/version.rb +1 -1
- metadata +11 -25
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 999a28daaa8839baa7e0ef9d1c2ff9f71fe244852ff18aa915998a8b48778214
|
|
4
|
+
data.tar.gz: 61fc895370da4b88283255b5d624105a915aef7e6ccf243817a52bde688105f7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d832a8fc6215794b577870950409214c0a3271032be13405037e304101b6b2f63f74724ff6af3bf6d956f21401232001a27aa652ff7176f465999b8d3c4545ae
|
|
7
|
+
data.tar.gz: 8436bcf11fa89dd44a88683f6b05e657e984be67b82caaf603308abec24e09685cb42112e3163387d79d89f4bc3f80caa456d919dbcfe2d0f00996622678e932
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
## v2.0.0
|
|
2
|
+
|
|
3
|
+
- Dropped support for Ruby 3.2
|
|
4
|
+
- Dropped support for Rails 7.1
|
|
5
|
+
- Improved error messages and input validation
|
|
6
|
+
- Added `Kreds.env_show` method
|
|
7
|
+
- `Kreds.env_fetch!` now raises `InvalidArgumentError` when called with no keys
|
|
8
|
+
|
|
9
|
+
## v1.1.7
|
|
10
|
+
|
|
11
|
+
- Added support for Ruby 4
|
|
12
|
+
- Dropped unnecessary dependencies
|
|
13
|
+
|
|
1
14
|
## v1.1.6
|
|
2
15
|
|
|
3
16
|
- Added support for Rails 8.1
|
data/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
[](https://github.com/enjaku4/kreds/actions/workflows/ci.yml)
|
|
6
6
|
[](LICENSE)
|
|
7
7
|
|
|
8
|
-
Rails credentials are a convenient way to store secrets, but retrieving them could be more intuitive
|
|
8
|
+
Rails credentials are a convenient way to store secrets, but retrieving them could be more intuitive. Kreds provides a simpler, shorter, and safer way to access Rails credentials with blank value detection and clear human-readable error messages.
|
|
9
9
|
|
|
10
10
|
**Example of Usage:**
|
|
11
11
|
|
|
@@ -24,10 +24,10 @@ Rails.application.credentials.fetch(:recaptcha).fetch(:key)
|
|
|
24
24
|
|
|
25
25
|
# Kreds (clear, human-readable errors):
|
|
26
26
|
Kreds.fetch!(:recaptcha, :site_key)
|
|
27
|
-
# => Blank value in credentials:
|
|
27
|
+
# => Blank value in credentials: :recaptcha => :site_key (Kreds::BlankCredentialsError)
|
|
28
28
|
|
|
29
29
|
Kreds.fetch!(:recaptcha, :key)
|
|
30
|
-
# => Credentials key not found:
|
|
30
|
+
# => Credentials key not found: :recaptcha => :key (Kreds::UnknownCredentialsError)
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
## Table of Contents
|
|
@@ -54,7 +54,7 @@ gem "kreds"
|
|
|
54
54
|
|
|
55
55
|
Install the gem:
|
|
56
56
|
|
|
57
|
-
```
|
|
57
|
+
```shell
|
|
58
58
|
bundle install
|
|
59
59
|
```
|
|
60
60
|
|
|
@@ -139,13 +139,25 @@ Useful for debugging and exploring available credentials in the Rails console.
|
|
|
139
139
|
|
|
140
140
|
```ruby
|
|
141
141
|
Kreds.show
|
|
142
|
+
# => { production: { aws: { access_key_id: "...", secret_access_key: "..." } }, ... }
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**`Kreds.env_show`**
|
|
146
|
+
|
|
147
|
+
Like `show`, but scoped to the current Rails environment.
|
|
148
|
+
|
|
149
|
+
**Returns:** Hash containing credentials for `Rails.env`
|
|
150
|
+
|
|
151
|
+
```ruby
|
|
152
|
+
# In production, returns credentials[:production]
|
|
153
|
+
Kreds.env_show
|
|
142
154
|
# => { aws: { access_key_id: "...", secret_access_key: "..." }, ... }
|
|
143
155
|
```
|
|
144
156
|
|
|
145
157
|
## Getting Help and Contributing
|
|
146
158
|
|
|
147
159
|
### Getting Help
|
|
148
|
-
Have a question or need assistance? Open a discussion in
|
|
160
|
+
Have a question or need assistance? Open a discussion in the [discussions section](https://github.com/enjaku4/kreds/discussions) for:
|
|
149
161
|
- Usage questions
|
|
150
162
|
- Implementation guidance
|
|
151
163
|
- Feature suggestions
|
|
@@ -160,7 +172,7 @@ Found a bug? Please [create an issue](https://github.com/enjaku4/kreds/issues) w
|
|
|
160
172
|
Ready to contribute? You can:
|
|
161
173
|
- Fix bugs by submitting pull requests
|
|
162
174
|
- Improve documentation
|
|
163
|
-
- Add new features (please discuss first in
|
|
175
|
+
- Add new features (please discuss first in the [discussions section](https://github.com/enjaku4/kreds/discussions))
|
|
164
176
|
|
|
165
177
|
Before contributing, please read the [contributing guidelines](https://github.com/enjaku4/kreds/blob/master/CONTRIBUTING.md)
|
|
166
178
|
|
data/kreds.gemspec
CHANGED
|
@@ -4,18 +4,19 @@ Gem::Specification.new do |spec|
|
|
|
4
4
|
spec.name = "kreds"
|
|
5
5
|
spec.version = Kreds::VERSION
|
|
6
6
|
spec.authors = ["enjaku4"]
|
|
7
|
-
spec.email = ["
|
|
7
|
+
spec.email = ["contact@brownbox.dev"]
|
|
8
8
|
spec.homepage = "https://github.com/enjaku4/kreds"
|
|
9
9
|
spec.metadata["homepage_uri"] = spec.homepage
|
|
10
10
|
spec.metadata["source_code_uri"] = spec.homepage
|
|
11
11
|
spec.metadata["changelog_uri"] = "#{spec.homepage}/blob/master/CHANGELOG.md"
|
|
12
12
|
spec.metadata["bug_tracker_uri"] = "#{spec.homepage}/issues"
|
|
13
13
|
spec.metadata["documentation_uri"] = "#{spec.homepage}/blob/master/README.md"
|
|
14
|
+
spec.metadata["mailing_list_uri"] = "#{spec.homepage}/discussions"
|
|
14
15
|
spec.metadata["rubygems_mfa_required"] = "true"
|
|
15
16
|
spec.summary = "The missing shorthand for Rails credentials"
|
|
16
|
-
spec.description = "
|
|
17
|
+
spec.description = "Simpler and safer Rails credentials access with blank value detection and clear error messages"
|
|
17
18
|
spec.license = "MIT"
|
|
18
|
-
spec.required_ruby_version = ">= 3.
|
|
19
|
+
spec.required_ruby_version = ">= 3.3", "< 4.1"
|
|
19
20
|
|
|
20
21
|
spec.files = [
|
|
21
22
|
"kreds.gemspec", "README.md", "CHANGELOG.md", "LICENSE.txt"
|
|
@@ -23,6 +24,5 @@ Gem::Specification.new do |spec|
|
|
|
23
24
|
|
|
24
25
|
spec.require_paths = ["lib"]
|
|
25
26
|
|
|
26
|
-
spec.add_dependency "
|
|
27
|
-
spec.add_dependency "rails", ">= 7.1", "< 8.2"
|
|
27
|
+
spec.add_dependency "rails", ">= 7.2", "< 8.2"
|
|
28
28
|
end
|
data/lib/kreds/fetch.rb
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
module Kreds
|
|
2
2
|
module Fetch
|
|
3
3
|
def fetch!(*keys, var: nil, &)
|
|
4
|
-
symbolized_keys = Kreds::Inputs.process(
|
|
5
|
-
keys, as: :symbol_array, message: "Expected an array of symbols or strings, got `#{keys.inspect}`"
|
|
6
|
-
)
|
|
4
|
+
symbolized_keys = Kreds::Inputs.process(keys, as: :symbol_array)
|
|
7
5
|
|
|
8
6
|
path = []
|
|
9
7
|
|
|
@@ -12,23 +10,15 @@ module Kreds
|
|
|
12
10
|
fetch_key(hash, key, path, symbolized_keys)
|
|
13
11
|
end
|
|
14
12
|
rescue Kreds::BlankCredentialsError, Kreds::UnknownCredentialsError => e
|
|
15
|
-
fallback_to_var(
|
|
16
|
-
e,
|
|
17
|
-
Kreds::Inputs.process(
|
|
18
|
-
var, as: :non_empty_string, optional: true, message: "Expected a non-empty string, got `#{var.inspect}`"
|
|
19
|
-
),
|
|
20
|
-
&
|
|
21
|
-
)
|
|
13
|
+
fallback_to_var(e, Kreds::Inputs.process(var, as: :non_empty_string, optional: true), &)
|
|
22
14
|
end
|
|
23
15
|
|
|
24
16
|
def env_fetch!(*keys, var: nil, &)
|
|
25
|
-
fetch!(Rails.env, *keys, var:, &)
|
|
17
|
+
fetch!(Rails.env, *Kreds::Inputs.process(keys, as: :symbol_array), var:, &)
|
|
26
18
|
end
|
|
27
19
|
|
|
28
20
|
def var!(var, &)
|
|
29
|
-
value = ENV.fetch(
|
|
30
|
-
Kreds::Inputs.process(var, as: :non_empty_string, message: "Expected a non-empty string, got `#{var.inspect}`")
|
|
31
|
-
)
|
|
21
|
+
value = ENV.fetch(Kreds::Inputs.process(var, as: :non_empty_string))
|
|
32
22
|
|
|
33
23
|
return raise_or_yield(Kreds::BlankEnvironmentVariableError.new("Blank value in environment variable: #{var.inspect}"), &) if value.blank?
|
|
34
24
|
|
|
@@ -43,7 +33,7 @@ module Kreds
|
|
|
43
33
|
value = hash.fetch(key)
|
|
44
34
|
|
|
45
35
|
raise Kreds::BlankCredentialsError, "Blank value in credentials: #{path_to_s(path)}" if value.blank?
|
|
46
|
-
raise Kreds::UnknownCredentialsError, "Credentials key not found: #{path_to_s(path
|
|
36
|
+
raise Kreds::UnknownCredentialsError, "Credentials key not found: #{path_to_s(path.append(keys[path.size]))}" unless value.is_a?(Hash) || keys == path
|
|
47
37
|
|
|
48
38
|
value
|
|
49
39
|
rescue KeyError
|
|
@@ -51,7 +41,7 @@ module Kreds
|
|
|
51
41
|
end
|
|
52
42
|
|
|
53
43
|
def fallback_to_var(error, var, &)
|
|
54
|
-
return raise_or_yield(error, &) if var.
|
|
44
|
+
return raise_or_yield(error, &) if var.nil?
|
|
55
45
|
|
|
56
46
|
var!(var, &)
|
|
57
47
|
rescue Kreds::BlankEnvironmentVariableError, Kreds::UnknownEnvironmentVariableError => e
|
|
@@ -63,7 +53,7 @@ module Kreds
|
|
|
63
53
|
end
|
|
64
54
|
|
|
65
55
|
def path_to_s(path)
|
|
66
|
-
|
|
56
|
+
path.map(&:inspect).join(" => ")
|
|
67
57
|
end
|
|
68
58
|
end
|
|
69
59
|
end
|
data/lib/kreds/inputs.rb
CHANGED
|
@@ -1,28 +1,25 @@
|
|
|
1
|
-
require "dry-types"
|
|
2
|
-
|
|
3
1
|
module Kreds
|
|
4
2
|
module Inputs
|
|
5
3
|
extend self
|
|
6
4
|
|
|
7
|
-
|
|
5
|
+
def process(value, as:, optional: false)
|
|
6
|
+
return value if optional && value.nil?
|
|
7
|
+
|
|
8
|
+
send(as, value)
|
|
9
|
+
end
|
|
8
10
|
|
|
9
|
-
|
|
10
|
-
symbol_array: self::Array.of(self::Coercible::Symbol).constrained(min_size: 1),
|
|
11
|
-
non_empty_string: self::Strict::String.constrained(min_size: 1),
|
|
12
|
-
boolean: self::Strict::Bool
|
|
13
|
-
}.freeze
|
|
11
|
+
private
|
|
14
12
|
|
|
15
|
-
def
|
|
16
|
-
|
|
17
|
-
checker = checker.optional if optional
|
|
13
|
+
def symbol_array(value)
|
|
14
|
+
return value.map(&:to_sym) if value.is_a?(Array) && value.any? && value.all? { _1.is_a?(String) || _1.is_a?(Symbol) }
|
|
18
15
|
|
|
19
|
-
|
|
20
|
-
rescue Dry::Types::CoercionError => e
|
|
21
|
-
raise error, message || e.message
|
|
16
|
+
raise(Kreds::InvalidArgumentError, "Expected an array of symbols or strings, got `#{value.inspect}`")
|
|
22
17
|
end
|
|
23
18
|
|
|
24
|
-
|
|
19
|
+
def non_empty_string(value)
|
|
20
|
+
return value if value.is_a?(String) && value.present?
|
|
25
21
|
|
|
26
|
-
|
|
22
|
+
raise(Kreds::InvalidArgumentError, "Expected a non-empty string, got `#{value.inspect}`")
|
|
23
|
+
end
|
|
27
24
|
end
|
|
28
25
|
end
|
data/lib/kreds/show.rb
CHANGED
data/lib/kreds/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,35 +1,21 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: kreds
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- enjaku4
|
|
8
8
|
bindir: bin
|
|
9
9
|
cert_chain: []
|
|
10
|
-
date:
|
|
10
|
+
date: 2026-03-31 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
|
-
- !ruby/object:Gem::Dependency
|
|
13
|
-
name: dry-types
|
|
14
|
-
requirement: !ruby/object:Gem::Requirement
|
|
15
|
-
requirements:
|
|
16
|
-
- - "~>"
|
|
17
|
-
- !ruby/object:Gem::Version
|
|
18
|
-
version: '1.7'
|
|
19
|
-
type: :runtime
|
|
20
|
-
prerelease: false
|
|
21
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
-
requirements:
|
|
23
|
-
- - "~>"
|
|
24
|
-
- !ruby/object:Gem::Version
|
|
25
|
-
version: '1.7'
|
|
26
12
|
- !ruby/object:Gem::Dependency
|
|
27
13
|
name: rails
|
|
28
14
|
requirement: !ruby/object:Gem::Requirement
|
|
29
15
|
requirements:
|
|
30
16
|
- - ">="
|
|
31
17
|
- !ruby/object:Gem::Version
|
|
32
|
-
version: '7.
|
|
18
|
+
version: '7.2'
|
|
33
19
|
- - "<"
|
|
34
20
|
- !ruby/object:Gem::Version
|
|
35
21
|
version: '8.2'
|
|
@@ -39,15 +25,14 @@ dependencies:
|
|
|
39
25
|
requirements:
|
|
40
26
|
- - ">="
|
|
41
27
|
- !ruby/object:Gem::Version
|
|
42
|
-
version: '7.
|
|
28
|
+
version: '7.2'
|
|
43
29
|
- - "<"
|
|
44
30
|
- !ruby/object:Gem::Version
|
|
45
31
|
version: '8.2'
|
|
46
|
-
description:
|
|
47
|
-
|
|
48
|
-
detection
|
|
32
|
+
description: Simpler and safer Rails credentials access with blank value detection
|
|
33
|
+
and clear error messages
|
|
49
34
|
email:
|
|
50
|
-
-
|
|
35
|
+
- contact@brownbox.dev
|
|
51
36
|
executables: []
|
|
52
37
|
extensions: []
|
|
53
38
|
extra_rdoc_files: []
|
|
@@ -70,6 +55,7 @@ metadata:
|
|
|
70
55
|
changelog_uri: https://github.com/enjaku4/kreds/blob/master/CHANGELOG.md
|
|
71
56
|
bug_tracker_uri: https://github.com/enjaku4/kreds/issues
|
|
72
57
|
documentation_uri: https://github.com/enjaku4/kreds/blob/master/README.md
|
|
58
|
+
mailing_list_uri: https://github.com/enjaku4/kreds/discussions
|
|
73
59
|
rubygems_mfa_required: 'true'
|
|
74
60
|
rdoc_options: []
|
|
75
61
|
require_paths:
|
|
@@ -78,17 +64,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
78
64
|
requirements:
|
|
79
65
|
- - ">="
|
|
80
66
|
- !ruby/object:Gem::Version
|
|
81
|
-
version: '3.
|
|
67
|
+
version: '3.3'
|
|
82
68
|
- - "<"
|
|
83
69
|
- !ruby/object:Gem::Version
|
|
84
|
-
version: '
|
|
70
|
+
version: '4.1'
|
|
85
71
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
86
72
|
requirements:
|
|
87
73
|
- - ">="
|
|
88
74
|
- !ruby/object:Gem::Version
|
|
89
75
|
version: '0'
|
|
90
76
|
requirements: []
|
|
91
|
-
rubygems_version:
|
|
77
|
+
rubygems_version: 4.0.8
|
|
92
78
|
specification_version: 4
|
|
93
79
|
summary: The missing shorthand for Rails credentials
|
|
94
80
|
test_files: []
|