reflekt 0.5.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '0428affa101de6d5e5dd908634242bde3e5ea82af55750024d2e222bca3e7d89'
4
- data.tar.gz: 30e1caab27785f8fa0ca04bf376b2ef13eb493d31f7b2b0f2cf3ec592795f340
3
+ metadata.gz: d9282a0295c04e95cec339bfa6563a517ac12d964f6310320056669ad52b86e1
4
+ data.tar.gz: 8ad30ad01a3c021d60eb645e56ddf7aea528860ca30588bb9269dac0a5cc74d8
5
5
  SHA512:
6
- metadata.gz: e6cdcfc4a1ab977bc610ce3af7ee789a99deae778bd903dca9220b442363e2231c289f0d0fbedf77256d88495a9f1c7b69ff4ac7e8f63ec832de4215864058bc
7
- data.tar.gz: dff0de3808213dae276287d5750be30418947c89a4faf3f7cbe0540c18e399377d6a5a977f744e9f5da4335919232692b7ca2dea89f6dc5860a0d54432224d78
6
+ metadata.gz: e7be8cc94f17f83c4c5131862c0ffa424c7976f4baae38d535e2a45f77318d47543493b0259dc0a7a62ad7481a380615c09030060d29ef0462c4ab6bfa6d5cb2
7
+ data.tar.gz: 7fcee25ce29344e2181a8db3f3020c11ab4668560651869e81cfa5e059aa31ae35ce45c06892a19946b8509f2d592e0dc7d171ede27b1d6b5f45fa1dbff3744c
@@ -20,37 +20,53 @@ module Reflekt
20
20
  @reflekt_forked = false
21
21
  @reflekt_clones = []
22
22
 
23
+ # Limit the amount of clones that can be created per instance.
24
+ # A method called 30,000 times doesn't need that many reflections.
25
+ @reflekt_limit = 5
26
+ @reflekt_count = 0
27
+
23
28
  # Override methods.
24
29
  self.class.instance_methods(false).each do |method|
25
30
  self.define_singleton_method(method) do |*args|
26
31
 
27
32
  # When method called in flow.
28
33
  if @reflekt_forked
29
- unless self.class.deflekted?(method)
30
-
31
- # Reflekt on method.
32
- @reflekt_clones.each do |clone|
33
- reflekt_action(clone, method, *args)
34
- end
35
34
 
36
- # Save results.
37
- @@reflekt_db.write()
38
-
39
- # Render results.
40
- @@reflekt_json = File.read("#{@@reflekt_output_path}/db.json")
41
- template = File.read("#{@@reflekt_path}/web/template.html.erb")
42
- rendered = ERB.new(template).result(binding)
43
- File.open("#{@@reflekt_output_path}/index.html", 'w+') do |f|
44
- f.write rendered
45
- end
35
+ if @reflekt_count < @reflekt_limit
36
+ unless self.class.deflekted?(method)
37
+
38
+ # Reflekt on method.
39
+ @reflekt_clones.each do |clone|
40
+ reflekt_action(clone, method, *args)
41
+ end
42
+
43
+ # Save results.
44
+ @@reflekt_db.write()
45
+
46
+ # Render results.
47
+ @@reflekt_json = File.read("#{@@reflekt_output_path}/db.json")
48
+ template = File.read("#{@@reflekt_path}/web/template.html.erb")
49
+ rendered = ERB.new(template).result(binding)
50
+ File.open("#{@@reflekt_output_path}/index.html", 'w+') do |f|
51
+ f.write rendered
52
+ end
53
+
54
+ # Add JS.
55
+ alpinejs = File.read("#{@@reflekt_path}/web/alpine.js")
56
+ File.open("#{@@reflekt_output_path}/alpine.js", 'w+') do |f|
57
+ f.write alpinejs
58
+ end
59
+
60
+ # Add CSS.
61
+ stylesheet = File.read("#{@@reflekt_path}/web/style.css")
62
+ File.open("#{@@reflekt_output_path}/style.css", 'w+') do |f|
63
+ f.write stylesheet
64
+ end
46
65
 
47
- # Add libraries.
48
- alpinejs = File.read("#{@@reflekt_path}/web/alpine.js")
49
- File.open("#{@@reflekt_output_path}/alpine.js", 'w+') do |f|
50
- f.write alpinejs
51
66
  end
52
-
67
+ @reflekt_count = @reflekt_count + 1
53
68
  end
69
+
54
70
  end
55
71
 
56
72
  # Continue method flow.
@@ -82,7 +98,7 @@ module Reflekt
82
98
  class_name = clone.class.to_s
83
99
  method_name = method.to_s
84
100
 
85
- # Create new arguments.
101
+ # Create new arguments that are deviations on inputted type.
86
102
  new_args = []
