middleman-build-reporter 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (26) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/README.md +56 -4
  4. data/features/build_reporter.feature +2 -1
  5. data/features/build_reporter_fingerprint_helper.feature +6 -0
  6. data/features/step_definitions/build_reporter_fingerprint_steps.rb +8 -0
  7. data/fixtures/build-reporter-fingerprint/build/images/background.png +0 -0
  8. data/fixtures/build-reporter-fingerprint/build/images/middleman.png +0 -0
  9. data/fixtures/build-reporter-fingerprint/build/javascripts/all.js +1 -0
  10. data/fixtures/build-reporter-fingerprint/build/stylesheets/all.css +55 -0
  11. data/fixtures/build-reporter-fingerprint/build/stylesheets/normalize.css +375 -0
  12. data/fixtures/build-reporter-fingerprint/config.rb +4 -0
  13. data/fixtures/build-reporter-fingerprint/source/images/background.png +0 -0
  14. data/fixtures/build-reporter-fingerprint/source/images/middleman.png +0 -0
  15. data/fixtures/build-reporter-fingerprint/source/index.html.erb +11 -0
  16. data/fixtures/build-reporter-fingerprint/source/javascripts/all.js +1 -0
  17. data/fixtures/build-reporter-fingerprint/source/layouts/layout.erb +19 -0
  18. data/fixtures/build-reporter-fingerprint/source/stylesheets/all.css +55 -0
  19. data/fixtures/build-reporter-fingerprint/source/stylesheets/normalize.css +375 -0
  20. data/lib/middleman-build-reporter/extension.rb +15 -9
  21. data/lib/middleman-build-reporter/reporter.rb +10 -13
  22. data/lib/middleman-build-reporter/version.rb +1 -1
  23. data/middleman-build-reporter.gemspec +9 -9
  24. data/spec/middleman-build-reporter/extension_spec.rb +3 -8
  25. data/spec/middleman-build-reporter/reporter_spec.rb +15 -27
  26. metadata +53 -36
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b39877eb52f82b5dd645fa574f290dabbeda31ab
4
- data.tar.gz: c4eda5340278dd8a1805c36c73b94cabdbd804be
3
+ metadata.gz: 7582879cb653cc74131e0ef87e4f1598aada2ab9
4
+ data.tar.gz: 10a658adb6abe171a25b7b5304476792d50156f9
5
5
  SHA512:
6
- metadata.gz: 2fd1ef6f55335ae01ada5ec5015463e21c931c7d15a40bd5ed4ff05ba4c389043486a5df21e2db02891b8a6555fc70d9f8d1d6636ca0575ce1029667f6895ec5
7
- data.tar.gz: bfb45f439283acac26763344244d6bfba9f530a2ad62ce1e3a1ef47f728194c134fa354483ca53cbef10e95ac7b06be569bc6bad3de3f4f819fdf5c2ac124aa9
6
+ metadata.gz: 7effe01a14c4a2d786a9876a9152f17999bd18e3f08d695a792bc6cdec68158d69918b54ec43410058f008501d0579a5d2d13730dc7682b359912cd5ca20425e
7
+ data.tar.gz: 2af823834b00d8b6b5955a4d3bb7b4001ec07b784f94cb48403dcbf0bbceca0691ed4b1050a9de14e3a13dac454fd026b787811dd5b1083bf6a7f313cd7ef5d7
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
+ pkg
1
2
  tmp
2
3
  Gemfile.lock
3
4
  coverage
data/README.md CHANGED
@@ -2,9 +2,12 @@
2
2
 
3
3
  # middleman-build-reporter
4
4
 
