middleman-build-reporter 0.0.1 → 0.0.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.
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
@@ -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
+ }
@@ -1,5 +1,5 @@
1
1
  module Middleman
2
- class BuildReporterExtension < Extension
2
+ class BuildReporterExtension < Middleman::Extension
3
3
  option :repo_root, nil, 'repo root'
4
4
  option :version, '', 'app version'
5
5
  option :reporter_file, 'build', 'build report file name'
@@ -9,21 +9,27 @@ module Middleman
9
9
  super
10
10
 
11
11
  @app = app
12
-
13
- @app.set :repo_root, (options.repo_root ? options.repo_root : app.root)
14
- @app.set :version, options.version
15
- @app.set :reporter_file, options.reporter_file
16
- @app.set :reporter_file_formats, options.reporter_file_formats
12
+ @app.set :repo_root, (options.repo_root ? options.repo_root : @app.root)
13
+ @app.set :build_report, Middleman::BuildReporter::Reporter.new(@app, options)
17
14
  end
18
15
 
19
16
  def after_build(builder)
20
- build_report.write do |file|
17
+ @app.build_report.write do |file|
21
18
  builder.say_status :create, file, :green
22
19
  end
23
20
  end
24
21
 
25
- def build_report
26
- @report ||= Middleman::BuildReporter::Reporter.new(@app)
22
+ helpers do
23
+ class Middleman::Application
24
+ def build_reporter_fingerprint
25
+ [
26
+ '<!--',
27
+ 'FINGERPRINT:',
28
+ "#{config.build_report.details.to_yaml}",
29
+ '--!>',
30
+ ].join("\n")
31
+ end
32
+ end
27
33
  end
28
34
  end
29
35
  end
@@ -5,16 +5,17 @@ require 'yaml'
5
5
  module Middleman
6
6
  module BuildReporter
7
7
  class Reporter
8
- attr_accessor :app
8
+ attr_accessor :app, :repo
9
9
 
10
- def initialize(app_instance)
10
+ def initialize(app_instance, opts = nil)
11
11
  @app = app_instance
12
12
 
13
- @app.set :repo, Git.open(@app.repo_root)
13
+ @options = opts
14
+ @repo = Git.open(opts.repo_root)
14
15
  end
15
16
 
16
17
  def write
17
- @app.reporter_file_formats.each do |format|
18
+ @options.reporter_file_formats.each do |format|
18
19
  file = "#{reporter_file_path}.#{format}"
19
20
 
20
21
  File.write(file, serialize(format))
@@ -24,7 +25,7 @@ module Middleman
24
25
  end
25
26
 
26
27
  def reporter_file_path
27
- "#{@app.build_dir}/#{@app.reporter_file}"
28
+ "#{@app.build_dir}/#{@options.reporter_file}"
28
29
  end
29
30
 
30
31
  def reporter_extension_file_path
@@ -33,10 +34,10 @@ module Middleman
33
34
 
34
35
  def details
35
36
  {
36
- 'branch' => repo.current_branch,
37
- 'revision' => repo.log.first.to_s,
37
+ 'branch' => @repo.current_branch,
38
+ 'revision' => @repo.log.first.to_s,
38
39
  'build_time' => build_time.to_s,
39
- 'version' => @app.version
40
+ 'version' => @options.version
40
41
  }.merge(details_extension)
41
42
  end
42
43
 
@@ -51,11 +52,7 @@ module Middleman
51
52
  end
52
53
 
53
54
  def build_time
54
- @build_time ||= Time.now
55
- end
56
-
57
- def repo
58
- @app.repo
55
+ Time.now
59
56
  end
60
57
 
61
58
  def serialize(format)
@@ -1,5 +1,5 @@
1
1
  module Middleman
2
2
  module BuildReporter
3
- VERSION = '0.0.1'
3
+ VERSION = '0.0.2'
4
4
  end
5
5
  end
@@ -19,14 +19,14 @@ Gem::Specification.new do |s|
19
19
  s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
20
20
  s.require_paths = ['lib']
21
21
 
22
- s.add_runtime_dependency 'middleman-core'
23
- s.add_runtime_dependency 'git'
22
+ s.add_runtime_dependency 'middleman-core', '>= 3.0.0'
23
+ s.add_runtime_dependency 'git', '1.2.8'
24
24
 
25
- s.add_development_dependency 'rspec'
26
- s.add_development_dependency 'simplecov'
27
- s.add_development_dependency 'timecop'
28
- s.add_development_dependency 'cucumber'
29
- s.add_development_dependency 'aruba'
30
- s.add_development_dependency 'fivemat'
31
- s.add_development_dependency 'rake'
25
+ s.add_development_dependency 'rspec', '3.1.0'
26
+ s.add_development_dependency 'simplecov', '0.9.0'
27
+ s.add_development_dependency 'timecop', '0.7.1'
28
+ s.add_development_dependency 'cucumber', '1.3.17'
29
+ s.add_development_dependency 'aruba', '0.6.1'
30
+ s.add_development_dependency 'fivemat', '1.3.1'
31
+ s.add_development_dependency 'rake', '10.3.2'
32
32
  end
