fluffy_barbarian 0.0.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/.gitignore +3 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +40 -0
- data/README.markdown +21 -0
- data/Rakefile +11 -0
- data/fluffy_barbarian.gemspec +36 -0
- data/lib/fluffy_barbarian/application.rb +86 -0
- data/lib/fluffy_barbarian/ext.rb +33 -0
- data/lib/fluffy_barbarian/index.rb +123 -0
- data/lib/fluffy_barbarian/page.rb +39 -0
- data/lib/fluffy_barbarian/post.rb +4 -0
- data/lib/fluffy_barbarian/version.rb +3 -0
- data/lib/fluffy_barbarian.rb +15 -0
- data/test/fixtures/content/_posts/I'm ic/314/247i, todo bem?.mkd" +1 -0
- data/test/fixtures/content/_posts/Mmm more pie.mkd +1 -0
- data/test/fixtures/content/_posts/Mmm pie.mkd +1 -0
- data/test/fixtures/content/_posts/Mo/314/210re/314/201 wei/314/202rd stuff!.mkd" +1 -0
- data/test/fixtures/content/_posts.mkd +8 -0
- data/test/index_test.rb +69 -0
- data/test/test_helper.rb +9 -0
- metadata +232 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
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,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,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
|
+
Olá
|
@@ -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 @@
|
|
1
|
+
Fo' real!
|
data/test/index_test.rb
ADDED
@@ -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
|
data/test/test_helper.rb
ADDED
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"
|