Class: Groonga::Record
- Inherits:
-
Object
- Object
- Groonga::Record
- Defined in:
- lib/groonga/record.rb
Defined Under Namespace
Classes: AttributeHashBuilder
Instance Attribute Summary collapse
-
#table ⇒ Object
readonly
レコードが所属するテーブル.
Instance Method Summary collapse
-
#==(other) ⇒ Object
record と other が同じテーブルに属していて、さらに、 同じレコードIDを持つなら
true
を返し、そうでなければfalse
を返す。. -
#[](column_name) ⇒ Object
このレコードの column_name で指定されたカラムの値を返す。.
-
#[]=(column_name, value) ⇒ Object
Sets column value of the record.
- #added=(added) ⇒ Object
- #added? ⇒ Boolean
-
#append(column_name, value) ⇒ Object
このレコードの column_name で指定されたカラムの値の最後に value を追加する。.
- #as_json ⇒ Object
-
#attributes ⇒ Object
レコードが所属しているテーブルで定義されているインデックス 型のカラムでない全カラムを対象とし、カラムの名前をキーとし たこのレコードのカラムの値のハッシュを返す。.
-
#clear_lock(options = {}) ⇒ Object
レコードが所属するテーブルのロックを強制的に解除する。.
-
#columns ⇒ Object
レコードが所属するテーブルの全てのカラムを返す。.
-
#decrement!(name, delta = nil) ⇒ Object
このレコードの name で指定されたカラムの値を delta だけ減 少する。 delta が
nil
の場合は1減少する。. -
#delete ⇒ Object
レコードを削除する。.
-
#eql?(other) ⇒ Boolean
#== と同じ。.
-
#hash ⇒ Object
同じテーブルの同じIDのレコードに対しては常に同じハッシュ 値を返す。.
-
#have_column?(name) ⇒ Boolean
名前が name のカラムがレコードの所属するテーブルで定義され ているなら
true
を返す。. -
#increment!(name, delta = nil) ⇒ Object
このレコードの name で指定されたカラムの値を delta だけ増 加する。 delta が
nil
の場合は1増加する。. -
#index_column?(name) ⇒ Boolean
名前が name のカラムが索引カラム ( IndexColumn )であるなら
true
を返す。. -
#initialize(table, id, values = nil) ⇒ Record
constructor
table の id に対応するレコードを作成する。 values には各 カラムに設定する値を以下のような形式で指定する。.
-
#key ⇒ Object
レコードの主キーを返す。.
-
#lock(options = {}, &block) ⇒ Object
レコードが所属するテーブルをロックする。ロックに失敗した場 合は ResourceDeadlockAvoided 例外が発生する。.
-
#locked?(options = {}) ⇒ Boolean
レコードが所属するテーブルがロックされていれば
true
を返す。. - #methods(include_inherited = true) ⇒ Object
-
#n_sub_records ⇒ Object
主キーの値が同一であったレコードの件数を返す。検索結果とし て生成されたテーブルのみに定義される。.
-
#prepend(column_name, value) ⇒ Object
このレコードの column_name で指定されたカラムの値の最初に value を追加する。.
-
#record_id ⇒ Object
レコードを一意に識別するための情報を返す。.
-
#record_raw_id ⇒ Object
(also: #id)
レコードのIDを返す。.
-
#reference_column?(name) ⇒ Boolean
名前が name のカラムが参照カラムであるなら
true
を返す。. - #respond_to?(name) ⇒ Boolean
-
#scalar_column?(name) ⇒ Boolean
名前が name のカラムの値がスカラーであるなら
true
を返す。. -
#score ⇒ Object
レコードのスコア値を返す。検索結果として生成されたテーブル のみに定義される。.
-
#score=(new_score) ⇒ Object
Sets score.
-
#search(name, query, options = {}) ⇒ Object
名前が name の IndexColumn の search メソッドを呼ぶ。 query と options はそのメソッドにそのまま渡される。詳しく は IndexColumn#search を参照。.
-
#sub_records ⇒ SubRecords
Sub records of the record.
-
#support_key? ⇒ Boolean
record が所属するテーブルで主キーを使える場合は
true
を返し、使えない場合はfalse
を返す。. -
#support_score? ⇒ Boolean
#score が利用できる場合は
true
を 返す。. -
#support_sub_records? ⇒ Boolean
#n_sub_records が利用できる場合は
true
を 返す。. -
#to_json(*args) ⇒ String
The record formatted as JSON.
-
#unlock(options = {}) ⇒ Object
レコードが所属するテーブルのロックを解除する。.
-
#valid_id? ⇒ Boolean
レコードが持つIDが有効なIDであれば
true
を返す。. -
#value ⇒ Object
レコードの値を返す。.
-
#value=(value) ⇒ Object
レコードの値を設定する。既存の値は上書きされる。.
-
#vector_column?(name) ⇒ Boolean
名前が name のカラムの値がベクターであるなら
true
を返す。.
Constructor Details
#initialize(table, id, values = nil) ⇒ Record
41 42 43 44 45 46 47 48 49 50 |
# File 'lib/groonga/record.rb', line 41 def initialize(table, id, values=nil) @table = table @id = id @added = false if values values.each do |name, value| self[name] = value end end end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, &block) ⇒ Object (private)
387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 |
# File 'lib/groonga/record.rb', line 387 def method_missing(name, *args, &block) if /=\z/ =~ name.to_s base_name = $PREMATCH is_setter = true else base_name = name.to_s is_setter = false end _column = @table.column(base_name) if _column if is_setter _column.send("[]=", @id, *args, &block) else _column.send("[]", @id, *args, &block) end else super end end |
Instance Attribute Details
#table ⇒ Object (readonly)
レコードが所属するテーブル
26 27 28 |
# File 'lib/groonga/record.rb', line 26 def table @table end |
Instance Method Details
#==(other) ⇒ Object
record と other が同じテーブルに属していて、さらに、 同じレコードIDを持つなら true
を返し、そうでなければ false
を返す。
55 56 57 58 |
# File 'lib/groonga/record.rb', line 55 def ==(other) self.class == other.class and [table, id] == [other.table, other.id] end |
#[](column_name) ⇒ Object
このレコードの column_name で指定されたカラムの値を返す。
72 73 74 |
# File 'lib/groonga/record.rb', line 72 def [](column_name) @table.column_value(@id, column_name, :id => true) end |
#[]=(column_name, value) ⇒ Object #[]=(column_name, value_with_weight) ⇒ Object
Sets column value of the record.
98 99 100 |
# File 'lib/groonga/record.rb', line 98 def []=(column_name, value) @table.set_column_value(@id, column_name, value, :id => true) end |
#added=(added) ⇒ Object
343 344 345 |
# File 'lib/groonga/record.rb', line 343 def added=(added) @added = added end |
#added? ⇒ Boolean
338 339 340 |
# File 'lib/groonga/record.rb', line 338 def added? @added end |
#append(column_name, value) ⇒ Object
このレコードの column_name で指定されたカラムの値の最後に value を追加する。
104 105 106 |
# File 'lib/groonga/record.rb', line 104 def append(column_name, value) column(column_name).append(@id, value) end |
#as_json ⇒ Object
259 260 261 262 263 264 265 266 267 268 |
# File 'lib/groonga/record.rb', line 259 def as_json accessor = AttributeHashBuilder.new(self) do |value| if value.is_a?(Time) value.iso8601 else value end end accessor.build end |
#attributes ⇒ Object
レコードが所属しているテーブルで定義されているインデックス 型のカラムでない全カラムを対象とし、カラムの名前をキーとし たこのレコードのカラムの値のハッシュを返す。
return same attributes object if duplicate records exist.
254 255 256 257 |
# File 'lib/groonga/record.rb', line 254 def attributes accessor = AttributeHashBuilder.new(self) accessor.build end |
#clear_lock(options = {}) ⇒ Object
レコードが所属するテーブルのロックを強制的に解除する。
利用可能なオプションは現在は無い。
305 306 307 |
# File 'lib/groonga/record.rb', line 305 def clear_lock(={}) @table.clear_lock(.merge(:id => @id)) end |
#columns ⇒ Object
レコードが所属するテーブルの全てのカラムを返す。
245 246 247 |
# File 'lib/groonga/record.rb', line 245 def columns @table.columns end |
#decrement!(name, delta = nil) ⇒ Object
このレコードの name で指定されたカラムの値を delta だけ減 少する。 delta が nil
の場合は1減少する。
240 241 242 |
# File 'lib/groonga/record.rb', line 240 def decrement!(name, delta=nil) column(name).decrement!(@id, delta) end |
#delete ⇒ Object
レコードを削除する。
276 277 278 |
# File 'lib/groonga/record.rb', line 276 def delete @table.delete(@id) end |
#eql?(other) ⇒ Boolean
#== と同じ。
61 62 63 |
# File 'lib/groonga/record.rb', line 61 def eql?(other) self == other end |
#hash ⇒ Object
同じテーブルの同じIDのレコードに対しては常に同じハッシュ 値を返す。
67 68 69 |
# File 'lib/groonga/record.rb', line 67 def hash @table.hash ^ @id.hash end |
#have_column?(name) ⇒ Boolean
名前が name のカラムがレコードの所属するテーブルで定義され ているなら true
を返す。
122 123 124 |
# File 'lib/groonga/record.rb', line 122 def have_column?(name) not @table.column(normalize_column_name(name)).nil? end |
#increment!(name, delta = nil) ⇒ Object
このレコードの name で指定されたカラムの値を delta だけ増 加する。 delta が nil
の場合は1増加する。
234 235 236 |
# File 'lib/groonga/record.rb', line 234 def increment!(name, delta=nil) column(name).increment!(@id, delta) end |
#index_column?(name) ⇒ Boolean
名前が name のカラムが索引カラム ( IndexColumn )であるなら true
を返す。
133 134 135 |
# File 'lib/groonga/record.rb', line 133 def index_column?(name) column(name).index? end |
#key ⇒ Object
レコードの主キーを返す。
record が所属するテーブルが Array の場合は常 に nil
を返す。
162 163 164 165 166 167 168 |
# File 'lib/groonga/record.rb', line 162 def key if support_key? @key ||= @table.key(@id) else nil end end |
#lock(options = {}, &block) ⇒ Object
レコードが所属するテーブルをロックする。ロックに失敗した場 合は Groonga::ResourceDeadlockAvoided 例外が発生する。
ブロックを指定した場合はブロックを抜けたときにunlockする。
利用可能な option は以下の通り。
291 292 293 |
# File 'lib/groonga/record.rb', line 291 def lock(={}, &block) @table.lock(.merge(:id => @id), &block) end |
#locked?(options = {}) ⇒ Boolean
レコードが所属するテーブルがロックされていれば true
を返す。
利用可能なオプションは現在は無い。
312 313 314 |
# File 'lib/groonga/record.rb', line 312 def locked?(={}) @table.locked?(.merge(:id => @id)) end |
#methods(include_inherited = true) ⇒ Object
327 328 329 330 331 |
# File 'lib/groonga/record.rb', line 327 def methods(include_inherited=true) original_methods = super return original_methods unless include_inherited (original_methods + dynamic_methods).uniq end |
#n_sub_records ⇒ Object
主キーの値が同一であったレコードの件数を返す。検索結果とし て生成されたテーブルのみに定義される。
#support_sub_records? でこの値を利用でき るかがわかる。
212 213 214 |
# File 'lib/groonga/record.rb', line 212 def n_sub_records self["_nsubrecs"] end |
#prepend(column_name, value) ⇒ Object
このレコードの column_name で指定されたカラムの値の最初に value を追加する。
110 111 112 |
# File 'lib/groonga/record.rb', line 110 def prepend(column_name, value) column(column_name).prepend(@id, value) end |
#record_id ⇒ Object
レコードを一意に識別するための情報を返す。
record が所属するテーブルが Array の場合はID を返し、それ以外の場合は主キーを返す。
174 175 176 177 178 179 180 |
# File 'lib/groonga/record.rb', line 174 def record_id if support_key? key else id end end |
#record_raw_id ⇒ Object Also known as: id
レコードのIDを返す。
183 184 185 |
# File 'lib/groonga/record.rb', line 183 def record_raw_id @id end |
#reference_column?(name) ⇒ Boolean
名前が name のカラムが参照カラムであるなら true
を返す。
127 128 129 |
# File 'lib/groonga/record.rb', line 127 def reference_column?(name) column(name).reference? end |
#respond_to?(name) ⇒ Boolean
334 335 336 |
# File 'lib/groonga/record.rb', line 334 def respond_to?(name) super or !@table.column(name.to_s.sub(/=\z/, '')).nil? end |
#scalar_column?(name) ⇒ Boolean
名前が name のカラムの値がスカラーであるなら true
を返す。
147 148 149 |
# File 'lib/groonga/record.rb', line 147 def scalar_column?(name) column(name).scalar? end |
#score ⇒ Object
レコードのスコア値を返す。検索結果として生成されたテーブル のみに定義される。
190 191 192 |
# File 'lib/groonga/record.rb', line 190 def score self["_score"] end |
#score=(new_score) ⇒ Object
Sets score. Score column exists only search result table.
197 198 199 |
# File 'lib/groonga/record.rb', line 197 def score=(new_score) self["_score"] = new_score end |
#search(name, query, options = {}) ⇒ Object
名前が name の IndexColumn の search メソッドを呼ぶ。 query と options はそのメソッドにそのまま渡される。詳しく は IndexColumn#search を参照。
154 155 156 |
# File 'lib/groonga/record.rb', line 154 def search(name, query, ={}) column(name).search(query, ) end |
#sub_records ⇒ SubRecords
Returns Sub records of the record.
322 323 324 |
# File 'lib/groonga/record.rb', line 322 def sub_records SubRecords.new(self) end |
#support_key? ⇒ Boolean
record が所属するテーブルで主キーを使える場合は true
を返し、使えない場合は false
を返す。
116 117 118 |
# File 'lib/groonga/record.rb', line 116 def support_key? @table.support_key? end |
#support_score? ⇒ Boolean
#score が利用できる場合は true
を 返す。
203 204 205 |
# File 'lib/groonga/record.rb', line 203 def support_score? @table.have_column?("_score") # TODO delegate to Table end |
#support_sub_records? ⇒ Boolean
#n_sub_records が利用できる場合は true
を 返す。
218 219 220 |
# File 'lib/groonga/record.rb', line 218 def support_sub_records? @table.support_sub_records? end |
#to_json(*args) ⇒ String
Returns the record formatted as JSON.
271 272 273 |
# File 'lib/groonga/record.rb', line 271 def to_json(*args) as_json.to_json(*args) end |
#unlock(options = {}) ⇒ Object
レコードが所属するテーブルのロックを解除する。
利用可能なオプションは現在は無い。
298 299 300 |
# File 'lib/groonga/record.rb', line 298 def unlock(={}) @table.unlock(.merge(:id => @id)) end |
#valid_id? ⇒ Boolean
レコードが持つIDが有効なIDであれば true
を返す。
317 318 319 |
# File 'lib/groonga/record.rb', line 317 def valid_id? @table.exist?(@id) end |
#value ⇒ Object
レコードの値を返す。
223 224 225 |
# File 'lib/groonga/record.rb', line 223 def value @table.value(@id, :id => true) end |
#value=(value) ⇒ Object
レコードの値を設定する。既存の値は上書きされる。
228 229 230 |
# File 'lib/groonga/record.rb', line 228 def value=(value) @table.set_value(@id, value, :id => true) end |
#vector_column?(name) ⇒ Boolean
名前が name のカラムの値がベクターであるなら true
を返す。
140 141 142 |
# File 'lib/groonga/record.rb', line 140 def vector_column?(name) column(name).vector? end |