publify_core 9.0.0.pre2 → 9.0.0.pre3
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.
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>
|