ターミナル
$ bundle add escalatedなぜEscalatedか
なぜRailsにEscalatedか
ActiveRecordモデル
チケット、返信、タグ、アクティビティはActiveRecordモデル。アプリの他のモデルと同様にスコープ、アソシエーション、バリデーションを使用。
Railsジェネレーター
馴染みの`rails generate`コマンドでマイグレーション生成、設定ファイルインストール、ビュースキャフォールド。手動設定不要。
エンジンアーキテクチャ
`config/routes.rb`にRailsエンジンとしてマウント。認証スタックを共有しながらEscalatedのルート、コントローラー、ビューを分離。
はじめに
仕組み
1
Gemをインストール
bundle add escalated2
ジェネレーターを実行
rails generate escalated:install && rails db:migrate3
エンジンをマウント
ルートに`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 )