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,141 @@
1
+ zh-CN:
2
+ common:
3
+ are_you_sure_you_want_to_delete: "你确定要删除 %{resource_name}?"
4
+
5
+ flash:
6
+ admin:
7
+ create:
8
+ success: "成功创建 %{resource_name} 。"
9
+ update:
10
+ success: "成功更新 %{resource_name} 。"
11
+ blogs:
12
+ destroy:
13
+ success: "成功删除博客。"
14
+ comments:
15
+ create:
16
+ success: "成功创建留言。"
17
+ update:
18
+ success: "成功更新留言。"
19
+ posts:
20
+ create:
21
+ success: "成功创建文章。"
22
+ update:
23
+ success: "成功更新文章。"
24
+ destroy:
25
+ success: "成功删除文章。"
26
+ sites:
27
+ create:
28
+ success: "成功创建站点。"
29
+ update:
30
+ success: "成功更新站点。"
31
+ destroy:
32
+ success: "成功删除站点。"
33
+ snippets:
34
+ create:
35
+ success: "成功创建文字段落。"
36
+ update:
37
+ success: "成功更新文字段落。"
38
+ destroy:
39
+ success: "成功删除文字段落。"
40
+ subscriptions:
41
+ create:
42
+ success: "已成功创建订阅。"
43
+ fail: "不能创建订阅。"
44
+ update:
45
+ success: "成功更新订阅。"
46
+ destroy:
47
+ success: >
48
+ 你已经被成功的从订阅列表中移除。你不会再收到我们的消息。
49
+ fail: "无法取消你的邮件订阅。"
50
+ users:
51
+ create:
52
+ success: "成功创建用户。"
53
+ update:
54
+ success: "成功更新用户。"
55
+ roles:
56
+ update:
57
+ success: "成功更新权限。"
58
+ navigations:
59
+ destroy:
60
+ success: "成功删除导航列表。"
61
+
62
+ simple_form:
63
+ labels:
64
+ site:
65
+ post_slug_style: "文章地址类型"
66
+ ga_tracking_id: "Google Analytics 追踪 ID"
67
+ comment:
68
+ content: "内容留言"
69
+ user:
70
+ storytime_name: "名字"
71
+
72
+ footer:
73
+ attribute: '由 <a href="http://www.github.com/FlyoverWorks/storytime" target="_blank">Storytime</a>支持。'
74
+
75
+ dashboard:
76
+ admin:
77
+ unconfigured_model: "你在试图访问一个包含未在Storytime中配置模型的管理员页面。"
78
+ sites:
79
+ new: "设置你的站点"
80
+ root_post_id_label: "首页"
81
+ root_post_id_hint: "选择一个页面或博客在Storytime的位置显示。留空来使用应用程序试图。"
82
+ subscription_email_from_label: "订阅邮件发件人的电子邮件"
83
+ edit: "站点设置"
84
+ basic_info: "基本信息"
85
+ permissions: "权限"
86
+ save_permissions: "保存"
87
+ save_button: "保存"
88
+ layout_hint: "留空使用Storytime默认站点布局"
89
+ domain_hint: "输入你的站点域名 (例如 www.example.com)"
90
+ users:
91
+ users_header: "用户"
92
+ create_new_user: "新建"
93
+ edit_user_button: "编辑"
94
+ edit_user_header: "编辑用户"
95
+ email: "电子邮件"
96
+ name: "名字"
97
+ role: "角色"
98
+ actions: "操作"
99
+ media:
100
+ media_header: "媒体"
101
+ select_media: "选择媒体"
102
+ select_media_by_url: "按照网址:"
103
+ select_media_from_file: "选择"
104
+ posts:
105
+ autosaves:
106
+ available: "有一个自动保存的 %{resource} 比下面的版本要新。"
107
+ view_autosave: "查看自动保存"
108
+ select_or_create: "选择一个资源 %{resource} 进行编辑"
109
+ create_post: "新建一个"
110
+ additional_fields: "附加字段"
111
+ advanced_settings: "高级设置"
112
+ featured_images: "特色图片"
113
+ remove_image: "删除图片"
114
+ new:
115
+ header: "新 %{resource}"
116
+ navigations:
117
+ create:
118
+ success: "你的导航列表成功创建。"
119
+ update:
120
+ success: "你的导航列表成功更新。"
121
+
122
+ layout:
123
+ title: "Storytime"
124
+ subscribe_to: "订阅 %{site_name}"
125
+ subscribe_modal_msg: "订阅我们的邮件列表收到关于 %{site_name} 的最新消息!"
126
+
127
+ pagination:
128
+ first: "<i class='fa fa-caret-left'></i><i class='fa fa-caret-left'></i>"
129
+ previous: "<i class='fa fa-caret-left'></i>"
130
+ next: "<i class='fa fa-caret-right'></i>"
131
+ last: "<i class='fa fa-caret-right'></i><i class='fa fa-caret-right'></i>"
132
+
133
+ storytime:
134
+ dashboard:
135
+ navigations:
136
+ index:
137
+ header: "导航列表"
138
+ new:
139
+ header: "新建导航列表"
140
+ edit:
141
+ header: "编辑导航列表"
data/config/routes.rb CHANGED
@@ -49,18 +49,16 @@ Storytime::Engine.routes.draw do
49
49
  end
