codeslinger-jekyll 0.5.0 → 0.5.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.
data/lib/jekyll/page.rb CHANGED
@@ -46,18 +46,21 @@ module Jekyll
46
46
  end
47
47
 
48
48
  # Write the generated page file to the destination directory.
49
- # +dest+ is the String path to the destination dir
49
+ # +dest_prefix+ is the String path to the destination dir
50
+ # +dest_suffix+ is a suffix path to the destination dir
50
51
  #
51
52
  # Returns nothing
52
- def write(dest)
53
- FileUtils.mkdir_p(File.join(dest, @dir))
53
+ def write(dest_prefix, dest_suffix = nil)
54
+ dest = File.join(dest_prefix, @dir)
55
+ dest = File.join(dest, dest_suffix) if dest_suffix
56
+ FileUtils.mkdir_p(dest)
54
57
 
55
58
  name = @name
56
59
  if self.ext != ""
57
60
  name = @name.split(".")[0..-2].join('.') + self.ext
58
61
  end
59
62
 
60
- path = File.join(dest, @dir, name)
63
+ path = File.join(dest, name)
61
64
  File.open(path, 'w') do |f|
62
65
  f.write(self.output)
63
66
  end
data/lib/jekyll/post.rb CHANGED
@@ -18,9 +18,12 @@ module Jekyll
18
18
  name =~ MATCHER
19
19
  end
20
20
 
21
- attr_accessor :site
22
- attr_accessor :date, :slug, :ext, :categories, :topics, :published
23
- attr_accessor :data, :content, :output
21
+ attr_accessor :site, :date, :slug, :ext, :topics, :published, :data, :content, :output
22
+ attr_writer :categories
23
+
24
+ def categories
25
+ @categories ||= []
26
+ end
24
27
 
25
28
  # Initialize this Post instance.
26
29
  # +site+ is the Site
@@ -88,16 +91,7 @@ module Jekyll
88
91
  #
89
92
  # Returns <String>
90
93
  def dir
91
- if permalink
92
- permalink.to_s.split("/")[0..-2].join("/") + '/'
93
- else
94
- prefix = self.categories.empty? ? '' : '/' + self.categories.join('/')
95
- if [:date, :pretty].include?(self.site.permalink_style)
96
- prefix + date.strftime("/%Y/%m/%d/")
97
- else
98
- prefix + '/'
99
- end
100
- end
94
+ File.dirname(url)
101
95
  end
102
96
 
103
97
  # The full path and filename of the post.
@@ -109,13 +103,35 @@ module Jekyll
109
103
  self.data && self.data['permalink']
110
104
  end
111
105
 
106
+ def template
107
+ case self.site.permalink_style
108
+ when :pretty
109
+ "/:categories/:year/:month/:day/:title"
110
+ when :none
111
+ "/:categories/:title.html"
112
+ when :date
113
+ "/:categories/:year/:month/:day/:title.html"
114
+ else
115
+ self.site.permalink_style.to_s
116
+ end
117
+ end
118
+
112
119
  # The generated relative url of this post
113
120
  # e.g. /2008/11/05/my-awesome-post.html
114
121
  #
115
122
  # Returns <String>
116
123
  def url
