原画 @ OriginalPictureSpec

カラム

name和名typedefaultnulllimitnote
ext画像フォーマットstring FALSE4画像フォーマット
widthinteger FALSE 幅ピクセル数
height高さinteger FALSE 高さピクセル数
filesizeファイルサイズinteger FALSE 画像のファイルサイズ
artist_id絵師integer FALSE 絵師id
md5MD5string FALSE32画像のmd5値
uploaded_at投稿日時datetime
published_at公開日時datetime
stopped_at停止日時datetime
created_at作成datetime
updated_at更新datetime

作成手順

絵師idと画像データを与えて作成する。絵師idはサインイン中のセッションから得られるので、ファイルアップロードフォームがあれば作成できることになる。 → OriginalPicturesCreate

画像データはバイナリデータが生で入ってくる。画像ライブラリなどを通して諸データを取り出せる形にするのはモデルの責任となる。代表的なのはRMagickなど。

画像の保存場所

できるだけネットから直接見えない場所に置く。ローカルファイルで作成するか、認証を経ないと見えないか。少なくとも望めばそうできるような作りにしたい。

本人限定

絵師本人しか見えない、そしてプロバイダ系の閲覧処理。通常は取得時の権限チェックは作家アカウントを渡すが…。

検証

カラム別

ext

  • nullでないこと。
  • 4文字以内であること。
  • png、gif、jpegのいずれかであること。

width

  • nullでないこと。
  • 数値であること
  • 正の整数であること。

height

  • nullでないこと。
  • 数値であること
  • 正の整数であること。

filesize

  • nullでないこと。
  • 数値であること
  • 正の整数であること。
  • 2MB以内であること。

artist_id

  • nullでないこと。
  • 数値であること
  • 存在する絵師であること。

md5

  • nullでないこと。
  • 32文字であること。

published_at

stopped_at

全体

  • 有効な画像であること。
  • 画像保管庫が生きていること。

削除手順

機能

デフォルト値補充

supply_default()

パラメータ

解説

  • 補充すべきデータはない

上書き補充

overwrite(ar)

パラメータ

  • ar:絵師データ

解説

  • 現在時刻をuploaded_atに補充する。
  • ログイン中の作家の絵師idをartist_idに補充する。

所持判定

own?(roles)

パラメータ

  • roles:ロールリスト

戻り

真偽

解説

自身の持ち主がロールリスト内に含まれるかどうかをTrue/Falseで返す

  • 自身にロールリストからの絵師取得を依頼して、ロール内作家を取得する。
    • ロールリストを渡す。
  • ロール内絵師が取得できないとき、Falseを返す。
  • ロール内絵師のidが自身の絵師idと一致するならTrue、しないならFalseを返す。

閲覧許可

visible?(roles)

パラメータ

  • roles:ロールリスト

戻り

真偽

解説

検査対象が原画を閲覧できるかどうかを判定する。

  • 自身に管理者用ロールチェックを問い合わせ、管理者なら許可を返す。
  • 自身に所持判定を問い合わせ、自分のコンテンツなら許可を返す。
    • ロールリストを渡す。
  • それ以外なら不許可を返す。

ファイル名

filename

解説

画像ファイル名を返す。id+拡張子のフォーマットとなる。PictureIoとは、このファイル名でやり取りする。

MimeType

mime_type

解説

ブラウザに画像バイナリデータを送信する時のMimeTypeを返す。

ファイルのurl

url

解説

Imgタグでsrcに使う、この原画のUrlを返す。

サムネイル画像タグオプション

tmb_opt_img_tag

解説

サムネイル画像を表示するときに、Imgタグで使うオプションを返す。戻り値はHashでsrcと画像の幅高さを含む。原画は本人だけしか見えないので、好きにサムネイル化できる。

画像タグオプション

opt_img_tag

解説

一覧で画像を表示するときに、Imgタグで使うオプションを返す。戻り値はHashでsrcと画像の幅高さを含む。

未公開

unpublished?

解説

原画が未公開(公開日時と停止日時がともに空)なら、Trueを返す。

停止中

stopped?

解説

素材の配布を停止している。

  • 停止日時が空でないこと。

ライセンス待ち

unlicensed?

解説

原画を更新したが、公開(ライセンス)していないなら、Trueを返す。

  • 公開日時と停止日時のうち、空でない方を取得する。
  • 投稿日時がそれより後なこと。

発禁

frozen?

解説

素材の配布を禁止されている。原画が凍結されていること。

公開中

published?

解説

  • 公開日時が空ではないなら、Trueを返す。

1ページの件数

self.default_page_size

パラメータ

解説

一覧取得時に返す件数のデフォルト値

  • 25を返す。

1ページの最大件数

self.max_page_size

パラメータ

解説

ユーザは一覧取得時に返す件数を指定できるが、システムは上限値を設定できる

  • 100を返す。

ページ位置補正

self.page prm = nil

パラメータ

  • prm:ページ位置

解説

一覧取得時に何ページ目を返すかの指定値を補正

  • パラメータを数値として認識する
  • 省略時は1
  • 0以下のときは1

ページ数補正

self.page_size prm = self.default_page_size

