sixones-jekyll 0.4.1

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.
Files changed (43) hide show
  1. data/History.txt +113 -0
  2. data/README.textile +539 -0
  3. data/VERSION.yml +4 -0
  4. data/bin/jekyll +140 -0
  5. data/lib/jekyll/albino.rb +120 -0
  6. data/lib/jekyll/converters/csv.rb +26 -0
  7. data/lib/jekyll/converters/mephisto.rb +79 -0
  8. data/lib/jekyll/converters/mt.rb +59 -0
  9. data/lib/jekyll/converters/textpattern.rb +50 -0
  10. data/lib/jekyll/converters/typo.rb +49 -0
  11. data/lib/jekyll/converters/wordpress.rb +55 -0
  12. data/lib/jekyll/convertible.rb +71 -0
  13. data/lib/jekyll/core_ext.rb +22 -0
  14. data/lib/jekyll/custom_filters.rb +13 -0
  15. data/lib/jekyll/filters.rb +41 -0
  16. data/lib/jekyll/layout.rb +33 -0
  17. data/lib/jekyll/page.rb +64 -0
  18. data/lib/jekyll/post.rb +201 -0
  19. data/lib/jekyll/site.rb +190 -0
  20. data/lib/jekyll/tags/highlight.rb +53 -0
  21. data/lib/jekyll/tags/include.rb +31 -0
  22. data/lib/jekyll.rb +69 -0
  23. data/test/helper.rb +14 -0
  24. data/test/source/_includes/sig.markdown +3 -0
  25. data/test/source/_layouts/default.html +27 -0
  26. data/test/source/_layouts/simple.html +1 -0
  27. data/test/source/_posts/2008-10-18-foo-bar.textile +8 -0
  28. data/test/source/_posts/2008-11-21-complex.textile +8 -0
  29. data/test/source/_posts/2008-12-03-permalinked-post.textile +9 -0
  30. data/test/source/_posts/2008-12-13-include.markdown +8 -0
  31. data/test/source/category/_posts/2008-9-23-categories.textile +6 -0
  32. data/test/source/css/screen.css +76 -0
  33. data/test/source/foo/_posts/bar/2008-12-12-topical-post.textile +8 -0
  34. data/test/source/index.html +22 -0
  35. data/test/source/z_category/_posts/2008-9-23-categories.textile +6 -0
  36. data/test/suite.rb +9 -0
  37. data/test/test_filters.rb +41 -0
  38. data/test/test_generated_site.rb +32 -0
  39. data/test/test_jekyll.rb +0 -0
  40. data/test/test_post.rb +135 -0
  41. data/test/test_site.rb +45 -0
  42. data/test/test_tags.rb +31 -0
  43. metadata +212 -0
