reflekt 1.0.4 → 1.0.9

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 (36) 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 -0
  7. data/lib/{Control.rb → control.rb} +16 -12
  8. data/lib/{Reflection.rb → experiment.rb} +16 -90
  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/object_meta.rb +35 -0
  16. data/lib/meta/{StringMeta.rb → string_meta.rb} +3 -1
  17. data/lib/{MetaBuilder.rb → meta_builder.rb} +21 -5
  18. data/lib/reflection.rb +123 -0
  19. data/lib/{Reflekt.rb → reflekt.rb} +42 -42
  20. data/lib/{Renderer.rb → renderer.rb} +2 -0
  21. data/lib/{Rule.rb → rule.rb} +3 -1
  22. data/lib/{RuleSet.rb → rule_set.rb} +5 -3
  23. data/lib/{Aggregator.rb → rule_set_aggregator.rb} +29 -18
  24. data/lib/rules/{ArrayRule.rb → array_rule.rb} +3 -1
  25. data/lib/rules/{BooleanRule.rb → boolean_rule.rb} +3 -1
  26. data/lib/rules/{FloatRule.rb → float_rule.rb} +3 -1
  27. data/lib/rules/{IntegerRule.rb → integer_rule.rb} +3 -1
  28. data/lib/rules/{NullRule.rb → null_rule.rb} +5 -6
  29. data/lib/rules/object_rule.rb +42 -0
  30. data/lib/rules/{StringRule.rb → string_rule.rb} +3 -1
  31. data/lib/web/bundle.js +2 -2
  32. data/lib/web/package-lock.json +3 -3
  33. data/lib/web/package.json +1 -1
  34. data/lib/web/server.js +5 -5
  35. metadata +32 -29
  36. data/lib/ShadowStack.rb +0 -44
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 862841ab79ef50d5b096398525e0f75014b0204184329f8a6b5e010a70927f4f
4
- data.tar.gz: 37797b16ae059518507a1e0ec7a0f1e0678cf78da58f3cbd8fafd27bb349d78b
3
+ metadata.gz: 8ed0b66e3e9110822e6d14ba1a77fc5627b40edea4223d4252fd30ea4853047c
4
+ data.tar.gz: 39990e22a2f9ddac9382a8b960b10ead0b81598db3bf86eac4a1c499182e065b
5
5
  SHA512:
6
- metadata.gz: ae2247c88853aaba496bba94ab7edfa91dfce613ab42f5e33abe4ab43409c2fddb9eb0888ed71668cc49b860dc323e2a4875ee01b82119ba2576aeb925342b09
7
- data.tar.gz: 5f30074666b11dbfc6af40a466e15142c4fd2489d3aa445c6d534c78cf620889768d7934be2077ccdb2690a1ebc860c5770ad9c28a6f31c583b815b9f5a4e8f7
6
+ metadata.gz: 48497c5c451bde6860039fb9570f77a4bd0a9fd4b889d497d9c06079a9e852f3f426e42f01c5480c6bf621f4ba90179e9f95022fcd5e223f3b1da6718936e871
7
+ data.tar.gz: 4e1f58483092d4f7f626878303060c0527ff0838ab244f4abc9e3f5b5772af19c95a5a5e86e1a2d6361027efa80882ead7dafee544698bf895555a7086a63d97
@@ -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
@@ -27,6 +28,7 @@ class Config
27
28
  :int => [IntegerRule],
28
29
  :float => [FloatRule],
29
30
  :null => [NullRule],
31
+ :object => [ObjectRule],
30
32
  :string => [StringRule]
31
33
  }
32
34
 
@@ -40,3 +42,4 @@ class Config
40
42
  end
41
43
 
42
44
  end
45
+ 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
@@ -2,15 +2,14 @@
2
2
  # A snapshot of random data.
3
3
  #
4
4
  # @note
5
- # A reflection's random value is within the bounds of aggregated control rule sets
6
- # as well as as the arg type being inputted into the current control reflection.
5
+ # A reflection's random values are generated from aggregated control rule sets.
7
6
  #
8
7
  # @nomenclature
9
8
  # args, inputs/output and meta represent different stages of a value.
10
9
  #
11
10
  # @hierachy
