thredded 0.8.4 → 0.9.1

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 (110) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +48 -9
  3. data/app/assets/images/thredded/breadcrumb-chevron.svg +1 -1
  4. data/app/assets/images/thredded/follow.svg +1 -1
  5. data/app/assets/images/thredded/moderation.svg +1 -4
  6. data/app/assets/images/thredded/private-messages.svg +1 -4
  7. data/app/assets/images/thredded/settings.svg +1 -4
  8. data/app/assets/images/thredded/unfollow.svg +1 -1
  9. data/app/assets/javascripts/thredded/components/time_stamps.es6 +1 -1
  10. data/app/assets/javascripts/thredded/components/user_preferences_form.es6 +26 -49
  11. data/app/assets/javascripts/thredded/dependencies.js +2 -1
  12. data/app/assets/stylesheets/thredded/base/_grid.scss +4 -4
  13. data/app/assets/stylesheets/thredded/base/_typography.scss +18 -0
  14. data/app/assets/stylesheets/thredded/components/_base.scss +4 -0
  15. data/app/assets/stylesheets/thredded/components/_currently-online.scss +4 -0
  16. data/app/assets/stylesheets/thredded/components/_form-list.scss +5 -0
  17. data/app/assets/stylesheets/thredded/components/_messageboard.scss +3 -0
  18. data/app/assets/stylesheets/thredded/components/_post-form.scss +7 -4
  19. data/app/assets/stylesheets/thredded/components/_post.scss +3 -0
  20. data/app/assets/stylesheets/thredded/components/_topic-delete.scss +3 -0
  21. data/app/assets/stylesheets/thredded/components/_topic-header.scss +20 -0
  22. data/app/assets/stylesheets/thredded/components/_topics.scss +13 -1
  23. data/app/assets/stylesheets/thredded/layout/_main-navigation.scss +1 -1
  24. data/app/assets/stylesheets/thredded/layout/_navigation.scss +3 -1
  25. data/app/assets/stylesheets/thredded/layout/_search-navigation.scss +4 -0
  26. data/app/assets/stylesheets/thredded/layout/_user-navigation.scss +3 -0
  27. data/app/commands/thredded/at_notification_extractor.rb +1 -2
  28. data/app/commands/thredded/autofollow_mentioned_users.rb +0 -1
  29. data/app/commands/thredded/notify_following_users.rb +20 -11
  30. data/app/commands/thredded/notify_private_topic_users.rb +12 -28
  31. data/app/controllers/thredded/application_controller.rb +8 -4
  32. data/app/controllers/thredded/messageboards_controller.rb +2 -2
  33. data/app/controllers/thredded/moderation_controller.rb +12 -13
  34. data/app/controllers/thredded/posts_controller.rb +1 -1
  35. data/app/controllers/thredded/preferences_controller.rb +11 -7
  36. data/app/controllers/thredded/private_topics_controller.rb +13 -9
  37. data/app/controllers/thredded/topics_controller.rb +20 -12
  38. data/app/forms/thredded/user_preferences_form.rb +23 -4
  39. data/app/helpers/thredded/application_helper.rb +11 -1
  40. data/app/mailers/thredded/post_mailer.rb +2 -3
  41. data/app/mailers/thredded/private_topic_mailer.rb +2 -3
  42. data/app/models/concerns/thredded/content_moderation_state.rb +1 -1
  43. data/app/models/concerns/thredded/notifier_preference.rb +18 -0
  44. data/app/models/concerns/thredded/post_common.rb +5 -1
  45. data/{lib → app/models/concerns}/thredded/search_parser.rb +0 -0
  46. data/app/models/concerns/thredded/topic_common.rb +3 -3
  47. data/{lib → app/models/concerns}/thredded/topics_search.rb +2 -3
  48. data/app/models/thredded/messageboard.rb +11 -0
  49. data/app/models/thredded/messageboard_notifications_for_followed_topics.rb +29 -0
  50. data/app/models/thredded/notifications_for_followed_topics.rb +22 -0
  51. data/app/models/thredded/notifications_for_private_topics.rb +21 -0
  52. data/app/models/thredded/post.rb +5 -3
  53. data/app/models/thredded/post_moderation_record.rb +1 -1
  54. data/app/models/thredded/private_post.rb +1 -1
  55. data/app/models/thredded/private_topic.rb +8 -4
  56. data/app/models/thredded/stats.rb +1 -1
  57. data/app/models/thredded/topic.rb +10 -7
  58. data/app/models/thredded/user_detail.rb +1 -1
  59. data/app/models/thredded/user_extender.rb +3 -1
  60. data/app/models/thredded/user_preference.rb +16 -5
  61. data/app/models/thredded/user_private_topic_read_state.rb +1 -1
  62. data/app/models/thredded/user_topic_read_state.rb +1 -1
  63. data/app/notifiers/thredded/base_notifier.rb +28 -0
  64. data/app/notifiers/thredded/email_notifier.rb +34 -0
  65. data/app/policies/thredded/post_policy.rb +3 -4
  66. data/app/policies/thredded/private_post_policy.rb +2 -3
  67. data/app/policies/thredded/topic_policy.rb +1 -2
  68. data/app/view_hooks/thredded/all_view_hooks.rb +0 -3
  69. data/app/view_models/thredded/base_topic_view.rb +0 -1
  70. data/app/view_models/thredded/post_view.rb +0 -1
  71. data/app/view_models/thredded/posts_page_view.rb +1 -4
  72. data/app/view_models/thredded/private_topic_view.rb +3 -1
  73. data/app/view_models/thredded/private_topics_page_view.rb +8 -3
  74. data/app/view_models/thredded/topic_posts_page_view.rb +1 -2
  75. data/app/view_models/thredded/topic_view.rb +3 -3
  76. data/app/view_models/thredded/topics_page_view.rb +0 -1
  77. data/app/views/thredded/messageboard_groups/new.html.erb +5 -1
  78. data/app/views/thredded/messageboards/_form.html.erb +7 -2
  79. data/app/views/thredded/posts/_form.html.erb +2 -1
  80. data/app/views/thredded/posts/edit.html.erb +3 -2
  81. data/app/views/thredded/posts_common/_form.html.erb +6 -2
  82. data/app/views/thredded/preferences/_form.html.erb +41 -29
  83. data/app/views/thredded/private_posts/_form.html.erb +1 -0
  84. data/app/views/thredded/private_topics/_form.html.erb +3 -2
  85. data/app/views/thredded/private_topics/_header.html.erb +4 -0
  86. data/app/views/thredded/private_topics/_no_private_topics.html.erb +1 -1
  87. data/app/views/thredded/private_topics/_private_topic.html.erb +5 -2
  88. data/app/views/thredded/private_topics/edit.html.erb +2 -1
  89. data/app/views/thredded/private_topics/header/_participant.html.erb +1 -0
  90. data/app/views/thredded/private_topics/index.html.erb +6 -5
  91. data/app/views/thredded/private_topics/new.html.erb +0 -1
  92. data/app/views/thredded/private_topics/private_topic/_participant.html.erb +1 -0
  93. data/app/views/thredded/private_topics/show.html.erb +1 -3
  94. data/app/views/thredded/topics/_form.html.erb +1 -1
  95. data/app/views/thredded/topics/show.html.erb +4 -5
  96. data/config/locales/en.yml +22 -9
  97. data/config/locales/pt-BR.yml +22 -10
  98. data/config/routes.rb +1 -1
  99. data/db/migrate/20160329231848_create_thredded.rb +23 -3
  100. data/db/upgrade_migrations/20160410111522_upgrade_v0_2_to_v0_3.rb +1 -1
  101. data/db/upgrade_migrations/20161113161801_upgrade_v0_8_to_v0_9.rb +56 -0
  102. data/lib/generators/thredded/install/templates/initializer.rb +28 -0
  103. data/lib/thredded.rb +32 -8
  104. data/lib/thredded/content_formatter.rb +3 -2
  105. data/lib/thredded/database_seeder.rb +11 -8
  106. data/lib/thredded/db_tools.rb +82 -0
  107. data/lib/thredded/html_pipeline/wrap_iframes_filter.rb +12 -0
  108. data/lib/thredded/version.rb +1 -1
  109. metadata +18 -8
  110. data/app/models/thredded/null_preference.rb +0 -16
