hologram 1.3.1 → 1.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b0342d18f4b8efdeb45281ae626fd406eb957ec7
4
- data.tar.gz: c75e2c8bc874ab6933fc1e91075c837912f8f2f9
3
+ metadata.gz: 3bbee4bb5cc8c9c22b1e102dd0dfb5d4e0bf3399
4
+ data.tar.gz: 9d179e3adbc3e2845b06f584ad50565aa41c8583
5
5
  SHA512:
6
- metadata.gz: 0cdd1efba7738ae5129030f0ce399cd57a621a199a6faf65e31dca37c4573d775eb1a12fe178e7476fffa76e84d7fc30a8869092011ca3a3cadf5e35fc360b58
7
- data.tar.gz: 353cd7f8fc431ab2f3520a30b566df28cd6f6557025e240685d5e5bc1c389bdc2941d0b36e753e0054c1c40ffc98bbdc48f73beeba1e7d05fa04b00ea8afe667
6
+ metadata.gz: fd7de23120bde386cd1d1de46d11f72df1a165af983d61217ac2f06ef0ecc6f4bf8d833c6c61a8da26f636f71353d4dea3354e7297fe8fed345acecca1258613
7
+ data.tar.gz: f38eb0c5d036d72e16acac3705378de8de014e6dbed86f7813fe8833b4159a964adf63161cc158396b0316d7cb17a4cad8690477844e22d108dd5b092a6969f6
@@ -1,5 +1,31 @@
1
1
  #Changelog
2
2
 
3
+ ##1.4.0 - 2015-03-29
4
+
5
+ New Features:
6
+
7
+ Joe Bartlett
8
+ * Allow markdown files to contain hologram yaml
9
+
10
+ Anthony Chen
11
+ * Add config option for allowing additional file extensions to be
12
+ processed
13
+
14
+ JD Cantrell
15
+ * Add config option to ignore specific paths and files.
16
+
17
+ Bug fixes:
18
+
19
+ Noppanit Charassinvichai and Ryan Mathews
20
+ * Correctly copy assets
21
+
22
+ JD Cantrell
23
+ * Use correct title for index category pages
24
+ * Make scss regex behave like sass regex
25
+ * Template variables for erb files no longer vary based on when the erb
26
+ is processed.
27
+
28
+
3
29
  ##1.3.0 - 2015-01-15
4
30
 
5
31
  Spencer Hurst, Beatrice Peng, and Geoff Pleiss
data/README.md CHANGED
@@ -163,11 +163,20 @@ Your config file needs to contain the following key/value pairs
163
163
  that they are included on your pages. A simple way to do this is to add
164
164
  `<link>` and `<script src=>` tags to the `_header.html` file.
165
165
 
166
+ * **ignore_paths**: (optional) a **list** of paths to ignore. This can be a file
167
+ name or a glob. Be sure to wrap globs in double quotes to keep yaml
168
+ from getting too upset (ie good:"*.erb" vs bad:*.erb).
169
+
166
170
  * **nav_level**: (optional) Sets the level of section navigation desired.
167
171
  `section` sets it to show sub navigation in top level sections.
168
172
  `all` sets it to show sub navigation for all sections. `all` can be a bit
169
173
  much, you'll probably want `section`.
170
174
 
175
+ * **custom_extensions**: (optional) Additional file extensions that will be
176
+ included in the parse. Accepts both a single value and an array. The
177
+ current supported file extensions are `.css`, `.scss`, `.less`, `.sass`,
178
+ `.styl`, `.js`, `.md`, `.markdown` and `.erb`.
179
+
171
180
  * **exit_on_warnings**: (optional) Hologram displays warnings when there
