envv 0.1.1 → 0.2.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: def674f249025bd8f9ee0aa695192e2322703dd61eb8e4b67a7d555f168d38ff
4
- data.tar.gz: 87040fea450ef372dd519f5175af263d42d32ec5ce86706fad07ec9799e2aceb
3
+ metadata.gz: 0a9575c3a4575817075da63460f3f825073b1cf60924bb15448b5942292aa5ee
4
+ data.tar.gz: 007112b9e413b0583ab1e62130c65d4901f3cf7aeecef643d85e5988714bb664
5
5
  SHA512:
6
- metadata.gz: 53f3c0a0cde6f5ef821b57789391abbb3e080c2f5f4ed782f895c2ef56df235f33f8578b762eee30bc9c4a0ba57243e277967d46f57d6cc6bb45126ba0d9c7fb
7
- data.tar.gz: d4268caa13977ff1153424606e96244e24abf1584bacf9b923950de8139f01281a9025f4830dde328ffd106c2ef9b7a1a3cb668146eeb4e4cc420fb362835df6
6
+ metadata.gz: 604ee5f6770bf4322c0a41dd835fdd7ac6d55cb7123624acf73ef8450e6a914a934c4cf0d5adfe6a49c9ba1c20fb7bbd7e6961994efedc359d43a38a84c1b9d0
7
+ data.tar.gz: d623fcec7868d59d7736cfe68222d6dcd40a132f4daf75e7dc8f993cb7017c5718fd8ba2390548f7dabd82aa53a046875993f4a37afa16cc659c97e1b3a11660
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.2.0] - 2023-09-25
4
+
5
+ - Refactoring with a ENVV::Base module to allow writing custom wrappers
6
+
7
+ ## [0.1.2] - 2023-09-19
8
+
9
+ - Fix (again…) changelog_uri in gemspec
10
+
3
11
  ## [0.1.1] - 2023-09-19
4
12
 
5
13
  - Fix changelog_uri in gemspec