5
- Fingerprint your [Middleman](http://middlemanapp.com) build with YAML and/or JSON files reporting build-time details.
5
+ middleman-build-reporter helps you understand what code has been deployed to an environment, and whether you're viewing cached or stale build artifacts.
6
6
 
7
- middleman-build-reporter helps you understand what code has been deployed to an environment.
7
+ Features:
8
+
9
+ 1. Generate YAML and/or JSON files reporting build-time/version details for your [Middleman](http://middlemanapp.com) app.
10
+ 2. Fingerprint each Middleman HTML template with a `<!-- FINGERPRINT -->` comment surfacing build-time/version details.
8
11
 
9
12
  ## Output
10
13
 
@@ -30,6 +33,19 @@ The `build/build.json`:
30
33
  }
31
34
  ```
32
35
 
36
+ middleman-build-reporter also offers a `build_reporter_fingerprint` helper to fingerprint HTML templates:
37
+
38
+ ```html
39
+ <!--
40
+ FINGERPRINT:
41
+ ---
42
+ branch: master
43
+ revision: c786c0addcde128a0823c40ebb4a3ab453411f10
44
+ build_time: '2014-10-21 07:27:51 -0400'
45
+ version: 1.2.3
46
+ --!>
47
+ ```
48
+
33
49
  ## Usage
34
50
 
35
51
  In your `Gemfile`:
@@ -70,10 +86,41 @@ activate :build_reporter do |build|
70
86
  # optional; an array of desired build reporter file formats
71
87
  # supported formats: yaml, json
72
88
  # defaults to ['yaml']
73
- build.reporter_file_formats = ['json', 'json']
89
+ build.reporter_file_formats = ['yaml', 'json']
74
90
  end
75
91
  ```
76
92
 
93
+ ## Fingerprinting you HTML templates
94
+
95
+ Use the `build_reporter_fingerprint` to fingerprint your HTML templates with build/version details:
96
+
97
+ Example usage in `layouts/layout.erb`:
98
+
99
+ ```html
100
+ <body>
101
+ <h1>Some Site</h1>
102
+ </body>
103
+
104
+ <%= build_reporter_fingerprint %>
105
+ ```
106
+
107
+ Example fingerprint HTML comment:
108
+
109
+ ```html
110
+ <body>
111
+ <h1>Some Site</h1>
112
+ </body>
113
+
114
+ <!--
115
+ FINGERPRINT:
116
+ ---
117
+ branch: master
118
+ revision: c786c0addcde128a0823c40ebb4a3ab453411f10
119
+ build_time: '2014-10-21 07:27:51 -0400'
120
+ version: 1.2.3
121
+ --!>
122
+ ```
123
+
77
124
  ## Reporting additional custom build details
78
125
 
79
126
  Add any additional build details to a `.build_reporter.yml` file in your project's root.
@@ -87,6 +134,7 @@ The `.build_reporter.yml`:
87
134
  ```
88
135
  ---
89
136
  foo: 'bar'
137
+ baz: 'bim'
90
138
  ```
91
139
 
92
140
  The output `build/build.yaml`:
@@ -97,15 +145,19 @@ revision: 244921c81c9e21a1973659df5f702937b91cfcd4
97
145
  build_time: 2014-09-20 10:50:55 -0400
98
146
  version: 1.2.3
99
147
  foo: bar
148
+ baz: bim
100
149
  ```
101
150
 
102
151
  ### Example - using .build_reporter.yml to override built-in middleman-build-reporter details:
103
152
 
153
+ The `.build_reporter.yml` file can also override the values set by `Middleman::BuildReporter::Reporter`.
154
+
104
155
  The `.build_reporter.yml`:
105
156
 
106
157
  ```
107
158
  ---
108
159
  revision: 'some_revision'
160
+ build_time: 'some_other_time'
109
161
  ```
110
162
 
111
163
  The output `build/build.yaml`:
@@ -113,6 +165,6 @@ The output `build/build.yaml`:
113
165
  ```
114
166
  branch: master
115
167
  revision: some_revision
116
- build_time: 2014-09-20 10:50:55 -0400
168
+ build_time: some_other_time
117
169
  version: 1.2.3
118
170
  ```
@@ -1,7 +1,8 @@
1
1
  Feature: Build reporter
2
2
 
3
3
  Scenario: build.yaml should report a branch
4
- Given a successfully built app at "basic-app"
4
+ Given a fixture app "basic-app"
5
+ And a successfully built app at "basic-app"
5
6
  When I cd to "build"
6
7
  Then the file "build.yaml" should report the current branch
7
8
 
@@ -0,0 +1,6 @@
1
+ Feature: Build reporter fingerprint helper
2
+
3
+ Scenario: the build reporter fingerprint should be written to the template
4
+ Given a successfully built app at "build-reporter-fingerprint"
5
+ When I cd to "build"
6
+ Then the file "index.html" should report the build fingerprint
@@ -0,0 +1,8 @@
1
+ Then /the file "([^"]*)" should report the build fingerprint/ do |file|
2
+ prep_for_fs_check do
3
+ html = File.open(file).read
4
+
5
+ expect(html.include?("<!--\nFINGERPRINT:\n---\nbranch:")).to eq true
6
+ end
7
+ end
8
+
@@ -0,0 +1 @@
1
+ //= require_tree .
@@ -0,0 +1,55 @@
1
+ @charset "utf-8";
2
+
3
+ body {
4
+ background: #d4d4d4 url("../images/background.png");
5
+ text-align: center;
6
+ font-family: sans-serif; }
7
+
8
+ h1 {
9
+ color: rgba(0, 0, 0, .3);
10
+ font-weight: bold;
11
+ font-size: 32px;
12
+ letter-spacing: -1px;
13
+ text-transform: uppercase;
14
+ text-shadow: 0 1px 0 rgba(255, 255, 255, .5);
15
+ background: url("../images/middleman.png") no-repeat center 100px;
16
+ padding: 350px 0 10px;
17
+ margin: 0; }
18
+
19
+ .doc {
20
+ font-size: 14px;
21
+ margin: 0; }
22
+ .doc:before,
23
+ .doc:after {
24
+ opacity: .2;
25
+ padding: 6px;
26
+ font-style: normal;
27
+ position: relative;
28
+ content: "•"; }
29
+ .doc a {
30
+ color: rgba(0, 0, 0, 0.3); }
31
+ .doc a:hover {
32
+ color: #666; }
33
+
34
+ .welcome {
35
+ -webkit-animation-name: welcome;
36
+ -webkit-animation-duration: .9s; }
37
+
38
+ @-webkit-keyframes welcome {
39
+ from {
40
+ -webkit-transform: scale(0);
41
+ opacity: 0;
42
+ }
43
+ 50% {
44
+ -webkit-transform: scale(0);
45
+ opacity: 0;
46
+ }
47
+ 82.5% {
48
+ -webkit-transform: scale(1.03);
49
+ -webkit-animation-timing-function: ease-out;
50
+ opacity: 1;
51
+ }
52
+ to {
53
+ -webkit-transform: scale(1);
54
+ }
55
+ }
@@ -0,0 +1,375 @@
1
+ /*! normalize.css v2.0.1 | MIT License | git.io/normalize */
2
+
3
+ /* ==========================================================================
4
+ HTML5 display definitions
5
+ ========================================================================== */
6
+
7
+ /*
8
+ * Corrects `block` display not defined in IE 8/9.
9
+ */
10
+
11
+ article,
12
+ aside,
13
+ details,
14
+ figcaption,
15
+ figure,
16
+ footer,
17
+ header,
18
+ hgroup,
19
+ nav,
20
+ section,
21
+ summary {
22
+ display: block;
23
+ }
24
+
25
+ /*
26
+ * Corrects `inline-block` display not defined in IE 8/9.
27
+ */
28
+
29
+ audio,
30
+ canvas,
31
+ video {
32
+ display: inline-block;
33
+ }
34
+
35
+ /*
36
+ * Prevents modern browsers from displaying `audio` without controls.
37
+ * Remove excess height in iOS 5 devices.
38
+ */
39
+
40
+ audio:not([controls]) {
41
+ display: none;
42
+ height: 0;
43
+ }
44
+
45
+ /*
46
+ * Addresses styling for `hidden` attribute not present in IE 8/9.
47
+ */
48
+
49
+ [hidden] {
50
+ display: none;
51
+ }
52
+
53
+ /* ==========================================================================
54
+ Base
55
+ ========================================================================== */
56
+
57
+ /*
58
+ * 1. Sets default font family to sans-serif.
59
+ * 2. Prevents iOS text size adjust after orientation change, without disabling
60
+ * user zoom.
61
+ */
62
+
63
+ html {
64
+ font-family: sans-serif; /* 1 */
65
+ -webkit-text-size-adjust: 100%; /* 2 */
66
+ -ms-text-size-adjust: 100%; /* 2 */
67
+ }
68
+
69
+ /*
70
+ * Removes default margin.
71
+ */
72
+
73
+ body {
74
+ margin: 0;
75
+ }
76
+
77
+ /* ==========================================================================
78
+ Links
79
+ ========================================================================== */
80
+
81
+ /*
82
+ * Addresses `outline` inconsistency between Chrome and other browsers.
83
+ */
84
+
85
+ a:focus {
86
+ outline: thin dotted;
87
+ }
88
+
89
+ /*
90
+ * Improves readability when focused and also mouse hovered in all browsers.
91
+ */
92
+
93
+ a:active,
94
+ a:hover {
95
+ outline: 0;
96
+ }
97
+
98
+ /* ==========================================================================
99
+ Typography
100
+ ========================================================================== */
101
+
102
+ /*
103
+ * Addresses `h1` font sizes within `section` and `article` in Firefox 4+,
104
+ * Safari 5, and Chrome.
105
+ */
106
+
107
+ h1 {
108
+ font-size: 2em;
109
+ }
110
+
111
+ /*
112
+ * Addresses styling not present in IE 8/9, Safari 5, and Chrome.
113
+ */
114
+
115
+ abbr[title] {
116
+ border-bottom: 1px dotted;
117
+ }
118
+
119
+ /*
120
+ * Addresses style set to `bolder` in Firefox 4+, Safari 5, and Chrome.
121
+ */
122
+
123
+ b,
124
+ strong {
125
+ font-weight: bold;
126
+ }
127
+
128
+ /*
129
+ * Addresses styling not present in Safari 5 and Chrome.
130
+ */
131
+
132
+ dfn {
133
+ font-style: italic;
134
+ }
135
+
136
+ /*
137
+ * Addresses styling not present in IE 8/9.
138
+ */
139
+
140
+ mark {
141
+ background: #ff0;
142
+ color: #000;
143
+ }
144
+
145
+
146
+ /*
147
+ * Corrects font family set oddly in Safari 5 and Chrome.
148
+ */
149
+
150
+ code,
151
+ kbd,
152
+ pre,
153
+ samp {
154
+ font-family: monospace, serif;
155
+ font-size: 1em;
156
+ }
157
+
158
+ /*
159
+ * Improves readability of pre-formatted text in all browsers.
160
+ */
161
+
162
+ pre {
163
+ white-space: pre;
164
+ white-space: pre-wrap;
165
+ word-wrap: break-word;
166
+ }
167
+
168
+ /*
169
+ * Sets consistent quote types.
170
+ */
171
+
172
+ q {
173
+ quotes: "\201C" "\201D" "\2018" "\2019";
174
+ }
175
+
176
+ /*
177
+ * Addresses inconsistent and variable font size in all browsers.
178
+ */
179
+
180
+ small {
181
+ font-size: 80%;
182
+ }
183
+
184
+ /*
185
+ * Prevents `sub` and `sup` affecting `line-height` in all browsers.
186
+ */
187
+
188
+ sub,
189
+ sup {
190
+ font-size: 75%;
191
+ line-height: 0;
192
+ position: relative;
193
+ vertical-align: baseline;
194
+ }
195
+
196
+ sup {
197
+ top: -0.5em;
198
+ }
199
+
200
+ sub {
201
+ bottom: -0.25em;
202
+ }
203
+
204
+ /* ==========================================================================
205
+ Embedded content
206
+ ========================================================================== */
207
+
208
+ /*
209
+ * Removes border when inside `a` element in IE 8/9.
210
+ */
211
+
212
+ img {
213
+ border: 0;
214
+ }
215
+
216
+ /*
217
+ * Corrects overflow displayed oddly in IE 9.
218
+ */
219
+
220
+ svg:not(:root) {
221
+ overflow: hidden;
222
+ }
223
+
224
+ /* ==========================================================================
225
+ Figures
226
+ ========================================================================== */
227
+
228
+ /*
229
+ * Addresses margin not present in IE 8/9 and Safari 5.
230
+ */
231
+
232
+ figure {
233
+ margin: 0;
234
+ }
235
+
236
+ /* ==========================================================================
237
+ Forms
238
+ ========================================================================== */
239
+
240
+ /*
241
+ * Define consistent border, margin, and padding.
242
+ */
243
+
244
+ fieldset {
245
+ border: 1px solid #c0c0c0;
246
+ margin: 0 2px;
247
+ padding: 0.35em 0.625em 0.75em;
248
+ }
249
+
250
+ /*
251
+ * 1. Corrects color not being inherited in IE 8/9.
252
+ * 2. Remove padding so people aren't caught out if they zero out fieldsets.
253
+ */
254
+
255
+ legend {
256
+ border: 0; /* 1 */
257
+ padding: 0; /* 2 */
258
+ }
259
+
260
+ /*
261
+ * 1. Corrects font family not being inherited in all browsers.
262
+ * 2. Corrects font size not being inherited in all browsers.
263
+ * 3. Addresses margins set differently in Firefox 4+, Safari 5, and Chrome
264
+ */
265
+
266
+ button,
267
+ input,
268
+ select,
269
+ textarea {
270
+ font-family: inherit; /* 1 */
271
+ font-size: 100%; /* 2 */
272
+ margin: 0; /* 3 */
273
+ }
274
+
275
+ /*
276
+ * Addresses Firefox 4+ setting `line-height` on `input` using `!important` in
277
+ * the UA stylesheet.
278
+ */
279
+
280
+ button,
281
+ input {
282
+ line-height: normal;
283
+ }
284
+
285
+ /*
286
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
287
+ * and `video` controls.
288
+ * 2. Corrects inability to style clickable `input` types in iOS.
289
+ * 3. Improves usability and consistency of cursor style between image-type
290
+ * `input` and others.
291
+ */
292
+
293
+ button,
294
+ html input[type="button"], /* 1 */
295
+ input[type="reset"],
296
+ input[type="submit"] {
297
+ -webkit-appearance: button; /* 2 */
298
+ cursor: pointer; /* 3 */
299
+ }
300
+
301
+ /*
302
+ * Re-set default cursor for disabled elements.
303
+ */
304
+
305
+ button[disabled],
306
+ input[disabled] {
307
+ cursor: default;
308
+ }
309
+
310
+ /*
311
+ * 1. Addresses box sizing set to `content-box` in IE 8/9.
312
+ * 2. Removes excess padding in IE 8/9.
313
+ */
314
+
315
+ input[type="checkbox"],
316
+ input[type="radio"] {
317
+ box-sizing: border-box; /* 1 */
318
+ padding: 0; /* 2 */
319
+ }
320
+
321
+ /*
322
+ * 1. Addresses `appearance` set to `searchfield` in Safari 5 and Chrome.
323
+ * 2. Addresses `box-sizing` set to `border-box` in Safari 5 and Chrome
324
+ * (include `-moz` to future-proof).
325
+ */
326
+
327
+ input[type="search"] {
328
+ -webkit-appearance: textfield; /* 1 */
329
+ -moz-box-sizing: content-box;
330
+ -webkit-box-sizing: content-box; /* 2 */
331
+ box-sizing: content-box;
332
+ }
333
+
334
+ /*
335
+ * Removes inner padding and search cancel button in Safari 5 and Chrome
336
+ * on OS X.
337
+ */
338
+
339
+ input[type="search"]::-webkit-search-cancel-button,
340
+ input[type="search"]::-webkit-search-decoration {
341
+ -webkit-appearance: none;
342
+ }
343
+
344
+ /*
345
+ * Removes inner padding and border in Firefox 4+.
346
+ */
347
+
348
+ button::-moz-focus-inner,
349
+ input::-moz-focus-inner {
350
+ border: 0;
351
+ padding: 0;
352
+ }
353
+
354
+ /*
355
+ * 1. Removes default vertical scrollbar in IE 8/9.
356
+ * 2. Improves readability and alignment in all browsers.
357
+ */
358
+
359
+ textarea {
360
+ overflow: auto; /* 1 */
361
+ vertical-align: top; /* 2 */
362
+ }
363
+
364
+ /* ==========================================================================
365
+ Tables
366
+ ========================================================================== */
367
+
368
+ /*
369
+ * Remove most spacing between table cells.
370
+ */
371
+
372
+ table {
373
+ border-collapse: collapse;
374
+ border-spacing: 0;
375
+ }
@@ -0,0 +1,4 @@
1
+ activate :build_reporter do |build|
2
+ build.repo_root = '../../../'
3
+ build.version = '1.2.3'
4
+ end
@@ -0,0 +1,11 @@
1
+ ---
2
+ title: Welcome to Middleman
3
+ ---
4
+
5
+ <div class="welcome">
6
+ <h1>Middleman is Watching</h1>
7
+ <p class="doc">
8
+ <%= link_to "Read Online Documentation", "http://middlemanapp.com/" %>
9
+ </p><!-- .doc -->
10
+ <%= build_reporter_fingerprint %>
11
+ </div><!-- .welcome -->
@@ -0,0 +1 @@
1
+ //= require_tree .
@@ -0,0 +1,19 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+
6
+ <!-- Always force latest IE rendering engine or request Chrome Frame -->
7
+ <meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
8
+
9
+ <!-- Use title if it's in the page YAML frontmatter -->
10
+ <title><%= current_page.data.title || "The Middleman" %></title>
11
+
12
+ <%= stylesheet_link_tag "normalize", "all" %>
13
+ <%= javascript_include_tag "all" %>
14
+ </head>
15
+
16
+ <body class="<%= page_classes %>">
17
+ <%= yield %>
18
+ </body>
19
+ </html>
@@ -0,0 +1,55 @@
1
+ @charset "utf-8";
2
+
3
+ body {
4
+ background: #d4d4d4 url("../images/background.png");
5
+ text-align: center;
6
+ font-family: sans-serif; }
7
+
8
+ h1 {
9
+ color: rgba(0, 0, 0, .3);
10
+ font-weight: bold;
11
+ font-size: 32px;
12
+ letter-spacing: -1px;
13
+ text-transform: uppercase;
14
+ text-shadow: 0 1px 0 rgba(255, 255, 255, .5);
15
+ background: url("../images/middleman.png") no-repeat center 100px;
16
+ padding: 350px 0 10px;
17
+ margin: 0; }
18
+
19
+ .doc {
20
+ font-size: 14px;
21
+ margin: 0; }
22
+ .doc:before,
23
+ .doc:after {
24
+ opacity: .2;
25
+ padding: 6px;
26
+ font-style: normal;
27
+ position: relative;
28
+ content: "•"; }
29
+ .doc a {
30
+ color: rgba(0, 0, 0, 0.3); }
31
+ .doc a:hover {
32
+ color: #666; }
33
+
34
+ .welcome {
35
+ -webkit-animation-name: welcome;
36
+ -webkit-animation-duration: .9s; }
37
+
38
+ @-webkit-keyframes welcome {
39
+ from {
40
+ -webkit-transform: scale(0);
41
+ opacity: 0;
42
+ }
43
+ 50% {
44
+ -webkit-transform: scale(0);
45
+ opacity: 0;
46
+ }
47
+ 82.5% {
48
+ -webkit-transform: scale(1.03);
49
+ -webkit-animation-timing-function: ease-out;
50
+ opacity: 1;
51
+ }
52
+ to {
53
+ -webkit-transform: scale(1);
54
+ }
55
+ }