@@ -108,3 +108,31 @@ Thredded.layout = 'thredded/application'
108
108
  # 'hi'
109
109
  # end
110
110
  # end
111
+
112
+ # ==> Topic following
113
+ #
114
+ # By default, a user will be subscribed to a topic they've created. Uncomment this to not subscribe them:
115
+ #
116
+ # Thredded.auto_follow_when_creating_topic = false
117
+ #
118
+ # By default, a user will be subscribed to (follow) a topic they post in. Uncomment this to not subscribe them:
119
+ #
120
+ # Thredded.auto_follow_when_posting_in_topic = false
121
+ #
122
+ # By default, a user will be subscribed to the topic they get @-mentioned in.
123
+ # Individual users can disable this in the Notification Settings.
124
+ # To change the default for all users, simply change the default value of the `follow_topics_on_mention` column
125
+ # of the `thredded_user_preferences` and `thredded_user_messageboard_preferences` tables.
126
+
127
+ # ==> Notifiers
128
+ #
129
+ # Change how users can choose to be notified, by adding notifiers here, or removing the initializer altogether
130
+ #
131
+ # default:
132
+ # Thredded.notifiers = [Thredded::EmailNotifier.new]
133
+ #
134
+ # none:
135
+ # Thredded.notifiers = []
136
+ #
137
+ # add in (must install separate gem (under development) as well):
138
+ # Thredded.notifiers = [Thredded::EmailNotifier.new, Thredded::PushoverNotifier.new(ENV['PUSHOVER_APP_ID'])]
@@ -19,6 +19,7 @@ require 'inline_svg'
19
19
  require 'thredded/html_pipeline/at_mention_filter'
