elabs 3.0.0 → 4.0.0

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 (197) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +89 -0
  3. data/Gemfile +1 -1
  4. data/Gemfile.lock +7 -2
  5. data/README.md +24 -17
  6. data/ROADMAP.md +8 -7
  7. data/app/assets/javascripts/elabs/application.js.erb +42 -0
  8. data/app/assets/javascripts/elabs/forms.js +10 -0
  9. data/app/assets/javascripts/elabs/helpers-markdown.js +11 -33
  10. data/app/assets/javascripts/elabs/helpers.js +28 -0
  11. data/app/assets/javascripts/elabs/hljs.js +4 -0
  12. data/app/assets/stylesheets/elabs/_colors.scss +5 -0
  13. data/app/assets/stylesheets/elabs/_fixes.scss +6 -0
  14. data/app/assets/stylesheets/elabs/_icons.scss +4 -0
  15. data/app/assets/stylesheets/elabs/app/_acts.scss +11 -0
  16. data/app/assets/stylesheets/elabs/app/_buttons.scss +8 -0
  17. data/app/assets/stylesheets/elabs/app/_comments.scss +10 -1
  18. data/app/assets/stylesheets/elabs/app/_content.scss +15 -0
  19. data/app/assets/stylesheets/elabs/app/_content_statuses.scss +32 -0
  20. data/app/assets/stylesheets/elabs/app/_forms.scss +5 -0
  21. data/app/assets/stylesheets/elabs/app/_helpers.scss +10 -0
  22. data/app/assets/stylesheets/elabs/app/_layout.scss +4 -0
  23. data/app/assets/stylesheets/elabs/app/_modals.scss +4 -0
  24. data/app/assets/stylesheets/elabs/app/_tables.scss +31 -0
  25. data/app/assets/stylesheets/elabs/app/_typo.scss +14 -0
  26. data/app/assets/stylesheets/elabs/app/_users.scss +14 -6
  27. data/app/assets/stylesheets/elabs/app/admin-members/_forms.scss +8 -1
  28. data/app/assets/stylesheets/elabs/app/admin-members/_indexes.scss +1 -26
  29. data/app/assets/stylesheets/elabs/app/mixins/_content-card.scss +11 -1
  30. data/app/assets/stylesheets/elabs/app/mixins/_content-full.scss +26 -0
  31. data/app/assets/stylesheets/elabs/app/mixins/_content-inline.scss +7 -0
  32. data/app/assets/stylesheets/elabs/app/widgets/_git-cards.scss +88 -0
  33. data/app/assets/stylesheets/elabs/lib/_hljs.scss +5 -0
  34. data/app/assets/stylesheets/elabs/lib/fontawesome/_icons.scss +11 -11
  35. data/app/assets/stylesheets/elabs/lib/knacss/_knacss-variables.scss +10 -2
  36. data/app/assets/stylesheets/elabs/style.scss +11 -1
  37. data/app/controllers/elabs/admin/admin_application_controller.rb +1 -1
  38. data/app/controllers/elabs/admin/admin_content_application_controller.rb +2 -2
  39. data/app/controllers/elabs/admin/languages_controller.rb +1 -1
  40. data/app/controllers/elabs/admin/licenses_controller.rb +1 -1
  41. data/app/controllers/elabs/admin/tags_controller.rb +1 -1
  42. data/app/controllers/elabs/admin/users_controller.rb +1 -1
  43. data/app/controllers/elabs/albums_controller.rb +1 -1
  44. data/app/controllers/elabs/articles_controller.rb +1 -1
  45. data/app/controllers/elabs/content_application_controller.rb +2 -1
  46. data/app/controllers/elabs/elabs_public_controller.rb +28 -8
  47. data/app/controllers/elabs/languages_controller.rb +1 -1
  48. data/app/controllers/elabs/licenses_controller.rb +1 -1
  49. data/app/controllers/elabs/member/albums_controller.rb +1 -1
  50. data/app/controllers/elabs/member/articles_controller.rb +1 -1
  51. data/app/controllers/elabs/member/markdown_previewer_controller.rb +11 -0
  52. data/app/controllers/elabs/member/member_content_application_controller.rb +2 -2
  53. data/app/controllers/elabs/member/notes_controller.rb +1 -1
  54. data/app/controllers/elabs/member/projects_controller.rb +1 -1
  55. data/app/controllers/elabs/member/uploads_controller.rb +1 -1
  56. data/app/controllers/elabs/notes_controller.rb +1 -1
  57. data/app/controllers/elabs/projects_controller.rb +1 -1
  58. data/app/controllers/elabs/tags_controller.rb +1 -6
  59. data/app/controllers/elabs/uploads_controller.rb +1 -1
  60. data/app/controllers/elabs/users_controller.rb +1 -1
  61. data/app/helpers/elabs/acts_helper.rb +2 -2
  62. data/app/helpers/elabs/application_helper.rb +30 -3
  63. data/app/helpers/elabs/content_helper.rb +9 -3
  64. data/app/helpers/elabs/content_renderer_helper.rb +118 -8
  65. data/app/helpers/elabs/rss_helper.rb +9 -0
  66. data/app/helpers/elabs/thumbnails_helper.rb +24 -19
  67. data/app/helpers/elabs/time_helper.rb +7 -1
  68. data/app/models/elabs/album.rb +2 -0
  69. data/app/models/elabs/application_content_record.rb +3 -0
  70. data/app/models/elabs/article.rb +2 -0
  71. data/app/models/elabs/concerns/actable_entity.rb +17 -2
  72. data/app/models/elabs/concerns/content_entity.rb +2 -2
  73. data/app/models/elabs/concerns/sluggable.rb +40 -0
  74. data/app/models/elabs/language.rb +8 -0
  75. data/app/models/elabs/license.rb +5 -0
  76. data/app/models/elabs/note.rb +2 -0
  77. data/app/models/elabs/project.rb +3 -0
  78. data/app/models/elabs/tag.rb +5 -0
  79. data/app/models/elabs/upload.rb +2 -0
  80. data/app/models/elabs/user.rb +10 -2
  81. data/app/views/elabs/acts/_act.rss.builder +22 -0
  82. data/app/views/elabs/acts/index.html.haml +5 -1
  83. data/app/views/elabs/acts/index.rss.builder +15 -0
  84. data/app/views/elabs/admin/albums/index.html.haml +4 -4
  85. data/app/views/elabs/admin/articles/index.html.haml +4 -4
  86. data/app/views/elabs/admin/languages/_form.html.haml +2 -1
  87. data/app/views/elabs/admin/licenses/_form.html.haml +2 -1
  88. data/app/views/elabs/admin/notes/index.html.haml +5 -5
  89. data/app/views/elabs/admin/projects/index.html.haml +4 -4
  90. data/app/views/elabs/admin/reports/index.html.haml +2 -2
  91. data/app/views/elabs/admin/tags/_form.html.haml +2 -1
  92. data/app/views/elabs/admin/uploads/index.html.haml +4 -4
  93. data/app/views/elabs/admin/users/index.html.haml +3 -3
  94. data/app/views/elabs/admin/users/show.html.haml +2 -2
  95. data/app/views/elabs/albums/_album.html.haml +1 -1
  96. data/app/views/elabs/albums/_album.rss.builder +7 -0
  97. data/app/views/elabs/albums/_album_inline.html.haml +8 -0
  98. data/app/views/elabs/albums/index.rss.builder +14 -0
  99. data/app/views/elabs/albums/show.html.haml +3 -3
  100. data/app/views/elabs/articles/_article.html.haml +1 -1
  101. data/app/views/elabs/articles/_article.rss.builder +7 -0
  102. data/app/views/elabs/articles/_article_inline.html.haml +8 -0
  103. data/app/views/elabs/articles/index.rss.builder +14 -0
  104. data/app/views/elabs/articles/show.html.haml +4 -4
  105. data/app/views/elabs/comments/_comments.html.haml +4 -3
  106. data/app/views/elabs/comments/_form.html.haml +18 -6
  107. data/app/views/elabs/languages/_associations.html.haml +15 -5
  108. data/app/views/elabs/layouts/_footer.html.haml +8 -1
  109. data/app/views/elabs/layouts/_hidden_entry.html.haml +4 -4
  110. data/app/views/elabs/layouts/_hidden_entry_full.html.haml +4 -4
  111. data/app/views/elabs/layouts/_hidden_entry_inline.html.haml +6 -0
  112. data/app/views/elabs/layouts/_shortcode_infinite_loop.html.haml +2 -0
  113. data/app/views/elabs/layouts/_shortcode_infinite_loop_inline.html.haml +2 -0
  114. data/app/views/elabs/layouts/_shortcode_missing_content.html.haml +2 -0
  115. data/app/views/elabs/layouts/_shortcode_missing_content_inline.html.haml +2 -0
  116. data/app/views/elabs/layouts/_shortcode_open_to_see.html.haml +2 -0
  117. data/app/views/elabs/layouts/admin_application.html.haml +2 -2
  118. data/app/views/elabs/layouts/application.html.haml +11 -3
  119. data/app/views/elabs/layouts/member_application.html.haml +5 -2
  120. data/app/views/elabs/layouts/widgets/_github_repo_card.html.haml +12 -0
  121. data/app/views/elabs/layouts/widgets/_github_repo_inline.html.haml +8 -0
  122. data/app/views/elabs/layouts/widgets/_github_user_card.html.haml +7 -0
  123. data/app/views/elabs/layouts/widgets/_gitlab_group_card.html.haml +11 -0
  124. data/app/views/elabs/layouts/widgets/_gitlab_repo_card.html.haml +12 -0
  125. data/app/views/elabs/layouts/widgets/_gitlab_repo_inline.html.haml +8 -0
  126. data/app/views/elabs/layouts/widgets/_gitlab_user_card.html.haml +11 -0
  127. data/app/views/elabs/layouts/widgets/vue/_all_widgets.html.haml +5 -0
  128. data/app/views/elabs/layouts/widgets/vue/_github_repo_card_vue.html.haml +72 -0
  129. data/app/views/elabs/layouts/widgets/vue/_github_user_card_vue.html.haml +64 -0
  130. data/app/views/elabs/layouts/widgets/vue/_gitlab_group_card_vue.html.haml +64 -0
  131. data/app/views/elabs/layouts/widgets/vue/_gitlab_repo_card_vue.html.haml +69 -0
  132. data/app/views/elabs/layouts/widgets/vue/_gitlab_user_card_vue.html.haml +99 -0
  133. data/app/views/elabs/licenses/_associations.html.haml +15 -5
  134. data/app/views/elabs/licenses/show.json.jbuilder +1 -1
  135. data/app/views/elabs/member/albums/_form.html.haml +12 -1
  136. data/app/views/elabs/member/albums/index.html.haml +4 -4
  137. data/app/views/elabs/member/articles/_form.html.haml +12 -1
  138. data/app/views/elabs/member/articles/index.html.haml +4 -4
  139. data/app/views/elabs/member/markdown_previewer/preview.json.jbuilder +2 -0
  140. data/app/views/elabs/member/notes/_form.html.haml +12 -1
  141. data/app/views/elabs/member/notes/index.html.haml +4 -4
  142. data/app/views/elabs/member/notifications/index.html.haml +1 -1
  143. data/app/views/elabs/member/preferences/_form.html.haml +2 -1
  144. data/app/views/elabs/member/projects/_form.html.haml +18 -2
  145. data/app/views/elabs/member/projects/_project.json.jbuilder +2 -0
  146. data/app/views/elabs/member/projects/index.html.haml +4 -4
  147. data/app/views/elabs/member/uploads/_form.html.haml +12 -1
  148. data/app/views/elabs/member/uploads/index.html.haml +6 -9
  149. data/app/views/elabs/member/users/_form.html.haml +2 -1
  150. data/app/views/elabs/notes/_note.html.haml +2 -2
  151. data/app/views/elabs/notes/_note.rss.builder +7 -0
  152. data/app/views/elabs/notes/_note_inline.haml +8 -0
  153. data/app/views/elabs/notes/index.rss.builder +14 -0
  154. data/app/views/elabs/notes/show.html.haml +3 -3
  155. data/app/views/elabs/projects/_associations.html.haml +12 -4
  156. data/app/views/elabs/projects/_project.html.haml +1 -1
  157. data/app/views/elabs/projects/_project.json.jbuilder +2 -0
  158. data/app/views/elabs/projects/_project.rss.builder +7 -0
  159. data/app/views/elabs/projects/_project_inline.html.haml +9 -0
  160. data/app/views/elabs/projects/index.rss.builder +14 -0
  161. data/app/views/elabs/projects/show.html.haml +20 -9
  162. data/app/views/elabs/reports/_form.html.haml +2 -1
  163. data/app/views/elabs/tags/_associations.html.haml +15 -5
  164. data/app/views/elabs/tags/index.html.haml +2 -0
  165. data/app/views/elabs/uploads/_preview.html.haml +1 -6
  166. data/app/views/elabs/uploads/_upload.rss.builder +7 -0
  167. data/app/views/elabs/uploads/_upload_inline.html.haml +8 -0
  168. data/app/views/elabs/uploads/index.rss.builder +14 -0
  169. data/app/views/elabs/uploads/show.html.haml +7 -8
  170. data/app/views/elabs/users/_associations.html.haml +15 -5
  171. data/app/views/elabs/users/_user.html.haml +24 -18
  172. data/app/views/elabs/users/_user_inline.html.haml +7 -0
  173. data/app/views/elabs/users/show.html.haml +2 -2
  174. data/config/brakeman.ignore +13 -111
  175. data/config/locales/en.yml +6 -0
  176. data/config/locales/fr.yml +6 -0
  177. data/config/routes.rb +30 -28
  178. data/db/migrate/20180917133442_add_urls_to_projects.rb +6 -0
  179. data/db/migrate/20181005105642_add_reason_to_acts.rb +5 -0
  180. data/db/migrate/20181006073541_add_slugs.rb +39 -0
  181. data/docs/migrating.md +51 -0
  182. data/docs/setup.md +1 -0
  183. data/lib/elabs.rb +5 -0
  184. data/lib/elabs/version.rb +1 -1
  185. data/lib/generators/elabs/install_generator.rb +1 -0
  186. data/lib/generators/elabs/views_generator.rb +0 -1
  187. data/lib/generators/templates/elabs.rb +4 -0
  188. data/lib/generators/templates/user_model.rb +6 -0
  189. data/locale/app.pot +129 -9
  190. data/locale/en/app.edit.po +127 -7
  191. data/locale/en/app.po +127 -7
  192. data/locale/fr/app.edit.po +130 -10
  193. data/locale/fr/app.po +129 -9
  194. metadata +59 -5
  195. data/app/assets/javascripts/elabs/application.js +0 -27
  196. data/app/assets/stylesheets/elabs/app/_nsfw.scss +0 -5
  197. data/lib/assets/javascripts/markdown-it-8.4.2.min.js +0 -1