50
50
  end
51
51
 
52
- mount StorytimeAdmin::Engine => Storytime.dashboard_namespace_path
53
-
54
52
  get "/", to: "blog_homepage#show", constraints: Storytime::Constraints::BlogHomepageConstraint.new
55
53
  get "/", to: "homepage#show", constraints: Storytime::Constraints::PageHomepageConstraint.new
56
54
 
57
55
  resources :blogs, only: :show, path: "/", constraints: Storytime::Constraints::BlogConstraint.new
58
- get '/*id', to: 'pages#show', constraints: Storytime::Constraints::PageConstraint.new
56
+ get '/*id', to: 'pages#show', as: :page, constraints: Storytime::Constraints::PageConstraint.new
59
57
  resources :posts, only: [], concerns: :commentable
60
58
 
61
59
  Storytime.post_types.each do |post_type|
62
60
  constraints ->(request){ request.params[:component_1] != "assets" } do
63
- resources post_type.split("::").last.tableize, path: "(/:component_1(/:component_2(/:component_3)))/", only: :show, controller: "posts"
61
+ resources post_type.split("::").last.tableize.to_sym, path: "(/:component_1(/:component_2(/:component_3)))/", only: :show, controller: "posts"
64
62
  end
65
63
  end
66
64
 
@@ -1,4 +1,4 @@
1
- class CreateStorytimePosts < ActiveRecord::Migration
1
+ class CreateStorytimePosts < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  create_table :storytime_posts do |t|
4
4
  t.references :user, index: true
@@ -1,4 +1,4 @@
1
- class CreateFriendlyIdSlugs < ActiveRecord::Migration
1
+ class CreateFriendlyIdSlugs < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  create_table :friendly_id_slugs do |t|
4
4
  t.string :slug, :null => false
@@ -1,4 +1,4 @@
1
- class CreateStorytimeMedia < ActiveRecord::Migration
1
+ class CreateStorytimeMedia < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  create_table :storytime_media do |t|
4
4
  t.string :file
@@ -1,4 +1,4 @@
1
- class CreateStorytimeSites < ActiveRecord::Migration
1
+ class CreateStorytimeSites < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  create_table :storytime_sites do |t|
4
4
  t.string :title
@@ -1,4 +1,4 @@
1
- class CreateStorytimeTags < ActiveRecord::Migration
1
+ class CreateStorytimeTags < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  create_table :storytime_tags do |t|
4
4
  t.string :name
@@ -1,4 +1,4 @@
1
- class CreateStorytimeTaggings < ActiveRecord::Migration
1
+ class CreateStorytimeTaggings < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  create_table :storytime_taggings do |t|
4
4
  t.belongs_to :tag, index: true
@@ -1,4 +1,4 @@
1
- class CreateStorytimeVersions < ActiveRecord::Migration
1
+ class CreateStorytimeVersions < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  create_table :storytime_versions do |t|
4
4
  t.text :content