12
- # 1. Execution
13
- # 2. Reflection <- YOU ARE HERE
11
+ # 1. Action
12
+ # 2. Experiment <- YOU ARE HERE
14
13
  # 3. Meta
15
14
  #
16
15
  # @status
@@ -19,52 +18,16 @@
19
18
  # - :error [Symbol] The control reflection produces a system error.
20
19
  ################################################################################
21
20
 
22
- require 'Clone'
23
- require 'MetaBuilder'
21
+ require_relative 'reflection'
22
+ require_relative 'meta_builder'
24
23
 
25
- class Reflection
26
-
27
- attr_reader :status
28
-
29
- ##
30
- # Create a Reflection.
31
- #
32
- # @param execution [Execution] The Execution that created this Reflection.
33
- # @param number [Integer] Multiple Reflections can be created per Execution.
34
- # @param aggregator [Aggregator] The aggregated RuleSet for this class/method.
35
- ##
36
- def initialize(execution, number, aggregator)
37
-
38
- @execution = execution
39
- @unique_id = execution.unique_id + number
40
- @number = number
41
-
42
- # Dependency.
43
- @aggregator = aggregator
44
-
45
- # Caller.
46
- @klass = execution.klass
47
- @method = execution.method
48
-
49
- # Metadata.
50
- @inputs = nil
51
- @output = nil
52
-
53
- # Clone the execution's calling object.
54
- # TODO: Abstract away into Clone class.
55
- @clone = execution.caller_object.clone
56
-
57
- # Result.
58
- @status = :pass
59
- @time = Time.now.to_i
60
- @message = nil
61
-
62
- end
24
+ module Reflekt
25
+ class Experiment < Reflection
63
26
 
64
27
  ##
65
28
  # Reflect on a method.
66
29
  #
67
- # Creates a shadow execution.
30
+ # Create a shadow action.
68
31
  # @param *args [Dynamic] The method's arguments.
69
32
  ##
70
33
  def reflect(*args)
@@ -73,6 +36,11 @@ class Reflection
73
36
  input_rule_sets = @aggregator.get_input_rule_sets(@klass, @method)
74
37
  output_rule_set = @aggregator.get_output_rule_set(@klass, @method)
75
38
 
39
+ # Fail when no trained rule sets.
40
+ if input_rule_sets.nil?
41
+ @status = :fail
42
+ end
43
+
76
44
  # When arguments exist.
77
45
  unless args.size == 0
78
46
 
@@ -82,12 +50,12 @@ class Reflection
82
50
  end
83
51
 
84
52
  # Create metadata for each argument.
85
- # TODO: Create metadata for other inputs such as properties on the instance.
53
+ # TODO: Create metadata for other inputs such as instance variables.
86
54
  @inputs = MetaBuilder.create_many(args)
87
55
 
88
56
  end
89
57
 
90
- # Action method with new/old arguments.
58
+ # Action method with random arguments.
91
59
  begin
92
60
 
93
61
  # Run reflection.
@@ -138,47 +106,5 @@ class Reflection
138
106
 
139
107
  end
140
108
 
141
- ##
142
- # Get the results of the reflection.
143
- #
144
- # @return [Hash] Reflection metadata.
145
- ##
146
- def serialize()
147
-
148
- # The ID of the first execution in the ShadowStack.
149
- base_id = nil
150
- unless @execution.base == nil
151
- base_id = @execution.base.unique_id
152
- end
153
-
154
- # Build reflection.
155
- reflection = {
156
- :base_id => base_id,
157
- :exe_id => @execution.unique_id,
158
- :ref_id => @unique_id,
159
- :ref_num => @number,
160
- :time => @time,
161
- :class => @klass,
162
- :method => @method,
163
- :status => @status,
164
- :message => @message,
165
- :inputs => nil,
166
- :output => nil,
167
- }
168
-
169
- unless @inputs.nil?
170
- reflection[:inputs] = []
171
- @inputs.each do |meta|
172
- reflection[:inputs] << meta.serialize()
173
- end
174
- end
175
-
176
- unless @output.nil?
177
- reflection[:output] = @output.serialize()
178
- end
179
-
180
- return reflection
181
-
182
- end
183
-
109
+ end
184
110
  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