reflekt 1.0.5 → 1.0.10
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/lib/accessor.rb +45 -0
- data/lib/action.rb +127 -0
- data/lib/action_stack.rb +44 -0
- data/lib/{Clone.rb → clone.rb} +11 -11
- data/lib/config.rb +48 -0
- data/lib/control.rb +81 -0
- data/lib/experiment.rb +99 -0
- data/lib/meta.rb +75 -0
- data/lib/meta/array_meta.rb +32 -0
- data/lib/meta/boolean_meta.rb +26 -0
- data/lib/meta/float_meta.rb +26 -0
- data/lib/meta/integer_meta.rb +26 -0
- data/lib/meta/{NullMeta.rb → null_meta.rb} +21 -19
- data/lib/meta/object_meta.rb +35 -0
- data/lib/meta/string_meta.rb +26 -0
- data/lib/meta_builder.rb +100 -0
- data/lib/reflection.rb +123 -0
- data/lib/reflekt.rb +277 -0
- data/lib/renderer.rb +38 -0
- data/lib/rule.rb +54 -0
- data/lib/rule_set.rb +110 -0
- data/lib/rule_set_aggregator.rb +260 -0
- data/lib/rules/array_rule.rb +94 -0
- data/lib/rules/boolean_rule.rb +43 -0
- data/lib/rules/float_rule.rb +55 -0
- data/lib/rules/integer_rule.rb +55 -0
- data/lib/rules/null_rule.rb +35 -0
- data/lib/rules/object_rule.rb +42 -0
- data/lib/rules/string_rule.rb +75 -0
- data/lib/web/index.html +3 -4
- metadata +46 -29
- data/lib/Accessor.rb +0 -37
- data/lib/Action.rb +0 -88
- data/lib/ActionStack.rb +0 -44
- data/lib/Aggregator.rb +0 -260
- data/lib/Config.rb +0 -42
- data/lib/Control.rb +0 -83
- data/lib/Meta.rb +0 -71
- data/lib/MetaBuilder.rb +0 -84
- data/lib/Reflection.rb +0 -195
- data/lib/Reflekt.rb +0 -243
- data/lib/Renderer.rb +0 -39
- data/lib/Rule.rb +0 -52
- data/lib/RuleSet.rb +0 -109
- data/lib/meta/ArrayMeta.rb +0 -34
- data/lib/meta/BooleanMeta.rb +0 -26
- data/lib/meta/FloatMeta.rb +0 -26
- data/lib/meta/IntegerMeta.rb +0 -26
- data/lib/meta/StringMeta.rb +0 -26
- data/lib/rules/ArrayRule.rb +0 -88
- data/lib/rules/BooleanRule.rb +0 -47
- data/lib/rules/FloatRule.rb +0 -57
- data/lib/rules/IntegerRule.rb +0 -57
- data/lib/rules/NullRule.rb +0 -33
- data/lib/rules/StringRule.rb +0 -81
data/lib/Renderer.rb
DELETED
@@ -1,39 +0,0 @@
|
|
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
|
-
file = File.read(File.join(@path, "web", "gitignore.txt"))
|
32
|
-
File.open(File.join(@output_path, ".gitignore"), 'w+') do |f|
|
33
|
-
f.write file
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|
37
|
-
|
38
|
-
|
39
|
-
end
|
data/lib/Rule.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
################################################################################
|
2
|
-
# A pattern that metadata follows.
|
3
|
-
#
|
4
|
-
# @pattern Abstract class
|
5
|
-
#
|
6
|
-
# @hierachy
|
7
|
-
# 1. Aggregator
|
8
|
-
# 2. RuleSet
|
9
|
-
# 3. Rule <- YOU ARE HERE
|
10
|
-
#
|
11
|
-
# @see lib/rules for rules.
|
12
|
-
################################################################################
|
13
|
-
|
14
|
-
class Rule
|
15
|
-
|
16
|
-
attr_reader :type
|
17
|
-
|
18
|
-
##
|
19
|
-
# Each rule trains on metadata to determine its boundaries.
|
20
|
-
#
|
21
|
-
# @param meta [Meta]
|
22
|
-
##
|
23
|
-
def train(meta)
|
24
|
-
end
|
25
|
-
|
26
|
-
##
|
27
|
-
# Each rule validates a value with its boundaries.
|
28
|
-
#
|
29
|
-
# @param value [Dynamic]
|
30
|
-
# @return [Boolean] Whether the value passes or fails.
|
31
|
-
##
|
32
|
-
def test(value)
|
33
|
-
end
|
34
|
-
|
35
|
-
##
|
36
|
-
# Each rule provides results.
|
37
|
-
#
|
38
|
-
# @return [Hash]
|
39
|
-
##
|
40
|
-
def result()
|
41
|
-
{}
|
42
|
-
end
|
43
|
-
|
44
|
-
##
|
45
|
-
# Each rule provides a random example that matches the rule's boundaries.
|
46
|
-
#
|
47
|
-
# @return [Dynamic] A random value.
|
48
|
-
##
|
49
|
-
def random()
|
50
|
-
end
|
51
|
-
|
52
|
-
end
|
data/lib/RuleSet.rb
DELETED
@@ -1,109 +0,0 @@
|
|
1
|
-
################################################################################
|
2
|
-
# A collection of rules that validate metadata.
|
3
|
-
#
|
4
|
-
# @patterns
|
5
|
-
# - Dependency Injection
|
6
|
-
# - Builder
|
7
|
-
#
|
8
|
-
# @hierachy
|
9
|
-
# 1. Aggregator
|
10
|
-
# 2. RuleSet <- YOU ARE HERE
|
11
|
-
# 3. Rule
|
12
|
-
################################################################################
|
13
|
-
|
14
|
-
require 'set'
|
15
|
-
require 'MetaBuilder'
|
16
|
-
require_relative './meta/NullMeta.rb'
|
17
|
-
|
18
|
-
class RuleSet
|
19
|
-
|
20
|
-
attr_accessor :rules
|
21
|
-
|
22
|
-
##
|
23
|
-
# @param meta_map [Hash] The rules to apply to each data type.
|
24
|
-
##
|
25
|
-
def initialize(meta_map)
|
26
|
-
|
27
|
-
# The rules that apply to meta types.
|
28
|
-
@meta_map = meta_map
|
29
|
-
|
30
|
-
# The types of meta this rule set applies to.
|
31
|
-
# Rules are only validated on their supported meta type.
|
32
|
-
@meta_types = Set.new()
|
33
|
-
|
34
|
-
@rules = {}
|
35
|
-
|
36
|
-
end
|
37
|
-
|
38
|
-
##
|
39
|
-
# Train rule set on metadata.
|
40
|
-
#
|
41
|
-
# @param meta [Hash] The metadata to train on.
|
42
|
-
##
|
43
|
-
def train(meta)
|
44
|
-
|
45
|
-
# Track supported meta types.
|
46
|
-
meta_type = meta[:type]
|
47
|
-
@meta_types << meta_type
|
48
|
-
|
49
|
-
# Get rule types for this meta type.
|
50
|
-
if @meta_map.key? meta_type
|
51
|
-
@meta_map[meta_type].each do |rule_type|
|
52
|
-
|
53
|
-
# Ensure rule exists.
|
54
|
-
if @rules[rule_type].nil?
|
55
|
-
@rules[rule_type] = rule_type.new()
|
56
|
-
end
|
57
|
-
|
58
|
-
# Train rule.
|
59
|
-
@rules[rule_type].train(meta)
|
60
|
-
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
end
|
65
|
-
|
66
|
-
##
|
67
|
-
# @param value [Dynamic]
|
68
|
-
##
|
69
|
-
def test(value)
|
70
|
-
|
71
|
-
result = true
|
72
|
-
meta_type = MetaBuilder.data_type_to_meta_type(value)
|
73
|
-
|
74
|
-
# Fail if value's meta type not testable by rule set.
|
75
|
-
unless @meta_types.include? meta_type
|
76
|
-
return false
|
77
|
-
end
|
78
|
-
|
79
|
-
@rules.each do |klass, rule|
|
80
|
-
if (rule.type == meta_type)
|
81
|
-
unless rule.test(value)
|
82
|
-
result = false
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
return result
|
88
|
-
|
89
|
-
end
|
90
|
-
|
91
|
-
##
|
92
|
-
# Get the results of the rules.
|
93
|
-
#
|
94
|
-
# @return [Array] The rules.
|
95
|
-
##
|
96
|
-
def result()
|
97
|
-
|
98
|
-
rules = {}
|
99
|
-
|
100
|
-
@rules.each do |key, rule|
|
101
|
-
rules[rule.class] = rule.result()
|
102
|
-
end
|
103
|
-
|
104
|
-
return rules
|
105
|
-
|
106
|
-
end
|
107
|
-
|
108
|
-
|
109
|
-
end
|
data/lib/meta/ArrayMeta.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
require 'Meta'
|
2
|
-
|
3
|
-
class ArrayMeta < Meta
|
4
|
-
|
5
|
-
def initialize()
|
6
|
-
|
7
|
-
@type = :array
|
8
|
-
@min = nil
|
9
|
-
@max = nil
|
10
|
-
@length = nil
|
11
|
-
|
12
|
-
end
|
13
|
-
|
14
|
-
##
|
15
|
-
# @param value [Array]
|
16
|
-
##
|
17
|
-
def load(value)
|
18
|
-
|
19
|
-
@min = value.min()
|
20
|
-
@max = value.max()
|
21
|
-
@length = value.length()
|
22
|
-
|
23
|
-
end
|
24
|
-
|
25
|
-
def serialize()
|
26
|
-
{
|
27
|
-
:type => @type,
|
28
|
-
:max => @max,
|
29
|
-
:min => @min,
|
30
|
-
:length => @length
|
31
|
-
}
|
32
|
-
end
|
33
|
-
|
34
|
-
end
|
data/lib/meta/BooleanMeta.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'Meta'
|
2
|
-
|
3
|
-
class BooleanMeta < Meta
|
4
|
-
|
5
|
-
def initialize()
|
6
|
-
|
7
|
-
@type = :bool
|
8
|
-
@value = nil
|
9
|
-
|
10
|
-
end
|
11
|
-
|
12
|
-
##
|
13
|
-
# @param value [Boolean]
|
14
|
-
##
|
15
|
-
def load(value)
|
16
|
-
@value = value.to_s
|
17
|
-
end
|
18
|
-
|
19
|
-
def serialize()
|
20
|
-
{
|
21
|
-
:type => @type,
|
22
|
-
:value => @value
|
23
|
-
}
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
data/lib/meta/FloatMeta.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'Meta'
|
2
|
-
|
3
|
-
class FloatMeta < Meta
|
4
|
-
|
5
|
-
def initialize()
|
6
|
-
|
7
|
-
@type = :float
|
8
|
-
@value = nil
|
9
|
-
|
10
|
-
end
|
11
|
-
|
12
|
-
##
|
13
|
-
# @param value [Float]
|
14
|
-
##
|
15
|
-
def load(value)
|
16
|
-
@value = value
|
17
|
-
end
|
18
|
-
|
19
|
-
def serialize()
|
20
|
-
{
|
21
|
-
:type => @type,
|
22
|
-
:value => @value
|
23
|
-
}
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
data/lib/meta/IntegerMeta.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'Meta'
|
2
|
-
|
3
|
-
class IntegerMeta < Meta
|
4
|
-
|
5
|
-
def initialize()
|
6
|
-
|
7
|
-
@type = :int
|
8
|
-
@value = nil
|
9
|
-
|
10
|
-
end
|
11
|
-
|
12
|
-
##
|
13
|
-
# @param value [Integer]
|
14
|
-
##
|
15
|
-
def load(value)
|
16
|
-
@value = value
|
17
|
-
end
|
18
|
-
|
19
|
-
def serialize()
|
20
|
-
{
|
21
|
-
:type => @type,
|
22
|
-
:value => @value
|
23
|
-
}
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
data/lib/meta/StringMeta.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'Meta'
|
2
|
-
|
3
|
-
class StringMeta < Meta
|
4
|
-
|
5
|
-
def initialize()
|
6
|
-
|
7
|
-
@type = :string
|
8
|
-
@length = nil
|
9
|
-
|
10
|
-
end
|
11
|
-
|
12
|
-
##
|
13
|
-
# @param value [String]
|
14
|
-
##
|
15
|
-
def load(value)
|
16
|
-
@length = value.length
|
17
|
-
end
|
18
|
-
|
19
|
-
def serialize()
|
20
|
-
{
|
21
|
-
:type => @type,
|
22
|
-
:length => @length
|
23
|
-
}
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
data/lib/rules/ArrayRule.rb
DELETED
@@ -1,88 +0,0 @@
|
|
1
|
-
require 'Rule'
|
2
|
-
|
3
|
-
class ArrayRule < Rule
|
4
|
-
|
5
|
-
def initialize()
|
6
|
-
|
7
|
-
@type = :array
|
8
|
-
@min = nil
|
9
|
-
@max = nil
|
10
|
-
@min_length = nil
|
11
|
-
@max_length = nil
|
12
|
-
|
13
|
-
end
|
14
|
-
|
15
|
-
##
|
16
|
-
# @param meta [ArrayMeta]
|
17
|
-
##
|
18
|
-
def train(meta)
|
19
|
-
|
20
|
-
# Min value.
|
21
|
-
if @min.nil?
|
22
|
-
@min = meta[:min]
|
23
|
-
else
|
24
|
-
@min = meta[:min] if meta[:min] < @min
|
25
|
-
end
|
26
|
-
|
27
|
-
# Max value.
|
28
|
-
if @max.nil?
|
29
|
-
@max = meta[:max]
|
30
|
-
else
|
31
|
-
@max = meta[:max] if meta[:max] > @max
|
32
|
-
end
|
33
|
-
|
34
|
-
# Min length.
|
35
|
-
if @min_length.nil?
|
36
|
-
@min_length = meta[:length]
|
37
|
-
else
|
38
|
-
@min_length = meta[:length] if meta[:length] < @min_length
|
39
|
-
end
|
40
|
-
|
41
|
-
# Max length.
|
42
|
-
if @max_length.nil?
|
43
|
-
@max_length = meta[:length]
|
44
|
-
else
|
45
|
-
@max_length = meta[:length] if meta[:length] > @max_length
|
46
|
-
end
|
47
|
-
|
48
|
-
end
|
49
|
-
|
50
|
-
##
|
51
|
-
# @param value [Array]
|
52
|
-
##
|
53
|
-
def test(value)
|
54
|
-
|
55
|
-
# Min/max value.
|
56
|
-
return false if value.min() < @min
|
57
|
-
return false if value.max() > @max
|
58
|
-
|
59
|
-
# Min/max length.
|
60
|
-
return false if value.length < @min_length
|
61
|
-
return false if value.length > @max_length
|
62
|
-
|
63
|
-
true
|
64
|
-
end
|
65
|
-
|
66
|
-
def result()
|
67
|
-
{
|
68
|
-
:type => @type,
|
69
|
-
:min => @min,
|
70
|
-
:max => @max,
|
71
|
-
:min_length => @min_length,
|
72
|
-
:max_length => @max_length
|
73
|
-
}
|
74
|
-
end
|
75
|
-
|
76
|
-
def random()
|
77
|
-
|
78
|
-
array = Array.new(rand(@min_length..@max_length))
|
79
|
-
|
80
|
-
array.each_with_index do |item, index|
|
81
|
-
array[index] = rand(@min..@max)
|
82
|
-
end
|
83
|
-
|
84
|
-
return array
|
85
|
-
|
86
|
-
end
|
87
|
-
|
88
|
-
end
|
data/lib/rules/BooleanRule.rb
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
require 'set'
|
2
|
-
require 'Rule'
|
3
|
-
|
4
|
-
class BooleanRule < Rule
|
5
|
-
|
6
|
-
def initialize()
|
7
|
-
|
8
|
-
@type = :bool
|
9
|
-
@booleans = Set.new()
|
10
|
-
|
11
|
-
end
|
12
|
-
|
13
|
-
##
|
14
|
-
# @param meta [BooleanMeta]
|
15
|
-
##
|
16
|
-
def train(meta)
|
17
|
-
|
18
|
-
value = meta[:value]
|
19
|
-
|
20
|
-
unless value.nil?
|
21
|
-
@booleans << value
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
|
26
|
-
##
|
27
|
-
# @param value [Boolean]
|
28
|
-
##
|
29
|
-
def test(value)
|
30
|
-
|
31
|
-
# Booleans are stored as strings.
|
32
|
-
@booleans.include? value.to_s
|
33
|
-
|
34
|
-
end
|
35
|
-
|
36
|
-
def result()
|
37
|
-
{
|
38
|
-
:type => @type,
|
39
|
-
:booleans => @booleans
|
40
|
-
}
|
41
|
-
end
|
42
|
-
|
43
|
-
def random()
|
44
|
-
@booleans.to_a.sample
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|