reflekt 0.9.1 → 0.9.7

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.
@@ -0,0 +1,34 @@
1
+ class Renderer
2
+
3
+ def initialize(path, output_path)
4
+
5
+ @path = path
6
+ @output_path = output_path
7
+
8
+ end
9
+
10
+ ##
11
+ # Place files in output path.
12
+ ##
13
+ def render()
14
+
15
+ filenames = [
16
+ "bundle.js",
17
+ "index.html",
18
+ "package-lock.json",
19
+ "package.json",
20
+ "README.md",
21
+ "server.js"
22
+ ]
23
+
24
+ filenames.each do |filename|
25
+ file = File.read(File.join(@path, "web", filename))
26
+ File.open(File.join(@output_path, filename), 'w+') do |f|
27
+ f.write file
28
+ end
29
+ end
30
+
31
+ end
32
+
33
+
34
+ end
@@ -0,0 +1,32 @@
1
+ ################################################################################
2
+ # RULES
3
+ #
4
+ # Abstract class.
5
+ # See lib/rules for rules.
6
+ ################################################################################
7
+
8
+ require 'set'
9
+
10
+ class Rule
11
+
12
+ # Each rule intitalises itself.
13
+ def initialize()
14
+ @values = []
15
+ end
16
+
17
+ # Each rule loads up an array of values.
18
+ def load(value)
19
+ @values << value
20
+ end
21
+
22
+ # Each rule trains on values to determine its boundaries.
23
+ def train()
24
+
25
+ end
26
+
27
+ # Each rule compares the values it's given with its boundaries.
28
+ def validate(value)
29
+
30
+ end
31
+
32
+ end
@@ -0,0 +1,79 @@
1
+ ################################################################################
2
+ # RULE POOL
3
+ #
4
+ # A collection of unique rules that validate an argument.
5
+ ################################################################################
6
+
7
+ require 'set'
8
+ require 'rules/FloatRule'
9
+ require 'rules/IntegerRule'
10
+ require 'rules/StringRule'
11
+
12
+ class RuleSet
13
+
14
+ attr_accessor :types
15
+ attr_accessor :rules
16
+
17
+ def initialize()
18
+
19
+ @types = Set.new
20
+ @rules = {}
21
+
22
+ end
23
+
24
+ def load(type, value)
25
+
26
+ # Track data type.
27
+ @types << type
28
+
29
+ # Get rule for this data type.
30
+ rule = nil
31
+
32
+ case type
33
+ when "Integer"
34
+ unless @rules.key? IntegerRule
35
+ rule = IntegerRule.new()
36
+ @rules[IntegerRule] = rule
37
+ else
38
+ rule = @rules[IntegerRule]
39
+ end
40
+ when "String"
41
+ unless @rules.key? StringRule
42
+ rule = StringRule.new()
43
+ @rules[StringRule] = rule
44
+ else
45
+ rule = @rules[IntegerRule]
46
+ end
47
+ end
48
+
49
+ # Add value to rule.
50
+ unless rule.nil?
51
+ rule.load(value)
52
+ end
53
+
54
+ return self
55
+
56
+ end
57
+
58
+ def train()
59
+
60
+ @rules.each do |klass, rule|
61
+ rule.train()
62
+ end
63
+
64
+ end
65
+
66
+ def validate_rule(value)
67
+ result = true
68
+
69
+ @rules.each do |klass, rule|
70
+
71
+ unless rule.validate(value)
72
+ result = false
73
+ end
74
+ end
75
+
76
+ return result
77
+ end
78
+
79
+ end
@@ -0,0 +1,192 @@
1
+ ################################################################################
2
+ # RULER
3
+ #
4
+ # Aggregates input/output from controls.
5
+ # Creates and trains RuleSets from aggregated input/output.
6
+ # Validates reflection input/output against RuleSets.
7
+ ################################################################################
8
+
9
+ require 'RuleSet'
10
+
11
+ class Ruler
12
+
13
+ def initialize()
14
+ @rule_sets = {}
15
+ end
16
+
17
+ ##
18
+ # Get input RuleSets.
19
+ #
20
+ # @param Symbol klass
21
+ # @param Symbol method
22
+ #
23
+ # @return Array
24
+ ##
25
+ def get_input_rule_sets(klass, method)
26
+ return @rule_sets.dig(klass, method, :inputs)
27
+ end
28
+
29
+ ##
30
+ # Get input RuleSet.
31
+ #
32
+ # @param Symbol klass
33
+ # @param Symbol method
34
+ #
35
+ # @return RuleSet
36
+ ##
37
+ def get_input_rule_set(klass, method, arg_num)
38
+ @rule_sets.dig(klass, method, :inputs, arg_num)
39
+ end
40
+
41
+ ##
42
+ # Get output RuleSet.
43
+ #
44
+ # @param Symbol klass
45
+ # @param Symbol method
46
+ #
47
+ # @return RuleSet.
48
+ ##
49
+ def get_output_rule_set(klass, method)
50
+ @rule_sets.dig(klass, method, :output)
51
+ end
52
+
53
+ ##
54
+ # Set input RuleSet.
55
+ #
56
+ # @param Symbol klass
57
+ # @param Symbol method
58
+ ##
59
+ def set_input_rule_set(klass, method, arg_num, rule_set)
60
+ # Set defaults.
61
+ @rule_sets[klass] = {} unless @rule_sets.key? klass
62
+ @rule_sets[klass][method] = {} unless @rule_sets[klass].key? method
63
+ @rule_sets[klass][method][:inputs] = [] unless @rule_sets[klass][method].key? :inputs
64
+ # Set value.
65
+ @rule_sets[klass][method][:inputs][arg_num] = rule_set
66
+ end
67
+
68
+ ##
69
+ # Set output RuleSet.
70
+ #
71
+ # @param Symbol klass
72
+ # @param Symbol method
73
+ # @param RuleSet rule_set
74
+ ##
75
+ def set_output_rule_set(klass, method, rule_set)
76
+ # Set defaults.
77
+ @rule_sets[klass] = {} unless @rule_sets.key? klass
78
+ @rule_sets[klass][method] = {} unless @rule_sets[klass].key? method
79
+ # Set value.
80
+ @rule_sets[klass][method][:output] = rule_set
81
+ end
82
+
83
+ ##
84
+ # Load RuleSets.
85
+ #
86
+ # @param Symbol klass
87
+ # @param Symbol method
88
+ # @param Array controls
89
+ ##
90
+ def load(klass, method, controls)
91
+
92
+ # Create a RuleSet for each control's inputs/output.
93
+ controls.each_with_index do |control, index|
94
+
95
+ # Process inputs.
96
+ control[:inputs].each_with_index do |input, arg_num|
97
+ rule_set = get_input_rule_set(klass, method, arg_num)
98
+ if rule_set.nil?
99
+ rule_set = RuleSet.new()
100
+ set_input_rule_set(klass, method, arg_num, rule_set)
101
+ end
102
+ rule_set.load(input[:type], input[:value])
103
+ end
104
+
105
+ # Process output.
106
+ output_rule_set = get_output_rule_set(klass, method)
107
+ if output_rule_set.nil?
108
+ output_rule_set = RuleSet.new()
109
+ set_output_rule_set(klass, method, output_rule_set)
110
+ end
111
+ output_rule_set.load(control[:output][:type], control[:output][:value])
112
+
113
+ end
114
+
115
+ end
116
+
117
+ ##
118
+ # Train RuleSets from controls.
119
+ #
120
+ # @param Symbol klass
121
+ # @param Symbol method
122
+ ##
123
+ def train(klass, method)
124
+
125
+ input_rule_sets = get_input_rule_sets(klass, method)
126
+ unless input_rule_sets.nil?
127
+ input_rule_sets.each do |input_rule_set|
128
+ input_rule_set.train()
129
+ end
130
+ end
131
+
132
+ output_rule_set = get_output_rule_set(klass, method)
133
+ unless output_rule_set.nil?
134
+ output_rule_set.train()
135
+ end
136
+
137
+ end
138
+
139
+ ##
140
+ # Validate inputs.
141
+ #
142
+ # @param Array inputs - The method's arguments.
143
+ # @param Array input_rule_sets - The RuleSets to validate each input with.
144
+ ##
145
+ def validate_inputs(inputs, input_rule_sets)
146
+
147
+ # Default to a PASS result.
148
+ result = true
149
+
150
+ # Validate each argument against each rule set for that argument.
151
+ inputs.each_with_index do |input, arg_num|
152
+
153
+ unless input_rule_sets[arg_num].nil?
154
+
155
+ rule_set = input_rule_sets[arg_num]
156
+
157
+ unless rule_set.validate_rule(input)
158
+ result = false
159
+ end
160
+
161
+ end
162
+ end
163
+
164
+ return result
165
+
166
+ end
167
+
168
+ ##
169
+ # Validate output.
170
+ #
171
+ # @param dynamic output - The method's return value.
172
+ # @param RuleSet output_rule_set - The RuleSet to validate the output with.
173
+ ##
174
+ def validate_output(output, output_rule_set)
175
+
176
+ # Default to a PASS result.
177
+ result = true
178
+
179
+ unless output_rule_set.nil?
180
+
181
+ # Validate output RuleSet for that argument.
182
+ unless output_rule_set.validate_rule(output)
183
+ result = false
184
+ end
185
+
186
+ end
187
+
188
+ return result
189
+
190
+ end
191
+
192
+ end
@@ -42,15 +42,4 @@ class ShadowStack
42
42
 
