reflekt 1.0.3 → 1.0.8

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 (35) hide show
  1. checksums.yaml +4 -4
  2. data/lib/{Accessor.rb → accessor.rb} +2 -0
  3. data/lib/{Execution.rb → action.rb} +14 -12
  4. data/lib/action_stack.rb +46 -0
  5. data/lib/{Clone.rb → clone.rb} +6 -4
  6. data/lib/{Config.rb → config.rb} +3 -1
  7. data/lib/{Control.rb → control.rb} +16 -12
  8. data/lib/experiment.rb +83 -0
  9. data/lib/{Meta.rb → meta.rb} +7 -5
  10. data/lib/meta/{ArrayMeta.rb → array_meta.rb} +3 -1
  11. data/lib/meta/{BooleanMeta.rb → boolean_meta.rb} +3 -1
  12. data/lib/meta/{FloatMeta.rb → float_meta.rb} +3 -1
  13. data/lib/meta/{IntegerMeta.rb → integer_meta.rb} +3 -1
  14. data/lib/meta/{NullMeta.rb → null_meta.rb} +4 -2
  15. data/lib/meta/{StringMeta.rb → string_meta.rb} +3 -1
  16. data/lib/{MetaBuilder.rb → meta_builder.rb} +4 -2
  17. data/lib/reflection.rb +150 -0
  18. data/lib/{Reflekt.rb → reflekt.rb} +42 -42
  19. data/lib/{Renderer.rb → renderer.rb} +2 -0
  20. data/lib/{Rule.rb → rule.rb} +3 -1
  21. data/lib/{RuleSet.rb → rule_set.rb} +5 -3
  22. data/lib/{Aggregator.rb → rule_set_aggregator.rb} +29 -18
  23. data/lib/rules/{ArrayRule.rb → array_rule.rb} +3 -1
  24. data/lib/rules/{BooleanRule.rb → boolean_rule.rb} +3 -1
  25. data/lib/rules/{FloatRule.rb → float_rule.rb} +3 -1
  26. data/lib/rules/{IntegerRule.rb → integer_rule.rb} +3 -1
  27. data/lib/rules/{NullRule.rb → null_rule.rb} +5 -6
  28. data/lib/rules/{StringRule.rb → string_rule.rb} +3 -1
  29. data/lib/web/bundle.js +2 -2
  30. data/lib/web/package-lock.json +3 -3
  31. data/lib/web/package.json +1 -1
  32. data/lib/web/server.js +5 -5
  33. metadata +30 -29
  34. data/lib/Reflection.rb +0 -193
  35. data/lib/ShadowStack.rb +0 -44
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d09b97f103669d2806a5c6e32da41e978fecff763c558d5aa8fb0739bf8e984a
4
- data.tar.gz: 5f40bbfaa6444d452a0f91c1371d0d9aa75a5cd7edd5da8e36ac81d7f0c7532d
3
+ metadata.gz: 8fca22a79b9c2f962c5bd4583de7c8f35a27e5a350503aac4888d8072a2e843c
4
+ data.tar.gz: bf44e0c83c0e1e281b1aab9ecc3b86728152941484995167803d81de28e53170
5
5
  SHA512:
6
- metadata.gz: c7198d5f60ee546e1becc9e7e75141705b0f4a01214e70bba2ba597872b2ff7dbd0cd60deb877a18fde3b4c25ba48ce94bede291bd9ddc089c3d195710dd5728
7
- data.tar.gz: 23b79441dfa54881f1a537d259f686b8528f950aa1caac960c43403d7f5f24301a903ba99cc84d7bf1e743f6f6e16001141cff40a8c70139bf55032f38193131
6
+ metadata.gz: 3e59ad6e1e3a7e293d904da162c40478ca34a8b6daf0abefd3a0e0e58e525a249cccfd3d36602b0550925efb048e4df4a500c33865e93ebb7a13d2cbb7fea83a
7
+ data.tar.gz: b5762a194aa4c94849c4e3540cb9e51e2ea1feb779f51a6f4b424aa4c25aec7410137fb0d5a4ca9c1891ee4b350b58e6a7f34b81d4c57fd0f279a31b509f5b1e
@@ -8,6 +8,7 @@
8
8
  # - @@reflekt_skipped_methods on the instance's singleton class
9
9
  ################################################################################
10
10
 
11
+ module Reflekt
11
12
  class Accessor
12
13
 
13
14
  attr_accessor :config
