2019-05-03 08:17:27 +10:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
source "https://rubygems.org"
|
2014-08-22 11:38:31 +10:00
|
|
|
# if there is a super emergency and rubygems is playing up, try
|
|
|
|
#source 'http://production.cf.rubygems.org'
|
2017-04-25 14:55:18 -07:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "bootsnap", require: false, platform: :mri
|
2013-02-05 14:16:51 -05:00
|
|
|
|
2024-06-20 10:33:01 +02:00
|
|
|
gem "actionmailer", "~> 7.1.0"
|
|
|
|
gem "actionpack", "~> 7.1.0"
|
|
|
|
gem "actionview", "~> 7.1.0"
|
|
|
|
gem "activemodel", "~> 7.1.0"
|
|
|
|
gem "activerecord", "~> 7.1.0"
|
|
|
|
gem "activesupport", "~> 7.1.0"
|
|
|
|
gem "railties", "~> 7.1.0"
|
2023-11-28 09:36:23 +00:00
|
|
|
gem "sprockets-rails"
|
2014-10-14 20:05:38 -07:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "json"
|
2020-03-24 15:21:50 +11:00
|
|
|
|
2022-04-20 22:17:29 +01:00
|
|
|
# TODO: At the moment Discourse does not work with Sprockets 4, we would need to correct internals
|
2023-01-13 10:52:05 +00:00
|
|
|
# We intend to drop sprockets rather than upgrade to 4.x
|
2024-04-04 04:58:19 +02:00
|
|
|
gem "sprockets", "~> 3.7.3"
|
2019-12-10 12:31:16 +11:00
|
|
|
|
2019-10-07 00:33:37 -04:00
|
|
|
# this will eventually be added to rails,
|
|
|
|
# allows us to precompile all our templates in the unicorn master
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "actionview_precompiler", require: false
|
2019-10-07 00:33:37 -04:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "discourse-seed-fu"
|
2019-02-06 17:33:36 +11:00
|
|
|
|
2023-03-24 20:10:28 +01:00
|
|
|
gem "mail"
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "mini_mime"
|
|
|
|
gem "mini_suffix"
|
2014-08-24 00:43:08 -07:00
|
|
|
|
2024-04-19 03:22:12 -04:00
|
|
|
# config/initializers/006-mini_profiler.rb depends upon the RedisClient#call.
|
|
|
|
# Rework this when upgrading to redis client 5.0 and above.
|
|
|
|
gem "redis", "< 5.0"
|
2019-12-12 13:35:43 +11:00
|
|
|
|
|
|
|
# This is explicitly used by Sidekiq and is an optional dependency.
|
|
|
|
# We tell Sidekiq to use the namespace "sidekiq" which triggers this
|
|
|
|
# gem to be used. There is no explicit dependency in sidekiq cause
|
|
|
|
# redis namespace support is optional
|
|
|
|
# We already namespace stuff in DiscourseRedis, so we should consider
|
|
|
|
# just using a single implementation in core vs having 2 namespace implementations
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "redis-namespace"
|
2013-07-21 10:56:48 +10:00
|
|
|
|
2019-12-06 13:00:16 +11:00
|
|
|
# NOTE: AM serializer gets a lot slower with recent updates
|
|
|
|
# we used an old branch which is the fastest one out there
|
|
|
|
# are long term goal here is to fork this gem so we have a
|
|
|
|
# better maintained living fork
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "active_model_serializers", "~> 0.8.3"
|
2013-11-28 17:20:56 -05:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "http_accept_language", require: false
|
2016-02-06 11:49:39 -08:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "discourse-fonts", require: "discourse_fonts"
|
2019-12-06 13:00:16 +11:00
|
|
|
|
2023-06-30 08:14:16 +08:00
|
|
|
gem "message_bus"
|
2015-10-12 17:26:20 +11:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "rails_multisite"
|
2013-02-09 12:04:52 -05:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "fastimage"
|
2017-08-07 10:32:35 +02:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "aws-sdk-s3", require: false
|
|
|
|
gem "aws-sdk-sns", require: false
|
|
|
|
gem "excon", require: false
|
|
|
|
gem "unf", require: false
|
2013-02-28 14:31:39 -05:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "email_reply_trimmer"
|
2015-12-10 13:28:52 +05:30
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "image_optim"
|
|
|
|
gem "multi_json"
|
|
|
|
gem "mustache"
|
|
|
|
gem "nokogiri"
|
|
|
|
gem "loofah"
|
|
|
|
gem "css_parser", require: false
|
2017-06-08 18:02:30 -04:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "omniauth"
|
|
|
|
gem "omniauth-facebook"
|
|
|
|
gem "omniauth-twitter"
|
|
|
|
gem "omniauth-github"
|
2014-09-03 12:53:22 +10:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "omniauth-oauth2", require: false
|
2016-01-11 18:17:13 +11:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "omniauth-google-oauth2"
|
2019-04-29 15:47:05 +10:00
|
|
|
|
2023-06-30 01:39:55 +02:00
|
|
|
gem "oj"
|
2021-09-02 11:01:54 +08:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "pg"
|
|
|
|
gem "mini_sql"
|
2024-04-24 13:03:35 +01:00
|
|
|
gem "pry-rails", require: false
|
|
|
|
gem "pry-byebug", require: false
|
2023-02-16 18:15:56 +03:00
|
|
|
gem "rtlcss", require: false
|
2024-06-17 18:21:04 +02:00
|
|
|
gem "messageformat-wrapper", require: false
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "rake"
|
2013-07-21 10:56:48 +10:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "thor", require: false
|
|
|
|
gem "diffy", require: false
|
|
|
|
gem "rinku"
|
|
|
|
gem "sidekiq"
|
|
|
|
gem "mini_scheduler"
|
2014-04-17 15:57:17 +10:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "execjs", require: false
|
2024-09-09 18:41:12 +10:00
|
|
|
gem "mini_racer"
|
2019-12-06 13:00:16 +11:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "highline", require: false
|
2019-12-06 13:00:16 +11:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "rack"
|
2020-01-13 18:07:16 +11:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "rack-protection" # security
|
|
|
|
gem "cbor", require: false
|
|
|
|
gem "cose", require: false
|
|
|
|
gem "addressable"
|
|
|
|
gem "json_schemer"
|
2013-02-05 14:16:51 -05:00
|
|
|
|
2022-10-12 15:22:22 +02:00
|
|
|
gem "net-smtp", require: false
|
|
|
|
gem "net-imap", require: false
|
|
|
|
gem "net-pop", require: false
|
|
|
|
gem "digest", require: false
|
2022-02-03 05:25:29 +00:00
|
|
|
|
2017-08-07 10:32:35 +02:00
|
|
|
# Gems used only for assets and not required in production environments by default.
|
|
|
|
# Allow everywhere for now cause we are allowing asset debugging in production
|
2013-02-05 14:16:51 -05:00
|
|
|
group :assets do
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "uglifier"
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|
|
|
|
|
2013-02-13 11:32:18 +01:00
|
|
|
group :test do
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "capybara", require: false
|
|
|
|
gem "webmock", require: false
|
|
|
|
gem "fakeweb", require: false
|
|
|
|
gem "simplecov", require: false
|
2023-10-30 15:52:08 -04:00
|
|
|
gem "selenium-webdriver", "~> 4.14", require: false
|
2023-12-07 23:46:20 +01:00
|
|
|
gem "selenium-devtools", require: false
|
2019-04-19 08:52:31 +00:00
|
|
|
gem "test-prof"
|
2023-06-20 11:49:22 +10:00
|
|
|
gem "rails-dom-testing", require: false
|
2023-08-23 11:18:33 +10:00
|
|
|
gem "minio_runner", require: false
|
2013-02-13 11:32:18 +01:00
|
|
|
end
|
|
|
|
|
2013-02-05 14:16:51 -05:00
|
|
|
group :test, :development do
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "rspec"
|
|
|
|
gem "listen", require: false
|
|
|
|
gem "certified", require: false
|
|
|
|
gem "fabrication", require: false
|
|
|
|
gem "mocha", require: false
|
2019-12-11 12:43:07 +11:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "rb-fsevent", require: RUBY_PLATFORM =~ /darwin/i ? "rb-fsevent" : false
|
2019-12-06 13:00:16 +11:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "rspec-rails"
|
2019-12-06 13:00:16 +11:00
|
|
|
|
2024-01-22 12:12:51 +01:00
|
|
|
gem "shoulda-matchers", require: false
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "rspec-html-matchers"
|
2024-04-29 10:34:28 +10:00
|
|
|
gem "pry-stack_explorer", require: false
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "byebug", require: ENV["RM_INFO"].nil?, platform: :mri
|
|
|
|
gem "rubocop-discourse", require: false
|
|
|
|
gem "parallel_tests"
|
2020-04-27 16:40:07 -06:00
|
|
|
|
2023-12-07 00:16:47 +00:00
|
|
|
gem "rswag-specs"
|
2021-07-06 09:47:16 +01:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "annotate"
|
2023-01-07 11:11:08 +00:00
|
|
|
|
|
|
|
gem "syntax_tree"
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "syntax_tree-disable_ternary"
|
2024-07-31 10:12:54 +02:00
|
|
|
|
|
|
|
gem "rspec-multi-mock"
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|
|
|
|
|
2013-04-02 09:28:26 +11:00
|
|
|
group :development do
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "ruby-prof", require: false, platform: :mri
|
|
|
|
gem "bullet", require: !!ENV["BULLET"]
|
|
|
|
gem "better_errors", platform: :mri, require: !!ENV["BETTER_ERRORS"]
|
|
|
|
gem "binding_of_caller"
|
|
|
|
gem "yaml-lint"
|
DEV: Chat service object initial implementation (#19814)
This is a combined work of Martin Brennan, Loïc Guitaut, and Joffrey Jaffeux.
---
This commit implements a base service object when working in chat. The documentation is available at https://discourse.github.io/discourse/chat/backend/Chat/Service.html
Generating documentation has been made as part of this commit with a bigger goal in mind of generally making it easier to dive into the chat project.
Working with services generally involves 3 parts:
- The service object itself, which is a series of steps where few of them are specialized (model, transaction, policy)
```ruby
class UpdateAge
include Chat::Service::Base
model :user, :fetch_user
policy :can_see_user
contract
step :update_age
class Contract
attribute :age, :integer
end
def fetch_user(user_id:, **)
User.find_by(id: user_id)
end
def can_see_user(guardian:, **)
guardian.can_see_user(user)
end
def update_age(age:, **)
user.update!(age: age)
end
end
```
- The `with_service` controller helper, handling success and failure of the service within a service and making easy to return proper response to it from the controller
```ruby
def update
with_service(UpdateAge) do
on_success { render_serialized(result.user, BasicUserSerializer, root: "user") }
end
end
```
- Rspec matchers and steps inspector, improving the dev experience while creating specs for a service
```ruby
RSpec.describe(UpdateAge) do
subject(:result) do
described_class.call(guardian: guardian, user_id: user.id, age: age)
end
fab!(:user) { Fabricate(:user) }
fab!(:current_user) { Fabricate(:admin) }
let(:guardian) { Guardian.new(current_user) }
let(:age) { 1 }
it { expect(user.reload.age).to eq(age) }
end
```
Note in case of unexpected failure in your spec, the output will give all the relevant information:
```
1) UpdateAge when no channel_id is given is expected to fail to find a model named 'user'
Failure/Error: it { is_expected.to fail_to_find_a_model(:user) }
Expected model 'foo' (key: 'result.model.user') was not found in the result object.
[1/4] [model] 'user' ❌
[2/4] [policy] 'can_see_user'
[3/4] [contract] 'default'
[4/4] [step] 'update_age'
/Users/joffreyjaffeux/Code/pr-discourse/plugins/chat/app/services/update_age.rb:32:in `fetch_user': missing keyword: :user_id (ArgumentError)
from /Users/joffreyjaffeux/Code/pr-discourse/plugins/chat/app/services/base.rb:202:in `instance_exec'
from /Users/joffreyjaffeux/Code/pr-discourse/plugins/chat/app/services/base.rb:202:in `call'
from /Users/joffreyjaffeux/Code/pr-discourse/plugins/chat/app/services/base.rb:219:in `call'
from /Users/joffreyjaffeux/Code/pr-discourse/plugins/chat/app/services/base.rb:417:in `block in run!'
from /Users/joffreyjaffeux/Code/pr-discourse/plugins/chat/app/services/base.rb:417:in `each'
from /Users/joffreyjaffeux/Code/pr-discourse/plugins/chat/app/services/base.rb:417:in `run!'
from /Users/joffreyjaffeux/Code/pr-discourse/plugins/chat/app/services/base.rb:411:in `run'
from <internal:kernel>:90:in `tap'
from /Users/joffreyjaffeux/Code/pr-discourse/plugins/chat/app/services/base.rb:302:in `call'
from /Users/joffreyjaffeux/Code/pr-discourse/plugins/chat/spec/services/update_age_spec.rb:15:in `block (3 levels) in <main>'
```
2023-02-13 22:09:57 +10:00
|
|
|
gem "yard"
|
2021-07-20 12:25:59 +05:30
|
|
|
end
|
|
|
|
|
2021-11-01 17:58:24 +05:30
|
|
|
if ENV["ALLOW_DEV_POPULATE"] == "1"
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "discourse_dev_assets"
|
|
|
|
gem "faker", "~> 2.16"
|
2021-11-01 17:58:24 +05:30
|
|
|
else
|
2022-03-21 15:28:52 +01:00
|
|
|
group :development, :test do
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "discourse_dev_assets"
|
|
|
|
gem "faker", "~> 2.16"
|
2021-11-01 17:58:24 +05:30
|
|
|
end
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|
|
|
|
|
2013-04-02 09:28:26 +11:00
|
|
|
# this is an optional gem, it provides a high performance replacement
|
|
|
|
# to String#blank? a method that is called quite frequently in current
|
|
|
|
# ActiveRecord, this may change in the future
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "fast_blank", platform: :ruby
|
2013-04-02 09:24:59 +11:00
|
|
|
|
2013-04-24 11:59:59 +10:00
|
|
|
# this provides a very efficient lru cache
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "lru_redux"
|
2013-04-24 11:59:59 +10:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "htmlentities", require: false
|
2014-06-06 10:34:21 +10:00
|
|
|
|
2013-02-15 15:29:49 +11:00
|
|
|
# IMPORTANT: mini profiler monkey patches, so it better be required last
|
2014-12-27 14:03:48 +01:00
|
|
|
# If you want to amend mini profiler to do the monkey patches in the railties
|
2014-03-01 18:27:44 -05:00
|
|
|
# we are open to it. by deferring require to the initializer we can configure discourse installs without it
|
2013-08-30 16:44:03 +10:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "rack-mini-profiler", require: ["enable_rails_patches"]
|
2013-04-11 16:24:08 +10:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "unicorn", require: false, platform: :ruby
|
|
|
|
gem "puma", require: false
|
2023-12-19 14:59:09 +08:00
|
|
|
|
2023-12-19 20:59:21 +01:00
|
|
|
gem "rbtrace", require: false, platform: :mri
|
2023-12-19 14:59:09 +08:00
|
|
|
|
2013-12-31 14:37:43 -05:00
|
|
|
# required for feed importing and embedding
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "ruby-readability", require: false
|
2014-12-29 13:30:54 +11:00
|
|
|
|
2021-09-20 12:51:47 +09:00
|
|
|
# rss gem is a bundled gem from Ruby 3 onwards
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "rss", require: false
|
2021-09-20 12:51:47 +09:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "stackprof", require: false, platform: :mri
|
|
|
|
gem "memory_profiler", require: false, platform: :mri
|
2014-05-05 12:50:46 -04:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "cppjieba_rb", require: false
|
2014-06-24 17:10:56 +10:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "lograge", require: false
|
|
|
|
gem "logstash-event", require: false
|
|
|
|
gem "logster"
|
2017-04-12 10:52:52 -04:00
|
|
|
|
2023-09-26 16:25:07 +01:00
|
|
|
# A fork of sassc with dart-sass support
|
2023-12-08 10:34:03 -05:00
|
|
|
gem "sassc-embedded"
|
2017-04-24 22:32:27 +02:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "rotp", require: false
|
2020-07-14 17:05:01 +10:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "rqrcode"
|
2017-12-21 17:18:12 -08:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "rubyzip", require: false
|
2019-07-18 09:34:48 -03:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "sshkey", require: false
|
2018-03-09 16:14:21 +11:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "rchardet", require: false
|
|
|
|
gem "lz4-ruby", require: false, platform: :ruby
|
2018-07-27 19:41:53 +02:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "sanitize"
|
2021-05-26 15:11:35 +05:30
|
|
|
|
2017-04-24 22:32:27 +02:00
|
|
|
if ENV["IMPORT"] == "1"
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "mysql2"
|
|
|
|
gem "redcarpet"
|
2019-12-06 13:00:16 +11:00
|
|
|
|
|
|
|
# NOTE: in import mode the version of sqlite can matter a lot, so we stick it to a specific one
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "sqlite3", "~> 1.3", ">= 1.3.13"
|
|
|
|
gem "ruby-bbcode-to-md", git: "https://github.com/nlalonde/ruby-bbcode-to-md"
|
|
|
|
gem "reverse_markdown"
|
|
|
|
gem "tiny_tds"
|
|
|
|
gem "csv"
|
2022-11-28 16:30:19 -03:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "parallel", require: false
|
2017-04-24 22:32:27 +02:00
|
|
|
end
|
2018-05-04 15:31:48 -07:00
|
|
|
|
2023-12-10 22:01:36 +01:00
|
|
|
group :generic_import, optional: true do
|
2023-08-07 12:39:58 +02:00
|
|
|
gem "sqlite3"
|
|
|
|
gem "redcarpet"
|
|
|
|
end
|
|
|
|
|
2023-01-12 12:12:19 -03:00
|
|
|
gem "web-push"
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "colored2", require: false
|
|
|
|
gem "maxminddb"
|
2020-05-23 00:56:13 -04:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "rails_failover", require: false
|
2022-03-21 15:28:52 +01:00
|
|
|
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "faraday"
|
|
|
|
gem "faraday-retry"
|
2022-10-05 13:19:04 +01:00
|
|
|
|
2022-03-21 15:28:52 +01:00
|
|
|
# workaround for faraday-net_http, see
|
|
|
|
# https://github.com/ruby/net-imap/issues/16#issuecomment-803086765
|
2023-01-07 12:02:29 +00:00
|
|
|
gem "net-http"
|
2022-12-21 18:20:07 -03:00
|
|
|
|
2022-12-27 15:28:13 -03:00
|
|
|
# Workaround until Ruby ships with cgi version 0.3.6 or higher.
|
2022-12-22 19:52:20 -03:00
|
|
|
gem "cgi", ">= 0.3.6", require: false
|
2023-02-21 11:52:04 -05:00
|
|
|
|
|
|
|
gem "tzinfo-data"
|
2024-05-13 13:23:15 +08:00
|
|
|
gem "csv", require: false
|
2024-04-05 14:17:30 +03:00
|
|
|
|
|
|
|
# dependencies for the automation plugin
|
|
|
|
gem "iso8601"
|
|
|
|
gem "rrule"
|
2024-09-09 17:14:39 +02:00
|
|
|
|
|
|
|
group :migrations, optional: true do
|
|
|
|
gem "extralite-bundle", require: "extralite"
|
|
|
|
|
|
|
|
# auto-loading
|
|
|
|
gem "zeitwerk"
|
|
|
|
|
|
|
|
# databases
|
|
|
|
gem "trilogy"
|
|
|
|
|
|
|
|
# CLI
|
|
|
|
gem "ruby-progressbar"
|
|
|
|
end
|