Irwi-RailsアプリケーションのWiki

RailsにWiki機能を追加するような一見標準的なタスクには、既存のアプリケーションと簡単に統合できる既製のプラグインはありません。 この点で、彼自身が書かれました。



主な開発基準は次のとおりです。



ジェネレーター(優れた拡張性と変更可能性を提供する)とエンジン(簡単に更新できるようにする)の間にあることが判明したもの。







インストールと使用





プラグインが機能するためには(特に、ページ履歴)、diff-lcs gemが必要です。 フォーマットにはデフォルトでRedClothが使用されますが、別のフォーマッターを選択できます。 このように:



 gem install diff-lcs RedCloth


プラグインをインストールするには、Railsアプリケーションのディレクトリで実行するだけです:



スクリプト/プラグインのインストールgit://github.com/alno/irwi


インストール後、移行、モデル、およびコントローラーを生成する必要があります... 待ってください。これは、アプリケーションに他の誰かのコードが大量にあることを意味するものではありません。 コントローラーとモデルには、acts_as_ *という形式の1行のみが含まれており、後で機能を拡張しやすくするために生成されます。 wikiのすべての機能はプラグインファイルに実装されているため、簡単に更新できます。



そのため、必要なファイルを生成するには、適切なジェネレーターを呼び出す必要があります。



スクリプト/ irwi_wikiを生成


アプリケーションでジェネレーターを呼び出した後、次の変更が行われます。



また、ルートに次の行が追加されます。



Copy Source | Copy HTML map.wiki_root '/wiki'



  1. 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



  1. モジュール WikiPagesHelper
  2. Irwiを含める::ヘルパー:: WikiPagesHelper
  3. def wiki_user (ユーザー)
  4. ユーザー? link_to (user.login、user_path(user)): 「ゲスト」
  5. 終わり
  6. 終わり


モデルが何らかの方法で呼び出される場合、アプリケーションを初期化するときに別の行を追加する必要があります。



 Irwi.config.user_class_name = 'Account'#もちろん、モデルがそのように呼び出される場合


このために別のイニシャライザを作成することをお勧めします。そうすることで、後でインストールしたい他のオプションを追加できるようになりますが、原則として、自由に何でもできます。





操作を実行する権利の制限





ほとんどの場合、Wikiページを表示または編集する権利に制限を追加する必要があります(一般的に言えば、これはかなり良い考えだと思います)。 たとえば、少なくとも、登録ユーザーにのみ編集権限を付与します。



これを行うには、権限チェックを実行するコントローラーの3つのメソッドを再定義する必要があります:show_allowed?、history_allowed? およびedit_allowed? 各メソッドでは、現在のユーザーが現在のページ(@page)でアクション(表示、履歴の表示、編集)を実行する権利を持っているかどうかを確認し、それに応じてtrueまたはfalseと見なされる何かを返す必要があります。 対応するメソッドがfalseを返す場合、アクションは実行されず、コントローラーでnot_allowedメソッドが呼び出されます。これにより、デフォルトでエラーテキストがレンダリングされますが、おそらく(たとえば、ユーザーをログインページにリダイレクトするために)再定義することもできます。



したがって、コントローラコードの例は次のようになります。



Copy Source | Copy HTML



  1. クラス WikiPagesController <ApplicationController
  2. acts_as_wiki_pages_controller
  3. def show_allowed
  4. true #すべての人に見せます
  5. 終わり
  6. def history_allowed
  7. true #みんなに物語を見てもらいましょう
  8. 終わり
  9. def edit_allowed
  10. current_user #そしてログインしている人のみ
  11. 終わり
  12. def not_allowed
  13. redirect_to login_path #すべての違反者をログインページにリダイレクトする
  14. 終わり
  15. 終わり




合計





Railsでのwikiプラグインの使用について簡単に説明しました。 もちろん、いくつかのポイントはこの記事の範囲外でしたが、後で説明します。 コメント、提案、アイデアは(コメント、github、または私の連絡先を通じて)歓迎します。また、パッチとフォーク(誰かがプラグインに何かを追加したい場合)も歓迎します。





ソースコードはGItHubで入手できます: github.com/alno/irwi




All Articles