typo 5.4.1 → 5.4.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/CHANGELOG +10 -24
- data/app/controllers/accounts_controller.rb +18 -1
- data/app/controllers/admin/content_controller.rb +1 -0
- data/app/controllers/admin/resources_controller.rb +17 -3
- data/app/controllers/application_controller.rb +2 -5
- data/app/helpers/admin/base_helper.rb +16 -6
- data/app/helpers/admin/resources_helper.rb +6 -0
- data/app/helpers/application_helper.rb +7 -8
- data/app/models/article.rb +8 -10
- data/app/models/blog.rb +26 -24
- data/app/models/content.rb +17 -10
- data/app/models/feedback.rb +1 -1
- data/app/models/page.rb +1 -1
- data/app/models/resource.rb +14 -0
- data/app/models/user.rb +1 -0
- data/app/views/accounts/login.html.erb +2 -1
- data/app/views/accounts/recover_password.html.erb +18 -0
- data/app/views/admin/content/_form.html.erb +8 -5
- data/app/views/admin/content/_images.html.erb +14 -0
- data/app/views/admin/content/_visual_editor.html.erb +5 -0
- data/app/views/admin/pages/_visual_editor.html.erb +9 -5
- data/app/views/admin/resources/_upload.html.erb +10 -0
- data/app/views/admin/resources/get_thumbnails.html.erb +5 -0
- data/app/views/admin/resources/images.html.erb +28 -0
- data/app/views/admin/resources/index.html.erb +42 -11
- data/app/views/layouts/administration.html.erb +1 -1
- data/app/views/notification_mailer/notif_user.html.erb +1 -1
- data/config/environment.rb +1 -1
- data/config/initializers/access_rules.rb +2 -1
- data/config/initializers/inflector.rb +4 -1
- data/db/schema.rb +26 -32
- data/lib/tasks/release.rake +1 -1
- data/lib/typo_version.rb +1 -1
- data/public/images/thumb_blank.jpg +0 -0
- data/public/javascripts/base_packaged.js +377 -0
- data/public/javascripts/ckeditor/config.bak +27 -11
- data/public/javascripts/quicktags.js +11 -0
- data/public/javascripts/typo_carousel.js +340 -0
- data/public/stylesheets/administration.css +16 -0
- data/public/stylesheets/base_packaged.css +100 -0
- data/script/about +3 -2
- data/script/console +1 -1
- data/script/dbconsole +1 -1
- data/script/destroy +1 -1
- data/script/generate +1 -1
- data/script/performance/benchmarker +1 -1
- data/script/performance/profiler +1 -1
- data/script/plugin +2 -2
- data/script/runner +2 -2
- data/script/server +2 -2
- data/spec/controllers/accounts_controller_spec.rb +47 -0
- data/spec/controllers/admin/content_controller_spec.rb +4 -0
- data/spec/controllers/admin/resources_controller_spec.rb +8 -0
- data/spec/controllers/xml_controller_spec.rb +13 -16
- data/spec/factories.rb +14 -1
- data/spec/models/article_spec.rb +57 -14
- data/spec/models/blog_spec.rb +50 -3
- data/spec/models/trackback_spec.rb +1 -1
- data/spec/models/user_spec.rb +7 -12
- data/spec/spec_helper.rb +1 -1
- data/test/fixtures/users.yml +15 -8
- data/themes/true-blue-3/images/background.gif +0 -0
- data/vendor/plugins/easy-ckeditor/lib/ckeditor.rb +1 -2
- data/vendor/plugins/easy-ckeditor/lib/ckeditor_file_utils.rb +2 -2
- metadata +11 -11
- data/app/views/admin/resources/_resources.html.erb +0 -41
- data/script/benchmarker +0 -19
- data/script/performance/request +0 -3
- data/script/process/inspector +0 -3
- data/script/process/reaper +0 -3
- data/script/process/spawner +0 -3
- data/script/process/spinner +0 -3
- data/script/profiler +0 -34
- data/script/spec_server +0 -9
data/script/about
CHANGED
data/script/console
CHANGED
data/script/dbconsole
CHANGED
data/script/destroy
CHANGED
data/script/generate
CHANGED
data/script/performance/profiler
CHANGED
data/script/plugin
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
require File.
|
3
|
-
require 'commands/plugin'
|
2
|
+
require File.expand_path('../../config/boot', __FILE__)
|
3
|
+
require 'commands/plugin'
|
data/script/runner
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
require File.
|
3
|
-
require 'commands/runner'
|
2
|
+
require File.expand_path('../../config/boot', __FILE__)
|
3
|
+
require 'commands/runner'
|
data/script/server
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
require File.
|
3
|
-
require 'commands/server'
|
2
|
+
require File.expand_path('../../config/boot', __FILE__)
|
3
|
+
require 'commands/server'
|
@@ -150,6 +150,26 @@ describe 'GET /login' do
|
|
150
150
|
end
|
151
151
|
end
|
152
152
|
|
153
|
+
describe 'GET /login with 0 existing users' do
|
154
|
+
controller_name :accounts
|
155
|
+
|
156
|
+
before(:each) do
|
157
|
+
User.stub!(:count).and_return(0)
|
158
|
+
end
|
159
|
+
|
160
|
+
it 'should render action :signup' do
|
161
|
+
get 'login'
|
162
|
+
response.should redirect_to(:action => 'signup')
|
163
|
+
assigns[:login].should be_nil
|
164
|
+
end
|
165
|
+
|
166
|
+
it 'should render :signup' do
|
167
|
+
get 'recover_password'
|
168
|
+
|
169
|
+
response.should redirect_to(:action => 'signup')
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
153
173
|
describe 'GET signup and >0 existing user' do
|
154
174
|
controller_name :accounts
|
155
175
|
|
@@ -283,3 +303,30 @@ describe 'User is logged in' do
|
|
283
303
|
cookies[:typo_user_profile].should == nil
|
284
304
|
end
|
285
305
|
end
|
306
|
+
|
307
|
+
describe 'User has lost his password and send a good email' do
|
308
|
+
controller_name :accounts
|
309
|
+
|
310
|
+
before(:each) do
|
311
|
+
@user = mock_model(User, :new_record? => false, :reload => @user)
|
312
|
+
@user.stub!(:profile).and_return(Profile.find_by_label('admin'))
|
313
|
+
User.stub!(:find_by_login).with('tobi').and_return(@user)
|
314
|
+
User.stub!(:count).and_return(1)
|
315
|
+
end
|
316
|
+
|
317
|
+
it 'should render recover_password' do
|
318
|
+
get 'recover_password'
|
319
|
+
|
320
|
+
response.should render_template('recover_password')
|
321
|
+
end
|
322
|
+
|
323
|
+
it 'should render login' do
|
324
|
+
make_request
|
325
|
+
|
326
|
+
response.should redirect_to(:action => 'login')
|
327
|
+
end
|
328
|
+
|
329
|
+
def make_request
|
330
|
+
post 'recover_password', {:user => {:login => 'tobi'}}
|
331
|
+
end
|
332
|
+
end
|
@@ -155,6 +155,10 @@ describe Admin::ContentController do
|
|
155
155
|
|
156
156
|
it 'should create' do
|
157
157
|
begin
|
158
|
+
u = users(:randomuser)
|
159
|
+
u.notify_via_email = true
|
160
|
+
u.notify_on_new_articles = true
|
161
|
+
u.save!
|
158
162
|
ActionMailer::Base.perform_deliveries = true
|
159
163
|
ActionMailer::Base.deliveries = []
|
160
164
|
category = Factory(:category)
|
@@ -13,6 +13,14 @@ describe Admin::ResourcesController do
|
|
13
13
|
assert_not_nil assigns(:resources)
|
14
14
|
end
|
15
15
|
|
16
|
+
it "test_images" do
|
17
|
+
get :images
|
18
|
+
assert_response :success
|
19
|
+
assert_template 'images'
|
20
|
+
assert_template_has 'resources'
|
21
|
+
assert_not_nil assigns(:resources)
|
22
|
+
end
|
23
|
+
|
16
24
|
it "test_destroy" do
|
17
25
|
res_id = resources(:resource1).id
|
18
26
|
assert_not_nil Resource.find(res_id)
|
@@ -1,5 +1,4 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
-
require 'xml_controller'
|
3
2
|
require 'dns_mock'
|
4
3
|
|
5
4
|
describe XmlController do
|
@@ -11,10 +10,7 @@ describe XmlController do
|
|
11
10
|
end
|
12
11
|
|
13
12
|
before do
|
14
|
-
|
15
|
-
:body => "The future is cool!",
|
16
|
-
:keywords => "future",
|
17
|
-
:created_at => Time.now + 12.minutes)
|
13
|
+
@article = Factory.create(:article)
|
18
14
|
end
|
19
15
|
|
20
16
|
def assert_moved_permanently_to(location)
|
@@ -42,8 +38,8 @@ describe XmlController do
|
|
42
38
|
end
|
43
39
|
|
44
40
|
it "redirects article feed to Article RSS feed" do
|
45
|
-
get :feed, :type => 'article', :id =>
|
46
|
-
assert_moved_permanently_to
|
41
|
+
get :feed, :type => 'article', :id => @article.id
|
42
|
+
assert_moved_permanently_to @article.permalink_by_format(:rss)
|
47
43
|
end
|
48
44
|
|
49
45
|
it "redirects category feed to Category RSS feed" do
|
@@ -76,8 +72,8 @@ describe XmlController do
|
|
76
72
|
end
|
77
73
|
|
78
74
|
it "test_feed_rss20_article" do
|
79
|
-
get :feed, :format => 'rss20', :type => 'article', :id =>
|
80
|
-
assert_moved_permanently_to
|
75
|
+
get :feed, :format => 'rss20', :type => 'article', :id => @article.id
|
76
|
+
assert_moved_permanently_to @article.permalink_by_format(:rss)
|
81
77
|
end
|
82
78
|
|
83
79
|
it "test_feed_rss20_category" do
|
@@ -118,8 +114,8 @@ describe XmlController do
|
|
118
114
|
end
|
119
115
|
|
120
116
|
it "test_feed_atom10_article" do
|
121
|
-
get :feed, :format => 'atom10', :type => 'article', :id =>
|
122
|
-
assert_moved_permanently_to
|
117
|
+
get :feed, :format => 'atom10', :type => 'article', :id => @article.id
|
118
|
+
assert_moved_permanently_to @article.permalink_by_format('atom')
|
123
119
|
end
|
124
120
|
|
125
121
|
it "test_feed_atom10_category" do
|
@@ -133,7 +129,7 @@ describe XmlController do
|
|
133
129
|
end
|
134
130
|
|
135
131
|
it "test_articlerss" do
|
136
|
-
get :articlerss, :id =>
|
132
|
+
get :articlerss, :id => @article.id
|
137
133
|
assert_response :redirect
|
138
134
|
end
|
139
135
|
|
@@ -147,6 +143,11 @@ describe XmlController do
|
|
147
143
|
assert_response :redirect
|
148
144
|
end
|
149
145
|
|
146
|
+
it "test_bad_format" do
|
147
|
+
get :feed, :format => 'atom04', :type => 'feed'
|
148
|
+
assert_response :missing
|
149
|
+
end
|
150
|
+
|
150
151
|
it "test_bad_type" do
|
151
152
|
get :feed, :format => 'rss20', :type => 'foobar'
|
152
153
|
assert_response :missing
|
@@ -188,8 +189,4 @@ describe XmlController do
|
|
188
189
|
def assert_atom10
|
189
190
|
assert_select 'feed:root[xmlns="http://www.w3.org/2005/Atom"] > entry', :count => assigns(:items).size
|
190
191
|
end
|
191
|
-
|
192
|
-
def set_extended_on_rss(value)
|
193
|
-
this_blog.show_extended_on_rss = value
|
194
|
-
end
|
195
192
|
end
|
data/spec/factories.rb
CHANGED
@@ -4,18 +4,29 @@ Factory.sequence :user do |n|
|
|
4
4
|
"user#{n}"
|
5
5
|
end
|
6
6
|
|
7
|
+
Factory.sequence :guid do |n|
|
8
|
+
"deadbeef#{n}"
|
9
|
+
end
|
10
|
+
|
7
11
|
Factory.define :user do |u|
|
8
12
|
u.login { Factory.next(:user) }
|
9
13
|
u.email 'some.where@out.there'
|
14
|
+
u.notify_via_email false
|
15
|
+
u.notify_on_new_articles false
|
16
|
+
u.notify_watch_my_articles false
|
17
|
+
u.notify_on_comments false
|
10
18
|
u.password 'top-secret'
|
11
19
|
end
|
12
20
|
|
13
21
|
Factory.define :article do |a|
|
14
22
|
a.title 'A big article'
|
15
23
|
a.body 'A content with several data'
|
24
|
+
a.guid { Factory.next(:guid) }
|
16
25
|
a.permalink 'a-big-article'
|
17
26
|
a.published_at Time.now
|
18
|
-
|
27
|
+
# Using an existing user avoids the password reminder mail overhead
|
28
|
+
a.user { User.find(:first) }
|
29
|
+
#a.association :user, :factory => :user
|
19
30
|
end
|
20
31
|
|
21
32
|
Factory.define :second_article, :parent => :article do |a|
|
@@ -31,6 +42,8 @@ Factory.define :article_with_accent_in_html, :parent => :article do |a|
|
|
31
42
|
end
|
32
43
|
|
33
44
|
Factory.define :blog do |b|
|
45
|
+
b.base_url 'http://myblog.net'
|
46
|
+
b.blog_name 'test blog'
|
34
47
|
end
|
35
48
|
|
36
49
|
Factory.define :profile_admin, :class => :profile do |l|
|
data/spec/models/article_spec.rb
CHANGED
@@ -2,7 +2,6 @@ require File.dirname(__FILE__) + '/../spec_helper'
|
|
2
2
|
|
3
3
|
describe Article do
|
4
4
|
|
5
|
-
|
6
5
|
before do
|
7
6
|
@articles = []
|
8
7
|
end
|
@@ -22,9 +21,10 @@ describe Article do
|
|
22
21
|
end
|
23
22
|
it 'should store user too' do
|
24
23
|
a = Factory(:article)
|
24
|
+
a.user.should be_valid
|
25
25
|
Article.find(a.id).user.should_not be_nil
|
26
26
|
end
|
27
|
-
it 'should multiple
|
27
|
+
it 'should create multiple valid articles' do
|
28
28
|
Factory(:article).should be_valid
|
29
29
|
Factory(:article).should be_valid
|
30
30
|
end
|
@@ -42,8 +42,12 @@ describe Article do
|
|
42
42
|
assert_equal [:body, :extended], a.content_fields
|
43
43
|
end
|
44
44
|
|
45
|
-
it "test_permalink_url" do
|
46
|
-
assert_equal 'http://myblog.net/2004/06/01/article-3', contents(:article3).permalink_url(anchor=nil, only_path=
|
45
|
+
it "test_permalink_url with hostname" do
|
46
|
+
assert_equal 'http://myblog.net/2004/06/01/article-3', contents(:article3).permalink_url(anchor=nil, only_path=false)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "test_permalink_url only path" do
|
50
|
+
assert_equal '/2004/06/01/article-3', contents(:article3).permalink_url(anchor=nil, only_path=true)
|
47
51
|
end
|
48
52
|
|
49
53
|
it "test_edit_url" do
|
@@ -115,9 +119,39 @@ describe Article do
|
|
115
119
|
assert_equal '%E3%83%AB%E3%83%93%E3%83%BC', a.permalink
|
116
120
|
end
|
117
121
|
|
118
|
-
|
119
|
-
|
120
|
-
|
122
|
+
describe "the html_urls method" do
|
123
|
+
it "test_urls" do
|
124
|
+
urls = contents(:article4).html_urls
|
125
|
+
assert_equal ["http://www.example.com/public"], urls
|
126
|
+
end
|
127
|
+
|
128
|
+
it "should only match the href attribute" do
|
129
|
+
a = Factory.create :article
|
130
|
+
a.body = '<a href="http://a/b">a</a> <a fhref="wrong">wrong</a>'
|
131
|
+
urls = a.html_urls
|
132
|
+
assert_equal ["http://a/b"], urls
|
133
|
+
end
|
134
|
+
|
135
|
+
it "should match across newlines" do
|
136
|
+
a = Factory.create :article
|
137
|
+
a.body = "<a\nhref=\"http://foo/bar\">foo</a>"
|
138
|
+
urls = a.html_urls
|
139
|
+
assert_equal ["http://foo/bar"], urls
|
140
|
+
end
|
141
|
+
|
142
|
+
it "should match with single quotes" do
|
143
|
+
a = Factory.create :article
|
144
|
+
a.body = "<a href='http://foo/bar'>foo</a>"
|
145
|
+
urls = a.html_urls
|
146
|
+
assert_equal ["http://foo/bar"], urls
|
147
|
+
end
|
148
|
+
|
149
|
+
it "should match with no quotes" do
|
150
|
+
a = Factory.create :article
|
151
|
+
a.body = "<a href=http://foo/bar>foo</a>"
|
152
|
+
urls = a.html_urls
|
153
|
+
assert_equal ["http://foo/bar"], urls
|
154
|
+
end
|
121
155
|
end
|
122
156
|
|
123
157
|
### XXX: Should we have a test here?
|
@@ -266,6 +300,9 @@ describe Article do
|
|
266
300
|
end
|
267
301
|
|
268
302
|
it 'should notify' do
|
303
|
+
[:randomuser, :bob].each do |tag|
|
304
|
+
u = users(tag); u.notify_on_new_articles = true; u.save!
|
305
|
+
end
|
269
306
|
a = Article.new(:title => 'New Article', :body => 'Foo', :author => 'Tobi', :user => users(:tobi))
|
270
307
|
assert a.save
|
271
308
|
|
@@ -428,21 +465,27 @@ describe Article do
|
|
428
465
|
|
429
466
|
describe '#published_at_like' do
|
430
467
|
before do
|
431
|
-
|
432
|
-
|
433
|
-
|
468
|
+
# Note: these choices of times depend on no other articles within
|
469
|
+
# these timeframes existing in test/fixtures/contents.yaml.
|
470
|
+
# In particular, all articles there are from 2005 or earlier, which
|
471
|
+
# is now more than two years ago, except for two, which are from
|
472
|
+
# yesterday and the day before. The existence of those two makes
|
473
|
+
# 1.month.ago not suitable, because yesterday can be last month.
|
434
474
|
@article_two_month_ago = Factory(:article, :published_at => 2.month.ago)
|
435
|
-
|
475
|
+
|
476
|
+
@article_four_months_ago = Factory(:article, :published_at => 4.month.ago)
|
477
|
+
@article_2_four_months_ago = Factory(:article, :published_at => 4.month.ago)
|
478
|
+
|
436
479
|
@article_two_year_ago = Factory(:article, :published_at => 2.year.ago)
|
437
480
|
@article_2_two_year_ago = Factory(:article, :published_at => 2.year.ago)
|
438
481
|
end
|
439
482
|
|
440
|
-
it 'should return all content
|
483
|
+
it 'should return all content for the year if only year sent' do
|
441
484
|
Article.published_at_like(2.year.ago.strftime('%Y')).map(&:id).sort.should == [@article_two_year_ago.id, @article_2_two_year_ago.id].sort
|
442
485
|
end
|
443
486
|
|
444
|
-
it 'should return all content
|
445
|
-
Article.published_at_like(
|
487
|
+
it 'should return all content for the month if year and month sent' do
|
488
|
+
Article.published_at_like(4.month.ago.strftime('%Y-%m')).map(&:id).sort.should == [@article_four_months_ago.id, @article_2_four_months_ago.id].sort
|
446
489
|
end
|
447
490
|
|
448
491
|
it 'should return all content on this date if date send' do
|
data/spec/models/blog_spec.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/../spec_helper'
|
2
2
|
|
3
3
|
describe "Given the first Blog fixture" do
|
4
|
-
before(:each) {
|
4
|
+
before(:each) {
|
5
|
+
Blog.destroy_all
|
6
|
+
RouteCache.clear
|
7
|
+
@blog = Factory.create :blog
|
8
|
+
}
|
5
9
|
|
6
10
|
it ":blog_name == 'test blog'" do
|
7
11
|
@blog.blog_name.should == 'test blog'
|
@@ -16,10 +20,53 @@ describe "Given the first Blog fixture" do
|
|
16
20
|
end
|
17
21
|
end
|
18
22
|
|
19
|
-
|
20
|
-
|
23
|
+
describe "running in the host root" do
|
24
|
+
it ":base_url == 'http://myblog.net/'" do
|
25
|
+
@blog.base_url.should == 'http://myblog.net'
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "blog.url_for" do
|
29
|
+
it "should return the correct URL for a hash argument" do
|
30
|
+
@blog.url_for(:controller => 'articles', :action => 'read', :id => 1).should == 'http://myblog.net/articles/read/1'
|
31
|
+
end
|
32
|
+
it "should return the correct URL for a hash argument with only_path" do
|
33
|
+
@blog.base_url.should == 'http://myblog.net'
|
34
|
+
@blog.url_for(:controller => 'articles', :action => 'read', :id => 1,
|
35
|
+
:only_path => true).should == '/articles/read/1'
|
36
|
+
end
|
37
|
+
it "should return the correct URL for a string argument" do
|
38
|
+
@blog.url_for('articles/read/1').should == 'http://myblog.net/articles/read/1'
|
39
|
+
end
|
40
|
+
it "should return the correct URL for a hash argument with only_path" do
|
41
|
+
@blog.url_for('articles/read/1', :only_path => true).should == '/articles/read/1'
|
42
|
+
end
|
43
|
+
end
|
21
44
|
end
|
22
45
|
|
46
|
+
describe "running in a sub-URI" do
|
47
|
+
before :each do
|
48
|
+
@blog.base_url = 'http://myblog.net/sub-uri'
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "blog.url_for" do
|
52
|
+
it "should return the correct URL for a hash argument" do
|
53
|
+
@blog.url_for(:controller => 'articles', :action => 'read',
|
54
|
+
:id => 1).should == 'http://myblog.net/sub-uri/articles/read/1'
|
55
|
+
end
|
56
|
+
it "should return the correct URL for a hash argument with only_path" do
|
57
|
+
@blog.url_for(:controller => 'articles', :action => 'read', :id => 1,
|
58
|
+
:only_path => true).should == '/sub-uri/articles/read/1'
|
59
|
+
end
|
60
|
+
it "should return the correct URL for a string argument" do
|
61
|
+
@blog.url_for('articles/read/1'
|
62
|
+
).should == 'http://myblog.net/sub-uri/articles/read/1'
|
63
|
+
end
|
64
|
+
it "should return the correct URL for a hash argument with only_path" do
|
65
|
+
@blog.url_for('articles/read/1',
|
66
|
+
:only_path => true).should == '/sub-uri/articles/read/1'
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
23
70
|
it "should be the only blog allowed" do
|
24
71
|
Blog.new.should_not be_valid
|
25
72
|
end
|