Let’s read documents in structured text with formatting conventions in markdown and build up the chapter outline / manifest for the Manuscripts book format.
Aside: What’s structured text in Markdown?
Markdown uses hashtags (#
) for marking up headings. Example:
# Heading Level 1
## Heading Level 2
### Heading Level 3
#### Heading Level 4
...
or (using the real-world example from the Yuki & Moto Press Bookshelf used in this quiz)
# Hoe Developer's Guide
## What is Hoe?
## A Brief History of Hoe
## Why Use Hoe?
### Projects, the DRY way
### Update all your projects in 1 easy step
...
The challenge: Code a build
method that passes the RubyQuizTest :-).
def build( txt )
# ...
end
For the starter level 1 build up the Manuscripts book manifest in the YAML format for the Hoe Developer’s Guide - Build, Package and Publish Gems with Rake Tasks - Ready-to-Use Build Scripts by Ryan Davis et al from the heading hierarchy in structured text in the markdown format. Turn:
# Hoe Developer's Guide
## What is Hoe?
## A Brief History of Hoe
## Why Use Hoe?
### Projects, the DRY way
### Update all your projects in 1 easy step
### New projects in 1 easy step
### Releasing in 1 easy step
### Noticing a pattern yet?
### Extensibility
## Creating a new Project
### From Scratch
### Using Sow Templates
## Work the Way You Want to Work
## Project Structure
## Extending Hoe with Plugins
### Using Hoe Plugins
### Popular Hoe Plugins
### Writing Hoe Plugins
### How Plugins Work
## Questions & Counterpoints
### "Why should I maintain a Manifest.txt when I can just write a glob?"
### "Why not just write gemspecs?"
### "What about (newgem|bones|echoe|joe|gemify|...)?"
(Note: All text stripped for clarity, that is, making it clear to see the heading hierarchy / tree structure of the page.)
into:
- title: "Hoe Developer's Guide"
sections:
- title: What is Hoe?
- title: A Brief History of Hoe
- title: Why Use Hoe?
sections:
- title: Projects, the DRY way
- title: Update all your projects in 1 easy step
- title: New projects in 1 easy step
- title: Run your tests in 1 easy step
- title: Releasing in 1 easy step
- title: Noticing a pattern yet?
- title: Extensibility
- title: Creating a new Project
sections:
- title: From Scratch
- title: Using Sow Templates
- title: Work the Way You Want to Work
- title: Project Structure
- title: Extending Hoe with Plugins
sections:
- title: Using Hoe Plugins
- title: Popular Hoe Plugins
- title: Writing Hoe Plugins
- title: How Plugins Work
- title: "Questions & Counterpoints"
sections:
- title: Why should I maintain a Manifest.txt when I can just write a glob?
- title: Why not just write gemspecs?
- title: "What about (newgem|bones|echoe|joe|gemify|...)?"
Note: The test compares the parsed YAML as a standard array (of hashes) in ruby, thus, you do NOT have to worry about matching quoted or unquoted strings or extra spaces or newlines or comments.
Note: For easy reference and testing you can use the “local” page, see manuscript/index.md
.
To qualify for solving the code challenge / puzzle you must pass the test:
require 'minitest/autorun'
class RubyQuizTest < MiniTest::Test
def test_build
txt = File.open( "./manuscript/index.md", "r:utf-8" ).read
headings = File.open( "./manuscript/META/contents.yml", "r:utf-8" ).read
assert_equal YAML.load( headings ),
YAML.load( build( txt ))
end
end
Start from scratch or, yes, use any library / gem you can find.
Post your code snippets on the “official” Ruby Quiz Channel, that is, the ruby-talk mailing list.
Happy book manufacturing and text processing with Ruby.