similatron 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/assets/Skeleton-2.0.4/css/normalize.css +427 -0
- data/lib/assets/Skeleton-2.0.4/css/skeleton.css +418 -0
- data/lib/assets/report.html.erb +63 -25
- data/lib/similatron.rb +8 -0
- data/lib/similatron/binary_diff_comparison_engine.rb +1 -1
- data/lib/similatron/comparison_engine.rb +8 -6
- data/lib/similatron/diff_comparison_engine.rb +1 -1
- data/lib/similatron/html_report.rb +45 -0
- data/lib/similatron/imagemagick_comparison_engine.rb +2 -4
- data/lib/similatron/pdf_comparison_engine.rb +48 -0
- data/lib/similatron/run.rb +14 -7
- data/lib/similatron/version.rb +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a36400feaf7447c34873cbe4ce83ab5baa82ecc
|
4
|
+
data.tar.gz: d13fe750eca27fe5884702222ee205dd49088141
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e49097c364a0b10649bed06d11c9b410d62c8e2f6252e6784361ed1119fd22e3d2f9a59db59ccbc7c5a6c32e8d7813289d7fa71b4c4579de34b66e24fd3bd1c6
|
7
|
+
data.tar.gz: 0186035c4d803584ebf74b06d81455bfdeb640b4e1259dca171e2f36b509e8694821ca21d575b30405c9e1593bf18d3aca2a4f413f72d96715b054c573f14011
|
@@ -0,0 +1,427 @@
|
|
1
|
+
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
|
2
|
+
|
3
|
+
/**
|
4
|
+
* 1. Set default font family to sans-serif.
|
5
|
+
* 2. Prevent iOS text size adjust after orientation change, without disabling
|
6
|
+
* user zoom.
|
7
|
+
*/
|
8
|
+
|
9
|
+
html {
|
10
|
+
font-family: sans-serif; /* 1 */
|
11
|
+
-ms-text-size-adjust: 100%; /* 2 */
|
12
|
+
-webkit-text-size-adjust: 100%; /* 2 */
|
13
|
+
}
|
14
|
+
|
15
|
+
/**
|
16
|
+
* Remove default margin.
|
17
|
+
*/
|
18
|
+
|
19
|
+
body {
|
20
|
+
margin: 0;
|
21
|
+
}
|
22
|
+
|
23
|
+
/* HTML5 display definitions
|
24
|
+
========================================================================== */
|
25
|
+
|
26
|
+
/**
|
27
|
+
* Correct `block` display not defined for any HTML5 element in IE 8/9.
|
28
|
+
* Correct `block` display not defined for `details` or `summary` in IE 10/11
|
29
|
+
* and Firefox.
|
30
|
+
* Correct `block` display not defined for `main` in IE 11.
|
31
|
+
*/
|
32
|
+
|
33
|
+
article,
|
34
|
+
aside,
|
35
|
+
details,
|
36
|
+
figcaption,
|
37
|
+
figure,
|
38
|
+
footer,
|
39
|
+
header,
|
40
|
+
hgroup,
|
41
|
+
main,
|
42
|
+
menu,
|
43
|
+
nav,
|
44
|
+
section,
|
45
|
+
summary {
|
46
|
+
display: block;
|
47
|
+
}
|
48
|
+
|
49
|
+
/**
|
50
|
+
* 1. Correct `inline-block` display not defined in IE 8/9.
|
51
|
+
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
|
52
|
+
*/
|
53
|
+
|
54
|
+
audio,
|
55
|
+
canvas,
|
56
|
+
progress,
|
57
|
+
video {
|
58
|
+
display: inline-block; /* 1 */
|
59
|
+
vertical-align: baseline; /* 2 */
|
60
|
+
}
|
61
|
+
|
62
|
+
/**
|
63
|
+
* Prevent modern browsers from displaying `audio` without controls.
|
64
|
+
* Remove excess height in iOS 5 devices.
|
65
|
+
*/
|
66
|
+
|
67
|
+
audio:not([controls]) {
|
68
|
+
display: none;
|
69
|
+
height: 0;
|
70
|
+
}
|
71
|
+
|
72
|
+
/**
|
73
|
+
* Address `[hidden]` styling not present in IE 8/9/10.
|
74
|
+
* Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
|
75
|
+
*/
|
76
|
+
|
77
|
+
[hidden],
|
78
|
+
template {
|
79
|
+
display: none;
|
80
|
+
}
|
81
|
+
|
82
|
+
/* Links
|
83
|
+
========================================================================== */
|
84
|
+
|
85
|
+
/**
|
86
|
+
* Remove the gray background color from active links in IE 10.
|
87
|
+
*/
|
88
|
+
|
89
|
+
a {
|
90
|
+
background-color: transparent;
|
91
|
+
}
|
92
|
+
|
93
|
+
/**
|
94
|
+
* Improve readability when focused and also mouse hovered in all browsers.
|
95
|
+
*/
|
96
|
+
|
97
|
+
a:active,
|
98
|
+
a:hover {
|
99
|
+
outline: 0;
|
100
|
+
}
|
101
|
+
|
102
|
+
/* Text-level semantics
|
103
|
+
========================================================================== */
|
104
|
+
|
105
|
+
/**
|
106
|
+
* Address styling not present in IE 8/9/10/11, Safari, and Chrome.
|
107
|
+
*/
|
108
|
+
|
109
|
+
abbr[title] {
|
110
|
+
border-bottom: 1px dotted;
|
111
|
+
}
|
112
|
+
|
113
|
+
/**
|
114
|
+
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
|
115
|
+
*/
|
116
|
+
|
117
|
+
b,
|
118
|
+
strong {
|
119
|
+
font-weight: bold;
|
120
|
+
}
|
121
|
+
|
122
|
+
/**
|
123
|
+
* Address styling not present in Safari and Chrome.
|
124
|
+
*/
|
125
|
+
|
126
|
+
dfn {
|
127
|
+
font-style: italic;
|
128
|
+
}
|
129
|
+
|
130
|
+
/**
|
131
|
+
* Address variable `h1` font-size and margin within `section` and `article`
|
132
|
+
* contexts in Firefox 4+, Safari, and Chrome.
|
133
|
+
*/
|
134
|
+
|
135
|
+
h1 {
|
136
|
+
font-size: 2em;
|
137
|
+
margin: 0.67em 0;
|
138
|
+
}
|
139
|
+
|
140
|
+
/**
|
141
|
+
* Address styling not present in IE 8/9.
|
142
|
+
*/
|
143
|
+
|
144
|
+
mark {
|
145
|
+
background: #ff0;
|
146
|
+
color: #000;
|
147
|
+
}
|
148
|
+
|
149
|
+
/**
|
150
|
+
* Address inconsistent and variable font size in all browsers.
|
151
|
+
*/
|
152
|
+
|
153
|
+
small {
|
154
|
+
font-size: 80%;
|
155
|
+
}
|
156
|
+
|
157
|
+
/**
|
158
|
+
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
|
159
|
+
*/
|
160
|
+
|
161
|
+
sub,
|
162
|
+
sup {
|
163
|
+
font-size: 75%;
|
164
|
+
line-height: 0;
|
165
|
+
position: relative;
|
166
|
+
vertical-align: baseline;
|
167
|
+
}
|
168
|
+
|
169
|
+
sup {
|
170
|
+
top: -0.5em;
|
171
|
+
}
|
172
|
+
|
173
|
+
sub {
|
174
|
+
bottom: -0.25em;
|
175
|
+
}
|
176
|
+
|
177
|
+
/* Embedded content
|
178
|
+
========================================================================== */
|
179
|
+
|
180
|
+
/**
|
181
|
+
* Remove border when inside `a` element in IE 8/9/10.
|
182
|
+
*/
|
183
|
+
|
184
|
+
img {
|
185
|
+
border: 0;
|
186
|
+
}
|
187
|
+
|
188
|
+
/**
|
189
|
+
* Correct overflow not hidden in IE 9/10/11.
|
190
|
+
*/
|
191
|
+
|
192
|
+
svg:not(:root) {
|
193
|
+
overflow: hidden;
|
194
|
+
}
|
195
|
+
|
196
|
+
/* Grouping content
|
197
|
+
========================================================================== */
|
198
|
+
|
199
|
+
/**
|
200
|
+
* Address margin not present in IE 8/9 and Safari.
|
201
|
+
*/
|
202
|
+
|
203
|
+
figure {
|
204
|
+
margin: 1em 40px;
|
205
|
+
}
|
206
|
+
|
207
|
+
/**
|
208
|
+
* Address differences between Firefox and other browsers.
|
209
|
+
*/
|
210
|
+
|
211
|
+
hr {
|
212
|
+
-moz-box-sizing: content-box;
|
213
|
+
box-sizing: content-box;
|
214
|
+
height: 0;
|
215
|
+
}
|
216
|
+
|
217
|
+
/**
|
218
|
+
* Contain overflow in all browsers.
|
219
|
+
*/
|
220
|
+
|
221
|
+
pre {
|
222
|
+
overflow: auto;
|
223
|
+
}
|
224
|
+
|
225
|
+
/**
|
226
|
+
* Address odd `em`-unit font size rendering in all browsers.
|
227
|
+
*/
|
228
|
+
|
229
|
+
code,
|
230
|
+
kbd,
|
231
|
+
pre,
|
232
|
+
samp {
|
233
|
+
font-family: monospace, monospace;
|
234
|
+
font-size: 1em;
|
235
|
+
}
|
236
|
+
|
237
|
+
/* Forms
|
238
|
+
========================================================================== */
|
239
|
+
|
240
|
+
/**
|
241
|
+
* Known limitation: by default, Chrome and Safari on OS X allow very limited
|
242
|
+
* styling of `select`, unless a `border` property is set.
|
243
|
+
*/
|
244
|
+
|
245
|
+
/**
|
246
|
+
* 1. Correct color not being inherited.
|
247
|
+
* Known issue: affects color of disabled elements.
|
248
|
+
* 2. Correct font properties not being inherited.
|
249
|
+
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
|
250
|
+
*/
|
251
|
+
|
252
|
+
button,
|
253
|
+
input,
|
254
|
+
optgroup,
|
255
|
+
select,
|
256
|
+
textarea {
|
257
|
+
color: inherit; /* 1 */
|
258
|
+
font: inherit; /* 2 */
|
259
|
+
margin: 0; /* 3 */
|
260
|
+
}
|
261
|
+
|
262
|
+
/**
|
263
|
+
* Address `overflow` set to `hidden` in IE 8/9/10/11.
|
264
|
+
*/
|
265
|
+
|
266
|
+
button {
|
267
|
+
overflow: visible;
|
268
|
+
}
|
269
|
+
|
270
|
+
/**
|
271
|
+
* Address inconsistent `text-transform` inheritance for `button` and `select`.
|
272
|
+
* All other form control elements do not inherit `text-transform` values.
|
273
|
+
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
|
274
|
+
* Correct `select` style inheritance in Firefox.
|
275
|
+
*/
|
276
|
+
|
277
|
+
button,
|
278
|
+
select {
|
279
|
+
text-transform: none;
|
280
|
+
}
|
281
|
+
|
282
|
+
/**
|
283
|
+
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
284
|
+
* and `video` controls.
|
285
|
+
* 2. Correct inability to style clickable `input` types in iOS.
|
286
|
+
* 3. Improve usability and consistency of cursor style between image-type
|
287
|
+
* `input` and others.
|
288
|
+
*/
|
289
|
+
|
290
|
+
button,
|
291
|
+
html input[type="button"], /* 1 */
|
292
|
+
input[type="reset"],
|
293
|
+
input[type="submit"] {
|
294
|
+
-webkit-appearance: button; /* 2 */
|
295
|
+
cursor: pointer; /* 3 */
|
296
|
+
}
|
297
|
+
|
298
|
+
/**
|
299
|
+
* Re-set default cursor for disabled elements.
|
300
|
+
*/
|
301
|
+
|
302
|
+
button[disabled],
|
303
|
+
html input[disabled] {
|
304
|
+
cursor: default;
|
305
|
+
}
|
306
|
+
|
307
|
+
/**
|
308
|
+
* Remove inner padding and border in Firefox 4+.
|
309
|
+
*/
|
310
|
+
|
311
|
+
button::-moz-focus-inner,
|
312
|
+
input::-moz-focus-inner {
|
313
|
+
border: 0;
|
314
|
+
padding: 0;
|
315
|
+
}
|
316
|
+
|
317
|
+
/**
|
318
|
+
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
|
319
|
+
* the UA stylesheet.
|
320
|
+
*/
|
321
|
+
|
322
|
+
input {
|
323
|
+
line-height: normal;
|
324
|
+
}
|
325
|
+
|
326
|
+
/**
|
327
|
+
* It's recommended that you don't attempt to style these elements.
|
328
|
+
* Firefox's implementation doesn't respect box-sizing, padding, or width.
|
329
|
+
*
|
330
|
+
* 1. Address box sizing set to `content-box` in IE 8/9/10.
|
331
|
+
* 2. Remove excess padding in IE 8/9/10.
|
332
|
+
*/
|
333
|
+
|
334
|
+
input[type="checkbox"],
|
335
|
+
input[type="radio"] {
|
336
|
+
box-sizing: border-box; /* 1 */
|
337
|
+
padding: 0; /* 2 */
|
338
|
+
}
|
339
|
+
|
340
|
+
/**
|
341
|
+
* Fix the cursor style for Chrome's increment/decrement buttons. For certain
|
342
|
+
* `font-size` values of the `input`, it causes the cursor style of the
|
343
|
+
* decrement button to change from `default` to `text`.
|
344
|
+
*/
|
345
|
+
|
346
|
+
input[type="number"]::-webkit-inner-spin-button,
|
347
|
+
input[type="number"]::-webkit-outer-spin-button {
|
348
|
+
height: auto;
|
349
|
+
}
|
350
|
+
|
351
|
+
/**
|
352
|
+
* 1. Address `appearance` set to `searchfield` in Safari and Chrome.
|
353
|
+
* 2. Address `box-sizing` set to `border-box` in Safari and Chrome
|
354
|
+
* (include `-moz` to future-proof).
|
355
|
+
*/
|
356
|
+
|
357
|
+
input[type="search"] {
|
358
|
+
-webkit-appearance: textfield; /* 1 */
|
359
|
+
-moz-box-sizing: content-box;
|
360
|
+
-webkit-box-sizing: content-box; /* 2 */
|
361
|
+
box-sizing: content-box;
|
362
|
+
}
|
363
|
+
|
364
|
+
/**
|
365
|
+
* Remove inner padding and search cancel button in Safari and Chrome on OS X.
|
366
|
+
* Safari (but not Chrome) clips the cancel button when the search input has
|
367
|
+
* padding (and `textfield` appearance).
|
368
|
+
*/
|
369
|
+
|
370
|
+
input[type="search"]::-webkit-search-cancel-button,
|
371
|
+
input[type="search"]::-webkit-search-decoration {
|
372
|
+
-webkit-appearance: none;
|
373
|
+
}
|
374
|
+
|
375
|
+
/**
|
376
|
+
* Define consistent border, margin, and padding.
|
377
|
+
*/
|
378
|
+
|
379
|
+
fieldset {
|
380
|
+
border: 1px solid #c0c0c0;
|
381
|
+
margin: 0 2px;
|
382
|
+
padding: 0.35em 0.625em 0.75em;
|
383
|
+
}
|
384
|
+
|
385
|
+
/**
|
386
|
+
* 1. Correct `color` not being inherited in IE 8/9/10/11.
|
387
|
+
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
388
|
+
*/
|
389
|
+
|
390
|
+
legend {
|
391
|
+
border: 0; /* 1 */
|
392
|
+
padding: 0; /* 2 */
|
393
|
+
}
|
394
|
+
|
395
|
+
/**
|
396
|
+
* Remove default vertical scrollbar in IE 8/9/10/11.
|
397
|
+
*/
|
398
|
+
|
399
|
+
textarea {
|
400
|
+
overflow: auto;
|
401
|
+
}
|
402
|
+
|
403
|
+
/**
|
404
|
+
* Don't inherit the `font-weight` (applied by a rule above).
|
405
|
+
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
|
406
|
+
*/
|
407
|
+
|
408
|
+
optgroup {
|
409
|
+
font-weight: bold;
|
410
|
+
}
|
411
|
+
|
412
|
+
/* Tables
|
413
|
+
========================================================================== */
|
414
|
+
|
415
|
+
/**
|
416
|
+
* Remove most spacing between table cells.
|
417
|
+
*/
|
418
|
+
|
419
|
+
table {
|
420
|
+
border-collapse: collapse;
|
421
|
+
border-spacing: 0;
|
422
|
+
}
|
423
|
+
|
424
|
+
td,
|
425
|
+
th {
|
426
|
+
padding: 0;
|
427
|
+
}
|
@@ -0,0 +1,418 @@
|
|
1
|
+
/*
|
2
|
+
* Skeleton V2.0.4
|
3
|
+
* Copyright 2014, Dave Gamache
|
4
|
+
* www.getskeleton.com
|
5
|
+
* Free to use under the MIT license.
|
6
|
+
* http://www.opensource.org/licenses/mit-license.php
|
7
|
+
* 12/29/2014
|
8
|
+
*/
|
9
|
+
|
10
|
+
|
11
|
+
/* Table of contents
|
12
|
+
––––––––––––––––––––––––––––––––––––––––––––––––––
|
13
|
+
- Grid
|
14
|
+
- Base Styles
|
15
|
+
- Typography
|
16
|
+
- Links
|
17
|
+
- Buttons
|
18
|
+
- Forms
|
19
|
+
- Lists
|
20
|
+
- Code
|
21
|
+
- Tables
|
22
|
+
- Spacing
|
23
|
+
- Utilities
|
24
|
+
- Clearing
|
25
|
+
- Media Queries
|
26
|
+
*/
|
27
|
+
|
28
|
+
|
29
|
+
/* Grid
|
30
|
+
–––––––––––––––––––––––––––––––––––––––––––––––––– */
|
31
|
+
.container {
|
32
|
+
position: relative;
|
33
|
+
width: 100%;
|
34
|
+
max-width: 960px;
|
35
|
+
margin: 0 auto;
|
36
|
+
padding: 0 20px;
|
37
|
+
box-sizing: border-box; }
|
38
|
+
.column,
|
39
|
+
.columns {
|
40
|
+
width: 100%;
|
41
|
+
float: left;
|
42
|
+
box-sizing: border-box; }
|
43
|
+
|
44
|
+
/* For devices larger than 400px */
|
45
|
+
@media (min-width: 400px) {
|
46
|
+
.container {
|
47
|
+
width: 85%;
|
48
|
+
padding: 0; }
|
49
|
+
}
|
50
|
+
|
51
|
+
/* For devices larger than 550px */
|
52
|
+
@media (min-width: 550px) {
|
53
|
+
.container {
|
54
|
+
width: 80%; }
|
55
|
+
.column,
|
56
|
+
.columns {
|
57
|
+
margin-left: 4%; }
|
58
|
+
.column:first-child,
|
59
|
+
.columns:first-child {
|
60
|
+
margin-left: 0; }
|
61
|
+
|
62
|
+
.one.column,
|
63
|
+
.one.columns { width: 4.66666666667%; }
|
64
|
+
.two.columns { width: 13.3333333333%; }
|
65
|
+
.three.columns { width: 22%; }
|
66
|
+
.four.columns { width: 30.6666666667%; }
|
67
|
+
.five.columns { width: 39.3333333333%; }
|
68
|
+
.six.columns { width: 48%; }
|
69
|
+
.seven.columns { width: 56.6666666667%; }
|
70
|
+
.eight.columns { width: 65.3333333333%; }
|
71
|
+
.nine.columns { width: 74.0%; }
|
72
|
+
.ten.columns { width: 82.6666666667%; }
|
73
|
+
.eleven.columns { width: 91.3333333333%; }
|
74
|
+
.twelve.columns { width: 100%; margin-left: 0; }
|
75
|
+
|
76
|
+
.one-third.column { width: 30.6666666667%; }
|
77
|
+
.two-thirds.column { width: 65.3333333333%; }
|
78
|
+
|
79
|
+
.one-half.column { width: 48%; }
|
80
|
+
|
81
|
+
/* Offsets */
|
82
|
+
.offset-by-one.column,
|
83
|
+
.offset-by-one.columns { margin-left: 8.66666666667%; }
|
84
|
+
.offset-by-two.column,
|
85
|
+
.offset-by-two.columns { margin-left: 17.3333333333%; }
|
86
|
+
.offset-by-three.column,
|
87
|
+
.offset-by-three.columns { margin-left: 26%; }
|
88
|
+
.offset-by-four.column,
|
89
|
+
.offset-by-four.columns { margin-left: 34.6666666667%; }
|
90
|
+
.offset-by-five.column,
|
91
|
+
.offset-by-five.columns { margin-left: 43.3333333333%; }
|
92
|
+
.offset-by-six.column,
|
93
|
+
.offset-by-six.columns { margin-left: 52%; }
|
94
|
+
.offset-by-seven.column,
|
95
|
+
.offset-by-seven.columns { margin-left: 60.6666666667%; }
|
96
|
+
.offset-by-eight.column,
|
97
|
+
.offset-by-eight.columns { margin-left: 69.3333333333%; }
|
98
|
+
.offset-by-nine.column,
|
99
|
+
.offset-by-nine.columns { margin-left: 78.0%; }
|
100
|
+
.offset-by-ten.column,
|
101
|
+
.offset-by-ten.columns { margin-left: 86.6666666667%; }
|
102
|
+
.offset-by-eleven.column,
|
103
|
+
.offset-by-eleven.columns { margin-left: 95.3333333333%; }
|
104
|
+
|
105
|
+
.offset-by-one-third.column,
|
106
|
+
.offset-by-one-third.columns { margin-left: 34.6666666667%; }
|
107
|
+
.offset-by-two-thirds.column,
|
108
|
+
.offset-by-two-thirds.columns { margin-left: 69.3333333333%; }
|
109
|
+
|
110
|
+
.offset-by-one-half.column,
|
111
|
+
.offset-by-one-half.columns { margin-left: 52%; }
|
112
|
+
|
113
|
+
}
|
114
|
+
|
115
|
+
|
116
|
+
/* Base Styles
|
117
|
+
–––––––––––––––––––––––––––––––––––––––––––––––––– */
|
118
|
+
/* NOTE
|
119
|
+
html is set to 62.5% so that all the REM measurements throughout Skeleton
|
120
|
+
are based on 10px sizing. So basically 1.5rem = 15px :) */
|
121
|
+
html {
|
122
|
+
font-size: 62.5%; }
|
123
|
+
body {
|
124
|
+
font-size: 1.5em; /* currently ems cause chrome bug misinterpreting rems on body element */
|
125
|
+
line-height: 1.6;
|
126
|
+
font-weight: 400;
|
127
|
+
font-family: "Raleway", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
128
|
+
color: #222; }
|
129
|
+
|
130
|
+
|
131
|
+
/* Typography
|
132
|
+
–––––––––––––––––––––––––––––––––––––––––––––––––– */
|
133
|
+
h1, h2, h3, h4, h5, h6 {
|
134
|
+
margin-top: 0;
|
135
|
+
margin-bottom: 2rem;
|
136
|
+
font-weight: 300; }
|
137
|
+
h1 { font-size: 4.0rem; line-height: 1.2; letter-spacing: -.1rem;}
|
138
|
+
h2 { font-size: 3.6rem; line-height: 1.25; letter-spacing: -.1rem; }
|
139
|
+
h3 { font-size: 3.0rem; line-height: 1.3; letter-spacing: -.1rem; }
|
140
|
+
h4 { font-size: 2.4rem; line-height: 1.35; letter-spacing: -.08rem; }
|
141
|
+
h5 { font-size: 1.8rem; line-height: 1.5; letter-spacing: -.05rem; }
|
142
|
+
h6 { font-size: 1.5rem; line-height: 1.6; letter-spacing: 0; }
|
143
|
+
|
144
|
+
/* Larger than phablet */
|
145
|
+
@media (min-width: 550px) {
|
146
|
+
h1 { font-size: 5.0rem; }
|
147
|
+
h2 { font-size: 4.2rem; }
|
148
|
+
h3 { font-size: 3.6rem; }
|
149
|
+
h4 { font-size: 3.0rem; }
|
150
|
+
h5 { font-size: 2.4rem; }
|
151
|
+
h6 { font-size: 1.5rem; }
|
152
|
+
}
|
153
|
+
|
154
|
+
p {
|
155
|
+
margin-top: 0; }
|
156
|
+
|
157
|
+
|
158
|
+
/* Links
|
159
|
+
–––––––––––––––––––––––––––––––––––––––––––––––––– */
|
160
|
+
a {
|
161
|
+
color: #1EAEDB; }
|
162
|
+
a:hover {
|
163
|
+
color: #0FA0CE; }
|
164
|
+
|
165
|
+
|
166
|
+
/* Buttons
|
167
|
+
–––––––––––––––––––––––––––––––––––––––––––––––––– */
|
168
|
+
.button,
|
169
|
+
button,
|
170
|
+
input[type="submit"],
|
171
|
+
input[type="reset"],
|
172
|
+
input[type="button"] {
|
173
|
+
display: inline-block;
|
174
|
+
height: 38px;
|
175
|
+
padding: 0 30px;
|
176
|
+
color: #555;
|
177
|
+
text-align: center;
|
178
|
+
font-size: 11px;
|
179
|
+
font-weight: 600;
|
180
|
+
line-height: 38px;
|
181
|
+
letter-spacing: .1rem;
|
182
|
+
text-transform: uppercase;
|
183
|
+
text-decoration: none;
|
184
|
+
white-space: nowrap;
|
185
|
+
background-color: transparent;
|
186
|
+
border-radius: 4px;
|
187
|
+
border: 1px solid #bbb;
|
188
|
+
cursor: pointer;
|
189
|
+
box-sizing: border-box; }
|
190
|
+
.button:hover,
|
191
|
+
button:hover,
|
192
|
+
input[type="submit"]:hover,
|
193
|
+
input[type="reset"]:hover,
|
194
|
+
input[type="button"]:hover,
|
195
|
+
.button:focus,
|
196
|
+
button:focus,
|
197
|
+
input[type="submit"]:focus,
|
198
|
+
input[type="reset"]:focus,
|
199
|
+
input[type="button"]:focus {
|
200
|
+
color: #333;
|
201
|
+
border-color: #888;
|
202
|
+
outline: 0; }
|
203
|
+
.button.button-primary,
|
204
|
+
button.button-primary,
|
205
|
+
input[type="submit"].button-primary,
|
206
|
+
input[type="reset"].button-primary,
|
207
|
+
input[type="button"].button-primary {
|
208
|
+
color: #FFF;
|
209
|
+
background-color: #33C3F0;
|
210
|
+
border-color: #33C3F0; }
|
211
|
+
.button.button-primary:hover,
|
212
|
+
button.button-primary:hover,
|
213
|
+
input[type="submit"].button-primary:hover,
|
214
|
+
input[type="reset"].button-primary:hover,
|
215
|
+
input[type="button"].button-primary:hover,
|
216
|
+
.button.button-primary:focus,
|
217
|
+
button.button-primary:focus,
|
218
|
+
input[type="submit"].button-primary:focus,
|
219
|
+
input[type="reset"].button-primary:focus,
|
220
|
+
input[type="button"].button-primary:focus {
|
221
|
+
color: #FFF;
|
222
|
+
background-color: #1EAEDB;
|
223
|
+
border-color: #1EAEDB; }
|
224
|
+
|
225
|
+
|
226
|
+
/* Forms
|
227
|
+
–––––––––––––––––––––––––––––––––––––––––––––––––– */
|
228
|
+
input[type="email"],
|
229
|
+
input[type="number"],
|
230
|
+
input[type="search"],
|
231
|
+
input[type="text"],
|
232
|
+
input[type="tel"],
|
233
|
+
input[type="url"],
|
234
|
+
input[type="password"],
|
235
|
+
textarea,
|
236
|
+
select {
|
237
|
+
height: 38px;
|
238
|
+
padding: 6px 10px; /* The 6px vertically centers text on FF, ignored by Webkit */
|
239
|
+
background-color: #fff;
|
240
|
+
border: 1px solid #D1D1D1;
|
241
|
+
border-radius: 4px;
|
242
|
+
box-shadow: none;
|
243
|
+
box-sizing: border-box; }
|
244
|
+
/* Removes awkward default styles on some inputs for iOS */
|
245
|
+
input[type="email"],
|
246
|
+
input[type="number"],
|
247
|
+
input[type="search"],
|
248
|
+
input[type="text"],
|
249
|
+
input[type="tel"],
|
250
|
+
input[type="url"],
|
251
|
+
input[type="password"],
|
252
|
+
textarea {
|
253
|
+
-webkit-appearance: none;
|
254
|
+
-moz-appearance: none;
|
255
|
+
appearance: none; }
|
256
|
+
textarea {
|
257
|
+
min-height: 65px;
|
258
|
+
padding-top: 6px;
|
259
|
+
padding-bottom: 6px; }
|
260
|
+
input[type="email"]:focus,
|
261
|
+
input[type="number"]:focus,
|
262
|
+
input[type="search"]:focus,
|
263
|
+
input[type="text"]:focus,
|
264
|
+
input[type="tel"]:focus,
|
265
|
+
input[type="url"]:focus,
|
266
|
+
input[type="password"]:focus,
|
267
|
+
textarea:focus,
|
268
|
+
select:focus {
|
269
|
+
border: 1px solid #33C3F0;
|
270
|
+
outline: 0; }
|
271
|
+
label,
|
272
|
+
legend {
|
273
|
+
display: block;
|
274
|
+
margin-bottom: .5rem;
|
275
|
+
font-weight: 600; }
|
276
|
+
fieldset {
|
277
|
+
padding: 0;
|
278
|
+
border-width: 0; }
|
279
|
+
input[type="checkbox"],
|
280
|
+
input[type="radio"] {
|
281
|
+
display: inline; }
|
282
|
+
label > .label-body {
|
283
|
+
display: inline-block;
|
284
|
+
margin-left: .5rem;
|
285
|
+
font-weight: normal; }
|
286
|
+
|
287
|
+
|
288
|
+
/* Lists
|
289
|
+
–––––––––––––––––––––––––––––––––––––––––––––––––– */
|
290
|
+
ul {
|
291
|
+
list-style: circle inside; }
|
292
|
+
ol {
|
293
|
+
list-style: decimal inside; }
|
294
|
+
ol, ul {
|
295
|
+
padding-left: 0;
|
296
|
+
margin-top: 0; }
|
297
|
+
ul ul,
|
298
|
+
ul ol,
|
299
|
+
ol ol,
|
300
|
+
ol ul {
|
301
|
+
margin: 1.5rem 0 1.5rem 3rem;
|
302
|
+
font-size: 90%; }
|
303
|
+
li {
|
304
|
+
margin-bottom: 1rem; }
|
305
|
+
|
306
|
+
|
307
|
+
/* Code
|
308
|
+
–––––––––––––––––––––––––––––––––––––––––––––––––– */
|
309
|
+
code {
|
310
|
+
padding: .2rem .5rem;
|
311
|
+
margin: 0 .2rem;
|
312
|
+
font-size: 90%;
|
313
|
+
white-space: nowrap;
|
314
|
+
background: #F1F1F1;
|
315
|
+
border: 1px solid #E1E1E1;
|
316
|
+
border-radius: 4px; }
|
317
|
+
pre > code {
|
318
|
+
display: block;
|
319
|
+
padding: 1rem 1.5rem;
|
320
|
+
white-space: pre; }
|
321
|
+
|
322
|
+
|
323
|
+
/* Tables
|
324
|
+
–––––––––––––––––––––––––––––––––––––––––––––––––– */
|
325
|
+
th,
|
326
|
+
td {
|
327
|
+
padding: 12px 15px;
|
328
|
+
text-align: left;
|
329
|
+
border-bottom: 1px solid #E1E1E1; }
|
330
|
+
th:first-child,
|
331
|
+
td:first-child {
|
332
|
+
padding-left: 0; }
|
333
|
+
th:last-child,
|
334
|
+
td:last-child {
|
335
|
+
padding-right: 0; }
|
336
|
+
|
337
|
+
|
338
|
+
/* Spacing
|
339
|
+
–––––––––––––––––––––––––––––––––––––––––––––––––– */
|
340
|
+
button,
|
341
|
+
.button {
|
342
|
+
margin-bottom: 1rem; }
|
343
|
+
input,
|
344
|
+
textarea,
|
345
|
+
select,
|
346
|
+
fieldset {
|
347
|
+
margin-bottom: 1.5rem; }
|
348
|
+
pre,
|
349
|
+
blockquote,
|
350
|
+
dl,
|
351
|
+
figure,
|
352
|
+
table,
|
353
|
+
p,
|
354
|
+
ul,
|
355
|
+
ol,
|
356
|
+
form {
|
357
|
+
margin-bottom: 2.5rem; }
|
358
|
+
|
359
|
+
|
360
|
+
/* Utilities
|
361
|
+
–––––––––––––––––––––––––––––––––––––––––––––––––– */
|
362
|
+
.u-full-width {
|
363
|
+
width: 100%;
|
364
|
+
box-sizing: border-box; }
|
365
|
+
.u-max-full-width {
|
366
|
+
max-width: 100%;
|
367
|
+
box-sizing: border-box; }
|
368
|
+
.u-pull-right {
|
369
|
+
float: right; }
|
370
|
+
.u-pull-left {
|
371
|
+
float: left; }
|
372
|
+
|
373
|
+
|
374
|
+
/* Misc
|
375
|
+
–––––––––––––––––––––––––––––––––––––––––––––––––– */
|
376
|
+
hr {
|
377
|
+
margin-top: 3rem;
|
378
|
+
margin-bottom: 3.5rem;
|
379
|
+
border-width: 0;
|
380
|
+
border-top: 1px solid #E1E1E1; }
|
381
|
+
|
382
|
+
|
383
|
+
/* Clearing
|
384
|
+
–––––––––––––––––––––––––––––––––––––––––––––––––– */
|
385
|
+
|
386
|
+
/* Self Clearing Goodness */
|
387
|
+
.container:after,
|
388
|
+
.row:after,
|
389
|
+
.u-cf {
|
390
|
+
content: "";
|
391
|
+
display: table;
|
392
|
+
clear: both; }
|
393
|
+
|
394
|
+
|
395
|
+
/* Media Queries
|
396
|
+
–––––––––––––––––––––––––––––––––––––––––––––––––– */
|
397
|
+
/*
|
398
|
+
Note: The best way to structure the use of media queries is to create the queries
|
399
|
+
near the relevant code. For example, if you wanted to change the styles for buttons
|
400
|
+
on small devices, paste the mobile query code up in the buttons section and style it
|
401
|
+
there.
|
402
|
+
*/
|
403
|
+
|
404
|
+
|
405
|
+
/* Larger than mobile */
|
406
|
+
@media (min-width: 400px) {}
|
407
|
+
|
408
|
+
/* Larger than phablet (also point when grid becomes active) */
|
409
|
+
@media (min-width: 550px) {}
|
410
|
+
|
411
|
+
/* Larger than tablet */
|
412
|
+
@media (min-width: 750px) {}
|
413
|
+
|
414
|
+
/* Larger than desktop */
|
415
|
+
@media (min-width: 1000px) {}
|
416
|
+
|
417
|
+
/* Larger than Desktop HD */
|
418
|
+
@media (min-width: 1200px) {}
|
data/lib/assets/report.html.erb
CHANGED
@@ -2,36 +2,74 @@
|
|
2
2
|
<head>
|
3
3
|
<meta charset="utf-8">
|
4
4
|
|
5
|
-
<title>Similatron report
|
5
|
+
<title>Similatron report run at <%= @run_at %></title>
|
6
6
|
<meta name="description" content="Similatron report">
|
7
7
|
<meta name="author" content="Similatron">
|
8
|
+
<style>
|
9
|
+
<% css_styles.each do |style| %>
|
10
|
+
<%= style %>
|
11
|
+
<% end %>
|
12
|
+
|
13
|
+
small {
|
14
|
+
font-size: 1.5rem;
|
15
|
+
}
|
16
|
+
</style>
|
8
17
|
</head>
|
9
18
|
|
10
19
|
<body>
|
11
|
-
<
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
20
|
+
<div class="container">
|
21
|
+
<div class="row">
|
22
|
+
<h1 class="twelve columns">
|
23
|
+
Similatron report
|
24
|
+
<small>
|
25
|
+
<%= run_at %>.
|
26
|
+
</small>
|
27
|
+
</h1>
|
28
|
+
</div>
|
29
|
+
<div class="row">
|
30
|
+
<div class="twelve columns">
|
31
|
+
<h4>
|
32
|
+
<% if ok? %>
|
33
|
+
Nothing to report!
|
34
|
+
<% else %>
|
35
|
+
Did <%= run.comparisons.length %> checks with <%= run.failed_comparisons.length %> failures
|
36
|
+
and <%= run.overwrite_comparisons.length %> new files.
|
37
|
+
<% end %>
|
38
|
+
</h4>
|
39
|
+
</div>
|
40
|
+
</div>
|
41
|
+
|
42
|
+
<div class="row">
|
43
|
+
<div class="twelve columns">
|
44
|
+
<% if overwrites? %>
|
45
|
+
<h5>Newly generated files</h5>
|
46
|
+
<ul>
|
47
|
+
<% run.overwrite_comparisons.each do |comparison| %>
|
48
|
+
<li>
|
49
|
+
Original
|
50
|
+
<a href="<%= full_path comparison.expected %>"><%= comparison.expected %></a> not found, copied
|
51
|
+
<a href="<%= full_path comparison.actual %>"><%= comparison.actual %></a>.
|
52
|
+
</li>
|
53
|
+
<% end %>
|
54
|
+
</ul>
|
55
|
+
<% end %>
|
23
56
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
57
|
+
<% if failures? %>
|
58
|
+
<h5>Failed comparisons</h5>
|
59
|
+
<ul>
|
60
|
+
<% run.failed_comparisons.each do |comparison| %>
|
61
|
+
<li>
|
62
|
+
Expected <a href="<%= full_path comparison.expected %>"><%= comparison.expected%></a>
|
63
|
+
to equal <a href="<%= full_path comparison.actual %>"><%= comparison.actual %></a>.
|
64
|
+
<% if comparison.diff %>
|
65
|
+
<a href="<%= full_path comparison.diff %>">Check out the diff</a>.
|
66
|
+
<% end %>
|
67
|
+
</li>
|
68
|
+
<% end %>
|
69
|
+
</ul>
|
70
|
+
<%end%>
|
71
|
+
</div>
|
72
|
+
</div>
|
73
|
+
</div>
|
36
74
|
</body>
|
37
75
|
</html>
|
data/lib/similatron.rb
CHANGED
@@ -3,14 +3,18 @@ require 'securerandom'
|
|
3
3
|
require 'open3'
|
4
4
|
require 'json'
|
5
5
|
require 'erb'
|
6
|
+
require 'fileutils'
|
7
|
+
require 'tmpdir'
|
6
8
|
|
7
9
|
require "similatron/version"
|
8
10
|
require "similatron/comparison"
|
9
11
|
require "similatron/comparison_engine"
|
10
12
|
require "similatron/imagemagick_comparison_engine"
|
13
|
+
require "similatron/pdf_comparison_engine"
|
11
14
|
require "similatron/diff_comparison_engine"
|
12
15
|
require "similatron/binary_diff_comparison_engine"
|
13
16
|
require "similatron/run"
|
17
|
+
require "similatron/html_report"
|
14
18
|
|
15
19
|
module Similatron
|
16
20
|
def self.compare(*args)
|
@@ -29,4 +33,8 @@ module Similatron
|
|
29
33
|
run
|
30
34
|
end
|
31
35
|
end
|
36
|
+
|
37
|
+
def self.lib_path
|
38
|
+
File.dirname(__FILE__)
|
39
|
+
end
|
32
40
|
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
module Similatron
|
2
2
|
class ComparisonEngine
|
3
3
|
def initialize(executable_path: nil, diffs_path:)
|
4
|
-
@
|
4
|
+
@given_executable_path = executable_path
|
5
5
|
@diffs_path = diffs_path
|
6
6
|
end
|
7
7
|
|
8
8
|
def compare(expected:, actual:)
|
9
|
-
|
9
|
+
increase_diff_index
|
10
10
|
|
11
11
|
command = command(expected, actual, diff_path)
|
12
12
|
|
@@ -16,28 +16,30 @@ module Similatron
|
|
16
16
|
expected: expected,
|
17
17
|
actual: actual,
|
18
18
|
score: score(exec_result),
|
19
|
-
diff: diff(
|
19
|
+
diff: diff(exec_result)
|
20
20
|
)
|
21
21
|
end
|
22
22
|
|
23
23
|
protected
|
24
24
|
|
25
|
-
attr_reader :diffs_path, :diff_index
|
25
|
+
attr_reader :diffs_path, :diff_index, :given_executable_path
|
26
26
|
|
27
27
|
def run(command)
|
28
28
|
exec_info = Open3.capture3(command)
|
29
29
|
Open3Result.new(*exec_info)
|
30
30
|
end
|
31
31
|
|
32
|
-
def
|
32
|
+
def increase_diff_index
|
33
33
|
@diff_index ||= 0
|
34
34
|
@diff_index += 1
|
35
|
+
end
|
35
36
|
|
37
|
+
def diff_path
|
36
38
|
File.join(diffs_path, "diff_#{diff_index}.#{diff_extension}")
|
37
39
|
end
|
38
40
|
|
39
41
|
def executable_path
|
40
|
-
default_executable_path ||
|
42
|
+
default_executable_path || given_executable_path
|
41
43
|
end
|
42
44
|
|
43
45
|
class Open3Result
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Similatron
|
2
|
+
class HtmlReport
|
3
|
+
|
4
|
+
attr_reader :run
|
5
|
+
|
6
|
+
def initialize(run)
|
7
|
+
@run = run
|
8
|
+
@time = Time.now
|
9
|
+
end
|
10
|
+
|
11
|
+
def render
|
12
|
+
template_path = File.join(Similatron.lib_path, "assets/report.html.erb")
|
13
|
+
template = ERB.new(File.read(template_path))
|
14
|
+
template.result(binding)
|
15
|
+
end
|
16
|
+
|
17
|
+
def css_styles
|
18
|
+
["normalize.css", "skeleton.css"].map do |file|
|
19
|
+
css_path = File.join(Similatron.lib_path, "assets/Skeleton-2.0.4/css", file)
|
20
|
+
File.read(css_path)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def full_path(path)
|
25
|
+
File.expand_path(path)
|
26
|
+
end
|
27
|
+
|
28
|
+
def run_at
|
29
|
+
@time.strftime("%b %d, %Y %H:%M")
|
30
|
+
end
|
31
|
+
|
32
|
+
def overwrites?
|
33
|
+
!run.overwrite_comparisons.empty?
|
34
|
+
end
|
35
|
+
|
36
|
+
def failures?
|
37
|
+
!run.failed_comparisons.empty?
|
38
|
+
end
|
39
|
+
|
40
|
+
def ok?
|
41
|
+
!overwrites? && !failures?
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
@@ -2,9 +2,7 @@ module Similatron
|
|
2
2
|
class ImagemagickComparisonEngine < ComparisonEngine
|
3
3
|
|
4
4
|
def can_handle_mime?(mime_type)
|
5
|
-
|
6
|
-
mime_type =~ format
|
7
|
-
end
|
5
|
+
mime_type =~ /image/
|
8
6
|
end
|
9
7
|
|
10
8
|
private
|
@@ -21,7 +19,7 @@ module Similatron
|
|
21
19
|
"#{executable_path} -metric PSNR #{expected} #{actual} #{diff_path}"
|
22
20
|
end
|
23
21
|
|
24
|
-
def diff(
|
22
|
+
def diff(exec_result)
|
25
23
|
exec_result.status == 1 ? diff_path : nil
|
26
24
|
end
|
27
25
|
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Similatron
|
2
|
+
class PdfComparisonEngine < ComparisonEngine
|
3
|
+
|
4
|
+
def can_handle_mime?(mime_type)
|
5
|
+
mime_type =~ %r{application/pdf}
|
6
|
+
end
|
7
|
+
|
8
|
+
def compare(expected:, actual:)
|
9
|
+
jpg_comparison = jpg_compare(expected: expected, actual: actual)
|
10
|
+
|
11
|
+
Comparison.new(
|
12
|
+
expected: expected,
|
13
|
+
actual: actual,
|
14
|
+
score: jpg_comparison.score,
|
15
|
+
diff: jpg_comparison.diff
|
16
|
+
)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def image_magick_engine
|
22
|
+
ImagemagickComparisonEngine.new(
|
23
|
+
executable_path: given_executable_path,
|
24
|
+
diffs_path: diffs_path
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
def jpg_compare(expected:, actual:)
|
29
|
+
Dir.mktmpdir do |dir|
|
30
|
+
jpg_expected = "#{dir}/expected.jpg"
|
31
|
+
jpg_actual = "#{dir}/actual.jpg"
|
32
|
+
|
33
|
+
convert(expected, jpg_expected)
|
34
|
+
convert(actual, jpg_actual)
|
35
|
+
|
36
|
+
image_magick_engine.compare(
|
37
|
+
expected: jpg_expected,
|
38
|
+
actual: jpg_actual
|
39
|
+
)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def convert(pdf, jpg)
|
44
|
+
`convert -append #{pdf} #{jpg}`
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
data/lib/similatron/run.rb
CHANGED
@@ -7,11 +7,7 @@ module Similatron
|
|
7
7
|
run_id = SecureRandom.urlsafe_base64(8)
|
8
8
|
@run_path = File.join(base_path, "run_#{run_id}")
|
9
9
|
|
10
|
-
@engines =
|
11
|
-
ImagemagickComparisonEngine.new(diffs_path: run_path),
|
12
|
-
DiffComparisonEngine.new(diffs_path: run_path),
|
13
|
-
BinaryDiffComparisonEngine.new(diffs_path: run_path)
|
14
|
-
]
|
10
|
+
@engines = build_engines
|
15
11
|
|
16
12
|
@comparisons = []
|
17
13
|
FileUtils.mkdir_p(run_path)
|
@@ -77,6 +73,18 @@ module Similatron
|
|
77
73
|
)
|
78
74
|
end
|
79
75
|
|
76
|
+
def build_engines
|
77
|
+
engine_classes = [
|
78
|
+
PdfComparisonEngine,
|
79
|
+
ImagemagickComparisonEngine,
|
80
|
+
DiffComparisonEngine,
|
81
|
+
BinaryDiffComparisonEngine
|
82
|
+
]
|
83
|
+
engine_classes.map do |engine_class|
|
84
|
+
engine_class.new(diffs_path: run_path)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
80
88
|
def best_engine(file)
|
81
89
|
mime_type = `file --mime -b #{file}`.chomp
|
82
90
|
engines.detect { |engine| engine.can_handle_mime?(mime_type) }
|
@@ -96,8 +104,7 @@ module Similatron
|
|
96
104
|
end
|
97
105
|
|
98
106
|
def to_html
|
99
|
-
|
100
|
-
template.result(binding)
|
107
|
+
HtmlReport.new(self).render
|
101
108
|
end
|
102
109
|
|
103
110
|
def write_reports
|
data/lib/similatron/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: similatron
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Diego Guerra
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-02-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -70,13 +70,17 @@ files:
|
|
70
70
|
- Rakefile
|
71
71
|
- bin/console
|
72
72
|
- bin/setup
|
73
|
+
- lib/assets/Skeleton-2.0.4/css/normalize.css
|
74
|
+
- lib/assets/Skeleton-2.0.4/css/skeleton.css
|
73
75
|
- lib/assets/report.html.erb
|
74
76
|
- lib/similatron.rb
|
75
77
|
- lib/similatron/binary_diff_comparison_engine.rb
|
76
78
|
- lib/similatron/comparison.rb
|
77
79
|
- lib/similatron/comparison_engine.rb
|
78
80
|
- lib/similatron/diff_comparison_engine.rb
|
81
|
+
- lib/similatron/html_report.rb
|
79
82
|
- lib/similatron/imagemagick_comparison_engine.rb
|
83
|
+
- lib/similatron/pdf_comparison_engine.rb
|
80
84
|
- lib/similatron/run.rb
|
81
85
|
- lib/similatron/version.rb
|
82
86
|
- similatron.gemspec
|