kreds 1.1.5 → 1.1.7
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 +9 -0
- data/README.md +10 -16
- data/kreds.gemspec +5 -5
- data/lib/kreds/fetch.rb +3 -13
- data/lib/kreds/inputs.rb +13 -16
- data/lib/kreds/version.rb +1 -1
- metadata +8 -22
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 25d3eedf22bd754fdefe50c162f437fbced4417d1dc22170f7a63e950c5ccf27
|
|
4
|
+
data.tar.gz: 21e488de4ad9d8f7777e5215e10709e2089cf65a97c43f075ccb23871dbf593d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 94388daa3c0f6415135f437c4d76d2097492d7963e195bc038b5e1a6a2ae06838e60638234bd88c0aa51de87706ded1254fcb3627e6a4f561da882bb7a2191d3
|
|
7
|
+
data.tar.gz: 80c30b05d7aca780b1d1b4eee7766516daf110885ebdc1e744189906032355a116b1e082d28783851e98312639d2b377ac3ef1a485a5df99a8b6255e16c36064
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
|
@@ -5,35 +5,29 @@
|
|
|
5
5
|
[](https://github.com/enjaku4/kreds/actions/workflows/ci.yml)
|
|
6
6
|
[](LICENSE)
|
|
7
7
|
|
|
8
|
-
|
|
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
|
|
|
12
|
-
|
|
13
|
-
- Environment variable fallback support
|
|
14
|
-
- Environment-scoped credentials access
|
|
15
|
-
- Blank value detection and prevention
|
|
16
|
-
|
|
17
|
-
**Before and After:**
|
|
12
|
+
Say you want to fetch `[:recaptcha][:site_key]` from your Rails credentials but forgot to set a value or made a typo in the key name:
|
|
18
13
|
|
|
19
14
|
```ruby
|
|
20
|
-
#
|
|
15
|
+
# Rails credentials (silent failure, unclear errors):
|
|
21
16
|
Rails.application.credentials[:recaptcha][:site_key]
|
|
22
17
|
# => nil
|
|
23
18
|
|
|
24
|
-
# Or this (long, unclear errors):
|
|
25
19
|
Rails.application.credentials[:captcha][:site_key]
|
|
26
20
|
# => undefined method `[]' for nil:NilClass (NoMethodError)
|
|
27
21
|
|
|
28
|
-
# Or even this (longer, still unclear errors):
|
|
29
22
|
Rails.application.credentials.fetch(:recaptcha).fetch(:key)
|
|
30
23
|
# => key not found: :key (KeyError)
|
|
31
24
|
|
|
32
|
-
#
|
|
25
|
+
# Kreds (clear, human-readable errors):
|
|
33
26
|
Kreds.fetch!(:recaptcha, :site_key)
|
|
34
27
|
# => Blank value in credentials: [:recaptcha][:site_key] (Kreds::BlankCredentialsError)
|
|
35
|
-
|
|
36
|
-
|
|
28
|
+
|
|
29
|
+
Kreds.fetch!(:recaptcha, :key)
|
|
30
|
+
# => Credentials key not found: [:recaptcha][:key] (Kreds::UnknownCredentialsError)
|
|
37
31
|
```
|
|
38
32
|
|
|
39
33
|
## Table of Contents
|
|
@@ -58,9 +52,9 @@ Add Kreds to your Gemfile:
|
|
|
58
52
|
gem "kreds"
|
|
59
53
|
```
|
|
60
54
|
|
|
61
|
-
|
|
55
|
+
Install the gem:
|
|
62
56
|
|
|
63
|
-
```
|
|
57
|
+
```shell
|
|
64
58
|
bundle install
|
|
65
59
|
```
|
|
66
60
|
|
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.2", "<
|
|
19
|
+
spec.required_ruby_version = ">= 3.2", "< 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.1"
|
|
27
|
+
spec.add_dependency "rails", ">= 7.1", "< 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,13 +10,7 @@ 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, &)
|
|
@@ -26,9 +18,7 @@ module Kreds
|
|
|
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
|
|
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/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: kreds
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.1.
|
|
4
|
+
version: 1.1.7
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- enjaku4
|
|
@@ -9,20 +9,6 @@ bindir: bin
|
|
|
9
9
|
cert_chain: []
|
|
10
10
|
date: 1980-01-02 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
|
|
@@ -32,7 +18,7 @@ dependencies:
|
|
|
32
18
|
version: '7.1'
|
|
33
19
|
- - "<"
|
|
34
20
|
- !ruby/object:Gem::Version
|
|
35
|
-
version: '8.
|
|
21
|
+
version: '8.2'
|
|
36
22
|
type: :runtime
|
|
37
23
|
prerelease: false
|
|
38
24
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -42,12 +28,11 @@ dependencies:
|
|
|
42
28
|
version: '7.1'
|
|
43
29
|
- - "<"
|
|
44
30
|
- !ruby/object:Gem::Version
|
|
45
|
-
version: '8.
|
|
46
|
-
description:
|
|
47
|
-
|
|
48
|
-
detection
|
|
31
|
+
version: '8.2'
|
|
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:
|
|
@@ -81,7 +67,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
81
67
|
version: '3.2'
|
|
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
|
- - ">="
|