thredded 0.14.1 → 0.14.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: e51fb06c46a1ac737586fd08eba81d5b6ae89859
4
- data.tar.gz: 90d303e8f71a40f43933563765ca31c66e46db64
2
+ SHA256:
3
+ metadata.gz: 7479689d3c4544cbb07114f0b5d0913b9e95d129a698843547268931af3248ba
4
+ data.tar.gz: 4f89703ac0b690feb520ab9b2eb757e09bd4e0bd1e81733ce937e2edbde7b29a
5
5
  SHA512:
6
- metadata.gz: ef37394887b6fdf54d90ac4f8827485aac03e771ba1006b6a909a79b424923455c3df3b5079032c26f05be5c3210f82ff2c8b65c9ab9be5827f38a6fca357b60
7
- data.tar.gz: a7ba0cefb485cbdd85a5ff470faa8032bf31b5b11e50a0cf8a6a96e27d03b10acb27b7661c7af78c05c02103126591746d2035e7e0dcc913876f6fcee5e228cb
6
+ metadata.gz: aeed2175ca8e77c44b53f7c35538e8282981212a0d889343c071ab481599cd3c17082daf07a27ae29697c46d54203649bac2e77e79e973bc63106fe08fe268d2
7
+ data.tar.gz: 40fa290e20a92388903b6e557a7a45b8fd1e7c862684a5ba253613820727646f3be39080bbb9c4f05616b511ab064c6af8d42a7a7debfadd7858eab568285d0f
data/README.md CHANGED
@@ -98,7 +98,7 @@ Then, see the rest of this Readme for more information about using and customizi
98
98
  Add the gem to your Gemfile:
99
99
 
100
100
  ```ruby
101
- gem 'thredded', '~> 0.14.1'
101
+ gem 'thredded', '~> 0.14.2'
102
102
  ```
103
103
 
104
104
  Add the Thredded [initializer] to your parent app by running the install generator.
@@ -558,6 +558,28 @@ To disable moderation, e.g. if you run internal forums that do not need moderati
558
558
  change_column_default :thredded_user_details, :moderation_state, 1 # approved
