publify_core 9.0.0.pre2 → 9.0.0.pre3
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of publify_core might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/app/controllers/admin/content_controller.rb +0 -2
- data/app/controllers/admin/feedback_controller.rb +1 -14
- data/app/controllers/admin/migrations_controller.rb +0 -1
- data/app/controllers/admin/notes_controller.rb +0 -1
- data/app/controllers/admin/pages_controller.rb +0 -1
- data/app/controllers/admin/post_types_controller.rb +0 -1
- data/app/controllers/admin/resources_controller.rb +0 -2
- data/app/controllers/admin/seo_controller.rb +0 -1
- data/app/controllers/admin/settings_controller.rb +0 -2
- data/app/controllers/admin/sidebar_controller.rb +0 -1
- data/app/controllers/admin/tags_controller.rb +0 -1
- data/app/controllers/admin/textfilters_controller.rb +1 -1
- data/app/controllers/admin/themes_controller.rb +0 -9
- data/app/controllers/admin/users_controller.rb +0 -1
- data/app/controllers/articles_controller.rb +1 -4
- data/app/controllers/comments_controller.rb +4 -5
- data/app/controllers/feedback_controller.rb +1 -3
- data/app/controllers/notes_controller.rb +0 -2
- data/app/controllers/tags_controller.rb +0 -5
- data/app/controllers/text_controller.rb +2 -2
- data/app/controllers/theme_controller.rb +3 -3
- data/app/controllers/trackbacks_controller.rb +1 -1
- data/app/controllers/xml_controller.rb +3 -7
- data/app/models/article/states.rb +2 -0
- data/app/models/blog.rb +31 -29
- data/app/models/trigger.rb +1 -1
- data/app/views/admin/shared/_menu.html.erb +0 -1
- data/app/views/notes/show_in_reply.html.erb +3 -1
- data/config/routes.rb +0 -3
- data/lib/publify_core/version.rb +1 -1
- data/lib/publify_core.rb +0 -6
- data/lib/text_filter_plugin.rb +1 -1
- metadata +26 -44
- data/app/controllers/admin/cache_controller.rb +0 -33
- data/app/models/blog_sweeper.rb +0 -86
- data/app/models/page_cache.rb +0 -33
- data/app/views/admin/cache/show.html.erb +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 65754688dac47ff1c265e861e7d71e8ee11795b3
|
4
|
+
data.tar.gz: 11d916318fe03f35ba726dd7c713d4ed78c51f7a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb60a7fdf3aba54771e6ade6ea56b24d82420396e6ffbdafb07262474b3a96a275d8b3d136b5098c6c3270176d4ce9f3808f2be95746691eb59a4d3474e6147f
|
7
|
+
data.tar.gz: ef03364bf180833752b6607d253a9b077dd897d1298ffe06d896d7e41584ba157183a5f83511259ce3ea10899bc69ead6dfbcc3ad1bbd06ac220ee5cf6335fdb
|
@@ -5,8 +5,6 @@ module Admin; end
|
|
5
5
|
class Admin::ContentController < Admin::BaseController
|
6
6
|
layout :get_layout
|
7
7
|
|
8
|
-
cache_sweeper :blog_sweeper
|
9
|
-
|
10
8
|
def index
|
11
9
|
@search = params[:search] ? params[:search] : {}
|
12
10
|
@articles = this_blog.articles.search_with(@search).page(params[:page]).per(this_blog.admin_display_elements)
|
@@ -1,5 +1,4 @@
|
|
1
1
|
class Admin::FeedbackController < Admin::BaseController
|
2
|
-
cache_sweeper :blog_sweeper
|
3
2
|
ONLY_DOMAIN = %w(unapproved presumed_ham presumed_spam ham spam).freeze
|
4
3
|
|
5
4
|
def index
|
@@ -108,11 +107,6 @@ class Admin::FeedbackController < Admin::BaseController
|
|
108
107
|
count += Feedback.delete(id)
|
109
108
|
end
|
110
109
|
flash[:success] = I18n.t('admin.feedback.bulkops.success_deleted', count: count)
|
111
|
-
|
112
|
-
if items.any(&:invalidates_cache?)
|
113
|
-
flush_cache
|
114
|
-
return
|
115
|
-
end
|
116
110
|
when 'Mark Checked Items as Ham'
|
117
111
|
update_feedback(items, :mark_as_ham!)
|
118
112
|
flash[:success] = I18n.t('admin.feedback.bulkops.success_mark_as_ham', count: ids.size)
|
@@ -124,7 +118,7 @@ class Admin::FeedbackController < Admin::BaseController
|
|
124
118
|
flash[:success] = I18n.t('admin.feedback.bulkops.success_classification', count: ids.size)
|
125
119
|
when 'Delete all spam'
|
126
120
|
if request.post?
|
127
|
-
Feedback.
|
121
|
+
Feedback.where('state = ?', 'spam').delete_all
|
128
122
|
flash[:success] = I18n.t('admin.feedback.bulkops.success_deleted_spam')
|
129
123
|
end
|
130
124
|
else
|
@@ -147,13 +141,6 @@ class Admin::FeedbackController < Admin::BaseController
|
|
147
141
|
def update_feedback(items, method)
|
148
142
|
items.each do |value|
|
149
143
|
value.send(method)
|
150
|
-
@unexpired && value.invalidates_cache? or next
|
151
|
-
flush_cache
|
152
144
|
end
|
153
145
|
end
|
154
|
-
|
155
|
-
def flush_cache
|
156
|
-
@unexpired = false
|
157
|
-
PageCache.sweep_all
|
158
|
-
end
|
159
146
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
class Admin::TextfiltersController < Admin::BaseController
|
2
2
|
def macro_help
|
3
3
|
@macro = TextFilterPlugin.available_filters.find { |filter| filter.short_name == params[:id] }
|
4
|
-
render
|
4
|
+
render html: BlueCloth.new(@macro.help_text).to_html
|
5
5
|
end
|
6
6
|
end
|
@@ -3,8 +3,6 @@ require 'time'
|
|
3
3
|
require 'rexml/document'
|
4
4
|
|
5
5
|
class Admin::ThemesController < Admin::BaseController
|
6
|
-
cache_sweeper :blog_sweeper
|
7
|
-
|
8
6
|
def index
|
9
7
|
@themes = Theme.find_all
|
10
8
|
@themes.each do |theme|
|
@@ -23,15 +21,8 @@ class Admin::ThemesController < Admin::BaseController
|
|
23
21
|
def switchto
|
24
22
|
this_blog.theme = params[:theme]
|
25
23
|
this_blog.save
|
26
|
-
zap_theme_caches
|
27
24
|
this_blog.current_theme(:reload)
|
28
25
|
flash[:success] = I18n.t('admin.themes.switchto.success')
|
29
26
|
redirect_to admin_themes_url
|
30
27
|
end
|
31
|
-
|
32
|
-
protected
|
33
|
-
|
34
|
-
def zap_theme_caches
|
35
|
-
FileUtils.rm_rf(%w(stylesheets javascript images).map { |v| page_cache_directory + "/#{v}/theme" })
|
36
|
-
end
|
37
28
|
end
|
@@ -5,9 +5,6 @@ class ArticlesController < ContentController
|
|
5
5
|
|
6
6
|
layout :theme_layout, except: [:trackback]
|
7
7
|
|
8
|
-
cache_sweeper :blog_sweeper
|
9
|
-
caches_page :index, :archives, :read, :view_page, :redirect, if: proc { |c| c.request.query_string == '' }
|
10
|
-
|
11
8
|
helper :'admin/base'
|
12
9
|
|
13
10
|
def index
|
@@ -129,7 +126,7 @@ class ArticlesController < ContentController
|
|
129
126
|
|
130
127
|
# TODO: Move to TextfilterController?
|
131
128
|
def markup_help
|
132
|
-
render
|
129
|
+
render html: TextFilter.find(params[:id]).commenthelp
|
133
130
|
end
|
134
131
|
|
135
132
|
private
|
@@ -2,9 +2,8 @@ class CommentsController < FeedbackController
|
|
2
2
|
before_action :get_article, only: [:create, :preview]
|
3
3
|
|
4
4
|
def create
|
5
|
-
|
6
|
-
|
7
|
-
end
|
5
|
+
options = new_comment_defaults.merge comment_params.to_h
|
6
|
+
@comment = @article.add_comment(options)
|
8
7
|
|
9
8
|
unless current_user.nil? || session[:user_id].nil?
|
10
9
|
# maybe useless, but who knows ?
|
@@ -24,10 +23,10 @@ class CommentsController < FeedbackController
|
|
24
23
|
end
|
25
24
|
|
26
25
|
def preview
|
27
|
-
return render
|
26
|
+
return render plain: 'Comments are closed' if @article.comments_closed?
|
28
27
|
|
29
28
|
if comment_params[:body].blank?
|
30
|
-
|
29
|
+
head :ok
|
31
30
|
return
|
32
31
|
end
|
33
32
|
|
@@ -1,8 +1,6 @@
|
|
1
1
|
class FeedbackController < BaseController
|
2
2
|
before_action :get_article, only: [:create]
|
3
3
|
|
4
|
-
cache_sweeper :blog_sweeper
|
5
|
-
|
6
4
|
# Used only by comments. Maybe need move to comments controller
|
7
5
|
# or use it in our code with send some feed about trackback
|
8
6
|
#
|
@@ -28,7 +26,7 @@ class FeedbackController < BaseController
|
|
28
26
|
article = Article.find(params[:article_id])
|
29
27
|
redirect_to "#{URI.parse(article.permalink_url).path}\##{@page_title.underscore}"
|
30
28
|
else
|
31
|
-
render
|
29
|
+
render plain: 'this space left blank'
|
32
30
|
end
|
33
31
|
end
|
34
32
|
feedbacks = Feedback.from(controller_name, params[:article_id]).limit(this_blog.per_page(params[:format]))
|
@@ -1,11 +1,6 @@
|
|
1
1
|
class TagsController < ContentController
|
2
2
|
before_action :auto_discovery_feed, only: [:show, :index]
|
3
3
|
layout :theme_layout
|
4
|
-
cache_sweeper :blog_sweeper
|
5
|
-
|
6
|
-
caches_page :index, :show, if: proc { |c|
|
7
|
-
c.request.query_string == ''
|
8
|
-
}
|
9
4
|
|
10
5
|
def index
|
11
6
|
@tags = Tag.page(params[:page]).per(100)
|
@@ -16,7 +16,7 @@ class ThemeController < ContentController
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def error
|
19
|
-
|
19
|
+
head :not_found
|
20
20
|
end
|
21
21
|
|
22
22
|
def static_view_test
|
@@ -27,11 +27,11 @@ class ThemeController < ContentController
|
|
27
27
|
def render_theme_item(type, file, mime = nil)
|
28
28
|
mime ||= mime_for(file)
|
29
29
|
if file.split(%r{[\\/]}).include?('..')
|
30
|
-
return (render 'errors/404', status: 404)
|
30
|
+
return (render 'errors/404', status: 404, formats: ['html'])
|
31
31
|
end
|
32
32
|
|
33
33
|
src = this_blog.current_theme.path + "/#{type}/#{file}"
|
34
|
-
return (render
|
34
|
+
return (render plain: 'Not Found', status: 404) unless File.exist? src
|
35
35
|
|
36
36
|
cache_page File.read(src) if perform_caching
|
37
37
|
|
@@ -1,8 +1,4 @@
|
|
1
1
|
class XmlController < BaseController
|
2
|
-
caches_page :feed, if: proc { |c|
|
3
|
-
c.request.query_string == ''
|
4
|
-
}
|
5
|
-
|
6
2
|
NORMALIZED_FORMAT_FOR = { 'atom' => 'atom', 'rss' => 'rss',
|
7
3
|
'atom10' => 'atom', 'atom03' => 'atom', 'rss20' => 'rss',
|
8
4
|
'googlesitemap' => 'googlesitemap', 'rsd' => 'rsd' }.freeze
|
@@ -13,7 +9,7 @@ class XmlController < BaseController
|
|
13
9
|
@format = 'rss'
|
14
10
|
if params[:format]
|
15
11
|
@format = NORMALIZED_FORMAT_FOR[params[:format]]
|
16
|
-
return render(
|
12
|
+
return render(plain: 'Unsupported format', status: 404) unless @format
|
17
13
|
end
|
18
14
|
|
19
15
|
# TODO: Move redirects into config/routes.rb, if possible
|
@@ -37,7 +33,7 @@ class XmlController < BaseController
|
|
37
33
|
|
38
34
|
@feed_title = this_blog.blog_name
|
39
35
|
@link = this_blog.base_url
|
40
|
-
@self_url =
|
36
|
+
@self_url = request.url
|
41
37
|
|
42
38
|
@items += Article.find_already_published(1000)
|
43
39
|
@items += Page.find_already_published(1000)
|
@@ -47,7 +43,7 @@ class XmlController < BaseController
|
|
47
43
|
format.googlesitemap
|
48
44
|
end
|
49
45
|
else
|
50
|
-
return render(
|
46
|
+
return render(plain: 'Unsupported feed type', status: 404)
|
51
47
|
end
|
52
48
|
end
|
53
49
|
|
@@ -108,6 +108,7 @@ module Article::States
|
|
108
108
|
|
109
109
|
class Withdrawn < Base
|
110
110
|
def enter_hook
|
111
|
+
super
|
111
112
|
content[:published] = false
|
112
113
|
end
|
113
114
|
|
@@ -126,6 +127,7 @@ module Article::States
|
|
126
127
|
|
127
128
|
class PublicationPending < Base
|
128
129
|
def enter_hook
|
130
|
+
super
|
129
131
|
content[:published] = false if content.new_record?
|
130
132
|
end
|
131
133
|
|
data/app/models/blog.rb
CHANGED
@@ -170,39 +170,41 @@ EOS
|
|
170
170
|
@current_theme ||= Theme.find(theme) || Theme.new('', '')
|
171
171
|
end
|
172
172
|
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
Rails.cache.
|
173
|
+
module BasedUrlFor
|
174
|
+
# Generate a URL based on the +base_url+. This allows us to generate URLs
|
175
|
+
# without needing a controller handy, so we can produce URLs from within models
|
176
|
+
# where appropriate.
|
177
|
+
#
|
178
|
+
# It also caches the result in the Rails cache, so repeated URL generation
|
179
|
+
# requests should be fast, as they bypass all of Rails' route logic.
|
180
|
+
def url_for(options = {}, extra_params = {})
|
181
|
+
case options
|
182
|
+
when String
|
183
|
+
url_generated = if extra_params[:only_path]
|
184
|
+
root_path
|
185
|
+
else
|
186
|
+
base_url
|
187
|
+
end
|
188
|
+
url_generated += "/#{options}" # They asked for 'url_for "/some/path"', so return it unedited.
|
189
|
+
url_generated += "##{extra_params[:anchor]}" if extra_params[:anchor]
|
190
|
+
url_generated
|
191
|
+
when Hash
|
192
|
+
merged_opts = options.reverse_merge!(only_path: false, controller: '',
|
193
|
+
action: 'permalink',
|
194
|
+
host: host_with_port,
|
195
|
+
script_name: root_path)
|
196
|
+
cache_key = merged_opts.values.prepend('blog-urlfor-withbaseurl').join('-')
|
197
|
+
unless Rails.cache.exist?(cache_key)
|
198
|
+
Rails.cache.write(cache_key, super(merged_opts))
|
199
|
+
end
|
200
|
+
Rails.cache.read(cache_key)
|
201
|
+
else
|
202
|
+
raise "Invalid URL in url_for: #{options.inspect}"
|
198
203
|
end
|
199
|
-
Rails.cache.read(cache_key)
|
200
|
-
else
|
201
|
-
raise "Invalid URL in url_for: #{options.inspect}"
|
202
204
|
end
|
203
205
|
end
|
204
206
|
|
205
|
-
|
207
|
+
prepend BasedUrlFor
|
206
208
|
|
207
209
|
# The URL for a static file.
|
208
210
|
# FIXME: Let carrierwave handle this by itself
|
data/app/models/trigger.rb
CHANGED
@@ -67,7 +67,6 @@
|
|
67
67
|
<%= menu_item(t('.write'), write_admin_settings_path) %>
|
68
68
|
<%= menu_item(t('.display'), display_admin_settings_path) %>
|
69
69
|
<%= menu_item(t('.feedback'), feedback_admin_settings_path) %>
|
70
|
-
<%= menu_item(t('.cache'), admin_cache_path) %>
|
71
70
|
<%= menu_item(t('.manage_users'), admin_users_path) %>
|
72
71
|
</ul>
|
73
72
|
</li>
|
@@ -1,7 +1,9 @@
|
|
1
1
|
<div class="hfeed">
|
2
2
|
<div class='h-entry hentry h-as-note'>
|
3
3
|
<article class=' well well-small'>
|
4
|
-
|
4
|
+
<% if @reply['user']['profile_image_url'] %>
|
5
|
+
<%= image_tag(@reply['user']['profile_image_url'], class: "alignleft", alt: @reply['user']['name']) %>
|
6
|
+
<% end %>
|
5
7
|
<strong><%= get_reply_context_url(@reply) %></strong>
|
6
8
|
<p><%= nofollowify_links(PublifyApp::Textfilter::Twitterfilter.filtertext(@reply['text'])) %></p>
|
7
9
|
<p>
|
data/config/routes.rb
CHANGED
@@ -95,9 +95,6 @@ Rails.application.routes.draw do
|
|
95
95
|
namespace :admin do
|
96
96
|
root 'dashboard#index', as: 'dashboard'
|
97
97
|
|
98
|
-
get 'cache', to: 'cache#show', format: false
|
99
|
-
delete 'cache', to: 'cache#destroy', format: false
|
100
|
-
|
101
98
|
resources :content, only: [:index, :new, :edit, :create, :update, :destroy], format: false do
|
102
99
|
collection do
|
103
100
|
get 'auto_complete_for_article_keywords'
|
data/lib/publify_core/version.rb
CHANGED
data/lib/publify_core.rb
CHANGED
@@ -5,7 +5,6 @@ require 'publify_core/version'
|
|
5
5
|
require 'publify_core/engine'
|
6
6
|
require 'publify_core/lang'
|
7
7
|
|
8
|
-
require 'actionpack/page_caching'
|
9
8
|
require 'activerecord/session_store'
|
10
9
|
require 'bootstrap-sass'
|
11
10
|
require 'carrierwave'
|
@@ -13,11 +12,6 @@ require 'dynamic_form'
|
|
13
12
|
require 'jquery-rails'
|
14
13
|
require 'jquery-ui-rails'
|
15
14
|
require 'kaminari'
|
16
|
-
# Ensure Rails Observers defines ActiveRecord::Observer before loading
|
17
|
-
# sweeping.rb. Otherwise, Sweeper won't be defined.
|
18
|
-
# TODO: Replace or update rails-observers
|
19
|
-
require 'rails/observers/activerecord/active_record'
|
20
|
-
require 'rails-observers'
|
21
15
|
require 'rails_autolink'
|
22
16
|
require 'rails-timeago'
|
23
17
|
require 'recaptcha/rails'
|
data/lib/text_filter_plugin.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: publify_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 9.0.0.
|
4
|
+
version: 9.0.0.pre3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matijs van Zuijlen
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2016-11-
|
14
|
+
date: 2016-11-26 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rails
|
@@ -19,14 +19,14 @@ dependencies:
|
|
19
19
|
requirements:
|
20
20
|
- - "~>"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
22
|
+
version: 5.0.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - "~>"
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
29
|
+
version: 5.0.0
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: RedCloth
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -41,20 +41,6 @@ dependencies:
|
|
41
41
|
- - "~>"
|
42
42
|
- !ruby/object:Gem::Version
|
43
43
|
version: 4.3.1
|
44
|
-
- !ruby/object:Gem::Dependency
|
45
|
-
name: actionpack-page_caching
|
46
|
-
requirement: !ruby/object:Gem::Requirement
|
47
|
-
requirements:
|
48
|
-
- - "~>"
|
49
|
-
- !ruby/object:Gem::Version
|
50
|
-
version: 1.0.2
|
51
|
-
type: :runtime
|
52
|
-
prerelease: false
|
53
|
-
version_requirements: !ruby/object:Gem::Requirement
|
54
|
-
requirements:
|
55
|
-
- - "~>"
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
version: 1.0.2
|
58
44
|
- !ruby/object:Gem::Dependency
|
59
45
|
name: activerecord-session_store
|
60
46
|
requirement: !ruby/object:Gem::Requirement
|
@@ -201,28 +187,28 @@ dependencies:
|
|
201
187
|
requirements:
|
202
188
|
- - "~>"
|
203
189
|
- !ruby/object:Gem::Version
|
204
|
-
version: 0.
|
190
|
+
version: 0.12.0
|
205
191
|
type: :runtime
|
206
192
|
prerelease: false
|
207
193
|
version_requirements: !ruby/object:Gem::Requirement
|
208
194
|
requirements:
|
209
195
|
- - "~>"
|
210
196
|
- !ruby/object:Gem::Version
|
211
|
-
version: 0.
|
197
|
+
version: 0.12.0
|
212
198
|
- !ruby/object:Gem::Dependency
|
213
199
|
name: jquery-rails
|
214
200
|
requirement: !ruby/object:Gem::Requirement
|
215
201
|
requirements:
|
216
202
|
- - "~>"
|
217
203
|
- !ruby/object:Gem::Version
|
218
|
-
version: 4.1
|
204
|
+
version: 4.2.1
|
219
205
|
type: :runtime
|
220
206
|
prerelease: false
|
221
207
|
version_requirements: !ruby/object:Gem::Requirement
|
222
208
|
requirements:
|
223
209
|
- - "~>"
|
224
210
|
- !ruby/object:Gem::Version
|
225
|
-
version: 4.1
|
211
|
+
version: 4.2.1
|
226
212
|
- !ruby/object:Gem::Dependency
|
227
213
|
name: jquery-ui-rails
|
228
214
|
requirement: !ruby/object:Gem::Requirement
|
@@ -265,20 +251,6 @@ dependencies:
|
|
265
251
|
- - "~>"
|
266
252
|
- !ruby/object:Gem::Version
|
267
253
|
version: '4.2'
|
268
|
-
- !ruby/object:Gem::Dependency
|
269
|
-
name: rails-observers
|
270
|
-
requirement: !ruby/object:Gem::Requirement
|
271
|
-
requirements:
|
272
|
-
- - "~>"
|
273
|
-
- !ruby/object:Gem::Version
|
274
|
-
version: 0.1.2
|
275
|
-
type: :runtime
|
276
|
-
prerelease: false
|
277
|
-
version_requirements: !ruby/object:Gem::Requirement
|
278
|
-
requirements:
|
279
|
-
- - "~>"
|
280
|
-
- !ruby/object:Gem::Version
|
281
|
-
version: 0.1.2
|
282
254
|
- !ruby/object:Gem::Dependency
|
283
255
|
name: rails-timeago
|
284
256
|
requirement: !ruby/object:Gem::Requirement
|
@@ -313,28 +285,28 @@ dependencies:
|
|
313
285
|
requirements:
|
314
286
|
- - "~>"
|
315
287
|
- !ruby/object:Gem::Version
|
316
|
-
version:
|
288
|
+
version: 4.0.0
|
317
289
|
type: :runtime
|
318
290
|
prerelease: false
|
319
291
|
version_requirements: !ruby/object:Gem::Requirement
|
320
292
|
requirements:
|
321
293
|
- - "~>"
|
322
294
|
- !ruby/object:Gem::Version
|
323
|
-
version:
|
295
|
+
version: 4.0.0
|
324
296
|
- !ruby/object:Gem::Dependency
|
325
297
|
name: rubypants
|
326
298
|
requirement: !ruby/object:Gem::Requirement
|
327
299
|
requirements:
|
328
300
|
- - "~>"
|
329
301
|
- !ruby/object:Gem::Version
|
330
|
-
version: 0.
|
302
|
+
version: 0.6.0
|
331
303
|
type: :runtime
|
332
304
|
prerelease: false
|
333
305
|
version_requirements: !ruby/object:Gem::Requirement
|
334
306
|
requirements:
|
335
307
|
- - "~>"
|
336
308
|
- !ruby/object:Gem::Version
|
337
|
-
version: 0.
|
309
|
+
version: 0.6.0
|
338
310
|
- !ruby/object:Gem::Dependency
|
339
311
|
name: sass-rails
|
340
312
|
requirement: !ruby/object:Gem::Requirement
|
@@ -461,6 +433,20 @@ dependencies:
|
|
461
433
|
- - "~>"
|
462
434
|
- !ruby/object:Gem::Version
|
463
435
|
version: 0.9.1
|
436
|
+
- !ruby/object:Gem::Dependency
|
437
|
+
name: rails-controller-testing
|
438
|
+
requirement: !ruby/object:Gem::Requirement
|
439
|
+
requirements:
|
440
|
+
- - "~>"
|
441
|
+
- !ruby/object:Gem::Version
|
442
|
+
version: 1.0.1
|
443
|
+
type: :development
|
444
|
+
prerelease: false
|
445
|
+
version_requirements: !ruby/object:Gem::Requirement
|
446
|
+
requirements:
|
447
|
+
- - "~>"
|
448
|
+
- !ruby/object:Gem::Version
|
449
|
+
version: 1.0.1
|
464
450
|
description: Core engine for the Publify blogging system, formerly known as Typo.
|
465
451
|
email:
|
466
452
|
- matijs@matijs.net
|
@@ -521,7 +507,6 @@ files:
|
|
521
507
|
- app/assets/stylesheets/widearea.css
|
522
508
|
- app/controllers/accounts_controller.rb
|
523
509
|
- app/controllers/admin/base_controller.rb
|
524
|
-
- app/controllers/admin/cache_controller.rb
|
525
510
|
- app/controllers/admin/content_controller.rb
|
526
511
|
- app/controllers/admin/dashboard_controller.rb
|
527
512
|
- app/controllers/admin/feedback_controller.rb
|
@@ -567,7 +552,6 @@ files:
|
|
567
552
|
- app/models/article/factory.rb
|
568
553
|
- app/models/article/states.rb
|
569
554
|
- app/models/blog.rb
|
570
|
-
- app/models/blog_sweeper.rb
|
571
555
|
- app/models/comment.rb
|
572
556
|
- app/models/config_manager.rb
|
573
557
|
- app/models/content.rb
|
@@ -577,7 +561,6 @@ files:
|
|
577
561
|
- app/models/meta_sidebar.rb
|
578
562
|
- app/models/note.rb
|
579
563
|
- app/models/page.rb
|
580
|
-
- app/models/page_cache.rb
|
581
564
|
- app/models/page_sidebar.rb
|
582
565
|
- app/models/ping.rb
|
583
566
|
- app/models/post_type.rb
|
@@ -597,7 +580,6 @@ files:
|
|
597
580
|
- app/services/title_builder.rb
|
598
581
|
- app/uploaders/resource_uploader.rb
|
599
582
|
- app/views/accounts/confirm.html.erb
|
600
|
-
- app/views/admin/cache/show.html.erb
|
601
583
|
- app/views/admin/content/_article_list.html.erb
|
602
584
|
- app/views/admin/content/_form.html.erb
|
603
585
|
- app/views/admin/content/autosave.js.erb
|
@@ -1,33 +0,0 @@
|
|
1
|
-
require 'find'
|
2
|
-
|
3
|
-
class Admin::CacheController < Admin::BaseController
|
4
|
-
def show
|
5
|
-
@cache_size = 0
|
6
|
-
@cache_number = 0
|
7
|
-
|
8
|
-
FileUtils.mkdir_p(Rails.application.config.action_controller.page_cache_directory) unless File.exist?(Rails.application.config.action_controller.page_cache_directory)
|
9
|
-
|
10
|
-
Find.find(Rails.application.config.action_controller.page_cache_directory) do |path|
|
11
|
-
if FileTest.directory?(path)
|
12
|
-
if File.basename(path)[0] == '.'
|
13
|
-
Find.prune
|
14
|
-
else
|
15
|
-
next
|
16
|
-
end
|
17
|
-
else
|
18
|
-
@cache_size += FileTest.size(path)
|
19
|
-
@cache_number += 1
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def destroy
|
25
|
-
begin
|
26
|
-
PageCache.sweep_all
|
27
|
-
flash[:success] = t('admin.cache.destroy.success')
|
28
|
-
rescue
|
29
|
-
flash[:error] = t('admin.cache.destroy.error')
|
30
|
-
end
|
31
|
-
redirect_to admin_cache_url
|
32
|
-
end
|
33
|
-
end
|
data/app/models/blog_sweeper.rb
DELETED
@@ -1,86 +0,0 @@
|
|
1
|
-
class BlogSweeper < ActionController::Caching::Sweeper
|
2
|
-
observe Blog, User, Article, Page, Comment, Trackback, Note, Tag
|
3
|
-
|
4
|
-
def pending_sweeps
|
5
|
-
@pending_sweeps ||= Set.new
|
6
|
-
end
|
7
|
-
|
8
|
-
def run_pending_page_sweeps
|
9
|
-
pending_sweeps.each do |each|
|
10
|
-
send(each)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
def after_comments_create
|
15
|
-
expire_for(controller.send(:instance_variable_get, :@comment))
|
16
|
-
end
|
17
|
-
|
18
|
-
alias after_comments_update after_comments_create
|
19
|
-
alias after_articles_comment after_comments_create
|
20
|
-
|
21
|
-
def after_comments_destroy
|
22
|
-
expire_for(controller.send(:instance_variable_get, :@comment), true)
|
23
|
-
end
|
24
|
-
|
25
|
-
alias after_articles_nuke_comment after_comments_destroy
|
26
|
-
|
27
|
-
def after_articles_trackback
|
28
|
-
expire_for(controller.send(:instance_variable_get, :@trackback))
|
29
|
-
end
|
30
|
-
|
31
|
-
def after_articles_nuke_trackback
|
32
|
-
expire_for(controller.send(:instance_variable_get, :@trackback), true)
|
33
|
-
end
|
34
|
-
|
35
|
-
def after_save(record)
|
36
|
-
expire_for(record) unless record.is_a?(Article) && record.state == :draft
|
37
|
-
end
|
38
|
-
|
39
|
-
def after_destroy(record)
|
40
|
-
expire_for(record, true)
|
41
|
-
end
|
42
|
-
|
43
|
-
# TODO: Simplify this. Almost every sweep amounts to a sweep_all.
|
44
|
-
def expire_for(record, destroying = false)
|
45
|
-
case record
|
46
|
-
when Page
|
47
|
-
pending_sweeps << :sweep_pages
|
48
|
-
when Content
|
49
|
-
if record.invalidates_cache?(destroying)
|
50
|
-
pending_sweeps << :sweep_articles << :sweep_pages
|
51
|
-
end
|
52
|
-
when Tag
|
53
|
-
pending_sweeps << :sweep_articles << :sweep_pages
|
54
|
-
when Blog, User, Comment, Trackback
|
55
|
-
pending_sweeps << :sweep_all << :sweep_theme
|
56
|
-
end
|
57
|
-
run_pending_page_sweeps unless controller
|
58
|
-
end
|
59
|
-
|
60
|
-
def sweep_all
|
61
|
-
PageCache.sweep_all
|
62
|
-
end
|
63
|
-
|
64
|
-
def sweep_theme
|
65
|
-
PageCache.sweep_theme_cache
|
66
|
-
end
|
67
|
-
|
68
|
-
def sweep_articles
|
69
|
-
PageCache.sweep_all
|
70
|
-
end
|
71
|
-
|
72
|
-
def sweep_pages
|
73
|
-
PageCache.zap_pages(%w(pages))
|
74
|
-
end
|
75
|
-
|
76
|
-
def logger
|
77
|
-
@logger ||= ::Rails.logger || Logger.new(STDERR)
|
78
|
-
end
|
79
|
-
|
80
|
-
private
|
81
|
-
|
82
|
-
def callback(timing)
|
83
|
-
super
|
84
|
-
run_pending_page_sweeps if timing == :after
|
85
|
-
end
|
86
|
-
end
|
data/app/models/page_cache.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
# FIXME: This class is not a model anymore. Move elsewhere?
|
2
|
-
class PageCache
|
3
|
-
def self.logger
|
4
|
-
::Rails.logger
|
5
|
-
end
|
6
|
-
|
7
|
-
def logger
|
8
|
-
::Rails.logger
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.public_path
|
12
|
-
ActionController::Base.page_cache_directory
|
13
|
-
end
|
14
|
-
|
15
|
-
# Delete all file save in path_cache by page_cache system
|
16
|
-
def self.sweep_all
|
17
|
-
zap_pages(%w(*))
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.sweep_theme_cache
|
21
|
-
zap_pages(%w(images/theme/* stylesheets/theme/* javascripts/theme/*))
|
22
|
-
end
|
23
|
-
|
24
|
-
def self.zap_pages(paths)
|
25
|
-
# Ensure no one is going to wipe his own blog public directory
|
26
|
-
# It happened once on a release and was no fun at all
|
27
|
-
return if public_path == "#{::Rails.root}/public"
|
28
|
-
paths.each do |v|
|
29
|
-
FileUtils.rm_rf(Dir.glob(public_path + "/#{v}"))
|
30
|
-
end
|
31
|
-
true
|
32
|
-
end
|
33
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
<% content_for :page_heading do %>
|
2
|
-
<h2>
|
3
|
-
<i class="glyphicon glyphicon-large glyphicon-cog"></i>
|
4
|
-
<%= t(".cache") %>
|
5
|
-
</h2>
|
6
|
-
<% end %>
|
7
|
-
|
8
|
-
<p class='alert alert-info'><%= t(".explanation") %></p>
|
9
|
-
|
10
|
-
<div class='well'>
|
11
|
-
<p><%= t(".stats", files_count: @cache_number.to_i, size: @cache_size.to_i / 1000) %></p>
|
12
|
-
<hr>
|
13
|
-
<%= form_tag(admin_cache_path, method: :delete) do %>
|
14
|
-
<div class='form-group'>
|
15
|
-
<%= submit_tag(t(".sweep_cache"), class: 'btn btn-primary') %>
|
16
|
-
</div>
|
17
|
-
<% end %>
|
18
|
-
</div>
|