thredded 0.2.2 → 0.3.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 (220) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.mkdn +63 -0
  3. data/Procfile +1 -0
  4. data/README.mkdn +42 -20
  5. data/app/assets/images/thredded/private-messages.svg +4 -0
  6. data/app/assets/images/thredded/settings.svg +4 -0
  7. data/app/assets/javascripts/thredded.es6 +2 -10
  8. data/app/assets/javascripts/thredded/{currently_online.es6 → components/currently_online.es6} +0 -0
  9. data/app/assets/javascripts/thredded/{post_form.es6 → components/post_form.es6} +0 -0
  10. data/app/assets/javascripts/thredded/{time_stamps.es6 → components/time_stamps.es6} +0 -0
  11. data/app/assets/javascripts/thredded/{topic_form.es6 → components/topic_form.es6} +1 -1
  12. data/app/assets/javascripts/thredded/components/topics.es6 +37 -0
  13. data/app/assets/javascripts/thredded/components/user_preferences_form.es6 +45 -0
  14. data/app/assets/javascripts/thredded/components/users_select.es6 +56 -0
  15. data/app/assets/javascripts/thredded/dependencies.js +9 -0
  16. data/app/assets/javascripts/thredded/thredded.es6 +1 -0
  17. data/app/assets/stylesheets/thredded/_base.scss +3 -2
  18. data/app/assets/stylesheets/thredded/_thredded.scss +4 -1
  19. data/app/assets/stylesheets/thredded/base/_buttons.scss +2 -1
  20. data/app/assets/stylesheets/thredded/base/_forms.scss +23 -18
  21. data/app/assets/stylesheets/thredded/base/_grid.scss +1 -1
  22. data/app/assets/stylesheets/thredded/base/_nav.scss +21 -0
  23. data/app/assets/stylesheets/thredded/base/_tables.scss +5 -14
  24. data/app/assets/stylesheets/thredded/base/_typography.scss +9 -4
  25. data/app/assets/stylesheets/thredded/base/_variables.scss +28 -9
  26. data/app/assets/stylesheets/thredded/components/_alerts.scss +19 -0
  27. data/app/assets/stylesheets/thredded/components/_currently-online.scss +1 -1
  28. data/app/assets/stylesheets/thredded/components/_form-list.scss +2 -4
  29. data/app/assets/stylesheets/thredded/components/_icons.scss +3 -0
  30. data/app/assets/stylesheets/thredded/components/_messageboard.scss +4 -4
  31. data/app/assets/stylesheets/thredded/components/_pagination.scss +2 -2
  32. data/app/assets/stylesheets/thredded/components/_post-form.scss +3 -0
  33. data/app/assets/stylesheets/thredded/components/_post.scss +14 -4
  34. data/app/assets/stylesheets/thredded/components/_select2.scss +79 -9
  35. data/app/assets/stylesheets/thredded/components/_topic-header.scss +11 -1
  36. data/app/assets/stylesheets/thredded/components/_topics.scss +13 -11
  37. data/app/assets/stylesheets/thredded/layout/_main-container.scss +3 -3
  38. data/app/assets/stylesheets/thredded/layout/_main-navigation.scss +11 -17
  39. data/app/assets/stylesheets/thredded/layout/_navigation.scss +72 -0
  40. data/app/assets/stylesheets/thredded/layout/_search-navigation.scss +66 -0
  41. data/app/assets/stylesheets/thredded/layout/_user-navigation.scss +35 -61
  42. data/app/commands/thredded/at_notification_extractor.rb +1 -0
  43. data/app/commands/thredded/members_marked_notified.rb +1 -0
  44. data/app/commands/thredded/messageboard_destroyer.rb +7 -2
  45. data/app/commands/thredded/notify_mentioned_users.rb +8 -21
  46. data/app/commands/thredded/notify_private_topic_users.rb +3 -5
  47. data/app/controllers/thredded/application_controller.rb +76 -41
  48. data/app/controllers/thredded/autocomplete_users_controller.rb +46 -0
  49. data/app/controllers/thredded/messageboards_controller.rb +8 -5
  50. data/app/controllers/thredded/posts_controller.rb +20 -22
  51. data/app/controllers/thredded/preferences_controller.rb +19 -14
  52. data/app/controllers/thredded/private_topics_controller.rb +58 -23
  53. data/app/controllers/thredded/setups_controller.rb +1 -0
  54. data/app/controllers/thredded/theme_previews_controller.rb +24 -53
  55. data/app/controllers/thredded/topics_controller.rb +48 -77
  56. data/app/forms/thredded/private_topic_form.rb +1 -21
  57. data/app/forms/thredded/topic_form.rb +3 -7
  58. data/app/forms/thredded/user_preferences_form.rb +62 -0
  59. data/app/helpers/thredded/application_helper.rb +11 -12
  60. data/app/helpers/thredded/urls_helper.rb +103 -0
  61. data/app/jobs/thredded/activity_updater_job.rb +4 -3
  62. data/app/jobs/thredded/at_notifier_job.rb +1 -0
  63. data/app/jobs/thredded/notify_private_topic_users_job.rb +1 -0
  64. data/app/mailer_previews/thredded/base_mailer_preview.rb +101 -0
  65. data/app/mailer_previews/thredded/post_mailer_preview.rb +11 -0
  66. data/app/mailer_previews/thredded/private_post_mailer_preview.rb +11 -0
  67. data/app/mailer_previews/thredded/private_topic_mailer_preview.rb +15 -0
  68. data/app/mailers/thredded/base_mailer.rb +13 -0
  69. data/app/mailers/thredded/post_mailer.rb +4 -2
  70. data/app/mailers/thredded/private_post_mailer.rb +4 -2
  71. data/app/mailers/thredded/private_topic_mailer.rb +4 -2
  72. data/app/models/concerns/thredded/friendly_id_reserved_words_and_pagination.rb +16 -0
  73. data/app/models/concerns/thredded/post_common.rb +68 -63
  74. data/app/models/concerns/thredded/topic_common.rb +31 -8
  75. data/app/models/concerns/thredded/user_topic_read_state_common.rb +31 -0
  76. data/app/models/thredded/category.rb +1 -0
  77. data/app/models/thredded/messageboard.rb +24 -25
  78. data/app/models/thredded/messageboard_user.rb +1 -0
  79. data/app/models/thredded/null_preference.rb +1 -0
  80. data/app/models/thredded/null_user.rb +1 -6
  81. data/app/models/thredded/null_user_topic_read_state.rb +12 -0
  82. data/app/models/thredded/post.rb +6 -9
  83. data/app/models/thredded/post_notification.rb +1 -0
  84. data/app/models/thredded/private_post.rb +6 -2
  85. data/app/models/thredded/private_topic.rb +46 -32
  86. data/app/models/thredded/private_user.rb +3 -2
  87. data/app/models/thredded/stats.rb +1 -0
  88. data/app/models/thredded/topic.rb +40 -64
  89. data/app/models/thredded/topic_category.rb +1 -0
  90. data/app/models/thredded/user_detail.rb +2 -15
  91. data/app/models/thredded/user_extender.rb +29 -14
  92. data/app/models/thredded/user_messageboard_preference.rb +20 -0
  93. data/app/models/thredded/user_permissions/admin/if_admin_column_true.rb +1 -0
  94. data/app/models/thredded/user_permissions/admin/none.rb +1 -0
  95. data/app/models/thredded/user_permissions/message/readers_of_writeable_boards.rb +1 -0
  96. data/app/models/thredded/user_permissions/moderate/if_moderator_column_true.rb +1 -0
  97. data/app/models/thredded/user_permissions/moderate/none.rb +1 -0
  98. data/app/models/thredded/user_permissions/read/all.rb +1 -0
  99. data/app/models/thredded/user_permissions/write/all.rb +1 -0
  100. data/app/models/thredded/user_permissions/write/none.rb +1 -0
  101. data/app/models/thredded/user_preference.rb +7 -1
  102. data/app/models/thredded/user_private_topic_read_state.rb +12 -0
  103. data/app/models/thredded/user_topic_read_state.rb +12 -0
  104. data/app/policies/thredded/messageboard_policy.rb +27 -0
  105. data/app/policies/thredded/post_policy.rb +33 -0
  106. data/app/policies/thredded/private_post_policy.rb +29 -0
  107. data/app/policies/thredded/private_topic_policy.rb +23 -0
  108. data/app/policies/thredded/topic_policy.rb +32 -0
  109. data/app/view_models/thredded/base_topic_view.rb +56 -0
  110. data/app/view_models/thredded/post_view.rb +44 -0
  111. data/app/view_models/thredded/posts_page_view.rb +27 -0
  112. data/app/view_models/thredded/private_topic_view.rb +9 -0
  113. data/app/{decorators/thredded/topic_email_decorator.rb → view_models/thredded/topic_email_view.rb} +2 -1
  114. data/app/view_models/thredded/topic_view.rb +23 -0
  115. data/app/view_models/thredded/topics_page_view.rb +26 -0
  116. data/app/views/thredded/error_pages/forbidden.html.erb +6 -0
  117. data/app/views/thredded/error_pages/not_found.html.erb +6 -0
  118. data/app/views/thredded/messageboards/_messageboard.html.erb +13 -6
  119. data/app/views/thredded/messageboards/index.html.erb +2 -8
  120. data/app/views/thredded/messageboards/new.html.erb +8 -2
  121. data/app/views/thredded/post_mailer/at_notification.html.erb +3 -3
  122. data/app/views/thredded/post_mailer/at_notification.text.erb +1 -1
  123. data/app/views/thredded/posts/_content_field.html.erb +1 -1
  124. data/app/views/thredded/posts/_form.html.erb +5 -1
  125. data/app/views/thredded/posts/_post.html.erb +3 -1
  126. data/app/views/thredded/posts/edit.html.erb +7 -3
  127. data/app/views/thredded/posts_common/_form.html.erb +1 -1
  128. data/app/views/thredded/posts_common/_post.html.erb +14 -8
  129. data/app/views/thredded/preferences/_form.html.erb +37 -15
  130. data/app/views/thredded/preferences/_header.html.erb +1 -1
  131. data/app/views/thredded/preferences/edit.html.erb +4 -6
  132. data/app/views/thredded/private_post_mailer/at_notification.html.erb +6 -4
  133. data/app/views/thredded/private_posts/_form.html.erb +5 -1
  134. data/app/views/thredded/private_posts/_private_post.html.erb +3 -1
  135. data/app/views/thredded/private_topic_mailer/message_notification.html.erb +3 -7
  136. data/app/views/thredded/private_topic_mailer/message_notification.text.erb +1 -3
  137. data/app/views/thredded/private_topics/_breadcrumbs.html.erb +2 -2
  138. data/app/views/thredded/private_topics/_form.html.erb +15 -10
  139. data/app/views/thredded/private_topics/_header.html.erb +12 -0
  140. data/app/views/thredded/private_topics/_no_private_topics.html.erb +2 -2
  141. data/app/views/thredded/private_topics/_private_topic.html.erb +4 -6
  142. data/app/views/thredded/private_topics/edit.html.erb +32 -0
  143. data/app/views/thredded/private_topics/index.html.erb +5 -5
  144. data/app/views/thredded/private_topics/new.html.erb +1 -2
  145. data/app/views/thredded/private_topics/show.html.erb +12 -7
  146. data/app/views/thredded/search/_form.html.erb +9 -6
  147. data/app/views/thredded/shared/{_messageboard_topics_breadcrumbs.html.erb → _breadcrumbs.html.erb} +2 -2
  148. data/app/views/thredded/shared/_header.html.erb +2 -3
  149. data/app/views/thredded/shared/_nav.html.erb +20 -0
  150. data/app/views/thredded/shared/nav/_notification_preferences.html.erb +6 -0
  151. data/app/views/thredded/shared/nav/_private_topics.html.erb +11 -0
  152. data/app/views/thredded/shared/nav/_standalone.html.erb +12 -0
  153. data/app/views/thredded/theme_previews/_section_title.html.erb +2 -2
  154. data/app/views/thredded/theme_previews/show.html.erb +13 -17
  155. data/app/views/thredded/topics/_form.html.erb +8 -6
  156. data/app/views/thredded/topics/_header.html.erb +12 -0
  157. data/app/views/thredded/topics/_topic.html.erb +4 -8
  158. data/app/views/thredded/topics/_topic_form_admin_options.html.erb +1 -1
  159. data/app/views/thredded/topics/edit.html.erb +22 -18
  160. data/app/views/thredded/topics/index.html.erb +3 -3
  161. data/app/views/thredded/topics/new.html.erb +1 -1
  162. data/app/views/thredded/topics/search.html.erb +17 -5
  163. data/app/views/thredded/topics/show.html.erb +14 -11
  164. data/bin/rails +5 -0
  165. data/config.ru +3 -0
  166. data/config/i18n-tasks.yml +16 -0
  167. data/config/locales/en.yml +90 -0
  168. data/config/routes.rb +29 -15
  169. data/db/migrate/20160329231848_create_thredded.rb +29 -33
  170. data/db/seeds.rb +115 -0
  171. data/db/upgrade_migrations/20160410111522_upgrade_v0_2_to_v0_3.rb +59 -0
  172. data/heroku.gemfile +26 -0
  173. data/heroku.gemfile.lock +282 -0
  174. data/lib/generators/thredded/install/install_generator.rb +1 -0
  175. data/lib/generators/thredded/install/templates/initializer.rb +17 -0
  176. data/lib/html/pipeline/at_mention_filter.rb +2 -1
  177. data/lib/html/pipeline/bbcode_filter.rb +13 -4
  178. data/lib/tasks/thredded_tasks.rake +1 -0
  179. data/lib/thredded.rb +19 -17
  180. data/lib/thredded/at_users.rb +1 -0
  181. data/lib/thredded/engine.rb +14 -5
  182. data/lib/thredded/errors.rb +11 -11
  183. data/lib/thredded/main_app_route_delegator.rb +1 -0
  184. data/lib/thredded/search_parser.rb +2 -1
  185. data/lib/thredded/topics_search.rb +67 -0
  186. data/lib/thredded/version.rb +2 -1
  187. data/thredded.gemspec +12 -8
  188. metadata +146 -82
  189. data/app/assets/javascripts/thredded/users_select.es6 +0 -5
  190. data/app/assets/stylesheets/thredded/layout/_topic-navigation.scss +0 -53
  191. data/app/commands/thredded/user_reads_private_topic.rb +0 -22
  192. data/app/commands/thredded/user_resets_private_topic_to_unread.rb +0 -23
  193. data/app/decorators/thredded/base_topic_decorator.rb +0 -14
  194. data/app/decorators/thredded/base_user_topic_decorator.rb +0 -63
  195. data/app/decorators/thredded/messageboard_decorator.rb +0 -41
  196. data/app/decorators/thredded/post_decorator.rb +0 -40
  197. data/app/decorators/thredded/private_topic_decorator.rb +0 -23
  198. data/app/decorators/thredded/topic_decorator.rb +0 -25
  199. data/app/decorators/thredded/user_private_topic_decorator.rb +0 -13
  200. data/app/decorators/thredded/user_topic_decorator.rb +0 -37
  201. data/app/models/thredded/ability.rb +0 -60
  202. data/app/models/thredded/notification_preference.rb +0 -17
  203. data/app/models/thredded/null_topic.rb +0 -15
  204. data/app/models/thredded/null_topic_read.rb +0 -19
  205. data/app/models/thredded/user_topic_read.rb +0 -10
  206. data/app/views/thredded/shared/_notification_preferences.html.erb +0 -7
  207. data/app/views/thredded/shared/_top_nav.html.erb +0 -36
  208. data/app/views/thredded/shared/_topic_nav.html.erb +0 -22
  209. data/app/views/thredded/topics/_recent_topics_by_user.html.erb +0 -8
  210. data/app/views/thredded/topics/by_category.html.erb +0 -56
  211. data/app/views/thredded/topics_common/_header.html.erb +0 -6
  212. data/lib/thredded/messageboard_user_permissions.rb +0 -22
  213. data/lib/thredded/post_sql_builder.rb +0 -12
  214. data/lib/thredded/post_user_permissions.rb +0 -32
  215. data/lib/thredded/private_topic_user_permissions.rb +0 -26
  216. data/lib/thredded/search_sql_builder.rb +0 -21
  217. data/lib/thredded/seed_database.rb +0 -76
  218. data/lib/thredded/table_sql_builder.rb +0 -41
  219. data/lib/thredded/topic_sql_builder.rb +0 -11
  220. data/lib/thredded/topic_user_permissions.rb +0 -32