87
103
  args.each do |arg|
88
104
  case arg
@@ -101,13 +117,13 @@ module Reflekt
101
117
  reflection = {
102
118
  "time" => Time.now.to_i,
103
119
  }
104
- # When error.
120
+ # When fail.
105
121
  rescue StandardError => error
106
122
  reflection["status"] = "error"
107
123
  reflection["error"] = error
108
- # When success.
124
+ # When pass.
109
125
  else
110
- reflection["status"] = "success"
126
+ reflection["status"] = "pass"
111
127
  end
112
128
 
113
129
  # Save reflection.
@@ -118,15 +134,15 @@ module Reflekt
118
134
 
119
135
  private
120
136
 
121
- # Prepend Klass to the instance's singleton class.
122
137
  def self.prepended(base)
123
- base.singleton_class.prepend(Klass)
138
+ # Prepend class methods to the instance's singleton class.
139
+ base.singleton_class.prepend(SingletonClassMethods)
124
140
 
125
- @@reflekt_setup ||= reflekt_setup_klass
141
+ @@reflekt_setup ||= reflekt_setup_class
126
142
  end
127
143
 
128
- # Setup Klass.
129
- def self.reflekt_setup_klass()
144
+ # Setup class.
145
+ def self.reflekt_setup_class()
130
146
 
131
147
  # Receive configuration from host application.
132
148
  $ENV ||= {}
@@ -153,7 +169,7 @@ module Reflekt
153
169
  return true
154
170
  end
155
171
 
156
- module Klass
172
+ module SingletonClassMethods
157
173
 
158
174
  @@deflekted_methods = Set.new
159
175
 
@@ -171,6 +187,10 @@ module Reflekt
171
187
  false
172
188
  end
173
189
 
190
+ def reflekt_limit(amount)
191
+ @reflekt_limit = amount
192
+ end
193
+
174
194
  end
175
195
 
176
196
  end
@@ -0,0 +1,76 @@
1
+ body {
2
+ padding: 0.5rem;
3
+ background: #C9D2E6;
4
+ font-family: 'Roboto', sans-serif;
5
+ }
6
+
7
+ .container {
8
+ margin: 0 auto;
9
+ max-width: 800px;
10
+ padding: 2rem;
11
+ background: white;
12
+ }
13
+
14
+ #header {
15
+
16
+ }
17
+
18
+ #logo {
19
+ display: block;
20
+ margin: 0 auto;
21
+ max-width: 100px;
22
+ }
23
+
24
+ ul.panels,
25
+ ul.reflections {
26
+ padding-left: 0;
27
+ }
28
+
29
+ li.panel {
30
+ list-style: none;
31
+ padding: 1rem;
32
+ border: 5px solid #dadcdc;
33
+ }
34
+
35
+ /* Reflection. */
36
+ .reflection {
37
+ display: flex;
38
+ align-items: center;
39
+ flex-direction: row;
40
+ color: white;
41
+ background: #A9B6D2;
42
+ }
43
+ .reflection.class {
44
+ padding: 2rem;
45
+ margin-bottom: 1rem;
46
+ }
47
+ .reflection.class h2 {
48
+ margin: 0;
49
+ }
50
+
51
+ .reflection.method {
52
+ padding: 2rem;
53
+ margin-left: 1rem;
54
+ margin-bottom: 1rem;
55
+ }
56
+
57
+ /* Stats. */
58
+ .stats {
59
+ margin-left: auto;
60
+ }
61
+ .stat {
62
+ color: #efefef;
63
+ font-size: 3.5rem;
64
+ font-family: 'Merriweather', serif;
65
+ }
66
+ .method .stat {
67
+ font-size: 2.5rem;
68
+ }
69
+
70
+ /* State. */
71
+ .reflection.pass {
72
+ background: #008C32;
73
+ }
74
+ .reflection.fail {
75
+ background: #D04700;
76
+ }
@@ -6,8 +6,10 @@
6
6
  <meta name="description" content="">
7
7
  <meta name="author" content="">
8
8
  <meta name="viewport" content="width=device-width, initial-scale=1">
9
- <link rel="stylesheet" href="">
9
+ <link rel="stylesheet" href="style.css">
10
10
  <link rel="shortcut icon" href="">
11
+ <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;700&display=swap" rel="stylesheet">
12
+ <link href="https://fonts.googleapis.com/css2?family=Merriweather&display=swap" rel="stylesheet">
11
13
  </head>
12
14
  <body>
13
15
 
@@ -16,6 +18,7 @@
16
18
  function getReflections() {
17
19
 
18
20
  var reflections = JSON.parse(<%= @@reflekt_json %>);
21
+ console.log(reflections);
19
22
  var results = {};
20
23
 
21
24
  if ('reflekt' in reflections) {
@@ -44,23 +47,37 @@
44
47
  return obj;
45
48
  }, {});