@@ -1,4 +1,4 @@
1
- class CreateStorytimeRoles < ActiveRecord::Migration
1
+ class CreateStorytimeRoles < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  create_table :storytime_roles do |t|
4
4
  t.string :name, index: true
@@ -1,4 +1,4 @@
1
- class AddStorytimeRoleIdToUsers < ActiveRecord::Migration
1
+ class AddStorytimeRoleIdToUsers < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_column Storytime.user_class.table_name.to_sym, :storytime_role_id, :integer
4
4
  add_index Storytime.user_class.table_name.to_sym, :storytime_role_id
@@ -1,4 +1,4 @@
1
- class CreateStorytimePermissions < ActiveRecord::Migration
1
+ class CreateStorytimePermissions < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  create_table :storytime_permissions do |t|
4
4
  t.belongs_to :role, index: true
@@ -1,4 +1,4 @@
1
- class CreateStorytimeActions < ActiveRecord::Migration
1
+ class CreateStorytimeActions < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  create_table :storytime_actions do |t|
4
4
  t.string :name
@@ -1,4 +1,4 @@
1
- class CreateStorytimeComments < ActiveRecord::Migration
1
+ class CreateStorytimeComments < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  create_table :storytime_comments do |t|
4
4
  t.text :content
@@ -1,4 +1,4 @@
1
- class AddStorytimeNameToUsers < ActiveRecord::Migration
1
+ class AddStorytimeNameToUsers < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_column Storytime.user_class.table_name.to_sym, :storytime_name, :string
4
4
  end
@@ -1,4 +1,4 @@
1
- class CreateStorytimeAutosaves < ActiveRecord::Migration
1
+ class CreateStorytimeAutosaves < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  create_table :storytime_autosaves do |t|
4
4
  t.text :content
@@ -1,4 +1,4 @@
1
- class AddSecondaryMediaIdToStorytimePost < ActiveRecord::Migration
1
+ class AddSecondaryMediaIdToStorytimePost < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_reference :storytime_posts, :secondary_media
4
4
  end
@@ -1,4 +1,4 @@
1
- class CreateStorytimeSnippets < ActiveRecord::Migration
1
+ class CreateStorytimeSnippets < ActiveRecord::Migration[4.2]
2
2
  def up
3
3
  create_table :storytime_snippets do |t|
4
4
  t.string :name, index: true
@@ -1,4 +1,4 @@
1
- class CreateStorytimeSubscriptions < ActiveRecord::Migration
1
+ class CreateStorytimeSubscriptions < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  create_table :storytime_subscriptions do |t|
4
4
  t.string :email
@@ -1,4 +1,4 @@
1
- class AddTitleAndContentIndexToStorytimePost < ActiveRecord::Migration
1
+ class AddTitleAndContentIndexToStorytimePost < ActiveRecord::Migration[4.2]
2
2
  def up
3
3
  if Storytime.search_adapter == Storytime::PostgresSearchAdapter
4
4
  execute "CREATE INDEX posts_title_contentx ON storytime_posts USING gin(to_tsvector('english', coalesce(title, '') || ' ' || coalesce(content, '')));"
@@ -1,4 +1,4 @@
1
- class SeedNewActionsAndPermissions < ActiveRecord::Migration
1
+ class SeedNewActionsAndPermissions < ActiveRecord::Migration[4.2]
2
2
  def up
3
3
  Storytime::Action.seed
4
4
  Storytime::Permission.seed
@@ -1,4 +1,4 @@
1
- class AddSiteIdToStorytimeSubscription < ActiveRecord::Migration
1
+ class AddSiteIdToStorytimeSubscription < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_column :storytime_subscriptions, :site_id, :integer
4
4
  end
@@ -1,4 +1,4 @@
1
- class AddSiteIdToStorytimePost < ActiveRecord::Migration
1
+ class AddSiteIdToStorytimePost < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_column :storytime_posts, :site_id, :integer
4
4
 
