Top > 開発ガイド > コンポーネント開発逆引きリファレンス > カレンダと連携する

カレンダと連携する

対象バージョン

当ドキュメントはRubricks-0.6.x向けです。

概要

カレンダと連携するコンポーネントを作成することができます。 連携することで、例えば、Todoコンポーネントで登録されたTodoをカレンダ上で閲覧したり、日付をずらしたりできるようになります。

イメージ

使い方

今回はtodoとカレンダーの連携をサンプルに説明します。

作成物

カレンダ連携をするためには下記ファイルの作成が必要となります。

  • init.rb(vendor配下ではなく、コンポーネント独自プラグインのもの)
  • アダプタクラス
    RAILS_ROOT/components/コンポーネント名
    └component_plugins
      └─calendar ・・・ プラグイン名(任意の名称)
          │  init.rb
          │
          └─lib
                  todo_list_adapter.rb ・・・ アダプタクラス(任意の名称)
    

init.rbの作成

init.rb

lib = File.expand_path("#{File.dirname(__FILE__)}/lib")
require_dependency "#{lib}/todo_list_adapter"

RubricksScheduleManager << TodoList::TodoListAdapter
  • アダプタクラスをrequire_dependencyで読み込みます。
  • RubricksScheduleManagerにアダプタクラスを登録します。

注意:このinit.rbはvendor配下に作成するものではありません。

アダプタクラスの作成

アダプタクラス(今回はtodo_list_adapter.rb)に schedulesメソッド、changeメソッド、deleteメソッドをクラスメソッドとして定義します。

  • schedulesメソッド

カレンダが表示されるときに叩かれるメソッド です。

引数:params(Hash)

引数必須初期値説明
params-Hash下記のパラメータが入っている。
:year => 表示されているカレンダーの年
:month => 表示されているカレンダーの月
:current_user => ログイン中のrubricks_userオブジェクト


戻り値:RubricksSchedule/Array

説明
RubricksSchedule/ArrayRubricksScheduleインスタンスの配列。返却したインスタンスがカレンダに表示されます。
class TodoList::TodoListAdapter
  class << self
    def schedules(params)
      sync_todos = TodoList::TodoListTodo.find(
        :all,
        :conditions => [
          'sync_calendar_flag = 1 and ' +
          'todo_list_category_boxes.rubricks_user_id = ? and ' +
          'YEAR(close_on) = ? and MONTH(close_on) = ?',
          params[:current_user].id ,
          params[:year], params[:month]
        ],
        :include => [:todo_list_category_box]
      )
      
      sync_todos.collect do |sync_todo|
#...中略
        RubricksSchedule.new(
          :id => sync_todo.id,
          :start => sync_todo.close_on,
          :finish => finish_datetime,
          :description => sync_todo.title,
          :publicity => true,
          :callback => "alert('click!')",
          :icon => "/images/components/todo_list/todo_icon_for_calendar.gif",
          :icon_for_list => "/images/components/todo_list/todo_icon_for_list.gif",
          :removable => true
        )
      end
    end
  .
   .
   .
  end
end
  • changeメソッド

カレンダ内でスケジュールの時間が移動したときに叩かれるメソッド です。 スケジュールの移動とつじつまが合うようにデータを変更します。

引数: schedule(RubricksScheduleオブジェクト ) shchedule.sidでカレンダ連携しているモデルのidが取得できます。

戻り値: Hash or Hash/Array

説明
Hash or Hash/Arraytargetとargsを指定したHash、又はHashを複数含んだArray(以下表参照)。
戻り値を渡すことでsimple_render_componentが呼び出され画面を更新することができます。

キー:

:target更新するHTMLのID。
:argssimple_render_componentの引数。配列でcontroller、action、paramsを渡します。
class TodoList::TodoListAdapter
  class << self
  .
   .
   .
    def change(schedule)
      target = TodoList::TodoListTodo.find(schedule.sid)
      target.close_on = schedule.start
      target.save
      {:target => 'html_id' :args => ['/xxx/xxx', 'xxx', {}]}
    end
  .
   .
   .
  end
end
  • deleteメソッド

カレンダ内でスケジュールが削除されたときに叩かれるメソッドです。

引数:カレンダ連携しているモデルのid

戻り値: Hash or Hash/Array

説明
Hash or Hash/Arraytargetとargsを指定したHash、又はHashを複数含んだArray(以下表参照)。
戻り値を渡すことでsimple_render_componentが呼び出され画面を更新することができます。

キー:

:target更新するHTMLのID。
:argssimple_render_componentの引数。配列でcontroller、action、paramsを渡します。
class TodoList::TodoListAdapter
  class << self
  .
   .
   .
    def delete(id)
      TodoList::TodoListTodo.destroy(id)
      [
        {:target => 'html_id' :args => ['/xxx/xxx', 'xxx', {}]},
        {:target => 'html_id2' :args => ['/yyy/yyy', 'yyy', {}]}
      ]
    end
  end
end

カレンダーブロックを更新する

任意のスケジュールを更新したときに、同期を取る場合などに行います。

  • カレンダーブロックが表示されている場合、リクエストパラメータとして"rubricks_system_calendar"が自動的に送信されます。
  • rubricks_system_calendarパラメータが送られてきた場合は、以下のようにsimple_render_component_as_stringを実行し、その値をレスポンスとして返却します。

 例:

simple_render_component_as_string("/system/calendar", "refresh_detail_calendar", {:rubricks_system_calendar => params[:rubricks_system_calendar]})

 上記のsimple_render_component_as_stringの戻り値は、Javascript(<script>タグで囲まれていない)文字列です。

API

RubricksSchedule

RubricksScheduleをnewする際のパラメータは下記の通りです。

:idカレンダ連携しているモデルのid。
:startスケジュール開始日時。DateTime型。
:finishスケジュール終了日時。DateTime型
:descriptionカレンダに表示される文字列。
:publicityfalseを設定すると鍵アイコンが表示される。デフォルトtrue。
:callbackスケジュールをダブルクリックされたときに実行されるJavascript。
:iconカレンダー上のスケジュールとともに表示されるアイコン。
:icon_for_listリスト表示のときに表示されるアイコン。
:removablefalseに設定すると削除できなくなる(ゴミ箱アイコンが表示されなくなる)。デフォルトtrue。

Attachments