yaml-env-tag 0.1.0 → 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 +5 -5
- data/README.adoc +38 -4
- data/lib/yaml_env_tag/env_variable.rb +26 -5
- data/lib/yaml_env_tag/errors.rb +9 -2
- data/lib/yaml_env_tag/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 2ed0b32ad4e8f65504108d69a1d2374da10f8f2b430b9fac5bf0dbd6e888a074
|
4
|
+
data.tar.gz: 7a4ed9894da32fbc6035c98ca178be64aaa2c59a4c307b41950460422ca6857b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 60c7444f8f5b576f3224b93fc1c13a7477aa9fcf2c66a6507da4aef5da618ba1eecd751b32e1e2358f2fde584382035e8a32e6d246f55b6ca1c249fd83cca3d9
|
7
|
+
data.tar.gz: 4ded93c275a72f3acb41e4607e664290a002d2a162e8e719cbe74df09ce4a9f88d970b07885ffcb98c5ce73af3297e1d67239b1d1b9d4d4bb3282a7c97bfb02c
|
data/README.adoc
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
= YAML !ENV
|
1
|
+
= YAML !ENV Tag
|
2
2
|
Jakub Jirutka <https://github.com/jirutka>
|
3
3
|
// custom
|
4
4
|
:gem-name: yaml-env-tag
|
@@ -19,8 +19,9 @@ No need to use ERB in YAML just to set some keys from environment variables.
|
|
19
19
|
[source, yaml]
|
20
20
|
.*Sample YAML file using ENV! tag*
|
21
21
|
oauth:
|
22
|
-
|
23
|
-
|
22
|
+
base_uri: ENV! API_BASE_URI
|
23
|
+
client_id: ENV! [API_CLIENT_ID, "demo"]
|
24
|
+
client_secret: ENV! [API_CLIENT_SECRET, API_CLIENT_KEY, ~]
|
24
25
|
|
25
26
|
|
26
27
|
== Usage
|
@@ -40,7 +41,40 @@ However, if you use `YAML.safe_load` (which is highly recommended), you need to
|
|
40
41
|
[source, rb]
|
41
42
|
YAML.safe_load(..., [YamlEnvTag::EnvVariable])
|
42
43
|
|
43
|
-
|
44
|
+
|
45
|
+
=== Single Required Variable
|
46
|
+
|
47
|
+
Specify one environment variable as a `!ENV` tagged scalar.
|
48
|
+
If it does not exist (is not set), `YAML.load` (and other load methods) will raise `YamlEnvTag::MissingEnvVariableError`.
|
49
|
+
|
50
|
+
[source, yaml]
|
51
|
+
!ENV SOME_VARIABLE
|
52
|
+
|
53
|
+
This can be also written as a tagged sequence `!ENV [SOME_VARIABLE]` or `!ENV [SOME_VARIABLE, ~]`, all three variants are equivalent.
|
54
|
+
|
55
|
+
|
56
|
+
=== Default Value
|
57
|
+
|
58
|
+
You can define a default value that is used when the specified environment variable does not exist.
|
59
|
+
This makes the variable optional.
|
60
|
+
Default value is the last element of a `!ENV` tagged sequence (array) with more than one element.
|
61
|
+
|
62
|
+
[source, yaml]
|
63
|
+
!ENV [SOME_VARIABLE, "default value"]
|
64
|
+
|
65
|
+
|
66
|
+
=== Multiple Variables (Fallbacks)
|
67
|
+
|
68
|
+
You may also specify more environment variables in a `!ENV` tagged sequence (array) – the first one that does exist is used.
|
69
|
+
Keep in mind that the last element of a multi-element sequence is always interpreted as a default value, not a name of environment variable!
|
70
|
+
|
71
|
+
[source, yaml]
|
72
|
+
!ENV [SOME_VARIABLE, LEGACY_VARIABLE, "default value"]
|
73
|
+
|
74
|
+
If you want to raise an exception when none of the specified environment variables exist, use `~` (nil) as the last element:
|
75
|
+
|
76
|
+
[source, yaml]
|
77
|
+
!ENV [SOME_VARIABLE, LEGACY_VARIABLE, ~]
|
44
78
|
|
45
79
|
|
46
80
|
== License
|
@@ -8,14 +8,35 @@ module YamlEnvTag
|
|
8
8
|
|
9
9
|
# Deserializes from YAML. This method is called by {Psych}.
|
10
10
|
#
|
11
|
-
# @param coder [Psych::Coder
|
12
|
-
# variable to read.
|
11
|
+
# @param coder [Psych::Coder] coder with +:scalar+ or +:seq+.
|
13
12
|
# @raise MissingEnvVariableError if the specified environment variable
|
14
13
|
# is not set (i.e. does not exist in +ENV+).
|
15
14
|
def init_with(coder)
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
*variables, default =
|
16
|
+
case coder.type
|
17
|
+
when :scalar
|
18
|
+
[coder.scalar, nil]
|
19
|
+
when :seq
|
20
|
+
coder.seq.size < 2 ? [*coder.seq, nil] : coder.seq
|
21
|
+
else
|
22
|
+
raise InvalidUsageError, "#{coder.tag} tag cannot be used on a #{coder.type} node"
|
23
|
+
end
|
24
|
+
|
25
|
+
initialize(variables, default)
|
26
|
+
end
|
27
|
+
|
28
|
+
protected
|
29
|
+
|
30
|
+
# @param variables [Array<String>] names of the environment variables;
|
31
|
+
# value of the first variable that does exist will be used.
|
32
|
+
# @param default_value [String, nil] the default value to use when none of
|
33
|
+
# the _variables_ exist.
|
34
|
+
def initialize(variables, default_value)
|
35
|
+
value = variables.lazy.map { |n| ::ENV[n] if n }.find(&:itself)
|
36
|
+
value ||= default_value
|
37
|
+
|
38
|
+
raise MissingEnvVariableError, variables.last if value.nil?
|
39
|
+
super(value.to_s)
|
19
40
|
end
|
20
41
|
end
|
21
42
|
end
|
data/lib/yaml_env_tag/errors.rb
CHANGED
@@ -1,9 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module YamlEnvTag
|
4
|
-
#
|
4
|
+
# The base exception class for YamlEnvTag.
|
5
|
+
class Error < ::RuntimeError; end
|
6
|
+
|
7
|
+
# Exception raised when the +!ENV+ tag is used on a wrong node type
|
8
|
+
# or on empty node.
|
9
|
+
class InvalidUsageError < Error; end
|
10
|
+
|
11
|
+
# Exception raised when environment variable specified by the +!ENV+ tag
|
5
12
|
# is not set.
|
6
|
-
class MissingEnvVariableError <
|
13
|
+
class MissingEnvVariableError < Error
|
7
14
|
|
8
15
|
attr_reader :variable_name
|
9
16
|
|
data/lib/yaml_env_tag/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yaml-env-tag
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jakub Jirutka
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-12-
|
11
|
+
date: 2017-12-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -100,7 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
100
100
|
version: '0'
|
101
101
|
requirements: []
|
102
102
|
rubyforge_project:
|
103
|
-
rubygems_version: 2.
|
103
|
+
rubygems_version: 2.7.3
|
104
104
|
signing_key:
|
105
105
|
specification_version: 4
|
106
106
|
summary: Custom YAML tag for referring environment variables in YAML files
|