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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 854050f1d4157bcfb7cd033c15d751ddfa22ee702f77bd768752e96048f6ae26
4
- data.tar.gz: 7e549366af77fc5d2621bbbcccc87c66e927d458892ffc71fdd8950f25b9b92b
3
+ metadata.gz: 999a28daaa8839baa7e0ef9d1c2ff9f71fe244852ff18aa915998a8b48778214
4
+ data.tar.gz: 61fc895370da4b88283255b5d624105a915aef7e6ccf243817a52bde688105f7
5
5
  SHA512:
6
- metadata.gz: 0d1ced3f9f5f4d2817a4ebb654e90ef0aa5c48dea648156d0e72843134a2ab2fb032e4fd85ba90a7f8a2987584c3eb9ce1710b0f97c7b16c2989c297300f0bb5
7
- data.tar.gz: 84f636b9899db018c4f5af342a40ef18cbf3c77e705f0d7d7ad8635f8ac8c96c2c2bdb7073435581d5e253457c5aea8ec327054db37113e21694052e148faa86
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
  [![Github Actions badge](https://github.com/enjaku4/kreds/actions/workflows/ci.yml/badge.svg)](https://github.com/enjaku4/kreds/actions/workflows/ci.yml)
6
6
  [![License](https://img.shields.io/github/license/enjaku4/kreds.svg)](LICENSE)
7
7
 
8
- Rails credentials are a convenient way to store secrets, but retrieving them could be more intuitive - that's where Kreds comes in. Kreds is a simpler, shorter, and safer way to access Rails credentials, with a few extra features built in. It provides environment variable fallback support and blank value detection with clear human-readable error messages.
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: [:recaptcha][:site_key] (Kreds::BlankCredentialsError)
27
+ # => Blank value in credentials: :recaptcha => :site_key (Kreds::BlankCredentialsError)
28
28
 
29
29
  Kreds.fetch!(:recaptcha, :key)
30
- # => Credentials key not found: [:recaptcha][:key] (Kreds::UnknownCredentialsError)
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
- ```bash
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 our [discussions section](https://github.com/enjaku4/kreds/discussions) for:
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 our [discussions section](https://github.com/enjaku4/kreds/discussions))
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 = ["enjaku4@icloud.com"]
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 = "Kreds provides a simpler, shorter, and safer way to access Rails credentials with clear error messages, environment variable fallback support, and blank value detection"
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", "< 3.5"
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 "dry-types", "~> 1.7"
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)}[:#{keys[path.size]}]" unless value.is_a?(Hash) || keys == 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.blank?
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
- "[:#{path.join("][:")}]"
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
- include Dry.Types()
5
+ def process(value, as:, optional: false)
6
+ return value if optional && value.nil?
7
+
8
+ send(as, value)
9
+ end
8
10
 
9
- TYPES = {
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 process(value, as:, optional: false, error: Kreds::InvalidArgumentError, message: nil)
16
- checker = type_for(as)
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
- checker[value]
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
- private
19
+ def non_empty_string(value)
20
+ return value if value.is_a?(String) && value.present?
25
21
 
26
- def type_for(name) = Kreds::Inputs::TYPES.fetch(name)
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
@@ -1,7 +1,11 @@
1
1
  module Kreds
2
2
  module Show
3
3
  def show
4
- Rails.application.credentials.as_json.deep_symbolize_keys
4
+ Rails.application.credentials.config.to_h
5
+ end
6
+
7
+ def env_show
8
+ show[Rails.env.to_sym] || {}
5
9
  end
6
10
  end
7
11
  end
data/lib/kreds/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Kreds
2
- VERSION = "1.1.6".freeze
2
+ VERSION = "2.0.0".freeze
3
3
  end
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: 1.1.6
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: 1980-01-02 00:00:00.000000000 Z
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.1'
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.1'
28
+ version: '7.2'
43
29
  - - "<"
44
30
  - !ruby/object:Gem::Version
45
31
  version: '8.2'
46
- description: Kreds provides a simpler, shorter, and safer way to access Rails credentials
47
- with clear error messages, environment variable fallback support, and blank value
48
- detection
32
+ description: Simpler and safer Rails credentials access with blank value detection
33
+ and clear error messages
49
34
  email:
50
- - enjaku4@icloud.com
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.2'
67
+ version: '3.3'
82
68
  - - "<"
83
69
  - !ruby/object:Gem::Version
84
- version: '3.5'
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: 3.7.2
77
+ rubygems_version: 4.0.8
92
78
  specification_version: 4
93
79
  summary: The missing shorthand for Rails credentials
94
80
  test_files: []