Ruby on Rails

Railsの規約で動くサポートシステム

ActiveRecordモデル、ジェネレーター、エンジンマウント、チームが既に知っている馴染みのRubyパターン。EscalatedはGemとして配布されるRailsエンジン。

ターミナル
$ bundle add escalated

なぜEscalatedか

なぜRailsにEscalatedか

ActiveRecordモデル

チケット、返信、タグ、アクティビティはActiveRecordモデル。アプリの他のモデルと同様にスコープ、アソシエーション、バリデーションを使用。

Railsジェネレーター

馴染みの`rails generate`コマンドでマイグレーション生成、設定ファイルインストール、ビュースキャフォールド。手動設定不要。

エンジンアーキテクチャ

`config/routes.rb`にRailsエンジンとしてマウント。認証スタックを共有しながらEscalatedのルート、コントローラー、ビューを分離。

はじめに

仕組み

1

Gemをインストール

bundle add escalated
2

ジェネレーターを実行

rails generate escalated:install && rails db:migrate
3

エンジンをマウント

ルートに`mount Escalated::Engine => '/support'`を追加すれば稼働。

機能

Railsエコシステム向けに構築

ActiveRecordアソシエーション

チケットはユーザーに属し、多くの返信を持ち、ポリモーフィックアソシエーションで接続。ArelまたはスコープでクエリI。

ActiveJob統合

メール通知とWebhookディスパッチはActiveJobで実行。Sidekiq、Resque、またはアプリが既に使用している任意のバックエンドを使用。

PunditとCanCanCanサポート

認可は標準のRuby認可ライブラリで動作。チケット、返信、管理機能へのアクセスを制御。

ActiveSupportコールバック

すべてのチケットアクションがコールバックをトリガー。after_create、after_update、カスタムライフサイクルイベントにフックしてワークフローを構築。

Rackミドルウェア

既存のRackミドルウェアをEscalatedルートに適用。認証、レートリミット、テナントスコーピングが自然に動作。

FactoryBotファクトリー

チケット、返信、ユーザー用のFactoryBotファクトリー付き。馴染みのパターンでRSpecまたはMinitestテストを記述。

実際に見る

アプリケーションに完全なサポートシステムを追加する数行のRuby。

Ruby
# config/routes.rb
Rails.application.routes.draw do
  mount Escalated::Engine => '/support'
end

# app/models/user.rb
class User < ApplicationRecord
  include Escalated::HasTickets
end

# Anywhere in your application
ticket = user.tickets.create!(
  subject: 'Need help with billing',
  priority: :high
)

ticket.replies.create!(
  body: "We've updated your invoice.",
  user: agent
)

Railsアプリにサポートチケットを追加する準備はできましたか?

Escalatedはオープンソース、セルフホスト、Railsアプリケーションのネイティブな一部のように感じるよう設計。