@@ -1,4 +1,4 @@
1
- class AddSiteIdToStorytimeSnippet < ActiveRecord::Migration
1
+ class AddSiteIdToStorytimeSnippet < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_column :storytime_snippets, :site_id, :integer
4
4
 
@@ -1,4 +1,4 @@
1
- class AddSiteIdToStorytimeTag < ActiveRecord::Migration
1
+ class AddSiteIdToStorytimeTag < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_column :storytime_tags, :site_id, :integer
4
4
 
@@ -1,4 +1,4 @@
1
- class AddNotificationFieldsToStorytimePost < ActiveRecord::Migration
1
+ class AddNotificationFieldsToStorytimePost < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_column :storytime_posts, :notifications_enabled, :boolean, default: false
4
4
  add_column :storytime_posts, :notifications_sent_at, :datetime
@@ -1,4 +1,4 @@
1
- class AddSubdomainToStorytimeSites < ActiveRecord::Migration
1
+ class AddSubdomainToStorytimeSites < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_column :storytime_sites, :subdomain, :string
4
4
  end
@@ -1,4 +1,4 @@
1
- class AddSiteToStorytimeMedia < ActiveRecord::Migration
1
+ class AddSiteToStorytimeMedia < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_column :storytime_media, :site_id, :integer
4
4
  add_index :storytime_media, :site_id
@@ -1,4 +1,4 @@
1
- class RemoveRootPageContentFromStorytimeSites < ActiveRecord::Migration
1
+ class RemoveRootPageContentFromStorytimeSites < ActiveRecord::Migration[4.2]
2
2
  def up
3
3
  Storytime::Migrators::V1.create_default_blog_for_sites
4
4
 
@@ -1,4 +1,4 @@
1
- class AddBlogIdToPosts < ActiveRecord::Migration
1
+ class AddBlogIdToPosts < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_column :storytime_posts, :blog_id, :integer
4
4
  add_index :storytime_posts, :blog_id
@@ -1,4 +1,4 @@
1
- class AddHomepagePathToStorytimeSites < ActiveRecord::Migration
1
+ class AddHomepagePathToStorytimeSites < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_column :storytime_sites, :homepage_path, :string
4
4
  end
@@ -1,4 +1,4 @@
1
- class AddSubscriptionEmailFromToStorytimeSites < ActiveRecord::Migration
1
+ class AddSubscriptionEmailFromToStorytimeSites < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_column :storytime_sites, :subscription_email_from, :string
4
4
  end
@@ -1,4 +1,4 @@
1
- class AddLayoutToStorytimeSites < ActiveRecord::Migration
1
+ class AddLayoutToStorytimeSites < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_column :storytime_sites, :layout, :string
4
4
  end
@@ -1,4 +1,4 @@
1
- class AddDisqusForumShortnameToStorytimeSites < ActiveRecord::Migration
1
+ class AddDisqusForumShortnameToStorytimeSites < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_column :storytime_sites, :disqus_forum_shortname, :string
4
4
  end
@@ -1,4 +1,4 @@
1
- class RemoveHomepagePathFromStorytimeSites < ActiveRecord::Migration
1
+ class RemoveHomepagePathFromStorytimeSites < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  remove_column :storytime_sites, :homepage_path
4
4
  end
@@ -1,4 +1,4 @@
1
- class AddSiteIdToStorytimeAutosaves < ActiveRecord::Migration
1
+ class AddSiteIdToStorytimeAutosaves < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_column :storytime_autosaves, :site_id, :integer
4
4
  add_index :storytime_autosaves, :site_id
@@ -1,4 +1,4 @@
1
- class AddSiteIdToStorytimeComments < ActiveRecord::Migration
1
+ class AddSiteIdToStorytimeComments < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_column :storytime_comments, :site_id, :integer
4
4
  add_index :storytime_comments, :site_id
@@ -1,4 +1,4 @@
1
- class AddSiteIdToStorytimeVersions < ActiveRecord::Migration
1
+ class AddSiteIdToStorytimeVersions < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_column :storytime_versions, :site_id, :integer
4
4
  add_index :storytime_versions, :site_id