43
43
  end
44
44
 
45
- def display
46
- display_execution_tree(@bottom)
47
- end
48
-
49
- def display_execution_tree(execution)
50
- p execution
51
- unless execution.parent == nil
52
- display_execution_tree(execution.parent)
53
- end
54
- end
55
-
56
45
  end
@@ -0,0 +1,28 @@
1
+ require 'Rule'
2
+
3
+ class FloatRule < Rule
4
+
5
+ attr_accessor :min
6
+ attr_accessor :max
7
+
8
+ def initialize()
9
+ super
10
+
11
+ @min = nil
12
+ @max = nil
13
+ end
14
+
15
+ def load(value)
16
+ @values << value
17
+ end
18
+
19
+ def train()
20
+ # TODO.
21
+ end
22
+
23
+ def validate(value)
24
+ # TODO.
25
+ true
26
+ end
27
+
28
+ end
@@ -0,0 +1,31 @@
1
+ require 'Rule'
2
+
3
+ class IntegerRule < Rule
4
+
5
+ def initialize()
6
+ @min = nil
7
+ @max = nil
8
+
9
+ super
10
+ end
11
+
12
+ def load(value)
13
+ @values << value.to_i
14
+ end
15
+
16
+ def train()
17
+ numbers = @values.select {|num| num.class == Integer }
18
+ numbers.sort!
19
+ @min = numbers.first
20
+ @max = numbers.last
21
+ end
22
+
23
+ def validate(value)
24
+
25
+ return false if value < @min
26
+ return false if value > @max
27
+
28
+ true
29
+ end
30
+
31
+ end
@@ -0,0 +1,29 @@
1
+ require 'Rule'
2
+
3
+ class StringRule < Rule
4
+
5
+ attr_accessor :min_length
6
+ attr_accessor :max_length
7
+
8
+ def initialize()
9
+ super
10
+
11
+ @min_length = nil
12
+ @max_length = nil
13
+
14
+ end
15
+
16
+ def load(value)
17
+ @values << value
18
+ end
19
+
20
+ def train()
21
+ # TODO.
22
+ end
23
+
24
+ def validate(value)
25
+ # TODO.
26
+ true
27
+ end
28
+
29
+ end