172
181
  are issues with your docs (e.g. if a component's parent is not found,
173
182
  if the _header.html and/or _footer.html files aren't found)
@@ -213,7 +222,7 @@ Your config file needs to contain the following key/value pairs
213
222
  - ./build
214
223
 
215
224
  # Mark which category should be the index page
216
- # Alternatively, you may have an index.md in the documentation assets
225
+ # Alternatively, you may have an index.md in the source directory root
217
226
  # folder instead of specifying this config.
218
227
  index: basics
219
228
 
@@ -337,6 +346,10 @@ following keys:
337
346
  component. If this is set, the current component will be displayed as
338
347
  a section within the **parent**'s documentation, but only if it specifies
339
348
  the same **category**, or allows the **category** to be inherited from its **parent**.
349
+ * **hologram**: (markdown only) To avoid conflicts with Jekyll and
350
+ other YAML+markdown formats, Markdown (`.md`) files must include a
351
+ `hologram: true` key/value pair in the YAML block to indicate that
352
+ it is intended to be processed by Hologram.
340
353
 
341
354
  For example, you might have a component with the **name** *buttons* and
342
355
  another component named *buttonSkins*. You could set the **parent** for
@@ -63,6 +63,8 @@ module Hologram
63
63
  @exit_on_warnings = options['exit_on_warnings']
64
64
  @code_example_templates = options['code_example_templates']
65
65
  @code_example_renderers = options['code_example_renderers']
66
+ @custom_extensions = Array(options['custom_extensions'])
67
+ @ignore_paths = options.fetch('ignore_paths', [])
66
68
 
67
69
  if @exit_on_warnings
68
70
  DisplayMessage.exit_on_warnings!
@@ -132,7 +134,9 @@ module Hologram
132
134
  end
133
135
 
134
136
  def build_docs
135
- doc_parser = DocParser.new(input_dir, index, @plugins, nav_level: @nav_level)
137
+ doc_parser = DocParser.new(input_dir, index, @plugins, nav_level: @nav_level,
138
+ custom_extensions: @custom_extensions,
139
+ ignore_paths: @ignore_paths)
136
140
  @pages, @categories = doc_parser.parse
137
141
 
138
142
  if index && !@pages.has_key?(index + '.html')
@@ -151,7 +155,8 @@ module Hologram
151
155
  # ignore . and .. directories and files that start with
152
156
  # underscore
153
157
  next if item == '.' or item == '..' or item.start_with?('_')
154
- FileUtils.rm "#{output_dir}/#{item}", :force => true
158
+ FileUtils.rm "#{output_dir}/#{item}", :force => true if File.file?("#{output_dir}/#{item}")
159
+ FileUtils.rm_rf "#{output_dir}/#{item}" if File.directory?("#{output_dir}/#{item}")
155
160
  FileUtils.cp_r "#{doc_assets_dir}/#{item}", "#{output_dir}/#{item}"
156
161
  end
157
162
  end
@@ -1,6 +1,6 @@
1
1
  module Hologram
2
2
  class DocParser
3
- SUPPORTED_EXTENSIONS = ['.css', '.scss', '.less', '.sass', '.styl', '.js', '.md', '.markdown', '.erb' ]
3
+ DEFAULT_SUPPORTED_EXTENSIONS = ['.css', '.scss', '.less', '.sass', '.styl', '.js', '.md', '.markdown', '.erb' ]
4
4
  attr_accessor :source_path, :pages, :doc_blocks, :nav_level
5
5
 
6
6
  def initialize(source_path, index_name = nil, plugins=[], opts={})
@@ -10,6 +10,9 @@ module Hologram
10
10
  @nav_level = opts[:nav_level] || 'page'
11
11
  @pages = {}
12
12
  @output_files_by_category = {}
13
+ @supported_extensions = DEFAULT_SUPPORTED_EXTENSIONS
14
+ @supported_extensions += opts[:custom_extensions] if opts[:custom_extensions]
15
+ @ignore_paths = opts[:ignore_paths] || []
13
16
  end
14
17
 
15
18
  def parse
@@ -44,6 +47,8 @@ module Hologram
44
47
  name = @index_name + '.html'
45
48
  if @pages.has_key?(name)
46
49
  @pages['index.html'] = @pages[name]
50
+ title, _ = @output_files_by_category.rassoc(name)
51
+ @output_files_by_category[title] = 'index.html'
47
52
  end
48
53
  end
49
54
 
@@ -69,9 +74,18 @@ module Hologram
69
74
  end
70
75
 
71
76
  def process_files(files, directory, doc_block_collection)
72
- files.each do |input_file|
77
+
78
+ if !@ignore_paths.empty?
79
+ valid_files = files.select { |input_file|
80
+ @ignore_paths.select { |glob| File.fnmatch(glob, input_file) }.empty?
81
+ }
82
+ else
83
+ valid_files = files
84
+ end
85
+
86
+ valid_files.each do |input_file|
73
87
  if input_file.end_with?('md')
74
- @pages[File.basename(input_file, '.md') + '.html'] = {:md => File.read("#{directory}/#{input_file}"), :blocks => []}
88
+ process_markdown_file("#{directory}/#{input_file}", doc_block_collection)
75
89
  elsif input_file.end_with?('erb')
76
90
  @pages[File.basename(input_file, '.erb')] = {:erb => File.read("#{directory}/#{input_file}")}
77
91
  else
@@ -80,6 +94,16 @@ module Hologram
80
94
  end
81
95
  end
82
96
 
97
+ def process_markdown_file(file, doc_block_collection)
98
+ file_str = File.read(file)
99
+
100
+ if file_str.match(/^-{3}\n.*hologram:\s*true.*-{3}/m)
101
+ doc_block_collection.add_doc_block(file_str, file)
102
+ else
103
+ @pages[File.basename(file, '.md') + '.html'] = {:md => file_str, :blocks => []}
104
+ end
105
+ end
106
+
83
107
  def process_file(file, doc_block_collection)
84
108
  file_str = File.read(file)
85
109
  # get any comment blocks that match the patterns:
@@ -90,7 +114,7 @@ module Hologram
90
114
  #comment, this fixes haml when using this comment style
91
115
  hologram_comments = file_str.scan(/\s*\/\/doc\s*((( [^\n]*\n)|\n)+)/).map{ |arr| [arr[0].gsub(/^[ \t]{2}/,'')] }
92
116
  else
93
- hologram_comments = file_str.scan(/^\s*\/\*doc(.*?)\*\//m)
117
+ hologram_comments = file_str.scan(/\s*\/\*doc(.*?)\*\//m)
94
118
 
95
119
  #check if scss file has sass comments
96
120
  if hologram_comments.length == 0 and file.end_with?('.scss')
@@ -129,7 +153,7 @@ module Hologram
129
153
  end
130
154
 
131
155
  def is_supported_file_type?(file)
132
- SUPPORTED_EXTENSIONS.include?(File.extname(file)) and !Dir.exists?(file)
156
+ @supported_extensions.include?(File.extname(file)) and !Dir.exists?(file)
133
157
  end
134
158
 
135
159
  def get_file_name(str)
@@ -10,7 +10,7 @@ module Hologram
10
10
 
11
11
  def set_args(args)
12
12
  args.each do |k,v|
13
- instance_variable_set("@#{k}", v) unless v.nil?
13
+ instance_variable_set("@#{k}", v)
14
14
  end
15
15
  end
16
16
 
@@ -25,5 +25,5 @@
25
25
  # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
26
 
27
27
  module Hologram
28
- VERSION = "1.3.1"
28
+ VERSION = "1.4.0"
29
29
  end
@@ -252,6 +252,8 @@ describe Hologram::DocBuilder do
252
252
  builder.build
253
253
  expect(File.read(File.expand_path('../fixtures/styleguide/base_css.html', __FILE__))).to eq File.read(File.join(builder.destination, '.', 'base_css.html'))
254
254
  expect(File.read(File.expand_path('../fixtures/styleguide/index.html', __FILE__))).to eq File.read(File.join(builder.destination, '.', 'index.html'))
255
+ expect(File.read(File.expand_path('../fixtures/styleguide/code.html', __FILE__))).to eq File.read(File.join(builder.destination, '.', 'code.html'))
256
+ expect(File.read(File.expand_path('../fixtures/styleguide/jekyll.html', __FILE__))).to eq File.read(File.join(builder.destination, '.', 'jekyll.html'))
255
257
  end
256
258
  end
257
259
  end
@@ -120,7 +120,7 @@ multi-parent
120
120
  end
121
121
 
122
122
  it 'adds two categories to output_files_by_category' do
123
- expect(output_files_by_category).to eql({'Foo'=>'foo.html', 'Base CSS'=>'base_css.html', 'Bar'=>'bar.html'})
123
+ expect(output_files_by_category).to eql({'Foo'=>'foo.html', 'Base CSS'=>'base_css.html', 'Bar'=>'bar.html', 'Code'=>'code.html'})
124
124
  end
125
125
  end
126
126
 
@@ -0,0 +1,12 @@
1
+ ---
2
+ hologram: true
3
+ title: BEM-like class naming
4
+ name: bem
5
+ category: Code
6
+ ---
7
+
8
+ We use a BEM-like naming convention [similar to Harry Roberts'](http://cssguidelin.es/#bem-like-naming):
9
+
10
+ .block {}
11
+ .block__element {}
12
+ .block--modifier {}
@@ -0,0 +1,7 @@
1
+ ---
2
+ layout: post
3
+ title: Blogging Like a Hacker
4
+ ---
5
+
6
+ This is an example of a markdown file whose YAML frontmatter will
7
+ be ignored by Hologram.
@@ -0,0 +1,73 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width">
6
+
7
+ <title>My Style Guide Code</title>
8
+
9
+ <!-- Styleguide CSS -->
10
+ <link rel="stylesheet" href="static/css/doc.css">
11
+ <link rel="stylesheet" href="static/css/github.css">
12
+
13
+ <!-- CSS to be documented -->
14
+ <link rel="stylesheet" href="extra/css/screen.css">
15
+ </head>
16
+
17
+ <body>
18
+ <header class="header pbn" role="banner">
19
+ <div class="backgroundHighlight typeReversed1">
20
+ <div class="container">
21
+ <h1 class="h2 mvs">My Style Guide</h1>
22
+ </div>
23
+ </div>
24
+ <div class="backgroundLowlight typeReversed1">
25
+ <div class="container">
26
+ <span>
27
+ <ul class="docNav listInline">
28
+ <!-- Add you pages here -->
29
+ <li><a href="index.html">Intro</a></li>
30
+ <li><a href="base_css.html">Base CSS</a></li>
31
+ </ul>
32
+ </span>
33
+ </div>
34
+ </div>
35
+ <!-- //header/container -->
36
+ </header>
37
+
38
+ <div class="content">
39
+ <section>
40
+ <div class="line">
41
+
42
+ <div class="col cols4">
43
+ <div class="componentMenu box boxBasic backgroundBasic">
44
+ <div class="boxBody pan">
45
+ <ul class="componentList listBorderedHover">
46
+
47
+ <li><a href="#bem">BEM-like class naming</a></li>
48
+
49
+ </ul>
50
+ </div>
51
+ </div>
52
+ </div>
53
+
54
+ <div class="main col cols20 lastCol">
55
+
56
+
57
+
58
+ <h1 id="bem" class="styleguide">BEM-like class naming</h1>
59
+ <p class="styleguide">We use a BEM-like naming convention <a class="styleguide" href="http://cssguidelin.es/#bem-like-naming" title="http://cssguidelin.es/#bem-like-naming">similar to Harry Roberts&#39;</a>:</p><div class="codeBlock">
60
+ <div class="highlight">
61
+ <pre>.block {}
62
+ .block__element {}
63
+ .block--modifier {}</pre>
64
+ </div>
65
+ </div> </div>
66
+ </div>
67
+ </section>
68
+ <footer>
69
+ The source code for this style guide is licensed under the MIT license.
70
+ </footer>
71
+ </div>
72
+ </body>
73
+ </html>
@@ -0,0 +1,68 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width">
6
+
7
+ <title>My Style Guide </title>
8
+
9
+ <!-- Styleguide CSS -->
10
+ <link rel="stylesheet" href="static/css/doc.css">
11
+ <link rel="stylesheet" href="static/css/github.css">
12
+
13
+ <!-- CSS to be documented -->
14
+ <link rel="stylesheet" href="extra/css/screen.css">
15
+ </head>
16
+
17
+ <body>
18
+ <header class="header pbn" role="banner">
19
+ <div class="backgroundHighlight typeReversed1">
20
+ <div class="container">
21
+ <h1 class="h2 mvs">My Style Guide</h1>
22
+ </div>
23
+ </div>
24
+ <div class="backgroundLowlight typeReversed1">
25
+ <div class="container">
26
+ <span>
27
+ <ul class="docNav listInline">
28
+ <!-- Add you pages here -->
29
+ <li><a href="index.html">Intro</a></li>
30
+ <li><a href="base_css.html">Base CSS</a></li>
31
+ </ul>
32
+ </span>
33
+ </div>
34
+ </div>
35
+ <!-- //header/container -->
36
+ </header>
37
+
38
+ <div class="content">
39
+ <section>
40
+ <div class="line">
41
+
42
+ <div class="col cols4">
43
+ <div class="componentMenu box boxBasic backgroundBasic">
44
+ <div class="boxBody pan">
45
+ <ul class="componentList listBorderedHover">
46
+
47
+ </ul>
48
+ </div>
49
+ </div>
50
+ </div>
51
+
52
+ <div class="main col cols20 lastCol">
53
+
54
+
55
+
56
+ <hr>
57
+ <p class="styleguide">layout: post</p>
58
+ <h2>title: Blogging Like a Hacker</h2>
59
+ <p class="styleguide">This is an example of a markdown file whose YAML frontmatter will
60
+ be ignored by Hologram.</p> </div>
61
+ </div>
62
+ </section>
63
+ <footer>
64
+ The source code for this style guide is licensed under the MIT license.
65
+ </footer>
66
+ </div>
67
+ </body>
68
+ </html>
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.3.1
4
+ version: 1.4.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: 2015-02-05 00:00:00.000000000 Z
12
+ date: 2015-03-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: redcarpet
@@ -180,9 +180,11 @@ files:
180
180
  - spec/fixtures/renderer/valid_renderer.rb
181
181
  - spec/fixtures/source/colors/colors.css
182
182
  - spec/fixtures/source/components/background/backgrounds.css
183
+ - spec/fixtures/source/components/bem.md
183
184
  - spec/fixtures/source/components/button/buttons.css
184
185
  - spec/fixtures/source/components/button/skin/buttonSkins.css
185
186
  - spec/fixtures/source/components/index.md
187
+ - spec/fixtures/source/components/jekyll.md
186
188
  - spec/fixtures/source/config.yml
187
189
  - spec/fixtures/source/config_multi_source.yml
188
190
  - spec/fixtures/source/extra/css/screen.css
@@ -190,8 +192,10 @@ files:
190
192
  - spec/fixtures/source/templates/_header.html
191
193
  - spec/fixtures/source/templates/static/css/doc.css
192
194
  - spec/fixtures/styleguide/base_css.html
195
+ - spec/fixtures/styleguide/code.html
193
196
  - spec/fixtures/styleguide/extra/css/screen.css
194
197
  - spec/fixtures/styleguide/index.html
198
+ - spec/fixtures/styleguide/jekyll.html
195
199
  - spec/fixtures/styleguide/static/css/doc.css
196
200
  - spec/hologram_markdown_renderer_spec.rb
197
201
  - spec/link_helper_spec.rb
@@ -218,7 +222,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
218
222
  version: '0'
219
223
  requirements: []
220
224
  rubyforge_project:
221
- rubygems_version: 2.2.2
225
+ rubygems_version: 2.4.5
222
226
  signing_key:
223
227
  specification_version: 4
224
228
  summary: Build document type things.
@@ -237,9 +241,11 @@ test_files:
237
241
  - spec/fixtures/renderer/valid_renderer.rb
238
242
  - spec/fixtures/source/colors/colors.css
239
243
  - spec/fixtures/source/components/background/backgrounds.css
244
+ - spec/fixtures/source/components/bem.md
240
245
  - spec/fixtures/source/components/button/buttons.css
241
246
  - spec/fixtures/source/components/button/skin/buttonSkins.css
242
247
  - spec/fixtures/source/components/index.md
248
+ - spec/fixtures/source/components/jekyll.md
243
249
  - spec/fixtures/source/config.yml
244
250
  - spec/fixtures/source/config_multi_source.yml
245
251
  - spec/fixtures/source/extra/css/screen.css
@@ -247,8 +253,10 @@ test_files:
247
253
  - spec/fixtures/source/templates/_header.html
248
254
  - spec/fixtures/source/templates/static/css/doc.css
249
255
  - spec/fixtures/styleguide/base_css.html
256
+ - spec/fixtures/styleguide/code.html
250
257
  - spec/fixtures/styleguide/extra/css/screen.css
251
258
  - spec/fixtures/styleguide/index.html
259
+ - spec/fixtures/styleguide/jekyll.html
252
260
  - spec/fixtures/styleguide/static/css/doc.css
253
261
  - spec/hologram_markdown_renderer_spec.rb
254
262
  - spec/link_helper_spec.rb