Class: Steplib::WorkflowValidator
- Inherits:
-
Object
- Object
- Steplib::WorkflowValidator
- Defined in:
- lib/steplib/workflow_validator.rb
Class Method Summary collapse
- .allowed_environment_attributes_with_types ⇒ Object
- .allowed_step_version_attributes_with_types ⇒ Object
- .allowed_step_version_input_attributes_with_types ⇒ Object
- .allowed_step_version_output_attributes_with_types ⇒ Object
- .allowed_top_level_attributes_with_types ⇒ Object
- .only_attributes(attributes_list_with_types) ⇒ Object
- .required_environment_attributes_with_types ⇒ Object
- .required_step_version_attributes_with_types ⇒ Object
- .required_step_version_input_attributes ⇒ Object
- .required_step_version_output_attributes ⇒ Object
-
.required_top_level_attributes_with_types ⇒ Object
required and allowed properties.
- .validate_workflow!(workflow_data) ⇒ Object
- .validate_workflow_environment!(env_item_data) ⇒ Object
- .validate_workflow_step!(workflow_step_data) ⇒ Object
- .whitelist_workflow(workflow_data) ⇒ Object
- .whitelist_workflow_environment(workflow_env_data) ⇒ Object
- .whitelist_workflow_step_version(workflow_step_version_data) ⇒ Object
- .whitelist_workflow_step_version_input(workflow_step_version_input_data) ⇒ Object
- .whitelist_workflow_step_version_output(workflow_step_version_output_data) ⇒ Object
Class Method Details
.allowed_environment_attributes_with_types ⇒ Object
158 159 160 |
# File 'lib/steplib/workflow_validator.rb', line 158 def allowed_environment_attributes_with_types return required_environment_attributes_with_types() end |
.allowed_step_version_attributes_with_types ⇒ Object
169 170 171 172 173 |
# File 'lib/steplib/workflow_validator.rb', line 169 def allowed_step_version_attributes_with_types return required_step_version_attributes_with_types().concat( Steplib::SteplibValidator.optional_step_version_properties_with_types() ) end |
.allowed_step_version_input_attributes_with_types ⇒ Object
183 184 185 |
# File 'lib/steplib/workflow_validator.rb', line 183 def allowed_step_version_input_attributes_with_types return Steplib::SteplibValidator.required_step_version_inputs_properties_with_types() end |
.allowed_step_version_output_attributes_with_types ⇒ Object
187 188 189 |
# File 'lib/steplib/workflow_validator.rb', line 187 def allowed_step_version_output_attributes_with_types return Steplib::SteplibValidator.required_step_version_outputs_properties_with_types() end |
.allowed_top_level_attributes_with_types ⇒ Object
143 144 145 146 147 |
# File 'lib/steplib/workflow_validator.rb', line 143 def allowed_top_level_attributes_with_types return required_top_level_attributes_with_types().concat([ ['meta', Hash] ]) end |
.only_attributes(attributes_list_with_types) ⇒ Object
191 192 193 |
# File 'lib/steplib/workflow_validator.rb', line 191 def only_attributes(attributes_list_with_types) return attributes_list_with_types.map { |e| e.first } end |
.required_environment_attributes_with_types ⇒ Object
149 150 151 152 153 154 155 156 |
# File 'lib/steplib/workflow_validator.rb', line 149 def required_environment_attributes_with_types return [ ['title', String], ['mapped_to', String], ['is_expand', ABooleanValue], ['value', String], ] end |
.required_step_version_attributes_with_types ⇒ Object
162 163 164 165 166 167 |
# File 'lib/steplib/workflow_validator.rb', line 162 def required_step_version_attributes_with_types return [ ['position_in_workflow', Fixnum], ['is_always_run', ABooleanValue], ].concat Steplib::SteplibValidator.required_step_version_properties_with_types() end |
.required_step_version_input_attributes ⇒ Object
175 176 177 |
# File 'lib/steplib/workflow_validator.rb', line 175 def required_step_version_input_attributes return Steplib::SteplibValidator.required_step_version_inputs_properties_with_types() end |
.required_step_version_output_attributes ⇒ Object
179 180 181 |
# File 'lib/steplib/workflow_validator.rb', line 179 def required_step_version_output_attributes return Steplib::SteplibValidator.required_step_version_outputs_properties_with_types() end |
.required_top_level_attributes_with_types ⇒ Object
required and allowed properties
135 136 137 138 139 140 141 |
# File 'lib/steplib/workflow_validator.rb', line 135 def required_top_level_attributes_with_types return [ ['format_version', String], ['environments', Array], ['steps', Array] ] end |
.validate_workflow!(workflow_data) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/steplib/workflow_validator.rb', line 58 def validate_workflow!(workflow_data) expected_format_version = '0.9.0' if workflow_data['format_version'] != expected_format_version raise "Invalid format_version, expected (#{expected_format_version}) got (#{workflow_data['format_version']})" end HashUtils.check_required_attributes_and_types!(workflow_data, required_top_level_attributes_with_types() ) envs_arr = workflow_data['environments'] envs_arr.each do |a_env_data| validate_workflow_environment!(a_env_data) end steps_arr = workflow_data['steps'] steps_arr.each do |a_step_data| validate_workflow_step!(a_step_data) end end |
.validate_workflow_environment!(env_item_data) ⇒ Object
79 80 81 82 |
# File 'lib/steplib/workflow_validator.rb', line 79 def validate_workflow_environment!(env_item_data) HashUtils.check_required_attributes_and_types!(env_item_data, required_environment_attributes_with_types()) end |
.validate_workflow_step!(workflow_step_data) ⇒ Object
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/steplib/workflow_validator.rb', line 84 def validate_workflow_step!(workflow_step_data) HashUtils.check_required_attributes_and_types!(workflow_step_data, required_step_version_attributes_with_types()) # optional - can be nil workflow_step_data = HashUtils.set_missing_defaults( workflow_step_data, [{key: 'icon_url_256', value: nil}]) HashUtils.check_required_attributes_and_types!(workflow_step_data['source'], [ ['git', String] ]) = workflow_step_data['host_os_tags'] .each { |a_tag| raise "Invalid host-os-tag (#{a_tag}), not a String (class: #{a_tag.class})!" unless a_tag.is_a? String } = workflow_step_data['project_type_tags'] .each { |a_tag| raise "Invalid project-type-tag (#{a_tag}), not a String (class: #{a_tag.class})!" unless a_tag.is_a? String } = workflow_step_data['type_tags'] .each { |a_tag| raise "Invalid type-tag (#{a_tag}), not a String (class: #{a_tag.class})!" unless a_tag.is_a? String } a_inputs = workflow_step_data['inputs'] a_inputs.each do |a_input_itm| HashUtils.check_required_attributes_and_types!(a_input_itm, required_step_version_input_attributes() ) = a_input_itm['value_options'] .each { |a_value_option| raise "Invalid value-option (#{a_value_option}), not a String (class: #{a_value_option.class})!" unless a_value_option.is_a? String } end a_outputs = workflow_step_data['outputs'] a_outputs.each do |a_output_itm| HashUtils.check_required_attributes_and_types!(a_output_itm, required_step_version_output_attributes()) end end |
.whitelist_workflow(workflow_data) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/steplib/workflow_validator.rb', line 8 def whitelist_workflow(workflow_data) whitelisted_data = HashUtils.whitelist(workflow_data, only_attributes(allowed_top_level_attributes_with_types()) ) whitelisted_data['environments'] = whitelisted_data['environments'].map do |an_env| whitelist_workflow_environment(an_env) end whitelisted_data['steps'] = whitelisted_data['steps'].map do |a_step_version| whitelist_workflow_step_version(a_step_version) end return whitelisted_data end |
.whitelist_workflow_environment(workflow_env_data) ⇒ Object
24 25 26 27 28 29 |
# File 'lib/steplib/workflow_validator.rb', line 24 def whitelist_workflow_environment(workflow_env_data) whitelisted_data = HashUtils.whitelist(workflow_env_data, only_attributes(allowed_environment_attributes_with_types()) ) return whitelisted_data end |
.whitelist_workflow_step_version(workflow_step_version_data) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/steplib/workflow_validator.rb', line 31 def whitelist_workflow_step_version(workflow_step_version_data) whitelisted_data = HashUtils.whitelist(workflow_step_version_data, only_attributes(allowed_step_version_attributes_with_types()) ) whitelisted_data['inputs'] = whitelisted_data['inputs'].map do |a_step_input| whitelist_workflow_step_version_input(a_step_input) end whitelisted_data['outputs'] = whitelisted_data['outputs'].map do |a_step_output| whitelist_workflow_step_version_output(a_step_output) end return whitelisted_data end |
.whitelist_workflow_step_version_input(workflow_step_version_input_data) ⇒ Object
44 45 46 47 48 49 |
# File 'lib/steplib/workflow_validator.rb', line 44 def whitelist_workflow_step_version_input(workflow_step_version_input_data) whitelisted_data = HashUtils.whitelist(workflow_step_version_input_data, only_attributes(allowed_step_version_input_attributes_with_types()) ) return whitelisted_data end |
.whitelist_workflow_step_version_output(workflow_step_version_output_data) ⇒ Object
51 52 53 54 55 56 |
# File 'lib/steplib/workflow_validator.rb', line 51 def whitelist_workflow_step_version_output(workflow_step_version_output_data) whitelisted_data = HashUtils.whitelist(workflow_step_version_output_data, only_attributes(allowed_step_version_output_attributes_with_types()) ) return whitelisted_data end |