monad 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (188) hide show
  1. checksums.yaml +7 -0
  2. data/CONTRIBUTING.markdown +91 -0
  3. data/Gemfile +1 -1
  4. data/History.markdown +772 -0
  5. data/{README.md → README.markdown} +5 -2
  6. data/Rakefile +163 -1
  7. data/bin/monad +86 -30
  8. data/features/create_sites.feature +54 -25
  9. data/features/data.feature +65 -0
  10. data/features/data_sources.feature +10 -10
  11. data/features/drafts.feature +5 -5
  12. data/features/embed_filters.feature +10 -10
  13. data/features/include_tag.feature +48 -0
  14. data/features/markdown.feature +5 -5
  15. data/features/pagination.feature +38 -10
  16. data/features/permalinks.feature +31 -11
  17. data/features/post_data.feature +41 -41
  18. data/features/post_excerpts.feature +50 -0
  19. data/features/site_configuration.feature +47 -26
  20. data/features/site_data.feature +30 -24
  21. data/features/step_definitions/{monad_steps.rb → jekyll_steps.rb} +66 -52
  22. data/features/support/env.rb +27 -8
  23. data/lib/jekyll.rb +99 -0
  24. data/lib/jekyll/cleaner.rb +73 -0
  25. data/lib/{monad → jekyll}/command.rb +6 -6
  26. data/lib/{monad → jekyll}/commands/build.rb +9 -9
  27. data/lib/jekyll/commands/doctor.rb +67 -0
  28. data/lib/jekyll/commands/new.rb +67 -0
  29. data/lib/jekyll/commands/serve.rb +65 -0
  30. data/lib/{monad → jekyll}/configuration.rb +60 -18
  31. data/lib/{monad → jekyll}/converter.rb +1 -1
  32. data/lib/{monad → jekyll}/converters/identity.rb +1 -1
  33. data/lib/{monad → jekyll}/converters/markdown.rb +2 -2
  34. data/lib/jekyll/converters/markdown/kramdown_parser.rb +29 -0
  35. data/lib/{monad → jekyll}/converters/markdown/maruku_parser.rb +12 -8
  36. data/lib/{monad → jekyll}/converters/markdown/rdiscount_parser.rb +4 -2
  37. data/lib/{monad → jekyll}/converters/markdown/redcarpet_parser.rb +1 -1
  38. data/lib/{monad → jekyll}/converters/textile.rb +1 -1
  39. data/lib/{monad → jekyll}/convertible.rb +39 -17
  40. data/lib/{monad → jekyll}/core_ext.rb +22 -4
  41. data/lib/jekyll/deprecator.rb +36 -0
  42. data/lib/{monad → jekyll}/draft.rb +1 -1
  43. data/lib/{monad → jekyll}/drivers/json_driver.rb +1 -1
  44. data/lib/{monad → jekyll}/drivers/yaml_driver.rb +1 -1
  45. data/lib/{monad → jekyll}/errors.rb +1 -1
  46. data/lib/jekyll/excerpt.rb +113 -0
  47. data/lib/{monad → jekyll}/filters.rb +16 -6
  48. data/lib/{monad → jekyll}/generator.rb +1 -1
  49. data/lib/jekyll/generators/pagination.rb +214 -0
  50. data/lib/{monad → jekyll}/layout.rb +4 -1
  51. data/lib/{monad → jekyll}/mime.types +0 -0
  52. data/lib/{monad → jekyll}/page.rb +36 -39
  53. data/lib/{monad → jekyll}/plugin.rb +1 -1
  54. data/lib/{monad → jekyll}/post.rb +58 -123
  55. data/lib/jekyll/related_posts.rb +59 -0
  56. data/lib/{monad → jekyll}/site.rb +120 -123
  57. data/lib/{monad → jekyll}/static_file.rb +1 -1
  58. data/lib/jekyll/stevenson.rb +89 -0
  59. data/lib/jekyll/tags/gist.rb +48 -0
  60. data/lib/{monad → jekyll}/tags/highlight.rb +3 -3
  61. data/lib/jekyll/tags/include.rb +135 -0
  62. data/lib/{monad → jekyll}/tags/post_url.rb +8 -6
  63. data/lib/jekyll/url.rb +67 -0
  64. data/lib/monad.rb +36 -27
  65. data/lib/site_template/_config.yml +2 -1
  66. data/lib/site_template/_layouts/default.html +21 -23
  67. data/lib/site_template/_layouts/post.html +1 -1
  68. data/lib/site_template/_posts/{0000-00-00-welcome-to-monad.markdown.erb → 0000-00-00-welcome-to-jekyll.markdown.erb} +6 -6
  69. data/lib/site_template/css/main.css +22 -27
  70. data/lib/site_template/index.html +2 -2
  71. data/monad.gemspec +153 -52
  72. data/site/.gitignore +4 -0
  73. data/site/CNAME +1 -0
  74. data/site/README +1 -0
  75. data/site/_config.yml +6 -0
  76. data/site/_includes/analytics.html +32 -0
  77. data/site/_includes/docs_contents.html +16 -0
  78. data/site/_includes/docs_contents_mobile.html +23 -0
  79. data/site/_includes/docs_option.html +11 -0
  80. data/site/_includes/docs_ul.html +20 -0
  81. data/site/_includes/footer.html +15 -0
  82. data/site/_includes/header.html +18 -0
  83. data/site/_includes/news_contents.html +23 -0
  84. data/site/_includes/news_contents_mobile.html +11 -0
  85. data/site/_includes/news_item.html +24 -0
  86. data/site/_includes/primary-nav-items.html +14 -0
  87. data/site/_includes/section_nav.html +22 -0
  88. data/site/_includes/top.html +17 -0
  89. data/site/_layouts/default.html +12 -0
  90. data/site/_layouts/docs.html +23 -0
  91. data/site/_layouts/news.html +19 -0
  92. data/site/_layouts/news_item.html +27 -0
  93. data/site/_posts/2013-05-06-jekyll-1-0-0-released.markdown +23 -0
  94. data/site/_posts/2013-05-08-jekyll-1-0-1-released.markdown +27 -0
  95. data/site/_posts/2013-05-12-jekyll-1-0-2-released.markdown +28 -0
  96. data/site/_posts/2013-06-07-jekyll-1-0-3-released.markdown +25 -0
  97. data/site/_posts/2013-07-14-jekyll-1-1-0-released.markdown +27 -0
  98. data/site/_posts/2013-07-24-jekyll-1-1-1-released.markdown +31 -0
  99. data/site/_posts/2013-07-25-jekyll-1-0-4-released.markdown +20 -0
  100. data/site/_posts/2013-07-25-jekyll-1-1-2-released.markdown +20 -0
  101. data/site/_posts/2013-09-06-jekyll-1-2-0-released.markdown +23 -0
  102. data/site/_posts/2013-09-14-jekyll-1-2-1-released.markdown +19 -0
  103. data/site/css/gridism.css +110 -0
  104. data/site/css/normalize.css +1 -0
  105. data/site/css/pygments.css +70 -0
  106. data/site/css/style.css +946 -0
  107. data/site/docs/configuration.md +373 -0
  108. data/site/docs/contributing.md +128 -0
  109. data/site/docs/datafiles.md +63 -0
  110. data/site/docs/deployment-methods.md +109 -0
  111. data/site/docs/drafts.md +20 -0
  112. data/site/docs/extras.md +56 -0
  113. data/site/docs/frontmatter.md +180 -0
  114. data/site/docs/github-pages.md +91 -0
  115. data/site/docs/heroku.md +9 -0
  116. data/site/docs/history.md +722 -0
  117. data/site/docs/index.md +52 -0
  118. data/site/docs/installation.md +76 -0
  119. data/site/docs/migrations.md +257 -0
  120. data/site/docs/pages.md +86 -0
  121. data/site/docs/pagination.md +211 -0
  122. data/site/docs/permalinks.md +180 -0
  123. data/site/docs/plugins.md +508 -0
  124. data/site/docs/posts.md +181 -0
  125. data/site/docs/quickstart.md +32 -0
  126. data/site/docs/resources.md +46 -0
  127. data/site/docs/sites.md +29 -0
  128. data/site/docs/structure.md +190 -0
  129. data/site/docs/templates.md +319 -0
  130. data/site/docs/troubleshooting.md +150 -0
  131. data/site/docs/upgrading.md +146 -0
  132. data/site/docs/usage.md +63 -0
  133. data/site/docs/variables.md +322 -0
  134. data/site/favicon.png +0 -0
  135. data/site/feed.xml +36 -0
  136. data/site/freenode.txt +1 -0
  137. data/site/img/article-footer.png +0 -0
  138. data/site/img/footer-arrow.png +0 -0
  139. data/site/img/footer-logo.png +0 -0
  140. data/site/img/logo-2x.png +0 -0
  141. data/site/img/octojekyll.png +0 -0
  142. data/site/img/tube.png +0 -0
  143. data/site/img/tube1x.png +0 -0
  144. data/site/index.html +90 -0
  145. data/site/js/modernizr-2.5.3.min.js +4 -0
  146. data/site/news/index.html +10 -0
  147. data/site/news/releases/index.html +10 -0
  148. data/test/helper.rb +6 -3
  149. data/test/source/+/foo.md +7 -0
  150. data/test/source/_data/languages.yml +2 -0
  151. data/test/source/_data/members.yaml +7 -0
  152. data/test/source/_data/products.yml +4 -0
  153. data/test/source/_includes/params.html +7 -0
  154. data/test/source/_layouts/default.html +1 -1
  155. data/test/source/_layouts/post/simple.html +1 -0
  156. data/test/source/_plugins/dummy.rb +1 -1
  157. data/test/source/_posts/2013-01-02-post-excerpt.markdown +1 -1
  158. data/test/source/_posts/2013-07-22-post-excerpt-with-layout.markdown +23 -0
  159. data/test/source/_posts/2013-08-01-mkdn-extension.mkdn +0 -0
  160. data/test/source/deal.with.dots.html +1 -1
  161. data/test/source/products.yml +4 -0
  162. data/test/test_configuration.rb +46 -11
  163. data/test/test_convertible.rb +2 -2
  164. data/test/test_excerpt.rb +78 -0
  165. data/test/test_filters.rb +4 -4
  166. data/test/test_generated_site.rb +13 -13
  167. data/test/test_json_driver.rb +9 -9
  168. data/test/test_kramdown.rb +32 -5
  169. data/test/test_new_command.rb +8 -8
  170. data/test/test_page.rb +12 -3
  171. data/test/test_pager.rb +34 -33
  172. data/test/test_post.rb +34 -26
  173. data/test/test_redcloth.rb +3 -3
  174. data/test/test_related_posts.rb +47 -0
  175. data/test/test_site.rb +102 -44
  176. data/test/test_tags.rb +168 -23
  177. data/test/test_url.rb +28 -0
  178. data/test/test_yaml_driver.rb +6 -6
  179. metadata +215 -137
  180. data/lib/monad/commands/doctor.rb +0 -29
  181. data/lib/monad/commands/new.rb +0 -50
  182. data/lib/monad/commands/serve.rb +0 -33
  183. data/lib/monad/converters/markdown/kramdown_parser.rb +0 -44
  184. data/lib/monad/deprecator.rb +0 -32
  185. data/lib/monad/generators/pagination.rb +0 -143
  186. data/lib/monad/logger.rb +0 -54
  187. data/lib/monad/tags/gist.rb +0 -30
  188. data/lib/monad/tags/include.rb +0 -37