data/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ [![Gem Version](https://badge.fury.io/rb/envv.svg)](https://badge.fury.io/rb/envv)
2
+
1
3
  ![ENVV banner](doc/banner.svg)
2
4
 
3
5
  # ENVV
@@ -53,6 +55,49 @@ ENVV.fetch("MY_INT_VAR") # ⇒ 4000
53
55
  ENVV.fetch("MY_BOOLEAN_VAR") # ⇒ true
54
56
  ```
55
57
 
58
+ ### Adding extra features with your own ENVV wrapper
59
+
60
+ You can include [ENVV::Base](lib/envv/base.rb) in your own class or module and thus provide extra features.
61
+
62
+ With a module
63
+
64
+ ```ruby
65
+ module MyAppEnv
66
+ extend ENVV::Base
67
+
68
+ def is_dark?
69
+ fetch("IS_DARK")
70
+ end
71
+ end
72
+
73
+ MyAppEnv.build! do
74
+ required(:IS_DARK).filled(:bool)
75
+ end
76
+
77
+ # IS_DARK=True
78
+
79
+ MyAppEnv.is_dark? # => true
80
+ ```
81
+
82
+ With a class
83
+
84
+ ```ruby
85
+ class MyAppEnv
86
+ include ENVV::Base
87
+
88
+ def [](key)
89
+ fetch(key)
90
+ end
91
+ end
92
+
93
+ e = MyAppEnv.new.build! do
94
+ required(:IS_DARK).filled(:bool)
95
+ end
96
+ e["IS_DARK"] # => true
97
+ ```
98
+
99
+ Be creative !
100
+
56
101
 
57
102
  ## Development
58
103
 
data/lib/envv/base.rb ADDED
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ENVV
4
+ module Base
5
+ # Validates ENV vars with schema rules and store coerced values in ENVV registry
6
+ # @param [Proc] A block with Dry::Schema.Params rules
7
+ # @raise [ENVV::InvalidSchemaError] if env vars requirements are not validated
8
+ # @return [ENVV]
9
+ def build!(&rules)
10
+ rules or raise ArgumentError, <<~MESSAGE
11
+ A block of schema rules is required to build ENVV.
12
+ Example:
13
+
14
+ ENVV.build! do
15
+ required(:MY_STRING_VAR).filled(:string)
16
+ required(:MY_INT_VAR).filled(:integer, gt?: 3000)
17
+ required(:MY_BOOLEAN_VAR).filled(:bool)
18
+ end
19
+
20
+ More info:
21
+
22
+ - https://dry-rb.org/gems/dry-schema
23
+ - https://github.com/16/envv
24
+
25
+ MESSAGE
26
+
27
+ @schema = ::Dry::Schema.Params(&rules)
28
+ @registry = Builder.call(ENV, @schema)
29
+ freeze
30
+ end
31
+
32
+ # @raise [ENVV::NotBuilt] error if called before ENVV built (see #build!)
33
+ # @return [Dry::Schema.Params] used to validate environment variables
34
+ def schema
35
+ @schema
36
+ end
37
+
38
+ # @raise [ENVV::NotBuilt] error if called before ENVV built (see #build!)
39
+ # @return [ENVV::Registry] Hash-like instance created at build
40
+ def registry
41
+ @registry or raise(NotBuilt)
42
+ end
43
+
44
+ # Fetch a coerced environment variable.
45
+ # This method use the same signature as Hash#fetch.
46
+ # @raise [KeyError] if `key` is not found and neither `default_value` nor a block was given.
47
+ # @overload fetch(key)
48
+ # @param key [String, Symbol]
49
+ # @return the value of the given `key` if found.
50
+ # @overload fetch(key, default_value)
51
+ # @param key [String, Symbol]
52
+ # @param default_value
53
+ # @return `default_value` if `key` is not found and no block was given
54
+ # @overload fetch(key, &block)
55
+ # @yields `key` to the block if `key` is not found and a block was given
56
+ # @return the block's return value.
57
+ def fetch(key, default_value = nil, &block)
58
+ registry.fetch(key.to_s, default_value, &block)
59
+ end
60
+ end
61
+ end
data/lib/envv/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ENVV
4
- VERSION = "0.1.1"
4
+ VERSION = "0.2.0"
5
5
  end
data/lib/envv.rb CHANGED
@@ -1,70 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "singleton"
4
3
  require "dry/schema"
5
4
  require_relative "envv/version"
6
5
  require_relative "envv/errors"
7
6
  require_relative "envv/registry"
8
7
  require_relative "envv/builder"
8
+ require_relative "envv/base"
9
9
 
10
10
  module ENVV
11
- module_function
12
-
13
- # Validates ENV vars with schema rules and store coerced values in ENVV registry
14
- # @param [Proc] A block with Dry::Schema.Params rules
15
- # @raise [ENVV::InvalidSchemaError] if env vars requirements are not validated
16
- # @return [ENVV]
17
- def build!(&rules)
18
- rules or raise ArgumentError, <<~MESSAGE
19
- A block of schema rules is required to build ENVV.
20
- Example:
21
-
22
- ENVV.build! do
23
- required(:MY_STRING_VAR).filled(:string)
24
- required(:MY_INT_VAR).filled(:integer, gt?: 3000)
25
- required(:MY_BOOLEAN_VAR).filled(:bool)
26
- end
27
-
28
- More info:
29
-
30
- - https://dry-rb.org/gems/dry-schema
31
- - https://github.com/16/envv
32
-
33
- MESSAGE
34
-
35
- @schema = ::Dry::Schema.Params(&rules)
36
- @registry = Builder.call(ENV, @schema)
37
- freeze
38
- end
39
-
40
- # @raise [ENVV::NotBuilt] error if called before ENVV built (see #build!)
41
- # @return [Dry::Schema.Params] used to validate environment variables
42
- def schema
43
- @schema
44
- end
45
-
46
- # @raise [ENVV::NotBuilt] error if called before ENVV built (see #build!)
47
- # @return [ENVV::Registry] Hash-like instance created at build
48
- def registry
49
- @registry or raise(NotBuilt)
50
- end
51
-
52
- # Fetch a coerced environment variable.
53
- # This method use the same signature as Hash#fetch.
54
- # @raise [KeyError] if `key` is not found and neither `default_value` nor a block was given.
55
- # @overload fetch(key)
56
- # @param key [String, Symbol]
57
- # @return the value of the given `key` if found.
58
- # @overload fetch(key, default_value)
59
- # @param key [String, Symbol]
60
- # @param default_value
61
- # @return `default_value` if `key` is not found and no block was given
62
- # @overload fetch(key, &block)
63
- # @yields `key` to the block if `key` is not found and a block was given
64
- # @return the block's return value.
65
- def fetch(key, default_value = nil, &block)
66
- registry.fetch(key.to_s, default_value, &block)
67
- end
68
-
69
- public :build!, :schema, :registry, :fetch
11
+ extend Base
70
12
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: envv
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fabrice Luraine
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-09-19 00:00:00.000000000 Z
11
+ date: 2023-09-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-schema
@@ -110,6 +110,7 @@ files:
110
110
  - doc/banner.inkscape.svg
111
111
  - doc/banner.svg
112
112
  - lib/envv.rb
113
+ - lib/envv/base.rb
113
114
  - lib/envv/builder.rb
114
115
  - lib/envv/errors.rb
115
116
  - lib/envv/registry.rb
@@ -121,7 +122,7 @@ licenses:
121
122
  metadata:
122
123
  homepage_uri: https://github.com/16/envv
123
124
  source_code_uri: https://github.com/16/envv
124
- changelog_uri: https://github.com/16/envv/CHANGELOG.md
125
+ changelog_uri: https://github.com/16/envv/blob/main/CHANGELOG.md
125
126
  post_install_message:
126
127
  rdoc_options: []
127
128
  require_paths: