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.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/lib/accessor.rb +45 -0
  3. data/lib/action.rb +127 -0
  4. data/lib/action_stack.rb +44 -0
  5. data/lib/{Clone.rb → clone.rb} +11 -11
  6. data/lib/config.rb +48 -0
  7. data/lib/control.rb +81 -0
  8. data/lib/experiment.rb +99 -0
  9. data/lib/meta.rb +75 -0
  10. data/lib/meta/array_meta.rb +32 -0
  11. data/lib/meta/boolean_meta.rb +26 -0
  12. data/lib/meta/float_meta.rb +26 -0
  13. data/lib/meta/integer_meta.rb +26 -0
  14. data/lib/meta/{NullMeta.rb → null_meta.rb} +21 -19
  15. data/lib/meta/object_meta.rb +35 -0
  16. data/lib/meta/string_meta.rb +26 -0
  17. data/lib/meta_builder.rb +100 -0
  18. data/lib/reflection.rb +123 -0
  19. data/lib/reflekt.rb +277 -0
  20. data/lib/renderer.rb +38 -0
  21. data/lib/rule.rb +54 -0
  22. data/lib/rule_set.rb +110 -0
  23. data/lib/rule_set_aggregator.rb +260 -0
  24. data/lib/rules/array_rule.rb +94 -0
  25. data/lib/rules/boolean_rule.rb +43 -0
  26. data/lib/rules/float_rule.rb +55 -0
  27. data/lib/rules/integer_rule.rb +55 -0
  28. data/lib/rules/null_rule.rb +35 -0
  29. data/lib/rules/object_rule.rb +42 -0
  30. data/lib/rules/string_rule.rb +75 -0
  31. data/lib/web/index.html +3 -4
  32. metadata +46 -29
  33. data/lib/Accessor.rb +0 -37
  34. data/lib/Action.rb +0 -88
  35. data/lib/ActionStack.rb +0 -44
  36. data/lib/Aggregator.rb +0 -260
  37. data/lib/Config.rb +0 -42
  38. data/lib/Control.rb +0 -83
  39. data/lib/Meta.rb +0 -71
  40. data/lib/MetaBuilder.rb +0 -84
  41. data/lib/Reflection.rb +0 -195
  42. data/lib/Reflekt.rb +0 -243
  43. data/lib/Renderer.rb +0 -39
  44. data/lib/Rule.rb +0 -52
  45. data/lib/RuleSet.rb +0 -109
  46. data/lib/meta/ArrayMeta.rb +0 -34
  47. data/lib/meta/BooleanMeta.rb +0 -26
  48. data/lib/meta/FloatMeta.rb +0 -26
  49. data/lib/meta/IntegerMeta.rb +0 -26
  50. data/lib/meta/StringMeta.rb +0 -26
  51. data/lib/rules/ArrayRule.rb +0 -88
  52. data/lib/rules/BooleanRule.rb +0 -47
  53. data/lib/rules/FloatRule.rb +0 -57
  54. data/lib/rules/IntegerRule.rb +0 -57
  55. data/lib/rules/NullRule.rb +0 -33
  56. 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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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