@@ -13,8 +13,8 @@ class TestPost < Test::Unit::TestCase
13
13
  context "A Post" do
14
14
  setup do
15
15
  clear_dest
16
- stub(Monad).configuration { Monad::Configuration::DEFAULTS }
17
- @site = Site.new(Monad.configuration)
16
+ stub(Jekyll).configuration { Jekyll::Configuration::DEFAULTS }
17
+ @site = Site.new(Jekyll.configuration)
18
18
  end
19
19
 
20
20
  should "ensure valid posts are valid" do
@@ -53,7 +53,7 @@ class TestPost < Test::Unit::TestCase
53
53
  end
54
54
 
55
55
  should "raise a good error on invalid post date" do
56
- assert_raise Monad::FatalException do
56
+ assert_raise Jekyll::FatalException do
57
57
  @post.process("2009-27-03-foo-bar.textile")
58
58
  end
59
59
  end
@@ -139,7 +139,7 @@ class TestPost < Test::Unit::TestCase
139
139
  assert_equal "/2013/2008/09/09/foo-bar.html", @post.url
140
140
  end
141
141
  end
142
-
142
+
143
143
  context "with specified layout of nil" do
144
144
  setup do
145
145
  file = '2013-01-12-nil-layout.textile'
@@ -267,9 +267,10 @@ class TestPost < Test::Unit::TestCase
267
267
  context "#excerpt" do
