smarky 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -0
- data/bin/smarky +1 -4
- data/lib/smarky/element.rb +14 -2
- data/lib/smarky/version.rb +1 -1
- data/spec/element_spec.rb +20 -0
- data/spec/smarky_spec.rb +42 -25
- data/spec/spec_helper.rb +26 -5
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d05d56103e40567d3fcce54bcb24aed503602374
|
4
|
+
data.tar.gz: 06b7fc4c4085fedba1c436c21a6101a0bc915282
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1a921f9d2d5677922e4d519641c185843570c2829e422316facf6233143727e3fe9d70a6ba936a4d3c97c201a1b78b2675b26544a74c44c830cc203075de6cac
|
7
|
+
data.tar.gz: a8786f43275b7c9d91a1ff72e5467e4b66c4d91373fd4e52c1f40096d09475809bf2cc88680f17652f9d865706bd97a415a0f2ffa1c1201d1b82d36837fa5a87
|
data/README.md
CHANGED
@@ -59,6 +59,9 @@ article.sections
|
|
59
59
|
article.to_html
|
60
60
|
# => the structured HTML
|
61
61
|
|
62
|
+
article.to_html(:omit_titles => true)
|
63
|
+
# => if you want to exclude the <h1>, <h2>, etc. tags from the HTML output
|
64
|
+
|
62
65
|
article.inner_html
|
63
66
|
# => if you want to inject the HTML into an existing container
|
64
67
|
```
|
data/bin/smarky
CHANGED
@@ -14,8 +14,5 @@ output_file = ARGV[1] || File.basename(input_file, '.*') + '.html'
|
|
14
14
|
document = Smarky.parse(File.read(input_file))
|
15
15
|
|
16
16
|
File.open(output_file, 'w') do |f|
|
17
|
-
|
18
|
-
# http://stackoverflow.com/questions/1898829/how-do-i-pretty-print-html-with-nokogiri
|
19
|
-
# This might be a huge mistake.
|
20
|
-
f.write(Nokogiri::XML(document.to_html, &:noblanks).to_xhtml(:indent => 4))
|
17
|
+
document.to_html
|
21
18
|
end
|
data/lib/smarky/element.rb
CHANGED
@@ -69,8 +69,20 @@ module Smarky
|
|
69
69
|
add_child(Element.new('section'))
|
70
70
|
end
|
71
71
|
|
72
|
-
def to_html
|
73
|
-
@node
|
72
|
+
def to_html(options={})
|
73
|
+
node = @node
|
74
|
+
|
75
|
+
if options[:omit_titles]
|
76
|
+
node = node.clone
|
77
|
+
node.css('h1,h2,h3,h4,h5,h6').each do |child|
|
78
|
+
child.remove()
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# Getting nicely indented HTML:
|
83
|
+
# http://stackoverflow.com/questions/1898829/how-do-i-pretty-print-html-with-nokogiri
|
84
|
+
# This might be a huge mistake?
|
85
|
+
node.to_xhtml(:indent => 2, :indent_text => ' ')
|
74
86
|
end
|
75
87
|
|
76
88
|
def inner_html
|
data/lib/smarky/version.rb
CHANGED
data/spec/element_spec.rb
CHANGED
@@ -65,4 +65,24 @@ describe Smarky::Element do
|
|
65
65
|
result.title.should be_nil
|
66
66
|
end
|
67
67
|
end
|
68
|
+
|
69
|
+
describe 'to_html' do
|
70
|
+
it 'can omit section titles if desired' do
|
71
|
+
input <<-EOMARKDOWN
|
72
|
+
This is a title
|
73
|
+
===============
|
74
|
+
|
75
|
+
Content content content.
|
76
|
+
EOMARKDOWN
|
77
|
+
|
78
|
+
# TODO: This still sucks :(
|
79
|
+
verify_result(:html_options => { :omit_titles => true }) do
|
80
|
+
<<-EOHTML
|
81
|
+
<article id="this-is-a-title">
|
82
|
+
|
83
|
+
<p>Content content content.</p></article>
|
84
|
+
EOHTML
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
68
88
|
end
|
data/spec/smarky_spec.rb
CHANGED
@@ -1,22 +1,9 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'spec_helper')
|
2
2
|
|
3
3
|
describe Smarky do
|
4
|
-
let(:result) { Smarky.parse(@input, @
|
4
|
+
let(:result) { Smarky.parse(@input, @parse_options || {}) }
|
5
5
|
|
6
6
|
describe 'parse' do
|
7
|
-
def verify_result(*args)
|
8
|
-
expected, @options = [args.pop, args.pop]
|
9
|
-
|
10
|
-
case expected
|
11
|
-
when Array
|
12
|
-
node_to_array(result)[1..-1].should == expected
|
13
|
-
when String
|
14
|
-
result.to_html.should == expected
|
15
|
-
else
|
16
|
-
raise 'Unable to verify against a #{expected.class}.'
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
7
|
it 'returns a Smarky::Element wrapper around an <article>' do
|
21
8
|
result.should be_a(Smarky::Element)
|
22
9
|
result.name.should == 'article'
|
@@ -24,7 +11,12 @@ describe Smarky do
|
|
24
11
|
|
25
12
|
it 'works in the simplest case: rendering a single paragraph' do
|
26
13
|
input 'Why *hello* there.'
|
27
|
-
|
14
|
+
|
15
|
+
verify_result <<-EOHTML
|
16
|
+
<article>
|
17
|
+
<p>Why <em>hello</em> there.</p>
|
18
|
+
</article>
|
19
|
+
EOHTML
|
28
20
|
end
|
29
21
|
|
30
22
|
it 'uses RedCarpet for rendering Markdown by default' do
|
@@ -32,7 +24,13 @@ describe Smarky do
|
|
32
24
|
This should look weird.
|
33
25
|
{: .weird }
|
34
26
|
EOMARKDOWN
|
35
|
-
|
27
|
+
|
28
|
+
verify_result <<-EOHTML
|
29
|
+
<article>
|
30
|
+
<p>This should look weird.
|
31
|
+
{: .weird }</p>
|
32
|
+
</article>
|
33
|
+
EOHTML
|
36
34
|
end
|
37
35
|
|
38
36
|
it 'can use Maruku, if specified' do
|
@@ -40,7 +38,14 @@ describe Smarky do
|
|
40
38
|
This should look normal.
|
41
39
|
{: .normal }
|
42
40
|
EOMARKDOWN
|
43
|
-
|
41
|
+
|
42
|
+
verify_result(:parse_options => { :markdown_renderer => :maruku }) do
|
43
|
+
<<-EOHTML
|
44
|
+
<article>
|
45
|
+
<p class="normal">This should look normal.</p>
|
46
|
+
</article>
|
47
|
+
EOHTML
|
48
|
+
end
|
44
49
|
end
|
45
50
|
|
46
51
|
it 'can also use Kramdown' do
|
@@ -49,7 +54,14 @@ describe Smarky do
|
|
49
54
|
This should also look normal.
|
50
55
|
{: .normal }
|
51
56
|
EOMARKDOWN
|
52
|
-
|
57
|
+
|
58
|
+
verify_result(:parse_options => { :markdown_renderer => :kramdown }) do
|
59
|
+
<<-EOHTML
|
60
|
+
<article>
|
61
|
+
<p class="normal">This should also look normal.</p>
|
62
|
+
</article>
|
63
|
+
EOHTML
|
64
|
+
end
|
53
65
|
end
|
54
66
|
|
55
67
|
it 'renders sibling sections for progressive heading elements' do
|
@@ -65,7 +77,7 @@ describe Smarky do
|
|
65
77
|
This is section 2.
|
66
78
|
EOMARKDOWN
|
67
79
|
|
68
|
-
verify_result
|
80
|
+
verify_result([
|
69
81
|
[:section,
|
70
82
|
[:h1, 'Section 1'],
|
71
83
|
[:p, 'This is section 1.']
|
@@ -74,7 +86,7 @@ describe Smarky do
|
|
74
86
|
[:h1, 'Section 2'],
|
75
87
|
[:p, 'This is section 2.']
|
76
88
|
]
|
77
|
-
]
|
89
|
+
])
|
78
90
|
end
|
79
91
|
|
80
92
|
it 'attaches IDs to HTML sections' do
|
@@ -86,11 +98,16 @@ describe Smarky do
|
|
86
98
|
=========
|
87
99
|
EOMARKDOWN
|
88
100
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
101
|
+
verify_result(:array_options => { :include_attributes => true }) do
|
102
|
+
[
|
103
|
+
[:section, { :id => 'section-1' },
|
104
|
+
[:h1, 'Section 1'],
|
105
|
+
],
|
106
|
+
[:section, { :id => 'section-2' },
|
107
|
+
[:h1, 'Section 2']
|
108
|
+
]
|
109
|
+
]
|
110
|
+
end
|
94
111
|
end
|
95
112
|
|
96
113
|
it 'adds content directly to the root article if there is only one top-level section' do
|
data/spec/spec_helper.rb
CHANGED
@@ -7,12 +7,14 @@ def input(markdown)
|
|
7
7
|
@input = markdown.unindent
|
8
8
|
end
|
9
9
|
|
10
|
-
def node_to_array(node)
|
10
|
+
def node_to_array(node, options={})
|
11
|
+
options ||= {}
|
12
|
+
|
11
13
|
array = [node.name.to_sym]
|
12
14
|
|
13
|
-
|
14
|
-
|
15
|
-
|
15
|
+
if options[:include_attributes] && node.attributes.any?
|
16
|
+
array << attribute_hash(node.attributes)
|
17
|
+
end
|
16
18
|
|
17
19
|
if node.children.empty?
|
18
20
|
array << node.content
|
@@ -22,7 +24,7 @@ def node_to_array(node)
|
|
22
24
|
|
23
25
|
else
|
24
26
|
node.children.each do |node|
|
25
|
-
array << node_to_array(node) unless node.name == 'text' && node.content =~ /^\s*$/
|
27
|
+
array << node_to_array(node, options) unless node.name == 'text' && node.content =~ /^\s*$/
|
26
28
|
end
|
27
29
|
end
|
28
30
|
|
@@ -40,4 +42,23 @@ RSpec.configure do |config|
|
|
40
42
|
config.before :each do
|
41
43
|
@input = ''
|
42
44
|
end
|
45
|
+
|
46
|
+
def verify_result(*args)
|
47
|
+
# Allow expected HTML to be specified either as a last parameter or via a block.
|
48
|
+
expected, options = block_given? && [yield, args.pop] || [args.pop, args.pop]
|
49
|
+
|
50
|
+
options ||= {}
|
51
|
+
@parse_options = options[:parse_options]
|
52
|
+
array_options = options[:array_options]
|
53
|
+
html_options = options[:html_options]
|
54
|
+
|
55
|
+
case expected
|
56
|
+
when Array
|
57
|
+
node_to_array(result, array_options)[1..-1].should == expected
|
58
|
+
when String
|
59
|
+
result.to_html(html_options || {}).should == expected.unindent.strip
|
60
|
+
else
|
61
|
+
raise "Unable to verify against a #{expected.class}."
|
62
|
+
end
|
63
|
+
end
|
43
64
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smarky
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan Tao
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-09-
|
11
|
+
date: 2013-09-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|