tributary 0.0.1 → 0.0.2
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/README.md +4 -4
- data/Rakefile +9 -2
- data/lib/tributary.rb +5 -3
- data/lib/tributary/app.rb +1 -1
- data/spec/tributary/app_spec.rb +12 -7
- data/spec/tributary/item_spec.rb +10 -10
- data/spec/tributary/plugins/dummy_spec.rb +1 -1
- data/spec/tributary/plugins/mnml_spec.rb +1 -1
- data/spec/tributary/stream_spec.rb +7 -7
- data/tributary.gemspec +2 -2
- metadata +76 -104
data/README.md
CHANGED
@@ -87,13 +87,13 @@ The settings altered by the user are kept in the given user’s session and so p
|
|
87
87
|
|
88
88
|
|
89
89
|
|
90
|
-
|
91
|
-
|
90
|
+
Plug-ins
|
91
|
+
--------
|
92
92
|
|
93
|
-
|
93
|
+
Plug-ins (put in the `App.plugins` `Array`) are objects which can be sent a `handle` method with an `Item` as a parameter and are expected to return the `Item` (so the calls to subsequent plug-ins are chainable). See the `Mnml` plug-in for an example implementation utilising a `SimpleDelegator` to filter the given `Item`’s `body` and `title` methods.
|
94
94
|
|
95
95
|
|
96
96
|
|
97
97
|
---
|
98
98
|
|
99
|
-
© MMX Piotr Szotkowski <chastell@chastell.net>, licensed under AGPL 3 (see LICENCE)
|
99
|
+
© MMX-MMXI Piotr Szotkowski <chastell@chastell.net>, licensed under AGPL 3 (see LICENCE)
|
data/Rakefile
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
require 'rspec/core/rake_task'
|
2
|
-
|
3
2
|
ENV['TZ'] = 'Europe/Warsaw'
|
4
|
-
|
5
3
|
RSpec::Core::RakeTask.new :spec
|
4
|
+
|
5
|
+
desc 'Run Tributary console'
|
6
|
+
task :console do
|
7
|
+
require 'irb'
|
8
|
+
require_relative 'lib/tributary'
|
9
|
+
include Tributary
|
10
|
+
ARGV.clear
|
11
|
+
IRB.start
|
12
|
+
end
|
data/lib/tributary.rb
CHANGED
@@ -3,6 +3,8 @@ require 'sinatra/base'
|
|
3
3
|
require 'sinatra/r18n'
|
4
4
|
require 'yaml'
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
module Tributary
|
7
|
+
autoload :App, 'tributary/app'
|
8
|
+
autoload :Item, 'tributary/item'
|
9
|
+
autoload :Stream, 'tributary/stream'
|
10
|
+
end
|
data/lib/tributary/app.rb
CHANGED
@@ -27,7 +27,7 @@ module Tributary class App < Sinatra::Base
|
|
27
27
|
|
28
28
|
get '/set' do
|
29
29
|
params.each { |key, value| session[key.to_sym] = value if App.user_prefs.map(&:to_s).include? key }
|
30
|
-
|
30
|
+
URI.parse(request.referer).host == request.host ? redirect(request.referer) : redirect('/')
|
31
31
|
end
|
32
32
|
|
33
33
|
get '/:feed.xml' do |feed|
|
data/spec/tributary/app_spec.rb
CHANGED
@@ -105,36 +105,36 @@ module Tributary describe App do
|
|
105
105
|
it 'renders the Atom feed' do
|
106
106
|
get '/index.xml'
|
107
107
|
last_response.should be_ok
|
108
|
-
last_response.headers['Content-Type'].should == 'application/atom+xml
|
108
|
+
last_response.headers['Content-Type'].should == 'application/atom+xml'
|
109
109
|
last_response.body.should == File.read('spec/fixtures/index.xml')
|
110
110
|
end
|
111
111
|
|
112
112
|
it 'renders per-locale Atom feeds' do
|
113
113
|
get '/index.en.xml'
|
114
114
|
last_response.should be_ok
|
115
|
-
last_response.headers['Content-Type'].should == 'application/atom+xml
|
115
|
+
last_response.headers['Content-Type'].should == 'application/atom+xml'
|
116
116
|
last_response.body.should == File.read('spec/fixtures/index.en.xml')
|
117
117
|
|
118
118
|
get '/index.pl.xml'
|
119
119
|
last_response.should be_ok
|
120
|
-
last_response.headers['Content-Type'].should == 'application/atom+xml
|
120
|
+
last_response.headers['Content-Type'].should == 'application/atom+xml'
|
121
121
|
last_response.body.should == File.read('spec/fixtures/index.pl.xml')
|
122
122
|
end
|
123
123
|
|
124
124
|
it 'renders lang_limit-ed Atom feeds' do
|
125
125
|
get '/index.en.en.xml'
|
126
126
|
last_response.should be_ok
|
127
|
-
last_response.headers['Content-Type'].should == 'application/atom+xml
|
127
|
+
last_response.headers['Content-Type'].should == 'application/atom+xml'
|
128
128
|
last_response.body.should == File.read('spec/fixtures/index.en.en.xml')
|
129
129
|
|
130
130
|
get '/index.pl.pl.xml'
|
131
131
|
last_response.should be_ok
|
132
|
-
last_response.headers['Content-Type'].should == 'application/atom+xml
|
132
|
+
last_response.headers['Content-Type'].should == 'application/atom+xml'
|
133
133
|
last_response.body.should == File.read('spec/fixtures/index.pl.pl.xml')
|
134
134
|
|
135
135
|
get '/index.en.en+pl.xml'
|
136
136
|
last_response.should be_ok
|
137
|
-
last_response.headers['Content-Type'].should == 'application/atom+xml
|
137
|
+
last_response.headers['Content-Type'].should == 'application/atom+xml'
|
138
138
|
last_response.body.should == File.read('spec/fixtures/index.en.en+pl.xml')
|
139
139
|
end
|
140
140
|
|
@@ -166,7 +166,7 @@ module Tributary describe App do
|
|
166
166
|
end
|
167
167
|
|
168
168
|
it 'sets the right App settings and redirects properly' do
|
169
|
-
get '/set?locale=pl', {}, 'HTTP_REFERER' => '/bilingual'
|
169
|
+
get '/set?locale=pl', {}, 'HTTP_REFERER' => 'http://example.org/bilingual'
|
170
170
|
last_response.location.should == 'http://example.org/bilingual'
|
171
171
|
follow_redirect!
|
172
172
|
App.locale.should == 'pl'
|
@@ -188,6 +188,11 @@ module Tributary describe App do
|
|
188
188
|
App.lang_limit.should == nil
|
189
189
|
end
|
190
190
|
|
191
|
+
it 'doesn’t redirect outside of the current domain' do
|
192
|
+
get '/set', {}, 'HTTP_REFERER' => 'http://foo.bar/baz'
|
193
|
+
last_response.location.should == 'http://example.org/'
|
194
|
+
end
|
195
|
+
|
191
196
|
it 'localises the output based on locale (defaulting to English)' do
|
192
197
|
get '/set?locale=pl'
|
193
198
|
get '/bilingual'
|
data/spec/tributary/item_spec.rb
CHANGED
@@ -14,7 +14,7 @@ module Tributary describe Item do
|
|
14
14
|
@welcome = Item.new 'spec/site/articles/welcome.md'
|
15
15
|
end
|
16
16
|
|
17
|
-
|
17
|
+
describe '#<=>' do
|
18
18
|
|
19
19
|
it 'sorts Items by date, date-less last' do
|
20
20
|
[@bi_en, @beep, @welcome, @about, @battle].sort.should == [@battle, @bi_en, @welcome, @beep, @about]
|
@@ -34,7 +34,7 @@ module Tributary describe Item do
|
|
34
34
|
|
35
35
|
end
|
36
36
|
|
37
|
-
|
37
|
+
describe '#body' do
|
38
38
|
|
39
39
|
it 'returns the given Item’s markdown-processed body' do
|
40
40
|
@about.body.should == "<p>tributary <em>about</em> page</p>\n\n<p>about this tributary install</p>\n"
|
@@ -43,7 +43,7 @@ module Tributary describe Item do
|
|
43
43
|
|
44
44
|
end
|
45
45
|
|
46
|
-
|
46
|
+
describe '#date' do
|
47
47
|
|
48
48
|
it 'returns the given Item’s parsed Time' do
|
49
49
|
@about.date.should == nil
|
@@ -54,7 +54,7 @@ module Tributary describe Item do
|
|
54
54
|
|
55
55
|
end
|
56
56
|
|
57
|
-
|
57
|
+
describe '#eql?' do
|
58
58
|
|
59
59
|
it 'returns predicate for sane use of Items as Hash keys' do
|
60
60
|
@about.should be_eql Item.new('spec/site/pages/about.md')
|
@@ -62,7 +62,7 @@ module Tributary describe Item do
|
|
62
62
|
|
63
63
|
end
|
64
64
|
|
65
|
-
|
65
|
+
describe '#hash' do
|
66
66
|
|
67
67
|
it 'returns static value for sane use of Items as Hash keys' do
|
68
68
|
@about.hash.should == Item.new('spec/site/pages/about.md').hash
|
@@ -70,7 +70,7 @@ module Tributary describe Item do
|
|
70
70
|
|
71
71
|
end
|
72
72
|
|
73
|
-
|
73
|
+
describe '#lang' do
|
74
74
|
|
75
75
|
it 'returns the Item’s language (if defined)' do
|
76
76
|
@about.lang.should == nil
|
@@ -80,7 +80,7 @@ module Tributary describe Item do
|
|
80
80
|
|
81
81
|
end
|
82
82
|
|
83
|
-
|
83
|
+
describe '#path' do
|
84
84
|
|
85
85
|
it 'returns the given Item’s path' do
|
86
86
|
@about.path.should == 'about'
|
@@ -91,7 +91,7 @@ module Tributary describe Item do
|
|
91
91
|
|
92
92
|
end
|
93
93
|
|
94
|
-
|
94
|
+
describe '#published?' do
|
95
95
|
|
96
96
|
it 'returns whether the given Item has a date in the past' do
|
97
97
|
@about.should_not be_published
|
@@ -102,7 +102,7 @@ module Tributary describe Item do
|
|
102
102
|
|
103
103
|
end
|
104
104
|
|
105
|
-
|
105
|
+
describe '#title' do
|
106
106
|
|
107
107
|
it 'returns the given Item’s YAML-specified title' do
|
108
108
|
@about.title.should == 'about tributary'
|
@@ -117,7 +117,7 @@ module Tributary describe Item do
|
|
117
117
|
|
118
118
|
end
|
119
119
|
|
120
|
-
|
120
|
+
describe '#type' do
|
121
121
|
|
122
122
|
it 'returns the given Item’s type' do
|
123
123
|
@about.type.should == :pages
|
@@ -20,7 +20,7 @@ module Tributary describe Stream do
|
|
20
20
|
@stream = Stream.new
|
21
21
|
end
|
22
22
|
|
23
|
-
|
23
|
+
describe '#initialize' do
|
24
24
|
|
25
25
|
it 'filters the Items through the provided Plugins' do
|
26
26
|
App.plugins = [Plugins::Mnml.new]
|
@@ -31,7 +31,7 @@ module Tributary describe Stream do
|
|
31
31
|
|
32
32
|
end
|
33
33
|
|
34
|
-
|
34
|
+
describe '#langs' do
|
35
35
|
|
36
36
|
it 'returns an Array of langs used in the Items' do
|
37
37
|
@stream.langs.should == ['en', 'pl']
|
@@ -39,7 +39,7 @@ module Tributary describe Stream do
|
|
39
39
|
|
40
40
|
end
|
41
41
|
|
42
|
-
|
42
|
+
describe '#pick_item' do
|
43
43
|
|
44
44
|
it 'returns the relevant Item based on the provided path' do
|
45
45
|
@stream.pick_item('about').should == @about
|
@@ -69,7 +69,7 @@ module Tributary describe Stream do
|
|
69
69
|
|
70
70
|
end
|
71
71
|
|
72
|
-
|
72
|
+
describe '#previous' do
|
73
73
|
|
74
74
|
it 'returns an Item previous to the given Item' do
|
75
75
|
@stream.previous(@battle).should == @bi_en
|
@@ -89,7 +89,7 @@ module Tributary describe Stream do
|
|
89
89
|
|
90
90
|
end
|
91
91
|
|
92
|
-
|
92
|
+
describe '#recent' do
|
93
93
|
|
94
94
|
it 'returns published Items, newest-first' do
|
95
95
|
@stream.recent.should == [@polish, @english, @battle, @bi_en, @dated, @welcome]
|
@@ -124,7 +124,7 @@ module Tributary describe Stream do
|
|
124
124
|
|
125
125
|
end
|
126
126
|
|
127
|
-
|
127
|
+
describe '#subsequent' do
|
128
128
|
|
129
129
|
it 'returns an Item subsequent to the given Item' do
|
130
130
|
@stream.subsequent(@welcome).should == @dated
|
@@ -144,7 +144,7 @@ module Tributary describe Stream do
|
|
144
144
|
|
145
145
|
end
|
146
146
|
|
147
|
-
|
147
|
+
describe '#types' do
|
148
148
|
|
149
149
|
it 'returns an Array of the Items’ types' do
|
150
150
|
@stream.types.should == [:articles, :beeps, :pages]
|
data/tributary.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |gem|
|
2
2
|
gem.name = 'tributary'
|
3
|
-
gem.version = '0.0.
|
3
|
+
gem.version = '0.0.2'
|
4
4
|
gem.summary = 'tributary: a tiny, toto-inspired blogging engine'
|
5
5
|
gem.homepage = 'http://github.com/chastell/tributary'
|
6
6
|
gem.author = 'Piotr Szotkowski'
|
@@ -11,7 +11,7 @@ Gem::Specification.new do |gem|
|
|
11
11
|
|
12
12
|
gem.add_dependency 'haml'
|
13
13
|
gem.add_dependency 'kramdown'
|
14
|
-
gem.add_dependency 'sinatra', '>= 1.1'
|
14
|
+
gem.add_dependency 'sinatra', '>= 1.1.2'
|
15
15
|
gem.add_dependency 'sinatra-r18n'
|
16
16
|
gem.add_development_dependency 'rack-test'
|
17
17
|
gem.add_development_dependency 'rspec', '>= 2'
|
metadata
CHANGED
@@ -1,110 +1,89 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: tributary
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 0
|
8
|
-
- 1
|
9
|
-
version: 0.0.1
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
prerelease: !!null
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- Piotr Szotkowski
|
13
|
-
autorequire:
|
9
|
+
autorequire: !!null
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-03-04 00:00:00.000000000 +01:00
|
13
|
+
default_executable: !!null
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
21
16
|
name: haml
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
17
|
+
requirement: &22181920 !ruby/object:Gem::Requirement
|
24
18
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
- 0
|
30
|
-
version: "0"
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '0'
|
31
23
|
type: :runtime
|
32
|
-
version_requirements: *id001
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: kramdown
|
35
24
|
prerelease: false
|
36
|
-
|
25
|
+
version_requirements: *22181920
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: kramdown
|
28
|
+
requirement: &22181480 !ruby/object:Gem::Requirement
|
37
29
|
none: false
|
38
|
-
requirements:
|
39
|
-
- -
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
|
42
|
-
- 0
|
43
|
-
version: "0"
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
44
34
|
type: :runtime
|
45
|
-
version_requirements: *id002
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: sinatra
|
48
35
|
prerelease: false
|
49
|
-
|
36
|
+
version_requirements: *22181480
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: sinatra
|
39
|
+
requirement: &22180980 !ruby/object:Gem::Requirement
|
50
40
|
none: false
|
51
|
-
requirements:
|
52
|
-
- -
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
|
55
|
-
- 1
|
56
|
-
- 1
|
57
|
-
version: "1.1"
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: 1.1.2
|
58
45
|
type: :runtime
|
59
|
-
version_requirements: *id003
|
60
|
-
- !ruby/object:Gem::Dependency
|
61
|
-
name: sinatra-r18n
|
62
46
|
prerelease: false
|
63
|
-
|
47
|
+
version_requirements: *22180980
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: sinatra-r18n
|
50
|
+
requirement: &22180560 !ruby/object:Gem::Requirement
|
64
51
|
none: false
|
65
|
-
requirements:
|
66
|
-
- -
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
|
69
|
-
- 0
|
70
|
-
version: "0"
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
71
56
|
type: :runtime
|
72
|
-
version_requirements: *id004
|
73
|
-
- !ruby/object:Gem::Dependency
|
74
|
-
name: rack-test
|
75
57
|
prerelease: false
|
76
|
-
|
58
|
+
version_requirements: *22180560
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: rack-test
|
61
|
+
requirement: &22180100 !ruby/object:Gem::Requirement
|
77
62
|
none: false
|
78
|
-
requirements:
|
79
|
-
- -
|
80
|
-
- !ruby/object:Gem::Version
|
81
|
-
|
82
|
-
- 0
|
83
|
-
version: "0"
|
63
|
+
requirements:
|
64
|
+
- - ! '>='
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0'
|
84
67
|
type: :development
|
85
|
-
version_requirements: *id005
|
86
|
-
- !ruby/object:Gem::Dependency
|
87
|
-
name: rspec
|
88
68
|
prerelease: false
|
89
|
-
|
69
|
+
version_requirements: *22180100
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: rspec
|
72
|
+
requirement: &22179600 !ruby/object:Gem::Requirement
|
90
73
|
none: false
|
91
|
-
requirements:
|
92
|
-
- -
|
93
|
-
- !ruby/object:Gem::Version
|
94
|
-
|
95
|
-
- 2
|
96
|
-
version: "2"
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '2'
|
97
78
|
type: :development
|
98
|
-
|
99
|
-
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: *22179600
|
81
|
+
description: !!null
|
100
82
|
email: chastell@chastell.net
|
101
83
|
executables: []
|
102
|
-
|
103
84
|
extensions: []
|
104
|
-
|
105
85
|
extra_rdoc_files: []
|
106
|
-
|
107
|
-
files:
|
86
|
+
files:
|
108
87
|
- .gitignore
|
109
88
|
- .rspec
|
110
89
|
- LICENCE
|
@@ -166,36 +145,29 @@ files:
|
|
166
145
|
has_rdoc: true
|
167
146
|
homepage: http://github.com/chastell/tributary
|
168
147
|
licenses: []
|
169
|
-
|
170
|
-
post_install_message:
|
148
|
+
post_install_message: !!null
|
171
149
|
rdoc_options: []
|
172
|
-
|
173
|
-
require_paths:
|
150
|
+
require_paths:
|
174
151
|
- lib
|
175
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
152
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
176
153
|
none: false
|
177
|
-
requirements:
|
178
|
-
- -
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
|
181
|
-
|
182
|
-
version: "0"
|
183
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
184
159
|
none: false
|
185
|
-
requirements:
|
186
|
-
- -
|
187
|
-
- !ruby/object:Gem::Version
|
188
|
-
|
189
|
-
- 0
|
190
|
-
version: "0"
|
160
|
+
requirements:
|
161
|
+
- - ! '>='
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
version: '0'
|
191
164
|
requirements: []
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
signing_key:
|
165
|
+
rubyforge_project: !!null
|
166
|
+
rubygems_version: 1.5.0
|
167
|
+
signing_key: !!null
|
196
168
|
specification_version: 3
|
197
|
-
summary:
|
198
|
-
test_files:
|
169
|
+
summary: ! 'tributary: a tiny, toto-inspired blogging engine'
|
170
|
+
test_files:
|
199
171
|
- spec/tributary/app_spec.rb
|
200
172
|
- spec/tributary/stream_spec.rb
|
201
173
|
- spec/tributary/item_spec.rb
|