@@ -1,124 +1,26 @@
1
1
  {
2
2
  "ignored_warnings": [
3
3
  {
4
- "warning_type": "Unscoped Find",
5
- "warning_code": 82,
6
- "fingerprint": "14eb16e2efd5474628f981fdff434cb13c73df4d17b93ceea6b82a8f99a09552",
7
- "check_name": "UnscopedFind",
8
- "message": "Unscoped call to Album#find",
9
- "file": "app/controllers/albums_controller.rb",
10
- "line": 18,
11
- "link": "https://brakemanscanner.org/docs/warning_types/unscoped_find/",
12
- "code": "Album.find(params[:id])",
4
+ "warning_type": "SQL Injection",
5
+ "warning_code": 0,
6
+ "fingerprint": "7d9b0d8fb977bbc2cf5fc42d0ad2c836141fa5ddba8c1ce84fb0dd2108cad6bd",
7
+ "check_name": "SQL",
8
+ "message": "Possible SQL injection",
9
+ "file": "app/controllers/elabs/elabs_public_controller.rb",
10
+ "line": 48,
11
+ "link": "https://brakemanscanner.org/docs/warning_types/sql_injection/",
12
+ "code": "orm_request.where(\"#{details[:type]}_id\" => find_related_id_by_slug(details[:type], details[:slug_field], params[field]))",
13
13
  "render_path": null,
14
14
  "location": {
15
15
  "type": "method",
16
- "class": "AlbumsController",
17
- "method": "set_album"
16
+ "class": "Elabs::ElabsPublicController",
17
+ "method": "build_request_where"
18
18
  },
19
- "user_input": "params[:id]",
19
+ "user_input": "details[:type]",
20
20
  "confidence": "Weak",
21
21
  "note": ""
22
- },
23
- {
24
- "warning_type": "Cross-Site Scripting",
25
- "warning_code": 4,
26
- "fingerprint": "74d83c9e5d3fb98de33d9c690a9380c40f0e35f3b85f390e871858bb8d34c1fe",
27
- "check_name": "LinkToHref",
28
- "message": "Potentially unsafe model attribute in link_to href",
29
- "file": "app/views/licenses/show.html.haml",
30
- "line": 15,
31
- "link": "https://brakemanscanner.org/docs/warning_types/link_to_href",
32
- "code": "link_to(_(\"TL; DR\"), License.find(params[:id]).tldr_url, :target => \"_blank\")",
33
- "render_path": [{"type":"controller","class":"LicensesController","method":"show","line":18,"file":"app/controllers/licenses_controller.rb"}],
34
- "location": {
35
- "type": "template",
36
- "template": "licenses/show"
37
- },
38
- "user_input": "License.find(params[:id]).tldr_url",
39
- "confidence": "Weak",
40
- "note": "URLS are set by admins only"
41
- },
42
- {
43
- "warning_type": "Unscoped Find",
44
- "warning_code": 82,
45
- "fingerprint": "96f2f0238c7611c20a731155fa4ab107874326d762a84e9b1858c0801c10d741",
46
- "check_name": "UnscopedFind",
47
- "message": "Unscoped call to Note#find",
48
- "file": "app/controllers/notes_controller.rb",
49
- "line": 18,
50
- "link": "https://brakemanscanner.org/docs/warning_types/unscoped_find/",
51
- "code": "Note.find(params[:id])",
52
- "render_path": null,
53
- "location": {
54
- "type": "method",
55
- "class": "NotesController",
56
- "method": "set_note"
57
- },
58
- "user_input": "params[:id]",
59
- "confidence": "Weak",
60
- "note": ""
61
- },
62
- {
63
- "warning_type": "Unscoped Find",
64
- "warning_code": 82,
65
- "fingerprint": "b65152f1b2c4e9e18bcc4a3fd637b7bd5dd4b79421460a2c764bc3ead2ad1aa0",
66
- "check_name": "UnscopedFind",
67
- "message": "Unscoped call to Project#find",
68
- "file": "app/controllers/projects_controller.rb",
69
- "line": 23,
70
- "link": "https://brakemanscanner.org/docs/warning_types/unscoped_find/",
71
- "code": "Project.find(params[:id])",
72
- "render_path": null,
73
- "location": {
74
- "type": "method",
75
- "class": "ProjectsController",
76
- "method": "set_project"
77
- },
78
- "user_input": "params[:id]",
79
- "confidence": "Weak",
80
- "note": ""
81
- },
82
- {
83
- "warning_type": "Unscoped Find",
84
- "warning_code": 82,
85
- "fingerprint": "c03df681f497ea4ef182b6236295be2dd61879612b212e7a6ea3a1b2e6faf7d0",
86
- "check_name": "UnscopedFind",
87
- "message": "Unscoped call to Upload#find",
88
- "file": "app/controllers/uploads_controller.rb",
89
- "line": 17,
90
- "link": "https://brakemanscanner.org/docs/warning_types/unscoped_find/",
91
- "code": "Upload.find(params[:id])",
92
- "render_path": null,
93
- "location": {
94
- "type": "method",
95
- "class": "UploadsController",
96
- "method": "set_upload"
97
- },
98
- "user_input": "params[:id]",
99
- "confidence": "Weak",
100
- "note": ""
101
- },
102
- {
103
- "warning_type": "Cross-Site Scripting",
104
- "warning_code": 4,
105
- "fingerprint": "c125f39a448be85c1445467afabaf1a1992e9e1bf59af040b0277b33fa708901",
106
- "check_name": "LinkToHref",
107
- "message": "Potentially unsafe model attribute in link_to href",
108
- "file": "app/views/licenses/show.html.haml",
109
- "line": 12,
110
- "link": "https://brakemanscanner.org/docs/warning_types/link_to_href",
111
- "code": "link_to(_(\"Home page\"), License.find(params[:id]).url, :target => \"_blank\")",
112
- "render_path": [{"type":"controller","class":"LicensesController","method":"show","line":18,"file":"app/controllers/licenses_controller.rb"}],
113
- "location": {
114
- "type": "template",
115
- "template": "licenses/show"
116
- },
117
- "user_input": "License.find(params[:id]).url",
118
- "confidence": "Weak",
119
- "note": "URLS are set by admins only"
120
22
  }
121
23
  ],
122
- "updated": "2018-08-01 07:04:08 +0200",
24
+ "updated": "2018-10-09 00:22:09 +0200",
123
25
  "brakeman_version": "4.3.1"
124
26
  }
