tributary 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/.rspec +6 -0
- data/LICENCE +661 -0
- data/README.md +99 -0
- data/Rakefile +5 -0
- data/config.ru +9 -0
- data/lib/tributary/app.rb +61 -0
- data/lib/tributary/item.rb +66 -0
- data/lib/tributary/plugins/dummy.rb +7 -0
- data/lib/tributary/plugins/mnml.rb +14 -0
- data/lib/tributary/plugins/unbreak_my_art.rb +22 -0
- data/lib/tributary/stream.rb +51 -0
- data/lib/tributary.rb +8 -0
- data/spec/fixtures/index.en.en+pl.xml +50 -0
- data/spec/fixtures/index.en.en.xml +50 -0
- data/spec/fixtures/index.en.xml +50 -0
- data/spec/fixtures/index.pl.pl.xml +50 -0
- data/spec/fixtures/index.pl.xml +50 -0
- data/spec/fixtures/index.xml +50 -0
- data/spec/fixtures/layout.css +22 -0
- data/spec/fixtures/pages.css +2 -0
- data/spec/site/articles/600.en.md +5 -0
- data/spec/site/articles/600.md +5 -0
- data/spec/site/articles/bilingual.en.md +4 -0
- data/spec/site/articles/bilingual.pl.md +4 -0
- data/spec/site/articles/unix-millennium-bug.en.md +4 -0
- data/spec/site/articles/welcome.md +4 -0
- data/spec/site/beeps/beep.md +3 -0
- data/spec/site/beeps/dated.md +3 -0
- data/spec/site/beeps/english.en.md +3 -0
- data/spec/site/beeps/link.md +3 -0
- data/spec/site/beeps/polish.pl.md +3 -0
- data/spec/site/beeps/quote.md +4 -0
- data/spec/site/i18n/en.yml +12 -0
- data/spec/site/i18n/pl.yml +12 -0
- data/spec/site/pages/about.md +5 -0
- data/spec/site/views/articles.haml +4 -0
- data/spec/site/views/articles.index.haml +6 -0
- data/spec/site/views/articles.index.sass +0 -0
- data/spec/site/views/articles.sass +2 -0
- data/spec/site/views/beeps.haml +1 -0
- data/spec/site/views/beeps.sass +2 -0
- data/spec/site/views/error.haml +8 -0
- data/spec/site/views/error.sass +6 -0
- data/spec/site/views/index.haml +6 -0
- data/spec/site/views/index.sass +2 -0
- data/spec/site/views/index.xml.haml +17 -0
- data/spec/site/views/layout.haml +56 -0
- data/spec/site/views/layout.sass +22 -0
- data/spec/site/views/pages.haml +3 -0
- data/spec/site/views/pages.sass +2 -0
- data/spec/tributary/app_spec.rb +266 -0
- data/spec/tributary/item_spec.rb +129 -0
- data/spec/tributary/plugins/dummy_spec.rb +12 -0
- data/spec/tributary/plugins/mnml_spec.rb +16 -0
- data/spec/tributary/plugins/unbreak_my_art_spec.rb +36 -0
- data/spec/tributary/stream_spec.rb +155 -0
- data/tributary.gemspec +18 -0
- metadata +204 -0
@@ -0,0 +1,129 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Tributary describe Item do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
App.configure {}
|
7
|
+
@about = Item.new 'spec/site/pages/about.md'
|
8
|
+
@battle = Item.new 'spec/site/articles/600.md'
|
9
|
+
@battle_en = Item.new 'spec/site/articles/600.en.md'
|
10
|
+
@beep = Item.new 'spec/site/beeps/beep.md'
|
11
|
+
@bi_en = Item.new 'spec/site/articles/bilingual.en.md'
|
12
|
+
@bi_pl = Item.new 'spec/site/articles/bilingual.pl.md'
|
13
|
+
@unix = Item.new 'spec/site/articles/unix-millennium-bug.en.md'
|
14
|
+
@welcome = Item.new 'spec/site/articles/welcome.md'
|
15
|
+
end
|
16
|
+
|
17
|
+
context '#<=>' do
|
18
|
+
|
19
|
+
it 'sorts Items by date, date-less last' do
|
20
|
+
[@bi_en, @beep, @welcome, @about, @battle].sort.should == [@battle, @bi_en, @welcome, @beep, @about]
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'sorts same-path Items by lang, based on App.locale' do
|
24
|
+
App.locale = 'pl'
|
25
|
+
[@bi_en, @bi_pl].sort.should == [@bi_pl, @bi_en]
|
26
|
+
[@battle_en, @battle].sort.should == [@battle, @battle_en]
|
27
|
+
App.locale = 'en'
|
28
|
+
[@bi_pl, @bi_en].sort.should == [@bi_en, @bi_pl]
|
29
|
+
[@battle, @battle_en].sort.should == [@battle_en, @battle]
|
30
|
+
App.locale = nil
|
31
|
+
[@bi_pl, @bi_en].sort.should == [@bi_en, @bi_pl]
|
32
|
+
[@battle_en, @battle].sort.should == [@battle, @battle_en]
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
context '#body' do
|
38
|
+
|
39
|
+
it 'returns the given Item’s markdown-processed body' do
|
40
|
+
@about.body.should == "<p>tributary <em>about</em> page</p>\n\n<p>about this tributary install</p>\n"
|
41
|
+
@welcome.body.should == "<p>tributary <em>welcome</em> article</p>\n"
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
context '#date' do
|
47
|
+
|
48
|
+
it 'returns the given Item’s parsed Time' do
|
49
|
+
@about.date.should == nil
|
50
|
+
@battle.date.should == Time.mktime(2010, 7, 15, 12, 00)
|
51
|
+
@unix.date.should == Time.utc(2038, 1, 19, 3, 14, 07)
|
52
|
+
@welcome.date.should == Time.mktime(2010, 7, 15)
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
context '#eql?' do
|
58
|
+
|
59
|
+
it 'returns predicate for sane use of Items as Hash keys' do
|
60
|
+
@about.should be_eql Item.new('spec/site/pages/about.md')
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
context '#hash' do
|
66
|
+
|
67
|
+
it 'returns static value for sane use of Items as Hash keys' do
|
68
|
+
@about.hash.should == Item.new('spec/site/pages/about.md').hash
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
context '#lang' do
|
74
|
+
|
75
|
+
it 'returns the Item’s language (if defined)' do
|
76
|
+
@about.lang.should == nil
|
77
|
+
@bi_en.lang.should == 'en'
|
78
|
+
@bi_pl.lang.should == 'pl'
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
context '#path' do
|
84
|
+
|
85
|
+
it 'returns the given Item’s path' do
|
86
|
+
@about.path.should == 'about'
|
87
|
+
@battle.path.should == '600'
|
88
|
+
@bi_en.path.should == 'bilingual'
|
89
|
+
@bi_pl.path.should == 'bilingual'
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
context '#published?' do
|
95
|
+
|
96
|
+
it 'returns whether the given Item has a date in the past' do
|
97
|
+
@about.should_not be_published
|
98
|
+
@battle.should be_published
|
99
|
+
@unix.should_not be_published
|
100
|
+
@welcome.should be_published
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
|
105
|
+
context '#title' do
|
106
|
+
|
107
|
+
it 'returns the given Item’s YAML-specified title' do
|
108
|
+
@about.title.should == 'about tributary'
|
109
|
+
@welcome.title.should == 'welcome to tributary'
|
110
|
+
end
|
111
|
+
|
112
|
+
it 'returns elided body if the YAML-specified title is missing' do
|
113
|
+
Item.new('spec/site/beeps/beep.md').title.should == 'beep…'
|
114
|
+
Item.new('spec/site/beeps/link.md').title.should == 'Qué…'
|
115
|
+
Item.new('spec/site/beeps/quote.md').title.should == 'An…'
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
context '#type' do
|
121
|
+
|
122
|
+
it 'returns the given Item’s type' do
|
123
|
+
@about.type.should == :pages
|
124
|
+
@welcome.type.should == :articles
|
125
|
+
end
|
126
|
+
|
127
|
+
end
|
128
|
+
|
129
|
+
end end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Tributary describe Plugins::Mnml do
|
4
|
+
|
5
|
+
context '#handle' do
|
6
|
+
|
7
|
+
it 'minimalises the given Item’s title and body' do
|
8
|
+
item = mock Item, body: 'a wonderful body', title: 'an interesting title'
|
9
|
+
mnml = Plugins::Mnml.new.handle item
|
10
|
+
mnml.body.should == ' wndrfl bd'
|
11
|
+
mnml.title.should == 'n ntrstng ttl'
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
end end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Tributary describe Plugins::UnbreakMyArt do
|
4
|
+
|
5
|
+
def unbreak string
|
6
|
+
Plugins::UnbreakMyArt.new.handle(mock Item, body: string).body
|
7
|
+
end
|
8
|
+
|
9
|
+
describe '#handle' do
|
10
|
+
|
11
|
+
it 'prevents line wrapping after single-letter words' do
|
12
|
+
unbreak('give me a break').should == 'give me a break'
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'prevents line wrapping after line-starting single-letter words' do
|
16
|
+
unbreak('a fish!').should == 'a fish!'
|
17
|
+
unbreak("this is\na fish!").should == "this is\na fish!"
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'does not alter one-letter HTML tags' do
|
21
|
+
unbreak("<a href='http://en.wikipedia.org/wiki/Invisible_Pink_Unicorn'>I want to believe</a>").should == "<a href='http://en.wikipedia.org/wiki/Invisible_Pink_Unicorn'>I want to believe</a>"
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'allows for optional trailing punctuation' do
|
25
|
+
unbreak('I, Clau-Clau-Claudius').should == 'I, Clau-Clau-Claudius'
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'unbreaks bodies and titles' do
|
29
|
+
unbroken = Plugins::UnbreakMyArt.new.handle mock Item, title: 'about a ninja', body: 'and a pirate'
|
30
|
+
unbroken.title.should == 'about a ninja'
|
31
|
+
unbroken.body.should == 'and a pirate'
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end end
|
@@ -0,0 +1,155 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Tributary describe Stream do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
@about = Item.new 'spec/site/pages/about.md'
|
7
|
+
@battle = Item.new 'spec/site/articles/600.md'
|
8
|
+
@btl_en = Item.new 'spec/site/articles/600.en.md'
|
9
|
+
@bi_en = Item.new 'spec/site/articles/bilingual.en.md'
|
10
|
+
@bi_pl = Item.new 'spec/site/articles/bilingual.pl.md'
|
11
|
+
@dated = Item.new 'spec/site/beeps/dated.md'
|
12
|
+
@english = Item.new 'spec/site/beeps/english.en.md'
|
13
|
+
@polish = Item.new 'spec/site/beeps/polish.pl.md'
|
14
|
+
@unix = Item.new 'spec/site/articles/unix-millennium-bug.en.md'
|
15
|
+
@welcome = Item.new 'spec/site/articles/welcome.md'
|
16
|
+
end
|
17
|
+
|
18
|
+
before :each do
|
19
|
+
App.configure { |config| config.set :root, 'spec/site' }
|
20
|
+
@stream = Stream.new
|
21
|
+
end
|
22
|
+
|
23
|
+
context '#initialize' do
|
24
|
+
|
25
|
+
it 'filters the Items through the provided Plugins' do
|
26
|
+
App.plugins = [Plugins::Mnml.new]
|
27
|
+
plugged = Stream.new
|
28
|
+
@stream.recent.map(&:title).should == ['ten…', 'this…', '600th anniversary (intl.)', 'bilinguality', 'a…', 'welcome to tributary']
|
29
|
+
plugged.recent.map(&:title).should == ['tn…', 'ths…', '600th nnvrsr (ntl.)', 'blnglt', '…', 'wlcm t trbtr']
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
context '#langs' do
|
35
|
+
|
36
|
+
it 'returns an Array of langs used in the Items' do
|
37
|
+
@stream.langs.should == ['en', 'pl']
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
context '#pick_item' do
|
43
|
+
|
44
|
+
it 'returns the relevant Item based on the provided path' do
|
45
|
+
@stream.pick_item('about').should == @about
|
46
|
+
@stream.pick_item('welcome').should == @welcome
|
47
|
+
@stream.pick_item('bilingual.en').should == @bi_en
|
48
|
+
@stream.pick_item('bilingual.pl').should == @bi_pl
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'returns the first language version of an Item (if no Items match App.locale)' do
|
52
|
+
@stream.pick_item('bilingual').should == @bi_en
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'returns an Item even if it’s outside of current App.lang_limit' do
|
56
|
+
App.lang_limit = ['pl']
|
57
|
+
@stream.pick_item('unix-millennium-bug').should == @unix
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'returns the relevant language version of an Item' do
|
61
|
+
App.set :locale, 'en'
|
62
|
+
@stream.pick_item('bilingual').should == @bi_en
|
63
|
+
@stream.pick_item('about').should == @about
|
64
|
+
App.set :locale, 'pl'
|
65
|
+
@stream.pick_item('bilingual').should == @bi_pl
|
66
|
+
@stream.pick_item('about').should == @about
|
67
|
+
App.set :locale, nil
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
context '#previous' do
|
73
|
+
|
74
|
+
it 'returns an Item previous to the given Item' do
|
75
|
+
@stream.previous(@battle).should == @bi_en
|
76
|
+
@stream.previous(@welcome).should == nil
|
77
|
+
@stream.previous(@about).should == nil
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'returns an Item previous to the Item with the same path (if the given Item’s lang != App.locale)' do
|
81
|
+
@stream.previous(@bi_en).should == @dated
|
82
|
+
@stream.previous(@bi_pl).should == @dated
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'returns an Item previous to the given Item with the given type' do
|
86
|
+
@stream.previous(@bi_en).should == @dated
|
87
|
+
@stream.previous(@bi_en, type: :articles).should == @welcome
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
91
|
+
|
92
|
+
context '#recent' do
|
93
|
+
|
94
|
+
it 'returns published Items, newest-first' do
|
95
|
+
@stream.recent.should == [@polish, @english, @battle, @bi_en, @dated, @welcome]
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'returns properly localised Items (if available)' do
|
99
|
+
App.locale = 'pl'
|
100
|
+
@stream.recent.should == [@polish, @english, @battle, @bi_pl, @dated, @welcome]
|
101
|
+
App.locale = 'en'
|
102
|
+
@stream.recent.should == [@polish, @english, @btl_en, @bi_en, @dated, @welcome]
|
103
|
+
App.locale = nil
|
104
|
+
@stream.recent.should == [@polish, @english, @battle, @bi_en, @dated, @welcome]
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'returns lang_limited Items (if requested)' do
|
108
|
+
App.lang_limit = ['en']
|
109
|
+
@stream.recent.should == [@english, @battle, @bi_en, @dated, @welcome]
|
110
|
+
App.lang_limit = ['pl']
|
111
|
+
@stream.recent.should == [@polish, @battle, @bi_pl, @dated, @welcome]
|
112
|
+
App.lang_limit = []
|
113
|
+
@stream.recent.should == [@polish, @english, @battle, @bi_en, @dated, @welcome]
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'returns a limited number of newest Items' do
|
117
|
+
@stream.recent(1).should == [@polish]
|
118
|
+
end
|
119
|
+
|
120
|
+
it 'returns a list of Items with a given type' do
|
121
|
+
@stream.recent(nil, type: :articles).should == [@battle, @bi_en, @welcome]
|
122
|
+
@stream.recent(2, type: :articles).should == [@battle, @bi_en]
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
126
|
+
|
127
|
+
context '#subsequent' do
|
128
|
+
|
129
|
+
it 'returns an Item subsequent to the given Item' do
|
130
|
+
@stream.subsequent(@welcome).should == @dated
|
131
|
+
@stream.subsequent(@polish).should == nil
|
132
|
+
@stream.subsequent(@about).should == nil
|
133
|
+
end
|
134
|
+
|
135
|
+
it 'returns an Item subsequent to the Item with the same path (if the given Item’s lang != App.locale)' do
|
136
|
+
@stream.subsequent(@bi_en).should == @battle
|
137
|
+
@stream.subsequent(@bi_pl).should == @battle
|
138
|
+
end
|
139
|
+
|
140
|
+
it 'returns an Item subsequent to the given Item with the given type' do
|
141
|
+
@stream.subsequent(@welcome).should == @dated
|
142
|
+
@stream.subsequent(@welcome, type: :articles).should == @bi_en
|
143
|
+
end
|
144
|
+
|
145
|
+
end
|
146
|
+
|
147
|
+
context '#types' do
|
148
|
+
|
149
|
+
it 'returns an Array of the Items’ types' do
|
150
|
+
@stream.types.should == [:articles, :beeps, :pages]
|
151
|
+
end
|
152
|
+
|
153
|
+
end
|
154
|
+
|
155
|
+
end end
|
data/tributary.gemspec
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
Gem::Specification.new do |gem|
|
2
|
+
gem.name = 'tributary'
|
3
|
+
gem.version = '0.0.1'
|
4
|
+
gem.summary = 'tributary: a tiny, toto-inspired blogging engine'
|
5
|
+
gem.homepage = 'http://github.com/chastell/tributary'
|
6
|
+
gem.author = 'Piotr Szotkowski'
|
7
|
+
gem.email = 'chastell@chastell.net'
|
8
|
+
|
9
|
+
gem.files = `git ls-files -z`.split "\0"
|
10
|
+
gem.test_files = Dir['spec/**/*.rb']
|
11
|
+
|
12
|
+
gem.add_dependency 'haml'
|
13
|
+
gem.add_dependency 'kramdown'
|
14
|
+
gem.add_dependency 'sinatra', '>= 1.1'
|
15
|
+
gem.add_dependency 'sinatra-r18n'
|
16
|
+
gem.add_development_dependency 'rack-test'
|
17
|
+
gem.add_development_dependency 'rspec', '>= 2'
|
18
|
+
end
|
metadata
ADDED
@@ -0,0 +1,204 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: tributary
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: 0.0.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Piotr Szotkowski
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-10-31 01:00:00 +02:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: haml
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 0
|
30
|
+
version: "0"
|
31
|
+
type: :runtime
|
32
|
+
version_requirements: *id001
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: kramdown
|
35
|
+
prerelease: false
|
36
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
37
|
+
none: false
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 0
|
43
|
+
version: "0"
|
44
|
+
type: :runtime
|
45
|
+
version_requirements: *id002
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: sinatra
|
48
|
+
prerelease: false
|
49
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
segments:
|
55
|
+
- 1
|
56
|
+
- 1
|
57
|
+
version: "1.1"
|
58
|
+
type: :runtime
|
59
|
+
version_requirements: *id003
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: sinatra-r18n
|
62
|
+
prerelease: false
|
63
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
segments:
|
69
|
+
- 0
|
70
|
+
version: "0"
|
71
|
+
type: :runtime
|
72
|
+
version_requirements: *id004
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: rack-test
|
75
|
+
prerelease: false
|
76
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
77
|
+
none: false
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
segments:
|
82
|
+
- 0
|
83
|
+
version: "0"
|
84
|
+
type: :development
|
85
|
+
version_requirements: *id005
|
86
|
+
- !ruby/object:Gem::Dependency
|
87
|
+
name: rspec
|
88
|
+
prerelease: false
|
89
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
segments:
|
95
|
+
- 2
|
96
|
+
version: "2"
|
97
|
+
type: :development
|
98
|
+
version_requirements: *id006
|
99
|
+
description:
|
100
|
+
email: chastell@chastell.net
|
101
|
+
executables: []
|
102
|
+
|
103
|
+
extensions: []
|
104
|
+
|
105
|
+
extra_rdoc_files: []
|
106
|
+
|
107
|
+
files:
|
108
|
+
- .gitignore
|
109
|
+
- .rspec
|
110
|
+
- LICENCE
|
111
|
+
- README.md
|
112
|
+
- Rakefile
|
113
|
+
- config.ru
|
114
|
+
- lib/tributary.rb
|
115
|
+
- lib/tributary/app.rb
|
116
|
+
- lib/tributary/item.rb
|
117
|
+
- lib/tributary/plugins/dummy.rb
|
118
|
+
- lib/tributary/plugins/mnml.rb
|
119
|
+
- lib/tributary/plugins/unbreak_my_art.rb
|
120
|
+
- lib/tributary/stream.rb
|
121
|
+
- spec/fixtures/index.en.en+pl.xml
|
122
|
+
- spec/fixtures/index.en.en.xml
|
123
|
+
- spec/fixtures/index.en.xml
|
124
|
+
- spec/fixtures/index.pl.pl.xml
|
125
|
+
- spec/fixtures/index.pl.xml
|
126
|
+
- spec/fixtures/index.xml
|
127
|
+
- spec/fixtures/layout.css
|
128
|
+
- spec/fixtures/pages.css
|
129
|
+
- spec/site/articles/600.en.md
|
130
|
+
- spec/site/articles/600.md
|
131
|
+
- spec/site/articles/bilingual.en.md
|
132
|
+
- spec/site/articles/bilingual.pl.md
|
133
|
+
- spec/site/articles/unix-millennium-bug.en.md
|
134
|
+
- spec/site/articles/welcome.md
|
135
|
+
- spec/site/beeps/beep.md
|
136
|
+
- spec/site/beeps/dated.md
|
137
|
+
- spec/site/beeps/english.en.md
|
138
|
+
- spec/site/beeps/link.md
|
139
|
+
- spec/site/beeps/polish.pl.md
|
140
|
+
- spec/site/beeps/quote.md
|
141
|
+
- spec/site/i18n/en.yml
|
142
|
+
- spec/site/i18n/pl.yml
|
143
|
+
- spec/site/pages/about.md
|
144
|
+
- spec/site/views/articles.haml
|
145
|
+
- spec/site/views/articles.index.haml
|
146
|
+
- spec/site/views/articles.index.sass
|
147
|
+
- spec/site/views/articles.sass
|
148
|
+
- spec/site/views/beeps.haml
|
149
|
+
- spec/site/views/beeps.sass
|
150
|
+
- spec/site/views/error.haml
|
151
|
+
- spec/site/views/error.sass
|
152
|
+
- spec/site/views/index.haml
|
153
|
+
- spec/site/views/index.sass
|
154
|
+
- spec/site/views/index.xml.haml
|
155
|
+
- spec/site/views/layout.haml
|
156
|
+
- spec/site/views/layout.sass
|
157
|
+
- spec/site/views/pages.haml
|
158
|
+
- spec/site/views/pages.sass
|
159
|
+
- spec/tributary/app_spec.rb
|
160
|
+
- spec/tributary/item_spec.rb
|
161
|
+
- spec/tributary/plugins/dummy_spec.rb
|
162
|
+
- spec/tributary/plugins/mnml_spec.rb
|
163
|
+
- spec/tributary/plugins/unbreak_my_art_spec.rb
|
164
|
+
- spec/tributary/stream_spec.rb
|
165
|
+
- tributary.gemspec
|
166
|
+
has_rdoc: true
|
167
|
+
homepage: http://github.com/chastell/tributary
|
168
|
+
licenses: []
|
169
|
+
|
170
|
+
post_install_message:
|
171
|
+
rdoc_options: []
|
172
|
+
|
173
|
+
require_paths:
|
174
|
+
- lib
|
175
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
176
|
+
none: false
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
segments:
|
181
|
+
- 0
|
182
|
+
version: "0"
|
183
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
184
|
+
none: false
|
185
|
+
requirements:
|
186
|
+
- - ">="
|
187
|
+
- !ruby/object:Gem::Version
|
188
|
+
segments:
|
189
|
+
- 0
|
190
|
+
version: "0"
|
191
|
+
requirements: []
|
192
|
+
|
193
|
+
rubyforge_project:
|
194
|
+
rubygems_version: 1.3.7
|
195
|
+
signing_key:
|
196
|
+
specification_version: 3
|
197
|
+
summary: "tributary: a tiny, toto-inspired blogging engine"
|
198
|
+
test_files:
|
199
|
+
- spec/tributary/app_spec.rb
|
200
|
+
- spec/tributary/stream_spec.rb
|
201
|
+
- spec/tributary/item_spec.rb
|
202
|
+
- spec/tributary/plugins/dummy_spec.rb
|
203
|
+
- spec/tributary/plugins/unbreak_my_art_spec.rb
|
204
|
+
- spec/tributary/plugins/mnml_spec.rb
|