アイテムのマニフェスト @ AboutManifest

各アイテムに対して、アイテムのペタナイズを設定する。

データ構造

items

名前付き可変オブジェクト(詳しくはManifestBaseNameTypeArgsを参照)。タイプは次の中から選ぶ。省略も可能。

  • 'item' (default)
  • 'owner'
  • 'content'
  • 'root'
  • 'element'
  • 'binder'
  • 'leaf'
  • 'system_resource'
  • 'template'

itemsのすべてのタイプに共通するデータ

boost

名前付きオブジェクト(詳しくはManifestBaseNameValuesを参照)。

items(type:item)

items(type:owner)

items(type:content)

items(type:root)

items(type:element)

parent_model_name

items(type:binder)

items(type:leaf)

destination_model_name

parent_model_name

items(type:system_resource)

items(type:template)

リファレンス

items(base)

boost

ブーストはややこしいので、次の当たりも参照する。

この部分のマニフェストは、次の辺りで利用される。

名前はテンプレートのアイテム名を基本とする。

      boost: {
        speech_balloon_template: {
        },
      },

level

どの段階でブーストするかを次の中から文字列で設定する。省略したときは'post'になる。

  • 'post' 拡張しなくても表示はできるので、更新作業のときだけブーストする。
  • 'read' 拡張しないで表示はできないので、取得した直後にブーストする。

template_name

テンプレートのアイテム名を文字列で設定する。省略したときは、ブースト名が補充される。

通常はブースト名とテンプレートのアイテム名は一致しているので省略できる。しかし、一つのテンプレートが複数の拡張データを取り扱うときなど、一致しないこともある。そのようなケースで利用する。

例えば、ライセンスグループでは通常の拡張データに加えて、クレジットに必要な画像を拡張データとして所持している。この拡張データを展開するにはテンプレート名を指定しなければならない。

  license: {
    args: {
      boost: {
        license_group: {
          extend_model_class_name: 'License',
          item_name_for_extend_model: 'license',
        },
        credit_picture: {
          template_name: 'license_group',
          extend_model_class_name: 'CreditPicture',
          item_name_for_extend_model: 'credit_picture',
        },
      },
    }
  }

credit_pictureを展開するためのテンプレートはlicense_groupである。

column_name_for_template_module

拡張アイテムには必ず拡張データを解釈するためのテンプレートのモジュール名が収められている。そのカラム名を文字列で設定する。省略したときはテンプレート名に'_module_name'を加えたものを補充する。

「設定より規約」なので、通常は省略して良い。

  license: {
    args: {
      boost: {
        license_group: {
        },
        credit_picture: {
          template_name: 'license_group',
        },
      },
    }
  }

上の場合、license_groupはブースト名がテンプレート名として流用され、license_group_module_nameとなる。credit_pictureは設定されたテンプレート名が利用され、license_group_module_nameとなる。どちらも同じテンプレートで拡張するので、これで良い。

license['license_group_module_name']は、おそらく'PettanrCreativeCommonsV30Licenses'とか'PettanrPettanCommonsV01Licenses'が入っている。この文字列からテンプレートのモジュールを取得することになる。

settings_column_name

拡張データが入っているカラム名を文字列で設定する。省略したときはブースト名に'_settings'を加えたものを補充する。こちらも特別な事情がない限り、設定の必要はない。

  license: {
    args: {
      boost: {
        license_group: {
        },
        credit_picture: {
          template_name: 'license_group',
        },
      },
    }
  }

上の場合、license_groupはlicense_group_settingsとなる。あちらは設定されたテンプレート名が利用され、credit_picture_settingsとなる。

foreign_key

extend_model_class_name

拡張モデルのクラス名を文字列で設定する。拡張モデルとは、拡張データをモデル化して扱いやすくするもの。テンプレートのモジュールの中にモデルが定義されているので、この文字列からモデルを探す。

この項目を省略したときは、テンプレートは拡張モデルを持たないことを意味する。

extend_module_name

拡張モジュールの名称を文字列で設定する。

省略したときは、拡張モデルのクラス名に'Module'を加えたものを補充する。ただし、拡張モデルを持たない場合に省略すると、例外が発生する。次の例では、extend_model_class_nameに'Speech'が設定されているので、'SpeechModule'になる。

        speech_balloon_template: {
          extend_model_class_name: 'Speech',
          item_name_for_extend_model: 'speech',
        },

item_name_for_extend_model

拡張モデルのアイテム名を文字列で設定する。省略したときはテンプレート名が補充される。通常のモデルであれば、マニフェストからアイテム名を取得できるが、拡張モデルはペタナイズされていないので、拡張モデルからアイテム名を取得できない。単純に拡張モデルのクラス名をスネークケースに変換したものと考えて用意。ブースト名やテンプレート名と一致しないケースでは設定する。

setter_method_name

拡張アイテムに拡張モデルを引き渡すためのメソッド名を文字列で設定する。省略したときは拡張モデルのアイテム名に'_extend='を加えたものを補充する。メソッド名が重複する恐れを考慮して用意した。ほとんどの場合、設定する必要はないと思われる。

ブーストの目的は拡張データを扱いやすい形にすること。そのために、拡張モデルをオブジェクト化して、拡張データを展開する。そのオブジェクトを拡張アイテムに引き渡して利用してもらう。引き渡すためのメソッドは拡張モジュールに定義されている。例えば、フキダシテンプレートでは次のような感じ。

module CircleSpeechBalloon
  module SpeechBalloonModule
    def speech_balloon_extend= params
      @speech_balloon_extend = CircleSpeechBalloon::SpeechBalloon.new params
    end
  end
end

拡張アイテムはブーストした段階で拡張モジュールが適用される。これで拡張アイテムにメソッドが定義されるので、代入によって拡張アイテムのインスタンス変数に拡張オブジェクトがセットされる。

getter_method_name

拡張アイテムから拡張オブジェクトを取得するためのメソッド名を文字列で設定する。省略したときは拡張モデルのアイテム名に'_extend'を加えたものを補充する。

setter_method_nameと対になる設定。こちらは取得側。

extend_module_name

拡張モジュール名。読み取り専用。拡張モデル名から生成する。

拡張モデルがSpeechBalloonの時、'SpeechBalloonModule'となる。

items(type:element)

parent_model_name

親のモデルの名称を文字列で設定する。省略はできない。

モデルのマニフェストの関連モデルには、すべてのモデルが記述されているので、エレメント構造を正確に類推することはできない。この設定によって、親モデルを明確に示す。

items(type:leaf)

parent_model_name

親のモデルの名称を文字列で設定する。省略はできない。

モデルのマニフェストの関連モデルには、すべてのモデルが記述されているので、バインダー構造を正確に類推することはできない。この設定によって、親モデルを明確に示す。

destination_model_name

バインダーに連結するコンテンツを文字列で設定する。省略はできない。

バインダーにリーフを差し込むことで、閉じられたページを表現しているが、そのページにかぶせられるコンテンツをここで設定する。

  scroll_panel: {
    type: 'leaf',
    args: {
      parent_model_name: 'scroll',
      destination_model_name: 'panel',
    },
  },

上の例では、スクロールに差し込むスクコマにコマをかぶせている。