@@ -0,0 +1,6 @@
1
+ en:
2
+ # From rails-i18n:
3
+ # https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/
4
+ time:
5
+ formats:
6
+ medium: "%d %b %Y %I:%M %p"
@@ -0,0 +1,6 @@
1
+ fr:
2
+ # From rails-i18n:
3
+ # https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/
4
+ time:
5
+ formats:
6
+ medium: "%d %b %Y %H:%M"
@@ -8,50 +8,50 @@ Elabs::Engine.routes.draw do
8
8
  unlocks: 'elabs/auth/unlocks'
9
9
  }
10
10
  # Resources
11
- resources :albums, only: %i[index show] do
11
+ resources :albums, only: %i[index show], param: :slug do
12
12
  resources :uploads, only: %i[index]
13
- post 'comment', to: 'albums#create_comment', as: 'create_comment'
13
+ post 'comment', to: 'albums#create_comment', as: 'create_comment', param: :slug
14
14
  end
15
- resources :articles, only: %i[index show] do
16
- post 'comment', to: 'articles#create_comment', as: 'create_comment'
15
+ resources :articles, only: %i[index show], param: :slug do
16
+ post 'comment', to: 'articles#create_comment', as: 'create_comment', param: :slug
17
17
  end
18
- resources :notes, only: %i[index show] do
19
- post 'comment', to: 'notes#create_comment', as: 'create_comment'
18
+ resources :notes, only: %i[index show], param: :slug do
19
+ post 'comment', to: 'notes#create_comment', as: 'create_comment', param: :slug
20
20
  end
