rspectacles 0.4.1 → 0.4.2
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 +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +58 -0
- data/Gemfile.lock +24 -23
- data/README.md +3 -2
- data/lib/rspectacles/app.rb +2 -1
- data/lib/rspectacles/app/public/js/chart.js +99 -65
- data/lib/rspectacles/app/public/js/details.js +23 -23
- data/lib/rspectacles/app/public/js/pathtree.js +18 -13
- data/lib/rspectacles/config.rb +17 -7
- data/lib/rspectacles/formatter/base.rb +6 -6
- data/lib/rspectacles/version.rb +1 -1
- data/rspectacles.gemspec +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: aa7286ee49e8bbd98e4386f61059ce122f6c1a58
|
|
4
|
+
data.tar.gz: c91fad3bc985b8c43da189eeb810a9587bd3c98a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8510bb32c183c873eb1c84af450690fb859ac2cf1100406b1bbd584191f609bd22a898ec82fc38677bee124c7e4020752857713e1ad10d754a330fc0c47f9456
|
|
7
|
+
data.tar.gz: ac178ca48ba412643baefda727698eac42b099ca677ca3b1b92b38ddffb931ebf4ced7573ffaeb312dead17a9b1b6eefca4ba2d63d8388e9938f79951fd58f28
|
data/.gitignore
CHANGED
data/.rubocop.yml
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
AllCops:
|
|
2
|
+
Exclude:
|
|
3
|
+
- db/schema.rb
|
|
4
|
+
- db/migrate/*
|
|
5
|
+
|
|
6
|
+
Documentation:
|
|
7
|
+
Enabled: false
|
|
8
|
+
|
|
9
|
+
LineLength:
|
|
10
|
+
Max: 120
|
|
11
|
+
|
|
12
|
+
MethodLength:
|
|
13
|
+
Max: 15
|
|
14
|
+
|
|
15
|
+
ClassLength:
|
|
16
|
+
Max: 500
|
|
17
|
+
|
|
18
|
+
SpaceBeforeFirstArg:
|
|
19
|
+
Enabled: false
|
|
20
|
+
|
|
21
|
+
AssignmentInCondition:
|
|
22
|
+
Enabled: false
|
|
23
|
+
|
|
24
|
+
SingleLineBlockParams:
|
|
25
|
+
Enabled: false
|
|
26
|
+
|
|
27
|
+
Lambda:
|
|
28
|
+
Enabled: false
|
|
29
|
+
|
|
30
|
+
NumericLiterals:
|
|
31
|
+
Enabled: false
|
|
32
|
+
|
|
33
|
+
LambdaCall:
|
|
34
|
+
Enabled: false
|
|
35
|
+
|
|
36
|
+
AndOr:
|
|
37
|
+
Enabled: false
|
|
38
|
+
|
|
39
|
+
MultilineOperationIndentation:
|
|
40
|
+
Enabled: false
|
|
41
|
+
|
|
42
|
+
AbcSize:
|
|
43
|
+
Max: 20
|
|
44
|
+
|
|
45
|
+
Style/MultilineMethodCallIndentation:
|
|
46
|
+
EnforcedStyle: indented_relative_to_receiver
|
|
47
|
+
|
|
48
|
+
Bundler/OrderedGems:
|
|
49
|
+
Enabled: false
|
|
50
|
+
|
|
51
|
+
Metrics/BlockLength:
|
|
52
|
+
Enabled: false
|
|
53
|
+
|
|
54
|
+
Style/EmptyMethod:
|
|
55
|
+
Enabled: false
|
|
56
|
+
|
|
57
|
+
Style/FrozenStringLiteralComment:
|
|
58
|
+
Enabled: false
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
rspectacles (0.4.
|
|
4
|
+
rspectacles (0.4.2)
|
|
5
5
|
httparty
|
|
6
6
|
pg
|
|
7
7
|
puma
|
|
@@ -12,38 +12,39 @@ PATH
|
|
|
12
12
|
GEM
|
|
13
13
|
remote: https://rubygems.org/
|
|
14
14
|
specs:
|
|
15
|
-
activemodel (5.
|
|
16
|
-
activesupport (= 5.
|
|
17
|
-
activerecord (5.
|
|
18
|
-
activemodel (= 5.
|
|
19
|
-
activesupport (= 5.
|
|
20
|
-
arel (
|
|
21
|
-
activesupport (5.
|
|
15
|
+
activemodel (5.2.0)
|
|
16
|
+
activesupport (= 5.2.0)
|
|
17
|
+
activerecord (5.2.0)
|
|
18
|
+
activemodel (= 5.2.0)
|
|
19
|
+
activesupport (= 5.2.0)
|
|
20
|
+
arel (>= 9.0)
|
|
21
|
+
activesupport (5.2.0)
|
|
22
22
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
23
|
-
i18n (
|
|
23
|
+
i18n (>= 0.7, < 2)
|
|
24
24
|
minitest (~> 5.1)
|
|
25
25
|
tzinfo (~> 1.1)
|
|
26
|
-
arel (
|
|
26
|
+
arel (9.0.0)
|
|
27
27
|
coderay (1.1.1)
|
|
28
28
|
concurrent-ruby (1.0.5)
|
|
29
29
|
diff-lcs (1.1.3)
|
|
30
|
-
httparty (0.
|
|
30
|
+
httparty (0.16.2)
|
|
31
31
|
multi_xml (>= 0.5.2)
|
|
32
|
-
i18n (0.
|
|
32
|
+
i18n (1.0.1)
|
|
33
|
+
concurrent-ruby (~> 1.0)
|
|
33
34
|
method_source (0.8.2)
|
|
34
|
-
minitest (5.
|
|
35
|
+
minitest (5.11.3)
|
|
35
36
|
multi_xml (0.6.0)
|
|
36
|
-
mustermann (1.0.
|
|
37
|
-
pg (0.
|
|
37
|
+
mustermann (1.0.2)
|
|
38
|
+
pg (1.0.0)
|
|
38
39
|
pry (0.10.4)
|
|
39
40
|
coderay (~> 1.1.0)
|
|
40
41
|
method_source (~> 0.8.1)
|
|
41
42
|
slop (~> 3.4)
|
|
42
|
-
puma (3.
|
|
43
|
-
rack (2.0.
|
|
44
|
-
rack-protection (2.0.
|
|
43
|
+
puma (3.11.4)
|
|
44
|
+
rack (2.0.4)
|
|
45
|
+
rack-protection (2.0.1)
|
|
45
46
|
rack
|
|
46
|
-
rake (12.
|
|
47
|
+
rake (12.3.1)
|
|
47
48
|
rspec (2.12.0)
|
|
48
49
|
rspec-core (~> 2.12.0)
|
|
49
50
|
rspec-expectations (~> 2.12.0)
|
|
@@ -52,10 +53,10 @@ GEM
|
|
|
52
53
|
rspec-expectations (2.12.1)
|
|
53
54
|
diff-lcs (~> 1.1.3)
|
|
54
55
|
rspec-mocks (2.12.2)
|
|
55
|
-
sinatra (2.0.
|
|
56
|
+
sinatra (2.0.1)
|
|
56
57
|
mustermann (~> 1.0)
|
|
57
58
|
rack (~> 2.0)
|
|
58
|
-
rack-protection (= 2.0.
|
|
59
|
+
rack-protection (= 2.0.1)
|
|
59
60
|
tilt (~> 2.0)
|
|
60
61
|
sinatra-activerecord (2.0.13)
|
|
61
62
|
activerecord (>= 3.2)
|
|
@@ -63,7 +64,7 @@ GEM
|
|
|
63
64
|
slop (3.6.0)
|
|
64
65
|
thread_safe (0.3.6)
|
|
65
66
|
tilt (2.0.8)
|
|
66
|
-
tzinfo (1.2.
|
|
67
|
+
tzinfo (1.2.5)
|
|
67
68
|
thread_safe (~> 0.1)
|
|
68
69
|
|
|
69
70
|
PLATFORMS
|
|
@@ -75,4 +76,4 @@ DEPENDENCIES
|
|
|
75
76
|
rspectacles!
|
|
76
77
|
|
|
77
78
|
BUNDLED WITH
|
|
78
|
-
1.
|
|
79
|
+
1.16.0
|
data/README.md
CHANGED
|
@@ -40,15 +40,16 @@ sizes by changing the `batch_size` in config settings.
|
|
|
40
40
|
## Storage
|
|
41
41
|
|
|
42
42
|
RSpectacles depends on ActiveRecord for persistence. You
|
|
43
|
-
can quickly get an instance up and running by
|
|
43
|
+
can quickly get an instance up and running by setting the `DATABASE_URL` environment variable,
|
|
44
44
|
and running the standard rake commands:
|
|
45
45
|
|
|
46
|
+
export DATABASE_URL=postgres://...
|
|
46
47
|
rake db:create
|
|
47
48
|
rake db:migrate
|
|
48
49
|
|
|
49
50
|
Start the server and connect to it in your browser:
|
|
50
51
|
|
|
51
|
-
|
|
52
|
+
rackup
|
|
52
53
|
|
|
53
54
|
Then run your specs and watch the magic happen!
|
|
54
55
|
|
data/lib/rspectacles/app.rb
CHANGED
|
@@ -49,7 +49,8 @@ module RSpectacles
|
|
|
49
49
|
post '/examples' do
|
|
50
50
|
payload = JSON.parse(request.body.read)
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
Run.where(rspec_run: payload['examples'].first['rspec_run']).first_or_create
|
|
53
|
+
|
|
53
54
|
data = payload['examples'].map do |args|
|
|
54
55
|
{ rspec_run: args['rspec_run'], duration: args['duration'].to_f, properties: args }
|
|
55
56
|
end
|
|
@@ -1,40 +1,62 @@
|
|
|
1
|
+
// @format
|
|
1
2
|
/*global define: true d3: true */
|
|
2
|
-
define(['jquery', 'pathtree', 'details'
|
|
3
|
+
define(['jquery', 'pathtree', 'details'], function(
|
|
4
|
+
$,
|
|
5
|
+
PathTree,
|
|
6
|
+
details,
|
|
7
|
+
) {
|
|
3
8
|
'use strict';
|
|
4
9
|
|
|
5
|
-
|
|
6
10
|
function chart(options) {
|
|
7
|
-
var svg,
|
|
8
|
-
,
|
|
9
|
-
,
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
11
|
+
var svg,
|
|
12
|
+
partition,
|
|
13
|
+
arc,
|
|
14
|
+
me,
|
|
15
|
+
tmpl = $('#template').html(),
|
|
16
|
+
render;
|
|
17
|
+
|
|
18
|
+
options = $.extend(
|
|
19
|
+
{
|
|
20
|
+
width: 960,
|
|
21
|
+
height: 700,
|
|
22
|
+
color: d3.scale.category20c(),
|
|
23
|
+
isCount: false,
|
|
24
|
+
},
|
|
25
|
+
options,
|
|
26
|
+
);
|
|
18
27
|
|
|
19
28
|
options.radius = Math.min(options.width, options.height) / 2;
|
|
20
29
|
|
|
21
|
-
svg = d3
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
30
|
+
svg = d3
|
|
31
|
+
.select('body')
|
|
32
|
+
.append('svg')
|
|
33
|
+
.attr('width', options.width)
|
|
34
|
+
.attr('height', options.height)
|
|
35
|
+
.append('g')
|
|
36
|
+
.attr(
|
|
37
|
+
'transform',
|
|
38
|
+
'translate(' + options.width / 2 + ',' + options.height * 0.52 + ')',
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
partition = d3.layout
|
|
42
|
+
.partition()
|
|
43
|
+
.sort(null)
|
|
44
|
+
.size([2 * Math.PI, options.radius * options.radius]);
|
|
45
|
+
|
|
46
|
+
arc = d3.svg
|
|
47
|
+
.arc()
|
|
48
|
+
.startAngle(function(d) {
|
|
49
|
+
return d.x;
|
|
50
|
+
})
|
|
51
|
+
.endAngle(function(d) {
|
|
52
|
+
return d.x + d.dx;
|
|
53
|
+
})
|
|
54
|
+
.innerRadius(function(d) {
|
|
55
|
+
return Math.sqrt(d.y);
|
|
56
|
+
})
|
|
57
|
+
.outerRadius(function(d) {
|
|
58
|
+
return Math.sqrt(d.y + d.dy);
|
|
59
|
+
});
|
|
38
60
|
|
|
39
61
|
// Stash the old values for transition.
|
|
40
62
|
function stash(d) {
|
|
@@ -54,18 +76,23 @@ define(['jquery', 'pathtree', 'details', 'mustache'], function ($, PathTree, det
|
|
|
54
76
|
}
|
|
55
77
|
|
|
56
78
|
function secToMin(time) {
|
|
57
|
-
var pad = function
|
|
58
|
-
|
|
59
|
-
,
|
|
60
|
-
|
|
79
|
+
var pad = function(val) {
|
|
80
|
+
return ('00' + val).slice(-2);
|
|
81
|
+
},
|
|
82
|
+
min = parseInt(time / 60),
|
|
83
|
+
sec = parseInt(time % 60);
|
|
61
84
|
|
|
62
85
|
return pad(min) + ':' + pad(sec);
|
|
63
86
|
}
|
|
64
87
|
|
|
65
88
|
function getValue() {
|
|
66
|
-
return options.isCount
|
|
67
|
-
|
|
68
|
-
|
|
89
|
+
return options.isCount
|
|
90
|
+
? function() {
|
|
91
|
+
return 1;
|
|
92
|
+
}
|
|
93
|
+
: function(d) {
|
|
94
|
+
return d.size;
|
|
95
|
+
};
|
|
69
96
|
}
|
|
70
97
|
|
|
71
98
|
function getColor(d) {
|
|
@@ -78,19 +105,25 @@ define(['jquery', 'pathtree', 'details', 'mustache'], function ($, PathTree, det
|
|
|
78
105
|
|
|
79
106
|
function onUpdate(path) {
|
|
80
107
|
path
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
108
|
+
.attr('d', arc)
|
|
109
|
+
.each(stash)
|
|
110
|
+
.style('fill', getColor)
|
|
111
|
+
.call(details.update);
|
|
85
112
|
}
|
|
86
113
|
|
|
87
114
|
function onEnter(path) {
|
|
88
|
-
path
|
|
89
|
-
.
|
|
90
|
-
.
|
|
91
|
-
.
|
|
92
|
-
|
|
93
|
-
|
|
115
|
+
path
|
|
116
|
+
.enter()
|
|
117
|
+
.append('path')
|
|
118
|
+
.attr('display', function(d) {
|
|
119
|
+
return d.depth ? null : 'none';
|
|
120
|
+
})
|
|
121
|
+
.attr('d', arc)
|
|
122
|
+
.style('stroke', function(d) {
|
|
123
|
+
return 'rgba(255,255,255,0.3)';
|
|
124
|
+
})
|
|
125
|
+
.style('fill', getColor)
|
|
126
|
+
.style('fill-rule', 'evenodd')
|
|
94
127
|
.each(stash)
|
|
95
128
|
.on('mouseover', details.update)
|
|
96
129
|
.call(details.update);
|
|
@@ -101,47 +134,48 @@ define(['jquery', 'pathtree', 'details', 'mustache'], function ($, PathTree, det
|
|
|
101
134
|
}
|
|
102
135
|
|
|
103
136
|
function onFormChange(path) {
|
|
104
|
-
d3.selectAll(
|
|
137
|
+
d3.selectAll('input').on('change', function change() {
|
|
105
138
|
options.isCount = this.value === 'count';
|
|
106
139
|
|
|
107
140
|
path
|
|
108
|
-
|
|
141
|
+
.data(partition.value(getValue()).nodes)
|
|
109
142
|
.transition()
|
|
110
|
-
|
|
111
|
-
|
|
143
|
+
.duration(1500)
|
|
144
|
+
.attrTween('d', arcTween);
|
|
112
145
|
});
|
|
113
146
|
}
|
|
114
147
|
|
|
115
|
-
render = function
|
|
116
|
-
var path = svg
|
|
117
|
-
|
|
148
|
+
render = function() {
|
|
149
|
+
var path = svg
|
|
150
|
+
.datum(me.tree.nodes)
|
|
151
|
+
.selectAll('path')
|
|
152
|
+
.data(partition.value(getValue()).nodes);
|
|
118
153
|
|
|
119
154
|
onUpdate(path);
|
|
120
155
|
onEnter(path);
|
|
121
156
|
onExit(path);
|
|
122
157
|
onFormChange(path);
|
|
123
158
|
|
|
124
|
-
render = function
|
|
125
|
-
path.datum(me.tree.nodes)
|
|
126
|
-
.data(partition.value(getValue()).nodes);
|
|
159
|
+
render = function() {
|
|
160
|
+
path.datum(me.tree.nodes).data(partition.value(getValue()).nodes);
|
|
127
161
|
};
|
|
128
162
|
};
|
|
129
163
|
|
|
130
|
-
return me = {
|
|
131
|
-
tree: new PathTree()
|
|
164
|
+
return (me = {
|
|
165
|
+
tree: new PathTree(),
|
|
132
166
|
|
|
133
|
-
|
|
167
|
+
render: render,
|
|
134
168
|
|
|
135
|
-
|
|
169
|
+
reset: function() {
|
|
136
170
|
me.tree = new PathTree();
|
|
137
171
|
me.render();
|
|
138
|
-
}
|
|
172
|
+
},
|
|
139
173
|
|
|
140
|
-
|
|
174
|
+
push: function(data) {
|
|
141
175
|
me.tree.add(data);
|
|
142
176
|
me.render();
|
|
143
|
-
}
|
|
144
|
-
};
|
|
177
|
+
},
|
|
178
|
+
});
|
|
145
179
|
}
|
|
146
180
|
|
|
147
181
|
return chart;
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
define(['jquery', 'mustache'], function
|
|
2
|
-
var me
|
|
3
|
-
,
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
;
|
|
1
|
+
define(['jquery', 'mustache'], function($, Mustache) {
|
|
2
|
+
var me,
|
|
3
|
+
defaults,
|
|
4
|
+
current = {},
|
|
5
|
+
tmpl = $('#template').html(),
|
|
6
|
+
isCount = false;
|
|
8
7
|
|
|
9
|
-
defaults = function
|
|
8
|
+
defaults = function() {
|
|
10
9
|
return {
|
|
11
|
-
name: ''
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
10
|
+
name: '',
|
|
11
|
+
line_number: '',
|
|
12
|
+
status: '',
|
|
13
|
+
duration: '',
|
|
14
|
+
time_or_count: isCount ? 'Examples' : 'ms',
|
|
15
|
+
minutes: '',
|
|
16
|
+
value: null
|
|
18
17
|
};
|
|
19
18
|
};
|
|
20
19
|
|
|
21
20
|
function secToMin(time) {
|
|
22
|
-
var pad = function
|
|
23
|
-
|
|
24
|
-
,
|
|
25
|
-
|
|
21
|
+
var pad = function(val) {
|
|
22
|
+
return ('00' + val).slice(-2);
|
|
23
|
+
},
|
|
24
|
+
min = parseInt(time / 60),
|
|
25
|
+
sec = parseInt(time % 60);
|
|
26
26
|
|
|
27
27
|
return pad(min) + ':' + pad(sec);
|
|
28
28
|
}
|
|
@@ -39,13 +39,13 @@ define(['jquery', 'mustache'], function ($, Mustache) {
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
return {
|
|
42
|
-
update: function
|
|
42
|
+
update: function(d) {
|
|
43
43
|
current = $.extend({}, defaults(), d);
|
|
44
44
|
render();
|
|
45
|
-
}
|
|
45
|
+
},
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
isCount: function(value) {
|
|
48
48
|
isCount = value;
|
|
49
|
-
}
|
|
49
|
+
},
|
|
50
50
|
};
|
|
51
51
|
});
|
|
@@ -1,29 +1,32 @@
|
|
|
1
|
+
// @format
|
|
1
2
|
/*global define: true */
|
|
2
|
-
define(['jquery'], function
|
|
3
|
+
define(['jquery'], function($) {
|
|
3
4
|
'use strict';
|
|
4
5
|
|
|
5
6
|
function createNodes(path, data, node) {
|
|
6
|
-
var nextNode
|
|
7
|
-
;
|
|
7
|
+
var nextNode;
|
|
8
8
|
|
|
9
9
|
node.children = node.children || [];
|
|
10
10
|
|
|
11
11
|
if (path.length === 0) {
|
|
12
|
-
nextNode = $.extend(
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
nextNode = $.extend(
|
|
13
|
+
{
|
|
14
|
+
size: data.duration,
|
|
15
|
+
name: data.full_description,
|
|
16
|
+
},
|
|
17
|
+
data,
|
|
18
|
+
);
|
|
16
19
|
|
|
17
20
|
node.children.push(nextNode);
|
|
18
21
|
return;
|
|
19
22
|
}
|
|
20
23
|
|
|
21
|
-
nextNode = node.children.filter(function
|
|
24
|
+
nextNode = node.children.filter(function(child) {
|
|
22
25
|
return child.name === path[0];
|
|
23
26
|
})[0];
|
|
24
27
|
|
|
25
28
|
if (!nextNode) {
|
|
26
|
-
nextNode = {
|
|
29
|
+
nextNode = {name: path[0]};
|
|
27
30
|
node.children.push(nextNode);
|
|
28
31
|
}
|
|
29
32
|
|
|
@@ -36,15 +39,17 @@ define(['jquery'], function ($) {
|
|
|
36
39
|
data && this.add(data);
|
|
37
40
|
}
|
|
38
41
|
|
|
39
|
-
PathTree.prototype.add = function
|
|
42
|
+
PathTree.prototype.add = function(data) {
|
|
40
43
|
var that = this;
|
|
41
44
|
!$.isArray(data) && (data = [data]);
|
|
42
45
|
|
|
43
|
-
data.forEach(function
|
|
46
|
+
data.forEach(function(node) {
|
|
44
47
|
var path = node.file_path.split('/');
|
|
45
48
|
|
|
46
|
-
['.'].forEach(function
|
|
47
|
-
if (path[0] === v) {
|
|
49
|
+
['.'].forEach(function(v) {
|
|
50
|
+
if (path[0] === v) {
|
|
51
|
+
path.shift();
|
|
52
|
+
}
|
|
48
53
|
});
|
|
49
54
|
|
|
50
55
|
createNodes(path, node, that.nodes);
|
data/lib/rspectacles/config.rb
CHANGED
|
@@ -6,7 +6,7 @@ require 'securerandom'
|
|
|
6
6
|
module RSpectacles
|
|
7
7
|
class Config
|
|
8
8
|
def initialize
|
|
9
|
-
@opts = OpenStruct.new defaults.merge(yml
|
|
9
|
+
@opts = OpenStruct.new defaults.merge(yml)
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
def defaults
|
|
@@ -18,8 +18,12 @@ module RSpectacles
|
|
|
18
18
|
}
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
+
def timeout
|
|
22
|
+
@opts[:timeout]
|
|
23
|
+
end
|
|
24
|
+
|
|
21
25
|
def method_missing(method, *args)
|
|
22
|
-
@opts.
|
|
26
|
+
@opts.public_send method, *args
|
|
23
27
|
end
|
|
24
28
|
|
|
25
29
|
private
|
|
@@ -33,11 +37,17 @@ module RSpectacles
|
|
|
33
37
|
end
|
|
34
38
|
|
|
35
39
|
def yml
|
|
36
|
-
if yml_exists?
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
res = if yml_exists?
|
|
41
|
+
@yml ||= ::YAML.safe_load(::ERB.new(IO.read(yml_path)).result)
|
|
42
|
+
else
|
|
43
|
+
{}
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
sanitize(res)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def sanitize(hash)
|
|
50
|
+
hash.each_with_object({}) { |(key, value), memo| memo[key.to_sym] = value }
|
|
41
51
|
end
|
|
42
52
|
end
|
|
43
53
|
|
|
@@ -4,11 +4,11 @@ module RSpectacles
|
|
|
4
4
|
module Formatter
|
|
5
5
|
class Base
|
|
6
6
|
RSpec::Core::Formatters.register self,
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
:example_passed,
|
|
8
|
+
:example_failed,
|
|
9
|
+
:start,
|
|
10
|
+
:stop,
|
|
11
|
+
:message
|
|
12
12
|
|
|
13
13
|
attr_reader :output
|
|
14
14
|
|
|
@@ -19,7 +19,7 @@ module RSpectacles
|
|
|
19
19
|
@logger ||= RSpectacles::Adapter::Logger.new(test_run_key: current_run_key)
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
-
def message(
|
|
22
|
+
def message(_notification)
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
def start(_)
|
data/lib/rspectacles/version.rb
CHANGED
data/rspectacles.gemspec
CHANGED
|
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
|
|
|
7
7
|
s.version = RSpectacles::VERSION
|
|
8
8
|
s.authors = ['Michael Wheeler']
|
|
9
9
|
s.email = ['mwheeler@g2crowd.com']
|
|
10
|
-
s.homepage = 'https://github.com/
|
|
10
|
+
s.homepage = 'https://github.com/g2crowd/rspectacles'
|
|
11
11
|
s.summary = %q{Visualize rspec test running in the browser}
|
|
12
12
|
s.description = %q{Visualize rspec test running in the browser}
|
|
13
13
|
s.license = 'MIT'
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rspectacles
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.4.
|
|
4
|
+
version: 0.4.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Michael Wheeler
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2018-04-20 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rspec
|
|
@@ -132,6 +132,7 @@ extra_rdoc_files: []
|
|
|
132
132
|
files:
|
|
133
133
|
- ".gitignore"
|
|
134
134
|
- ".jshintrc"
|
|
135
|
+
- ".rubocop.yml"
|
|
135
136
|
- Gemfile
|
|
136
137
|
- Gemfile.lock
|
|
137
138
|
- LICENSE
|
|
@@ -180,7 +181,7 @@ files:
|
|
|
180
181
|
- spec/javascripts/test.html
|
|
181
182
|
- spec/javascripts/tests/pathtree_spec.js
|
|
182
183
|
- viz.png
|
|
183
|
-
homepage: https://github.com/
|
|
184
|
+
homepage: https://github.com/g2crowd/rspectacles
|
|
184
185
|
licenses:
|
|
185
186
|
- MIT
|
|
186
187
|
metadata: {}
|