117
- ext = self.site.permalink_style == :pretty ? '' : '.html'
118
- permalink || self.id + ext
124
+ return permalink if permalink
125
+
126
+ @url ||= {
127
+ "year" => date.strftime("%Y"),
128
+ "month" => date.strftime("%m"),
129
+ "day" => date.strftime("%d"),
130
+ "title" => CGI.escape(slug),
131
+ "categories" => categories.sort.join('/')
132
+ }.inject(template) { |result, token|
133
+ result.gsub(/:#{token.first}/, token.last)
134
+ }.gsub(/\/\//, "/")
119
135
  end
120
136
 
121
137
  # The UID for this post (useful in feeds)
@@ -123,7 +139,7 @@ module Jekyll
123
139
  #
124
140
  # Returns <String>
125
141
  def id
126
- self.dir + self.slug
142
+ File.join(self.dir, self.slug)
127
143
  end
128
144
 
129
145
  # Calculate related posts.
@@ -172,9 +188,10 @@ module Jekyll
172
188
  def write(dest)
173
189
  FileUtils.mkdir_p(File.join(dest, dir))
174
190
 
175
- path = File.join(dest, self.url)
191
+ # The url needs to be unescaped in order to preserve the correct filename
192
+ path = File.join(dest, CGI.unescape(self.url))
176
193
 
177
- if self.site.permalink_style == :pretty
194
+ if template[/\.html$/].nil?
178
195
  FileUtils.mkdir_p(path)
179
196
  path = File.join(path, "index.html")
180
197
  end
@@ -194,12 +211,33 @@ module Jekyll
194
211
  "id" => self.id,
195
212
  "topics" => self.topics,
196
213
  "categories" => self.categories,
214
+ "next" => self.next,
215
+ "previous" => self.previous,
197
216
  "content" => self.content }.deep_merge(self.data)
198
217
  end
199
218
 
200
219
  def inspect
201
220
  "<Post: #{self.id}>"
202
221
  end
222
+
223
+ def next
224
+ pos = self.site.posts.index(self)
225
+
226
+ if pos && pos < self.site.posts.length-1
227
+ self.site.posts[pos+1]
228
+ else
229
+ nil
230
+ end
231
+ end
232
+
233
+ def previous
234
+ pos = self.site.posts.index(self)
235
+ if pos && pos > 0
236
+ self.site.posts[pos-1]
237
+ else
238
+ nil
239
+ end
240
+ end
203
241
  end
204
242
 
205
243
  end
data/lib/jekyll/site.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module Jekyll
2
2
 
3
3
  class Site
4
- attr_accessor :config, :layouts, :posts, :categories
4
+ attr_accessor :config, :layouts, :posts, :categories, :exclude
5
5
  attr_accessor :source, :dest, :lsi, :pygments, :permalink_style
6
6
 
7
7
  # Initialize the site
@@ -16,6 +16,7 @@ module Jekyll
16
16
  self.lsi = config['lsi']
17
17
  self.pygments = config['pygments']
18
18
  self.permalink_style = config['permalink'].to_sym
19
+ self.exclude = config['exclude'] || []
19
20
 
20
21
  self.reset
21
22
  self.setup
@@ -41,7 +42,6 @@ module Jekyll
41
42
  RDiscount.new(content).to_html
42
43
  end
43
44
 
44
- puts 'Using rdiscount for Markdown'
45
45
  rescue LoadError
46
46
  puts 'You must have the rdiscount gem installed first'
47
47
  end
@@ -130,12 +130,13 @@ module Jekyll
130
130
  end
131
131
  end
132
132
 
133
+ self.posts.sort!
134
+
133
135
  # second pass renders each post now that full site payload is available
134
136
  self.posts.each do |post|
135
137
  post.render(self.layouts, site_payload)
136
138
  end
137
139
 
138
- self.posts.sort!
139
140
  self.categories.values.map { |cats| cats.sort! { |a, b| b <=> a} }
140
141
  rescue Errno::ENOENT => e
141
142
  # ignore missing layout dir
@@ -171,11 +172,14 @@ module Jekyll
171
172
  directories.delete('_posts')
172
173
  read_posts(dir)
173
174
  end
175
+
174
176
  [directories, files].each do |entries|
175
177
  entries.each do |f|
176
178
  if File.directory?(File.join(base, f))
177
179
  next if self.dest.sub(/\/$/, '') == File.join(base, f)
178
180
  transform_pages(File.join(dir, f))
181
+ elsif Pager.pagination_enabled?(self.config, f)
182
+ paginate_posts(f, dir)
179
183
  else
180
184
  first3 = File.open(File.join(self.source, dir, f)) { |fd| fd.read(3) }
181
185
 
@@ -228,11 +232,34 @@ module Jekyll
228
232
  def filter_entries(entries)
229
233
  entries = entries.reject do |e|
230
234
  unless ['_posts', '.htaccess'].include?(e)
231
- # Reject backup/hidden
232
- ['.', '_', '#'].include?(e[0..0]) or e[-1..-1] == '~'
235
+ ['.', '_', '#'].include?(e[0..0]) || e[-1..-1] == '~' || self.exclude.include?(e)
233
236
  end
234
237
  end
235
238
  end
236
239
 
240
+ # Paginates the blog's posts. Renders the index.html file into paginated directories, ie: page2, page3...
241
+ # and adds more wite-wide data
242
+ #
243
+ # {"paginator" => { "page" => <Number>,
244
+ # "per_page" => <Number>,
245
+ # "posts" => [<Post>],
246
+ # "total_posts" => <Number>,
247
+ # "total_pages" => <Number>,
248
+ # "previous_page" => <Number>,
249
+ # "next_page" => <Number> }}
250
+ def paginate_posts(file, dir)
251
+ all_posts = self.posts.sort { |a,b| b <=> a }
252
+ page = Page.new(self, self.source, dir, file)
253
+
254
+ pages = Pager.calculate_pages(all_posts, self.config['paginate'].to_i)
255
+
256
+ (1..pages).each do |num_page|
257
+ pager = Pager.new(self.config, num_page, all_posts, pages)
258
+
259
+ page.render(self.layouts, site_payload.merge({'paginator' => pager.to_hash}))
260
+ suffix = "page#{num_page}" if num_page > 1
261
+ page.write(self.dest, suffix)
262
+ end
263
+ end
237
264
  end
238
265
  end
@@ -30,9 +30,9 @@ module Jekyll
30
30
  end
31
31
 
32
32
  def render_pygments(context, code)
33
- if context["content_type"] == :markdown
33
+ if context["content_type"] == "markdown"
34
34
  return "\n" + Albino.new(code, @lang).to_s(@options) + "\n"
35
- elsif context["content_type"] == :textile
35
+ elsif context["content_type"] == "textile"
36
36
  return "<notextile>" + Albino.new(code, @lang).to_s(@options) + "</notextile>"
37
37
  else
38
38
  return Albino.new(code, @lang).to_s(@options)
data/lib/jekyll.rb CHANGED
@@ -16,6 +16,7 @@ require 'redcloth'
16
16
 
17
17
  # internal requires
18
18
  require 'jekyll/core_ext'
19
+ require 'jekyll/pager'
19
20
  require 'jekyll/site'
20
21
  require 'jekyll/convertible'
21
22
  require 'jekyll/layout'
@@ -27,7 +28,7 @@ require 'jekyll/tags/include'
27
28
  require 'jekyll/albino'
28
29
 
29
30
  module Jekyll
30
- # Default options. Overriden by values in _config.yaml or command-line opts.
31
+ # Default options. Overriden by values in _config.yml or command-line opts.
31
32
  # (Strings rather symbols used for compatability with YAML)
32
33
  DEFAULTS = {
33
34
  'auto' => false,
@@ -61,7 +62,7 @@ module Jekyll
61
62
  # then, we need to know where to look for _config.yml
62
63
  source = override['source'] || Jekyll::DEFAULTS['source']
63
64
 
64
- # Get configuration from <source>/_config.yaml
65
+ # Get configuration from <source>/_config.yml
65
66
  config = {}
66
67
  config_file = File.join(source, '_config.yml')
67
68
  begin
data/test/helper.rb CHANGED
@@ -1,3 +1,6 @@
1
+ require 'rubygems'
2
+ gem 'RedCloth', '= 4.1.0'
3
+
1
4
  require File.join(File.dirname(__FILE__), *%w[.. lib jekyll])
2
5
 
3
6
  require 'test/unit'
@@ -0,0 +1,6 @@
1
+ ---
2
+ layout: default
3
+ title: Hash #1
4
+ ---
5
+
6
+ Hashes are nice
data/test/test_filters.rb CHANGED
@@ -37,5 +37,13 @@ class TestFilters < Test::Unit::TestCase
37
37
  assert_equal "AT&amp;T", @filter.xml_escape("AT&T")
38
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
39
  end
40
+
41
+ should "escape space as plus" do
42
+ assert_equal "my+things", @filter.cgi_escape("my things")
43
+ end
44
+
45
+ should "escape special characters" do
46
+ assert_equal "hey%21", @filter.cgi_escape("hey!")
47
+ end
40
48
  end
41
49
  end
@@ -18,7 +18,7 @@ class TestGeneratedSite < Test::Unit::TestCase
18
18
  end
19
19
 
20
20
  should "render post.content" do
21
- latest_post = Dir[source_dir('_posts', '*')].last
21
+ latest_post = Dir[source_dir('_posts', '*')].sort.last
22
22
  post = Post.new(@site, source_dir, '', File.basename(latest_post))
23
23
  post.transform
24
24
  assert @index.include?(post.content)
data/test/test_post.rb CHANGED
@@ -25,6 +25,7 @@ class TestPost < Test::Unit::TestCase
25
25
  assert !Post.valid?("blah")
26
26
  end
27
27
 
28
+
28
29
  context "processing posts" do
29
30
  setup do
30
31
  @post = Post.allocate
@@ -41,6 +42,8 @@ class TestPost < Test::Unit::TestCase
41
42
  assert_equal Time.parse("2008-10-19"), @post.date
42
43
  assert_equal "foo-bar", @post.slug
43
44
  assert_equal ".textile", @post.ext
45
+ assert_equal "/2008/10/19", @post.dir
46
+ assert_equal "/2008/10/19/foo-bar", @post.id
44
47
  end
45
48
 
46
49
  should "create url based on date and title" do
@@ -49,16 +52,101 @@ class TestPost < Test::Unit::TestCase
49
52
  assert_equal "/2008/10/19/foo-bar.html", @post.url
50
53
  end
51
54
 
52
- should "respect permalink" do
55
+ should "CGI escape urls" do
56
+ @post.categories = []
57
+ @post.process("2009-03-12-hash-#1.markdown")
58
+ assert_equal "/2009/03/12/hash-%231.html", @post.url
59
+ assert_equal "/2009/03/12/hash-#1", @post.id
60
+ end
61
+
62
+ should "respect permalink in yaml front matter" do
53
63
  file = "2008-12-03-permalinked-post.textile"
54
64
  @post.process(file)
55
65
  @post.read_yaml(@source, file)
56
66
 
57
67
  assert_equal "my_category/permalinked-post", @post.permalink
58
- assert_equal "my_category/", @post.dir
68
+ assert_equal "my_category", @post.dir
59
69
  assert_equal "my_category/permalinked-post", @post.url
60
70
  end
61
71
 
72
+ context "with site wide permalink" do
73
+ setup do
74
+ @post.categories = []
75
+ end
76
+
77
+ context "with unspecified (date) style" do
78
+ setup do
79
+ @post.process(@fake_file)
80
+ end
81
+
82
+ should "process the url correctly" do
83
+ assert_equal "/:categories/:year/:month/:day/:title.html", @post.template
84
+ assert_equal "/2008/10/19/foo-bar.html", @post.url
85
+ end
86
+ end
87
+
88
+ context "with unspecified (date) style and a category" do
89
+ setup do
90
+ @post.categories << "beer"
91
+ @post.process(@fake_file)
92
+ end
93
+
94
+ should "process the url correctly" do
95
+ assert_equal "/:categories/:year/:month/:day/:title.html", @post.template
96
+ assert_equal "/beer/2008/10/19/foo-bar.html", @post.url
97
+ end
98
+ end
99
+
100
+ context "with unspecified (date) style and categories" do
101
+ setup do
102
+ @post.categories << "food"
103
+ @post.categories << "beer"
104
+ @post.process(@fake_file)
105
+ end
106
+
107
+ should "process the url correctly" do
108
+ assert_equal "/:categories/:year/:month/:day/:title.html", @post.template
109
+ assert_equal "/beer/food/2008/10/19/foo-bar.html", @post.url
110
+ end
111
+ end
112
+
113
+ context "with none style" do
114
+ setup do
115
+ @post.site.permalink_style = :none
116
+ @post.process(@fake_file)
117
+ end
118
+
119
+ should "process the url correctly" do
120
+ assert_equal "/:categories/:title.html", @post.template
121
+ assert_equal "/foo-bar.html", @post.url
122
+ end
123
+ end
124
+
125
+ context "with pretty style" do
126
+ setup do
127
+ @post.site.permalink_style = :pretty
128
+ @post.process(@fake_file)
129
+ end
130
+
131
+ should "process the url correctly" do
132
+ assert_equal "/:categories/:year/:month/:day/:title", @post.template
133
+ assert_equal "/2008/10/19/foo-bar", @post.url
134
+ end
135
+ end
136
+
137
+ context "with prefix style and no extension" do
138
+ setup do
139
+ @post.site.permalink_style = "/prefix/:title"
140
+ @post.process(@fake_file)
141
+ end
142
+
143
+ should "process the url correctly" do
144
+ assert_equal "/prefix/:title", @post.template
145
+ assert_equal "/prefix/foo-bar", @post.url
146
+ end
147
+ end
148
+ end
149
+
62
150
  should "read yaml front-matter" do
63
151
  @post.read_yaml(@source, @real_file)
64
152
 
@@ -75,6 +163,32 @@ class TestPost < Test::Unit::TestCase
75
163
  end
76
164
  end
77
165
 
166
+ context "when in a site" do
167
+ setup do
168
+ clear_dest
169
+ stub(Jekyll).configuration { Jekyll::DEFAULTS }
170
+ @site = Site.new(Jekyll.configuration)
171
+ @site.posts = [setup_post('2008-02-02-published.textile'),
172
+ setup_post('2009-01-27-categories.textile')]
173
+ end
174
+
175
+ should "have next post" do
176
+ assert_equal(@site.posts.last, @site.posts.first.next)
177
+ end
178
+
179
+ should "have previous post" do
180
+ assert_equal(@site.posts.first, @site.posts.last.previous)
181
+ end
182
+
183
+ should "not have previous post if first" do
184
+ assert_equal(nil, @site.posts.first.previous)
185
+ end
186
+
187
+ should "not have next post if last" do
188
+ assert_equal(nil, @site.posts.last.next)
189
+ end
190
+ end
191
+
78
192
  context "initializing posts" do
79
193
  should "publish when published yaml is no specified" do
80
194
  post = setup_post("2008-02-02-published.textile")
@@ -118,6 +232,16 @@ class TestPost < Test::Unit::TestCase
118
232
  assert File.exists?(File.join(dest_dir, '2008', '10', '18', 'foo-bar.html'))
119
233
  end
120
234
 
235
+ should "write properly without html extension" do
236
+ post = setup_post("2008-10-18-foo-bar.textile")
237
+ post.site.permalink_style = ":title"
238
+ do_render(post)
239
+ post.write(dest_dir)
240
+
241
+ assert File.directory?(dest_dir)
242
+ assert File.exists?(File.join(dest_dir, 'foo-bar', 'index.html'))
243
+ end
244
+
121
245
  should "insert data" do
122
246
  post = setup_post("2008-11-21-complex.textile")
123
247
  do_render(post)
data/test/test_site.rb CHANGED
@@ -53,5 +53,13 @@ class TestSite < Test::Unit::TestCase
53
53
  assert_equal %w[foo.markdown bar.markdown baz.markdown], @site.filter_entries(ent1)
54
54
  assert_equal ent2, @site.filter_entries(ent2)
55
55
  end
56
+
57
+ should "filter entries with exclude" do
58
+ excludes = %w[README TODO]
59
+ includes = %w[index.html site.css]
60
+
61
+ @site.exclude = excludes
62
+ assert_equal includes, @site.filter_entries(excludes + includes)
63
+ end
56
64
  end
57
65
  end
data/test/test_tags.rb CHANGED
@@ -1,35 +1,116 @@
1
1
  require File.dirname(__FILE__) + '/helper'
2
2
 
3
3
  class TestTags < Test::Unit::TestCase
4
- context "tagging" do
5
- setup do
6
- @content = <<CONTENT
4
+
5
+ def create_post(content, override = {}, markdown = true)
6
+ stub(Jekyll).configuration do
7
+ Jekyll::DEFAULTS.merge({'pygments' => true}).merge(override)
8
+ end
9
+ site = Site.new(Jekyll.configuration)
10
+ info = { :filters => [Jekyll::Filters], :registers => { :site => site } }
11
+
12
+ if markdown
13
+ payload = {"content_type" => "markdown"}
14
+ else
15
+ payload = {"content_type" => "textile"}
16
+ end
17
+
18
+ @result = Liquid::Template.parse(content).render(payload, info)
19
+
20
+ if markdown
21
+ @result = site.markdown(@result)
22
+ else
23
+ @result = site.textile(@result)
24
+ end
25
+ end
26
+
27
+ def fill_post(code, override = {})
28
+ content = <<CONTENT
7
29
  ---
8
- layout: post
9
30
  title: This is a test
10
-
11
31
  ---
32
+
12
33
  This document results in a markdown error with maruku
13
34
 
14
- {% highlight ruby %}
15
- puts "hi"
35
+ {% highlight text %}
36
+ #{code}
37
+ {% endhighlight %}
38
+ CONTENT
39
+ create_post(content, override)
40
+ end
41
+
42
+ context "post content has highlight tag" do
43
+ setup do
44
+ fill_post("test")
45
+ end
46
+
47
+ should "not cause a markdown error" do
48
+ assert_no_match /markdown\-html\-error/, @result
49
+ end
50
+
51
+ should "render markdown with pygments line handling" do
52
+ assert_match %{<pre>test\n</pre>}, @result
53
+ end
54
+ end
16
55
 
17
- puts "bye"
56
+ context "post content has highlight tag with UTF character" do
57
+ setup do
58
+ fill_post("Æ")
59
+ end
60
+
61
+ should "render markdown with pygments line handling" do
62
+ assert_match %{<pre>Æ\n</pre>}, @result
63
+ end
64
+ end
65
+
66
+ context "simple post with markdown and pre tags" do
67
+ setup do
68
+ @content = <<CONTENT
69
+ ---
70
+ title: Maruku vs. RDiscount
71
+ ---
72
+
73
+ _FIGHT!_
74
+
75
+ {% highlight ruby %}
76
+ puts "3..2..1.."
18
77
  {% endhighlight %}
19
78
 
79
+ *FINISH HIM*
20
80
  CONTENT
21
81
  end
22
82
 
23
- should "render markdown with pygments line handling" do
24
- stub(Jekyll).configuration do
25
- Jekyll::DEFAULTS.merge({'pygments' => true})
83
+ context "using Textile" do
84
+ setup do
85
+ create_post(@content, {}, false)
86
+ end
87
+
88
+ # Broken in RedCloth 4.1.9
89
+ should "not textilize highlight block" do
90
+ assert_no_match %r{3\.\.2\.\.1\.\.&quot;</span><br />}, @result
91
+ end
92
+ end
93
+
94
+ context "using Maruku" do
95
+ setup do
96
+ create_post(@content)
26
97
  end
27
- site = Site.new(Jekyll.configuration)
28
- info = { :filters => [Jekyll::Filters], :registers => { :site => site } }
29
98
 
30
- result = Liquid::Template.parse(@content).render({}, info)
31
- result = site.markdown(result)
32
- assert_no_match(/markdown\-html\-error/,result)
99
+ should "parse correctly" do
100
+ assert_match %r{<em>FIGHT!</em>}, @result
101
+ assert_match %r{<em>FINISH HIM</em>}, @result
102
+ end
103
+ end
104
+
105
+ context "using RDiscount" do
106
+ setup do
107
+ create_post(@content, 'markdown' => 'rdiscount')
108
+ end
109
+
110
+ should "parse correctly" do
111
+ assert_match %r{<em>FIGHT!</em>}, @result
112
+ assert_match %r{<em>FINISH HIM</em>}, @result
113
+ end
33
114
  end
34
115
  end
35
116
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codeslinger-jekyll
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Preston-Werner
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-04-07 00:00:00 -07:00
12
+ date: 2009-05-06 00:00:00 -07:00
13
13
  default_executable: jekyll
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -18,9 +18,9 @@ dependencies:
18
18
  version_requirement:
19
19
  version_requirements: !ruby/object:Gem::Requirement
20
20
  requirements:
21
- - - ">="
21
+ - - "="
22
22
  - !ruby/object:Gem::Version
23
- version: 4.0.4
23
+ version: 4.1.0
24
24
  version:
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: liquid
@@ -116,6 +116,7 @@ files:
116
116
  - test/source/_posts/2009-01-27-array-categories.textile
117
117
  - test/source/_posts/2009-01-27-categories.textile
118
118
  - test/source/_posts/2009-01-27-category.textile
119
+ - test/source/_posts/2009-03-12-hash-#1.markdown
119
120
  - test/source/category/_posts/2008-9-23-categories.textile
120
121
  - test/source/css/screen.css
121
122
  - test/source/foo/_posts/bar/2008-12-12-topical-post.textile