pdk 2.3.0 → 2.4.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 +4 -4
- data/CHANGELOG.md +1329 -1321
- data/LICENSE +201 -201
- data/README.md +163 -163
- data/exe/pdk +10 -10
- data/lib/pdk/analytics/client/google_analytics.rb +143 -143
- data/lib/pdk/analytics/client/noop.rb +25 -25
- data/lib/pdk/analytics/util.rb +19 -19
- data/lib/pdk/analytics.rb +30 -30
- data/lib/pdk/answer_file.rb +12 -12
- data/lib/pdk/bolt.rb +19 -19
- data/lib/pdk/cli/build.rb +82 -82
- data/lib/pdk/cli/bundle.rb +48 -48
- data/lib/pdk/cli/config/get.rb +26 -26
- data/lib/pdk/cli/config.rb +22 -22
- data/lib/pdk/cli/console.rb +148 -148
- data/lib/pdk/cli/convert.rb +52 -52
- data/lib/pdk/cli/env.rb +52 -52
- data/lib/pdk/cli/errors.rb +25 -25
- data/lib/pdk/cli/exec/command.rb +293 -293
- data/lib/pdk/cli/exec/interactive_command.rb +114 -114
- data/lib/pdk/cli/exec.rb +84 -84
- data/lib/pdk/cli/exec_group.rb +104 -104
- data/lib/pdk/cli/get/config.rb +24 -24
- data/lib/pdk/cli/get.rb +20 -20
- data/lib/pdk/cli/module/build.rb +12 -12
- data/lib/pdk/cli/module/generate.rb +47 -47
- data/lib/pdk/cli/module.rb +14 -14
- data/lib/pdk/cli/new/class.rb +32 -32
- data/lib/pdk/cli/new/defined_type.rb +32 -32
- data/lib/pdk/cli/new/fact.rb +29 -29
- data/lib/pdk/cli/new/function.rb +29 -29
- data/lib/pdk/cli/new/module.rb +53 -53
- data/lib/pdk/cli/new/provider.rb +29 -29
- data/lib/pdk/cli/new/task.rb +34 -34
- data/lib/pdk/cli/new/test.rb +52 -52
- data/lib/pdk/cli/new/transport.rb +27 -27
- data/lib/pdk/cli/new.rb +21 -21
- data/lib/pdk/cli/release/prep.rb +39 -39
- data/lib/pdk/cli/release/publish.rb +50 -50
- data/lib/pdk/cli/release.rb +194 -194
- data/lib/pdk/cli/remove/config.rb +80 -80
- data/lib/pdk/cli/remove.rb +20 -20
- data/lib/pdk/cli/set/config.rb +119 -119
- data/lib/pdk/cli/set.rb +20 -20
- data/lib/pdk/cli/test/unit.rb +90 -90
- data/lib/pdk/cli/test.rb +11 -11
- data/lib/pdk/cli/update.rb +64 -64
- data/lib/pdk/cli/util/command_redirector.rb +27 -27
- data/lib/pdk/cli/util/interview.rb +72 -72
- data/lib/pdk/cli/util/option_normalizer.rb +55 -55
- data/lib/pdk/cli/util/option_validator.rb +68 -68
- data/lib/pdk/cli/util/spinner.rb +13 -13
- data/lib/pdk/cli/util/update_manager_printer.rb +82 -82
- data/lib/pdk/cli/util.rb +305 -305
- data/lib/pdk/cli/validate.rb +116 -116
- data/lib/pdk/cli.rb +175 -175
- data/lib/pdk/config/analytics_schema.json +26 -26
- data/lib/pdk/config/errors.rb +5 -5
- data/lib/pdk/config/ini_file.rb +183 -183
- data/lib/pdk/config/ini_file_setting.rb +39 -39
- data/lib/pdk/config/json.rb +34 -34
- data/lib/pdk/config/json_schema_namespace.rb +142 -142
- data/lib/pdk/config/json_schema_setting.rb +53 -53
- data/lib/pdk/config/json_with_schema.rb +49 -49
- data/lib/pdk/config/namespace.rb +354 -354
- data/lib/pdk/config/setting.rb +135 -135
- data/lib/pdk/config/validator.rb +31 -31
- data/lib/pdk/config/yaml.rb +46 -46
- data/lib/pdk/config/yaml_with_schema.rb +59 -59
- data/lib/pdk/config.rb +390 -390
- data/lib/pdk/context/control_repo.rb +60 -60
- data/lib/pdk/context/module.rb +28 -28
- data/lib/pdk/context/none.rb +22 -22
- data/lib/pdk/context.rb +99 -99
- data/lib/pdk/control_repo.rb +90 -90
- data/lib/pdk/generate/defined_type.rb +43 -43
- data/lib/pdk/generate/fact.rb +25 -25
- data/lib/pdk/generate/function.rb +48 -48
- data/lib/pdk/generate/module.rb +352 -352
- data/lib/pdk/generate/provider.rb +28 -28
- data/lib/pdk/generate/puppet_class.rb +43 -43
- data/lib/pdk/generate/puppet_object.rb +232 -232
- data/lib/pdk/generate/task.rb +68 -68
- data/lib/pdk/generate/transport.rb +33 -33
- data/lib/pdk/generate.rb +24 -24
- data/lib/pdk/i18n.rb +4 -4
- data/lib/pdk/logger.rb +45 -45
- data/lib/pdk/module/build.rb +322 -322
- data/lib/pdk/module/convert.rb +296 -296
- data/lib/pdk/module/metadata.rb +202 -202
- data/lib/pdk/module/release.rb +260 -260
- data/lib/pdk/module/update.rb +131 -131
- data/lib/pdk/module/update_manager.rb +227 -227
- data/lib/pdk/module.rb +30 -30
- data/lib/pdk/report/event.rb +370 -370
- data/lib/pdk/report.rb +121 -121
- data/lib/pdk/template/fetcher/git.rb +85 -85
- data/lib/pdk/template/fetcher/local.rb +28 -28
- data/lib/pdk/template/fetcher.rb +98 -98
- data/lib/pdk/template/renderer/v1/legacy_template_dir.rb +116 -116
- data/lib/pdk/template/renderer/v1/renderer.rb +132 -132
- data/lib/pdk/template/renderer/v1/template_file.rb +102 -102
- data/lib/pdk/template/renderer/v1.rb +25 -25
- data/lib/pdk/template/renderer.rb +96 -96
- data/lib/pdk/template/template_dir.rb +67 -67
- data/lib/pdk/template.rb +59 -59
- data/lib/pdk/tests/unit.rb +252 -252
- data/lib/pdk/util/bundler.rb +259 -259
- data/lib/pdk/util/changelog_generator.rb +137 -137
- data/lib/pdk/util/env.rb +47 -47
- data/lib/pdk/util/filesystem.rb +138 -138
- data/lib/pdk/util/git.rb +179 -179
- data/lib/pdk/util/json_finder.rb +85 -85
- data/lib/pdk/util/puppet_strings.rb +125 -125
- data/lib/pdk/util/puppet_version.rb +266 -266
- data/lib/pdk/util/ruby_version.rb +179 -179
- data/lib/pdk/util/template_uri.rb +295 -295
- data/lib/pdk/util/vendored_file.rb +93 -93
- data/lib/pdk/util/version.rb +43 -43
- data/lib/pdk/util/windows/api_types.rb +82 -82
- data/lib/pdk/util/windows/file.rb +36 -36
- data/lib/pdk/util/windows/process.rb +79 -79
- data/lib/pdk/util/windows/string.rb +16 -16
- data/lib/pdk/util/windows.rb +15 -15
- data/lib/pdk/util.rb +278 -277
- data/lib/pdk/validate/control_repo/control_repo_validator_group.rb +23 -23
- data/lib/pdk/validate/control_repo/environment_conf_validator.rb +98 -98
- data/lib/pdk/validate/external_command_validator.rb +208 -208
- data/lib/pdk/validate/internal_ruby_validator.rb +100 -100
- data/lib/pdk/validate/invokable_validator.rb +228 -228
- data/lib/pdk/validate/metadata/metadata_json_lint_validator.rb +86 -86
- data/lib/pdk/validate/metadata/metadata_syntax_validator.rb +78 -78
- data/lib/pdk/validate/metadata/metadata_validator_group.rb +20 -20
- data/lib/pdk/validate/puppet/puppet_epp_validator.rb +133 -133
- data/lib/pdk/validate/puppet/puppet_lint_validator.rb +66 -66
- data/lib/pdk/validate/puppet/puppet_syntax_validator.rb +137 -137
- data/lib/pdk/validate/puppet/puppet_validator_group.rb +21 -21
- data/lib/pdk/validate/ruby/ruby_rubocop_validator.rb +80 -80
- data/lib/pdk/validate/ruby/ruby_validator_group.rb +19 -19
- data/lib/pdk/validate/tasks/tasks_metadata_lint_validator.rb +88 -88
- data/lib/pdk/validate/tasks/tasks_name_validator.rb +50 -50
- data/lib/pdk/validate/tasks/tasks_validator_group.rb +20 -20
- data/lib/pdk/validate/validator.rb +118 -118
- data/lib/pdk/validate/validator_group.rb +104 -104
- data/lib/pdk/validate/yaml/yaml_syntax_validator.rb +95 -95
- data/lib/pdk/validate/yaml/yaml_validator_group.rb +19 -19
- data/lib/pdk/validate.rb +94 -94
- data/lib/pdk/version.rb +4 -4
- data/lib/pdk.rb +76 -76
- data/locales/config.yaml +21 -21
- data/locales/pdk.pot +2094 -2094
- metadata +5 -6
data/lib/pdk/config/setting.rb
CHANGED
|
@@ -1,135 +1,135 @@
|
|
|
1
|
-
require 'pdk'
|
|
2
|
-
|
|
3
|
-
module PDK
|
|
4
|
-
class Config
|
|
5
|
-
# A class for describing the setting of a {PDK::Config} setting.
|
|
6
|
-
#
|
|
7
|
-
# Generally, this is never instantiated manually, but is instead
|
|
8
|
-
# instantiated by passing a block to {PDK::Config::Namespace#setting}.
|
|
9
|
-
#
|
|
10
|
-
# @example
|
|
11
|
-
#
|
|
12
|
-
# PDK::Config::Namespace.new('analytics') do
|
|
13
|
-
# setting :disabled do
|
|
14
|
-
# validate PDK::Config::Validator.boolean
|
|
15
|
-
# default_to { false }
|
|
16
|
-
# end
|
|
17
|
-
# end
|
|
18
|
-
class Setting
|
|
19
|
-
attr_reader :namespace
|
|
20
|
-
|
|
21
|
-
# It is possible to have multiple setting definitions for the same setting; for example, defining a default value with a lambda, but the
|
|
22
|
-
# the validation is within a JSON schema document. These are expressed as two settings objects, and uses a single linked list to join them
|
|
23
|
-
# together:
|
|
24
|
-
#
|
|
25
|
-
# (PDK::Config::JSONSchemaSetting) --previous_setting--> (PDK::Config::Setting)
|
|
26
|
-
#
|
|
27
|
-
# So in the example above, calling `default` the on the first object in the list will:
|
|
28
|
-
# 1. Look at `default` on PDK::Config::JSONSchemaSetting
|
|
29
|
-
# 2. If a default could not be found then it calls `default` on previous_setting
|
|
30
|
-
# 3. If a default could not be found then it calls `default` on previous_setting.previous_setting
|
|
31
|
-
# 4. and so on down the linked list (chain) of settings
|
|
32
|
-
attr_writer :previous_setting
|
|
33
|
-
|
|
34
|
-
# Initialises an empty setting definition.
|
|
35
|
-
#
|
|
36
|
-
# @param name [String,Symbol] the name of the setting.
|
|
37
|
-
# @param namespace [PDK::Config::Namespace] The namespace this setting belongs to
|
|
38
|
-
def initialize(name, namespace, initial_value = nil)
|
|
39
|
-
@name = name.to_s
|
|
40
|
-
@validators = []
|
|
41
|
-
@namespace = namespace
|
|
42
|
-
@value = initial_value
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def qualified_name
|
|
46
|
-
[namespace.name, @name].join('.')
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def value
|
|
50
|
-
# Duplicate arrays and hashes so that they are isolated from changes being made
|
|
51
|
-
PDK::Util.deep_duplicate(@value)
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def value=(obj)
|
|
55
|
-
validate!(obj)
|
|
56
|
-
@value = obj
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def to_s
|
|
60
|
-
@value.to_s
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
# Assign a validator to the setting. Subclasses should not override this method.
|
|
64
|
-
#
|
|
65
|
-
# @param validator [Hash{Symbol => [Proc,String]}]
|
|
66
|
-
# @option validator [Proc] :proc a lambda that takes the setting to be
|
|
67
|
-
# validated as the argument and returns `true` if the setting is valid.
|
|
68
|
-
# @option validator [String] :message a description of what the validator
|
|
69
|
-
# is testing for, that is displayed to the user as part of the error
|
|
70
|
-
# message for invalid settings.
|
|
71
|
-
#
|
|
72
|
-
# @raise [ArgumentError] if not passed a Hash.
|
|
73
|
-
# @raise [ArgumentError] if the Hash doesn't have a `:proc` key that
|
|
74
|
-
# contains a Proc.
|
|
75
|
-
# @raise [ArgumentError] if the Hash doesn't have a `:message` key that
|
|
76
|
-
# contains a String.
|
|
77
|
-
#
|
|
78
|
-
# @return [nil]
|
|
79
|
-
def validate(validator)
|
|
80
|
-
raise ArgumentError, _('`validator` must be a Hash') unless validator.is_a?(Hash)
|
|
81
|
-
raise ArgumentError, _('the :proc key must contain a Proc') unless validator.key?(:proc) && validator[:proc].is_a?(Proc)
|
|
82
|
-
raise ArgumentError, _('the :message key must contain a String') unless validator.key?(:message) && validator[:message].is_a?(String)
|
|
83
|
-
|
|
84
|
-
@validators << validator
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
# Validate a setting against the assigned validators.
|
|
88
|
-
#
|
|
89
|
-
# @param setting [Object] the setting being validated.
|
|
90
|
-
#
|
|
91
|
-
# @raise [ArgumentError] if any of the assigned validators fail to
|
|
92
|
-
# validate the setting.
|
|
93
|
-
#
|
|
94
|
-
# @return [nil]
|
|
95
|
-
def validate!(value)
|
|
96
|
-
@validators.each do |validator|
|
|
97
|
-
next if validator[:proc].call(value)
|
|
98
|
-
|
|
99
|
-
raise ArgumentError, _('%{key} %{message}') % {
|
|
100
|
-
key: qualified_name,
|
|
101
|
-
message: validator[:message],
|
|
102
|
-
}
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
# Assign a default value proc for the setting. Subclasses should not override this method.
|
|
107
|
-
#
|
|
108
|
-
# @param block [Proc] a block that is lazy evaluated when necessary in
|
|
109
|
-
# order to determine the default setting.
|
|
110
|
-
#
|
|
111
|
-
# @return [nil]
|
|
112
|
-
def default_to(&block)
|
|
113
|
-
raise ArgumentError, _('must be passed a block') unless block_given?
|
|
114
|
-
@default_to = block
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
# Evaluate the default setting.
|
|
118
|
-
#
|
|
119
|
-
# @return [Object,nil] the result of evaluating the block given to
|
|
120
|
-
# {#default_to}, or `nil` if the setting has no default.
|
|
121
|
-
def default
|
|
122
|
-
return @default_to.call if default_block?
|
|
123
|
-
# If there is a previous setting in the chain, use its default
|
|
124
|
-
@previous_setting.nil? ? nil : @previous_setting.default
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
private
|
|
128
|
-
|
|
129
|
-
# @return [Boolean] true if the setting has a default setting block. Subclasses should not override this method.
|
|
130
|
-
def default_block?
|
|
131
|
-
!@default_to.nil?
|
|
132
|
-
end
|
|
133
|
-
end
|
|
134
|
-
end
|
|
135
|
-
end
|
|
1
|
+
require 'pdk'
|
|
2
|
+
|
|
3
|
+
module PDK
|
|
4
|
+
class Config
|
|
5
|
+
# A class for describing the setting of a {PDK::Config} setting.
|
|
6
|
+
#
|
|
7
|
+
# Generally, this is never instantiated manually, but is instead
|
|
8
|
+
# instantiated by passing a block to {PDK::Config::Namespace#setting}.
|
|
9
|
+
#
|
|
10
|
+
# @example
|
|
11
|
+
#
|
|
12
|
+
# PDK::Config::Namespace.new('analytics') do
|
|
13
|
+
# setting :disabled do
|
|
14
|
+
# validate PDK::Config::Validator.boolean
|
|
15
|
+
# default_to { false }
|
|
16
|
+
# end
|
|
17
|
+
# end
|
|
18
|
+
class Setting
|
|
19
|
+
attr_reader :namespace
|
|
20
|
+
|
|
21
|
+
# It is possible to have multiple setting definitions for the same setting; for example, defining a default value with a lambda, but the
|
|
22
|
+
# the validation is within a JSON schema document. These are expressed as two settings objects, and uses a single linked list to join them
|
|
23
|
+
# together:
|
|
24
|
+
#
|
|
25
|
+
# (PDK::Config::JSONSchemaSetting) --previous_setting--> (PDK::Config::Setting)
|
|
26
|
+
#
|
|
27
|
+
# So in the example above, calling `default` the on the first object in the list will:
|
|
28
|
+
# 1. Look at `default` on PDK::Config::JSONSchemaSetting
|
|
29
|
+
# 2. If a default could not be found then it calls `default` on previous_setting
|
|
30
|
+
# 3. If a default could not be found then it calls `default` on previous_setting.previous_setting
|
|
31
|
+
# 4. and so on down the linked list (chain) of settings
|
|
32
|
+
attr_writer :previous_setting
|
|
33
|
+
|
|
34
|
+
# Initialises an empty setting definition.
|
|
35
|
+
#
|
|
36
|
+
# @param name [String,Symbol] the name of the setting.
|
|
37
|
+
# @param namespace [PDK::Config::Namespace] The namespace this setting belongs to
|
|
38
|
+
def initialize(name, namespace, initial_value = nil)
|
|
39
|
+
@name = name.to_s
|
|
40
|
+
@validators = []
|
|
41
|
+
@namespace = namespace
|
|
42
|
+
@value = initial_value
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def qualified_name
|
|
46
|
+
[namespace.name, @name].join('.')
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def value
|
|
50
|
+
# Duplicate arrays and hashes so that they are isolated from changes being made
|
|
51
|
+
PDK::Util.deep_duplicate(@value)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def value=(obj)
|
|
55
|
+
validate!(obj)
|
|
56
|
+
@value = obj
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def to_s
|
|
60
|
+
@value.to_s
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Assign a validator to the setting. Subclasses should not override this method.
|
|
64
|
+
#
|
|
65
|
+
# @param validator [Hash{Symbol => [Proc,String]}]
|
|
66
|
+
# @option validator [Proc] :proc a lambda that takes the setting to be
|
|
67
|
+
# validated as the argument and returns `true` if the setting is valid.
|
|
68
|
+
# @option validator [String] :message a description of what the validator
|
|
69
|
+
# is testing for, that is displayed to the user as part of the error
|
|
70
|
+
# message for invalid settings.
|
|
71
|
+
#
|
|
72
|
+
# @raise [ArgumentError] if not passed a Hash.
|
|
73
|
+
# @raise [ArgumentError] if the Hash doesn't have a `:proc` key that
|
|
74
|
+
# contains a Proc.
|
|
75
|
+
# @raise [ArgumentError] if the Hash doesn't have a `:message` key that
|
|
76
|
+
# contains a String.
|
|
77
|
+
#
|
|
78
|
+
# @return [nil]
|
|
79
|
+
def validate(validator)
|
|
80
|
+
raise ArgumentError, _('`validator` must be a Hash') unless validator.is_a?(Hash)
|
|
81
|
+
raise ArgumentError, _('the :proc key must contain a Proc') unless validator.key?(:proc) && validator[:proc].is_a?(Proc)
|
|
82
|
+
raise ArgumentError, _('the :message key must contain a String') unless validator.key?(:message) && validator[:message].is_a?(String)
|
|
83
|
+
|
|
84
|
+
@validators << validator
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Validate a setting against the assigned validators.
|
|
88
|
+
#
|
|
89
|
+
# @param setting [Object] the setting being validated.
|
|
90
|
+
#
|
|
91
|
+
# @raise [ArgumentError] if any of the assigned validators fail to
|
|
92
|
+
# validate the setting.
|
|
93
|
+
#
|
|
94
|
+
# @return [nil]
|
|
95
|
+
def validate!(value)
|
|
96
|
+
@validators.each do |validator|
|
|
97
|
+
next if validator[:proc].call(value)
|
|
98
|
+
|
|
99
|
+
raise ArgumentError, _('%{key} %{message}') % {
|
|
100
|
+
key: qualified_name,
|
|
101
|
+
message: validator[:message],
|
|
102
|
+
}
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Assign a default value proc for the setting. Subclasses should not override this method.
|
|
107
|
+
#
|
|
108
|
+
# @param block [Proc] a block that is lazy evaluated when necessary in
|
|
109
|
+
# order to determine the default setting.
|
|
110
|
+
#
|
|
111
|
+
# @return [nil]
|
|
112
|
+
def default_to(&block)
|
|
113
|
+
raise ArgumentError, _('must be passed a block') unless block_given?
|
|
114
|
+
@default_to = block
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# Evaluate the default setting.
|
|
118
|
+
#
|
|
119
|
+
# @return [Object,nil] the result of evaluating the block given to
|
|
120
|
+
# {#default_to}, or `nil` if the setting has no default.
|
|
121
|
+
def default
|
|
122
|
+
return @default_to.call if default_block?
|
|
123
|
+
# If there is a previous setting in the chain, use its default
|
|
124
|
+
@previous_setting.nil? ? nil : @previous_setting.default
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
private
|
|
128
|
+
|
|
129
|
+
# @return [Boolean] true if the setting has a default setting block. Subclasses should not override this method.
|
|
130
|
+
def default_block?
|
|
131
|
+
!@default_to.nil?
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
data/lib/pdk/config/validator.rb
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
module PDK
|
|
2
|
-
class Config
|
|
3
|
-
# A collection of predefined validators for use with {PDK::Config::Value}.
|
|
4
|
-
#
|
|
5
|
-
# @example
|
|
6
|
-
# value :enabled do
|
|
7
|
-
# validate PDK::Config::Validator.boolean
|
|
8
|
-
# end
|
|
9
|
-
module Validator
|
|
10
|
-
# @return [Hash{Symbol => [Proc,String]}] a {PDK::Config::Value}
|
|
11
|
-
# validator that ensures that the value is either a TrueClass or
|
|
12
|
-
# FalseClass.
|
|
13
|
-
def self.boolean
|
|
14
|
-
{
|
|
15
|
-
proc: ->(value) { [true, false].include?(value) },
|
|
16
|
-
message: _('must be a boolean: true or false'),
|
|
17
|
-
}
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
# @return [Hash{Symbol => [Proc,String]}] a {PDK::Config::Value}
|
|
21
|
-
# validator that ensures that the value is a String that matches the
|
|
22
|
-
# regex for a version 4 UUID.
|
|
23
|
-
def self.uuid
|
|
24
|
-
{
|
|
25
|
-
proc: ->(value) { value.match(%r{\A\h{8}(?:-\h{4}){3}-\h{12}\z}) },
|
|
26
|
-
message: _('must be a version 4 UUID'),
|
|
27
|
-
}
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
1
|
+
module PDK
|
|
2
|
+
class Config
|
|
3
|
+
# A collection of predefined validators for use with {PDK::Config::Value}.
|
|
4
|
+
#
|
|
5
|
+
# @example
|
|
6
|
+
# value :enabled do
|
|
7
|
+
# validate PDK::Config::Validator.boolean
|
|
8
|
+
# end
|
|
9
|
+
module Validator
|
|
10
|
+
# @return [Hash{Symbol => [Proc,String]}] a {PDK::Config::Value}
|
|
11
|
+
# validator that ensures that the value is either a TrueClass or
|
|
12
|
+
# FalseClass.
|
|
13
|
+
def self.boolean
|
|
14
|
+
{
|
|
15
|
+
proc: ->(value) { [true, false].include?(value) },
|
|
16
|
+
message: _('must be a boolean: true or false'),
|
|
17
|
+
}
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# @return [Hash{Symbol => [Proc,String]}] a {PDK::Config::Value}
|
|
21
|
+
# validator that ensures that the value is a String that matches the
|
|
22
|
+
# regex for a version 4 UUID.
|
|
23
|
+
def self.uuid
|
|
24
|
+
{
|
|
25
|
+
proc: ->(value) { value.match(%r{\A\h{8}(?:-\h{4}){3}-\h{12}\z}) },
|
|
26
|
+
message: _('must be a version 4 UUID'),
|
|
27
|
+
}
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
data/lib/pdk/config/yaml.rb
CHANGED
|
@@ -1,46 +1,46 @@
|
|
|
1
|
-
require 'pdk'
|
|
2
|
-
|
|
3
|
-
module PDK
|
|
4
|
-
class Config
|
|
5
|
-
# Parses a YAML document.
|
|
6
|
-
#
|
|
7
|
-
# @see PDK::Config::Namespace.parse_file
|
|
8
|
-
class YAML < Namespace
|
|
9
|
-
def parse_file(filename)
|
|
10
|
-
raise unless block_given?
|
|
11
|
-
data = load_data(filename)
|
|
12
|
-
return if data.nil? || data.empty?
|
|
13
|
-
|
|
14
|
-
require 'yaml'
|
|
15
|
-
|
|
16
|
-
data = if Gem::Version.new(Psych::VERSION) >= Gem::Version.new('3.1.0.pre1')
|
|
17
|
-
::YAML.safe_load(data, permitted_classes: [Symbol], permitted_symbols: [], aliases: true)
|
|
18
|
-
else
|
|
19
|
-
::YAML.safe_load(data, [Symbol], [], true)
|
|
20
|
-
end
|
|
21
|
-
return if data.nil?
|
|
22
|
-
|
|
23
|
-
data.each { |k, v| yield k, PDK::Config::Setting.new(k, self, v) }
|
|
24
|
-
rescue Psych::SyntaxError => e
|
|
25
|
-
raise PDK::Config::LoadError, _('Syntax error when loading %{file}: %{error}') % {
|
|
26
|
-
file: filename,
|
|
27
|
-
error: "#{e.problem} #{e.context}",
|
|
28
|
-
}
|
|
29
|
-
rescue Psych::DisallowedClass => e
|
|
30
|
-
raise PDK::Config::LoadError, _('Unsupported class in %{file}: %{error}') % {
|
|
31
|
-
file: filename,
|
|
32
|
-
error: e.message,
|
|
33
|
-
}
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# Serializes object data into a YAML string.
|
|
37
|
-
#
|
|
38
|
-
# @see PDK::Config::Namespace.serialize_data
|
|
39
|
-
def serialize_data(data)
|
|
40
|
-
require 'yaml'
|
|
41
|
-
|
|
42
|
-
::YAML.dump(data)
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
|
1
|
+
require 'pdk'
|
|
2
|
+
|
|
3
|
+
module PDK
|
|
4
|
+
class Config
|
|
5
|
+
# Parses a YAML document.
|
|
6
|
+
#
|
|
7
|
+
# @see PDK::Config::Namespace.parse_file
|
|
8
|
+
class YAML < Namespace
|
|
9
|
+
def parse_file(filename)
|
|
10
|
+
raise unless block_given?
|
|
11
|
+
data = load_data(filename)
|
|
12
|
+
return if data.nil? || data.empty?
|
|
13
|
+
|
|
14
|
+
require 'yaml'
|
|
15
|
+
|
|
16
|
+
data = if Gem::Version.new(Psych::VERSION) >= Gem::Version.new('3.1.0.pre1')
|
|
17
|
+
::YAML.safe_load(data, permitted_classes: [Symbol], permitted_symbols: [], aliases: true)
|
|
18
|
+
else
|
|
19
|
+
::YAML.safe_load(data, [Symbol], [], true)
|
|
20
|
+
end
|
|
21
|
+
return if data.nil?
|
|
22
|
+
|
|
23
|
+
data.each { |k, v| yield k, PDK::Config::Setting.new(k, self, v) }
|
|
24
|
+
rescue Psych::SyntaxError => e
|
|
25
|
+
raise PDK::Config::LoadError, _('Syntax error when loading %{file}: %{error}') % {
|
|
26
|
+
file: filename,
|
|
27
|
+
error: "#{e.problem} #{e.context}",
|
|
28
|
+
}
|
|
29
|
+
rescue Psych::DisallowedClass => e
|
|
30
|
+
raise PDK::Config::LoadError, _('Unsupported class in %{file}: %{error}') % {
|
|
31
|
+
file: filename,
|
|
32
|
+
error: e.message,
|
|
33
|
+
}
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Serializes object data into a YAML string.
|
|
37
|
+
#
|
|
38
|
+
# @see PDK::Config::Namespace.serialize_data
|
|
39
|
+
def serialize_data(data)
|
|
40
|
+
require 'yaml'
|
|
41
|
+
|
|
42
|
+
::YAML.dump(data)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -1,59 +1,59 @@
|
|
|
1
|
-
require 'pdk'
|
|
2
|
-
|
|
3
|
-
module PDK
|
|
4
|
-
class Config
|
|
5
|
-
# Parses a YAML document with a JSON schema.
|
|
6
|
-
#
|
|
7
|
-
# @see PDK::Config::Namespace.parse_file
|
|
8
|
-
class YAMLWithSchema < JSONSchemaNamespace
|
|
9
|
-
def parse_file(filename)
|
|
10
|
-
raise unless block_given?
|
|
11
|
-
data = load_data(filename)
|
|
12
|
-
data = '' if data.nil?
|
|
13
|
-
require 'yaml'
|
|
14
|
-
require 'json-schema'
|
|
15
|
-
|
|
16
|
-
@raw_data = ::YAML.safe_load(data, [Symbol], [], true)
|
|
17
|
-
@raw_data = {} if @raw_data.nil?
|
|
18
|
-
|
|
19
|
-
begin
|
|
20
|
-
# Ensure the parsed document is actually valid
|
|
21
|
-
validate_document!(@raw_data)
|
|
22
|
-
rescue ::JSON::Schema::ValidationError => e
|
|
23
|
-
raise PDK::Config::LoadError, _('The configuration file %{filename} is not valid: %{message}') % {
|
|
24
|
-
filename: filename,
|
|
25
|
-
message: e.message,
|
|
26
|
-
}
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
require 'pdk/config/json_schema_setting'
|
|
30
|
-
|
|
31
|
-
schema_property_names.each do |key|
|
|
32
|
-
yield key, PDK::Config::JSONSchemaSetting.new(key, self, @raw_data[key])
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
# Remove all of the "known" settings from the schema and
|
|
36
|
-
# we're left with the settings that we don't manage.
|
|
37
|
-
self.unmanaged_settings = @raw_data.reject { |k, _| schema_property_names.include?(k) }
|
|
38
|
-
rescue Psych::SyntaxError => e
|
|
39
|
-
raise PDK::Config::LoadError, _('Syntax error when loading %{file}: %{error}') % {
|
|
40
|
-
file: filename,
|
|
41
|
-
error: "#{e.problem} #{e.context}",
|
|
42
|
-
}
|
|
43
|
-
rescue Psych::DisallowedClass => e
|
|
44
|
-
raise PDK::Config::LoadError, _('Unsupported class in %{file}: %{error}') % {
|
|
45
|
-
file: filename,
|
|
46
|
-
error: e.message,
|
|
47
|
-
}
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
# Serializes object data into a YAML string.
|
|
51
|
-
#
|
|
52
|
-
# @see PDK::Config::Namespace.serialize_data
|
|
53
|
-
def serialize_data(data)
|
|
54
|
-
require 'yaml'
|
|
55
|
-
::YAML.dump(data)
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
end
|
|
1
|
+
require 'pdk'
|
|
2
|
+
|
|
3
|
+
module PDK
|
|
4
|
+
class Config
|
|
5
|
+
# Parses a YAML document with a JSON schema.
|
|
6
|
+
#
|
|
7
|
+
# @see PDK::Config::Namespace.parse_file
|
|
8
|
+
class YAMLWithSchema < JSONSchemaNamespace
|
|
9
|
+
def parse_file(filename)
|
|
10
|
+
raise unless block_given?
|
|
11
|
+
data = load_data(filename)
|
|
12
|
+
data = '' if data.nil?
|
|
13
|
+
require 'yaml'
|
|
14
|
+
require 'json-schema'
|
|
15
|
+
|
|
16
|
+
@raw_data = ::YAML.safe_load(data, [Symbol], [], true)
|
|
17
|
+
@raw_data = {} if @raw_data.nil?
|
|
18
|
+
|
|
19
|
+
begin
|
|
20
|
+
# Ensure the parsed document is actually valid
|
|
21
|
+
validate_document!(@raw_data)
|
|
22
|
+
rescue ::JSON::Schema::ValidationError => e
|
|
23
|
+
raise PDK::Config::LoadError, _('The configuration file %{filename} is not valid: %{message}') % {
|
|
24
|
+
filename: filename,
|
|
25
|
+
message: e.message,
|
|
26
|
+
}
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
require 'pdk/config/json_schema_setting'
|
|
30
|
+
|
|
31
|
+
schema_property_names.each do |key|
|
|
32
|
+
yield key, PDK::Config::JSONSchemaSetting.new(key, self, @raw_data[key])
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Remove all of the "known" settings from the schema and
|
|
36
|
+
# we're left with the settings that we don't manage.
|
|
37
|
+
self.unmanaged_settings = @raw_data.reject { |k, _| schema_property_names.include?(k) }
|
|
38
|
+
rescue Psych::SyntaxError => e
|
|
39
|
+
raise PDK::Config::LoadError, _('Syntax error when loading %{file}: %{error}') % {
|
|
40
|
+
file: filename,
|
|
41
|
+
error: "#{e.problem} #{e.context}",
|
|
42
|
+
}
|
|
43
|
+
rescue Psych::DisallowedClass => e
|
|
44
|
+
raise PDK::Config::LoadError, _('Unsupported class in %{file}: %{error}') % {
|
|
45
|
+
file: filename,
|
|
46
|
+
error: e.message,
|
|
47
|
+
}
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Serializes object data into a YAML string.
|
|
51
|
+
#
|
|
52
|
+
# @see PDK::Config::Namespace.serialize_data
|
|
53
|
+
def serialize_data(data)
|
|
54
|
+
require 'yaml'
|
|
55
|
+
::YAML.dump(data)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|