hako 0.25.2 → 0.26.0

Sign up to get free protection for your applications and to get access to all the features.
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