hologram 1.0.1 → 1.1.0
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/.travis.yml +2 -2
- data/README.md +169 -82
- data/{lib/hologram_markdown_renderer.rb → example_markdown_renderer.rb.example} +6 -2
- data/hologram.gemspec +3 -3
- data/lib/hologram.rb +11 -1
- data/lib/hologram/cli.rb +45 -0
- data/lib/hologram/doc_block_collection.rb +23 -20
- data/lib/hologram/doc_builder.rb +160 -155
- data/lib/hologram/doc_parser.rb +26 -25
- data/lib/hologram/document_block.rb +27 -5
- data/lib/hologram/errors.rb +12 -0
- data/lib/hologram/markdown_renderer.rb +49 -0
- data/lib/hologram/template_variables.rb +1 -1
- data/lib/hologram/utils.rb +16 -0
- data/lib/hologram/version.rb +1 -1
- data/lib/template/hologram_config.yml +2 -2
- data/spec/cli_spec.rb +37 -0
- data/spec/display_message_spec.rb +0 -17
- data/spec/doc_block_collection_spec.rb +4 -4
- data/spec/doc_builder_spec.rb +131 -48
- data/spec/doc_parser_spec.rb +64 -3
- data/spec/document_block_spec.rb +65 -4
- data/spec/fixtures/renderer/invalid_renderer.rb +2 -0
- data/spec/fixtures/renderer/valid_renderer.rb +2 -0
- data/spec/hologram_markdown_renderer_spec.rb +14 -0
- data/spec/spec_helper.rb +17 -0
- data/spec/utils_spec.rb +52 -0
- metadata +36 -22
data/spec/doc_parser_spec.rb
CHANGED
@@ -28,6 +28,34 @@ Markdown stuff
|
|
28
28
|
eos
|
29
29
|
end
|
30
30
|
|
31
|
+
let(:multi_category_child_doc) do
|
32
|
+
<<-eos
|
33
|
+
/*doc
|
34
|
+
---
|
35
|
+
parent: multi
|
36
|
+
name: otherStyle
|
37
|
+
title: MultiChild
|
38
|
+
---
|
39
|
+
Markdown stuff
|
40
|
+
multi-child
|
41
|
+
*/
|
42
|
+
eos
|
43
|
+
end
|
44
|
+
|
45
|
+
let(:multi_category_doc) do
|
46
|
+
<<-eos
|
47
|
+
/*doc
|
48
|
+
---
|
49
|
+
title: MultiParent
|
50
|
+
name: multi
|
51
|
+
category: [Foo, Bar]
|
52
|
+
---
|
53
|
+
Markdown stuff
|
54
|
+
multi-parent
|
55
|
+
*/
|
56
|
+
eos
|
57
|
+
end
|
58
|
+
|
31
59
|
let(:source_path) { 'spec/fixtures/source' }
|
32
60
|
let(:temp_doc) { File.join(source_path, 'components', 'button', 'skin', 'testSkin.css') }
|
33
61
|
|
@@ -36,11 +64,23 @@ eos
|
|
36
64
|
context '#parse' do
|
37
65
|
let(:result) { parser.parse }
|
38
66
|
let(:pages) { result[0] }
|
39
|
-
let(:
|
67
|
+
let(:output_files_by_category) { result[1] }
|
40
68
|
|
41
|
-
it 'builds and returns a hash of pages and a hash of
|
69
|
+
it 'builds and returns a hash of pages and a hash of output_files_by_category' do
|
42
70
|
expect(pages).to be_a Hash
|
43
|
-
expect(
|
71
|
+
expect(output_files_by_category).to be_a Hash
|
72
|
+
end
|
73
|
+
|
74
|
+
context 'when the component has two categories' do
|
75
|
+
around do |example|
|
76
|
+
File.open(temp_doc, 'a+'){ |io| io << multi_category_doc }
|
77
|
+
example.run
|
78
|
+
FileUtils.rm(temp_doc)
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'adds two categories to output_files_by_category' do
|
82
|
+
expect(output_files_by_category).to eql({'Foo'=>'foo.html', 'Base CSS'=>'base_css.html', 'Bar'=>'bar.html'})
|
83
|
+
end
|
44
84
|
end
|
45
85
|
|
46
86
|
|
@@ -89,5 +129,26 @@ eos
|
|
89
129
|
expect(pages['base_css.html'][:md]).to include '<h2 id="otherStyle">Some other style</h2>'
|
90
130
|
end
|
91
131
|
end
|
132
|
+
|
133
|
+
context 'when a source doc is the child of a multi category doc block' do
|
134
|
+
around do |example|
|
135
|
+
File.open(temp_doc, 'w'){ |io|
|
136
|
+
io << multi_category_doc
|
137
|
+
io << multi_category_child_doc
|
138
|
+
}
|
139
|
+
example.run
|
140
|
+
FileUtils.rm(temp_doc)
|
141
|
+
end
|
142
|
+
|
143
|
+
it 'should not output duplicate content' do
|
144
|
+
objects = expect(pages['foo.html'][:md]).not_to match(/multi-parent.*multi-child.*multi-child/m)
|
145
|
+
objects = expect(pages['bar.html'][:md]).not_to match(/multi-parent.*multi-child.*multi-child/m)
|
146
|
+
end
|
147
|
+
|
148
|
+
it 'should correctly order content in each page' do
|
149
|
+
objects = expect(pages['foo.html'][:md]).to match(/multi-parent.*multi-child/m)
|
150
|
+
objects = expect(pages['bar.html'][:md]).to match(/multi-parent.*multi-child/m)
|
151
|
+
end
|
152
|
+
end
|
92
153
|
end
|
93
154
|
end
|
data/spec/document_block_spec.rb
CHANGED
@@ -8,17 +8,68 @@ describe Hologram::DocumentBlock do
|
|
8
8
|
let(:markdown){ 'blah' }
|
9
9
|
let(:doc_block){ subject.class.new(config, markdown) }
|
10
10
|
|
11
|
+
context '.from_comment' do
|
12
|
+
let(:doc) do
|
13
|
+
<<-eos
|
14
|
+
/*doc
|
15
|
+
---
|
16
|
+
title: Some other style
|
17
|
+
name: otherStyle
|
18
|
+
category: Foo
|
19
|
+
---
|
20
|
+
Markdown stuff
|
21
|
+
*/
|
22
|
+
eos
|
23
|
+
end
|
24
|
+
|
25
|
+
let(:bad_doc) do
|
26
|
+
<<-eos
|
27
|
+
/*doc
|
28
|
+
---
|
29
|
+
: :
|
30
|
+
---
|
31
|
+
Markdown stuff
|
32
|
+
*/
|
33
|
+
eos
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'initializes a new document block from a matching comment' do
|
37
|
+
doc_block = Hologram::DocumentBlock.from_comment(doc)
|
38
|
+
expect(doc_block).to be_a Hologram::DocumentBlock
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'raises CommentLoadError when the yaml section is bad' do
|
42
|
+
expect{
|
43
|
+
Hologram::DocumentBlock.from_comment(bad_doc)
|
44
|
+
}.to raise_error Hologram::CommentLoadError
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'returns nothing if its not a valid doc block' do
|
48
|
+
doc_block = Hologram::DocumentBlock.from_comment('foo')
|
49
|
+
expect(doc_block).to be_nil
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'sets up the usual attrs using the YAML and markdown text' do
|
53
|
+
doc_block = Hologram::DocumentBlock.from_comment(doc)
|
54
|
+
expect(doc_block.name).to eql 'otherStyle'
|
55
|
+
expect(doc_block.categories).to eql ['Foo']
|
56
|
+
expect(doc_block.title).to eql 'Some other style'
|
57
|
+
expect(doc_block.markdown).to eql "/*doc\n\nMarkdown stuff\n*/\n"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
11
61
|
context '#set_members' do
|
12
62
|
it 'sets accessors for the the block config' do
|
13
|
-
|
14
|
-
|
15
|
-
|
63
|
+
expect(doc_block.send('name')).to eql 'foo'
|
64
|
+
expect(doc_block.send('categories')).to eql ['bar']
|
65
|
+
expect(doc_block.send('title')).to eql 'baz'
|
66
|
+
expect(doc_block.send('parent')).to eql 'pop'
|
16
67
|
end
|
17
68
|
end
|
18
69
|
|
19
70
|
context '#get_hash' do
|
20
71
|
let(:meta) do
|
21
|
-
{ :name => 'foo', :
|
72
|
+
{ :name => 'foo', :categories => ['bar'], :title => 'baz', :parent => 'pop' }
|
22
73
|
end
|
23
74
|
|
24
75
|
it 'returns a hash of meta info' do
|
@@ -41,6 +92,11 @@ describe Hologram::DocumentBlock do
|
|
41
92
|
it 'returns false' do
|
42
93
|
expect(invalid_doc_block.is_valid?).to eql false
|
43
94
|
end
|
95
|
+
|
96
|
+
it 'populates errors' do
|
97
|
+
invalid_doc_block.is_valid?
|
98
|
+
expect(invalid_doc_block.errors).to include('Missing name or title config value')
|
99
|
+
end
|
44
100
|
end
|
45
101
|
|
46
102
|
context 'when markdown is not present' do
|
@@ -51,6 +107,11 @@ describe Hologram::DocumentBlock do
|
|
51
107
|
it 'returns false' do
|
52
108
|
expect(invalid_doc_block.is_valid?).to eql false
|
53
109
|
end
|
110
|
+
|
111
|
+
it 'populates errors' do
|
112
|
+
invalid_doc_block.is_valid?
|
113
|
+
expect(invalid_doc_block.errors).to include('Missing required markdown')
|
114
|
+
end
|
54
115
|
end
|
55
116
|
end
|
56
117
|
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe HologramMarkdownRenderer do
|
4
|
+
context 'for backwards compatability' do
|
5
|
+
it 'is retained' do
|
6
|
+
capture(:stdout) {
|
7
|
+
class TestFoo < HologramMarkdownRenderer
|
8
|
+
end
|
9
|
+
}
|
10
|
+
|
11
|
+
expect(TestFoo.ancestors).to include Hologram::MarkdownRenderer
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -5,3 +5,20 @@ require 'tmpdir'
|
|
5
5
|
RSpec.configure do |config|
|
6
6
|
config.order = "random"
|
7
7
|
end
|
8
|
+
|
9
|
+
#Rails kernerl helper
|
10
|
+
def capture(stream)
|
11
|
+
stream = stream.to_s
|
12
|
+
captured_stream = Tempfile.new(stream)
|
13
|
+
stream_io = eval("$#{stream}")
|
14
|
+
origin_stream = stream_io.dup
|
15
|
+
stream_io.reopen(captured_stream)
|
16
|
+
|
17
|
+
yield
|
18
|
+
|
19
|
+
stream_io.rewind
|
20
|
+
return captured_stream.read
|
21
|
+
ensure
|
22
|
+
captured_stream.unlink
|
23
|
+
stream_io.reopen(origin_stream)
|
24
|
+
end
|
data/spec/utils_spec.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Hologram::Utils do
|
4
|
+
context '.get_markdown_renderer' do
|
5
|
+
subject(:utils) { Hologram::Utils }
|
6
|
+
|
7
|
+
around do |example|
|
8
|
+
Hologram::DisplayMessage.quiet!
|
9
|
+
current_dir = Dir.pwd
|
10
|
+
Dir.chdir('spec/fixtures/renderer')
|
11
|
+
|
12
|
+
example.run
|
13
|
+
|
14
|
+
Dir.chdir(current_dir)
|
15
|
+
Hologram::DisplayMessage.show!
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'by default' do
|
19
|
+
let(:renderer) { utils.get_markdown_renderer }
|
20
|
+
|
21
|
+
it 'returns the standard hologram markdown renderer' do
|
22
|
+
expect(renderer).to eql Hologram::MarkdownRenderer
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'when passed a valid custom renderer' do
|
27
|
+
let(:renderer) { utils.get_markdown_renderer('valid_renderer.rb') }
|
28
|
+
|
29
|
+
it 'returns the custom renderer' do
|
30
|
+
expect(renderer).to eql ValidRenderer
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'when passed an invalid custom renderer' do
|
35
|
+
context 'expecting a class named as the upper camel cased version of the file name' do
|
36
|
+
it 'exits' do
|
37
|
+
expect {
|
38
|
+
utils.get_markdown_renderer('invalid_renderer.rb')
|
39
|
+
}.to raise_error SystemExit
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'expecting a filename.rb' do
|
44
|
+
it 'exits' do
|
45
|
+
expect {
|
46
|
+
utils.get_markdown_renderer('foo')
|
47
|
+
}.to raise_error SystemExit
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hologram
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- JD Cantrell
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-05-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: redcarpet
|
@@ -17,42 +17,28 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - ~>
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: 2.2
|
20
|
+
version: '2.2'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - ~>
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: 2.2
|
27
|
+
version: '2.2'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: pygments.rb
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
32
|
- - ~>
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: 0.4
|
34
|
+
version: '0.4'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - ~>
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: 0.4
|
42
|
-
- !ruby/object:Gem::Dependency
|
43
|
-
name: rspec
|
44
|
-
requirement: !ruby/object:Gem::Requirement
|
45
|
-
requirements:
|
46
|
-
- - ~>
|
47
|
-
- !ruby/object:Gem::Version
|
48
|
-
version: 2.14.1
|
49
|
-
type: :runtime
|
50
|
-
prerelease: false
|
51
|
-
version_requirements: !ruby/object:Gem::Requirement
|
52
|
-
requirements:
|
53
|
-
- - ~>
|
54
|
-
- !ruby/object:Gem::Version
|
55
|
-
version: 2.14.1
|
41
|
+
version: '0.4'
|
56
42
|
- !ruby/object:Gem::Dependency
|
57
43
|
name: bundler
|
58
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,6 +67,20 @@ dependencies:
|
|
81
67
|
- - '>='
|
82
68
|
- !ruby/object:Gem::Version
|
83
69
|
version: '0'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: rspec
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ~>
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '2.14'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ~>
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '2.14'
|
84
84
|
description: Build doc type things
|
85
85
|
email:
|
86
86
|
- jcantrell@trulia.com
|
@@ -96,24 +96,31 @@ files:
|
|
96
96
|
- README.md
|
97
97
|
- Rakefile
|
98
98
|
- bin/hologram
|
99
|
+
- example_markdown_renderer.rb.example
|
99
100
|
- hologram.gemspec
|
100
101
|
- lib/hologram.rb
|
102
|
+
- lib/hologram/cli.rb
|
101
103
|
- lib/hologram/display_message.rb
|
102
104
|
- lib/hologram/doc_block_collection.rb
|
103
105
|
- lib/hologram/doc_builder.rb
|
104
106
|
- lib/hologram/doc_parser.rb
|
105
107
|
- lib/hologram/document_block.rb
|
108
|
+
- lib/hologram/errors.rb
|
109
|
+
- lib/hologram/markdown_renderer.rb
|
106
110
|
- lib/hologram/template_variables.rb
|
111
|
+
- lib/hologram/utils.rb
|
107
112
|
- lib/hologram/version.rb
|
108
|
-
- lib/hologram_markdown_renderer.rb
|
109
113
|
- lib/template/doc_assets/_footer.html
|
110
114
|
- lib/template/doc_assets/_header.html
|
111
115
|
- lib/template/hologram_config.yml
|
116
|
+
- spec/cli_spec.rb
|
112
117
|
- spec/display_message_spec.rb
|
113
118
|
- spec/doc_block_collection_spec.rb
|
114
119
|
- spec/doc_builder_spec.rb
|
115
120
|
- spec/doc_parser_spec.rb
|
116
121
|
- spec/document_block_spec.rb
|
122
|
+
- spec/fixtures/renderer/invalid_renderer.rb
|
123
|
+
- spec/fixtures/renderer/valid_renderer.rb
|
117
124
|
- spec/fixtures/source/components/background/backgrounds.css
|
118
125
|
- spec/fixtures/source/components/button/buttons.css
|
119
126
|
- spec/fixtures/source/components/button/skin/buttonSkins.css
|
@@ -127,7 +134,9 @@ files:
|
|
127
134
|
- spec/fixtures/styleguide/extra/css/screen.css
|
128
135
|
- spec/fixtures/styleguide/index.html
|
129
136
|
- spec/fixtures/styleguide/static/css/doc.css
|
137
|
+
- spec/hologram_markdown_renderer_spec.rb
|
130
138
|
- spec/spec_helper.rb
|
139
|
+
- spec/utils_spec.rb
|
131
140
|
homepage: http://trulia.github.io/hologram
|
132
141
|
licenses:
|
133
142
|
- MIT
|
@@ -148,16 +157,19 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
148
157
|
version: '0'
|
149
158
|
requirements: []
|
150
159
|
rubyforge_project:
|
151
|
-
rubygems_version: 2.0.
|
160
|
+
rubygems_version: 2.0.14
|
152
161
|
signing_key:
|
153
162
|
specification_version: 4
|
154
163
|
summary: Build document type things.
|
155
164
|
test_files:
|
165
|
+
- spec/cli_spec.rb
|
156
166
|
- spec/display_message_spec.rb
|
157
167
|
- spec/doc_block_collection_spec.rb
|
158
168
|
- spec/doc_builder_spec.rb
|
159
169
|
- spec/doc_parser_spec.rb
|
160
170
|
- spec/document_block_spec.rb
|
171
|
+
- spec/fixtures/renderer/invalid_renderer.rb
|
172
|
+
- spec/fixtures/renderer/valid_renderer.rb
|
161
173
|
- spec/fixtures/source/components/background/backgrounds.css
|
162
174
|
- spec/fixtures/source/components/button/buttons.css
|
163
175
|
- spec/fixtures/source/components/button/skin/buttonSkins.css
|
@@ -171,4 +183,6 @@ test_files:
|
|
171
183
|
- spec/fixtures/styleguide/extra/css/screen.css
|
172
184
|
- spec/fixtures/styleguide/index.html
|
173
185
|
- spec/fixtures/styleguide/static/css/doc.css
|
186
|
+
- spec/hologram_markdown_renderer_spec.rb
|
174
187
|
- spec/spec_helper.rb
|
188
|
+
- spec/utils_spec.rb
|