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 を参照。.
-
#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
39 40 41 42 43 44 45 46 47 48 |
# File 'lib/groonga/record.rb', line 39 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)
380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 |
# File 'lib/groonga/record.rb', line 380 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)
レコードが所属するテーブル
24 25 26 |
# File 'lib/groonga/record.rb', line 24 def table @table end |
Instance Method Details
#==(other) ⇒ Object
record と other が同じテーブルに属していて、さらに、同じレコードIDを持つなら true
を返し、そうでなければfalse
を返す。
53 54 55 56 |
# File 'lib/groonga/record.rb', line 53 def ==(other) self.class == other.class and [table, id] == [other.table, other.id] end |
#[](column_name) ⇒ Object
このレコードの column_name で指定されたカラムの値を返す。
70 71 72 |
# File 'lib/groonga/record.rb', line 70 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.
96 97 98 |
# File 'lib/groonga/record.rb', line 96 def []=(column_name, value) @table.set_column_value(@id, column_name, value, :id => true) end |
#added=(added) ⇒ Object
336 337 338 |
# File 'lib/groonga/record.rb', line 336 def added=(added) @added = added end |
#added? ⇒ Boolean
331 332 333 |
# File 'lib/groonga/record.rb', line 331 def added? @added end |
#append(column_name, value) ⇒ Object
このレコードの column_name で指定されたカラムの値の最後にvalue を追加する。
102 103 104 |
# File 'lib/groonga/record.rb', line 102 def append(column_name, value) column(column_name).append(@id, value) end |
#as_json ⇒ Object
257 258 259 260 261 262 263 264 265 266 |
# File 'lib/groonga/record.rb', line 257 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.
252 253 254 255 |
# File 'lib/groonga/record.rb', line 252 def attributes accessor = AttributeHashBuilder.new(self) accessor.build end |
#clear_lock(options = {}) ⇒ Object
レコードが所属するテーブルのロックを強制的に解除する。
利用可能なオプションは現在は無い。
303 304 305 |
# File 'lib/groonga/record.rb', line 303 def clear_lock(={}) @table.clear_lock(.merge(:id => @id)) end |
#columns ⇒ Object
レコードが所属するテーブルの全てのカラムを返す。
243 244 245 |
# File 'lib/groonga/record.rb', line 243 def columns @table.columns end |
#decrement!(name, delta = nil) ⇒ Object
このレコードの name で指定されたカラムの値を delta だけ減少する。 delta が nil
の場合は1減少する。
238 239 240 |
# File 'lib/groonga/record.rb', line 238 def decrement!(name, delta=nil) column(name).decrement!(@id, delta) end |
#delete ⇒ Object
レコードを削除する。
274 275 276 |
# File 'lib/groonga/record.rb', line 274 def delete @table.delete(@id) end |
#eql?(other) ⇒ Boolean
#== と同じ。
59 60 61 |
# File 'lib/groonga/record.rb', line 59 def eql?(other) self == other end |
#hash ⇒ Object
同じテーブルの同じIDのレコードに対しては常に同じハッシュ値を返す。
65 66 67 |
# File 'lib/groonga/record.rb', line 65 def hash @table.hash ^ @id.hash end |
#have_column?(name) ⇒ Boolean
名前が name のカラムがレコードの所属するテーブルで定義されているなら true
を返す。
120 121 122 |
# File 'lib/groonga/record.rb', line 120 def have_column?(name) not @table.column(normalize_column_name(name)).nil? end |
#increment!(name, delta = nil) ⇒ Object
このレコードの name で指定されたカラムの値を delta だけ増加する。 delta が nil
の場合は1増加する。
232 233 234 |
# File 'lib/groonga/record.rb', line 232 def increment!(name, delta=nil) column(name).increment!(@id, delta) end |
#index_column?(name) ⇒ Boolean
名前が name のカラムが索引カラム( IndexColumn )であるなら true
を返す。
131 132 133 |
# File 'lib/groonga/record.rb', line 131 def index_column?(name) column(name).index? end |
#key ⇒ Object
レコードの主キーを返す。
record が所属するテーブルが Array の場合は常に nil
を返す。
160 161 162 163 164 165 166 |
# File 'lib/groonga/record.rb', line 160 def key if support_key? @key ||= @table.key(@id) else nil end end |
#lock(options = {}, &block) ⇒ Object
レコードが所属するテーブルをロックする。ロックに失敗した場合は Groonga::ResourceDeadlockAvoided 例外が発生する。
ブロックを指定した場合はブロックを抜けたときにunlockする。
利用可能な option は以下の通り。
289 290 291 |
# File 'lib/groonga/record.rb', line 289 def lock(={}, &block) @table.lock(.merge(:id => @id), &block) end |
#locked?(options = {}) ⇒ Boolean
レコードが所属するテーブルがロックされていれば true
を返す。
利用可能なオプションは現在は無い。
310 311 312 |
# File 'lib/groonga/record.rb', line 310 def locked?(={}) @table.locked?(.merge(:id => @id)) end |
#methods(include_inherited = true) ⇒ Object
320 321 322 323 324 |
# File 'lib/groonga/record.rb', line 320 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? でこの値を利用できるかがわかる。
210 211 212 |
# File 'lib/groonga/record.rb', line 210 def n_sub_records self["_nsubrecs"] end |
#prepend(column_name, value) ⇒ Object
このレコードの column_name で指定されたカラムの値の最初にvalue を追加する。
108 109 110 |
# File 'lib/groonga/record.rb', line 108 def prepend(column_name, value) column(column_name).prepend(@id, value) end |
#record_id ⇒ Object
レコードを一意に識別するための情報を返す。
record が所属するテーブルが Array の場合はID を返し、それ以外の場合は主キーを返す。
172 173 174 175 176 177 178 |
# File 'lib/groonga/record.rb', line 172 def record_id if support_key? key else id end end |
#record_raw_id ⇒ Object Also known as: id
レコードのIDを返す。
181 182 183 |
# File 'lib/groonga/record.rb', line 181 def record_raw_id @id end |
#reference_column?(name) ⇒ Boolean
名前が name のカラムが参照カラムであるなら true
を返す。
125 126 127 |
# File 'lib/groonga/record.rb', line 125 def reference_column?(name) column(name).reference? end |
#respond_to?(name) ⇒ Boolean
327 328 329 |
# File 'lib/groonga/record.rb', line 327 def respond_to?(name) super or !@table.column(name.to_s.sub(/=\z/, '')).nil? end |
#scalar_column?(name) ⇒ Boolean
名前が name のカラムの値がスカラーであるなら true
を返す。
145 146 147 |
# File 'lib/groonga/record.rb', line 145 def scalar_column?(name) column(name).scalar? end |
#score ⇒ Object
レコードのスコア値を返す。検索結果として生成されたテーブルのみに定義される。
188 189 190 |
# File 'lib/groonga/record.rb', line 188 def score self["_score"] end |
#score=(new_score) ⇒ Object
Sets score. Score column exists only search result table.
195 196 197 |
# File 'lib/groonga/record.rb', line 195 def score=(new_score) self["_score"] = new_score end |
#search(name, query, options = {}) ⇒ Object
名前が name の IndexColumn の search メソッドを呼ぶ。query と options はそのメソッドにそのまま渡される。詳しくは IndexColumn#search を参照。
152 153 154 |
# File 'lib/groonga/record.rb', line 152 def search(name, query, ={}) column(name).search(query, ) end |
#support_key? ⇒ Boolean
record が所属するテーブルで主キーを使える場合は true
を返し、使えない場合は false
を返す。
114 115 116 |
# File 'lib/groonga/record.rb', line 114 def support_key? @table.support_key? end |
#support_score? ⇒ Boolean
#score が利用できる場合は true
を返す。
201 202 203 |
# File 'lib/groonga/record.rb', line 201 def support_score? @table.have_column?("_score") # TODO delegate to Table end |
#support_sub_records? ⇒ Boolean
#n_sub_records が利用できる場合は true
を返す。
216 217 218 |
# File 'lib/groonga/record.rb', line 216 def support_sub_records? @table.support_sub_records? end |
#to_json(*args) ⇒ String
Returns the record formatted as JSON.
269 270 271 |
# File 'lib/groonga/record.rb', line 269 def to_json(*args) as_json.to_json(*args) end |
#unlock(options = {}) ⇒ Object
レコードが所属するテーブルのロックを解除する。
利用可能なオプションは現在は無い。
296 297 298 |
# File 'lib/groonga/record.rb', line 296 def unlock(={}) @table.unlock(.merge(:id => @id)) end |
#valid_id? ⇒ Boolean
レコードが持つIDが有効なIDであれば true
を返す。
315 316 317 |
# File 'lib/groonga/record.rb', line 315 def valid_id? @table.exist?(@id) end |
#value ⇒ Object
レコードの値を返す。
221 222 223 |
# File 'lib/groonga/record.rb', line 221 def value @table.value(@id, :id => true) end |
#value=(value) ⇒ Object
レコードの値を設定する。既存の値は上書きされる。
226 227 228 |
# File 'lib/groonga/record.rb', line 226 def value=(value) @table.set_value(@id, value, :id => true) end |
#vector_column?(name) ⇒ Boolean
名前が name のカラムの値がベクターであるなら true
を返す。
138 139 140 |
# File 'lib/groonga/record.rb', line 138 def vector_column?(name) column(name).vector? end |