268
268
  setup do
269
269
  file = "2013-01-02-post-excerpt.markdown"
270
+ @post = setup_post(file)
270
271
  @post.process(file)
271
272
  @post.read_yaml(@source, file)
272
- @post.transform
273
+ do_render(@post)
273
274
  end
274
275
 
275
276
  should "return first paragraph by default" do
@@ -279,11 +280,11 @@ class TestPost < Test::Unit::TestCase
279
280
  end
280
281
 
281
282
  should "correctly resolve link references" do
282
- assert @post.excerpt.include?("www.monadrb.com"), "contains referenced link URL"
283
+ assert @post.excerpt.include?("www.jekyllrb.com"), "contains referenced link URL"
283
284
  end
284
285
 
285
286
  should "return rendered HTML" do
286
- assert_equal "<p>First paragraph with <a href='http://www.monadrb.com/'>link ref</a>.</p>",
287
+ assert_equal "<p>First paragraph with <a href='http://www.jekyllrb.com/'>link ref</a>.</p>",
287
288
  @post.excerpt
288
289
  end
289
290
 
@@ -332,8 +333,8 @@ class TestPost < Test::Unit::TestCase
332
333
  context "when in a site" do
333
334
  setup do
334
335
  clear_dest
335
- stub(Monad).configuration { Monad::Configuration::DEFAULTS }
336
- @site = Site.new(Monad.configuration)
336
+ stub(Jekyll).configuration { Jekyll::Configuration::DEFAULTS }
337
+ @site = Site.new(Jekyll.configuration)
337
338
  @site.posts = [setup_post('2008-02-02-published.textile'),
338
339
  setup_post('2009-01-27-categories.textile')]