@@ -35,3 +36,4 @@ class Accessor
35
36
  end
36
37
 
37
38
  end
39
+ end
@@ -1,13 +1,14 @@
1
1
  ################################################################################
2
- # A shadow execution.
2
+ # A shadow action.
3
3
  #
4
4
  # @hierachy
5
- # 1. Execution <- YOU ARE HERE
5
+ # 1. Action <- YOU ARE HERE
6
6
  # 2. Reflection
7
7
  # 3. Meta
8
8
  ################################################################################
9
9
 
10
- class Execution
10
+ module Reflekt
11
+ class Action
11
12
 
12
13
  attr_accessor :unique_id
13
14
  attr_accessor :caller_object
@@ -19,17 +20,17 @@ class Execution
19
20
  attr_accessor :parent
20
21
  attr_accessor :child
21
22
  attr_accessor :control
22
- attr_accessor :reflections
23
+ attr_accessor :experiments
23
24
  attr_accessor :is_reflecting
24
25
  attr_accessor :is_base
25
26
 
26
27
  ##
27
- # Create Execution.
28
+ # Create Action.
28
29
  #
29
30
  # @param object [Object] The calling object.
30
31
  # @param method [Symbol] The calling method.
31
- # @param reflect_amount [Integer] The number of reflections to create per execution.
32
- # @param stack [ShadowStack] The shadow execution call stack.
32
+ # @param reflect_amount [Integer] The number of experiments to create per action.
33
+ # @param stack [ActionStack] The shadow action call stack.
33
34
  ##
34
35
  def initialize(caller_object, method, reflect_amount, stack)
35
36
 
@@ -51,7 +52,7 @@ class Execution
51
52
 
52
53
  # Reflections.
53
54
  @control = nil
54
- @reflections = Array.new(reflect_amount)
55
+ @experiments = Array.new(reflect_amount)
55
56
 
56
57
  # State.
57
58
  if @stack.peek() == nil
@@ -64,12 +65,12 @@ class Execution
64
65
 
65
66
  end
66
67
 
67
- def has_empty_reflections?
68
- @reflections.include? nil
68
+ def has_empty_experiments?
69
+ @experiments.include? nil
69
70
  end
70
71
 
71
72
  ##
72
- # Is the Execution currently reflecting methods?
73
+ # Is the Action currently reflecting methods?
73
74
  ##
74
75
  def is_reflecting?
75
76
  @is_reflecting
@@ -79,10 +80,11 @@ class Execution
79
80
  if is_reflecting?
80
81
  return false
81
82
  end
82
- if has_empty_reflections?
83
+ if has_empty_experiments?
83
84
  return false
84
85
  end
85
86
  return true
86
87
  end
87
88
 
88
89
  end
90
+ end
@@ -0,0 +1,46 @@
1
+ ################################################################################
2
+ # Track the actions in a shadow call stack.
3
+ #
4
+ # @pattern Stack
5
+ ################################################################################
6
+
7
+ module Reflekt
8
+ class ActionStack
9
+
10
+ def initialize()
11
+ @bottom = nil
12
+ @top = nil
13
+ end
14
+
15
+ def peek()
16
+ @top
17
+ end
18
+
19
+ def base()
20
+ @bottom
21
+ end
22
+
23
+ ##
24
+ # Place Action at the top of stack.
25
+ #
26
+ # @param action [Action] The action to place.
27
+ # @return [Action] The placed action.
28
+ ##
29
+ def push(action)
30
+
31
+ # Place first action at bottom of stack.
32
+ if @bottom.nil?
33
+ @bottom = action
34
+ # Connect subsequent actions to each other.
35
+ else
36
+ @top.parent = action
37
+ action.child = @top
38
+ end
39
+
40
+ # Place action at top of stack.
41
+ @top = action
42
+
43
+ end
44
+
45
+ end
46
+ end
@@ -7,17 +7,18 @@
7
7
  # on object, not indirectly through clone which results in "undefined method".
8
8
  #
9
9
  # @hierachy
10
- # 1. Execution
10
+ # 1. Action
11
11
  # 2. Reflection
12
12
  # 3. Clone <- YOU ARE HERE
13
13
  ################################################################################
14
14
 
15
+ module Reflekt
15
16
  class Clone
16
17
 
17
- def initialize(execution)
18
+ def initialize(action)
18
19
 