@@ -1,4 +1,4 @@
1
- class AddSiteIdToStorytimeTaggings < ActiveRecord::Migration
1
+ class AddSiteIdToStorytimeTaggings < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_column :storytime_taggings, :site_id, :integer
4
4
  add_index :storytime_taggings, :site_id
@@ -1,4 +1,4 @@
1
- class UpdateStorytimeSiteIdColumns < ActiveRecord::Migration
1
+ class UpdateStorytimeSiteIdColumns < ActiveRecord::Migration[4.2]
2
2
  def up
3
3
  Storytime::Migrators::V1.add_site_id_to_autosaves
4
4
  Storytime::Migrators::V1.add_site_id_to_comments
@@ -1,4 +1,4 @@
1
- class AddSiteIdToStorytimePermissions < ActiveRecord::Migration
1
+ class AddSiteIdToStorytimePermissions < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_column :storytime_permissions, :site_id, :integer
4
4
  add_index :storytime_permissions, :site_id
@@ -1,4 +1,4 @@
1
- class CreateStorytimeMemberships < ActiveRecord::Migration
1
+ class CreateStorytimeMemberships < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  create_table :storytime_memberships do |t|
4
4
  t.references :user, index: true
@@ -1,4 +1,4 @@
1
- class CreateMembershipsForStorytimeUsers < ActiveRecord::Migration
1
+ class CreateMembershipsForStorytimeUsers < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_column :storytime_sites, :user_id, :integer
4
4
  add_index :storytime_sites, :user_id
@@ -1,4 +1,4 @@
1
- class AddCustomDomainToStorytimeSites < ActiveRecord::Migration
1
+ class AddCustomDomainToStorytimeSites < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_column :storytime_sites, :custom_domain, :string
4
4
  end
@@ -1,4 +1,4 @@
1
- class AddSiteIdToStorytimeMedia < ActiveRecord::Migration
1
+ class AddSiteIdToStorytimeMedia < ActiveRecord::Migration[4.2]
2
2
  def up
3
3
  Storytime::Migrators::V1.add_site_id_to_media
4
4
  end
@@ -1,4 +1,4 @@
1
- class SetSiteLayout < ActiveRecord::Migration
1
+ class SetSiteLayout < ActiveRecord::Migration[4.2]
2
2
  def up
3
3
  Storytime::Migrators::V1.set_site_layout
4
4
  end
@@ -1,4 +1,4 @@
1
- class RemoveStorytimeRoleIdFromUsers < ActiveRecord::Migration
1
+ class RemoveStorytimeRoleIdFromUsers < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  remove_column Storytime.user_class.table_name.to_sym, :storytime_role_id
4
4
  end
@@ -1,4 +1,4 @@
1
- class TransferPostsToBlogs < ActiveRecord::Migration
1
+ class TransferPostsToBlogs < ActiveRecord::Migration[4.2]
2
2
  def up
3
3
  Storytime::Migrators::V1.transfer_posts_to_blogs
4
4
  end
@@ -1,4 +1,4 @@
1
- class SeedPermissions < ActiveRecord::Migration
1
+ class SeedPermissions < ActiveRecord::Migration[4.2]
2
2
  def up
3
3
  Storytime::Permission.reset_column_information
4
4
  Storytime::Permission.seed
@@ -1,4 +1,4 @@
1
- class AddDiscourseNameToStorytimeSites < ActiveRecord::Migration
1
+ class AddDiscourseNameToStorytimeSites < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_column :storytime_sites, :discourse_name, :string
4
4
  end
@@ -1,4 +1,4 @@
1
- class RemoveSubdomainFromStorytimeSite < ActiveRecord::Migration
1
+ class RemoveSubdomainFromStorytimeSite < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  remove_column :storytime_sites, :subdomain, :string
4
4
  end
@@ -1,4 +1,4 @@
1
- class CreateStorytimeNavigations < ActiveRecord::Migration
1
+ class CreateStorytimeNavigations < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  create_table :storytime_navigations do |t|
4
4
  t.string :name