559
559
  ```
560
560
 
561
+ ### Requiring authentication to access Thredded
562
+
563
+ To require users to be authenticated to access any part of Thredded, add the following to your initializer:
564
+
565
+ ```ruby
566
+ # config/initializers/thredded.rb
567
+ Rails.application.config.to_prepare do
568
+ Thredded::ApplicationController.module_eval do
569
+ # Require authentication to access the forums:
570
+ before_action :thredded_require_login!
571
+
572
+ # You may also want to render a login form after the
573
+ # "Please sign in first" message:
574
+ rescue_from Thredded::Errors::LoginRequired do |exception|
575
+ # Place the code for rendering the login form here, for example:
576
+ @message = exception.message
577
+ render template: 'sessions/new', status: :forbidden
578
+ end
579
+ end
580
+ end
581
+ ```
582
+
561
583
  ## Plugins
562
584
 
563
585
  The following official plugins are available for Thredded:
@@ -7,10 +7,13 @@
7
7
  Thredded.UserTextcomplete = {
8
8
  DROPDOWN_CLASS_NAME: 'thredded--textcomplete-dropdown',
9
9
 
10
- formatUser({avatar_url, name}) {
10
+ formatUser({avatar_url, name, display_name}) {
11
11
  return "<div class='thredded--textcomplete-user-result'>" +
12
12
  `<img class='thredded--textcomplete-user-result__avatar' src='${Thredded.escapeHtml(avatar_url)}' >` +
13
13
  `<span class='thredded--textcomplete-user-result__name'>${Thredded.escapeHtml(name)}</span>` +
14
+ (name !== display_name && display_name ?
15
+ `<span class='thredded--textcomplete-user-result__display_name'>${Thredded.escapeHtml(display_name)}</span>` :
16
+ '') +
14
17
  '</div>';
15
18
  },
16
19
 
@@ -29,8 +32,8 @@
29
32
  callback([]);
30
33
  return;
31
34
  }
32
- callback(JSON.parse(request.responseText).results.map(({avatar_url, id, name}) => {
33
- return {avatar_url, id, name, match};
35
+ callback(JSON.parse(request.responseText).results.map(({avatar_url, id, display_name, name}) => {
36
+ return {avatar_url, id, name, display_name, match};
34
37
  }));
35
38
  };
36
39
  request.send();
@@ -45,4 +45,13 @@ ul.thredded--textcomplete-dropdown {
45
45
  display: inline-block;
46
46
  margin-left: 0.6rem
47
47
  }
48
+ &__display_name {
49
+ display: inline-block;
50
+ margin-left: 0.4rem;
51
+
52
+ color: $thredded-secondary-text-color;
53
+ .textcomplete-item.active & {
54
+ color: invert($thredded-secondary-text-color);
55
+ }
56
+ }
48
57
  }
@@ -8,11 +8,18 @@ module Thredded
8
8
  authorize_creating Thredded::PrivateTopicForm.new(user: thredded_current_user).private_topic
9
9
  users = params.key?(:q) ? users_by_prefix : users_by_ids
10
10
  render json: {
11
- results: users.map do |user|
12
- { id: user.id,
13
- name: user.send(Thredded.user_name_column),
14
- avatar_url: Thredded.avatar_url.call(user) }
15
- end
11
+ results: users.map { |user| user_to_autocomplete_result(user) }
12
+ }
13
+ end
14
+
15
+ protected
16
+
17
+ def user_to_autocomplete_result(user)
18
+ {
19
+ id: user.id,
20
+ name: user.send(Thredded.user_name_column),
21
+ display_name: user.send(Thredded.user_display_name_method),
22
+ avatar_url: Thredded.avatar_url.call(user)
16
23
  }
17
24
  end
18
25
 
@@ -77,7 +77,7 @@ module Thredded
77
77
  scope :ordered_by_created_at_asc, ->() { order(created_at: :asc) }
78
78
  scope :ordered_by_last_post_at_desc, ->() {
79
79
  joins('LEFT JOIN thredded_topics AS last_topics ON thredded_messageboards.last_topic_id = last_topics.id')
80
- .order('COALESCE(last_topics.last_post_at, thredded_messageboards.created_at) DESC')
80
+ .order(Arel.sql('COALESCE(last_topics.last_post_at, thredded_messageboards.created_at) DESC'))
81
81
  }
82
82
  scope :ordered_by_topics_count_desc, ->() {
83
83
  order(topics_count: :desc)
@@ -11,7 +11,8 @@ module Thredded
11
11
  def self.grouped(messageboard_scope)
12
12
  messageboard_scope.preload(last_topic: [:last_user])
13
13
  .eager_load(:group)
14
- .order('coalesce(thredded_messageboard_groups.position, 0) asc, thredded_messageboard_groups.id asc').ordered
14
+ .order(Arel.sql('COALESCE(thredded_messageboard_groups.position, 0) ASC, thredded_messageboard_groups.id ASC'))
15
+ .ordered
15
16
  .group_by(&:group)
16
17
  .map { |(group, messageboards)| MessageboardGroupView.new(group, messageboards) }
17
18
  end
@@ -5,9 +5,11 @@ require 'thredded/base_migration'
5
5
  class UpgradeV09ToV010 < Thredded::BaseMigration
6
6
  def up
7
7
  remove_foreign_key :thredded_messageboard_users, :thredded_messageboards
8
- add_foreign_key :thredded_messageboard_users, :thredded_messageboards, on_delete: :cascade
8
+ add_foreign_key :thredded_messageboard_users, :thredded_messageboards,
9
+ column: :thredded_messageboard_id, on_delete: :cascade
9
10
  remove_foreign_key :thredded_messageboard_users, :thredded_user_details
10
- add_foreign_key :thredded_messageboard_users, :thredded_user_details, on_delete: :cascade
11
+ add_foreign_key :thredded_messageboard_users, :thredded_user_details,
12
+ column: :thredded_user_detail_id, on_delete: :cascade
11
13
 
12
14
  create_table :thredded_user_post_notifications do |t|
13
15
  t.references :user, null: false, index: false, type: user_id_type
@@ -5,6 +5,26 @@ module Thredded
5
5
  class << self
6
6
  MIGRATION_SPEC_SOURCE_VERSION = 'v0.8'
7
7
 
8
+ # Runs the migrations in the given paths.
9
+ def migrate(paths:, quiet:, &filter)
10
+ verbose_was = ActiveRecord::Migration.verbose
11
+ ActiveRecord::Migration.verbose = !quiet
12
+ migrate = lambda do
13
+ if Rails::VERSION::STRING >= '5.2'
14
+ ActiveRecord::MigrationContext.new(paths).migrate(nil, &filter)
15
+ else
16
+ ActiveRecord::Migrator.migrate(paths, &filter)
17
+ end
18
+ end
19
+ if quiet
20
+ silence_active_record(&migrate)
21
+ else
22
+ migrate.call
23
+ end
24
+ ensure
25
+ ActiveRecord::Migration.verbose = verbose_was
26
+ end
27
+
8
28
  def dump_file
9
29
  File.expand_path("../../../spec/migration/#{MIGRATION_SPEC_SOURCE_VERSION}.#{adapter}.dump", __FILE__)
10
30
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Thredded
4
- VERSION = '0.14.1'
4
+ VERSION = '0.14.2'
5
5
  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.14.1
4
+ version: 0.14.2
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: 2018-01-10 00:00:00.000000000 Z
12
+ date: 2018-02-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: pundit
@@ -31,14 +31,14 @@ dependencies:
31
31
  requirements:
32
32
  - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: 1.2.0
34
+ version: 1.3.0
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - ">="
40
40
  - !ruby/object:Gem::Version
41
- version: 1.2.0
41
+ version: 1.3.0
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: db_text_search
44
44
  requirement: !ruby/object:Gem::Requirement
@@ -497,16 +497,16 @@ dependencies:
497
497
  name: pg
498
498
  requirement: !ruby/object:Gem::Requirement
499
499
  requirements:
500
- - - "~>"
500
+ - - ">="
501
501
  - !ruby/object:Gem::Version
502
- version: '0.21'
502
+ version: '0'
503
503
  type: :development
504
504
  prerelease: false
505
505
  version_requirements: !ruby/object:Gem::Requirement
506
506
  requirements:
507
- - - "~>"
507
+ - - ">="
508
508
  - !ruby/object:Gem::Version
509
- version: '0.21'
509
+ version: '0'
510
510
  - !ruby/object:Gem::Dependency
511
511
  name: sqlite3
512
512
  requirement: !ruby/object:Gem::Requirement
@@ -1040,7 +1040,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1040
1040
  version: '0'
1041
1041
  requirements: []
1042
1042
  rubyforge_project:
1043
- rubygems_version: 2.6.12
1043
+ rubygems_version: 2.7.3
1044
1044
  signing_key:
1045
1045
  specification_version: 4
1046
1046
  summary: The best Rails forums engine ever.