21
- resources :projects, only: %i[index show] do
21
+ resources :projects, only: %i[index show], param: :slug do
22
22
  resources :articles, only: %i[index]
23
23
  resources :albums, only: %i[index]
24
24
  resources :notes, only: %i[index]
25
25
  resources :uploads, only: %i[index]
26
- post 'comment', to: 'projects#create_comment', as: 'create_comment'
26
+ post 'comment', to: 'projects#create_comment', as: 'create_comment', param: :slug
27
27
  end
28
- resources :uploads, only: %i[index show] do
29
- post 'comment', to: 'uploads#create_comment', as: 'create_comment'
28
+ resources :uploads, only: %i[index show], param: :slug do
29
+ post 'comment', to: 'uploads#create_comment', as: 'create_comment', param: :slug
30
30
  end
31
31
 
32
32
  # Classifiers
33
- resources :languages, only: %i[index show] do
33
+ resources :languages, only: %i[index show], param: :iso639_1 do
34
34
  resources :albums, only: %i[index]
35
35
  resources :articles, only: %i[index]
36
36
  resources :notes, only: %i[index]
37
37
  resources :projects, only: %i[index]
38
38
  resources :uploads, only: %i[index]
39
39
  end
40
- resources :licenses, only: %i[index show] do
40
+ resources :licenses, only: %i[index show], param: :slug do
41
41
  resources :albums, only: %i[index]
