Module: Diva::ModelExtend
Overview
Diva::Model のクラスメソッド
Instance Attribute Summary collapse
-
#slug ⇒ Object
readonly
Returns the value of attribute slug.
-
#spec ⇒ Object
readonly
Returns the value of attribute spec.
Instance Method Summary collapse
-
#add_field(field, type: nil, required: false) ⇒ Object
Modelにフィールドを追加する。 ==== Args [field_name] Symbol フィールドの名前 [type] Symbol フィールドのタイプ。:int, :string, :bool, :time のほか、Diva::Modelのサブクラスを指定する [required] boolean true なら、この項目を必須とする.
- #container_class ⇒ Object
-
#field ⇒ Object
プライベートクラスメソッド.
- #fields ⇒ Object (also: #keys)
-
#find_by_uri(uri) ⇒ Object
URIに対応するリソースの内容を持ったModelを作成する。 URIに対応する情報はネットワーク上などから取得される場合もある。そういった場合はこのメソッドは Delayer::Deferred::Deferredable を返す可能性がある。 とくにオーバライドしない場合、このメソッドは常に例外 Diva::NotImplementedError を投げる。 ==== Args [uri] handle メソッドで指定したいずれかの条件に一致するURI ==== Return [Delayer::Deferred::Deferredable] ネットワークアクセスを行って取得するなど取得に時間がかかる場合 [self] すぐにModelを生成できる場合、そのModel ==== Raise [Diva::NotImplementedError] このModelでは、find_by_uriが実装されていない [Diva::ModelNotFoundError] uri に対応するリソースが見つからなかった.
-
#host ⇒ Object
Modelのインスタンスのホスト名。オーバライドして適切な値にする ==== Return [String] ホスト名.
- #schema ⇒ Object
-
#scheme ⇒ Object
Modelのインスタンスのuriスキーム。オーバライドして適切な値にする ==== Return [String] URIスキーム.
-
#store_datum(retriever) ⇒ Object
Modelが生成・更新された時に呼ばれるコールバックメソッドです.
- #uri ⇒ Object
Instance Attribute Details
#slug ⇒ Object (readonly)
Returns the value of attribute slug.
12 13 14 |
# File 'lib/diva/model_extend.rb', line 12 def slug @slug end |
#spec ⇒ Object (readonly)
Returns the value of attribute spec.
12 13 14 |
# File 'lib/diva/model_extend.rb', line 12 def spec @spec end |
Instance Method Details
#add_field(field, type: nil, required: false) ⇒ Object
Modelにフィールドを追加する。
Args
- field_name
-
Symbol フィールドの名前
- type
-
Symbol フィールドのタイプ。:int, :string, :bool, :time のほか、Diva::Modelのサブクラスを指定する
- required
-
boolean true なら、この項目を必須とする
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/diva/model_extend.rb', line 33 def add_field(field, type: nil, required: false) if field.is_a?(Symbol) field = Diva::Field.new(field, type, required: required) end (@fields ||= []) << field define_method(field.name) do @value[field.name] end define_method("#{field.name}?") do !!@value[field.name] end define_method("#{field.name}=") do |value| @value[field.name] = field.type.cast(value) self.class.store_datum(self) value end self end |
#container_class ⇒ Object
102 103 104 |
# File 'lib/diva/model_extend.rb', line 102 def container_class Array end |
#field ⇒ Object
プライベートクラスメソッド
75 76 77 |
# File 'lib/diva/model_extend.rb', line 75 def field Diva::FieldGenerator.new(self) end |
#fields ⇒ Object Also known as: keys
54 55 56 |
# File 'lib/diva/model_extend.rb', line 54 def fields @fields ||= [] end |
#find_by_uri(uri) ⇒ Object
URIに対応するリソースの内容を持ったModelを作成する。 URIに対応する情報はネットワーク上などから取得される場合もある。そういった場合はこのメソッドは Delayer::Deferred::Deferredable を返す可能性がある。 とくにオーバライドしない場合、このメソッドは常に例外 Diva::NotImplementedError を投げる。
Args
- uri
-
handle メソッドで指定したいずれかの条件に一致するURI
Return
- Delayer::Deferred::Deferredable
-
ネットワークアクセスを行って取得するなど取得に時間がかかる場合
- self
-
すぐにModelを生成できる場合、そのModel
Raise
- Diva::NotImplementedError
-
このModelでは、find_by_uriが実装されていない
- Diva::ModelNotFoundError
-
uri に対応するリソースが見つからなかった
95 96 97 |
# File 'lib/diva/model_extend.rb', line 95 def find_by_uri(uri) raise Diva::NotImplementedError, "#{self}.find_by_uri does not implement." end |
#host ⇒ Object
Modelのインスタンスのホスト名。オーバライドして適切な値にする
Return
- String
-
ホスト名
24 25 26 |
# File 'lib/diva/model_extend.rb', line 24 def host @_host ||= to_s.split('::', 2).last.split('::').reverse.join('.').gsub(/[^\w.]/, '').downcase.freeze end |
#schema ⇒ Object
60 61 62 63 64 65 |
# File 'lib/diva/model_extend.rb', line 60 def schema { fields: fields.map(&:schema), uri: uri } end |
#scheme ⇒ Object
Modelのインスタンスのuriスキーム。オーバライドして適切な値にする
Return
- String
-
URIスキーム
17 18 19 |
# File 'lib/diva/model_extend.rb', line 17 def scheme @_scheme ||= to_s.split('::', 2).first.gsub(/\W/, '').downcase.freeze end |
#store_datum(retriever) ⇒ Object
Modelが生成・更新された時に呼ばれるコールバックメソッドです
100 |
# File 'lib/diva/model_extend.rb', line 100 def store_datum(retriever); end |