ManifestSystemResource @ AboutManifest

データ構造

system_resources

Hash

templates

template_items

has_route

select_items

記述

templates

エンジンによって拡張可能なアイテムの一覧。

フキダシのようにユーザーの選択によって動作が変わるアイテムに必要な情報を初期化するところ。

template_items

クラス名に対応したエンジンの名称をスネークケースに変換するための仕組み。

  templates: {
    license_groups: {
       template_items: {
        PettanrCreativeCommonsV30Licenses: 'pettanr_creative_commons_v30_licenses',
        PettanrPettanCommonsV01Licenses: 'pettanr_pettan_commons_v01_licenses',
        PettanrPettanProtectedV01Licenses: 'pettanr_pettan_protected_v01_licenses',
        PettanrPettanPublicV01Licenses: 'pettanr_pettan_public_v01_licenses',
        PettanrPublicDomainV01Licenses: 'pettanr_public_domain_v01_licenses',
        PettanrUnknownV01Licenses: 'pettanr_unknown_v01_licenses',
      },
    },
  },

has_route

エンジンはAPIを持つかどうかのフラグを数値で指定する。省略した時は1が補充される。

  • 1 ルートを追加する。
  • 0 ルートを追加しない。

フラグといえばtrue or falseだが、この書式を採用するとfalseを設定しても「省略」とみなされ補充されてしまう。混乱を避けるため、数値にした。この書式が帰って混乱を招くなら却下しても良い。

  templates: {
    writing_formats: {
      has_route: 0,
      template_items: {
        SimpleFormat: 'pettanr_simple_format',
      },
    },
  },

select_items

入力フォームのセレクトボックスで利用する選択肢を取得する場所。

選択肢について

入力フォームなどで表示する選択肢には、jsonで持つものと、データベースに登録されているものがある。前者はマニフェストに記述されているが、後者は記述できない。しかし、性質としてはどちらもマニフェストから取得すべきものなので、マニフェスト起動時にデータベースから取得して設定しなければならない。

データベースから取得するにはモデルのマニフェストを使う。マニフェストのソースに取得方法が記述されているので、そこから取得してマスターデータを突っ込む。ただし、リストの取得をするためのマニフェストを読み込むまで初期化できない。よって、マニフェストの準備はほぼ終わってから設定することとなる。

さらに、データベースから取得する選択肢について、通常の一覧とパラメータを必要とするフィルタ一覧を使う二種類に分かれる。選択肢はほとんどの場合マスターデータとなるのでフィルタ形式になることはない。しかしながら、わずかなケースでマスターデータでは間に合わないことがある。原画ライセンスが代表的な例で(今のところこれしかないが)予めライセンスグループで絞り込んだ(フィルタした)ライセンス一覧を表示したいといったことがある。この場合、随時取得することになるので、起動時にキャッシュにため込むような事はできない。

重複の問題

データベースから取得する選択肢は手書きのマニフェストを読み込んだ後に挿入される。このとき、名前が衝突していると上書きされてしまう。これを避けるためには命名規則に従うべき。

命名規則は選択肢を利用する入力コンポーネントのアイテム名とカラム名を_items

その他の注意事項

フォントサイズの初期化

セリフのフォントサイズはセレクトボックスで選択する。この時、選択肢の値が少数を含む数値となる。ところが、 jsonフォーマットは少数値を記述することができない(パースするときに整数に丸められる)

サンプル

  select_items: {
    speech_text_align_items: [
      ['select_items.speeches.text_align.none', 0], 
      ['select_items.speeches.text_align.left', 1], 
      ['select_items.speeches.text_align.right', 2], 
      ['select_items.speeches.text_align.center', 3], 
    ],
  }

選択肢のロード

select_items_loaderでは、フォームのセレクトボックスで使われる選択肢をデータベースからロードする。このときrailsの環境設定のautoload_pathsでマニフェストを自動でリロードする設定にしていると、モデルに定義してあるメソッドがクリアされて、呼び出してもundefinedにになってしまう。しかも厄介なことに、一度は動いて、二度目以降は失敗する。これが発現するのは記法だけ(モデルから選択肢を読み込むのはこのモデルだけ)なので、 「気がついたら壊れている」状態に勘違いしやすい。これを避けるには、マニフェストのautoloadをやめること。

選択肢のデータを読み込むのは、システム起動時だけではない。原画ライセンスのように、随時フィルタから取得するルートもある。