42
42
  resources :articles, only: %i[index]
43
43
  resources :notes, only: %i[index]
44
44
  resources :projects, only: %i[index]
45
45
  resources :uploads, only: %i[index]
46
46
  end
47
- resources :tags, only: %i[index show] do
47
+ resources :tags, only: %i[index show], param: :slug do
48
48
  resources :albums, only: %i[index]
49
49
  resources :articles, only: %i[index]
50
50
  resources :notes, only: %i[index]
51
51
  resources :projects, only: %i[index]
52
52
  resources :uploads, only: %i[index]
53
53
  end
54
- resources :users, only: %i[index show] do
54
+ resources :users, only: %i[index show], param: :username do
55
55
  resources :albums, only: %i[index]
56
56
  resources :articles, only: %i[index]
57
57
  resources :notes, only: %i[index]
@@ -67,19 +67,19 @@ Elabs::Engine.routes.draw do
67
67
 
68
68
  # Member
69
69
  namespace :member do
70
- resources :albums, except: %i[show] do
70
+ resources :albums, except: %i[show], param: :slug do
71
71
  put 'toggle_publication', to: 'albums#toggle_publication', as: :toggle_publication
72
72
  end
73
- resources :articles, except: %i[show] do
73
+ resources :articles, except: %i[show], param: :slug do
74
74
  put 'toggle_publication', to: 'articles#toggle_publication', as: :toggle_publication
