storytime 2.1.5 → 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.
Files changed (236) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/test.yml +54 -0
  3. data/.gitignore +2 -1
  4. data/.ruby-version +1 -1
  5. data/.tool-versions +1 -0
  6. data/Gemfile +5 -3
  7. data/Gemfile.lock +414 -425
  8. data/Guardfile +1 -1
  9. data/app/assets/fonts/storytime-icons.eot +0 -0
  10. data/app/assets/fonts/storytime-icons.svg +23 -0
  11. data/app/assets/fonts/storytime-icons.ttf +0 -0
  12. data/app/assets/fonts/storytime-icons.woff +0 -0
  13. data/app/assets/javascripts/storytime/application.js +1 -8
  14. data/app/assets/javascripts/storytime/off_canvas.coffee +16 -0
  15. data/app/assets/javascripts/storytime/wysiwyg.js.coffee +9 -7
  16. data/app/assets/stylesheets/storytime/_buttons.scss +33 -0
  17. data/app/assets/stylesheets/storytime/_list-group.scss +1 -1
  18. data/app/assets/stylesheets/storytime/application.scss +14 -2
  19. data/app/assets/stylesheets/storytime/icons.scss +5 -5
  20. data/app/assets/stylesheets/storytime/leather/_buttons.scss +31 -0
  21. data/app/assets/stylesheets/storytime/leather/_devise.scss +72 -0
  22. data/app/assets/stylesheets/storytime/leather/_grid.scss +19 -0
  23. data/app/assets/stylesheets/storytime/leather/_list_groups.scss +33 -0
  24. data/app/assets/stylesheets/storytime/leather/_nav_menus.scss +125 -0
  25. data/app/assets/stylesheets/storytime/leather/_navbar_transparent.scss +23 -0
  26. data/app/assets/stylesheets/storytime/leather/_off_canvas.scss +109 -0
  27. data/app/assets/stylesheets/storytime/leather/_scroll_panels.scss +85 -0
  28. data/app/assets/stylesheets/storytime/leather/_toggle_columns.scss +23 -0
  29. data/app/assets/stylesheets/storytime/leather/_typography.scss +12 -0
  30. data/app/assets/stylesheets/storytime/leather/_utilities.scss +54 -0
  31. data/app/assets/stylesheets/storytime/leather/_variables.scss +8 -0
  32. data/app/assets/stylesheets/storytime/posts.scss +9 -1
  33. data/app/controllers/storytime/application_controller.rb +1 -1
  34. data/app/controllers/storytime/dashboard/blog_posts_controller.rb +5 -3
  35. data/app/controllers/storytime/dashboard/blogs_controller.rb +1 -1
  36. data/app/controllers/storytime/dashboard/media_controller.rb +4 -4
  37. data/app/controllers/storytime/dashboard/memberships_controller.rb +1 -1
  38. data/app/controllers/storytime/dashboard/pages_controller.rb +26 -6
  39. data/app/controllers/storytime/dashboard/posts_controller.rb +30 -5
  40. data/app/controllers/storytime/dashboard/subscriptions_controller.rb +1 -1
  41. data/app/controllers/storytime/pages_controller.rb +31 -1
  42. data/app/controllers/storytime/posts_controller.rb +1 -1
  43. data/app/controllers/storytime/subscriptions_controller.rb +5 -1
  44. data/app/helpers/storytime/application_helper.rb +0 -4
  45. data/app/models/concerns/storytime/post_featured_images.rb +2 -2
  46. data/app/models/concerns/storytime/post_partial_inheritance.rb +2 -2
  47. data/app/models/storytime/autosave.rb +1 -1
  48. data/app/models/storytime/comment.rb +1 -1
  49. data/app/models/storytime/media.rb +1 -1
  50. data/app/models/storytime/membership.rb +2 -2
  51. data/app/models/storytime/post.rb +7 -3
  52. data/app/models/storytime/site.rb +4 -6
  53. data/app/models/storytime/snippet.rb +12 -1
  54. data/app/models/storytime/subscription.rb +2 -2
  55. data/app/models/storytime/version.rb +1 -1
  56. data/app/policies/storytime/post_policy.rb +1 -1
  57. data/app/views/storytime/dashboard/_navigation.html.erb +0 -9
  58. data/app/views/storytime/dashboard/blog_posts/_form.html.erb +5 -1
  59. data/app/views/storytime/dashboard/blogs/edit.json.jbuilder +1 -1
  60. data/app/views/storytime/dashboard/blogs/index.json.jbuilder +1 -1
  61. data/app/views/storytime/dashboard/blogs/new.json.jbuilder +1 -1
  62. data/app/views/storytime/dashboard/media/_gallery.html.erb +1 -1
  63. data/app/views/storytime/dashboard/media/_modal.html.erb +2 -2
  64. data/app/views/storytime/dashboard/media/show.json.jbuilder +1 -1
  65. data/app/views/storytime/dashboard/memberships/_edit.html.erb +1 -1
  66. data/app/views/storytime/dashboard/memberships/_index.html.erb +3 -3
  67. data/app/views/storytime/dashboard/memberships/_new.html.erb +1 -1
  68. data/app/views/storytime/dashboard/memberships/edit.json.jbuilder +1 -1
  69. data/app/views/storytime/dashboard/memberships/index.json.jbuilder +1 -1
  70. data/app/views/storytime/dashboard/memberships/new.json.jbuilder +1 -1
  71. data/app/views/storytime/dashboard/memberships/save.json.jbuilder +1 -1
  72. data/app/views/storytime/dashboard/pages/_form.html.erb +1 -1
  73. data/app/views/storytime/dashboard/posts/_directory.html.erb +18 -0
  74. data/app/views/storytime/dashboard/posts/_form.html.erb +1 -1
  75. data/app/views/storytime/dashboard/posts/_list.html.erb +2 -26
  76. data/app/views/storytime/dashboard/posts/_new_button.html.erb +1 -1
  77. data/app/views/storytime/dashboard/posts/_post.html.erb +28 -0
  78. data/app/views/storytime/dashboard/posts/_sorts.html.erb +21 -0
  79. data/app/views/storytime/dashboard/posts/index.html.erb +5 -3
  80. data/app/views/storytime/dashboard/roles/_form.html.erb +1 -1
  81. data/app/views/storytime/dashboard/roles/edit.json.jbuilder +1 -1
  82. data/app/views/storytime/dashboard/sites/_form.html.erb +1 -1
  83. data/app/views/storytime/dashboard/sites/site.json.jbuilder +1 -1
  84. data/app/views/storytime/dashboard/snippets/_index.html.erb +1 -1
  85. data/app/views/storytime/dashboard/snippets/edit.json.jbuilder +1 -1
  86. data/app/views/storytime/dashboard/snippets/index.json.jbuilder +1 -1
  87. data/app/views/storytime/dashboard/snippets/new.json.jbuilder +1 -1
  88. data/app/views/storytime/dashboard/subscriptions/_form.html.erb +1 -1
  89. data/app/views/storytime/dashboard/subscriptions/_index.html.erb +2 -2
  90. data/app/views/storytime/dashboard/subscriptions/form.json.jbuilder +1 -1
  91. data/app/views/storytime/dashboard/subscriptions/index.json.jbuilder +1 -1
  92. data/app/views/storytime/dashboard/versions/_versions_info.html.erb +1 -1
  93. data/app/views/storytime/posts/show.html.erb +6 -0
  94. data/app/views/storytime/sites/_google_analytics_code.html.erb +5 -8
  95. data/config/initializers/assets.rb +2 -1
  96. data/config/initializers/friendly_id.rb +1 -1
  97. data/config/initializers/url_for_patch.rb +19 -8
  98. data/config/locales/devise.zh-CN.yml +59 -0
  99. data/config/locales/kaminari.zh-CN.yml +17 -0
  100. data/config/locales/simple_form.zh-CN.yml +26 -0
  101. data/config/locales/zh-CN.yml +141 -0
  102. data/config/routes.rb +2 -4
  103. data/db/migrate/20140501174341_create_storytime_posts.rb +1 -1
  104. data/db/migrate/20140509191309_create_friendly_id_slugs.rb +1 -1
  105. data/db/migrate/20140511200849_create_storytime_media.rb +1 -1
  106. data/db/migrate/20140513161233_create_storytime_sites.rb +1 -1
  107. data/db/migrate/20140514200234_create_storytime_tags.rb +1 -1
  108. data/db/migrate/20140514200304_create_storytime_taggings.rb +1 -1
  109. data/db/migrate/20140516141252_create_storytime_versions.rb +1 -1
  110. data/db/migrate/20140521190606_create_storytime_roles.rb +1 -1
  111. data/db/migrate/20140521191048_add_storytime_role_id_to_users.rb +1 -1
  112. data/db/migrate/20140521191728_create_storytime_permissions.rb +1 -1
  113. data/db/migrate/20140521191744_create_storytime_actions.rb +1 -1
  114. data/db/migrate/20140813014447_create_storytime_comments.rb +1 -1
  115. data/db/migrate/20140813130534_add_storytime_name_to_users.rb +1 -1
  116. data/db/migrate/20140916183056_create_storytime_autosaves.rb +1 -1
  117. data/db/migrate/20141020213343_add_secondary_media_id_to_storytime_post.rb +1 -1
  118. data/db/migrate/20141021073356_create_storytime_snippets.rb +1 -1
  119. data/db/migrate/20141111164439_create_storytime_subscriptions.rb +1 -1
  120. data/db/migrate/20150122200805_add_title_and_content_index_to_storytime_post.rb +1 -1
  121. data/db/migrate/20150128185746_seed_new_actions_and_permissions.rb +1 -1
  122. data/db/migrate/20150129215308_add_site_id_to_storytime_subscription.rb +1 -1
  123. data/db/migrate/20150206201847_add_site_id_to_storytime_post.rb +1 -1
  124. data/db/migrate/20150206201919_add_site_id_to_storytime_snippet.rb +1 -1
  125. data/db/migrate/20150206201931_add_site_id_to_storytime_tag.rb +1 -1
  126. data/db/migrate/20150206205256_add_notification_fields_to_storytime_post.rb +1 -1
  127. data/db/migrate/20150216211257_add_subdomain_to_storytime_sites.rb +1 -1
  128. data/db/migrate/20150216225045_add_site_to_storytime_media.rb +1 -1
  129. data/db/migrate/20150219210528_remove_root_page_content_from_storytime_sites.rb +1 -1
  130. data/db/migrate/20150220184902_add_blog_id_to_posts.rb +1 -1
  131. data/db/migrate/20150224192138_add_homepage_path_to_storytime_sites.rb +1 -1
  132. data/db/migrate/20150224193151_add_subscription_email_from_to_storytime_sites.rb +1 -1
  133. data/db/migrate/20150224193551_add_layout_to_storytime_sites.rb +1 -1
  134. data/db/migrate/20150224194559_add_disqus_forum_shortname_to_storytime_sites.rb +1 -1
  135. data/db/migrate/20150224212453_remove_homepage_path_from_storytime_sites.rb +1 -1
  136. data/db/migrate/20150225143516_add_site_id_to_storytime_autosaves.rb +1 -1
  137. data/db/migrate/20150225143826_add_site_id_to_storytime_comments.rb +1 -1
  138. data/db/migrate/20150225145119_add_site_id_to_storytime_versions.rb +1 -1
  139. data/db/migrate/20150225145316_add_site_id_to_storytime_taggings.rb +1 -1
  140. data/db/migrate/20150225145608_update_storytime_site_id_columns.rb +1 -1
  141. data/db/migrate/20150225164232_add_site_id_to_storytime_permissions.rb +1 -1
  142. data/db/migrate/20150225212917_create_storytime_memberships.rb +1 -1
  143. data/db/migrate/20150225213535_create_memberships_for_storytime_users.rb +1 -1
  144. data/db/migrate/20150226201739_add_custom_domain_to_storytime_sites.rb +1 -1
  145. data/db/migrate/20150302171500_add_site_id_to_storytime_media.rb +1 -1
  146. data/db/migrate/20150302171722_set_site_layout.rb +1 -1
  147. data/db/migrate/20150302185138_remove_storytime_role_id_from_users.rb +1 -1
  148. data/db/migrate/20150302192525_transfer_posts_to_blogs.rb +1 -1
  149. data/db/migrate/20150302192759_seed_permissions.rb +1 -1
  150. data/db/migrate/20150331162329_add_discourse_name_to_storytime_sites.rb +1 -1
  151. data/db/migrate/20150402161427_remove_subdomain_from_storytime_site.rb +1 -1
  152. data/db/migrate/20150520181115_create_storytime_navigations.rb +1 -1
  153. data/db/migrate/20150520185227_create_storytime_links.rb +1 -1
  154. data/db/migrate/20150520190700_add_position_to_storytime_links.rb +1 -1
  155. data/db/migrate/20150529192058_add_url_to_storytime_links.rb +1 -1
  156. data/db/migrate/20260408001637_add_canonical_url_to_storytime_posts.rb +5 -0
  157. data/db/migrate/20260701000000_sanitize_existing_storytime_snippets.rb +22 -0
  158. data/lib/storytime/cli/install.rb +2 -20
  159. data/lib/storytime/concerns/action_controller_extension.rb +36 -0
  160. data/lib/storytime/constraints/page_constraint.rb +8 -2
  161. data/lib/storytime/engine.rb +4 -5
  162. data/lib/storytime/migrators/v1.rb +3 -3
  163. data/lib/storytime/post_notifier.rb +1 -1
  164. data/lib/storytime/post_url_handler.rb +18 -5
  165. data/lib/storytime/storytime_helpers.rb +4 -0
  166. data/lib/storytime/version.rb +1 -1
  167. data/lib/storytime.rb +1 -1
  168. data/spec/controllers/dashboard_controller_spec.rb +5 -6
  169. data/spec/dummy/app/assets/config/manifest.js +3 -0
  170. data/spec/dummy/config/database.yml +3 -3
  171. data/spec/dummy/config/initializers/devise.rb +1 -1
  172. data/spec/dummy/db/migrate/20140530185250_devise_create_users.rb +1 -1
  173. data/spec/dummy/db/migrate/20150127172846_create_widgets.rb +1 -1
  174. data/spec/dummy/db/migrate/20150206203824_add_video_url_to_storytime_posts.rb +1 -1
  175. data/spec/dummy/db/schema.rb +226 -244
  176. data/spec/factories/action_factories.rb +3 -3
  177. data/spec/factories/comment_factories.rb +1 -1
  178. data/spec/factories/media_factories.rb +1 -1
  179. data/spec/factories/membership_factories.rb +1 -1
  180. data/spec/factories/navigation_factories.rb +3 -3
  181. data/spec/factories/permission_factories.rb +1 -1
  182. data/spec/factories/post_factories.rb +2 -2
  183. data/spec/factories/role_factories.rb +11 -11
  184. data/spec/factories/site_factories.rb +3 -3
  185. data/spec/factories/snippet_factories.rb +1 -1
  186. data/spec/factories/subscription_factories.rb +1 -1
  187. data/spec/factories/user_factories.rb +2 -2
  188. data/spec/factories/widget_factories.rb +2 -2
  189. data/spec/features/blogs_spec.rb +7 -7
  190. data/spec/features/comments_spec.rb +11 -11
  191. data/spec/features/dashboard/media_spec.rb +17 -11
  192. data/spec/features/dashboard/memberships_spec.rb +13 -19
  193. data/spec/features/dashboard/navigations_spec.rb +1 -1
  194. data/spec/features/dashboard/pages_spec.rb +8 -8
  195. data/spec/features/dashboard/posts_spec.rb +19 -19
  196. data/spec/features/dashboard/sites_spec.rb +1 -1
  197. data/spec/features/dashboard/snippets_spec.rb +3 -3
  198. data/spec/features/dashboard/subscription_spec.rb +2 -2
  199. data/spec/features/pages_spec.rb +3 -3
  200. data/spec/features/posts_spec.rb +2 -2
  201. data/spec/features/subscription_spec.rb +3 -3
  202. data/spec/importers/wordpress_spec.rb +1 -1
  203. data/spec/lib/mysql_fulltext_search_adapter_spec.rb +3 -3
  204. data/spec/lib/mysql_search_adapter_spec.rb +3 -3
  205. data/spec/lib/postgres_search_adapter_spec.rb +3 -3
  206. data/spec/lib/sqlite3_search_adapter_spec.rb +3 -3
  207. data/spec/lib/storytime/constraints/page_constraint_spec.rb +40 -0
  208. data/spec/lib/storytime_helpers_spec.rb +2 -2
  209. data/spec/models/navigation_spec.rb +3 -3
  210. data/spec/models/post_spec.rb +29 -29
  211. data/spec/models/snippet_spec.rb +31 -0
  212. data/spec/models/subscription_spec.rb +4 -4
  213. data/spec/models/tagging_spec.rb +14 -14
  214. data/spec/models/version_spec.rb +29 -29
  215. data/spec/policies/comment_policy_spec.rb +11 -11
  216. data/spec/policies/post_policy_spec.rb +13 -13
  217. data/spec/requests/pages_spec.rb +37 -0
  218. data/spec/requests/routings_spec.rb +14 -15
  219. data/spec/spec_helper.rb +8 -15
  220. data/spec/support/domains.rb +2 -2
  221. data/spec/support/feature_macros.rb +5 -5
  222. data/spec/support/pundit_matcher.rb +3 -3
  223. data/storytime.gemspec +15 -20
  224. data/vendor/assets/javascripts/codemirror/addons/edit/closebrackets.js +195 -0
  225. data/vendor/assets/javascripts/codemirror/addons/edit/closetag.js +169 -0
  226. data/vendor/assets/javascripts/codemirror/addons/fold/xml-fold.js +182 -0
  227. data/vendor/assets/javascripts/codemirror.js +8922 -0
  228. data/vendor/assets/javascripts/medium-editor.min.js +3 -3
  229. data/vendor/assets/stylesheets/codemirror/themes/solarized.css +169 -0
  230. data/vendor/assets/stylesheets/codemirror.css +347 -0
  231. metadata +94 -134
  232. data/config/initializers/storytime_admin.rb +0 -5
  233. data/config/spring.rb +0 -1
  234. data/spec/dummy/app/controllers/storytime_admin/widgets_controller.rb +0 -5
  235. data/spec/dummy/db/development.sqlite3 +0 -0
  236. 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?(request.params[:id]) ||