20
20
  require 'thredded/html_pipeline/autolink_filter'
21
21
  require 'thredded/html_pipeline/kramdown_filter'
22
+ require 'thredded/html_pipeline/wrap_iframes_filter'
22
23
 
23
24
  # Asset compilation
24
25
  require 'autoprefixer-rails'
@@ -32,6 +33,9 @@ require 'thredded/version'
32
33
  require 'thredded/engine'
33
34
  require 'thredded/errors'
34
35
 
36
+ require 'thredded/view_hooks/config'
37
+ require 'thredded/view_hooks/renderer'
38
+
35
39
  # Require Thredded::ContentFormatter explicitly so that it doesn't need to be required if used in the initializer.
36
40
  require 'thredded/content_formatter'
37
41
 
@@ -61,12 +65,23 @@ module Thredded
61
65
  # @return [Boolean] Whether posts that are pending moderation are visible to regular users.
62
66
  mattr_accessor :content_visible_while_pending_moderation
63
67
 
68
+ # @return [Array] The notifiers, by default just the EmailNotifier
69
+ mattr_accessor :notifiers
70
+
64
71
  # @return [Boolean] Whether users that are following a topic are listed on topic page.
65
72
  mattr_accessor :show_topic_followers
66
73
 
67
74
  # @return [Symbol] The name of the method used by Thredded to display users
68
75
  mattr_accessor :user_display_name_method
69
76
 
77
+ # @return [Boolean] Whether the user should get subscribed to a new topic they've created.
78
+ mattr_accessor :auto_follow_when_creating_topic
79
+ self.auto_follow_when_creating_topic = true
80
+
81
+ # @return [Boolean] Whether the user should get subscribed to a topic after posting in it.
82
+ mattr_accessor :auto_follow_when_posting_in_topic
83
+ self.auto_follow_when_posting_in_topic = true
84
+
70
85
  self.active_user_threshold = 5.minutes
71
86
  self.admin_column = :admin
72
87
  self.avatar_url = ->(user) { Gravatar.src(user.email, 128, 'mm') }
@@ -87,6 +102,15 @@ module Thredded
87
102
  instance
88
103
  end
89
104
 