339
340
  end
@@ -422,7 +423,7 @@ class TestPost < Test::Unit::TestCase
422
423
  post = setup_post("2009-01-27-empty-categories.textile")
423
424
  assert_equal [], post.categories
424
425
  end
425
-
426
+
426
427
  should "recognize number category in yaml" do
427
428
  post = setup_post("2013-05-10-number-category.textile")
428
429
  assert post.categories.include?('2013')
@@ -440,7 +441,7 @@ class TestPost < Test::Unit::TestCase
440
441
  assert post.tags.include?('cooking')
441
442
  assert post.tags.include?('pizza')
442
443
  end
443
-
444
+
444
445
  should "recognize empty tag in yaml" do
445
446
  post = setup_post("2009-05-18-empty-tag.textile")
446
447
  assert_equal [], post.tags
@@ -528,46 +529,53 @@ class TestPost < Test::Unit::TestCase
528
529
  assert_equal ['foo'], post.categories
529
530
  end
530
531
  end
531
-
532
+
532
533
  context "converter file extension settings" do
533
534
  setup do
534
- stub(Monad).configuration { Monad::Configuration::DEFAULTS }
535
- @site = Site.new(Monad.configuration)
535
+ stub(Jekyll).configuration { Jekyll::Configuration::DEFAULTS }
536
+ @site = Site.new(Jekyll.configuration)
536
537
  end
537
-
538
+
538
539
  should "process .md as markdown under default configuration" do
539
540
  post = setup_post '2011-04-12-md-extension.md'
540
541
  conv = post.converter
541
- assert conv.kind_of? Monad::Converters::Markdown
542
+ assert conv.kind_of? Jekyll::Converters::Markdown
542
543
  end
543
-
544
+
544
545
  should "process .text as identity under default configuration" do
545
546
  post = setup_post '2011-04-12-text-extension.text'
546
547
  conv = post.converter
547
- assert conv.kind_of? Monad::Converters::Identity
548
+ assert conv.kind_of? Jekyll::Converters::Identity
548
549
  end
549
-
550
+
550
551
  should "process .text as markdown under alternate configuration" do
551
552
  @site.config['markdown_ext'] = 'markdown,mdw,mdwn,md,text'
552
553
  post = setup_post '2011-04-12-text-extension.text'
553
554
  conv = post.converter
554
- assert conv.kind_of? Monad::Converters::Markdown
555
+ assert conv.kind_of? Jekyll::Converters::Markdown
555
556
  end
556
-
557
+
557
558
  should "process .md as markdown under alternate configuration" do
558
559
  @site.config['markdown_ext'] = 'markdown,mkd,mkdn,md,text'
559
560
  post = setup_post '2011-04-12-text-extension.text'
560
561
  conv = post.converter
561
- assert conv.kind_of? Monad::Converters::Markdown
562
+ assert conv.kind_of? Jekyll::Converters::Markdown
563
+ end
564
+
565
+ should "process .mkdn under text if it is not in the markdown config" do
566
+ @site.config['markdown_ext'] = 'markdown,mkd,md,text'
567
+ post = setup_post '2013-08-01-mkdn-extension.mkdn'
568
+ conv = post.converter
569
+ assert conv.kind_of? Jekyll::Converters::Identity
562
570
  end
563
-
571
+
564
572
  should "process .text as textile under alternate configuration" do
565
573
  @site.config['textile_ext'] = 'textile,text'
566
574
  post = setup_post '2011-04-12-text-extension.text'
567
575
  conv = post.converter
568
- assert conv.kind_of? Monad::Converters::Textile
576
+ assert conv.kind_of? Jekyll::Converters::Textile
569
577
  end
570
-
578
+
571
579
  end
