fluffy_barbarian 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in fluffy_barbarian.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,40 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ fluffy_barbarian (0.0.1)
5
+ RedCloth
6
+ activesupport
7
+ haml
8
+ i18n
9
+ rack
10
+ rdiscount
11
+ tilt
12
+
13
+ GEM
14
+ remote: http://rubygems.org/
15
+ specs:
16
+ RedCloth (4.2.3)
17
+ activesupport (3.0.1)
18
+ haml (3.0.23)
19
+ i18n (0.4.1)
20
+ rack (1.2.1)
21
+ rake (0.8.7)
22
+ rdiscount (1.6.5)
23
+ test-spec (0.10.0)
24
+ tilt (1.1)
25
+
26
+ PLATFORMS
27
+ ruby
28
+
29
+ DEPENDENCIES
30
+ RedCloth
31
+ activesupport
32
+ bundler
33
+ fluffy_barbarian!
34
+ haml
35
+ i18n
36
+ rack
37
+ rake
38
+ rdiscount
39
+ test-spec
40
+ tilt
data/README.markdown ADDED
@@ -0,0 +1,21 @@
1
+ Fluffy barbarian
2
+ =============
3
+
4
+ Very simple blog engine. Content from disk is rendered with tilt.
5
+
6
+ A sample project is being worked on right now!
7
+
8
+ Installation
9
+ -----------
10
+
11
+ gem install fluffy_barbarian
12
+
13
+ Tests
14
+ -----
15
+
16
+ bundle exec rake test
17
+
18
+ Usage
19
+ -----
20
+
21
+ TODO
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rake'
5
+ require 'rake/testtask'
6
+
7
+ Rake::TestTask.new do |t|
8
+ t.libs << "test"
9
+ t.verbose = true
10
+ t.test_files = FileList['test/**/*_test.rb']
11
+ end
@@ -0,0 +1,36 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "fluffy_barbarian/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "fluffy_barbarian"
7
+ s.version = FluffyBarbarian::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Cristi Balan"]
10
+ s.email = ["evil@che.lu"]
11
+ s.homepage = "http://rubygems.org/gems/fluffy_barbarian"
12
+ s.summary = %q{Fluffy barbarian carefully handles your blog}
13
+ s.description = s.summary + "!"
14
+
15
+ s.rubyforge_project = "fluffy_barbarian"
16
+
17
+ fixture_files = Dir["test/fixtures/content/_posts/*.mkd"]
18
+ files = "git ls-files --exclude='test/fixtures/content/_posts/*.mkd'"
19
+
20
+ s.files = `#{files}`.split("\n") + fixture_files
21
+ s.test_files = `#{files} -- {test,spec,features}/*`.split("\n") + fixture_files
22
+ s.executables = `#{files} -- bin/*`.split("\n").map{ |f| File.basename(f) }
23
+ s.require_paths = ["lib"]
24
+
25
+ s.add_development_dependency "bundler"
26
+ s.add_development_dependency "rake"
27
+ s.add_development_dependency "test-spec"
28
+
29
+ s.add_dependency "RedCloth"
30
+ s.add_dependency "i18n"
31
+ s.add_dependency "activesupport"
32
+ s.add_dependency "haml"
33
+ s.add_dependency "rack"
34
+ s.add_dependency "rdiscount"
35
+ s.add_dependency "tilt"
36
+ end
@@ -0,0 +1,86 @@
1
+ require 'uri'
2
+ require 'rack'
3
+
4
+ require 'haml'
5
+ require 'rdiscount'
6
+ require 'RedCloth'
7
+ require 'tilt'
8
+
9
+ class RawTemplate < Tilt::Template
10
+ def prepare
11
+ data
12
+ end
13
+
14
+ def precompiled_template(locals)
15
+ data
16
+ end
17
+
18
+ def evaluate(*args)
19
+ data
20
+ end
21
+ end
22
+ Tilt.register 'html', RawTemplate
23
+ Tilt.register 'css', RawTemplate
24
+
25
+ module FluffyBarbarian
26
+ class Application
27
+ include Rack::Utils
28
+ alias_method :h, :escape_html
29
+
30
+ # etag probably only useful outside of heroku
31
+ # use Rack::ETag
32
+
33
+ # set this much lower if you're not on heroku
34
+ # (i.e. if you don't have a reverse proxy)
35
+ # expires(60*60*24*10, :public)
36
+
37
+ def development?
38
+ ENV['RACK_ENV'] == 'development'
39
+ end
40
+
41
+ def production?
42
+ ENV['RACK_ENV'] == 'production'
43
+ end
44
+
45
+ def template_dir; "templates"; end
46
+ def content_dir; "content"; end
47
+ def layout; "layout"; end
48
+
49
+ def render(*args)
50
+ if args.first.is_a? Hash
51
+ options = args.first
52
+ t = options.delete(:template)
53
+ else
54
+ t = args.shift
55
+ options = args.shift || {}
56
+ end
57
+ c = options.delete(:content)
58
+ l = options.has_key?(:layout) ? options.delete(:layout) : layout
59
+
60
+ locals = options.delete(:locals) || locals || {}
61
+
62
+ if t
63
+ output = Tilt.new(guess_file(template_dir, t)).render(self, locals)
64
+ output = Tilt.new(guess_file(template_dir, l)).render(self, locals) { output } if l
65
+ elsif c
66
+ output = Tilt.new(guess_file(content_dir, c)).render(self, locals)
67
+ else
68
+ raise ArgumentError
69
+ end
70
+
71
+ output
72
+ end
73
+
74
+ def guess_file(dir, path)
75
+ dir = dir.to_s
76
+ path = path.to_s
77
+
78
+ return path if File.exists? path
79
+
80
+ path = File.join(dir, path)
81
+ return path if File.exists? path
82
+
83
+ return Dir["#{path}*"].first
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,33 @@
1
+ require 'active_support'
2
+ require 'active_support/inflector/transliterate'
3
+ require 'date'
4
+
5
+ module Enumerable
6
+ def tidy
7
+ self.find_all{ |e| e && e.tidy != "" }.map(&:tidy)
8
+ end
9
+ end
10
+
11
+ class String
12
+ def tidy
13
+ self.chomp.strip.squeeze(" ")
14
+ end
15
+
16
+ # nicked form AS
17
+ def parameterize(sep = '-')
18
+ ActiveSupport::Inflector.parameterize(self, sep)
19
+ end
20
+ end
21
+
22
+ class Date
23
+ def to_s(style=nil)
24
+ month_names = ['ianuarie', 'februarie', 'martie', 'aprilie', 'mai', 'iunie', 'iulie', 'august', 'septembrie', 'octombrie', 'noiembrie', 'decembrie']
25
+ case style
26
+ when :short
27
+ "#{self.day} #{month_names[self.month-1]}"
28
+ when :long
29
+ "#{self.day} #{month_names[self.month-1]} #{self.year}"
30
+ else
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,123 @@
1
+ module FluffyBarbarian
2
+ class Index
3
+ public
4
+ def initialize(path="content/_posts")
5
+ @path = path
6
+ @index_path = "#{@path}.mkd"
7
+ @parsed = nil
8
+ @on_disk = nil
9
+ end
10
+
11
+ def parsed(text=nil)
12
+ return @parsed if @parsed
13
+
14
+ text ||= File.read(@index_path)
15
+ @parsed = []
16
+ posts = text.split(/^(# .*$)\n/).tidy
17
+ posts.each_with_index do |title, index|
18
+ next unless title[0..1] == "# "
19
+
20
+ post = parse_meta(posts[index+1])
21
+ post[:title] = title[2..-1].tidy
22
+
23
+ post[:autoslug] = post[:title].parameterize
24
+ unless post[:slug]
25
+ post[:slug] = post[:autoslug]
26
+ end
27
+ post[:url] = "/#{post[:happened_on].tr("-","/")}/#{post[:slug]}"
28
+
29
+ @parsed << post
30
+ end
31
+
32
+ @parsed
33
+ end
34
+
35
+ def on_disk(path=nil)
36
+ return @on_disk if @on_disk
37
+
38
+ path ||= @path
39
+
40
+ @on_disk = Dir[File.join(path, "**", "*")].select{ |f| File.file? f }
41
+ @on_disk = @on_disk.sort.map do |file|
42
+ title = File.basename(file, ".*").tidy
43
+ { :title => title, :path => File.expand_path(file),
44
+ :autoslug => title.parameterize,
45
+ :extname => File.extname(file) }
46
+ end
47
+ end
48
+
49
+ def sane?
50
+ return false if parsed.length != on_disk.length
51
+ end
52
+
53
+ def all
54
+ @all ||= parsed.map do |post|
55
+ if file = on_disk.find{ |f| f[:autoslug] == post[:autoslug] }
56
+ post[:path] = file[:path]
57
+ post[:extname] = file[:extname]
58
+ post
59
+ end
60
+ end.compact.each_with_index do |post, index|
61
+ post[:index] = index
62
+ post[:type] = "post"
63
+ post[:updated_on] = updated_on(post)
64
+ end
65
+ end
66
+
67
+ def find(splat, slug)
68
+ @post = all.find{|p| p[:slug] == slug.parameterize }
69
+
70
+ return nil unless @post
71
+
72
+ dir = splat.split("/").tidy.map{ |part| part.parameterize }.join("/")
73
+ if slug != @post[:slug] || dir != @post[:happened_on].tr("-","/")
74
+ @post[:fuzzy] = true
75
+ else
76
+ @post[:content] ||= Tilt.new(@post[:path]).render
77
+ @post[:previous] = all[@post[:index] - 1] if @post[:index] > 0
78
+ @post[:next] = all[@post[:index] + 1]
79
+ end
80
+
81
+ @post
82
+ end
83
+
84
+ private
85
+ # according to RFC3339. Example: 2003-12-13T18:30:02Z
86
+ def updated_on(post)
87
+ title = post[:title].gsub(" ", "")
88
+ # so that we don't have two posts on the same date :D
89
+ minutes = title[0].chr.downcase[0] - 87
90
+ seconds = title[1].chr.downcase[0] - 87
91
+ "#{post[:written_on]}T12:#{minutes}:#{seconds}Z"
92
+ end
93
+
94
+ def parse_meta(raw_meta)
95
+ meta = {}
96
+ raw_meta.split("\n").tidy.each do |line|
97
+ if !line.include? ":"
98
+ dates = line.split(",").tidy.map { |d|
99
+ Date.parse(d.gsub(/\D/, "-")).strftime("%Y-%m-%d")
100
+ }
101
+ meta[:happened_on] = dates[0]
102
+ meta[:written_on] = dates[1] || meta[:happened_on]
103
+ else
104
+ parts = line.split(":").tidy
105
+ key = parts[0].to_sym
106
+ case key
107
+ when :tags
108
+ meta[key] = parts[1].split(",").tidy
109
+ when :location
110
+ # can be
111
+ # Buenos Aires
112
+ # Caranavi(-15.833,-67.565)
113
+ location = parts[1].split(/\(|\)/)
114
+ meta[key] = [ location[0], location[1] || location[0] ]
115
+ else
116
+ meta[key] = parts[1]
117
+ end
118
+ end
119
+ end
120
+ meta
121
+ end
122
+ end
123
+ end
@@ -0,0 +1,39 @@
1
+ module FluffyBarbarian
2
+ class Page
3
+ def self.all(path="content/_pages")
4
+ @pages = Dir[File.join(path, "**", "*")].select{ |f| File.file? f }
5
+ @pages = @pages.sort.map do |file|
6
+ title = File.basename(file, ".*").tidy
7
+ dir = file.split("/")[2..-2].map{ |dir| dir.parameterize }.join("/")
8
+ slug = title.parameterize
9
+ { :title => title, :path => File.expand_path(file), :type => "page",
10
+ :autoslug => slug,
11
+ :slug => slug,
12
+ :dir => dir,
13
+ :url => "#{"/#{dir}" if dir != ""}/#{slug}",
14
+ :extname => File.extname(file) }
15
+ end
16
+ end
17
+
18
+ def self.find(splat, slug)
19
+ dir = ""
20
+ # scope by directory first
21
+ if splat
22
+ dir = splat.split("/").tidy.map{ |part| part.parameterize }.join("/")
23
+
24
+ @page = all.find{|page| page[:dir] == dir && page[:slug] == slug.parameterize }
25
+ end
26
+ @page ||= all.find{|page| page[:slug] == slug.parameterize }
27
+
28
+ return nil unless @page
29
+
30
+ if slug != @page[:slug] || dir != @page[:dir]
31
+ @page[:fuzzy] = true
32
+ else
33
+ @page[:content] ||= Tilt.new(@page[:path]).render
34
+ end
35
+
36
+ @page
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,4 @@
1
+ module FluffyBarbarian
2
+ class Post
3
+ end
4
+ end
@@ -0,0 +1,3 @@
1
+ module FluffyBarbarian
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,15 @@
1
+ require 'fluffy_barbarian/ext'
2
+
3
+ require 'fluffy_barbarian/index'
4
+ require 'fluffy_barbarian/post'
5
+ require 'fluffy_barbarian/page'
6
+ require 'fluffy_barbarian/application'
7
+
8
+ module FluffyBarbarian
9
+ class FluffyBarbarianError < StandardError
10
+ # def message
11
+ # value = super
12
+ # value if value != self.class.name
13
+ # end
14
+ end
15
+ end
@@ -0,0 +1 @@
1
+ [Mmm more pie](http://www.weebls-stuff.com/wab/donkey/)
@@ -0,0 +1 @@
1
+ [Mmm pie](http://www.weebls-stuff.com/wab/pie/)
@@ -0,0 +1,8 @@
1
+ # I'm içi, todo bem?
2
+ 2009 11 17, 2010 06 02
3
+ tags: brasil, greeting, todo bém
4
+
5
+ # Mmm pie
6
+ 2009 12 18, 2010 06 05
7
+ tags: mmm, pie
8
+
@@ -0,0 +1,69 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper")
2
+
3
+ describe "FluffyBarbarian::Index, parsing" do
4
+ [
5
+ ["# Mmm pie\n 2009 10 01, 2010 04 12\n tags: brazil, sao paulo",
6
+ [
7
+ { :title => "Mmm pie", :autoslug => "mmm-pie", :slug => "mmm-pie",
8
+ :url => "/2009/10/01/mmm-pie",
9
+ :happened_on => "2009-10-01", :written_on => "2010-04-12",
10
+ :tags => ["brazil", "sao paulo"] }
11
+ ]
12
+ ],
13
+
14
+ ["# Mmm more pie\n 2009 10 15 \n pie: brazil, sao paulo \nslug: moar-pie",
15
+ [
16
+ { :title => "Mmm more pie", :autoslug => "mmm-more-pie", :slug => "moar-pie",
17
+ :url => "/2009/10/15/moar-pie",
18
+ :happened_on => "2009-10-15", :written_on => "2009-10-15",
19
+ :pie => "brazil, sao paulo" }
20
+ ]
21
+ ],
22
+
23
+ ["# Mmm pie\n 2009 10 01, 2010 04 12\n tags: brazil, sao paulo\n\n" +
24
+ "# Mmm more pie\n 2009 10 15 \n pie: brazil , sao paulo",
25
+ [
26
+ { :title => "Mmm pie", :slug => "mmm-pie", :autoslug => "mmm-pie",
27
+ :url => "/2009/10/01/mmm-pie",
28
+ :happened_on => "2009-10-01", :written_on => "2010-04-12",
29
+ :tags => ["brazil", "sao paulo"] },
30
+
31
+ { :title => "Mmm more pie", :slug => "mmm-more-pie", :autoslug => "mmm-more-pie",
32
+ :url => "/2009/10/15/mmm-more-pie",
33
+ :happened_on => "2009-10-15", :written_on => "2009-10-15",
34
+ :pie => "brazil , sao paulo" }
35
+ ],
36
+ ]
37
+
38
+ ].each_with_index do |(raw, parsed), i|
39
+ it "should parse: take #{i}" do
40
+ FluffyBarbarian::Index.new.parsed(raw).should == parsed
41
+ end
42
+ end
43
+
44
+ end
45
+
46
+ describe "FluffyBarbarian::Index, finding" do
47
+ it "should find all posts on disk" do
48
+ index = FluffyBarbarian::Index.new(File.join(FIXTURES, "content/_posts"))
49
+
50
+ index.on_disk.collect{|f| f[:title]}.should ==
51
+ ["I'm içi, todo bem?", "Mmm more pie", "Mmm pie", "Möré weîrd stuff!"]
52
+
53
+ index.on_disk.first[:extname].should == ".mkd"
54
+ end
55
+
56
+ it "should know if it's sane" do
57
+ index = FluffyBarbarian::Index.new(File.join(FIXTURES, "content/_posts"))
58
+ index.should.not.be.sane
59
+ end
60
+
61
+ it "should return all available posts" do
62
+ index = FluffyBarbarian::Index.new(File.join(FIXTURES, "content/_posts"))
63
+
64
+ index.all.collect{|f| f[:title]}.should ==
65
+ ["I'm içi, todo bem?", "Mmm pie"]
66
+
67
+ index.all.first[:extname].should == ".mkd"
68
+ end
69
+ end
@@ -0,0 +1,9 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), "../lib")
2
+ ENV["RACK_ENV"] = "test"
3
+
4
+ FIXTURES = File.join(File.dirname(__FILE__), "fixtures")
5
+
6
+ # require 'mocha'
7
+ require 'test/spec'
8
+
9
+ require 'fluffy_barbarian'
metadata ADDED
@@ -0,0 +1,232 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fluffy_barbarian
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Cristi Balan
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-11-01 00:00:00 -04:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: bundler
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :development
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: rake
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
47
+ type: :development
48
+ version_requirements: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ name: test-spec
51
+ prerelease: false
52
+ requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ type: :development
62
+ version_requirements: *id003
63
+ - !ruby/object:Gem::Dependency
64
+ name: RedCloth
65
+ prerelease: false
66
+ requirement: &id004 !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ hash: 3
72
+ segments:
73
+ - 0
74
+ version: "0"
75
+ type: :runtime
76
+ version_requirements: *id004
77
+ - !ruby/object:Gem::Dependency
78
+ name: i18n
79
+ prerelease: false
80
+ requirement: &id005 !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ hash: 3
86
+ segments:
87
+ - 0
88
+ version: "0"
89
+ type: :runtime
90
+ version_requirements: *id005
91
+ - !ruby/object:Gem::Dependency
92
+ name: activesupport
93
+ prerelease: false
94
+ requirement: &id006 !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ hash: 3
100
+ segments:
101
+ - 0
102
+ version: "0"
103
+ type: :runtime
104
+ version_requirements: *id006
105
+ - !ruby/object:Gem::Dependency
106
+ name: haml
107
+ prerelease: false
108
+ requirement: &id007 !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ hash: 3
114
+ segments:
115
+ - 0
116
+ version: "0"
117
+ type: :runtime
118
+ version_requirements: *id007
119
+ - !ruby/object:Gem::Dependency
120
+ name: rack
121
+ prerelease: false
122
+ requirement: &id008 !ruby/object:Gem::Requirement
123
+ none: false
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ hash: 3
128
+ segments:
129
+ - 0
130
+ version: "0"
131
+ type: :runtime
132
+ version_requirements: *id008
133
+ - !ruby/object:Gem::Dependency
134
+ name: rdiscount
135
+ prerelease: false
136
+ requirement: &id009 !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ hash: 3
142
+ segments:
143
+ - 0
144
+ version: "0"
145
+ type: :runtime
146
+ version_requirements: *id009
147
+ - !ruby/object:Gem::Dependency
148
+ name: tilt
149
+ prerelease: false
150
+ requirement: &id010 !ruby/object:Gem::Requirement
151
+ none: false
152
+ requirements:
153
+ - - ">="
154
+ - !ruby/object:Gem::Version
155
+ hash: 3
156
+ segments:
157
+ - 0
158
+ version: "0"
159
+ type: :runtime
160
+ version_requirements: *id010
161
+ description: Fluffy barbarian carefully handles your blog!
162
+ email:
163
+ - evil@che.lu
164
+ executables: []
165
+
166
+ extensions: []
167
+
168
+ extra_rdoc_files: []
169
+
170
+ files:
171
+ - .gitignore
172
+ - Gemfile
173
+ - Gemfile.lock
174
+ - README.markdown
175
+ - Rakefile
176
+ - fluffy_barbarian.gemspec
177
+ - lib/fluffy_barbarian.rb
178
+ - lib/fluffy_barbarian/application.rb
179
+ - lib/fluffy_barbarian/ext.rb
180
+ - lib/fluffy_barbarian/index.rb
181
+ - lib/fluffy_barbarian/page.rb
182
+ - lib/fluffy_barbarian/post.rb
183
+ - lib/fluffy_barbarian/version.rb
184
+ - test/fixtures/content/_posts.mkd
185
+ - test/index_test.rb
186
+ - test/test_helper.rb
187
+ - "test/fixtures/content/_posts/I'm ic\xCC\xA7i, todo bem?.mkd"
188
+ - test/fixtures/content/_posts/Mmm more pie.mkd
189
+ - test/fixtures/content/_posts/Mmm pie.mkd
190
+ - "test/fixtures/content/_posts/Mo\xCC\x88re\xCC\x81 wei\xCC\x82rd stuff!.mkd"
191
+ has_rdoc: true
192
+ homepage: http://rubygems.org/gems/fluffy_barbarian
193
+ licenses: []
194
+
195
+ post_install_message:
196
+ rdoc_options: []
197
+
198
+ require_paths:
199
+ - lib
200
+ required_ruby_version: !ruby/object:Gem::Requirement
201
+ none: false
202
+ requirements:
203
+ - - ">="
204
+ - !ruby/object:Gem::Version
205
+ hash: 3
206
+ segments:
207
+ - 0
208
+ version: "0"
209
+ required_rubygems_version: !ruby/object:Gem::Requirement
210
+ none: false
211
+ requirements:
212
+ - - ">="
213
+ - !ruby/object:Gem::Version
214
+ hash: 3
215
+ segments:
216
+ - 0
217
+ version: "0"
218
+ requirements: []
219
+
220
+ rubyforge_project: fluffy_barbarian
221
+ rubygems_version: 1.3.7
222
+ signing_key:
223
+ specification_version: 3
224
+ summary: Fluffy barbarian carefully handles your blog
225
+ test_files:
226
+ - test/fixtures/content/_posts.mkd
227
+ - test/index_test.rb
228
+ - test/test_helper.rb
229
+ - "test/fixtures/content/_posts/I'm ic\xCC\xA7i, todo bem?.mkd"
230
+ - test/fixtures/content/_posts/Mmm more pie.mkd
231
+ - test/fixtures/content/_posts/Mmm pie.mkd
232
+ - "test/fixtures/content/_posts/Mo\xCC\x88re\xCC\x81 wei\xCC\x82rd stuff!.mkd"