steplib 0.0.0.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 +7 -0
- data/lib/steplib/format_corrector.rb +16 -0
- data/lib/steplib/hash_utils.rb +26 -0
- data/lib/steplib/validator.rb +114 -0
- data/lib/steplib.rb +2 -0
- metadata +50 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4e3c30d11a10f40220b04db01b9a8123c746eb46
|
4
|
+
data.tar.gz: 7f519032f630ab11195cf9e6ebad91b76b1409c4
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6079617bd9a1ab65ec3bb4e48b9b2ea1a940a24aeca7041e251c9dff2e96c397319e6ac1534c0a26925756194fe39ac1c68f4adcb15c76df17049f58ece7e909
|
7
|
+
data.tar.gz: 0dc7cd1493257d6731e4e537e62a7231170f6a0ec61b7ba44a850cd168959d3ce22e7f17e8143633dcbe0f4897812cbd024ed1ce985c1984565fbae745ad8a49
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require_relative 'validator'
|
2
|
+
|
3
|
+
module Steplib
|
4
|
+
class FormatCorrector
|
5
|
+
|
6
|
+
def initialize(workflow_data)
|
7
|
+
@workflow_data = workflow_data
|
8
|
+
end
|
9
|
+
|
10
|
+
def inject_missing_default_values_from_step_version(step_version_data)
|
11
|
+
|
12
|
+
return step_version_data
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# monkeypatching a ABooleanValue type
|
2
|
+
# so we can call .is_a? on true and false values
|
3
|
+
# and get a positive answer for both for ABooleanValue type
|
4
|
+
module ABooleanValue; end
|
5
|
+
class TrueClass; include ABooleanValue; end
|
6
|
+
class FalseClass; include ABooleanValue; end
|
7
|
+
|
8
|
+
module Steplib
|
9
|
+
class HashUtils
|
10
|
+
def self.check_required_attributes_and_types!(hash_to_check, attribute_type_array)
|
11
|
+
attribute_type_array.each do |a_attribute_type_itm|
|
12
|
+
attribute_key = a_attribute_type_itm[0]
|
13
|
+
attribute_type = a_attribute_type_itm[1]
|
14
|
+
#
|
15
|
+
attr_value = hash_to_check[attribute_key]
|
16
|
+
if attr_value.nil?
|
17
|
+
raise "Attribute (#{attribute_key}) not found in hash"
|
18
|
+
end
|
19
|
+
unless attr_value.is_a? attribute_type
|
20
|
+
raise "Attribute (#{attribute_key}) found, but it's type (#{attr_value.class}) doesn't match the required (#{attribute_type})"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
return true
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
require_relative 'hash_utils'
|
2
|
+
|
3
|
+
module Steplib
|
4
|
+
class Validator
|
5
|
+
|
6
|
+
def initialize(workflow_data)
|
7
|
+
@workflow_data = workflow_data
|
8
|
+
#
|
9
|
+
@expected_format_version = '0.9.0'
|
10
|
+
end
|
11
|
+
|
12
|
+
def validate!
|
13
|
+
if @workflow_data['format_version'] != @expected_format_version
|
14
|
+
raise "Invalid format_version, expected (#{@expected_format_version}) got (#{@workflow_data['format_version']})"
|
15
|
+
end
|
16
|
+
|
17
|
+
HashUtils.check_required_attributes_and_types!(@workflow_data, [
|
18
|
+
['format_version', String],
|
19
|
+
['environments', Array],
|
20
|
+
['steps', Array]
|
21
|
+
])
|
22
|
+
|
23
|
+
envs_arr = @workflow_data['environments']
|
24
|
+
envs_arr.each do |a_env_data|
|
25
|
+
validate_workflow_environment!(a_env_data)
|
26
|
+
end
|
27
|
+
|
28
|
+
steps_arr = @workflow_data['steps']
|
29
|
+
steps_arr.each do |a_step_data|
|
30
|
+
validate_workflow_step!(a_step_data)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def validate_workflow_environment!(env_item_data)
|
35
|
+
HashUtils.check_required_attributes_and_types!(env_item_data, [
|
36
|
+
['title', String],
|
37
|
+
['mapped_to', String],
|
38
|
+
['is_expand', ABooleanValue],
|
39
|
+
['value', String],
|
40
|
+
])
|
41
|
+
end
|
42
|
+
|
43
|
+
def validate_workflow_step!(workflow_step_data)
|
44
|
+
HashUtils.check_required_attributes_and_types!(workflow_step_data, [
|
45
|
+
['position_in_workflow', Fixnum],
|
46
|
+
['is_always_run', ABooleanValue],
|
47
|
+
# auto generated
|
48
|
+
['id', String],
|
49
|
+
['steplib_source', String],
|
50
|
+
['version_tag', String],
|
51
|
+
# data from step.yml
|
52
|
+
['name', String],
|
53
|
+
['description', String],
|
54
|
+
['website', String],
|
55
|
+
['fork_url', String],
|
56
|
+
['source', Hash],
|
57
|
+
['host_os_tags', Array],
|
58
|
+
['project_type_tags', Array],
|
59
|
+
['type_tags', Array],
|
60
|
+
['is_requires_admin_user', ABooleanValue],
|
61
|
+
['inputs', Array],
|
62
|
+
['outputs', Array],
|
63
|
+
])
|
64
|
+
|
65
|
+
HashUtils.check_required_attributes_and_types!(workflow_step_data['source'], [
|
66
|
+
['git', String]
|
67
|
+
])
|
68
|
+
|
69
|
+
a_host_os_tags = workflow_step_data['host_os_tags']
|
70
|
+
a_host_os_tags.each { |a_tag|
|
71
|
+
raise "Invalid host-os-tag (#{a_tag}), not a String (class: #{a_tag.class})!" unless a_tag.is_a? String
|
72
|
+
}
|
73
|
+
|
74
|
+
a_project_type_tags = workflow_step_data['project_type_tags']
|
75
|
+
a_project_type_tags.each { |a_tag|
|
76
|
+
raise "Invalid project-type-tag (#{a_tag}), not a String (class: #{a_tag.class})!" unless a_tag.is_a? String
|
77
|
+
}
|
78
|
+
|
79
|
+
a_type_tags = workflow_step_data['type_tags']
|
80
|
+
a_type_tags.each { |a_tag|
|
81
|
+
raise "Invalid type-tag (#{a_tag}), not a String (class: #{a_tag.class})!" unless a_tag.is_a? String
|
82
|
+
}
|
83
|
+
|
84
|
+
a_inputs = workflow_step_data['inputs']
|
85
|
+
a_inputs.each do |a_input_itm|
|
86
|
+
HashUtils.check_required_attributes_and_types!(a_input_itm, [
|
87
|
+
['title', String],
|
88
|
+
['description', String],
|
89
|
+
['mapped_to', String],
|
90
|
+
['is_expand', ABooleanValue],
|
91
|
+
['is_required', ABooleanValue],
|
92
|
+
['value_options', Array],
|
93
|
+
['value', String],
|
94
|
+
['is_dont_change_value', ABooleanValue]
|
95
|
+
])
|
96
|
+
|
97
|
+
a_value_options = a_input_itm['value_options']
|
98
|
+
a_value_options.each { |a_value_option|
|
99
|
+
raise "Invalid value-option (#{a_value_option}), not a String (class: #{a_value_option.class})!" unless a_value_option.is_a? String
|
100
|
+
}
|
101
|
+
end
|
102
|
+
|
103
|
+
a_outputs = workflow_step_data['outputs']
|
104
|
+
a_outputs.each do |a_output_itm|
|
105
|
+
HashUtils.check_required_attributes_and_types!(a_output_itm, [
|
106
|
+
['title', String],
|
107
|
+
['description', String],
|
108
|
+
['mapped_to', String]
|
109
|
+
])
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
114
|
+
end
|
data/lib/steplib.rb
ADDED
metadata
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: steplib
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Bitrise
|
8
|
+
- Viktor Benei
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2015-01-06 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: Validates, converts, etc. a StepLib, Workflow and other steplib datastore
|
15
|
+
formats. This GEM's major and minor version number matches the related StepLib format
|
16
|
+
specification's major and minor version number.
|
17
|
+
email: letsconnect@bitrise.io
|
18
|
+
executables: []
|
19
|
+
extensions: []
|
20
|
+
extra_rdoc_files: []
|
21
|
+
files:
|
22
|
+
- lib/steplib.rb
|
23
|
+
- lib/steplib/format_corrector.rb
|
24
|
+
- lib/steplib/hash_utils.rb
|
25
|
+
- lib/steplib/validator.rb
|
26
|
+
homepage: https://github.com/steplib/steplib
|
27
|
+
licenses:
|
28
|
+
- MIT
|
29
|
+
metadata: {}
|
30
|
+
post_install_message:
|
31
|
+
rdoc_options: []
|
32
|
+
require_paths:
|
33
|
+
- lib
|
34
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - ">="
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
requirements: []
|
45
|
+
rubyforge_project:
|
46
|
+
rubygems_version: 2.2.2
|
47
|
+
signing_key:
|
48
|
+
specification_version: 4
|
49
|
+
summary: StepLib.com's validator and other utilities
|
50
|
+
test_files: []
|