@@ -0,0 +1,27 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+
4
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en-us">
5
+ <head>
6
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
7
+ <title>{{ page.title }}</title>
8
+ <meta name="author" content="<%= @page.author %>" />
9
+
10
+ <!-- CodeRay syntax highlighting CSS -->
11
+ <link rel="stylesheet" href="/css/coderay.css" type="text/css" />
12
+
13
+ <!-- Homepage CSS -->
14
+ <link rel="stylesheet" href="/css/screen.css" type="text/css" media="screen, projection" />
15
+ </head>
16
+ <body>
17
+
18
+ <div class="site">
19
+ <div class="title">
20
+ Tom Preston-Werner
21
+ </div>
22
+
23
+ {{ content }}
24
+ </div>
25
+
26
+ </body>
27
+ </html>
@@ -0,0 +1 @@
1
+ <<< {{ content }} >>>
@@ -0,0 +1,8 @@
1
+ ---
2
+ layout: default
3
+ title: Foo Bar
4
+ ---
5
+
6
+ h1. {{ page.title }}
7
+
8
+ Best *post* ever
@@ -0,0 +1,8 @@
1
+ ---
2
+ layout: default
3
+ title: Complex
4
+ ---
5
+
6
+ url: {{ page.url }}
7
+ date: {{ page.date }}
8
+ id: {{ page.id }}
@@ -0,0 +1,9 @@
1
+ ---
2
+ title: Post with Permalink
3
+ permalink: my_category/permalinked-post
4
+ ---
5
+
6
+ h1. {{ page.title }}
7
+
8
+
9
+ <p>Best <strong>post</strong> ever</p>
@@ -0,0 +1,8 @@
1
+ ---
2
+ layout: default
3
+ title: Include
4
+ ---
5
+
6
+ {% include sig.markdown %}
7
+
8
+ This _is_ cool
@@ -0,0 +1,6 @@
1
+ ---
2
+ layout: default
3
+ title: Categories
4
+ ---
5
+
6
+ Categories _should_ work
@@ -0,0 +1,76 @@
1
+ /*****************************************************************************/
2
+ /*
3
+ /* Common
4
+ /*
5
+ /*****************************************************************************/
6
+
7
+ /* Global Reset */
8
+
9
+ * {
10
+ margin: 0;
11
+ padding: 0;
12
+ }
13
+
14
+ html, body {
15
+ height: 100%;
16
+ }
17
+
18
+ body {
19
+ background-color: white;
20
+ font: 13.34px helvetica, arial, clean, sans-serif;
21
+ *font-size: small;
22
+ text-align: center;
23
+ }
24
+
25
+ h1, h2, h3, h4, h5, h6 {
26
+ font-size: 100%;
27
+ }
28
+
29
+ h1 {
30
+ margin-bottom: 1em;
31
+ }
32
+
33
+ p {
34
+ margin: 1em 0;
35
+ }
36
+
37
+ a {
38
+ color: #00a;
39
+ }
40
+
41
+ a:hover {
42
+ color: black;
43
+ }
44
+
45
+ a:visited {
46
+ color: #a0a;
47
+ }
48
+
49
+ table {
50
+ font-size: inherit;
51
+ font: 100%;
52
+ }
53
+
54
+ /*****************************************************************************/
55
+ /*
56
+ /* Site
57
+ /*
58
+ /*****************************************************************************/
59
+
60
+ .site {
61
+ font-size: 110%;
62
+ text-align: justify;
63
+ width: 40em;
64
+ margin: 3em auto 2em auto;
65
+ line-height: 1.5em;
66
+ }
67
+
68
+ .title {
69
+ color: #a00;
70
+ font-weight: bold;
71
+ margin-bottom: 2em;
72
+ }
73
+
74
+ .site .meta {
75
+ color: #aaa;
76
+ }
@@ -0,0 +1,8 @@
1
+ ---
2
+ layout: default
3
+ title: Topical Post
4
+ ---
5
+
6
+ h1. {{ page.title }}
7
+
8
+ This post has a topic.
@@ -0,0 +1,22 @@
1
+ ---
2
+ layout: default
3
+ title: Tom Preston-Werner
4
+ ---
5
+
6
+ h1. Welcome to my site
7
+
8
+ h2. Please read our {{ site.posts | size }} Posts
9
+
10
+ <ul>
11
+ {% for post in site.posts %}
12
+ <li>{{ post.date }} <a href="{{ post.url }}">{{ post.title }}</a></li>
13
+ {% endfor %}
14
+ </ul>
15
+
16
+ {% assign first_post = site.posts.first %}
17
+ <div id="first_post">
18
+ <h1>{{ first_post.title }}</h1>
19
+ <div>
20
+ {{ first_post.content }}
21
+ </div>
22
+ </div>
@@ -0,0 +1,6 @@
1
+ ---
2
+ layout: default
3
+ title: Categories
4
+ ---
5
+
6
+ Categories _should_ work. Even if ordered after index.
data/test/suite.rb ADDED
@@ -0,0 +1,9 @@
1
+ require 'test/unit'
2
+
3
+ # for some reason these tests fail when run via TextMate
4
+ # but succeed when run on the command line.
5
+
6
+ tests = Dir["#{File.dirname(__FILE__)}/test_*.rb"]
7
+ tests.each do |file|
8
+ require file
9
+ end
@@ -0,0 +1,41 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ class TestFilters < Test::Unit::TestCase
4
+
5
+ class JekyllFilter
6
+ include Jekyll::Filters
7
+ end
8
+
9
+ def setup
10
+ @filter = JekyllFilter.new
11
+ end
12
+
13
+ def test_textilize_with_simple_string
14
+ assert_equal "<p>something <strong>really</strong> simple</p>", @filter.textilize("something *really* simple")
15
+ end
16
+
17
+ def test_array_to_sentence_string_with_no_args
18
+ assert_equal "", @filter.array_to_sentence_string([])
19
+ end
20
+
21
+ def test_array_to_sentence_string_with_one_arg
22
+ assert_equal "1", @filter.array_to_sentence_string([1])
23
+ assert_equal "chunky", @filter.array_to_sentence_string(["chunky"])
24
+ end
25
+
26
+ def test_array_to_sentence_string_with_two_args
27
+ assert_equal "1 and 2", @filter.array_to_sentence_string([1, 2])
28
+ assert_equal "chunky and bacon", @filter.array_to_sentence_string(["chunky", "bacon"])
29
+ end
30
+
31
+ def test_array_to_sentence_string_with_multiple_args
32
+ assert_equal "1, 2, 3, and 4", @filter.array_to_sentence_string([1, 2, 3, 4])
33
+ assert_equal "chunky, bacon, bits, and pieces", @filter.array_to_sentence_string(["chunky", "bacon", "bits", "pieces"])
34
+ end
35
+
36
+ def test_xml_escape_with_ampersands
37
+ assert_equal "AT&amp;T", @filter.xml_escape("AT&T")
38
+ assert_equal "&lt;code&gt;command &amp;lt;filename&amp;gt;&lt;/code&gt;", @filter.xml_escape("<code>command &lt;filename&gt;</code>")
39
+ end
40
+
41
+ end
@@ -0,0 +1,32 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ class TestGeneratedSite < Test::Unit::TestCase
4
+ def setup
5
+ clear_dest
6
+ @source = File.join(File.dirname(__FILE__), *%w[source])
7
+ @s = Site.new(@source, dest_dir)
8
+ @s.process
9
+ @index = File.read(File.join(dest_dir, 'index.html'))
10
+ end
11
+
12
+ def test_site_posts_in_index
13
+ # confirm that {{ site.posts }} is working
14
+ assert @index.include?("#{@s.posts.size} Posts")
15
+ end
16
+
17
+ def test_post_content_in_index
18
+ # confirm that the {{ post.content }} is rendered OK
19
+ latest_post = Dir[File.join(@source, '_posts/*')].last
20
+ post = Post.new(@source, '', File.basename(latest_post))
21
+ Jekyll.content_type = post.determine_content_type
22
+ post.transform
23
+ assert @index.include?(post.content)
24
+ end
25
+
26
+ def test_unpublished_posts_are_hidden
27
+ published = Dir[File.join(dest_dir, 'publish_test/2008/02/02/*.html')].map {|f| File.basename(f)}
28
+
29
+ assert_equal 1, published.size
30
+ assert_equal "published.html", published.first
31
+ end
32
+ end
File without changes
data/test/test_post.rb ADDED
@@ -0,0 +1,135 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ class TestPost < Test::Unit::TestCase
4
+ def setup
5
+
6
+ end
7
+
8
+ def test_valid
9
+ assert Post.valid?("2008-10-19-foo-bar.textile")
10
+ assert Post.valid?("foo/bar/2008-10-19-foo-bar.textile")
11
+
12
+ assert !Post.valid?("lol2008-10-19-foo-bar.textile")
13
+ assert !Post.valid?("blah")
14
+ end
15
+
16
+ def test_process
17
+ p = Post.allocate
18
+ p.process("2008-10-19-foo-bar.textile")
19
+
20
+ assert_equal Time.parse("2008-10-19"), p.date
21
+ assert_equal "foo-bar", p.slug
22
+ assert_equal ".textile", p.ext
23
+ end
24
+
25
+ def test_url
26
+ p = Post.allocate
27
+ p.categories = []
28
+ p.process("2008-10-19-foo-bar.textile")
29
+
30
+ assert_equal "/2008/10/19/foo-bar.html", p.url
31
+ end
32
+
33
+ def test_permalink
34
+ p = Post.allocate
35
+ p.process("2008-12-03-permalinked-post.textile")
36
+ p.read_yaml(File.join(File.dirname(__FILE__), *%w[source _posts]), "2008-12-03-permalinked-post.textile")
37
+
38
+ assert_equal "my_category/permalinked-post", p.permalink
39
+ end
40
+
41
+ def test_dir_respects_permalink
42
+ p = Post.allocate
43
+ p.process("2008-12-03-permalinked-post.textile")
44
+ p.read_yaml(File.join(File.dirname(__FILE__), *%w[source _posts]), "2008-12-03-permalinked-post.textile")
45
+
46
+ assert_equal "my_category/", p.dir
47
+ end
48
+
49
+ def test_url_respects_permalink
50
+ p = Post.allocate
51
+ p.process("2008-12-03-permalinked-post.textile")
52
+ p.read_yaml(File.join(File.dirname(__FILE__), *%w[source _posts]), "2008-12-03-permalinked-post.textile")
53
+
54
+ assert_equal "my_category/permalinked-post", p.url
55
+ end
56
+
57
+ def test_read_yaml
58
+ p = Post.allocate
59
+ p.read_yaml(File.join(File.dirname(__FILE__), *%w[source _posts]), "2008-10-18-foo-bar.textile")
60
+
61
+ assert_equal({"title" => "Foo Bar", "layout" => "default"}, p.data)
62
+ assert_equal "\nh1. {{ page.title }}\n\nBest *post* ever", p.content
63
+ end
64
+
65
+ def test_transform
66
+ p = Post.allocate
67
+ p.process("2008-10-18-foo-bar.textile")
68
+ p.read_yaml(File.join(File.dirname(__FILE__), *%w[source _posts]), "2008-10-18-foo-bar.textile")
69
+ p.transform
70
+
71
+ assert_equal "<h1>{{ page.title }}</h1>\n<p>Best <strong>post</strong> ever</p>", p.content
72
+ end
73
+
74
+ def test_published
75
+ p = Post.new(File.join(File.dirname(__FILE__), *%w[source]), '', "2008-02-02-published.textile")
76
+ assert_equal true, p.published
77
+ end
78
+
79
+ def test_not_published
80
+ p = Post.new(File.join(File.dirname(__FILE__), *%w[source]), '', "2008-02-02-not-published.textile")
81
+ assert_equal false, p.published
82
+ end
83
+
84
+ def test_yaml_category
85
+ p = Post.new(File.join(File.dirname(__FILE__), *%w[source]), '', "2009-01-27-category.textile")
86
+ assert p.categories.include?('foo')
87
+ end
88
+
89
+ def test_yaml_categories
90
+ p = Post.new(File.join(File.dirname(__FILE__), *%w[source]), '', "2009-01-27-categories.textile")
91
+ assert p.categories.include?('foo')
92
+ assert p.categories.include?('bar')
93
+ assert p.categories.include?('baz')
94
+ end
95
+
96
+ def test_render
97
+ p = Post.new(File.join(File.dirname(__FILE__), *%w[source]), '', "2008-10-18-foo-bar.textile")
98
+ layouts = {"default" => Layout.new(File.join(File.dirname(__FILE__), *%w[source _layouts]), "simple.html")}
99
+ p.render(layouts, {"site" => {"posts" => []}})
100
+
101
+ assert_equal "<<< <h1>Foo Bar</h1>\n<p>Best <strong>post</strong> ever</p> >>>", p.output
102
+ end
103
+
104
+ def test_write
105
+ clear_dest
106
+
107
+ p = Post.new(File.join(File.dirname(__FILE__), *%w[source]), '', "2008-10-18-foo-bar.textile")
108
+ layouts = {"default" => Layout.new(File.join(File.dirname(__FILE__), *%w[source _layouts]), "simple.html")}
109
+ p.render(layouts, {"site" => {"posts" => []}})
110
+ p.write(dest_dir)
111
+ end
112
+
113
+ def test_data
114
+ p = Post.new(File.join(File.dirname(__FILE__), *%w[source]), '', "2008-11-21-complex.textile")
115
+ layouts = {"default" => Layout.new(File.join(File.dirname(__FILE__), *%w[source _layouts]), "simple.html")}
116
+ p.render(layouts, {"site" => {"posts" => []}})
117
+
118
+ assert_equal "<<< <p>url: /2008/11/21/complex.html<br />\ndate: #{Time.parse("2008-11-21")}<br />\nid: /2008/11/21/complex</p> >>>", p.output
119
+ end
120
+
121
+ def test_categories_and_topics
122
+ p = Post.new(File.join(File.dirname(__FILE__), *%w[source]), 'foo', 'bar/2008-12-12-topical-post.textile')
123
+ assert_equal ['foo'], p.categories
124
+ assert_equal ['bar'], p.topics
125
+ end
126
+
127
+ def test_include
128
+ Jekyll.source = File.join(File.dirname(__FILE__), *%w[source])
129
+ p = Post.new(File.join(File.dirname(__FILE__), *%w[source]), '', "2008-12-13-include.markdown")
130
+ layouts = {"default" => Layout.new(File.join(File.dirname(__FILE__), *%w[source _layouts]), "simple.html")}
131
+ p.render(layouts, {"site" => {"posts" => []}})
132
+
133
+ assert_equal "<<< <hr />\n<p>Tom Preston-Werner github.com/mojombo</p>\n\n<p>This <em>is</em> cool</p> >>>", p.output
134
+ end
135
+ end
data/test/test_site.rb ADDED
@@ -0,0 +1,45 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ class TestSite < Test::Unit::TestCase
4
+ def setup
5
+ @source = File.join(File.dirname(__FILE__), *%w[source])
6
+ @s = Site.new(@source, dest_dir)
7
+ end
8
+
9
+ def test_site_init
10
+
11
+ end
12
+
13
+ def test_read_layouts
14
+ @s.read_layouts
15
+
16
+ assert_equal ["default", "simple"].sort, @s.layouts.keys.sort
17
+ end
18
+
19
+ def test_read_posts
20
+ @s.read_posts('')
21
+ posts = Dir[File.join(@source, '_posts/*')]
22
+ assert_equal posts.size - 1, @s.posts.size
23
+ end
24
+
25
+ def test_site_payload
26
+ clear_dest
27
+ @s.process
28
+
29
+ posts = Dir[File.join(@source, "**", "_posts/*")]
30
+ categories = %w(bar baz category foo z_category publish_test).sort
31
+
32
+ assert_equal posts.size - 1, @s.posts.size
33
+ assert_equal categories, @s.categories.keys.sort
34
+ assert_equal 4, @s.categories['foo'].size
35
+ end
36
+
37
+ def test_filter_entries
38
+ ent1 = %w[foo.markdown bar.markdown baz.markdown #baz.markdown#
39
+ .baz.markdow foo.markdown~]
40
+ ent2 = %w[.htaccess _posts bla.bla]
41
+
42
+ assert_equal %w[foo.markdown bar.markdown baz.markdown], @s.filter_entries(ent1)
43
+ assert_equal ent2, @s.filter_entries(ent2)
44
+ end
45
+ end
data/test/test_tags.rb ADDED
@@ -0,0 +1,31 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ class TestTags < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @content = <<CONTENT
7
+ ---
8
+ layout: post
9
+ title: This is a test
10
+
11
+ ---
12
+ This document results in a markdown error with maruku
13
+ {% highlight ruby %}
14
+ puts "hi"
15
+
16
+ puts "bye"
17
+ {% endhighlight %}
18
+
19
+ CONTENT
20
+ end
21
+
22
+ def test_markdown_with_pygments_line_handling
23
+ Jekyll.pygments = true
24
+ Jekyll.content_type = :markdown
25
+
26
+ result = Liquid::Template.parse(@content).render({}, [Jekyll::Filters])
27
+ result = Jekyll.markdown_proc.call(result)
28
+ assert_no_match(/markdown\-html\-error/,result)
29
+ end
30
+
31
+ end