75
75
  end
76
- resources :notes, except: %i[show] do
76
+ resources :notes, except: %i[show], param: :slug do
77
77
  put 'toggle_publication', to: 'notes#toggle_publication', as: :toggle_publication
78
78
  end
79
- resources :projects, except: %i[show] do
79
+ resources :projects, except: %i[show], param: :slug do
80
80
  put 'toggle_publication', to: 'projects#toggle_publication', as: :toggle_publication
81
81
  end
82
- resources :uploads, except: %i[show] do
82
+ resources :uploads, except: %i[show], param: :slug do
83
83
  put 'toggle_publication', to: 'uploads#toggle_publication', as: :toggle_publication
84
84
  end
85
85
 
@@ -90,32 +90,34 @@ Elabs::Engine.routes.draw do
90
90
 
91
91
  get '/infos', to: 'users#edit', as: :edit_infos
92
92
  patch '/infos', to: 'users#update', as: :update_infos
93
+
94
+ post '/markdown_previewer', to: 'markdown_previewer#preview', as: :markdown_preview
93
95
  end
94
96
 
95
97
  # Admin
96
98
  namespace :admin do
97
99
  # Content resources
98
- resources :albums, only: %i[index destroy] do
100
+ resources :albums, only: %i[index destroy], param: :slug do
99
101
  put 'toggle_lock', to: 'albums#toggle_lock', as: :toggle_lock