@@ -62,19 +62,14 @@ describe Middleman::BuildReporterExtension do
62
62
  end
63
63
  end
64
64
 
65
- describe '#build_report' do
66
-
67
- it 'returns a Middleman::BuildReporter::Reporter instance' do
68
- expect(extension.build_report.class).to eq Middleman::BuildReporter::Reporter
69
- end
70
- end
71
-
72
65
  describe '#after_build' do
73
66
 
74
67
  let(:builder) { double('builder', say_status: 'fake status') }
75
68
 
69
+ let(:build_report) { double('build_report', write: 'fake_write_result') }
70
+
76
71
  it 'writes the build report to a file' do
77
- allow(extension.build_report).to receive(:write).and_return 'fake_write_result'
72
+ allow(app).to receive(:build_report).and_return build_report
78
73
 
79
74
  expect(extension.after_build(builder)).to eq 'fake_write_result'
80
75
  end
@@ -6,15 +6,19 @@ describe Middleman::BuildReporter::Reporter do
6
6
 
7
7
  let(:fake_details) { { 'foo' => 'bar' } }
8
8
 
9
+ let(:options) do
10
+ double('options', {
11
+ repo_root: '.',
12
+ version: '1.2.3',
13
+ reporter_file: 'reporter_file',
14
+ reporter_file_formats: ['yaml']
15
+ })
16
+ end
17
+
9
18
  let(:app) { middleman_app('basic-app') }
10
19
 
11
20
  let(:reporter) do
12
- app.set :repo_root, '.'
13
- app.set :version, '1.2.3'
14
- app.set :reporter_file, 'reporter'
15
- app.set :reporter_file_formats, ['yaml']
16
-
17
- described_class.new app
21
+ described_class.new app, options
18
22
  end
19
23
 
20
24
  describe '#new' do
@@ -23,8 +27,8 @@ describe Middleman::BuildReporter::Reporter do
23
27
  expect(reporter.app).to eq app
24
28
  end
25
29
 
26
- it 'sets a #repo on the app instance it is passed' do
27
- expect(reporter.app.repo.class).to eq Git::Base
30
+ it 'sets a @repo on the reporter' do
31
+ expect(reporter.repo.class).to eq Git::Base
28
32
  end
29
33
  end
30
34
 
@@ -32,9 +36,8 @@ describe Middleman::BuildReporter::Reporter do
32
36
 
33
37
  it 'writes the build details to the proper "build" file' do
34
38
  allow(reporter).to receive(:details).and_return fake_details
35
- allow(reporter.app).to receive(:reporter_file).and_return 'fake_report_file'
36
39
 
37
- expect(File).to receive(:write).with('build/fake_report_file.yaml', "---\nfoo: bar\n").and_return 'fake_write_call'
40
+ expect(File).to receive(:write).with('build/reporter_file.yaml', "---\nfoo: bar\n").and_return 'fake_write_call'
38
41
 
39
42
  reporter.write
40
43
  end
@@ -43,7 +46,7 @@ describe Middleman::BuildReporter::Reporter do
43
46
  describe '#reporter_file_path' do
44
47
 
45
48
  it 'returns the file path to which the build details should be written' do
46
- expect(reporter.reporter_file_path).to eq 'build/reporter'
49
+ expect(reporter.reporter_file_path).to eq 'build/reporter_file'
47
50
  end
48
51
  end
49
52
 
@@ -81,7 +84,7 @@ describe Middleman::BuildReporter::Reporter do
81
84
  end
82
85
 
83
86
  it 'reports the app version' do
84
- expect(details['version']).to eq "#{app.version}"
87
+ expect(details['version']).to eq '1.2.3'
85
88
  end
86
89
 
87
90
  context 'when there is a custom details extension' do
@@ -140,21 +143,6 @@ describe Middleman::BuildReporter::Reporter do
140
143
  it 'reports the current time' do
141
144
  expect(reporter.build_time.strftime('%Y-%m-%d %H:%M')).to eq Time.now.strftime('%Y-%m-%d %H:%M')
142
145
  end
143
-
144
- context 'when build time is already set' do
145
- it 'returns the existing value' do
146
- reporter.instance_variable_set('@build_time', 'foo')
147
-
148
- expect(reporter.build_time).to eq 'foo'
149
- end
150
- end
151
- end
152
-
153
- describe '#repo' do
154
-
155
- it 'is a shortcut to app#repo' do
156
- expect(reporter.repo).to eq app.repo
157
- end
158
146
  end
159
147
 
160
148
  describe '#serialize' do