572
-
580
+
573
581
  end
@@ -6,7 +6,7 @@ class TestRedCloth < Test::Unit::TestCase
6
6
  setup do
7
7
  @textile = Converters::Textile.new
8
8
  end
9
-
9
+
10
10
  should "preserve single line breaks in HTML output" do
11
11
  assert_equal "<p>line1<br />\nline2</p>", @textile.convert("p. line1\nline2").strip
12
12
  end
@@ -19,7 +19,7 @@ class TestRedCloth < Test::Unit::TestCase
19
19
  }
20
20
  @textile = Converters::Textile.new config
21
21
  end
22
-
22
+
23
23
  should "preserve single line breaks in HTML output" do
24
24
  assert_equal "<p>line1<br />\nline2</p>", @textile.convert("p. line1\nline2").strip
25
25
  end
@@ -34,7 +34,7 @@ class TestRedCloth < Test::Unit::TestCase
34
34
  }
35
35
  @textile = Converters::Textile.new config
36
36
  end
37
-
37
+
38
38
  should "preserve single line breaks in HTML output" do
39
39
  assert_equal "<p>line1<br />\nline2</p>", @textile.convert("p. line1\nline2").strip
40
40
  end
@@ -0,0 +1,47 @@
1
+ require 'helper'
2
+
3
+ class TestRelatedPosts < Test::Unit::TestCase
4
+ context "building related posts without lsi" do
5
+ setup do
6
+ stub(Jekyll).configuration do
7
+ Jekyll::Configuration::DEFAULTS.merge({'source' => source_dir,
8
+ 'destination' => dest_dir})
9
+ end
10
+ @site = Site.new(Jekyll.configuration)
11
+ end
12
+
13
+ should "use the most recent posts for related posts" do
14
+ @site.reset
15
+ @site.read
16
+
17
+ last_post = @site.posts.last
18
+ related_posts = Jekyll::RelatedPosts.new(last_post).build
19
+
20
+ last_10_recent_posts = (@site.posts.reverse - [last_post]).first(10)
21
+ assert_equal last_10_recent_posts, related_posts
22
+ end
23
+ end
24
+
25
+ context "building related posts with lsi" do
26
+ setup do
27
+ stub(Jekyll).configuration do
28
+ Jekyll::Configuration::DEFAULTS.merge({'source' => source_dir,
29
+ 'destination' => dest_dir,
30
+ 'lsi' => true})
31
+ end
32
+ any_instance_of(Jekyll::RelatedPosts) { |i| stub(i).display }
33
+ @site = Site.new(Jekyll.configuration)
34
+ end
35
+
36
+ should "use lsi for the related posts" do
37
+ @site.reset
38
+ @site.read
39
+ require 'classifier'
40
+ any_instance_of(::Classifier::LSI) do |c|
41
+ stub(c).find_related { @site.posts[-1..-9] }
42
+ stub(c).build_index
43
+ end
44
+ assert_equal @site.posts[-1..-9], Jekyll::RelatedPosts.new(@site.posts.last).build
45
+ end
46
+ end
47
+ end
@@ -3,51 +3,51 @@ require 'helper'
3
3
  class TestSite < Test::Unit::TestCase
4
4
  context "configuring sites" do
5
5
  should "have an array for plugins by default" do
6
- site = Site.new(Monad::Configuration::DEFAULTS)
6
+ site = Site.new(Jekyll::Configuration::DEFAULTS)
7
7
  assert_equal [File.join(Dir.pwd, '_plugins')], site.plugins
8
8
  end
9
9
 
10
10
  should "look for plugins under the site directory by default" do
11
- site = Site.new(Monad::Configuration::DEFAULTS.merge({'source' => File.expand_path(source_dir)}))
11
+ site = Site.new(Jekyll::Configuration::DEFAULTS.merge({'source' => File.expand_path(source_dir)}))
12
12
  assert_equal [File.join(source_dir, '_plugins')], site.plugins
13
13
  end
14
14
 
15
15
  should "have an array for plugins if passed as a string" do
16
- site = Site.new(Monad::Configuration::DEFAULTS.merge({'plugins' => '/tmp/plugins'}))
16
+ site = Site.new(Jekyll::Configuration::DEFAULTS.merge({'plugins' => '/tmp/plugins'}))
17
17
  assert_equal ['/tmp/plugins'], site.plugins
18
18
  end
19
19
 
20
20
  should "have an array for plugins if passed as an array" do
