tributary 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.
Files changed (59) hide show
  1. data/.gitignore +1 -0
  2. data/.rspec +6 -0
  3. data/LICENCE +661 -0
  4. data/README.md +99 -0
  5. data/Rakefile +5 -0
  6. data/config.ru +9 -0
  7. data/lib/tributary/app.rb +61 -0
  8. data/lib/tributary/item.rb +66 -0
  9. data/lib/tributary/plugins/dummy.rb +7 -0
  10. data/lib/tributary/plugins/mnml.rb +14 -0
  11. data/lib/tributary/plugins/unbreak_my_art.rb +22 -0
  12. data/lib/tributary/stream.rb +51 -0
  13. data/lib/tributary.rb +8 -0
  14. data/spec/fixtures/index.en.en+pl.xml +50 -0
  15. data/spec/fixtures/index.en.en.xml +50 -0
  16. data/spec/fixtures/index.en.xml +50 -0
  17. data/spec/fixtures/index.pl.pl.xml +50 -0
  18. data/spec/fixtures/index.pl.xml +50 -0
  19. data/spec/fixtures/index.xml +50 -0
  20. data/spec/fixtures/layout.css +22 -0
  21. data/spec/fixtures/pages.css +2 -0
  22. data/spec/site/articles/600.en.md +5 -0
  23. data/spec/site/articles/600.md +5 -0
  24. data/spec/site/articles/bilingual.en.md +4 -0
  25. data/spec/site/articles/bilingual.pl.md +4 -0
  26. data/spec/site/articles/unix-millennium-bug.en.md +4 -0
  27. data/spec/site/articles/welcome.md +4 -0
  28. data/spec/site/beeps/beep.md +3 -0
  29. data/spec/site/beeps/dated.md +3 -0
  30. data/spec/site/beeps/english.en.md +3 -0
  31. data/spec/site/beeps/link.md +3 -0
  32. data/spec/site/beeps/polish.pl.md +3 -0
  33. data/spec/site/beeps/quote.md +4 -0
  34. data/spec/site/i18n/en.yml +12 -0
  35. data/spec/site/i18n/pl.yml +12 -0
  36. data/spec/site/pages/about.md +5 -0
  37. data/spec/site/views/articles.haml +4 -0
  38. data/spec/site/views/articles.index.haml +6 -0
  39. data/spec/site/views/articles.index.sass +0 -0
  40. data/spec/site/views/articles.sass +2 -0
  41. data/spec/site/views/beeps.haml +1 -0
  42. data/spec/site/views/beeps.sass +2 -0
  43. data/spec/site/views/error.haml +8 -0
  44. data/spec/site/views/error.sass +6 -0
  45. data/spec/site/views/index.haml +6 -0
  46. data/spec/site/views/index.sass +2 -0
  47. data/spec/site/views/index.xml.haml +17 -0
  48. data/spec/site/views/layout.haml +56 -0
  49. data/spec/site/views/layout.sass +22 -0
  50. data/spec/site/views/pages.haml +3 -0
  51. data/spec/site/views/pages.sass +2 -0
  52. data/spec/tributary/app_spec.rb +266 -0
  53. data/spec/tributary/item_spec.rb +129 -0
  54. data/spec/tributary/plugins/dummy_spec.rb +12 -0
  55. data/spec/tributary/plugins/mnml_spec.rb +16 -0
  56. data/spec/tributary/plugins/unbreak_my_art_spec.rb +36 -0
  57. data/spec/tributary/stream_spec.rb +155 -0
  58. data/tributary.gemspec +18 -0
  59. 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,12 @@
1
+ module Tributary describe Plugins::Dummy do
2
+
3
+ context '#handle' do
4
+
5
+ it 'returns an unmodified Item' do
6
+ item = mock Item
7
+ Plugins::Dummy.new.handle(item).should equal item
8
+ end
9
+
10
+ end
11
+
12
+ 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