105
+ def self.notifiers
106
+ @@notifiers ||= [Thredded::EmailNotifier.new] # rubocop:disable Style/ClassVars
107
+ end
108
+
109
+ def self.notifiers=(notifiers)
110
+ notifiers.each { |notifier| BaseNotifier.validate_notifier(notifier) }
111
+ @@notifiers = notifiers # rubocop:disable Style/ClassVars
112
+ end
113
+
90
114
  def self.user_display_name_method
91
115
  @@user_display_name_method || user_name_column
92
116
  end
@@ -103,14 +127,14 @@ module Thredded
103
127
 
104
128
  # @return [Class<Thredded::UserExtender>] the user class from the host application.
105
129
  def self.user_class
106
- fail 'Please use a string instead of a class' if @@user_class.is_a?(Class)
107
-
108
- if @@user_class.is_a?(String)
109
- begin
110
- Object.const_get(@@user_class)
111
- rescue NameError
112
- @@user_class.constantize
113
- end
130
+ # This is nil before the initializer is installed.
131
+ return nil if @@user_class.nil?
132
+ fail 'Please use a String instead of a Class' if @@user_class.is_a?(Class)
133
+ fail "user_class must be a String, got #{@@user_class.inspect}" unless @@user_class.is_a?(String)
134
+ begin
135
+ Object.const_get(@@user_class)
136
+ rescue NameError
137
+ @@user_class.constantize
114
138
  end
115
139
  end
116
140
 
@@ -25,11 +25,12 @@ module Thredded
25
25
  'a' => %w(href rel),
26
26
  'iframe' => %w(src width height frameborder allowfullscreen sandbox seamless),
27
27
  'span' => %w(class),
28
+ 'div' => %w(class)
28
29
  },
29
30
  add_attributes: {
30
31
  'iframe' => {
31
32
  'seamless' => 'seamless',
32
- 'sandbox' => 'allow-same-origin allow-scripts allow-forms',
33
+ 'sandbox' => 'allow-same-origin allow-scripts allow-forms allow-popups allow-popups-to-escape-sandbox',
33
34
  }
34
35
  },
35
36
  protocols: {
@@ -63,7 +64,7 @@ module Thredded
63
64
  Thredded::HtmlPipeline::AutolinkFilter,
64
65
  HTML::Pipeline::EmojiFilter,
65
66
  Thredded::HtmlPipeline::AtMentionFilter,
66
- HTML::Pipeline::SanitizationFilter,
67
+ Thredded::HtmlPipeline::WrapIframesFilter,
67
68
  ]
68
69
 
69
70
  # Filters that sanitize the resulting HTML.
@@ -231,12 +231,14 @@ module Thredded
231
231
  MODEL_CLASS = PrivateTopic
232
232
 
233
233
  def create(count: 1)
234
- FactoryGirl.create_list(
235
- :private_topic, count,
236
- user: seeder.users[1..-1].sample,
237
- last_user: seeder.users.sample,
238
- users: [seeder.first_user]
239
- )
234
+ Array.new(count) do
235
+ FactoryGirl.create(
236
+ :private_topic,
237
+ user: seeder.users[1..-1].sample,
238
+ last_user: seeder.users.sample,
239
+ users: [seeder.first_user, *seeder.users.sample(1 + rand(3))]
240
+ )
241
+ end
240
242
  end
241
243
  end
242
244
 
@@ -274,8 +276,9 @@ module Thredded
274
276
  def create(count: (1..1))
275
277
  log "Creating #{count} additional posts in each private topic..."
276
278
  seeder.private_topics.flat_map do |topic|
277
- (count.min + rand(count.max + 1)).times do
278
- FactoryGirl.create(:private_post, postable: topic, user: seeder.users.sample)
279
+ (count.min + rand(count.max + 1)).times do |i|
280
+ author = i.zero? ? topic.user : topic.users.sample
281
+ FactoryGirl.create(:private_post, postable: topic, user: author)
279
282
  end
280
283
  end
281
284
  end
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+ module Thredded
3
+ module DbTools
4
+ class << self
5
+ MIGRATION_SPEC_SOURCE_VERSION = 'v0.8'
6
+
7
+ def dump_file
8
+ File.expand_path("../../../spec/migration/#{MIGRATION_SPEC_SOURCE_VERSION}.#{adapter}.dump", __FILE__)
9
+ end
10
+
11
+ def dump(to = dump_file)
12
+ case adapter
13
+ when /sqlite/i
14
+ system "sqlite3 #{Rails.root.join(database)} .dump > #{to}"
15
+ when /postgres/i
16
+ cmd = "pg_dump --host #{host} --username #{username} --verbose --clean --no-owner --no-acl --format=c " \
17
+ "#{database} > #{to}"
18
+ system cmd
19
+ when /mysql/i
20
+ system("mysqldump --user #{username} -p#{password} #{database} > #{to}")
21
+ end
22
+ end
23
+
24
+ def restore(from = dump_file)
25
+ case adapter
26
+ when /postgres/i
27
+ cmd = [
28
+ "pg_restore --verbose --host #{host}",
29
+ "--username #{username}",
30
+ ' --clean --no-owner --no-acl ',
31
+ " --dbname #{database} #{from}",
32
+ " > #{Rails.root.join('log/restore.log')}"
33
+ ].join(' ')
34
+ system cmd
35
+ when /mysql/i, /sqlite/i
36
+ connection = ActiveRecord::Base.connection
37
+ statements = File.read(from).split(/;$/)
38
+ statements.pop
39
+ silence_active_record do
40
+ ActiveRecord::Base.transaction do
41
+ statements.each do |statement|
42
+ connection.execute(statement) unless statement =~ /(BEGIN TRANSACTION|COMMIT)/
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+ def silence_active_record
50
+ was = ActiveRecord::Base.logger.level
51
+ ActiveRecord::Base.logger.level = Logger::WARN
52
+ yield
53
+ ensure
54
+ ActiveRecord::Base.logger.level = was
55
+ end
56
+
57
+ def config
58
+ @config ||= Rails.configuration.database_configuration[Rails.env]
59
+ end
60
+
61
+ def adapter
62
+ config['adapter']
63
+ end
64
+
65
+ def database
66
+ config['database']
67
+ end
68
+
69
+ def username
70
+ config['username']
71
+ end
72
+
73
+ def password
74
+ config['password']
75
+ end
76
+
77
+ def host
78
+ config['host']
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+ module Thredded
3
+ module HtmlPipeline
4
+ # Wraps iframes with a <div class="thredded--embed-16-by-9"/>
5
+ class WrapIframesFilter < ::HTML::Pipeline::Filter
6
+ def call
7
+ doc.css('iframe').wrap('<div class="thredded--embed-16-by-9"/>')
8
+ doc
9
+ end
10
+ end
11
+ end
12
+ end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Thredded
3
- VERSION = '0.8.4'
3
+ VERSION = '0.9.1'
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thredded
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.4
4
+ version: 0.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel Oliveira
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-11-19 00:00:00.000000000 Z
12
+ date: 2016-11-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: pundit
@@ -451,14 +451,14 @@ dependencies:
451
451
  requirements:
452
452
  - - '='
453
453
  - !ruby/object:Gem::Version
454
- version: 0.42.0
454
+ version: 0.45.0
455
455
  type: :development
456
456
  prerelease: false
457
457
  version_requirements: !ruby/object:Gem::Requirement
458
458
  requirements:
459
459
  - - '='
460
460
  - !ruby/object:Gem::Version
461
- version: 0.42.0
461
+ version: 0.45.0
462
462
  - !ruby/object:Gem::Dependency
463
463
  name: rails-i18n
464
464
  requirement: !ruby/object:Gem::Requirement
@@ -713,14 +713,19 @@ files:
713
713
  - app/models/concerns/thredded/content_moderation_state.rb
714
714
  - app/models/concerns/thredded/friendly_id_reserved_words_and_pagination.rb
715
715
  - app/models/concerns/thredded/moderation_state.rb
716
+ - app/models/concerns/thredded/notifier_preference.rb
716
717
  - app/models/concerns/thredded/post_common.rb
718
+ - app/models/concerns/thredded/search_parser.rb
717
719
  - app/models/concerns/thredded/topic_common.rb
720
+ - app/models/concerns/thredded/topics_search.rb
718
721
  - app/models/concerns/thredded/user_topic_read_state_common.rb
719
722
  - app/models/thredded/category.rb
720
723
  - app/models/thredded/messageboard.rb
721
724
  - app/models/thredded/messageboard_group.rb
725
+ - app/models/thredded/messageboard_notifications_for_followed_topics.rb
722
726
  - app/models/thredded/messageboard_user.rb
723
- - app/models/thredded/null_preference.rb
727
+ - app/models/thredded/notifications_for_followed_topics.rb
728
+ - app/models/thredded/notifications_for_private_topics.rb
724
729
  - app/models/thredded/null_user.rb
725
730
  - app/models/thredded/null_user_topic_read_state.rb
726
731
  - app/models/thredded/post.rb
@@ -747,6 +752,8 @@ files:
747
752
  - app/models/thredded/user_private_topic_read_state.rb
748
753
  - app/models/thredded/user_topic_follow.rb
749
754
  - app/models/thredded/user_topic_read_state.rb
755
+ - app/notifiers/thredded/base_notifier.rb
756
+ - app/notifiers/thredded/email_notifier.rb
750
757
  - app/policies/thredded/messageboard_group_policy.rb
751
758
  - app/policies/thredded/messageboard_policy.rb
752
759
  - app/policies/thredded/post_policy.rb
@@ -821,8 +828,10 @@ files:
821
828
  - app/views/thredded/private_topics/_no_private_topics.html.erb
822
829
  - app/views/thredded/private_topics/_private_topic.html.erb
823
830
  - app/views/thredded/private_topics/edit.html.erb
831
+ - app/views/thredded/private_topics/header/_participant.html.erb
824
832
  - app/views/thredded/private_topics/index.html.erb
825
833
  - app/views/thredded/private_topics/new.html.erb
834
+ - app/views/thredded/private_topics/private_topic/_participant.html.erb
826
835
  - app/views/thredded/private_topics/show.html.erb
827
836
  - app/views/thredded/search/_form.html.erb
828
837
  - app/views/thredded/shared/_breadcrumbs.html.erb
@@ -865,6 +874,7 @@ files:
865
874
  - db/upgrade_migrations/20160611094616_upgrade_v0_5_to_v0_6.rb
866
875
  - db/upgrade_migrations/20160723012349_upgrade_v0_6_to_v0_7.rb
867
876
  - db/upgrade_migrations/20161019150201_upgrade_v0_7_to_v0_8.rb
877
+ - db/upgrade_migrations/20161113161801_upgrade_v0_8_to_v0_9.rb
868
878
  - lib/generators/thredded/install/USAGE
869
879
  - lib/generators/thredded/install/install_generator.rb
870
880
  - lib/generators/thredded/install/templates/initializer.rb
@@ -872,13 +882,13 @@ files:
872
882
  - lib/thredded.rb
873
883
  - lib/thredded/content_formatter.rb
874
884
  - lib/thredded/database_seeder.rb
885
+ - lib/thredded/db_tools.rb
875
886
  - lib/thredded/engine.rb
876
887
  - lib/thredded/errors.rb
877
888
  - lib/thredded/html_pipeline/at_mention_filter.rb
878
889
  - lib/thredded/html_pipeline/autolink_filter.rb
879
890
  - lib/thredded/html_pipeline/kramdown_filter.rb
880
- - lib/thredded/search_parser.rb
881
- - lib/thredded/topics_search.rb
891
+ - lib/thredded/html_pipeline/wrap_iframes_filter.rb
882
892
  - lib/thredded/version.rb
883
893
  - lib/thredded/view_hooks/config.rb
884
894
  - lib/thredded/view_hooks/renderer.rb
@@ -903,7 +913,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
903
913
  version: '0'
904
914
  requirements: []
905
915
  rubyforge_project:
906
- rubygems_version: 2.6.8
916
+ rubygems_version: 2.5.2
907
917
  signing_key:
908
918
  specification_version: 4
909
919
  summary: The best Rails forums engine ever.
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
- module Thredded
3
- class NullPreference
4
- def follow_topics_on_mention
5
- true
6
- end
7
-
8
- def notify_on_message
9
- true
10
- end
11
-
12
- def followed_topic_emails
13
- true
14
- end
15
- end
16
- end