100
102
  end
101
- resources :articles, only: %i[index destroy] do
103
+ resources :articles, only: %i[index destroy], param: :slug do
102
104
  put 'toggle_lock', to: 'articles#toggle_lock', as: :toggle_lock
103
105
  end
104
- resources :notes, only: %i[index destroy] do
106
+ resources :notes, only: %i[index destroy], param: :slug do
105
107
  put 'toggle_lock', to: 'notes#toggle_lock', as: :toggle_lock
106
108
  end
107
- resources :projects, only: %i[index destroy] do
109
+ resources :projects, only: %i[index destroy], param: :slug do
108
110
  put 'toggle_lock', to: 'projects#toggle_lock', as: :toggle_lock
109
111
  end
110
- resources :uploads, only: %i[index destroy] do
112
+ resources :uploads, only: %i[index destroy], param: :slug do
111
113
  put 'toggle_lock', to: 'uploads#toggle_lock', as: :toggle_lock
112
114
  end
113
115
 
114
116
  # Basic resources
115
- resources :languages, except: %i[show]
116
- resources :licenses, except: %i[show]
117
+ resources :languages, except: %i[show], param: :iso639_1
118
+ resources :licenses, except: %i[show], param: :slug
117
119
  resources :reports, only: %i[index destroy]
118
- resources :tags, except: %i[create show]
119
- resources :users, only: %i[index show destroy]
120
+ resources :tags, except: %i[create show], param: :slug
121
+ resources :users, only: %i[index show destroy], param: :username
120
122
  end
121
123
  end
@@ -0,0 +1,6 @@
1
+ class AddUrlsToProjects < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :projects, :sources_url, :string
4
+ add_column :projects, :docs_url, :string
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ class AddReasonToActs < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :acts, :reason, :string, default: nil, null: true
4
+ end
5
+ end
@@ -0,0 +1,39 @@
1
+ class AddSlugs < ActiveRecord::Migration[5.2]
2
+ def up
3
+ %i[licenses tags albums articles notes projects uploads].each do |table|
4
+ add_column table, :slug, :string, null: true
5
+ end
6
+
7
+ ActiveRecord::Base.record_timestamps = false
8
+ begin
9
+ [
10
+ { model: Elabs::License, actable: false },
11
+ { model: Elabs::Tag, actable: false },
12
+ { model: Elabs::Album, actable: true },
13
+ { model: Elabs::Article, actable: true },
14
+ { model: Elabs::Note, actable: true },
15
+ { model: Elabs::Project, actable: true },
16
+ { model: Elabs::Upload, actable: true }
17
+ ].each do |table|
18
+ table[:model].all.each do |record|
19
+ record.fill_slug
20
+ record.minor_update = true if table[:actable]
21
+ record.save!
22
+ end
23
+ end
24
+ ensure
25
+ ActiveRecord::Base.record_timestamps = true
26
+ end
27
+
28
+ %i[licenses tags albums articles notes projects uploads].each do |table|
29
+ change_column table, :slug, :string, null: false
30
+ add_index table, :slug, unique: true
31
+ end
32
+ end
33
+
34
+ def down
35
+ %i[licenses tags albums articles notes projects uploads].each do |table|
36
+ remove_column table, :slug
37
+ end
38
+ end
39
+ end
@@ -1,5 +1,56 @@
1
1
  # Migration guide
2
2
 