@@ -1,5 +0,0 @@
1
- jQuery(function($) {
2
- $('[data-thredded-users-select]').select2({
3
- dropdownCssClass: 'thredded--select2-drop'
4
- });
5
- });
@@ -1,53 +0,0 @@
1
- &--topic-navigation {
2
- @extend %thredded--list-unstyled;
3
- margin-bottom: 0;
4
- text-align: center;
5
-
6
- @include thredded-media-tablet-and-up {
7
- float: right;
8
-
9
- }
10
-
11
- li {
12
- display: inline-block;
13
- margin-right: $thredded-base-spacing;
14
-
15
- &:last-child {
16
- margin-right: 0;
17
- }
18
- }
19
-
20
- a {
21
- @extend %thredded--link;
22
- color: lighten($thredded-base-font-color, 10%);
23
- display: block;
24
- padding-bottom: $thredded-small-spacing;
25
-
26
- &:hover {
27
- color: $thredded-action-color;
28
- }
29
- }
30
- }
31
-
32
- .thredded--new-topic &--topic-navigation--public,
33
- .thredded--topics-index &--topic-navigation--public,
34
- .thredded--new-private-topic &--topic-navigation--private,
35
- .thredded--private-topics-index &--topic-navigation--private {
36
- border-bottom: 1px solid $thredded-action-color;
37
- margin-bottom: -2px;
38
-
39
- a {
40
- @extend %thredded--link;
41
- color: $thredded-action-color;
42
- }
43
- }
44
-
45
- &--topic-navigation--unread {
46
- background-color: $thredded-action-color;
47
- border-radius: 10px;
48
- color: #fff;
49
- font-size: 0.75rem; // 12px
50
- line-height: 1;
51
- margin-left: $thredded-small-spacing;
52
- padding: 2px 6px;
53
- }
@@ -1,22 +0,0 @@
1
- module Thredded
2
- class UserReadsPrivateTopic
3
- def initialize(private_topic, user)
4
- @private_topic = private_topic
5
- @user = user
6
- end
7
-
8
- def run
9
- private_user = Thredded::PrivateUser
10
- .find_by(private_topic_id: private_topic.id, user_id: user.id)
11
- private_user.update_attributes(read: true)
12
- end
13
-
14
- private
15
-
16
- attr_reader :private_topic, :user
17
-
18
- def messageboard
19
- private_topic.messageboard
20
- end
21
- end
22
- end
@@ -1,23 +0,0 @@
1
- module Thredded
2
- class UserResetsPrivateTopicToUnread
3
- def initialize(private_topic, user)
4
- @private_topic = private_topic
5
- @user = user
6
- end
7
-
8
- def run
9
- other_users = Thredded::PrivateUser
10
- .where(private_topic: private_topic)
11
- .where.not(user_id: user.id)
12
- other_users.update_all(read: false)
13
- end
14
-
15
- private
16
-
17
- attr_reader :private_topic, :user
18
-
19
- def messageboard
20
- private_topic.messageboard
21
- end
22
- end
23
- end
@@ -1,14 +0,0 @@
1
- module Thredded
2
- class BaseTopicDecorator < SimpleDelegator
3
- include Rails.application.routes.url_helpers
4
- include ActionView::Helpers::UrlHelper
5
-
6
- def slug
7
- __getobj__.slug.nil? ? id : __getobj__.slug
8
- end
9
-
10
- def original
11
- __getobj__
12
- end
13
- end
14
- end
@@ -1,63 +0,0 @@
1
- module Thredded
2
- class BaseUserTopicDecorator < SimpleDelegator
3
- extend ActiveModel::Naming
4
- include ActiveModel::Conversion
5
-
6
- class << self
7
- # @return [Class<ActiveRecord::Base>]
8
- def topic_class
9
- fail 'Implement in subclass'
10
- end
11
-
12
- def decorator_class
13
- "#{topic_class.name}Decorator".constantize
14
- end
15
-
16
- def decorate_all(user, topics)
17
- topics.map { |topic| new(user, topic) }
18
- end
19
-
20
- def model_name
21
- ActiveModel::Name.new(self, nil, topic_class.name.demodulize)
22
- end
23
- end
24
-
25
- def initialize(user, topic)
26
- @user = user || Thredded::NullUser.new
27
- @topic = self.class.decorator_class.new(topic)
28
- super(@topic)
29
- end
30
-
31
- def to_model
32
- topic
33
- end
34
-
35
- def persisted?
36
- false
37
- end
38
-
39
- def css_class
40
- [read_status_class, topic.css_class].map(&:presence).compact.join(' ')
41
- end
42
-
43
- def read_status_class
44
- if read?
45
- 'thredded--topic--read'
46
- else
47
- 'thredded--topic--unread'
48
- end
49
- end
50
-
51
- def read?
52
- fail 'Subclass responsibility'
53
- end
54
-
55
- def to_ary
56
- [self]
57
- end
58
-
59
- private
60
-
61
- attr_reader :topic, :user
62
- end
63
- end
@@ -1,41 +0,0 @@
1
- module Thredded
2
- class MessageboardDecorator < SimpleDelegator
3
- include ActionView::Helpers::NumberHelper
4
- include ActionView::Helpers::TagHelper
5
-
6
- def initialize(messageboard)
7
- super
8
- @messageboard = messageboard
9
- end
10
-
11
- def original
12
- messageboard
13
- end
14
-
15
- def meta
16
- topics_count = number_to_human(messageboard.topics_count)
17
- posts_count = number_to_human(messageboard.posts_count)
18
-
19
- "#{topics_count} topics / #{posts_count} posts".downcase
20
- end
21
-
22
- def latest_topic
23
- @latest_topic ||= begin
24
- messageboard.topics.order_latest_first.first ||
25
- Thredded::NullTopic.new
26
- end
27
- end
28
-
29
- def latest_user
30
- latest_topic.last_user
31
- end
32
-
33
- def category_options
34
- messageboard.categories.map { |cat| [cat.name, cat.id] }
35
- end
36
-
37
- private
38
-
39
- attr_reader :messageboard
40
- end
41
- end
@@ -1,40 +0,0 @@
1
- module Thredded
2
- class PostDecorator < SimpleDelegator
3
- attr_reader :post
4
-
5
- def initialize(post)
6
- super
7
- @post = post
8
- end
9
-
10
- def user_name
11
- if user
12
- user.to_s
13
- else
14
- 'Anonymous'
15
- end
16
- end
17
-
18
- def original
19
- post
20
- end
21
-
22
- def avatar_url
23
- super.sub(/\Ahttp:/, '')
24
- end
25
-
26
- def to_ary
27
- [self]
28
- end
29
-
30
- private
31
-
32
- def created_at_str
33
- created_at.getutc.to_s
34
- end
35
-
36
- def created_at_utc
37
- created_at.getutc.iso8601
38
- end
39
- end
40
- end
@@ -1,23 +0,0 @@
1
- require 'thredded/base_topic_decorator'
2
-
3
- module Thredded
4
- class PrivateTopicDecorator < SimpleDelegator
5
- def initialize(private_topic)
6
- super Thredded::BaseTopicDecorator.new(private_topic)
7
- end
8
-
9
- def self.model_name
10
- ActiveModel::Name.new(self, nil, 'PrivateTopic')
11
- end
12
-
13
- def to_model
14
- __getobj__
15
- end
16
-
17
- def css_class
18
- classes = []
19
- classes << 'thredded--private-topic'
20
- classes.join(' ')
21
- end
22
- end
23
- end
@@ -1,25 +0,0 @@
1
- require 'thredded/base_topic_decorator'
2
-
3
- module Thredded
4
- class TopicDecorator < SimpleDelegator
5
- def initialize(private_topic)
6
- super(Thredded::BaseTopicDecorator.new(private_topic))
7
- end
8
-
9
- def self.model_name
10
- ActiveModel::Name.new(self, nil, 'Topic')
11
- end
12
-
13
- def css_class
14
- classes = []
15
- classes << 'thredded--topic--locked' if locked?
16
- classes << 'thredded--topic--sticky' if sticky?
17
- classes += ['thredded--topic--category'] + categories.map { |c| "thredded--topic--category--#{c.name}" } if categories.present?
18
- classes.join(' ')
19
- end
20
-
21
- def category_options
22
- messageboard.decorate.category_options
23
- end
24
- end
25
- end
@@ -1,13 +0,0 @@
1
- require 'thredded/base_user_topic_decorator'
2
-
3
- module Thredded
4
- class UserPrivateTopicDecorator < BaseUserTopicDecorator
5
- def self.topic_class
6
- PrivateTopic
7
- end
8
-
9
- def read?
10
- topic.private_users.find_by(user: user).try(:read?)
11
- end
12
- end
13
- end
@@ -1,37 +0,0 @@
1
- require 'thredded/base_user_topic_decorator'
2
-
3
- module Thredded
4
- class UserTopicDecorator < BaseUserTopicDecorator
5
- def self.topic_class
6
- Topic
7
- end
8
-
9
- def farthest_page
10
- read_status.page
11
- end
12
-
13
- def farthest_post
14
- read_status.farthest_post
15
- end
16
-
17
- def read?
18
- topic.posts_count == read_status.posts_count
19
- end
20
-
21
- private
22
-
23
- def read_status
24
- if user.id > 0
25
- @read_status ||= topic.user_topic_reads.select do |reads|
26
- reads.user_id == user.id
27
- end
28
- end
29
-
30
- if @read_status.blank?
31
- Thredded::NullTopicRead.new
32
- else
33
- @read_status.first
34
- end
35
- end
36
- end
37
- end
@@ -1,60 +0,0 @@
1
- module Thredded
2
- class Ability
3
- include ::CanCan::Ability
4
-
5
- def initialize(user)
6
- user ||= Thredded::NullUser.new
7
- user_details = user.thredded_user_detail
8
-
9
- can :manage, :all if user.thredded_admin?
10
-
11
- can :read, Thredded::Messageboard do |messageboard|
12
- Thredded::MessageboardUserPermissions.new(messageboard, user).readable?
13
- end
14
-
15
- can :admin, Thredded::Topic do |topic|
16
- Thredded::TopicUserPermissions.new(topic, user, user_details).adminable?
17
- end
18
-
19
- can :edit, Thredded::Topic do |topic|
20
- Thredded::TopicUserPermissions.new(topic, user, user_details).editable?
21
- end
22
-
23
- can :update, Thredded::Topic do |topic|
24
- Thredded::TopicUserPermissions.new(topic, user, user_details).editable?
25
- end
26
-
27
- can :read, Thredded::Topic do |topic|
28
- Thredded::TopicUserPermissions.new(topic, user, user_details).readable?
29
- end
30
-
31
- can :create, Thredded::Topic do |topic|
32
- Thredded::TopicUserPermissions.new(topic, user, user_details).creatable?
33
- end
34
-
35
- can :manage, Thredded::PrivateTopic do |private_topic|
36
- Thredded::PrivateTopicUserPermissions.new(private_topic, user, user_details).manageable?
37
- end
38
-
39
- can :create, Thredded::PrivateTopic do |private_topic|
40
- Thredded::PrivateTopicUserPermissions.new(private_topic, user, user_details).creatable?
41
- end
42
-
43
- can :read, Thredded::PrivateTopic do |private_topic|
44
- Thredded::PrivateTopicUserPermissions.new(private_topic, user, user_details).readable?
45
- end
46
-
47
- can :edit, Thredded::Post do |post|
48
- Thredded::PostUserPermissions.new(post, user, user_details).editable?
49
- end
50
-
51
- can :manage, Thredded::Post do |post|
52
- Thredded::PostUserPermissions.new(post, user, user_details).manageable?
53
- end
54
-
55
- can :create, Thredded::Post do |post|
56
- Thredded::PostUserPermissions.new(post, user, user_details).creatable?
57
- end
58
- end
59
- end
60
- end
@@ -1,17 +0,0 @@
1
- module Thredded
2
- class NotificationPreference < ActiveRecord::Base
3
- belongs_to :user
4
- belongs_to :messageboard
5
-
6
- validates :user_id, presence: true
7
- validates :messageboard_id, presence: true
8
-
9
- def self.for(user)
10
- where(user_id: user.id)
11
- end
12
-
13
- def self.in(messageboard)
14
- where(messageboard_id: messageboard.id)
15
- end
16
- end
17
- end