reflekt 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []