Module: Diva::ModelExtend

Extended by:
Gem::Deprecate
Included in:
Model
Defined in:
lib/diva/model_extend.rb

Overview

Diva::Model のクラスメソッド

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#slugObject (readonly)

Returns the value of attribute slug.



12
13
14
# File 'lib/diva/model_extend.rb', line 12

def slug
  @slug
end

#specObject (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_classObject



102
103
104
# File 'lib/diva/model_extend.rb', line 102

def container_class
  Array
end

#fieldObject

プライベートクラスメソッド



75
76
77
# File 'lib/diva/model_extend.rb', line 75

def field
  Diva::FieldGenerator.new(self)
end

#fieldsObject 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

#hostObject

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

#schemaObject



60
61
62
63
64
65
# File 'lib/diva/model_extend.rb', line 60

def schema
  {
    fields: fields.map(&:schema),
    uri: uri
  }
end

#schemeObject

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

#uriObject



67
68
69
# File 'lib/diva/model_extend.rb', line 67

def uri
  @uri ||= Diva::URI("diva://object.type/#{slug || SecureRandom.uuid}")
end