19
- # Clone the execution's calling object.
20
- @caller_object_clone = execution.caller_object.clone
20
+ # Clone the action's calling object.
21
+ @caller_object_clone = action.caller_object.clone
21
22
 
22
23
  # TODO: Clone any other instances that this clone references.
23
24
  # TODO: Replace clone's references to these new instances.
@@ -29,3 +30,4 @@ class Clone
29
30
  end
30
31
 
31
32
  end
33
+ end
@@ -1,3 +1,4 @@
1
+ module Reflekt
1
2
  class Config
2
3
 
3
4
  attr_accessor :enabled
@@ -31,7 +32,7 @@ class Config
31
32
  }
32
33
 
33
34
  # An absolute path to the directory that contains the output directory.
34
- # Defaults to current execution path.
35
+ # Defaults to current action path.
35
36
  @output_path = nil
36
37
 
37
38
  # Name of output directory.
@@ -40,3 +41,4 @@ class Config
40
41
  end
41
42
 
42
43
  end
44
+ end
@@ -2,13 +2,13 @@
2
2
  # A shapshot of real data.
3
3
  #
4
4
  # @note
5
- # A control's @number property will always be zero.
5
+ # A control's @number will always be 0.
6
6
  #
7
7
  # @nomenclature
8
8
  # args, inputs/output and meta represent different stages of a value.
9
9
  #
10
10
  # @hierachy
11
- # 1. Execution
11
+ # 1. Action
12
12
  # 2. Control <- YOU ARE HERE
13
13
  # 3. Meta
14
14
  #
@@ -18,43 +18,46 @@
18
18
  # - :error [Symbol] The control reflection produces a system error.
19
19
  ################################################################################
20
20
 
21
- require 'Reflection'
22
- require 'MetaBuilder'
21
+ require_relative 'reflection'
22
+ require_relative 'meta_builder'
23
23
 
24
+ module Reflekt
24
25
  class Control < Reflection
25
26
 
26
27
  ##
27
28
  # Reflect on a method.
28
29
  #
29
- # Creates a shadow execution.
30
+ # Create a shadow action.
30
31
  # @param *args [Dynamic] The method's arguments.
31
32
  ##
32
33
  def reflect(*args)
33
34
 
34
- # Get aggregated rule sets.
35
+ # Get trained rule sets.
35
36
  input_rule_sets = @aggregator.get_input_rule_sets(@klass, @method)
36
37
  output_rule_set = @aggregator.get_output_rule_set(@klass, @method)
37
38
 
39
+ # Fail when no trained rule sets.
40
+ if input_rule_sets.nil?
41
+ @status = :fail
42
+ end
43
+
38
44
  # When arguments exist.
39
45
  unless args.size == 0
40
46
 
41
- # When aggregated rule sets exist.
47
+ # Validate arguments against trained rule sets.
42
48
  unless input_rule_sets.nil?
43
-
44
- # Validate arguments against aggregated rule sets.
45
49
  unless @aggregator.test_inputs(args, input_rule_sets)
46
50
  @status = :fail
47
51
  end
48
-
49
52
  end
50
53
 
51
54
  # Create metadata for each argument.
52
- # TODO: Create metadata for other inputs such as properties on the instance.
55
+ # TODO: Create metadata for other inputs such as instance variables.
53
56
  @inputs = MetaBuilder.create_many(args)
54
57
 
55
58
  end
56
59
 
57
- # Action method with new/old arguments.
60
+ # Action method with real arguments.
58
61
  begin
59
62
 
60
63
  # Run reflection.
@@ -79,3 +82,4 @@ class Control < Reflection
79
82
  end
80
83
 
81
84
  end