3
+ ## From 3.x to 4.0.0
4
+
5
+ First of all, read the changelog for the 4.0.0 release.
6
+
7
+ Use a version control system to manage the changes and the overrides you
8
+ made in your own application.
9
+
10
+ - Add the Commonmarker gem: `gem 'commonmarker'` if you use the default
11
+ views
12
+ - Update the base configuration (initializer, languages, ...):
13
+ `rails g elabs:install` and accept to override everything. Then check
14
+ changes
15
+ - Apply the last migrations: `rake elabs:install:migrations` then
16
+ `rails db:migrate`
17
+
18
+ Don't forget to rebuild the assets...
19
+
20
+ If you have existing content you need to redirect you can use a runner
21
+ like this one:
22
+
23
+ ```rb
24
+ # Example for Apache
25
+ # Uncomment if you need to enable RewriteEngine (mod_rewrite is required)
26
+ puts "# RewriteEngine on"
27
+
28
+ [
29
+ { model: Elabs::Language, subs: %w[albums articles notes projects uploads] },
30
+ { model: Elabs::License, subs: %w[albums articles notes projects uploads] },
31
+ { model: Elabs::Tag, subs: %w[albums articles notes projects uploads] },
32
+ { model: Elabs::User, subs: %w[albums articles notes projects uploads] },
33
+ { model: Elabs::Album, subs: [] },
34
+ { model: Elabs::Article, subs: [] },
35
+ { model: Elabs::Note, subs: [] },
36
+ { model: Elabs::Project, subs: %w[albums articles notes uploads] },
37
+ { model: Elabs::Upload, subs: [] },
38
+ ].each do |config|
39
+ slug_field = config[:model]::SLUG_FIELD
40
+ endpoint = config[:model].to_s.demodulize.tableize
41
+ puts '# Entities redirection'
42
+ config[:model].all.each do |record|
43
+ # Entity
44
+ puts "Redirect 301 /#{endpoint}/#{record.id} /#{endpoint}/#{record.send(slug_field)}"
45
+
46
+ # Nested resources
47
+ config[:subs].each do |sub|
48
+ puts "Redirect 301 /#{endpoint}/#{record.id}/#{sub} /#{endpoint}/#{record.send(slug_field)}/#{sub}"
49
+ end
50
+ end
51
+ end
52
+ ```
53
+
3
54
  ## From 2.x to 3.0.0
4
55
 
5
56
  First of all, read the changelog for the 3.0.0 release
@@ -37,6 +37,7 @@ gem 'elabs'
37
37
 
38
38
  # If you want to use the default views:
39
39
  gem 'active_link_to'
40
+ gem 'commonmarker'
40
41
  gem 'haml-rails'
41
42
  gem 'mini_magick'
42
43
  ```
@@ -34,9 +34,14 @@ module Elabs
34
34
  mattr_accessor :av_formats_video
35
35
  @@av_formats_video = ['video/mp4', 'video/webm', 'video/ogg']
36
36
 
37
+ # Whether or not to use avatars. This feature is experimental
37
38
  mattr_accessor :use_avatars
38
39
  @@use_avatars = false
39
40
 
41
+ # Close the registrations
42
+ mattr_accessor :users_can_register
43
+ @@users_can_register = true
44
+
40
45
  def self.setup
41
46
  yield self
42
47
  end
@@ -1,3 +1,3 @@
1
1
  module Elabs
2
- VERSION = '3.0.0'.freeze
2
+ VERSION = '4.0.0'.freeze
3
3
  end
@@ -18,6 +18,7 @@ module Elabs
18
18
 
19
19
  def copy_files
20
20
  template 'elabs.rb', 'config/initializers/elabs.rb'
21
+ template 'user_model.rb', 'app/models/user.rb'
21
22
  template 'fast_gettext.rb', 'config/initializers/fast_gettext.rb'
22
23
  directory 'locale'
23
24
  end
@@ -18,7 +18,6 @@ module Elabs
18
18
 
19
19
  def copy_views
20
20
  directory 'app/views/elabs'
21
- directory 'app/views/devise'
22
21
  end
23
22
  end
24
23
  end
@@ -1,3 +1,4 @@
1
+ # Don't forget to restart the server when you edit this file.
1
2
  Elabs.setup do |config|
2
3
  # Site name, used in menus and other places
3
4
  config.site_name = 'A new app'
@@ -28,4 +29,7 @@ Elabs.setup do |config|
28
29
  # attached file is deleted on failure, resulting on avatar suppression.
29
30
  # Set this value to false to avoid using avatars
30
31
  config.use_avatars = false
32
+
33
+ # Open/close the registrations
34
+ config.users_can_register = true
31
35
  end