govspeak 0.8.4 → 0.8.5

Sign up to get free protection for your applications and to get access to all the features.
data/lib/govspeak.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'kramdown'
2
+ require 'govspeak/header_extractor'
2
3
 
3
4
  module Govspeak
4
5
 
@@ -21,6 +22,10 @@ module Govspeak
21
22
  @doc.to_html
22
23
  end
23
24
 
25
+ def headers
26
+ Govspeak::HeaderExtractor.convert(@doc).first
27
+ end
28
+
24
29
  def preprocess(source)
25
30
  @@extensions.each do |title,regexp,block|
26
31
  source.gsub!(regexp) {|match|
@@ -66,11 +71,11 @@ module Govspeak
66
71
  }
67
72
 
68
73
  extension('important', surrounded_by("@")) { |body|
69
- %{\n\n<h3 class="advisory"><span>#{body.strip}</span></h3>\n}
74
+ %{\n\n<h3 class="advisory">#{Kramdown::Document.new(body.strip).to_html}</h3>\n}
70
75
  }
71
76
 
72
77
  extension('helpful', surrounded_by("%")) { |body|
73
- %{\n\n<div class="application-notice help-notice">\n<p>#{body.strip}</p>\n</div>\n}
78
+ %{\n\n<div class="application-notice help-notice">\n#{Kramdown::Document.new(body.strip).to_html}</div>\n}
74
79
  }
75
80
 
76
81
  extension('map_link', surrounded_by("((", "))")) { |body|
@@ -0,0 +1,13 @@
1
+ module Govspeak
2
+ Header = Struct.new(:text, :level, :id)
3
+
4
+ class HeaderExtractor < Kramdown::Converter::Base
5
+ def convert(doc)
6
+ doc.root.children.map do |el|
7
+ if el.type == :header
8
+ Header.new(el.options[:raw_text], el.options[:level], generate_id(el.options[:raw_text]))
9
+ end
10
+ end.compact
11
+ end
12
+ end
13
+ end
@@ -23,6 +23,29 @@ class GovspeakTest < Test::Unit::TestCase
23
23
  assert_equal "<p>this </p>\n\n<p><em>si</em></p>\n\n<p>markdown</p>\n", rendered
24
24
  end
25
25
 
26
+ test "extracts headers with text, level and generated id" do
27
+ document = Govspeak::Document.new %{
28
+ # Big title
29
+
30
+ ### Small subtitle
31
+
32
+ ## Medium title
33
+ }
34
+ assert_equal [
35
+ Govspeak::Header.new('Big title', 1, 'big-title'),
36
+ Govspeak::Header.new('Small subtitle', 3, 'small-subtitle'),
37
+ Govspeak::Header.new('Medium title', 2, 'medium-title')
38
+ ], document.headers
39
+ end
40
+
41
+ test "extracts different ids for duplicate headers" do
42
+ document = Govspeak::Document.new("## Duplicate header\n\n## Duplicate header")
43
+ assert_equal [
44
+ Govspeak::Header.new('Duplicate header', 2, 'duplicate-header'),
45
+ Govspeak::Header.new('Duplicate header', 2, 'duplicate-header-1')
46
+ ], document.headers
47
+ end
48
+
26
49
  test "govspark extensions" do
27
50
  markdown_regression_tests = [
28
51
  {
@@ -44,13 +67,15 @@ class GovspeakTest < Test::Unit::TestCase
44
67
  </div>}
45
68
  }, {
46
69
  input: "@ I am very important @",
47
- output: %{<h3 class="advisory"><span>I am very important</span></h3>}
70
+ output: %{<h3 class="advisory"><p>I am very important</p>
71
+ </h3>}
48
72
  }, {
49
73
  input: "The following is very important
50
74
  @ I am very important @",
51
75
  output: %{<p>The following is very important</p>
52
76
 
53
- <h3 class="advisory"><span>I am very important</span></h3>}
77
+ <h3 class="advisory"><p>I am very important</p>
78
+ </h3>}
54
79
  }, {
55
80
  input: "% I am very helpful %",
56
81
  output: %{<div class="application-notice help-notice">
@@ -156,15 +181,25 @@ end
156
181
  end
157
182
 
158
183
  test "devolved markdown sections" do
159
- input = ":scotland: I am very devolved \n and very scottish \n:scotland:"
184
+ input = ":scotland: I am very devolved\n and very scottish \n:scotland:"
160
185
  output = '<div class="devolved-content scotland">
161
186
  <p class="devolved-header">This section applies to Scotland</p>
162
- <div class="devolved-body"><p>I am very devolved
187
+ <div class="devolved-body"><p>I am very devolved
163
188
  and very scottish</p>
164
189
  </div>
165
190
  </div>
166
191
  '
167
192
 
193
+ assert_equal output, Govspeak::Document.new(input).to_html
194
+ end
195
+
196
+ test "links inside markdown boxes" do
197
+ input = "@ Message with [a link](http://foo.bar/)@"
198
+ output = %{
199
+ <h3 class="advisory"><p>Message with <a href="http://foo.bar/">a link</a></p>
200
+ </h3>
201
+ }
202
+
168
203
  assert_equal output, Govspeak::Document.new(input).to_html
169
204
  end
170
205
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: govspeak
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.4
4
+ version: 0.8.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-11-01 00:00:00.000000000Z
13
+ date: 2011-12-20 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: kramdown
17
- requirement: &70159122835620 !ruby/object:Gem::Requirement
17
+ requirement: &70126712036920 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 0.13.3
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70159122835620
25
+ version_requirements: *70126712036920
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: rake
28
- requirement: &70159122835160 !ruby/object:Gem::Requirement
28
+ requirement: &70126712036220 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
@@ -33,7 +33,7 @@ dependencies:
33
33
  version: 0.8.0
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *70159122835160
36
+ version_requirements: *70126712036220
37
37
  description: ! "A set of extensions to markdown layered on top of the kramdown \nlibrary
38
38
  for use in the UK Government Single Domain project"
39
39
  email:
@@ -43,6 +43,7 @@ executables: []
43
43
  extensions: []
44
44
  extra_rdoc_files: []
45
45
  files:
46
+ - lib/govspeak/header_extractor.rb
46
47
  - lib/govspeak.rb
47
48
  - Gemfile
48
49
  - Rakefile
@@ -68,7 +69,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
68
69
  version: '0'
69
70
  requirements: []
70
71
  rubyforge_project:
71
- rubygems_version: 1.8.10
72
+ rubygems_version: 1.8.12
72
73
  signing_key:
73
74
  specification_version: 3
74
75
  summary: Markup language for single domain