21
- site = Site.new(Monad::Configuration::DEFAULTS.merge({'plugins' => ['/tmp/plugins', '/tmp/otherplugins']}))
21
+ site = Site.new(Jekyll::Configuration::DEFAULTS.merge({'plugins' => ['/tmp/plugins', '/tmp/otherplugins']}))
22
22
  assert_equal ['/tmp/plugins', '/tmp/otherplugins'], site.plugins
23
23
  end
24
24
 
25
25
  should "have an empty array for plugins if nothing is passed" do
26
- site = Site.new(Monad::Configuration::DEFAULTS.merge({'plugins' => []}))
26
+ site = Site.new(Jekyll::Configuration::DEFAULTS.merge({'plugins' => []}))
27
27
  assert_equal [], site.plugins
28
28
  end
29
29
 
30
30
  should "have an empty array for plugins if nil is passed" do
31
- site = Site.new(Monad::Configuration::DEFAULTS.merge({'plugins' => nil}))
31
+ site = Site.new(Jekyll::Configuration::DEFAULTS.merge({'plugins' => nil}))
32
32
  assert_equal [], site.plugins
33
33
  end
34
34
 
35
35
  should "expose default baseurl" do
36
- site = Site.new(Monad::Configuration::DEFAULTS)
37
- assert_equal Monad::Configuration::DEFAULTS['baseurl'], site.baseurl
36
+ site = Site.new(Jekyll::Configuration::DEFAULTS)
37
+ assert_equal Jekyll::Configuration::DEFAULTS['baseurl'], site.baseurl
38
38
  end
39
39
 
40
40
  should "expose baseurl passed in from config" do
41
- site = Site.new(Monad::Configuration::DEFAULTS.merge({'baseurl' => '/blog'}))
41
+ site = Site.new(Jekyll::Configuration::DEFAULTS.merge({'baseurl' => '/blog'}))
42
42
  assert_equal '/blog', site.baseurl
43
43
  end
44
44
  end
45
45
  context "creating sites" do
46
46
  setup do
47
- stub(Monad).configuration do
48
- Monad::Configuration::DEFAULTS.merge({'source' => source_dir, 'destination' => dest_dir})
47
+ stub(Jekyll).configuration do
48
+ Jekyll::Configuration::DEFAULTS.merge({'source' => source_dir, 'destination' => dest_dir})
49
49
  end
50
- @site = Site.new(Monad.configuration)
50
+ @site = Site.new(Jekyll.configuration)
51
51
  @num_invalid_posts = 2
52
52
  end
53
53
 
@@ -156,7 +156,7 @@ class TestSite < Test::Unit::TestCase
156
156
 
157
157
  should "read layouts" do
158
158
  @site.read_layouts
159
- assert_equal ["default", "simple"].sort, @site.layouts.keys.sort
159
+ assert_equal ["default", "simple", "post/simple"].sort, @site.layouts.keys.sort
160
160
  end
161
161
 
162
162
  should "read posts" do
@@ -195,7 +195,7 @@ class TestSite < Test::Unit::TestCase
195
195
  @site.exclude = excludes + ["exclude*"]
196
196
  assert_equal files, @site.filter_entries(excludes + files + ["excludeA"])
197
197
  end
198
-
198
+
199
199
  should "not filter entries within include" do
200
200
  includes = %w[_index.html .htaccess include*]
201
201
  files = %w[index.html _index.html .htaccess includeA]
@@ -205,10 +205,10 @@ class TestSite < Test::Unit::TestCase
205
205
  end
206
206
 
207
207
  should "filter symlink entries when safe mode enabled" do
208
- stub(Monad).configuration do
209
- Monad::Configuration::DEFAULTS.merge({'source' => source_dir, 'destination' => dest_dir, 'safe' => true})
208
+ stub(Jekyll).configuration do
209
+ Jekyll::Configuration::DEFAULTS.merge({'source' => source_dir, 'destination' => dest_dir, 'safe' => true})
210
210
  end
211
- site = Site.new(Monad.configuration)
211
+ site = Site.new(Jekyll.configuration)
212
212
  stub(File).symlink?('symlink.js') {true}
213
213
  files = %w[symlink.js]
214
214
  assert_equal [], site.filter_entries(files)
@@ -221,10 +221,10 @@ class TestSite < Test::Unit::TestCase
221
221
  end
222
222
 
223
223
  should "not include symlinks in safe mode" do
224
- stub(Monad).configuration do
225
- Monad::Configuration::DEFAULTS.merge({'source' => source_dir, 'destination' => dest_dir, 'safe' => true})
224
+ stub(Jekyll).configuration do
225
+ Jekyll::Configuration::DEFAULTS.merge({'source' => source_dir, 'destination' => dest_dir, 'safe' => true})
226
226
  end
227
- site = Site.new(Monad.configuration)
227
+ site = Site.new(Jekyll.configuration)
228
228
 
229
229
  site.read_directories("symlink-test")
230
230
  assert_equal [], site.pages
@@ -232,10 +232,10 @@ class TestSite < Test::Unit::TestCase
232
232
  end
233
233
 
234
234
  should "include symlinks in unsafe mode" do
235
- stub(Monad).configuration do
236
- Monad::Configuration::DEFAULTS.merge({'source' => source_dir, 'destination' => dest_dir, 'safe' => false})
235
+ stub(Jekyll).configuration do
236
+ Jekyll::Configuration::DEFAULTS.merge({'source' => source_dir, 'destination' => dest_dir, 'safe' => false})
237
237
  end
238
- site = Site.new(Monad.configuration)
238
+ site = Site.new(Jekyll.configuration)
239
239
 
240
240
  site.read_directories("symlink-test")
241
241
  assert_not_equal [], site.pages
@@ -244,22 +244,22 @@ class TestSite < Test::Unit::TestCase
244
244
 
245
245
  context 'error handling' do
246
246
  should "raise if destination is included in source" do
247
- stub(Monad).configuration do
248
- Monad::Configuration::DEFAULTS.merge({'source' => source_dir, 'destination' => source_dir})
247
+ stub(Jekyll).configuration do
248
+ Jekyll::Configuration::DEFAULTS.merge({'source' => source_dir, 'destination' => source_dir})
249
249
  end
250
250
 
251
- assert_raise Monad::FatalException do
252
- site = Site.new(Monad.configuration)
251
+ assert_raise Jekyll::FatalException do
252
+ site = Site.new(Jekyll.configuration)
253
253
  end
254
254
  end
255
255
 
256
256
  should "raise if destination is source" do
257
- stub(Monad).configuration do
258
- Monad::Configuration::DEFAULTS.merge({'source' => source_dir, 'destination' => File.join(source_dir, "..")})
257
+ stub(Jekyll).configuration do
258
+ Jekyll::Configuration::DEFAULTS.merge({'source' => source_dir, 'destination' => File.join(source_dir, "..")})
259
259
  end
260
260
 
261
- assert_raise Monad::FatalException do
262
- site = Site.new(Monad.configuration)
261
+ assert_raise Jekyll::FatalException do
262
+ site = Site.new(Jekyll.configuration)
263
263
  end
264
264
  end
265
265
  end
@@ -284,7 +284,7 @@ class TestSite < Test::Unit::TestCase
284
284
  File.open(dest_dir('.svn/HEAD'), 'w')
285
285
  File.open(dest_dir('.hg/HEAD'), 'w')
286
286
  end
287
-
287
+
288
288
  teardown do
289
289
  FileUtils.rm_f(dest_dir('obsolete.html'))
290
290
  FileUtils.rm_rf(dest_dir('qux'))
@@ -293,7 +293,7 @@ class TestSite < Test::Unit::TestCase
293
293
  FileUtils.rm_rf(dest_dir('.svn'))
294
294
  FileUtils.rm_rf(dest_dir('.hg'))
295
295
  end
296
-
296
+
297
297
  should 'remove orphaned files in destination' do
298
298
  @site.process
299
299
  assert !File.exist?(dest_dir('obsolete.html'))
@@ -304,7 +304,7 @@ class TestSite < Test::Unit::TestCase
304
304
  end
305
305
 
306
306
  should 'remove orphaned files in destination - keep_files .svn' do
307
- config = Monad::Configuration::DEFAULTS.merge({'source' => source_dir, 'destination' => dest_dir, 'keep_files' => ['.svn']})
307
+ config = Jekyll::Configuration::DEFAULTS.merge({'source' => source_dir, 'destination' => dest_dir, 'keep_files' => ['.svn']})
308
308
  @site = Site.new(config)
309
309
  @site.process
310
310
  assert !File.exist?(dest_dir('.htpasswd'))
@@ -317,39 +317,97 @@ class TestSite < Test::Unit::TestCase
317
317
  assert File.exist?(dest_dir('.svn/HEAD'))
318
318
  end
319
319
  end
320
-
320
+
321
321
  context 'with an invalid markdown processor in the configuration' do
322
322
  should 'not throw an error at initialization time' do
323
323
  bad_processor = 'not a processor name'
324
324
  assert_nothing_raised do
325
- Site.new(Monad.configuration.merge({ 'markdown' => bad_processor }))
325
+ Site.new(Jekyll.configuration.merge({ 'markdown' => bad_processor }))
326
326
  end
327
327
  end