パラメータ

  • prm:ページ数

解説

一覧で取得する件数

  • パラメータを数値として認識する
  • 省略時は1
  • 0以下のときは1
  • 1ページの最大件数を上回っているなら、1ページの件数を返す。

一覧取得

一般ユーザはアクセスできないので、一覧機能はない。マイリストだけ。

マイリスト取得

mylist(artist, page = 1, page_size = self.default_page_size)

パラメータ

  • artist:絵師データ
  • page:何ページ目か
  • page_size:1ページに収まる件数

解説

  • 原画を更新日時順に取得する。
  • パラメータで与えられた絵師の原画に限る
  • 関連データとして一覧取得オプションで定義されたモデルを含む。
  • ページ処理に対応し、毎ページn件の条件でmページ目から取得することができる。
    • ただし、page_sizeが0のときは全件取得してページ制御しない。

更新履歴一覧

history

解説

この原画の更新履歴を返す。

更新履歴とは、実素材をRevision順に並べたもので、本来は実素材モデルに実装すべき機能。しかし、ライセンス期限切れの実素材は見ちゃいけない建前になっている(実際は見れる・有効期間中に契約した素材は見えなきゃ困る)ので、著作者本人からのアクセスが確定している原画に実装した。

一覧取得オプション

下記の関連テーブルを含む

  • resource_picture
  • pictures

絵師データは含まない。原画は本人しか操作できないので、自分に決まっているから。

json一覧出力オプション

下記の関連テーブルのカラムを含む

  • resource_picture (*)
  • pictures

絵師データは含まない。原画は本人しか操作できないので、自分に決まっているから。

単体取得

show(id, artist)

パラメータ

  • id:原画id
  • artist:絵師データ

解説

  • idの原画を取得する。
  • 関連データとして単体取得オプションで定義されたモデルを含む。
  • 原画に閲覧許可を問い合わせ、不許可なら、例外403 ActiveRecord::Forbiddenを発生させる。
  • 存在しない原画のidを要求された場合は、例外404 ActiveRecord::RecordNotFoundを発生させる。

編集取得

edit(id, artist)

パラメータ

  • id:コマid
  • artist:絵師データ

解説

  • idの原画を取得する。
  • 関連データとして単体取得オプションで定義されたモデルを含む。
  • 原画に所持判定を問い合わせ、不所持なら、例外403 ActiveRecord::Forbiddenを発生させる。
  • 存在しない原画のidを要求された場合は、例外404 ActiveRecord::RecordNotFoundを発生させる。

単体取得オプション

下記の関連テーブルを含む

  • resource_picture
  • pictures

絵師データは含まない。原画は本人しか操作できないので、自分に決まっているから。

json単体出力オプション

下記の関連テーブルのカラムを含む

  • resource_picture (*)
  • pictures

絵師データは含まない。原画は本人しか操作できないので、自分に決まっているから。

作成・更新

store(imager)

パラメータ

  • imager:画像処理ライブラリ

解説

画像に関する各種パラメータは画像ライブラリからもらえるが、絵師idは設定しないので上書き補充でセットしておくこと。

  • 画像ライブラリから、ext, width, height, filesize, md5を取得して、自身の属性としてセットする。
  • 検証に失敗したときロールバックするためにトランザクションを用意する。
  • 自身を保存する。
  • PictureIo経由で画像データを保存する。
    • 画像ライブラリからもらったバイナリデータとファイル名を渡す。(ファイル名には自身のidを使うので事前に保存が必要)
  • 画像データの保存までが正しく終わればTrueを返す。
  • 例外ケース
    • 画像処理ライブラリが初期化に失敗(False)していたなら、全体エラーを設定して、Falseを返して処理を抜ける。
    • 自身の保存に失敗したなら、Falseを返す。
    • 原画データの保存に失敗したなら、自身の全体エラーメッセージにその旨をセットしてロールバックしてFalseを返す。

削除

destroy_with_resource_picture

パラメータ

戻り

真偽

解説

レコードだけでなく、原画画像・素材も削除して、実素材は削除済画像に差し替える。

  • トランザクションを用意する。
  • 自身に削除を依頼する。
  • 保管庫に原画の画像データ削除を依頼する。
  • 自身にリンクされた素材があれば、素材に公開停止を依頼する。
  • すべての実素材に墨塗を依頼する。
  • 全ての削除が正しく終わればTrueを返す。
  • 例外ケース
    • 失敗したとき、ロールバックしてFalseを返す
    • 自身の削除に失敗した。
    • 画像の削除に失敗した。
    • 素材の削除に失敗した。
    • 実素材の墨塗に失敗した。

エクスポート

export dt = nil

パラメータ

  • dt:開始日時

戻り

開始日時以降の内原画リスト

解説

  • 開始日時以降に更新された内原画を返す。
  • 貸手からの原画は除く(絵師に作家がリンクされていない)
  • 素材モデルと絵師を含む。
  • 開始日時が省略された場合はすべての内原画を返す。

リストのjson化

self.list_as_json_text ary

パラメータ

  • ary:原画リスト

戻り

json文字列

解説

原画リストの各素材に画像データを添えて、json文字列にして返す。