46
49
 
50
+ var pass_rate = (pass_count['pass'] / method.length) * 100;
47
51
  results[class_id]['methods'][method_id] = {
48
52
  'stats': {
49
- 'pass_rate': (pass_count['success'] / method.length) * 100,
53
+ 'pass_rate': pass_rate,
50
54
  'test_count': method.length,
51
- 'pass_count': pass_count['success']
55
+ 'pass_count': pass_count['pass']
52
56
  }
53
57
  };
58
+ if (pass_rate == 100) {
59
+ results[class_id]['methods'][method_id]['status'] = 'pass';
60
+ }
61
+ else if (pass_rate < 100) {
62
+ results[class_id]['methods'][method_id]['status'] = 'fail';
63
+ }
54
64
 
55
65
  // Class pass rate.
56
66
  results[class_id]['stats']['test_count'] += method.length;
57
- results[class_id]['stats']['pass_count'] += pass_count['success'];
67
+ results[class_id]['stats']['pass_count'] += pass_count['pass'];
58
68
 
59
69
  }
60
70
 
61
71
  // Class pass rate.
62
72
  var class_stats = results[class_id]['stats'];
63
- class_stats['pass_rate'] = (class_stats['pass_count'] / class_stats['test_count']) * 100;
73
+ var pass_rate = (class_stats['pass_count'] / class_stats['test_count']) * 100;
74
+ class_stats['pass_rate'] = pass_rate;
75
+ if (pass_rate == 100) {
76
+ results[class_id]['status'] = 'pass';
77
+ }
78
+ else if (pass_rate < 100) {
79
+ results[class_id]['status'] = 'fail';
80
+ }
64
81
  }
65
82
 
66
83
  return { refs: results };
@@ -68,23 +85,41 @@
68
85
 
69
86
  </script>
70
87
 
71
- <div x-data="getReflections()">
88
+ <div class="container" x-data="getReflections()">
72
89
 
73
- <ul>
90
+ <div id="header">
91
+ <svg id="logo" enable-background="new 0 0 500 500" viewBox="0 0 500 500" xmlns="http://www.w3.org/2000/svg">
92
+ <path d="m307.5 80.5h-115l-57.5 205h230z" fill="#0047d0"/>
93
+ <path d="m178 76.5-53.1-44-117.9 139 116 112z" fill="#d04800"/>
94
+ <path d="m190.4 467.5h115l57.5-168h-229z" fill="#0047d0" opacity=".7"/>
95
+ <path d="m177 467.5-81-85-92-197 115 113z" fill="#d04800" opacity=".7"/>
96
+ <g fill="#008c33"><path d="m322 76.5 53.1-44 118 139-116 112z"/><path d="m320 467.5 84-85 92-197-117 113z" opacity=".7"/></g>
97
+ </svg>
98
+ </div>
74
99
 
100
+ <ul class="panels">
75
101
  <template x-for="[class_id, klass] in Object.entries(getReflections()['refs'])" :key="class_id">
76
- <li>
77
- <div x-text="class_id"></div>
78
- <div x-text="klass.stats.pass_rate"></div>
79
102
 
80
- <div>
103
+ <li class="panel">
104
+
105
+ <div class="reflection class" x-bind:class="` ${ klass.status } `">
106
+ <h2 x-text="` ${class_id}() `"></h2>
107
+ <div class="stats">
108
+ <div class="stat" x-text="` ${klass.stats.pass_rate}% `"></div>
109
+ </div>
110
+ </div>
111
+
112
+ <ul class="reflections methods">
81
113
  <template x-for="[method_id, method] in Object.entries(klass['methods'])" :key="method_id">
82
- <div class="method">
83
- <div x-text="method_id"></div>
84
- <div x-text="method.stats.pass_rate"></div>
85
- </div>
114
+ <li class="reflection method" x-bind:class="` ${ method.status } `">
115
+ <h3 x-text="` ${method_id}() `"></h3>
116
+ <div class="stats">
117
+ <div class="stat" x-text="` ${method.stats.pass_rate}% `"></div>
118
+ </div>
119
+ </li>
86
120
  </template>
87
- </div>
121
+ </ul>
122
+
88
123
  </li>
89
124
  </template>
90
125
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reflekt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maedi Prichard
@@ -32,6 +32,7 @@ extra_rdoc_files: []
32
32
  files:
33
33
  - lib/reflekt.rb
34
34
  - lib/web/alpine.js
35
+ - lib/web/style.css
35
36
  - lib/web/template.html.erb
36
37
  homepage: https://github.com/maedi/reflekt
37
38
  licenses: