storytime 2.1.6 → 2.1.7
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.
- checksums.yaml +5 -5
- data/.github/workflows/test.yml +54 -0
- data/.gitignore +2 -1
- data/.ruby-version +1 -1
- data/.tool-versions +1 -0
- data/Gemfile +5 -3
- data/Gemfile.lock +414 -425
- data/Guardfile +1 -1
- data/app/assets/fonts/storytime-icons.eot +0 -0
- data/app/assets/fonts/storytime-icons.svg +23 -0
- data/app/assets/fonts/storytime-icons.ttf +0 -0
- data/app/assets/fonts/storytime-icons.woff +0 -0
- data/app/assets/javascripts/storytime/application.js +1 -8
- data/app/assets/javascripts/storytime/off_canvas.coffee +16 -0
- data/app/assets/javascripts/storytime/wysiwyg.js.coffee +9 -7
- data/app/assets/stylesheets/storytime/_buttons.scss +33 -0
- data/app/assets/stylesheets/storytime/_list-group.scss +1 -1
- data/app/assets/stylesheets/storytime/application.scss +14 -2
- data/app/assets/stylesheets/storytime/icons.scss +5 -5
- data/app/assets/stylesheets/storytime/leather/_buttons.scss +31 -0
- data/app/assets/stylesheets/storytime/leather/_devise.scss +72 -0
- data/app/assets/stylesheets/storytime/leather/_grid.scss +19 -0
- data/app/assets/stylesheets/storytime/leather/_list_groups.scss +33 -0
- data/app/assets/stylesheets/storytime/leather/_nav_menus.scss +125 -0
- data/app/assets/stylesheets/storytime/leather/_navbar_transparent.scss +23 -0
- data/app/assets/stylesheets/storytime/leather/_off_canvas.scss +109 -0
- data/app/assets/stylesheets/storytime/leather/_scroll_panels.scss +85 -0
- data/app/assets/stylesheets/storytime/leather/_toggle_columns.scss +23 -0
- data/app/assets/stylesheets/storytime/leather/_typography.scss +12 -0
- data/app/assets/stylesheets/storytime/leather/_utilities.scss +54 -0
- data/app/assets/stylesheets/storytime/leather/_variables.scss +8 -0
- data/app/assets/stylesheets/storytime/posts.scss +9 -1
- data/app/controllers/storytime/application_controller.rb +1 -1
- data/app/controllers/storytime/dashboard/blog_posts_controller.rb +5 -3
- data/app/controllers/storytime/dashboard/blogs_controller.rb +1 -1
- data/app/controllers/storytime/dashboard/media_controller.rb +4 -4
- data/app/controllers/storytime/dashboard/memberships_controller.rb +1 -1
- data/app/controllers/storytime/dashboard/pages_controller.rb +26 -6
- data/app/controllers/storytime/dashboard/posts_controller.rb +30 -5
- data/app/controllers/storytime/dashboard/subscriptions_controller.rb +1 -1
- data/app/controllers/storytime/pages_controller.rb +31 -1
- data/app/controllers/storytime/posts_controller.rb +1 -1
- data/app/controllers/storytime/subscriptions_controller.rb +5 -1
- data/app/helpers/storytime/application_helper.rb +0 -4
- data/app/models/concerns/storytime/post_featured_images.rb +2 -2
- data/app/models/concerns/storytime/post_partial_inheritance.rb +2 -2
- data/app/models/storytime/autosave.rb +1 -1
- data/app/models/storytime/comment.rb +1 -1
- data/app/models/storytime/media.rb +1 -1
- data/app/models/storytime/membership.rb +2 -2
- data/app/models/storytime/post.rb +7 -3
- data/app/models/storytime/site.rb +4 -6
- data/app/models/storytime/snippet.rb +12 -1
- data/app/models/storytime/subscription.rb +2 -2
- data/app/models/storytime/version.rb +1 -1
- data/app/policies/storytime/post_policy.rb +1 -1
- data/app/views/storytime/dashboard/_navigation.html.erb +0 -9
- data/app/views/storytime/dashboard/blog_posts/_form.html.erb +5 -1
- data/app/views/storytime/dashboard/blogs/edit.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/blogs/index.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/blogs/new.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/media/_gallery.html.erb +1 -1
- data/app/views/storytime/dashboard/media/_modal.html.erb +2 -2
- data/app/views/storytime/dashboard/media/show.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/memberships/_edit.html.erb +1 -1
- data/app/views/storytime/dashboard/memberships/_index.html.erb +3 -3
- data/app/views/storytime/dashboard/memberships/_new.html.erb +1 -1
- data/app/views/storytime/dashboard/memberships/edit.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/memberships/index.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/memberships/new.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/memberships/save.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/pages/_form.html.erb +1 -1
- data/app/views/storytime/dashboard/posts/_directory.html.erb +18 -0
- data/app/views/storytime/dashboard/posts/_form.html.erb +1 -1
- data/app/views/storytime/dashboard/posts/_list.html.erb +2 -26
- data/app/views/storytime/dashboard/posts/_new_button.html.erb +1 -1
- data/app/views/storytime/dashboard/posts/_post.html.erb +28 -0
- data/app/views/storytime/dashboard/posts/_sorts.html.erb +21 -0
- data/app/views/storytime/dashboard/posts/index.html.erb +5 -3
- data/app/views/storytime/dashboard/roles/_form.html.erb +1 -1
- data/app/views/storytime/dashboard/roles/edit.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/sites/_form.html.erb +1 -1
- data/app/views/storytime/dashboard/sites/site.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/snippets/_index.html.erb +1 -1
- data/app/views/storytime/dashboard/snippets/edit.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/snippets/index.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/snippets/new.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/subscriptions/_form.html.erb +1 -1
- data/app/views/storytime/dashboard/subscriptions/_index.html.erb +2 -2
- data/app/views/storytime/dashboard/subscriptions/form.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/subscriptions/index.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/versions/_versions_info.html.erb +1 -1
- data/app/views/storytime/posts/show.html.erb +6 -0
- data/app/views/storytime/sites/_google_analytics_code.html.erb +5 -8
- data/config/initializers/assets.rb +2 -1
- data/config/initializers/friendly_id.rb +1 -1
- data/config/initializers/url_for_patch.rb +19 -8
- data/config/locales/devise.zh-CN.yml +59 -0
- data/config/locales/kaminari.zh-CN.yml +17 -0
- data/config/locales/simple_form.zh-CN.yml +26 -0
- data/config/locales/zh-CN.yml +141 -0
- data/config/routes.rb +2 -4
- data/db/migrate/20140501174341_create_storytime_posts.rb +1 -1
- data/db/migrate/20140509191309_create_friendly_id_slugs.rb +1 -1
- data/db/migrate/20140511200849_create_storytime_media.rb +1 -1
- data/db/migrate/20140513161233_create_storytime_sites.rb +1 -1
- data/db/migrate/20140514200234_create_storytime_tags.rb +1 -1
- data/db/migrate/20140514200304_create_storytime_taggings.rb +1 -1
- data/db/migrate/20140516141252_create_storytime_versions.rb +1 -1
- data/db/migrate/20140521190606_create_storytime_roles.rb +1 -1
- data/db/migrate/20140521191048_add_storytime_role_id_to_users.rb +1 -1
- data/db/migrate/20140521191728_create_storytime_permissions.rb +1 -1
- data/db/migrate/20140521191744_create_storytime_actions.rb +1 -1
- data/db/migrate/20140813014447_create_storytime_comments.rb +1 -1
- data/db/migrate/20140813130534_add_storytime_name_to_users.rb +1 -1
- data/db/migrate/20140916183056_create_storytime_autosaves.rb +1 -1
- data/db/migrate/20141020213343_add_secondary_media_id_to_storytime_post.rb +1 -1
- data/db/migrate/20141021073356_create_storytime_snippets.rb +1 -1
- data/db/migrate/20141111164439_create_storytime_subscriptions.rb +1 -1
- data/db/migrate/20150122200805_add_title_and_content_index_to_storytime_post.rb +1 -1
- data/db/migrate/20150128185746_seed_new_actions_and_permissions.rb +1 -1
- data/db/migrate/20150129215308_add_site_id_to_storytime_subscription.rb +1 -1
- data/db/migrate/20150206201847_add_site_id_to_storytime_post.rb +1 -1
- data/db/migrate/20150206201919_add_site_id_to_storytime_snippet.rb +1 -1
- data/db/migrate/20150206201931_add_site_id_to_storytime_tag.rb +1 -1
- data/db/migrate/20150206205256_add_notification_fields_to_storytime_post.rb +1 -1
- data/db/migrate/20150216211257_add_subdomain_to_storytime_sites.rb +1 -1
- data/db/migrate/20150216225045_add_site_to_storytime_media.rb +1 -1
- data/db/migrate/20150219210528_remove_root_page_content_from_storytime_sites.rb +1 -1
- data/db/migrate/20150220184902_add_blog_id_to_posts.rb +1 -1
- data/db/migrate/20150224192138_add_homepage_path_to_storytime_sites.rb +1 -1
- data/db/migrate/20150224193151_add_subscription_email_from_to_storytime_sites.rb +1 -1
- data/db/migrate/20150224193551_add_layout_to_storytime_sites.rb +1 -1
- data/db/migrate/20150224194559_add_disqus_forum_shortname_to_storytime_sites.rb +1 -1
- data/db/migrate/20150224212453_remove_homepage_path_from_storytime_sites.rb +1 -1
- data/db/migrate/20150225143516_add_site_id_to_storytime_autosaves.rb +1 -1
- data/db/migrate/20150225143826_add_site_id_to_storytime_comments.rb +1 -1
- data/db/migrate/20150225145119_add_site_id_to_storytime_versions.rb +1 -1
- data/db/migrate/20150225145316_add_site_id_to_storytime_taggings.rb +1 -1
- data/db/migrate/20150225145608_update_storytime_site_id_columns.rb +1 -1
- data/db/migrate/20150225164232_add_site_id_to_storytime_permissions.rb +1 -1
- data/db/migrate/20150225212917_create_storytime_memberships.rb +1 -1
- data/db/migrate/20150225213535_create_memberships_for_storytime_users.rb +1 -1
- data/db/migrate/20150226201739_add_custom_domain_to_storytime_sites.rb +1 -1
- data/db/migrate/20150302171500_add_site_id_to_storytime_media.rb +1 -1
- data/db/migrate/20150302171722_set_site_layout.rb +1 -1
- data/db/migrate/20150302185138_remove_storytime_role_id_from_users.rb +1 -1
- data/db/migrate/20150302192525_transfer_posts_to_blogs.rb +1 -1
- data/db/migrate/20150302192759_seed_permissions.rb +1 -1
- data/db/migrate/20150331162329_add_discourse_name_to_storytime_sites.rb +1 -1
- data/db/migrate/20150402161427_remove_subdomain_from_storytime_site.rb +1 -1
- data/db/migrate/20150520181115_create_storytime_navigations.rb +1 -1
- data/db/migrate/20150520185227_create_storytime_links.rb +1 -1
- data/db/migrate/20150520190700_add_position_to_storytime_links.rb +1 -1
- data/db/migrate/20150529192058_add_url_to_storytime_links.rb +1 -1
- data/db/migrate/20260408001637_add_canonical_url_to_storytime_posts.rb +5 -0
- data/db/migrate/20260701000000_sanitize_existing_storytime_snippets.rb +22 -0
- data/lib/storytime/cli/install.rb +2 -20
- data/lib/storytime/concerns/action_controller_extension.rb +36 -0
- data/lib/storytime/constraints/page_constraint.rb +8 -2
- data/lib/storytime/engine.rb +3 -5
- data/lib/storytime/migrators/v1.rb +3 -3
- data/lib/storytime/post_notifier.rb +1 -1
- data/lib/storytime/post_url_handler.rb +18 -5
- data/lib/storytime/storytime_helpers.rb +4 -0
- data/lib/storytime/version.rb +1 -1
- data/lib/storytime.rb +1 -1
- data/spec/controllers/dashboard_controller_spec.rb +5 -6
- data/spec/dummy/app/assets/config/manifest.js +3 -0
- data/spec/dummy/config/database.yml +3 -3
- data/spec/dummy/config/initializers/devise.rb +1 -1
- data/spec/dummy/db/migrate/20140530185250_devise_create_users.rb +1 -1
- data/spec/dummy/db/migrate/20150127172846_create_widgets.rb +1 -1
- data/spec/dummy/db/migrate/20150206203824_add_video_url_to_storytime_posts.rb +1 -1
- data/spec/dummy/db/schema.rb +226 -244
- data/spec/factories/action_factories.rb +3 -3
- data/spec/factories/comment_factories.rb +1 -1
- data/spec/factories/media_factories.rb +1 -1
- data/spec/factories/membership_factories.rb +1 -1
- data/spec/factories/navigation_factories.rb +3 -3
- data/spec/factories/permission_factories.rb +1 -1
- data/spec/factories/post_factories.rb +2 -2
- data/spec/factories/role_factories.rb +11 -11
- data/spec/factories/site_factories.rb +3 -3
- data/spec/factories/snippet_factories.rb +1 -1
- data/spec/factories/subscription_factories.rb +1 -1
- data/spec/factories/user_factories.rb +2 -2
- data/spec/factories/widget_factories.rb +2 -2
- data/spec/features/blogs_spec.rb +7 -7
- data/spec/features/comments_spec.rb +11 -11
- data/spec/features/dashboard/media_spec.rb +17 -11
- data/spec/features/dashboard/memberships_spec.rb +13 -19
- data/spec/features/dashboard/navigations_spec.rb +1 -1
- data/spec/features/dashboard/pages_spec.rb +8 -8
- data/spec/features/dashboard/posts_spec.rb +19 -19
- data/spec/features/dashboard/sites_spec.rb +1 -1
- data/spec/features/dashboard/snippets_spec.rb +3 -3
- data/spec/features/dashboard/subscription_spec.rb +2 -2
- data/spec/features/pages_spec.rb +3 -3
- data/spec/features/posts_spec.rb +2 -2
- data/spec/features/subscription_spec.rb +3 -3
- data/spec/importers/wordpress_spec.rb +1 -1
- data/spec/lib/mysql_fulltext_search_adapter_spec.rb +3 -3
- data/spec/lib/mysql_search_adapter_spec.rb +3 -3
- data/spec/lib/postgres_search_adapter_spec.rb +3 -3
- data/spec/lib/sqlite3_search_adapter_spec.rb +3 -3
- data/spec/lib/storytime/constraints/page_constraint_spec.rb +40 -0
- data/spec/lib/storytime_helpers_spec.rb +2 -2
- data/spec/models/navigation_spec.rb +3 -3
- data/spec/models/post_spec.rb +29 -29
- data/spec/models/snippet_spec.rb +31 -0
- data/spec/models/subscription_spec.rb +4 -4
- data/spec/models/tagging_spec.rb +14 -14
- data/spec/models/version_spec.rb +29 -29
- data/spec/policies/comment_policy_spec.rb +11 -11
- data/spec/policies/post_policy_spec.rb +13 -13
- data/spec/requests/pages_spec.rb +37 -0
- data/spec/requests/routings_spec.rb +14 -15
- data/spec/spec_helper.rb +8 -15
- data/spec/support/domains.rb +2 -2
- data/spec/support/feature_macros.rb +5 -5
- data/spec/support/pundit_matcher.rb +3 -3
- data/storytime.gemspec +15 -20
- data/vendor/assets/javascripts/codemirror/addons/edit/closebrackets.js +195 -0
- data/vendor/assets/javascripts/codemirror/addons/edit/closetag.js +169 -0
- data/vendor/assets/javascripts/codemirror/addons/fold/xml-fold.js +182 -0
- data/vendor/assets/javascripts/codemirror.js +8922 -0
- data/vendor/assets/javascripts/medium-editor.min.js +3 -3
- data/vendor/assets/stylesheets/codemirror/themes/solarized.css +169 -0
- data/vendor/assets/stylesheets/codemirror.css +347 -0
- metadata +94 -134
- data/config/initializers/storytime_admin.rb +0 -5
- data/config/spring.rb +0 -1
- data/spec/dummy/app/controllers/storytime_admin/widgets_controller.rb +0 -5
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module Storytime
|
|
2
|
+
module ActionControllerExtension
|
|
3
|
+
|
|
4
|
+
def self.included(base)
|
|
5
|
+
base.extend(ClassMethods)
|
|
6
|
+
base.helper_method :current_tab, :current_tab? if base.respond_to?(:helper_method)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def set_tab(name, namespace = nil)
|
|
10
|
+
tab_stack[namespace || :default] = name
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def current_tab(namespace = nil)
|
|
14
|
+
tab_stack[namespace || :default]
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def current_tab?(name, namespace = nil)
|
|
18
|
+
current_tab(namespace).to_s == name.to_s
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def tab_stack
|
|
22
|
+
@tab_stack ||= {}
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
module ClassMethods
|
|
26
|
+
def set_tab(*args)
|
|
27
|
+
options = args.extract_options!
|
|
28
|
+
name, namespace = args
|
|
29
|
+
|
|
30
|
+
before_action(options) do |controller|
|
|
31
|
+
controller.send(:set_tab, name, namespace)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -4,9 +4,15 @@ module Storytime
|
|
|
4
4
|
include Storytime::Concerns::CurrentSite
|
|
5
5
|
|
|
6
6
|
def matches?(request)
|
|
7
|
+
id = request.params[:id].to_s
|
|
8
|
+
# Reject path traversal: params[:id] comes from the "/*id" glob route, so it
|
|
9
|
+
# can contain "/" and ".." segments. sanitize() only strips HTML, not "../",
|
|
10
|
+
# which would let the File.exist? below probe arbitrary filesystem paths
|
|
11
|
+
return false if id.include?("..")
|
|
12
|
+
|
|
7
13
|
site = current_storytime_site(request)
|
|
8
|
-
site.pages.friendly.exists?(
|
|
9
|
-
File.
|
|
14
|
+
site.pages.friendly.exists?(id) ||
|
|
15
|
+
File.exist?(Rails.root.join('app', 'views', "storytime/#{site.custom_view_path}/pages/#{ActionController::Base.helpers.sanitize(id)}.html.erb"))
|
|
10
16
|
end
|
|
11
17
|
end
|
|
12
18
|
end
|
data/lib/storytime/engine.rb
CHANGED
|
@@ -8,18 +8,17 @@ require 'jbuilder'
|
|
|
8
8
|
require 'jquery-rails'
|
|
9
9
|
require 'jquery-ui-rails'
|
|
10
10
|
require 'kaminari'
|
|
11
|
-
require 'leather'
|
|
12
11
|
require 'nokogiri'
|
|
13
12
|
require 'pundit'
|
|
14
13
|
require 'simple_form'
|
|
15
|
-
require 'codemirror-rails'
|
|
16
|
-
require 'storytime_admin'
|
|
17
14
|
require 'cocoon'
|
|
18
15
|
require 'acts_as_list'
|
|
16
|
+
require 'devise'
|
|
19
17
|
|
|
20
18
|
require 'storytime/concerns/has_versions'
|
|
21
19
|
require 'storytime/concerns/storytime_user'
|
|
22
20
|
require 'storytime/concerns/controller_content_for'
|
|
21
|
+
require 'storytime/concerns/action_controller_extension'
|
|
23
22
|
require 'storytime/concerns/current_site'
|
|
24
23
|
require 'storytime/constraints/blog_homepage_constraint'
|
|
25
24
|
require 'storytime/constraints/page_homepage_constraint'
|
|
@@ -39,7 +38,6 @@ module Storytime
|
|
|
39
38
|
|
|
40
39
|
initializer "storytime.view_helpers" do
|
|
41
40
|
ActiveSupport.on_load(:action_view) do
|
|
42
|
-
include Storytime::ApplicationHelper
|
|
43
41
|
include Storytime::StorytimeHelpers
|
|
44
42
|
end
|
|
45
43
|
end
|
|
@@ -47,6 +45,7 @@ module Storytime
|
|
|
47
45
|
initializer "storytime.controller_helpers" do
|
|
48
46
|
ActiveSupport.on_load(:action_controller) do
|
|
49
47
|
include Storytime::ControllerHelpers
|
|
48
|
+
include Storytime::ActionControllerExtension
|
|
50
49
|
include Storytime::Concerns::CurrentSite
|
|
51
50
|
helper_method :current_storytime_site
|
|
52
51
|
|
|
@@ -67,7 +66,6 @@ module Storytime
|
|
|
67
66
|
initializer "storytime.configure_carrierwave" do
|
|
68
67
|
CarrierWave.configure do |config|
|
|
69
68
|
if Storytime.media_storage == :s3
|
|
70
|
-
config.fog_provider = 'fog/aws'
|
|
71
69
|
config.fog_credentials = {
|
|
72
70
|
provider: 'AWS',
|
|
73
71
|
aws_access_key_id: Storytime.aws_access_key_id,
|
|
@@ -65,7 +65,7 @@ module Storytime
|
|
|
65
65
|
site = Storytime::Site.first
|
|
66
66
|
Storytime::Post.all.each do |post|
|
|
67
67
|
if post.site_id.blank?
|
|
68
|
-
post.
|
|
68
|
+
post.update(site_id: site.id)
|
|
69
69
|
end
|
|
70
70
|
end
|
|
71
71
|
end
|
|
@@ -74,7 +74,7 @@ module Storytime
|
|
|
74
74
|
site = Storytime::Site.first
|
|
75
75
|
Storytime::Snippet.all.each do |snippet|
|
|
76
76
|
if snippet.site_id.blank?
|
|
77
|
-
snippet.
|
|
77
|
+
snippet.update(site_id: site.id)
|
|
78
78
|
end
|
|
79
79
|
end
|
|
80
80
|
end
|
|
@@ -83,7 +83,7 @@ module Storytime
|
|
|
83
83
|
site = Storytime::Site.first
|
|
84
84
|
Storytime::Tag.all.each do |tag|
|
|
85
85
|
if tag.site_id.blank?
|
|
86
|
-
tag.
|
|
86
|
+
tag.update(site_id: site.id)
|
|
87
87
|
end
|
|
88
88
|
end
|
|
89
89
|
end
|
|
@@ -6,7 +6,7 @@ module Storytime
|
|
|
6
6
|
return if post.nil?
|
|
7
7
|
|
|
8
8
|
unless post.notifications_sent_at
|
|
9
|
-
post.
|
|
9
|
+
post.update(notifications_sent_at: Time.now)
|
|
10
10
|
|
|
11
11
|
post.site.active_email_subscriptions.each do |subscription|
|
|
12
12
|
mail = Storytime::SubscriptionMailer.new_post_email(post, subscription)
|
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
module Storytime
|
|
2
2
|
module PostUrlHandler
|
|
3
3
|
|
|
4
|
+
|
|
5
|
+
if Rails::VERSION::MAJOR > 6 || (Rails::VERSION::MAJOR == 6 && Rails::VERSION::MINOR >= 1)
|
|
6
|
+
def url_for(options, route_name = nil, url_strategy = ActionDispatch::Routing::RouteSet::UNKNOWN, method_name = nil, reserved = ActionDispatch::Routing::RouteSet::RESERVED_OPTIONS)
|
|
7
|
+
Storytime::PostUrlHandler.handle_url(options)
|
|
8
|
+
super(options, route_name, url_strategy, method_name, reserved)
|
|
9
|
+
end
|
|
10
|
+
elsif Rails::VERSION::MAJOR > 5 || (Rails::VERSION::MAJOR == 5 && Rails::VERSION::MINOR >= 1)
|
|
11
|
+
def url_for(options, route_name = nil, url_strategy = ActionDispatch::Routing::RouteSet::UNKNOWN)
|
|
12
|
+
Storytime::PostUrlHandler.handle_url(options)
|
|
13
|
+
super(options, route_name, url_strategy)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
4
17
|
def self.handle_url(options)
|
|
5
18
|
return unless options[:controller] == "storytime/posts" && options[:action] == "show"
|
|
6
19
|
|
|
@@ -15,7 +28,7 @@ module Storytime
|
|
|
15
28
|
when "default"
|
|
16
29
|
options[:component_1] = "posts"
|
|
17
30
|
options[:id] = post
|
|
18
|
-
when "day_and_name"
|
|
31
|
+
when "day_and_name"
|
|
19
32
|
date = post.created_at.to_date
|
|
20
33
|
options[:component_1] = date.strftime("%Y") # 4 digit year
|
|
21
34
|
options[:component_2] = date.strftime("%m") # 2 digit month
|
|
@@ -31,17 +44,17 @@ module Storytime
|
|
|
31
44
|
options[:id] = post.id
|
|
32
45
|
end
|
|
33
46
|
end
|
|
34
|
-
|
|
47
|
+
|
|
35
48
|
end
|
|
36
49
|
|
|
37
50
|
def self.site(options)
|
|
38
|
-
if Storytime::Site.current_id.present?
|
|
51
|
+
if Storytime::Site.current_id.present?
|
|
39
52
|
Storytime::Site.find(Storytime::Site.current_id)
|
|
40
53
|
elsif options[:host]
|
|
41
54
|
Storytime::Site.find_by!(custom_domain: options[:host])
|
|
42
55
|
end
|
|
43
56
|
end
|
|
44
|
-
|
|
57
|
+
|
|
45
58
|
|
|
46
59
|
end
|
|
47
|
-
end
|
|
60
|
+
end
|
|
@@ -10,5 +10,9 @@ module Storytime
|
|
|
10
10
|
|
|
11
11
|
render partial: "storytime/snippets/snippet", locals: {snippet: snippet}
|
|
12
12
|
end
|
|
13
|
+
|
|
14
|
+
def logged_in_storytime_user?
|
|
15
|
+
user_signed_in? && current_user.respond_to?(:storytime_user?) && current_user.storytime_user?(current_storytime_site)
|
|
16
|
+
end
|
|
13
17
|
end
|
|
14
18
|
end
|
data/lib/storytime/version.rb
CHANGED
data/lib/storytime.rb
CHANGED
|
@@ -62,7 +62,7 @@ module Storytime
|
|
|
62
62
|
attributes = Loofah::HTML5::WhiteList::ALLOWED_ATTRIBUTES
|
|
63
63
|
end
|
|
64
64
|
|
|
65
|
-
attributes
|
|
65
|
+
attributes += ["style", "data-toggle", "data-trigger", "data-placement", "data-html", "data-container", "data-content"]
|
|
66
66
|
|
|
67
67
|
white_list_sanitizer.sanitize(draft_content, tags: tags, attributes: attributes)
|
|
68
68
|
end
|
|
@@ -10,23 +10,22 @@ describe Storytime::DashboardController, type: :controller do
|
|
|
10
10
|
|
|
11
11
|
it "requires login" do
|
|
12
12
|
get :index
|
|
13
|
-
flash[:alert].
|
|
13
|
+
expect(flash[:alert]).to eq(I18n.t('devise.failure.unauthenticated'))
|
|
14
14
|
expect(response).to redirect_to(Rails.application.class.routes.url_helpers.new_user_session_path)
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
it "requires authorization" do
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
sign_in FactoryGirl.create(:writer)
|
|
18
|
+
FactoryBot.create(:site)
|
|
19
|
+
sign_in FactoryBot.create(:writer)
|
|
21
20
|
get :index
|
|
22
21
|
expect(flash[:error]).to eq("You are not authorized to perform this action.")
|
|
23
22
|
end
|
|
24
23
|
|
|
25
24
|
it "redirects to site setup if none exists" do
|
|
26
25
|
allow(Storytime::Site).to receive(:count).and_return(0)
|
|
27
|
-
sign_in
|
|
26
|
+
sign_in FactoryBot.create(:writer)
|
|
28
27
|
get :index
|
|
29
|
-
response.
|
|
28
|
+
expect(response).to redirect_to(new_dashboard_site_path)
|
|
30
29
|
end
|
|
31
30
|
end
|
|
32
31
|
end
|
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
default: &default
|
|
8
8
|
adapter: postgresql
|
|
9
9
|
encoding: unicode
|
|
10
|
-
host: localhost
|
|
10
|
+
host: <%= ENV.fetch('PGHOST', 'localhost') %>
|
|
11
11
|
pool: 5
|
|
12
|
-
username: <%= ENV['USER'] %>
|
|
13
|
-
password:
|
|
12
|
+
username: <%= ENV.fetch('PGUSER', ENV['USER']) %>
|
|
13
|
+
password: <%= ENV.fetch('PGPASSWORD', '') %>
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
development:
|
|
@@ -4,7 +4,7 @@ Devise.setup do |config|
|
|
|
4
4
|
# The secret key used by Devise. Devise uses this key to generate
|
|
5
5
|
# random tokens. Changing this key will render invalid all existing
|
|
6
6
|
# confirmation, reset password and unlock tokens in the database.
|
|
7
|
-
config.secret_key =
|
|
7
|
+
config.secret_key = ENV["SECRET_KEY_BASE"]
|
|
8
8
|
|
|
9
9
|
# ==> Mailer Configuration
|
|
10
10
|
# Configure the e-mail address which will be shown in Devise::Mailer,
|