9
- File.exists?(Rails.root.join('app', 'views', "storytime/#{site.custom_view_path}/pages/#{ActionController::Base.helpers.sanitize(request.params[:id])}.html.erb"))
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
@@ -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,
@@ -77,6 +75,7 @@ module Storytime
77
75
  config.fog_directory = Storytime.s3_bucket
78
76
  config.fog_public = true
79
77
  config.fog_attributes = {'Cache-Control'=>'max-age=315576000'}
78
+ config.storage = :fog
80
79
  else
81
80
  config.storage = :file
82
81
  end
@@ -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.update_attributes(site_id: site.id)
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.update_attributes(site_id: site.id)
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.update_attributes(site_id: site.id)
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.update_attributes(notifications_sent_at: Time.now)
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
@@ -1,3 +1,3 @@
1
1
  module Storytime
2
- VERSION = "2.1.5"
2
+ VERSION = "2.1.7"
3
3
  end
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 << "style"
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].should == I18n.t('devise.failure.unauthenticated')
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
- controller.view_paths.unshift(ActionView::FixtureResolver.new("widgets/index.html.erb" => ""))
19
- FactoryGirl.create(:site)
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 FactoryGirl.create(:writer)
26
+ sign_in FactoryBot.create(:writer)
28
27
  get :index
29
- response.should redirect_to(new_dashboard_site_path)
28
+ expect(response).to redirect_to(new_dashboard_site_path)
30
29
  end
31
30
  end
32
31
  end
@@ -0,0 +1,3 @@
1
+ //= link_tree ../images
2
+ //= link_directory ../javascripts .js
3
+ //= link_directory ../stylesheets .css
@@ -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 = Rails.application.secrets.secret_key_base
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,
@@ -1,4 +1,4 @@
1
- class DeviseCreateUsers < ActiveRecord::Migration
1
+ class DeviseCreateUsers < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  create_table(:users) do |t|
4
4
  ## Database authenticatable
@@ -1,4 +1,4 @@
1
- class CreateWidgets < ActiveRecord::Migration
1
+ class CreateWidgets < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  create_table :widgets do |t|
4
4
  t.string :name
@@ -1,4 +1,4 @@
1
- class AddVideoUrlToStorytimePosts < ActiveRecord::Migration
1
+ class AddVideoUrlToStorytimePosts < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_column :storytime_posts, :video_url, :string
4
4
  end