typo 5.4 → 5.4.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/CHANGELOG +23 -30
- data/Typo users guide.pdf +0 -0
- data/app/controllers/admin/content_controller.rb +28 -36
- data/app/controllers/admin/tags_controller.rb +4 -4
- data/app/controllers/articles_controller.rb +119 -1
- data/app/controllers/comments_controller.rb +0 -7
- data/app/controllers/content_controller.rb +1 -0
- data/app/helpers/admin/content_helper.rb +9 -28
- data/app/helpers/admin/themes_helper.rb +4 -6
- data/app/helpers/articles_helper.rb +4 -0
- data/app/models/article.rb +21 -12
- data/app/models/blog.rb +0 -1
- data/app/models/category.rb +1 -6
- data/app/models/content.rb +10 -6
- data/app/models/feedback/states.rb +6 -6
- data/app/models/tag.rb +8 -8
- data/app/views/admin/content/_drafts.html.erb +1 -1
- data/app/views/admin/content/_form.html.erb +7 -4
- data/app/views/admin/content/index.html.erb +3 -3
- data/app/views/admin/feedback/index.html.erb +4 -4
- data/app/views/admin/settings/feedback.html.erb +8 -7
- data/app/views/admin/settings/write.html.erb +71 -72
- data/app/views/admin/tags/index.html.erb +4 -4
- data/app/views/admin/themes/editor.html.erb +13 -10
- data/app/views/articles/_article.html.erb +6 -4
- data/bin/typo +25 -0
- data/config/initializers/access_rules.rb +4 -0
- data/config/routes.rb +2 -2
- data/db/schema.rb +32 -26
- data/db/schema.sqlite3.sql +3 -0
- data/lang/fr_FR.rb +46 -44
- data/lib/tasks/release.rake +1 -1
- data/lib/typo_version.rb +1 -1
- data/public/images/admin/loading.gif +0 -0
- data/public/images/closelabel.gif +0 -0
- data/public/stylesheets/administration.css +28 -8
- data/spec/controllers/admin/content_controller_spec.rb +91 -7
- data/spec/controllers/articles_controller_spec.rb +209 -0
- data/spec/controllers/comments_controller_spec.rb +0 -17
- data/spec/controllers/xml_controller_spec.rb +0 -5
- data/spec/factories.rb +8 -3
- data/spec/models/article_spec.rb +31 -4
- data/spec/models/configuration_spec.rb +0 -4
- data/spec/models/user_spec.rb +13 -0
- data/spec/spec_helper.rb +13 -0
- data/spec/views/articles/index_spec.rb +9 -11
- data/spec/views/articles/read_spec.rb +3 -5
- data/test/fixtures/blogs.yml +0 -1
- data/themes/dirtylicious/views/articles/_article.html.erb +6 -4
- data/themes/scribbish/views/articles/_article.html.erb +6 -4
- data/themes/standard_issue/views/articles/_article.html.erb +6 -4
- data/themes/true-blue-3/views/articles/_article.html.erb +8 -6
- data/themes/true-blue-3/views/categories/_article.html.erb +1 -1
- data/themes/typographic/views/articles/_article.html.erb +7 -5
- metadata +6 -8
- data/app/controllers/admin/previews_controller.rb +0 -10
- data/app/controllers/previews_controller.rb +0 -10
- data/app/controllers/redirect_controller.rb +0 -143
- data/app/helpers/redirect_helper.rb +0 -13
- data/spec/controllers/previews_controller_spec.rb +0 -28
- data/spec/controllers/redirect_controller_spec.rb +0 -165
@@ -1,143 +0,0 @@
|
|
1
|
-
class RedirectController < ContentController
|
2
|
-
before_filter :verify_config
|
3
|
-
|
4
|
-
layout :theme_layout
|
5
|
-
|
6
|
-
cache_sweeper :blog_sweeper
|
7
|
-
|
8
|
-
caches_page :redirect, :if => Proc.new {|c|
|
9
|
-
c.request.query_string == ''
|
10
|
-
}
|
11
|
-
|
12
|
-
helper :'admin/base'
|
13
|
-
|
14
|
-
def self.controller_path
|
15
|
-
'articles'
|
16
|
-
end
|
17
|
-
|
18
|
-
def redirect
|
19
|
-
part = this_blog.permalink_format.split('/')
|
20
|
-
part.delete('') # delete all par of / where no data. Avoid all // or / started
|
21
|
-
params[:from].delete('')
|
22
|
-
if params[:from].last =~ /\.atom$/
|
23
|
-
params[:format] = 'atom'
|
24
|
-
params[:from].last.gsub!(/\.atom$/, '')
|
25
|
-
elsif params[:from].last =~ /\.rss$/
|
26
|
-
params[:format] = 'rss'
|
27
|
-
params[:from].last.gsub!(/\.rss$/, '')
|
28
|
-
end
|
29
|
-
zip_part = part.zip(params[:from])
|
30
|
-
article_params = {}
|
31
|
-
zip_part.each do |asso|
|
32
|
-
['%year%', '%month%', '%day%', '%title%'].each do |format_string|
|
33
|
-
if asso[0] =~ /(.*)#{format_string}(.*)/
|
34
|
-
before_format = $1
|
35
|
-
after_format = $2
|
36
|
-
next if asso[1].nil?
|
37
|
-
result = asso[1].gsub(before_format, '')
|
38
|
-
result.gsub!(after_format, '')
|
39
|
-
article_params[format_string.gsub('%', '').to_sym] = result
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
begin
|
44
|
-
@article = this_blog.requested_article(article_params)
|
45
|
-
rescue
|
46
|
-
#Not really good.
|
47
|
-
# TODO :Check in request_article type of DATA made in next step
|
48
|
-
end
|
49
|
-
return show_article if @article
|
50
|
-
|
51
|
-
# Redirect old version with /:year/:month/:day/:title to new format.
|
52
|
-
# because it's change
|
53
|
-
["%year%/%month%/%day%/%title%".split('/'), "articles/%year%/%month%/%day%/%title%".split('/')].each do |part|
|
54
|
-
part.delete('') # delete all par of / where no data. Avoid all // or / started
|
55
|
-
params[:from].delete('')
|
56
|
-
zip_part = part.zip(params[:from])
|
57
|
-
article_params = {}
|
58
|
-
zip_part.each do |asso|
|
59
|
-
['%year%', '%month%', '%day%', '%title%'].each do |format_string|
|
60
|
-
if asso[0] =~ /(.*)#{format_string}(.*)/
|
61
|
-
before_format = $1
|
62
|
-
after_format = $2
|
63
|
-
next if asso[1].nil?
|
64
|
-
result = asso[1].gsub(before_format, '')
|
65
|
-
result.gsub!(after_format, '')
|
66
|
-
article_params[format_string.gsub('%', '').to_sym] = result
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
begin
|
71
|
-
@article = this_blog.requested_article(article_params)
|
72
|
-
rescue
|
73
|
-
#Not really good.
|
74
|
-
# TODO :Check in request_article type of DATA made in next step
|
75
|
-
end
|
76
|
-
if @article
|
77
|
-
redirect_to @article.permalink_url, :status => 301
|
78
|
-
return
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
|
83
|
-
# see how manage all by this redirect to redirect in different possible
|
84
|
-
# way maybe define in a controller in admin part in insert in this table
|
85
|
-
r = Redirect.find_by_from_path(params[:from].join("/"))
|
86
|
-
|
87
|
-
if(r)
|
88
|
-
path = r.to_path
|
89
|
-
url_root = self.class.relative_url_root
|
90
|
-
path = url_root + path unless url_root.nil? or path[0,url_root.length] == url_root
|
91
|
-
redirect_to path, :status => 301
|
92
|
-
else
|
93
|
-
render :text => "Page not found", :status => 404
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
|
98
|
-
private
|
99
|
-
|
100
|
-
# See an article We need define @article before
|
101
|
-
def show_article
|
102
|
-
@comment = Comment.new
|
103
|
-
@page_title = @article.title
|
104
|
-
article_meta
|
105
|
-
|
106
|
-
auto_discovery_feed
|
107
|
-
respond_to do |format|
|
108
|
-
format.html { render :template => '/articles/read' }
|
109
|
-
format.atom { render_feed('atom') }
|
110
|
-
format.rss { render_feed('rss20') }
|
111
|
-
format.xml { render_feed('atom') }
|
112
|
-
end
|
113
|
-
rescue ActiveRecord::RecordNotFound
|
114
|
-
error("Post not found...")
|
115
|
-
end
|
116
|
-
|
117
|
-
def render_feed(type)
|
118
|
-
render :partial => "/articles/#{type}_feed", :object => @article.published_feedback
|
119
|
-
end
|
120
|
-
|
121
|
-
def article_meta
|
122
|
-
@keywords = ""
|
123
|
-
@keywords << @article.categories.map { |c| c.name }.join(", ") << ", " unless @article.categories.empty?
|
124
|
-
@keywords << @article.tags.map { |t| t.name }.join(", ") unless @article.tags.empty?
|
125
|
-
@description = "#{@article.title}, "
|
126
|
-
@description << @article.categories.map { |c| c.name }.join(", ") << ", " unless @article.categories.empty?
|
127
|
-
@description << @article.tags.map { |t| t.name }.join(", ") unless @article.tags.empty?
|
128
|
-
@description << " #{this_blog.blog_name}"
|
129
|
-
end
|
130
|
-
|
131
|
-
# Test in fist time if we need create some data
|
132
|
-
# Use only in bootstraping
|
133
|
-
def verify_config
|
134
|
-
if User.count == 0
|
135
|
-
redirect_to :controller => "accounts", :action => "signup"
|
136
|
-
elsif ! this_blog.configured?
|
137
|
-
redirect_to :controller => "admin/settings", :action => "redirect"
|
138
|
-
else
|
139
|
-
return true
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
-
|
3
|
-
describe PreviewsController do
|
4
|
-
integrate_views
|
5
|
-
|
6
|
-
describe 'index action' do
|
7
|
-
describe 'with non logged user' do
|
8
|
-
before :each do
|
9
|
-
@request.session = {}
|
10
|
-
get :index, :id => Factory(:article).id
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'should be redirect to login' do
|
14
|
-
response.should redirect_to(:controller => "accounts/login", :action => :index)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
describe 'with logged user' do
|
18
|
-
before :each do
|
19
|
-
@request.session = {:user => users(:tobi).id}
|
20
|
-
get :index, :id => Factory(:article).id
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'should render template /articles/read' do
|
24
|
-
response.should render_template('articles/read.html.erb')
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,165 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
-
|
3
|
-
describe RedirectController do
|
4
|
-
before do
|
5
|
-
ActionController::Base.relative_url_root = nil # avoid failures if environment.rb defines a relative URL root
|
6
|
-
end
|
7
|
-
|
8
|
-
it 'should split routing path' do
|
9
|
-
assert_routing "foo/bar/baz", {
|
10
|
-
:from => ["foo", "bar", "baz"],
|
11
|
-
:controller => 'redirect', :action => 'redirect'}
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'should redirect from articles_routing' do
|
15
|
-
assert_routing "articles", {
|
16
|
-
:from => ["articles"],
|
17
|
-
:controller => 'redirect', :action => 'redirect'}
|
18
|
-
assert_routing "articles/foo", {
|
19
|
-
:from => ["articles", "foo"],
|
20
|
-
:controller => 'redirect', :action => 'redirect'}
|
21
|
-
assert_routing "articles/foo/bar", {
|
22
|
-
:from => ["articles", "foo", "bar"],
|
23
|
-
:controller => 'redirect', :action => 'redirect'}
|
24
|
-
assert_routing "articles/foo/bar/baz", {
|
25
|
-
:from => ["articles", "foo", "bar", "baz"],
|
26
|
-
:controller => 'redirect', :action => 'redirect'}
|
27
|
-
end
|
28
|
-
|
29
|
-
|
30
|
-
it 'should redirect' do
|
31
|
-
get :redirect, :from => ["foo", "bar"]
|
32
|
-
assert_response 301
|
33
|
-
assert_redirected_to "http://test.host/someplace/else"
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'should redirect with url_root' do
|
37
|
-
ActionController::Base.relative_url_root = "/blog"
|
38
|
-
get :redirect, :from => ["foo", "bar"]
|
39
|
-
assert_response 301
|
40
|
-
assert_redirected_to "http://test.host/blog/someplace/else"
|
41
|
-
|
42
|
-
get :redirect, :from => ["bar", "foo"]
|
43
|
-
assert_response 301
|
44
|
-
assert_redirected_to "http://test.host/blog/someplace/else"
|
45
|
-
end
|
46
|
-
|
47
|
-
it 'should no redirect' do
|
48
|
-
get :redirect, :from => ["something/that/isnt/there"]
|
49
|
-
assert_response 404
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'should redirect to article' do
|
53
|
-
get :redirect, :from => ["articles", "2004", "04", "01", "second-blog-article"]
|
54
|
-
assert_response 301
|
55
|
-
assert_redirected_to "http://myblog.net/2004/04/01/second-blog-article"
|
56
|
-
end
|
57
|
-
|
58
|
-
it 'should redirect to article with url_root' do
|
59
|
-
b = blogs(:default)
|
60
|
-
b.base_url = "http://test.host/blog"
|
61
|
-
b.save
|
62
|
-
get :redirect, :from => ["articles", "2004", "04", "01", "second-blog-article"]
|
63
|
-
assert_response 301
|
64
|
-
assert_redirected_to "http://test.host/blog/2004/04/01/second-blog-article"
|
65
|
-
end
|
66
|
-
|
67
|
-
it 'should redirect to article when url_root is articles' do
|
68
|
-
b = blogs(:default)
|
69
|
-
b.base_url = "http://test.host/articles"
|
70
|
-
b.save
|
71
|
-
get :redirect, :from => ["articles", "2004", "04", "01", "second-blog-article"]
|
72
|
-
assert_response 301
|
73
|
-
assert_redirected_to "http://test.host/articles/2004/04/01/second-blog-article"
|
74
|
-
end
|
75
|
-
|
76
|
-
it 'should redirect to article with articles in url_root' do
|
77
|
-
b = blogs(:default)
|
78
|
-
b.base_url = "http://test.host/aaa/articles/bbb"
|
79
|
-
b.save
|
80
|
-
|
81
|
-
get :redirect, :from => ["articles", "2004", "04", "01", "second-blog-article"]
|
82
|
-
assert_response 301
|
83
|
-
assert_redirected_to "http://test.host/aaa/articles/bbb/2004/04/01/second-blog-article"
|
84
|
-
end
|
85
|
-
|
86
|
-
describe 'with permalink_format like %title%.html' do
|
87
|
-
|
88
|
-
integrate_views
|
89
|
-
|
90
|
-
before(:each) do
|
91
|
-
b = blogs(:default)
|
92
|
-
b.permalink_format = '/%title%.html'
|
93
|
-
b.save
|
94
|
-
end
|
95
|
-
describe 'render article' do
|
96
|
-
|
97
|
-
integrate_views
|
98
|
-
|
99
|
-
before(:each) do
|
100
|
-
get :redirect, :from => ["#{contents(:article1).permalink}.html"]
|
101
|
-
end
|
102
|
-
|
103
|
-
it 'should render template read to article' do
|
104
|
-
response.should render_template('articles/read.html.erb')
|
105
|
-
end
|
106
|
-
|
107
|
-
it 'should have good rss feed link' do
|
108
|
-
response.should have_tag('head>link[href=?]', "http://myblog.net/#{contents(:article1).permalink}.html.rss")
|
109
|
-
end
|
110
|
-
|
111
|
-
it 'should have good atom feed link' do
|
112
|
-
response.should have_tag('head>link[href=?]', "http://myblog.net/#{contents(:article1).permalink}.html.atom")
|
113
|
-
end
|
114
|
-
|
115
|
-
end
|
116
|
-
|
117
|
-
it 'should get good article with utf8 slug' do
|
118
|
-
get :redirect, :from => ['2004', '06', '02', 'ルビー']
|
119
|
-
assigns(:article).should == contents(:utf8_article)
|
120
|
-
end
|
121
|
-
|
122
|
-
describe 'rendering as atom feed' do
|
123
|
-
before(:each) do
|
124
|
-
get :redirect, :from => ["#{contents(:article1).permalink}.html.atom"]
|
125
|
-
end
|
126
|
-
|
127
|
-
it 'should render atom partial' do
|
128
|
-
response.should render_template('articles/_atom_feed.atom.builder')
|
129
|
-
end
|
130
|
-
|
131
|
-
it 'should render a valid feed' do
|
132
|
-
assert_feedvalidator response.body
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
describe 'rendering as rss feed' do
|
137
|
-
before(:each) do
|
138
|
-
get :redirect, :from => ["#{contents(:article1).permalink}.html.rss"]
|
139
|
-
end
|
140
|
-
|
141
|
-
it 'should render rss20 partial' do
|
142
|
-
response.should render_template('articles/_rss20_feed.rss.builder')
|
143
|
-
end
|
144
|
-
|
145
|
-
it 'should render a valid feed' do
|
146
|
-
assert_feedvalidator response.body
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
|
-
describe 'rendering comment feed with problematic characters' do
|
151
|
-
before(:each) do
|
152
|
-
@comment = contents(:article1).comments.first
|
153
|
-
@comment.body = "écoute! 4 < 2, non?"
|
154
|
-
@comment.save!
|
155
|
-
get :redirect, :from => ["#{contents(:article1).permalink}.html.atom"]
|
156
|
-
end
|
157
|
-
|
158
|
-
it 'should result in a valid atom feed' do
|
159
|
-
assigns(:article).should == contents(:article1)
|
160
|
-
assert_feedvalidator response.body
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
end
|
165
|
-
end
|