reflekt 0.1.0

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 (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/reflekt.rb +108 -0
  3. metadata +43 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: a89b5337a81d488c544ebb0d99d776ab3023f247170ca3921e6b3bd7e95d434c
4
+ data.tar.gz: 318edd93d1a77f78ff65de68510146ecbae84975b09da0e07d2ac4ee64176e15
5
+ SHA512:
6
+ metadata.gz: 05ff6c5822257819b093ce9625aad2b85fbe676673cef28a17e4d6cc47b0e2cba323ccf0c72b3ac6bc96320efa811f71681cf9c8ee6f2ba132535c9a3d5d646e
7
+ data.tar.gz: 4fa5958b8766c9604e636ec180cf2b83bfd2cfc5423681b96f1bc01aaa944aae13da319b9ec4514b6be1a94ed590f64761f84b88d85484cc05593dcd543d6c27
@@ -0,0 +1,108 @@
1
+ require 'set'
2
+
3
+ ################################################################################
4
+ # REFLEKT
5
+ #
6
+ # Must be defined before the class it's included in.
7
+ #
8
+ # class ExampleClass
9
+ # prepend Reflekt
10
+ ################################################################################
11
+
12
+ module Reflekt
13
+
14
+ @@clone_count = 5
15
+
16
+ def initialize(*args)
17
+
18
+ @reflekt_forked = false
19
+ @reflekt_clones = []
20
+
21
+ # Override methods.
22
+ self.class.instance_methods(false).each do |method|
23
+ self.define_singleton_method(method) do |*args|
24
+
25
+ # When method called in flow.
26
+ if @reflekt_forked
27
+ unless self.class.deflekted?(method)
28
+ # Reflekt on method.
29
+ @reflekt_clones.each do |clone|
30
+ reflekt_action(clone, method, *args)
31
+ end
32
+ end
33
+ end
34
+
35
+ # Continue method flow.
36
+ super *args
37
+ end
38
+
39
+ end
40
+
41
+ # Continue contructor flow.
42
+ super
43
+
44
+ # Create forks.
45
+ reflekt_fork()
46
+
47
+ end
48
+
49
+ def reflekt_fork()
50
+
51
+ @@clone_count.times do |clone|
52
+ @reflekt_clones << self.clone
53
+ end
54
+
55
+ @reflekt_forked = true
56
+
57
+ end
58
+
59
+ def reflekt_action(clone, method, *args)
60
+
61
+ # Create new arguments.
62
+ new_args = []
63
+ args.each do |arg|
64
+ case arg
65
+ when Integer
66
+ new_args << rand(9999)
67
+ else
68
+ new_args << arg
69
+ end
70
+ end
71
+
72
+ # Action method with new arguments.
73
+ begin
74
+ clone.send(method, *new_args)
75
+ rescue StandardError => error
76
+ p error
77
+ else
78
+ puts "Success."
79
+ end
80
+
81
+ end
82
+
83
+ # Prepend Klass to the instance's singleton class.
84
+ def self.prepended(base)
85
+ base.singleton_class.prepend(Klass)
86
+ end
87
+
88
+ module Klass
89
+
90
+ @@deflekted_methods = Set.new
91
+
92
+ ##
93
+ # Don't reflekt every method.
94
+ #
95
+ # method - A symbol representing the method name.
96
+ ##
97
+ def deflekt(method)
98
+ @@deflekted_methods.add(method)
99
+ end
100
+
101
+ def deflekted?(method)
102
+ return true if @@deflekted_methods.include?(method)
103
+ false
104
+ end
105
+
106
+ end
107
+
108
+ end
metadata ADDED
@@ -0,0 +1,43 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: reflekt
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Maedi Prichard
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-07-18 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Reflection-driven development using reflection testing.
14
+ email: maediprichard@gmailcom
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/reflekt.rb
20
+ homepage: https://github.com/maedi/reflekt
21
+ licenses:
22
+ - MPL-2.0
23
+ metadata: {}
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ requirements: []
39
+ rubygems_version: 3.0.2
40
+ signing_key:
41
+ specification_version: 4
42
+ summary: Reflection-driven development.
43
+ test_files: []