85
+ end
@@ -0,0 +1,83 @@
1
+ ################################################################################
2
+ # A snapshot of random data.
3
+ #
4
+ # @note
5
+ # A reflection's random values are generated from aggregated control rule sets.
6
+ #
7
+ # @nomenclature
8
+ # args, inputs/output and meta represent different stages of a value.
9
+ #
10
+ # @hierachy
11
+ # 1. Action
12
+ # 2. Experiment <- YOU ARE HERE
13
+ # 3. Meta
14
+ #
15
+ # @status
16
+ # - :pass [Symbol] The reflection passes the rules.
17
+ # - :fail [Symbol] The reflection fails the rules or produces a system error.
18
+ # - :error [Symbol] The control reflection produces a system error.
19
+ ################################################################################
20
+
21
+ require_relative 'reflection'
22
+ require_relative 'meta_builder'
23
+
24
+ module Reflekt
25
+ class Experiment < Reflection
26
+
27
+ ##
28
+ # Reflect on a method.
29
+ #
30
+ # Create a shadow action.
31
+ # @param *args [Dynamic] The method's arguments.
32
+ ##
33
+ def reflect(*args)
34
+
35
+ # Get aggregated rule sets.
36
+ input_rule_sets = @aggregator.get_input_rule_sets(@klass, @method)
37
+ output_rule_set = @aggregator.get_output_rule_set(@klass, @method)
38
+
39
+ # Fail when no trained rule sets.
40
+ if input_rule_sets.nil?
41
+ @status = :fail
42
+ end
43
+
44
+ # When arguments exist.
45
+ unless args.size == 0
46
+
47
+ # Create random arguments from aggregated rule sets.
48
+ unless input_rule_sets.nil?
49
+ args = randomize(args, input_rule_sets)
50
+ end
51
+
52
+ # Create metadata for each argument.
53
+ # TODO: Create metadata for other inputs such as instance variables.
54
+ @inputs = MetaBuilder.create_many(args)
55
+
56
+ end
57
+
58
+ # Action method with random arguments.
59
+ begin
60
+
61
+ # Run reflection.
62
+ output = @clone.send(@method, *args)
63
+ @output = MetaBuilder.create(output)
64
+
65
+ # Validate output against aggregated control rule sets.
66
+ unless output_rule_set.nil?
67
+ unless @aggregator.test_output(output, output_rule_set)
68
+ @status = :fail
69
+ end
70
+ end
71
+
72
+ # When a system error occurs.
73
+ rescue StandardError => message
74
+
75
+ @status = :fail
76
+ @message = message
77
+
78
+ end
79
+
80
+ end
81
+
82
+ end
83
+ end
@@ -5,18 +5,19 @@
5
5
  # @see lib/meta for each meta.
6
6
  #
7
7
  # @hierachy
8
- # 1. Execution
8
+ # 1. Action
9
9
  # 2. Reflection
10
10
  # 3. Meta <- YOU ARE HERE
11
11
  ################################################################################
12
12
 
13
+ module Reflekt
13
14
  class Meta
14
15
 
15
16
  ##
16
17
  # Each meta defines its type.
17
18
  ##
18
19
  def initialize()
19
- @type = nil
20
+ @type = :null
20
21
  end
21
22
 
22
23
  ##
@@ -28,12 +29,12 @@ class Meta
28
29
  end
29
30
 
30
31
  ##
31
- # Each meta serializes metadata.
32
- #
33
32
  # @return [Hash]
34
33
  ##
35
34
  def serialize()
36
- {}
35
+ {
36
+ :type => @type
37
+ }
37
38
  end
38
39
 
39
40
  ##############################################################################
@@ -69,3 +70,4 @@ class Meta
69
70
  end
70
71
 
71
72
  end
73
+ end
@@ -1,5 +1,6 @@
1
- require 'Meta'
1
+ require_relative '../meta'
2
2
 
3
+ module Reflekt
3
4
  class ArrayMeta < Meta
4
5
 
5
6
  def initialize()
@@ -32,3 +33,4 @@ class ArrayMeta < Meta
32
33
  end
33
34
 
34
35
  end
36
+ end
@@ -1,5 +1,6 @@
1
- require 'Meta'
1
+ require_relative '../meta'
2
2
 
3
+ module Reflekt
3
4
  class BooleanMeta < Meta
4
5
 
5
6
  def initialize()
@@ -24,3 +25,4 @@ class BooleanMeta < Meta
24
25
  end
25
26
 
26
27
  end
28
+ end
@@ -1,5 +1,6 @@
1
- require 'Meta'
1
+ require_relative '../meta'
2
2
 
3
+ module Reflekt
3
4
  class FloatMeta < Meta
4
5
 
5
6
  def initialize()
@@ -24,3 +25,4 @@ class FloatMeta < Meta
24
25
  end
25
26
 
26
27
  end
28
+ end
@@ -1,5 +1,6 @@
1
- require 'Meta'
1
+ require_relative '../meta'
2
2
 
3
+ module Reflekt
3
4
  class IntegerMeta < Meta
4
5
 
5
6
  def initialize()
@@ -24,3 +25,4 @@ class IntegerMeta < Meta
24
25
  end
25
26
 
26
27
  end
28
+ end