hako 0.25.2 → 0.26.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
  SHA1:
3
- metadata.gz: 5af9dc270bc2256c6afe5c2a1f4a3aa5cbce005d
4
- data.tar.gz: 7e776cd502c68aa760dee703aba4da6089bbd695
3
+ metadata.gz: 0b907e44ac8f76ff6a5d9e6ffe8872c6a59af395
4
+ data.tar.gz: a61274497bbc2345db4c6ee456da7f574628ab3a
5
5
  SHA512:
6
- metadata.gz: 84cb70ece19f489aecbeb85f7a39d56445a276925ecf771b3ffb07d192a2a9fa563c252699e2e62b8d64daee39d35f537d6ac947ce445f0832f1f755d98fb45f
7
- data.tar.gz: 9625218050f8d55df0a69d4e38c770dff1d9bf5c66b7fe605ee8b54a76fef954da166fbd75959d9b6bb7c5d18cb1f7d0b839d9baae0b178dc938359a4d2cce6c
6
+ metadata.gz: bfe9cc3eaf589ddb8368c0d87db6409b0130ae6d61323fb90d11c832dd3cdc366d9d02880dd0f50e49530fb7af7815759513c53cbcc20fd9894a5c868b6acb7b
7
+ data.tar.gz: bc26cf71de0d60111cab73941b967a57b11f051612f073d27382d83ec041bcfeec0a302600bcf9f4dc2e83e48b222b63847fe825f76ea3a96e9a1f09ff02eda3
@@ -84,11 +84,13 @@ module Hako
84
84
  def expand_env(env)
85
85
  env = env.dup
86
86
  provider_types = env.delete(PROVIDERS_KEY) || []
87
+ providers = load_providers(provider_types)
88
+ expander = EnvExpander.new(providers)
87
89
  if @dry_run
90
+ expander.validate!(env)
88
91
  env
89
92
  else
90
- providers = load_providers(provider_types)
91
- EnvExpander.new(providers).expand(env)
93
+ expander.expand(env)
92
94
  end
93
95
  end
94
96
 
@@ -20,16 +20,14 @@ module Hako
20
20
  # @param [Hash<String, String>] env
21
21
  # @return [Hash<String, String>]
22
22
  def expand(env)
23
- parsed_env = {}
23
+ parsed_env = parse_env(env)
24
24
  variables = Set.new
25
- env.each do |key, val|
26
- tokens = parse(val.to_s)
25
+ parsed_env.each_value do |tokens|
27
26
  tokens.each do |t|
28
27
  if t.is_a?(Variable)
29
28
  variables << t.name
30
29
  end
31
30
  end
32
- parsed_env[key] = tokens
33
31
  end
34
32
 
35
33
  values = {}
@@ -53,8 +51,50 @@ module Hako
53
51
  expanded_env
54
52
  end
55
53
 
54
+ # @param [Hash<String, String>] env
55
+ # @return [Boolean]
56
+ def validate!(env)
57
+ parsed_env = parse_env(env)
58
+ variables = Set.new
59
+ parsed_env.each_value do |tokens|
60
+ tokens.each do |t|
61
+ if t.is_a?(Variable)
62
+ variables << t.name
63
+ end
64
+ end
65
+ end
66
+
67
+ @providers.each do |provider|
68
+ if variables.empty?
69
+ break
70
+ end
71
+ if provider.can_ask_keys?
72
+ provider.ask_keys(variables.to_a).each do |var|
73
+ variables.delete(var)
74
+ end
75
+ else
76
+ Hako.logger.warn("EnvProvider#validate! is skipped because #{provider.class} doesn't support ask_keys method")
77
+ return false
78
+ end
79
+ end
80
+ unless variables.empty?
81
+ raise ExpansionError.new("Could not find embedded variables from $providers=#{@providers}: #{variables.to_a}")
82
+ end
83
+ true
84
+ end
85
+
56
86
  private
57
87
 
88
+ # @param [Hash<String, String>] env
89
+ # @return [Hash<String, Array<Literal, Variable>>]
90
+ def parse_env(env)
91
+ parsed_env = {}
92
+ env.each do |key, val|
93
+ parsed_env[key] = parse(val.to_s)
94
+ end
95
+ parsed_env
96
+ end
97
+
58
98
  # @param [String] value
59
99
  # @return [Array]
60
100
  def parse(value)
@@ -14,6 +14,14 @@ module Hako
14
14
  raise NotImplementedError
15
15
  end
16
16
 
17
+ def can_ask_keys?
18
+ raise NotImplementedError
19
+ end
20
+
21
+ def ask_keys(_variables)
22
+ raise NotImplementedError
23
+ end
24
+
17
25
  private
18
26
 
19
27
  def validation_error!(message)
@@ -25,6 +25,23 @@ module Hako
25
25
  env
26
26
  end
27
27
 
28
+ # @return [Boolean]
29
+ def can_ask_keys?
30
+ true
31
+ end
32
+
33
+ # @param [Array<String>] variables
34
+ # @return [Array<String>]
35
+ def ask_keys(variables)
36
+ keys = []
37
+ read_from_file do |key, _|
38
+ if variables.include?(key)
39
+ keys << key
40
+ end
41
+ end
42
+ keys
43
+ end
44
+
28
45
  private
29
46
 
30
47
  # @yieldparam [String] key
@@ -33,6 +33,23 @@ module Hako
33
33
  env
34
34
  end
35
35
 
36
+ # @return [Boolean]
37
+ def can_ask_keys?
38
+ true
39
+ end
40
+
41
+ # @param [Array<String>] variables
42
+ # @return [Array<String>]
43
+ def ask_keys(variables)
44
+ keys = []
45
+ read_from_yaml do |key, _|
46
+ if variables.include?(key)
47
+ keys << key
48
+ end
49
+ end
50
+ keys
51
+ end
52
+
36
53
  private
37
54
 
38
55
  # @yieldparam [String] key
data/lib/hako/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Hako
3
- VERSION = '0.25.2'
3
+ VERSION = '0.26.0'
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hako
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.25.2
4
+ version: 0.26.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kohei Suzuki
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-02-27 00:00:00.000000000 Z
11
+ date: 2017-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk