jekyll-docs 3.6.0 → 3.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (253) hide show
  1. checksums.yaml +4 -4
  2. data/lib/jekyll.rb +195 -0
  3. data/lib/jekyll/cleaner.rb +110 -0
  4. data/lib/jekyll/collection.rb +230 -0
  5. data/lib/jekyll/command.rb +78 -0
  6. data/lib/jekyll/commands/build.rb +102 -0
  7. data/lib/jekyll/commands/clean.rb +43 -0
  8. data/lib/jekyll/commands/doctor.rb +153 -0
  9. data/lib/jekyll/commands/help.rb +34 -0
  10. data/lib/jekyll/commands/new.rb +156 -0
  11. data/lib/jekyll/commands/new_theme.rb +40 -0
  12. data/lib/jekyll/commands/serve.rb +245 -0
  13. data/lib/jekyll/commands/serve/servlet.rb +62 -0
  14. data/lib/jekyll/configuration.rb +410 -0
  15. data/lib/jekyll/converter.rb +54 -0
  16. data/lib/jekyll/converters/identity.rb +23 -0
  17. data/lib/jekyll/converters/markdown.rb +104 -0
  18. data/lib/jekyll/converters/markdown/kramdown_parser.rb +123 -0
  19. data/lib/jekyll/converters/markdown/rdiscount_parser.rb +35 -0
  20. data/lib/jekyll/converters/markdown/redcarpet_parser.rb +108 -0
  21. data/lib/jekyll/converters/smartypants.rb +36 -0
  22. data/lib/jekyll/convertible.rb +251 -0
  23. data/lib/jekyll/deprecator.rb +52 -0
  24. data/lib/jekyll/document.rb +507 -0
  25. data/lib/jekyll/drops/collection_drop.rb +22 -0
  26. data/lib/jekyll/drops/document_drop.rb +69 -0
  27. data/lib/jekyll/drops/drop.rb +214 -0
  28. data/lib/jekyll/drops/excerpt_drop.rb +15 -0
  29. data/lib/jekyll/drops/jekyll_drop.rb +33 -0
  30. data/lib/jekyll/drops/site_drop.rb +47 -0
  31. data/lib/jekyll/drops/static_file_drop.rb +13 -0
  32. data/lib/jekyll/drops/unified_payload_drop.rb +25 -0
  33. data/lib/jekyll/drops/url_drop.rb +88 -0
  34. data/lib/jekyll/entry_filter.rb +123 -0
  35. data/lib/jekyll/errors.rb +20 -0
  36. data/lib/jekyll/excerpt.rb +126 -0
  37. data/lib/jekyll/external.rb +74 -0
  38. data/lib/jekyll/filters.rb +430 -0
  39. data/lib/jekyll/filters/grouping_filters.rb +65 -0
  40. data/lib/jekyll/filters/url_filters.rb +60 -0
  41. data/lib/jekyll/frontmatter_defaults.rb +197 -0
  42. data/lib/jekyll/generator.rb +5 -0
  43. data/lib/jekyll/hooks.rb +104 -0
  44. data/lib/jekyll/layout.rb +62 -0
  45. data/lib/jekyll/liquid_extensions.rb +24 -0
  46. data/lib/jekyll/liquid_renderer.rb +49 -0
  47. data/lib/jekyll/liquid_renderer/file.rb +56 -0
  48. data/lib/jekyll/liquid_renderer/table.rb +96 -0
  49. data/lib/jekyll/log_adapter.rb +147 -0
  50. data/lib/jekyll/mime.types +825 -0
  51. data/lib/jekyll/page.rb +187 -0
  52. data/lib/jekyll/plugin.rb +98 -0
  53. data/lib/jekyll/plugin_manager.rb +113 -0
  54. data/lib/jekyll/publisher.rb +23 -0
  55. data/lib/jekyll/reader.rb +134 -0
  56. data/lib/jekyll/readers/collection_reader.rb +22 -0
  57. data/lib/jekyll/readers/data_reader.rb +77 -0
  58. data/lib/jekyll/readers/layout_reader.rb +71 -0
  59. data/lib/jekyll/readers/page_reader.rb +25 -0
  60. data/lib/jekyll/readers/post_reader.rb +72 -0
  61. data/lib/jekyll/readers/static_file_reader.rb +25 -0
  62. data/lib/jekyll/readers/theme_assets_reader.rb +49 -0
  63. data/lib/jekyll/regenerator.rb +201 -0
  64. data/lib/jekyll/related_posts.rb +52 -0
  65. data/lib/jekyll/renderer.rb +269 -0
  66. data/lib/jekyll/site.rb +471 -0
  67. data/lib/jekyll/static_file.rb +162 -0
  68. data/lib/jekyll/stevenson.rb +61 -0
  69. data/lib/jekyll/tags/highlight.rb +141 -0
  70. data/lib/jekyll/tags/include.rb +215 -0
  71. data/lib/jekyll/tags/link.rb +37 -0
  72. data/lib/jekyll/tags/post_url.rb +103 -0
  73. data/lib/jekyll/theme.rb +68 -0
  74. data/lib/jekyll/theme_builder.rb +119 -0
  75. data/lib/jekyll/url.rb +161 -0
  76. data/lib/jekyll/utils.rb +337 -0
  77. data/lib/jekyll/utils/ansi.rb +59 -0
  78. data/lib/jekyll/utils/exec.rb +27 -0
  79. data/lib/jekyll/utils/platforms.rb +82 -0
  80. data/lib/jekyll/utils/rouge.rb +21 -0
  81. data/lib/jekyll/utils/win_tz.rb +75 -0
  82. data/lib/jekyll/version.rb +5 -0
  83. data/lib/site_template/404.html +24 -0
  84. data/lib/site_template/_config.yml +43 -0
  85. data/lib/site_template/_posts/0000-00-00-welcome-to-jekyll.markdown.erb +25 -0
  86. data/lib/site_template/about.md +18 -0
  87. data/lib/site_template/index.md +6 -0
  88. data/lib/theme_template/CODE_OF_CONDUCT.md.erb +74 -0
  89. data/lib/theme_template/Gemfile +4 -0
  90. data/lib/theme_template/LICENSE.txt.erb +21 -0
  91. data/lib/theme_template/README.md.erb +52 -0
  92. data/lib/theme_template/_layouts/default.html +1 -0
  93. data/lib/theme_template/_layouts/page.html +5 -0
  94. data/lib/theme_template/_layouts/post.html +5 -0
  95. data/lib/theme_template/example/_config.yml.erb +1 -0
  96. data/lib/theme_template/example/_post.md +12 -0
  97. data/lib/theme_template/example/index.html +14 -0
  98. data/lib/theme_template/example/style.scss +7 -0
  99. data/lib/theme_template/gitignore.erb +5 -0
  100. data/lib/theme_template/theme.gemspec.erb +19 -0
  101. metadata +103 -156
  102. data/lib/jekyll-docs.rb +0 -31
  103. data/site/404.html +0 -153
  104. data/site/CNAME +0 -1
  105. data/site/community/index.html +0 -299
  106. data/site/conduct/index.html +0 -10
  107. data/site/css/screen.css +0 -1
  108. data/site/docs/assets/index.html +0 -724
  109. data/site/docs/code_of_conduct/index.html +0 -730
  110. data/site/docs/collections/index.html +0 -1097
  111. data/site/docs/conduct/index.html +0 -744
  112. data/site/docs/configuration/index.html +0 -1403
  113. data/site/docs/continuous-integration/buddyworks/index.html +0 -726
  114. data/site/docs/continuous-integration/circleci/index.html +0 -757
  115. data/site/docs/continuous-integration/index.html +0 -681
  116. data/site/docs/continuous-integration/travis-ci/index.html +0 -891
  117. data/site/docs/contributing/index.html +0 -863
  118. data/site/docs/datafiles/index.html +0 -780
  119. data/site/docs/deployment-methods/index.html +0 -875
  120. data/site/docs/drafts/index.html +0 -636
  121. data/site/docs/extras/index.html +0 -689
  122. data/site/docs/frontmatter/index.html +0 -807
  123. data/site/docs/github-pages/index.html +0 -819
  124. data/site/docs/history/index.html +0 -3955
  125. data/site/docs/home/index.html +0 -644
  126. data/site/docs/includes/index.html +0 -800
  127. data/site/docs/index.html +0 -10
  128. data/site/docs/installation/index.html +0 -732
  129. data/site/docs/maintaining/affinity-team-captain/index.html +0 -706
  130. data/site/docs/maintaining/avoiding-burnout/index.html +0 -709
  131. data/site/docs/maintaining/becoming-a-maintainer/index.html +0 -717
  132. data/site/docs/maintaining/index.html +0 -713
  133. data/site/docs/maintaining/merging-a-pull-request/index.html +0 -747
  134. data/site/docs/maintaining/reviewing-a-pull-request/index.html +0 -725
  135. data/site/docs/maintaining/special-labels/index.html +0 -705
  136. data/site/docs/maintaining/triaging-an-issue/index.html +0 -735
  137. data/site/docs/migrations/index.html +0 -647
  138. data/site/docs/pages/index.html +0 -695
  139. data/site/docs/pagination/index.html +0 -870
  140. data/site/docs/permalinks/index.html +0 -1027
  141. data/site/docs/plugins/index.html +0 -1800
  142. data/site/docs/posts/index.html +0 -858
  143. data/site/docs/quickstart/index.html +0 -650
  144. data/site/docs/resources/index.html +0 -769
  145. data/site/docs/sites/index.html +0 -702
  146. data/site/docs/static-files/index.html +0 -720
  147. data/site/docs/structure/index.html +0 -822
  148. data/site/docs/templates/index.html +0 -1208
  149. data/site/docs/themes/index.html +0 -935
  150. data/site/docs/troubleshooting/index.html +0 -893
  151. data/site/docs/upgrading/0-to-2/index.html +0 -826
  152. data/site/docs/upgrading/2-to-3/index.html +0 -824
  153. data/site/docs/upgrading/index.html +0 -693
  154. data/site/docs/usage/index.html +0 -705
  155. data/site/docs/variables/index.html +0 -1048
  156. data/site/docs/windows/index.html +0 -799
  157. data/site/favicon.ico +0 -0
  158. data/site/feed.xml +0 -372
  159. data/site/fonts/FontAwesome.eot +0 -0
  160. data/site/fonts/FontAwesome.svg +0 -12
  161. data/site/fonts/FontAwesome.ttf +0 -0
  162. data/site/fonts/FontAwesome.woff +0 -0
  163. data/site/github.html +0 -10
  164. data/site/help/index.html +0 -244
  165. data/site/icomoon-selection.json +0 -96
  166. data/site/img/article-footer.png +0 -0
  167. data/site/img/footer-arrow.png +0 -0
  168. data/site/img/footer-logo.png +0 -0
  169. data/site/img/jekyll-sticker.jpg +0 -0
  170. data/site/img/jekylllayoutconcept.png +0 -0
  171. data/site/img/logo-2x.png +0 -0
  172. data/site/img/logo-rss.png +0 -0
  173. data/site/img/octojekyll.png +0 -0
  174. data/site/index.html +0 -267
  175. data/site/issues.html +0 -10
  176. data/site/js/html5shiv.min.js +0 -4
  177. data/site/js/respond.min.js +0 -5
  178. data/site/latest_version.txt +0 -1
  179. data/site/news/2013/05/05/jekyll-1-0-0-released/index.html +0 -570
  180. data/site/news/2013/05/08/jekyll-1-0-1-released/index.html +0 -570
  181. data/site/news/2013/05/12/jekyll-1-0-2-released/index.html +0 -571
  182. data/site/news/2013/06/07/jekyll-1-0-3-released/index.html +0 -568
  183. data/site/news/2013/07/14/jekyll-1-1-0-released/index.html +0 -570
  184. data/site/news/2013/07/24/jekyll-1-1-1-released/index.html +0 -569
  185. data/site/news/2013/07/25/jekyll-1-0-4-released/index.html +0 -565
  186. data/site/news/2013/07/25/jekyll-1-1-2-released/index.html +0 -565
  187. data/site/news/2013/09/06/jekyll-1-2-0-released/index.html +0 -572
  188. data/site/news/2013/09/14/jekyll-1-2-1-released/index.html +0 -566
  189. data/site/news/2013/10/28/jekyll-1-3-0-rc1-released/index.html +0 -564
  190. data/site/news/2013/11/04/jekyll-1-3-0-released/index.html +0 -599
  191. data/site/news/2013/11/26/jekyll-1-3-1-released/index.html +0 -568
  192. data/site/news/2013/12/07/jekyll-1-4-0-released/index.html +0 -583
  193. data/site/news/2013/12/09/jekyll-1-4-1-released/index.html +0 -565
  194. data/site/news/2013/12/16/jekyll-1-4-2-released/index.html +0 -564
  195. data/site/news/2014/01/13/jekyll-1-4-3-released/index.html +0 -573
  196. data/site/news/2014/03/24/jekyll-1-5-0-released/index.html +0 -564
  197. data/site/news/2014/03/27/jekyll-1-5-1-released/index.html +0 -569
  198. data/site/news/2014/05/06/jekyll-turns-2-0-0/index.html +0 -585
  199. data/site/news/2014/05/08/jekyll-2-0-3-released/index.html +0 -565
  200. data/site/news/2014/06/04/jekyll-stickers-1-dollar-stickermule/index.html +0 -567
  201. data/site/news/2014/06/28/jekyll-turns-21-i-mean-2-1-0/index.html +0 -582
  202. data/site/news/2014/07/01/jekyll-2-1-1-released/index.html +0 -579
  203. data/site/news/2014/07/29/jekyll-2-2-0-released/index.html +0 -568
  204. data/site/news/2014/08/10/jekyll-2-3-0-released/index.html +0 -588
  205. data/site/news/2014/09/09/jekyll-2-4-0-released/index.html +0 -574
  206. data/site/news/2014/11/05/jekylls-midlife-crisis-jekyll-turns-2-5-0/index.html +0 -597
  207. data/site/news/2014/11/09/jekyll-2-5-1-released/index.html +0 -575
  208. data/site/news/2014/11/12/jekyll-2-5-2-released/index.html +0 -565
  209. data/site/news/2014/12/17/alfredxing-welcome-to-jekyll-core/index.html +0 -572
  210. data/site/news/2014/12/22/jekyll-2-5-3-released/index.html +0 -567
  211. data/site/news/2015/01/20/jekyll-meet-and-greet/index.html +0 -568
  212. data/site/news/2015/01/24/jekyll-3-0-0-beta1-released/index.html +0 -588
  213. data/site/news/2015/02/26/introducing-jekyll-talk/index.html +0 -563
  214. data/site/news/2015/10/26/jekyll-3-0-released/index.html +0 -592
  215. data/site/news/2015/11/17/jekyll-3-0-1-released/index.html +0 -576
  216. data/site/news/2016/01/20/jekyll-3-0-2-released/index.html +0 -566
  217. data/site/news/2016/01/24/jekyll-3-1-0-released/index.html +0 -599
  218. data/site/news/2016/01/28/jekyll-3-1-1-released/index.html +0 -583
  219. data/site/news/2016/02/08/jekyll-3-0-3-released/index.html +0 -578
  220. data/site/news/2016/02/19/jekyll-3-1-2-released/index.html +0 -569
  221. data/site/news/2016/03/10/making-it-easier-to-contribute-to-jekyll/index.html +0 -565
  222. data/site/news/2016/04/19/jekyll-3-0-4-released/index.html +0 -571
  223. data/site/news/2016/04/19/jekyll-3-1-3-released/index.html +0 -566
  224. data/site/news/2016/04/26/jekyll-3-0-5-released/index.html +0 -572
  225. data/site/news/2016/05/18/jekyll-3-1-4-released/index.html +0 -576
  226. data/site/news/2016/05/18/jekyll-3-1-5-released/index.html +0 -564
  227. data/site/news/2016/05/19/jekyll-3-1-6-released/index.html +0 -566
  228. data/site/news/2016/06/03/update-on-jekyll-s-google-summer-of-code-projects/index.html +0 -567
  229. data/site/news/2016/07/26/jekyll-3-2-0-released/index.html +0 -676
  230. data/site/news/2016/08/02/jekyll-3-2-1-released/index.html +0 -571
  231. data/site/news/2016/08/24/jekyll-admin-initial-release/index.html +0 -566
  232. data/site/news/2016/10/06/jekyll-3-3-is-here/index.html +0 -645
  233. data/site/news/2016/11/14/jekyll-3-3-1-released/index.html +0 -569
  234. data/site/news/2017/01/18/jekyll-3-4-0-released/index.html +0 -592
  235. data/site/news/2017/03/02/jekyll-3-4-1-released/index.html +0 -649
  236. data/site/news/2017/03/09/jekyll-3-4-2-released/index.html +0 -598
  237. data/site/news/2017/03/21/jekyll-3-4-3-released/index.html +0 -594
  238. data/site/news/2017/06/15/jekyll-3-5-0-released/index.html +0 -589
  239. data/site/news/2017/07/17/jekyll-3-5-1-released/index.html +0 -569
  240. data/site/news/2017/08/12/jekyll-3-5-2-released/index.html +0 -573
  241. data/site/news/2017/09/21/jekyll-3-6-0-released/index.html +0 -565
  242. data/site/news/index.html +0 -3609
  243. data/site/news/releases/index.html +0 -3344
  244. data/site/philosophy.html +0 -46
  245. data/site/readme.md +0 -23
  246. data/site/robots.txt +0 -1
  247. data/site/sitemap.xml +0 -485
  248. data/site/tutorials/convert-site-to-jekyll/index.html +0 -793
  249. data/site/tutorials/custom-404-page/index.html +0 -358
  250. data/site/tutorials/home/index.html +0 -323
  251. data/site/tutorials/index.html +0 -10
  252. data/site/tutorials/navigation/index.html +0 -872
  253. data/site/tutorials/orderofinterpretation/index.html +0 -441
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4f708b326481792e17dd24c606c6ffb1467b7c7d
4
- data.tar.gz: 223f0f568cf858965f2112b68441c916bd4fd3ff
3
+ metadata.gz: 67ece4fe4f1363dd4868a123b407c88643e0dea9
4
+ data.tar.gz: b2abb678aa9cf401640d2216b45b2a8e9fdf8586
5
5
  SHA512:
