breakdown 0.0.2 → 0.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.
- data/README.md +21 -0
- data/lib/breakdown.rb +18 -11
- data/lib/breakdown/version.rb +1 -1
- data/spec/tachypomp_spec.rb +27 -0
- metadata +3 -2
data/README.md
CHANGED
@@ -18,6 +18,11 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
+
require 'breakdown'
|
22
|
+
Breakdown::process input_filename, output_dir
|
23
|
+
|
24
|
+
E.g. Breakdown::process _my_huge_markdown_file.md_, _contents_
|
25
|
+
|
21
26
|
Breakdown extends the function of markdown section breaks, providing simple controls for splitting large files.
|
22
27
|
|
23
28
|
Any valid markdown horizontal section may be used. The following are all valid breakdown commands:
|
@@ -51,6 +56,22 @@ Any page section starting with the `:discard` directive will be skipped during t
|
|
51
56
|
This page will created
|
52
57
|
*** :discard
|
53
58
|
This page will not
|
59
|
+
|
60
|
+
### Using blocks
|
61
|
+
|
62
|
+
Passing a block to the `Breakdown::process` method allows an opportunity to modify the title and text of each
|
63
|
+
section prior to writing out to a file.
|
64
|
+
|
65
|
+
Breakdown::process input_filename, output_dir do |section|
|
66
|
+
section[:title] = section[:title].upcase
|
67
|
+
section[:text] = convert_to_swedish_chef(section[:text])
|
68
|
+
section
|
69
|
+
end
|
70
|
+
|
71
|
+
Each `section` is hash containing values for `:title` and `:text` keys. It's important to pass the modified section
|
72
|
+
back (as the last statement in the block) so it can be accessed by the rest of the `process` method.
|
73
|
+
|
74
|
+
Typical uses for the block method is to add metadata to the head of a section's text, for example when using Breakdown to generate content for *nanoc* or *Jekyll*.
|
54
75
|
|
55
76
|
## Contributing
|
56
77
|
|
data/lib/breakdown.rb
CHANGED
@@ -53,10 +53,14 @@ module Breakdown
|
|
53
53
|
|
54
54
|
command_match = title.match(/[:](?<command>.[a-z]*)(\s(?<params>.*)|$)/)
|
55
55
|
if command_match
|
56
|
-
self.send(command_match[:command], command_match[:params], text, options)
|
56
|
+
section = self.send(command_match[:command], command_match[:params], text, options)
|
57
57
|
else
|
58
|
-
|
59
|
-
end
|
58
|
+
section = {:title => title, :text => text}
|
59
|
+
end
|
60
|
+
|
61
|
+
section = yield section if block_given?
|
62
|
+
|
63
|
+
write_section(section, options) unless section.nil?
|
60
64
|
end
|
61
65
|
#rescue
|
62
66
|
f.close # SMELL silent fail
|
@@ -79,7 +83,8 @@ module Breakdown
|
|
79
83
|
@autonum_sections[title] = @autonum_sections[title] ? @autonum_sections[title] += 1 : 1
|
80
84
|
|
81
85
|
title = "#{title}-#{@autonum_sections[title]}"
|
82
|
-
|
86
|
+
|
87
|
+
{:title => title, :text => text}
|
83
88
|
end
|
84
89
|
|
85
90
|
def discard(*args)
|
@@ -89,9 +94,11 @@ module Breakdown
|
|
89
94
|
# Utility methods
|
90
95
|
|
91
96
|
def each_section(file)
|
92
|
-
title = 'index'
|
97
|
+
title = 'index' # Default to 'index' if no title given
|
93
98
|
text = ''
|
94
99
|
|
100
|
+
# TODO This could be more efficient by applying regular expressions to the whole file, finding
|
101
|
+
# breakpoints and processing them independently. The naive approach will do for now
|
95
102
|
while line = file.gets do
|
96
103
|
marker = line.match(/((^([*]{3}\s)|^([*]\s){3})|^([*]{5}\s)|^([-]\s){3}|^([-]{39}))(?<title>.*)/)
|
97
104
|
|
@@ -104,17 +111,17 @@ module Breakdown
|
|
104
111
|
text += line
|
105
112
|
end
|
106
113
|
end
|
107
|
-
yield title, text if !text.empty?
|
114
|
+
yield title, text if !text.empty? # Process any remaining text as a single section
|
108
115
|
end
|
109
116
|
|
110
|
-
def write_section(
|
111
|
-
output_filename = File.join(options[:output_dir], "/#{title}.#{options[:extension]}")
|
112
|
-
File.open(output_filename, 'w') { |file| file.write text }
|
117
|
+
def write_section(section, options)
|
118
|
+
output_filename = File.join(options[:output_dir], "/#{section[:title]}.#{options[:extension]}")
|
119
|
+
File.open(output_filename, 'w') { |file| file.write section[:text] }
|
113
120
|
end
|
114
121
|
end
|
115
122
|
|
116
|
-
def self.process(filename, output_dir, options={})
|
123
|
+
def self.process(filename, output_dir, options={}, &block)
|
117
124
|
processor = Processor.new
|
118
|
-
processor.process(filename, output_dir, options)
|
125
|
+
processor.process(filename, output_dir, options, &block)
|
119
126
|
end
|
120
127
|
end
|
data/lib/breakdown/version.rb
CHANGED
data/spec/tachypomp_spec.rb
CHANGED
@@ -21,6 +21,33 @@ describe Breakdown do
|
|
21
21
|
Breakdown::process './spec/examples/the-tachypomp-and-other-stories.md', @output_dir
|
22
22
|
filecount(@output_dir).should equal(9)
|
23
23
|
end
|
24
|
+
|
25
|
+
it "should modify title and text when processed using a block" do
|
26
|
+
|
27
|
+
filecount(@output_dir).should equal(0)
|
28
|
+
Breakdown::process './spec/examples/the-tachypomp-and-other-stories.md', @output_dir do |section|
|
29
|
+
section[:title] = section[:title] + '-modified'
|
30
|
+
section[:text]= '!!modified!!' + section[:text]
|
31
|
+
section
|
32
|
+
end
|
33
|
+
|
34
|
+
%w(
|
35
|
+
index-modified.md
|
36
|
+
section-1-modified.md
|
37
|
+
section-2-modified.md
|
38
|
+
section-3-modified.md
|
39
|
+
section-4-modified.md
|
40
|
+
section-5-modified.md
|
41
|
+
section-6-modified.md
|
42
|
+
section-7-modified.md
|
43
|
+
table-of-contents-modified.md
|
44
|
+
).each do |filename|
|
45
|
+
file_path = File.join @output_dir, filename
|
46
|
+
File.exist?(file_path).should be_true
|
47
|
+
text = File.read(file_path)
|
48
|
+
text.should include('!!modified!!')
|
49
|
+
end
|
50
|
+
end
|
24
51
|
end
|
25
52
|
end
|
26
53
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: breakdown
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-08-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -130,3 +130,4 @@ test_files:
|
|
130
130
|
- spec/examples/three_stars_and_a_space.md
|
131
131
|
- spec/spec_helper.rb
|
132
132
|
- spec/tachypomp_spec.rb
|
133
|
+
has_rdoc:
|