328
-
328
+
329
329
  should 'throw FatalException at process time' do
330
330
  bad_processor = 'not a processor name'
331
- s = Site.new(Monad.configuration.merge({ 'markdown' => bad_processor }))
332
- assert_raise Monad::FatalException do
331
+ s = Site.new(Jekyll.configuration.merge({ 'markdown' => bad_processor }))
332
+ assert_raise Jekyll::FatalException do
333
333
  s.process
334
334
  end
335
335
  end
336
336
  end
337
-
337
+
338
+ context 'data directory' do
339
+ should 'auto load yaml files' do
340
+ site = Site.new(Jekyll.configuration)
341
+ site.process
342
+
343
+ file_content = YAML.safe_load_file(File.join(source_dir, '_data', 'members.yaml'))
344
+
345
+ assert_equal site.data['members'], file_content
346
+ assert_equal site.site_payload['site']['data']['members'], file_content
347
+ end
348
+
349
+ should 'auto load yml files' do
350
+ site = Site.new(Jekyll.configuration)
351
+ site.process
352
+
353
+ file_content = YAML.safe_load_file(File.join(source_dir, '_data', 'languages.yml'))
354
+
355
+ assert_equal site.data['languages'], file_content
356
+ assert_equal site.site_payload['site']['data']['languages'], file_content
357
+ end
358
+
359
+ should "load symlink files in unsafe mode" do
360
+ site = Site.new(Jekyll.configuration.merge({'safe' => false}))
361
+ site.process
362
+
363
+ file_content = YAML.safe_load_file(File.join(source_dir, '_data', 'products.yml'))
364
+
365
+ assert_equal site.data['products'], file_content
366
+ assert_equal site.site_payload['site']['data']['products'], file_content
367
+ end
368
+
369
+ should "not load symlink files in safe mode" do
370
+ site = Site.new(Jekyll.configuration.merge({'safe' => true}))
371
+ site.process
372
+
373
+ assert_nil site.data['products']
374
+ assert_nil site.site_payload['site']['data']['products']
375
+ end
376
+
377
+ should "load symlink directory in unsafe mode" do
378
+ site = Site.new(Jekyll.configuration.merge({'safe' => false, 'data_source' => File.join('symlink-test', '_data')}))
379
+ site.process
380
+
381
+ assert_not_nil site.data['products']
382
+ assert_not_nil site.data['languages']
383
+ assert_not_nil site.data['members']
384
+ end
385
+
386
+ should "not load symlink directory in safe mode" do
387
+ site = Site.new(Jekyll.configuration.merge({'safe' => true, 'data_source' => File.join('symlink-test', '_data')}))
388
+ site.process
389
+
390
+ assert_nil site.data['products']
391
+ assert_nil site.data['languages']
392
+ assert_nil site.data['members']
393
+ end
394
+ end
395
+
338
396
  context 'data sources' do
339
397
  should 'not throw exception if data sources is nil' do
340
398
  assert_nothing_raised do
341
- Site.new(Monad.configuration.merge({ 'data_sources' => nil }))
399
+ Site.new(Jekyll.configuration.merge({ 'data_sources' => nil }))
342
400
  end
343
401
  end
344
402
 
345
403
  should 'not throw exception if data sources is empty' do
346
404
  assert_nothing_raised do
347
- Site.new(Monad.configuration.merge({ 'data_sources' => [] }))
405
+ Site.new(Jekyll.configuration.merge({ 'data_sources' => [] }))
348
406
  end
349
407
  end
350
408
 
351
409
  should 'load one data source' do
352
- site = Site.new(Monad.configuration.merge({ 'data_sources' => [{'name' => 'jsonip', 'type' => 'json', 'url' => 'http://jsonip.com/'}] }))
410
+ site = Site.new(Jekyll.configuration.merge({ 'data_sources' => [{'name' => 'jsonip', 'type' => 'json', 'url' => 'http://jsonip.com/'}] }))
353
411
  site.process
354
412
 
355
413
  assert_not_nil site.data_sources['jsonip']['ip']
@@ -362,7 +420,7 @@ class TestSite < Test::Unit::TestCase
362
420
  base = File.expand_path('../fixtures', __FILE__)
363
421
  members = {'name' => 'members', 'type' => 'yaml', 'path' => File.join(base, 'members.yaml')}
364
422
 
365
- site = Site.new(Monad.configuration.merge({ 'data_sources' => [jsonip, members] }))
423
+ site = Site.new(Jekyll.configuration.merge({ 'data_sources' => [jsonip, members] }))
366
424
  site.process
367
425
 
368
426
  assert_not_nil site.data_sources['jsonip']['ip']