@@ -1,4 +1,4 @@
1
- class CreateStorytimeLinks < ActiveRecord::Migration
1
+ class CreateStorytimeLinks < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  create_table :storytime_links do |t|
4
4
  t.string :text
@@ -1,4 +1,4 @@
1
- class AddPositionToStorytimeLinks < ActiveRecord::Migration
1
+ class AddPositionToStorytimeLinks < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_column :storytime_links, :position, :integer
4
4
  add_index :storytime_links, :position
@@ -1,4 +1,4 @@
1
- class AddUrlToStorytimeLinks < ActiveRecord::Migration
1
+ class AddUrlToStorytimeLinks < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  add_column :storytime_links, :url, :string
4
4
  end
@@ -0,0 +1,5 @@
1
+ class AddCanonicalUrlToStorytimePosts < ActiveRecord::Migration[4.2]
2
+ def change
3
+ add_column :storytime_posts, :canonical_url, :string
4
+ end
5
+ end
@@ -0,0 +1,22 @@
1
+ class SanitizeExistingStorytimeSnippets < ActiveRecord::Migration[4.2]
2
+ # Snippet content was previously stored unsanitized and rendered with `raw`,
3
+ # allowing stored XSS. Re-run the sanitizer over every existing snippet so
4
+ # rows created before the before_save callback are scrubbed too.
5
+ def up
6
+ return if Storytime.post_sanitizer.blank?
7
+
8
+ Storytime::Snippet.reset_column_information
9
+ Storytime::Snippet.find_each do |snippet|
10
+ next if snippet.content.blank?
11
+
12
+ cleaned = Storytime.post_sanitizer.call(snippet.content)
13
+ next if cleaned == snippet.content
14
+
15
+ snippet.update_columns(content: cleaned)
16
+ end
17
+ end
18
+
19
+ def down
20
+ # Sanitization is not reversible; stripped markup cannot be restored.
21
+ end
22
+ end
@@ -27,8 +27,6 @@ module Storytime
27
27
  end
28
28
 
29
29
  def automated
30
- `bin/spring stop`
31
-
32
30
  defaults = storytime_defaults
33
31
  self.destination_root = File.expand_path("./")
34
32
 
@@ -57,8 +55,6 @@ module Storytime
57
55
  end
58
56
 
59
57
  def interactive
60
- `bin/spring stop`
61
-
62
58
  begin
63
59
  require File.expand_path('config/environment.rb')
64
60
  rescue LoadError
@@ -112,20 +108,6 @@ module Storytime
112
108
  init_hash[:enable_user_class] = true
113
109
  end
114
110
 
115
- # Admin Models
116
- if yes? "Do you want to enable certain models to be accessible to CRUD operations within the Storytime admin dashboard? [y/n] (n)", :yellow
117
- admin_models = ask "Enter a comma separated list of the models that you want to be CRUD accessible within the admin dashboard:", :yellow
118
-
119
- unless admin_models.blank?
120
- admin_models = admin_models.gsub(" ", "").split(",")
121
-
122
- admin_models.each do |model|
123
- say "Creating a StorytimeAdmin controller for #{model}...", :cyan
124
- `bin/rails g storytime_admin:resource #{model}`
125
- end
126
- end
127
- end
128
-
129
111
  # Dashboard Namespace Path
130
112
  if no? "Do you want to use /storytime as the location of the dashboard? [y/n] (y)", :yellow
131
113
  dashboard_namespace_path = ask "Path of Storytime's dashboard, relative to Storytime's mount point, #{mount_point}, within the host app? (/storytime)", :yellow
@@ -222,8 +204,8 @@ module Storytime
222
204
  end
223
205
 
224
206
  def check_user_model(user_class)
225
- unless File.exists?("app/models/#{user_class.underscore}.rb")
226
- unless File.exists?("config/initializers/devise.rb")
207
+ unless File.exist?("app/models/#{user_class.underscore}.rb")
208
+ unless File.exist?("config/initializers/devise.rb")
227
209
  say "Devise initializer not found... trying to generate one.", :red
228
210
 
229
211
  `bin/rails generate devise:install`