6
- metadata.gz: b29ca9f2bc658c4b070662238f4e8987183d58837af1c3e521382253dfe7657657802f7270fd3f5ed8fd689555b1b6535358201803341af036557cadfc4c45b5
7
- data.tar.gz: 007aa7d79069b6f21843e51798014d6f522ad8f2747557c50cab0c02ea959f05b5a19ef1845eb271f4ffcc0e442efee1d7091187ef52ee5ab608e399de477826
6
+ metadata.gz: d176d534a005962681c3e541f5934c8dbd3517826c1cc7d18d84a3f5820111c2239c16650afc998f2d9f9148e5212cf7107e31504e4fc9c5d339c4a008c0299e
7
+ data.tar.gz: 68f42fc5ee357a010a42957750432782cadd9645471ebf69f1aaa977e7e785f2431a87df7bdbca48db672bb5eb48505309853cd44bc851e890a082cad1c7beb6
data/lib/jekyll.rb ADDED
@@ -0,0 +1,195 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.unshift __dir__ # For use/testing when no gem is installed
4
+
5
+ # Require all of the Ruby files in the given directory.
6
+ #
7
+ # path - The String relative path from here to the directory.
8
+ #
9
+ # Returns nothing.
10
+ def require_all(path)
11
+ glob = File.join(__dir__, path, "*.rb")
12
+ Dir[glob].sort.each do |f|
13
+ require f
14
+ end
15
+ end
16
+
17
+ # rubygems
18
+ require "rubygems"
19
+
20
+ # stdlib
21
+ require "pathutil"
22
+ require "forwardable"
23
+ require "fileutils"
24
+ require "time"
25
+ require "English"
26
+ require "pathname"
27
+ require "logger"
28
+ require "set"
29
+
30
+ # 3rd party
31
+ require "safe_yaml/load"
32
+ require "liquid"
33
+ require "kramdown"
34
+ require "colorator"
35
+
36
+ SafeYAML::OPTIONS[:suppress_warnings] = true
37
+
38
+ module Jekyll
39
+ # internal requires
40
+ autoload :Cleaner, "jekyll/cleaner"
41
+ autoload :Collection, "jekyll/collection"
42
+ autoload :Configuration, "jekyll/configuration"
43
+ autoload :Convertible, "jekyll/convertible"
44
+ autoload :Deprecator, "jekyll/deprecator"
45
+ autoload :Document, "jekyll/document"
46
+ autoload :EntryFilter, "jekyll/entry_filter"
47
+ autoload :Errors, "jekyll/errors"
48
+ autoload :Excerpt, "jekyll/excerpt"
49
+ autoload :External, "jekyll/external"
50
+ autoload :FrontmatterDefaults, "jekyll/frontmatter_defaults"
51
+ autoload :Hooks, "jekyll/hooks"
52
+ autoload :Layout, "jekyll/layout"
53
+ autoload :CollectionReader, "jekyll/readers/collection_reader"
54
+ autoload :DataReader, "jekyll/readers/data_reader"
55
+ autoload :LayoutReader, "jekyll/readers/layout_reader"
56
+ autoload :PostReader, "jekyll/readers/post_reader"
57
+ autoload :PageReader, "jekyll/readers/page_reader"
58
+ autoload :StaticFileReader, "jekyll/readers/static_file_reader"
59
+ autoload :ThemeAssetsReader, "jekyll/readers/theme_assets_reader"
60
+ autoload :LogAdapter, "jekyll/log_adapter"
61
+ autoload :Page, "jekyll/page"
62
+ autoload :PluginManager, "jekyll/plugin_manager"
63
+ autoload :Publisher, "jekyll/publisher"
64
+ autoload :Reader, "jekyll/reader"
65
+ autoload :Regenerator, "jekyll/regenerator"
66
+ autoload :RelatedPosts, "jekyll/related_posts"
67
+ autoload :Renderer, "jekyll/renderer"
68
+ autoload :LiquidRenderer, "jekyll/liquid_renderer"
69
+ autoload :Site, "jekyll/site"
70
+ autoload :StaticFile, "jekyll/static_file"
71
+ autoload :Stevenson, "jekyll/stevenson"
72
+ autoload :Theme, "jekyll/theme"
73
+ autoload :ThemeBuilder, "jekyll/theme_builder"
74
+ autoload :URL, "jekyll/url"
75
+ autoload :Utils, "jekyll/utils"
76
+ autoload :VERSION, "jekyll/version"
77
+
78
+ # extensions
79
+ require "jekyll/plugin"
80
+ require "jekyll/converter"
81
+ require "jekyll/generator"
82
+ require "jekyll/command"
83
+ require "jekyll/liquid_extensions"
84
+ require "jekyll/filters"
85
+
86
+ class << self
87
+ # Public: Tells you which Jekyll environment you are building in so you can skip tasks
88
+ # if you need to. This is useful when doing expensive compression tasks on css and
89
+ # images and allows you to skip that when working in development.
90
+
91
+ def env
92
+ ENV["JEKYLL_ENV"] || "development"
93
+ end
94
+
95
+ # Public: Generate a Jekyll configuration Hash by merging the default
96
+ # options with anything in _config.yml, and adding the given options on top.
97
+ #
98
+ # override - A Hash of config directives that override any options in both
99
+ # the defaults and the config file.
100
+ # See Jekyll::Configuration::DEFAULTS for a
101
+ # list of option names and their defaults.
102
+ #
103
+ # Returns the final configuration Hash.
104
+ def configuration(override = {})
105
+ config = Configuration.new
106
+ override = Configuration[override].stringify_keys
107
+ unless override.delete("skip_config_files")
108
+ config = config.read_config_files(config.config_files(override))
109
+ end
110
+
111
+ # Merge DEFAULTS < _config.yml < override
112
+ Configuration.from(Utils.deep_merge_hashes(config, override)).tap do |obj|
113
+ set_timezone(obj["timezone"]) if obj["timezone"]
114
+ end
115
+ end
116
+
117
+ # Public: Set the TZ environment variable to use the timezone specified
118
+ #
119
+ # timezone - the IANA Time Zone
120
+ #
121
+ # Returns nothing
122
+ # rubocop:disable Naming/AccessorMethodName
123
+ def set_timezone(timezone)
124
+ ENV["TZ"] = if Utils::Platforms.really_windows?
125
+ Utils::WinTZ.calculate(timezone)
126
+ else
127
+ timezone
128
+ end
129
+ end
130
+ # rubocop:enable Naming/AccessorMethodName
131
+
132
+ # Public: Fetch the logger instance for this Jekyll process.
133
+ #
134
+ # Returns the LogAdapter instance.
135
+ def logger
136
+ @logger ||= LogAdapter.new(Stevenson.new, (ENV["JEKYLL_LOG_LEVEL"] || :info).to_sym)
137
+ end
138
+
139
+ # Public: Set the log writer.
140
+ # New log writer must respond to the same methods
141
+ # as Ruby's interal Logger.
142
+ #
143
+ # writer - the new Logger-compatible log transport
144
+ #
145
+ # Returns the new logger.
146
+ def logger=(writer)
147
+ @logger = LogAdapter.new(writer, (ENV["JEKYLL_LOG_LEVEL"] || :info).to_sym)
148
+ end
149
+
150
+ # Public: An array of sites
151
+ #
152
+ # Returns the Jekyll sites created.
153
+ def sites
154
+ @sites ||= []
155
+ end
156
+
157
+ # Public: Ensures the questionable path is prefixed with the base directory
158
+ # and prepends the questionable path with the base directory if false.
159
+ #
160
+ # base_directory - the directory with which to prefix the questionable path
161
+ # questionable_path - the path we're unsure about, and want prefixed
162
+ #
163
+ # Returns the sanitized path.
164
+ def sanitized_path(base_directory, questionable_path)
165
+ return base_directory if base_directory.eql?(questionable_path)
166
+
167
+ clean_path = questionable_path.dup
168
+ clean_path.insert(0, "/") if clean_path.start_with?("~")
169
+ clean_path = File.expand_path(clean_path, "/")
170
+
171
+ return clean_path if clean_path.eql?(base_directory)
172
+
173
+ if clean_path.start_with?(base_directory.sub(%r!\z!, "/"))
174
+ clean_path
175
+ else
176
+ clean_path.sub!(%r!\A\w:/!, "/")
177
+ File.join(base_directory, clean_path)
178
+ end
179
+ end
180
+
181
+ # Conditional optimizations
182
+ Jekyll::External.require_if_present("liquid-c")
183
+ end
184
+ end
185
+
186
+ require "jekyll/drops/drop"
187
+ require "jekyll/drops/document_drop"
188
+ require_all "jekyll/commands"
189
+ require_all "jekyll/converters"
190
+ require_all "jekyll/converters/markdown"
191
+ require_all "jekyll/drops"
192
+ require_all "jekyll/generators"
193
+ require_all "jekyll/tags"
194
+
195
+ require "jekyll-sass-converter"
@@ -0,0 +1,110 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "set"
4
+
5
+ module Jekyll
6
+ # Handles the cleanup of a site's destination before it is built.
7
+ class Cleaner
8
+ HIDDEN_FILE_REGEX = %r!\/\.{1,2}$!
9
+ attr_reader :site
10
+
11
+ def initialize(site)
12
+ @site = site
13
+ end
14
+
15
+ # Cleans up the site's destination directory
16
+ def cleanup!
17
+ FileUtils.rm_rf(obsolete_files)
18
+ FileUtils.rm_rf(metadata_file) unless @site.incremental?
19
+ end
20
+
21
+ private
22
+
23
+ # Private: The list of files and directories to be deleted during cleanup process
24
+ #
25
+ # Returns an Array of the file and directory paths
26
+ def obsolete_files
27
+ (existing_files - new_files - new_dirs + replaced_files).to_a
28
+ end
29
+
30
+ # Private: The metadata file storing dependency tree and build history
31
+ #
32
+ # Returns an Array with the metdata file as the only item
33
+ def metadata_file
34
+ [site.regenerator.metadata_file]
35
+ end
36
+
37
+ # Private: The list of existing files, apart from those included in
38
+ # keep_files and hidden files.
39
+ #
40
+ # Returns a Set with the file paths
41
+ def existing_files
42
+ files = Set.new
43
+ regex = keep_file_regex
44
+ dirs = keep_dirs
45
+
46
+ Utils.safe_glob(site.in_dest_dir, ["**", "*"], File::FNM_DOTMATCH).each do |file|
47
+ next if file =~ HIDDEN_FILE_REGEX || file =~ regex || dirs.include?(file)
48
+ files << file
49
+ end
50
+
51
+ files
52
+ end
53
+
54
+ # Private: The list of files to be created when site is built.
55
+ #
56
+ # Returns a Set with the file paths
57
+ def new_files
58
+ files = Set.new
59
+ site.each_site_file { |item| files << item.destination(site.dest) }
60
+ files
61
+ end
62
+
63
+ # Private: The list of directories to be created when site is built.
64
+ # These are the parent directories of the files in #new_files.
65
+ #
66
+ # Returns a Set with the directory paths
67
+ def new_dirs
68
+ new_files.map { |file| parent_dirs(file) }.flatten.to_set
69
+ end
70
+
71
+ # Private: The list of parent directories of a given file
72
+ #
73
+ # Returns an Array with the directory paths
74
+ def parent_dirs(file)
75
+ parent_dir = File.dirname(file)
76
+ if parent_dir == site.dest
77
+ []
78
+ else
79
+ [parent_dir] + parent_dirs(parent_dir)
80
+ end
81
+ end
82
+
83
+ # Private: The list of existing files that will be replaced by a directory
84
+ # during build
85
+ #
86
+ # Returns a Set with the file paths
87
+ def replaced_files
88
+ new_dirs.select { |dir| File.file?(dir) }.to_set
89
+ end
90
+
91
+ # Private: The list of directories that need to be kept because they are
92
+ # parent directories of files specified in keep_files
93
+ #
94
+ # Returns a Set with the directory paths
95
+ def keep_dirs
96
+ site.keep_files.map { |file| parent_dirs(site.in_dest_dir(file)) }.flatten.to_set
97
+ end
98
+
99
+ # Private: Creates a regular expression from the config's keep_files array
100
+ #
101
+ # Examples
102
+ # ['.git','.svn'] with site.dest "/myblog/_site" creates
103
+ # the following regex: /\A\/myblog\/_site\/(\.git|\/.svn)/
104
+ #
105
+ # Returns the regular expression
106
+ def keep_file_regex
107
+ %r!\A#{Regexp.quote(site.dest)}\/(#{Regexp.union(site.keep_files).source})!
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,230 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ class Collection
5
+ attr_reader :site, :label, :metadata
6
+ attr_writer :docs
7
+
8
+ # Create a new Collection.
9
+ #
10
+ # site - the site to which this collection belongs.
11
+ # label - the name of the collection
12
+ #
13
+ # Returns nothing.
14
+ def initialize(site, label)
15
+ @site = site
16
+ @label = sanitize_label(label)
17
+ @metadata = extract_metadata
18
+ end
19
+
20
+ # Fetch the Documents in this collection.
21
+ # Defaults to an empty array if no documents have been read in.
22
+ #
23
+ # Returns an array of Jekyll::Document objects.
24
+ def docs
25
+ @docs ||= []
26
+ end
27
+
28
+ # Override of normal respond_to? to match method_missing's logic for
29
+ # looking in @data.
30
+ def respond_to_missing?(method, include_private = false)
31
+ docs.respond_to?(method.to_sym, include_private) || super
32
+ end
33
+
34
+ # Override of method_missing to check in @data for the key.
35
+ def method_missing(method, *args, &blck)
36
+ if docs.respond_to?(method.to_sym)
37
+ Jekyll.logger.warn "Deprecation:",
38
+ "#{label}.#{method} should be changed to #{label}.docs.#{method}."
39
+ Jekyll.logger.warn "", "Called by #{caller(0..0)}."
40
+ docs.public_send(method.to_sym, *args, &blck)
41
+ else
42
+ super
43
+ end
44
+ end
45
+
46
+ # Fetch the static files in this collection.
47
+ # Defaults to an empty array if no static files have been read in.
48
+ #
49
+ # Returns an array of Jekyll::StaticFile objects.
50
+ def files
51
+ @files ||= []
52
+ end
53
+
54
+ # Read the allowed documents into the collection's array of docs.
55
+ #
56
+ # Returns the sorted array of docs.
57
+ def read
58
+ filtered_entries.each do |file_path|
59
+ full_path = collection_dir(file_path)
60
+ next if File.directory?(full_path)
61
+ if Utils.has_yaml_header? full_path
62
+ read_document(full_path)
63
+ else
64
+ read_static_file(file_path, full_path)
65
+ end
66
+ end
67
+ docs.sort!
68
+ end
69
+
70
+ # All the entries in this collection.
71
+ #
72
+ # Returns an Array of file paths to the documents in this collection
73
+ # relative to the collection's directory
74
+ def entries
75
+ return [] unless exists?
76
+ @entries ||=
77
+ Utils.safe_glob(collection_dir, ["**", "*"], File::FNM_DOTMATCH).map do |entry|
78
+ entry["#{collection_dir}/"] = ""
79
+ entry
80
+ end
81
+ end
82
+
83
+ # Filtered version of the entries in this collection.
84
+ # See `Jekyll::EntryFilter#filter` for more information.
85
+ #
86
+ # Returns a list of filtered entry paths.
87
+ def filtered_entries
88
+ return [] unless exists?
89
+ @filtered_entries ||=
90
+ Dir.chdir(directory) do
91
+ entry_filter.filter(entries).reject do |f|
92
+ path = collection_dir(f)
93
+ File.directory?(path) || entry_filter.symlink?(f)
94
+ end
95
+ end
96
+ end
97
+
98
+ # The directory for this Collection, relative to the site source.
99
+ #
100
+ # Returns a String containing the directory name where the collection
101
+ # is stored on the filesystem.
102
+ def relative_directory
103
+ @relative_directory ||= "_#{label}"
104
+ end
105
+
106
+ # The full path to the directory containing the collection.
107
+ #
108
+ # Returns a String containing th directory name where the collection
109
+ # is stored on the filesystem.
110
+ def directory
111
+ @directory ||= site.in_source_dir(relative_directory)
112
+ end
113
+
114
+ # The full path to the directory containing the collection, with
115
+ # optional subpaths.
116
+ #
117
+ # *files - (optional) any other path pieces relative to the
118
+ # directory to append to the path
119
+ #
120
+ # Returns a String containing th directory name where the collection
121
+ # is stored on the filesystem.
122
+ def collection_dir(*files)
123
+ return directory if files.empty?
124
+ site.in_source_dir(relative_directory, *files)
125
+ end
126
+
127
+ # Checks whether the directory "exists" for this collection.
128
+ # The directory must exist on the filesystem and must not be a symlink
129
+ # if in safe mode.
130
+ #
131
+ # Returns false if the directory doesn't exist or if it's a symlink
132
+ # and we're in safe mode.
133
+ def exists?
134
+ File.directory?(directory) && !entry_filter.symlink?(directory)
135
+ end
136
+
137
+ # The entry filter for this collection.
138
+ # Creates an instance of Jekyll::EntryFilter.
139
+ #
140
+ # Returns the instance of Jekyll::EntryFilter for this collection.
141
+ def entry_filter
142
+ @entry_filter ||= Jekyll::EntryFilter.new(site, relative_directory)
143
+ end
144
+
145
+ # An inspect string.
146
+ #
147
+ # Returns the inspect string
148
+ def inspect
149
+ "#<Jekyll::Collection @label=#{label} docs=#{docs}>"
150
+ end
151
+
152
+ # Produce a sanitized label name
153
+ # Label names may not contain anything but alphanumeric characters,
154
+ # underscores, and hyphens.
155
+ #
156
+ # label - the possibly-unsafe label
157
+ #
158
+ # Returns a sanitized version of the label.
159
+ def sanitize_label(label)
160
+ label.gsub(%r![^a-z0-9_\-\.]!i, "")
161
+ end
162
+
163
+ # Produce a representation of this Collection for use in Liquid.
164
+ # Exposes two attributes:
165
+ # - label
166
+ # - docs
167
+ #
168
+ # Returns a representation of this collection for use in Liquid.
169
+ def to_liquid
170
+ Drops::CollectionDrop.new self
171
+ end
172
+
173
+ # Whether the collection's documents ought to be written as individual
174
+ # files in the output.
175
+ #
176
+ # Returns true if the 'write' metadata is true, false otherwise.
177
+ def write?
178
+ !!metadata.fetch("output", false)
179
+ end
180
+
181
+ # The URL template to render collection's documents at.
182
+ #
183
+ # Returns the URL template to render collection's documents at.
184
+ def url_template
185
+ @url_template ||= metadata.fetch("permalink") do
186
+ Utils.add_permalink_suffix("/:collection/:path", site.permalink_style)
187
+ end
188
+ end
189
+
190
+ # Extract options for this collection from the site configuration.
191
+ #
192
+ # Returns the metadata for this collection
193
+ def extract_metadata
194
+ if site.config["collections"].is_a?(Hash)
195
+ site.config["collections"][label] || {}
196
+ else
197
+ {}
198
+ end
199
+ end
200
+
201
+ private
202
+
203
+ def read_document(full_path)
204
+ doc = Jekyll::Document.new(full_path, :site => site, :collection => self)
205
+ doc.read
206
+ if site.publisher.publish?(doc) || !write?
207
+ docs << doc
208
+ else
209
+ Jekyll.logger.debug "Skipped From Publishing:", doc.relative_path
210
+ end
211
+ end
212
+
213
+ private
214
+
215
+ def read_static_file(file_path, full_path)
216
+ relative_dir = Jekyll.sanitized_path(
217
+ relative_directory,
218
+ File.dirname(file_path)
219
+ ).chomp("/.")
220
+
221
+ files << StaticFile.new(
222
+ site,
223
+ site.source,
224
+ relative_dir,
225
+ File.basename(full_path),
226
+ self
227
+ )
228
+ end
229
+ end
230
+ end