主な開発基準は次のとおりです。
- アプリケーションにすばやく統合する機能。
- 優れた拡張性。
- アプリケーションに(プラグインコードの意味で)他の人のコードがないため、多くの場合、ジェネレータが使用されます。 この意味で、私はAuthlogicを調べようとしました。
ジェネレーター(優れた拡張性と変更可能性を提供する)とエンジン(簡単に更新できるようにする)の間にあることが判明したもの。
インストールと使用
プラグインが機能するためには(特に、ページ履歴)、diff-lcs gemが必要です。 フォーマットにはデフォルトでRedClothが使用されますが、別のフォーマッターを選択できます。 このように:
gem install diff-lcs RedCloth
プラグインをインストールするには、Railsアプリケーションのディレクトリで実行するだけです:
スクリプト/プラグインのインストールgit://github.com/alno/irwi
インストール後、移行、モデル、およびコントローラーを生成する必要があります... 待ってください。これは、アプリケーションに他の誰かのコードが大量にあることを意味するものではありません。 コントローラーとモデルには、acts_as_ *という形式の1行のみが含まれており、後で機能を拡張しやすくするために生成されます。 wikiのすべての機能はプラグインファイルに実装されているため、簡単に更新できます。
そのため、必要なファイルを生成するには、適切なジェネレーターを呼び出す必要があります。
スクリプト/ irwi_wikiを生成
アプリケーションでジェネレーターを呼び出した後、次の変更が行われます。
- ページを処理するためのWikiPageControllerおよび対応するヘルパーを追加しました。
- ページを表すWikiPageおよびWikiPageVersionモデルを追加しました
- データベースにテーブルを作成する移行が生成されます
また、ルートに次の行が追加されます。
Copy Source | Copy HTML map.wiki_root '/wiki'
ご想像のとおり、これはアプリケーションのwikiルートを示しています。 一番好きなものに簡単に変更できます。
アプリケーションでウィキを実行しているすべてのものが生成されます。 原則として、すでに使用できますが、おそらく、アプリケーションの一部の側面を変更することをお勧めします。たとえば、ユーザーシステムに表示またはバインドするために使用するテンプレートを変更し、ページを編集する権限を制限します。 これについては後で説明します。
外観の変化
外観を変更するには、次の2つの方法があります。
- テンプレートの置換
- デフォルトのテンプレートのスタイルを置き換える
テンプレート(部分テンプレートを含む)を置き換えるには、コントローラーのビューディレクトリで対応する名前のテンプレートを定義する必要があります。 普通のことは何もありませんよね? そこに何を書くべきかわからない場合は、プラグインのソースコードでデフォルトのテンプレートを見ることができます(これらは非常に単純なので、app / viewにあります)。
ほとんどの場合、最初の方法を使用しますが、最初の方法はまだ言及する価値があります。 デフォルトでは、デフォルトスタイルの説明を含むCSSが各デフォルトテンプレートに追加されます。 おそらく、あなたはそれを捨てる(そしてレイアウトであなた自身を接続する)でしょう。 これを行うには、ヘルパーのwiki_page_styleメソッドを独自のもので再定義するだけで、空の文字列が返されます。 この方法では、ページからスタイルを削除するだけです。
ユーザーバインディング
wikiをアプリケーション内の既存のユーザーシステムにリンクするには何が必要ですか?
最も単純なケースは、ユーザーモデルがUserと呼ばれ、現在のユーザーを返すコントローラーにcurrent_userメソッドが定義されている場合です。 同意する、これはかなり一般的なケースです。 この場合、wikiは自動的にユーザーにアタッチされ、現在のユーザーを変更の作成者と見なします。
唯一の問題は、すべてのページでユーザー名がUser123のように表示されることです。 これはおそらくあなたが望むものではありません。 この状況を修正するには、WikiPagesHelperクラスでwiki_userメソッドを定義するだけで十分です。 たとえば、次のように:
Copy Source | Copy HTML
- モジュール WikiPagesHelper
- Irwiを含める::ヘルパー:: WikiPagesHelper
- def wiki_user (ユーザー)
- ユーザー? link_to (user.login、user_path(user)): 「ゲスト」
- 終わり
- 終わり
モデルが何らかの方法で呼び出される場合、アプリケーションを初期化するときに別の行を追加する必要があります。
Irwi.config.user_class_name = 'Account'#もちろん、モデルがそのように呼び出される場合
このために別のイニシャライザを作成することをお勧めします。そうすることで、後でインストールしたい他のオプションを追加できるようになりますが、原則として、自由に何でもできます。
操作を実行する権利の制限
ほとんどの場合、Wikiページを表示または編集する権利に制限を追加する必要があります(一般的に言えば、これはかなり良い考えだと思います)。 たとえば、少なくとも、登録ユーザーにのみ編集権限を付与します。
これを行うには、権限チェックを実行するコントローラーの3つのメソッドを再定義する必要があります:show_allowed?、history_allowed? およびedit_allowed? 各メソッドでは、現在のユーザーが現在のページ(@page)でアクション(表示、履歴の表示、編集)を実行する権利を持っているかどうかを確認し、それに応じてtrueまたはfalseと見なされる何かを返す必要があります。 対応するメソッドがfalseを返す場合、アクションは実行されず、コントローラーでnot_allowedメソッドが呼び出されます。これにより、デフォルトでエラーテキストがレンダリングされますが、おそらく(たとえば、ユーザーをログインページにリダイレクトするために)再定義することもできます。
したがって、コントローラコードの例は次のようになります。
Copy Source | Copy HTML
- クラス WikiPagesController <ApplicationController
- acts_as_wiki_pages_controller
- def show_allowed ?
- true #すべての人に見せます
- 終わり
- def history_allowed ?
- true #みんなに物語を見てもらいましょう
- 終わり
- def edit_allowed ?
- current_user #そしてログインしている人のみ
- 終わり
- def not_allowed
- redirect_to login_path #すべての違反者をログインページにリダイレクトする
- 終わり
- 終わり
合計
Railsでのwikiプラグインの使用について簡単に説明しました。 もちろん、いくつかのポイントはこの記事の範囲外でしたが、後で説明します。 コメント、提案、アイデアは(コメント、github、または私の連絡先を通じて)歓迎します。また、パッチとフォーク(誰かがプラグインに何かを追加したい場合)も歓迎します。
ソースコードはGItHubで入手できます: github.com/alno/irwi