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.
- checksums.yaml +7 -0
- data/lib/reflekt.rb +108 -0
- metadata +43 -0
checksums.yaml
ADDED
@@ -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
|
data/lib/reflekt.rb
ADDED
@@ -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: []
|