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 には各 カラムに設定する値を以下のような形式で指定する。.
- #inspect ⇒ Object
-
#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 を 返す。.
-
#support_value? ⇒ Boolean
created with value type,
false
otherwise. -
#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)
398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 |
# File 'lib/groonga/record.rb', line 398 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
349 350 351 |
# File 'lib/groonga/record.rb', line 349 def added=(added) @added = added end |
#added? ⇒ Boolean
344 345 346 |
# File 'lib/groonga/record.rb', line 344 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
265 266 267 268 269 270 271 272 273 274 |
# File 'lib/groonga/record.rb', line 265 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.
260 261 262 263 |
# File 'lib/groonga/record.rb', line 260 def attributes accessor = AttributeHashBuilder.new(self) accessor.build end |
#clear_lock(options = {}) ⇒ Object
レコードが所属するテーブルのロックを強制的に解除する。
利用可能なオプションは現在は無い。
311 312 313 |
# File 'lib/groonga/record.rb', line 311 def clear_lock(={}) @table.clear_lock(.merge(:id => @id)) end |
#columns ⇒ Object
レコードが所属するテーブルの全てのカラムを返す。
251 252 253 |
# File 'lib/groonga/record.rb', line 251 def columns @table.columns end |
#decrement!(name, delta = nil) ⇒ Object
このレコードの name で指定されたカラムの値を delta だけ減 少する。 delta が nil の場合は1減少する。
246 247 248 |
# File 'lib/groonga/record.rb', line 246 def decrement!(name, delta=nil) column(name).decrement!(@id, delta) end |
#delete ⇒ Object
レコードを削除する。
282 283 284 |
# File 'lib/groonga/record.rb', line 282 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 を返す。
128 129 130 |
# File 'lib/groonga/record.rb', line 128 def have_column?(name) not @table.column(normalize_column_name(name)).nil? end |
#increment!(name, delta = nil) ⇒ Object
このレコードの name で指定されたカラムの値を delta だけ増 加する。 delta が nil の場合は1増加する。
240 241 242 |
# File 'lib/groonga/record.rb', line 240 def increment!(name, delta=nil) column(name).increment!(@id, delta) end |
#index_column?(name) ⇒ Boolean
名前が name のカラムが索引カラム ( IndexColumn )であるなら true を返す。
139 140 141 |
# File 'lib/groonga/record.rb', line 139 def index_column?(name) column(name).index? end |
#inspect ⇒ Object
354 355 356 |
# File 'lib/groonga/record.rb', line 354 def inspect super.gsub(/>\z/, ", attributes: #{attributes.inspect}>") end |
#key ⇒ Object
レコードの主キーを返す。
record が所属するテーブルが Array の場合は常 に nil を返す。
168 169 170 171 172 173 174 |
# File 'lib/groonga/record.rb', line 168 def key if support_key? @key ||= @table.key(@id) else nil end end |
#lock(options = {}, &block) ⇒ Object
レコードが所属するテーブルをロックする。ロックに失敗した場 合は Groonga::ResourceDeadlockAvoided 例外が発生する。
ブロックを指定した場合はブロックを抜けたときにunlockする。
利用可能な option は以下の通り。
297 298 299 |
# File 'lib/groonga/record.rb', line 297 def lock(={}, &block) @table.lock(.merge(:id => @id), &block) end |
#locked?(options = {}) ⇒ Boolean
レコードが所属するテーブルがロックされていれば true を返す。
利用可能なオプションは現在は無い。
318 319 320 |
# File 'lib/groonga/record.rb', line 318 def locked?(={}) @table.locked?(.merge(:id => @id)) end |
#methods(include_inherited = true) ⇒ Object
333 334 335 336 337 |
# File 'lib/groonga/record.rb', line 333 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? でこの値を利用でき るかがわかる。
218 219 220 |
# File 'lib/groonga/record.rb', line 218 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 を返し、それ以外の場合は主キーを返す。
180 181 182 183 184 185 186 |
# File 'lib/groonga/record.rb', line 180 def record_id if support_key? key else id end end |
#record_raw_id ⇒ Object Also known as: id
レコードのIDを返す。
189 190 191 |
# File 'lib/groonga/record.rb', line 189 def record_raw_id @id end |
#reference_column?(name) ⇒ Boolean
名前が name のカラムが参照カラムであるなら true を返す。
133 134 135 |
# File 'lib/groonga/record.rb', line 133 def reference_column?(name) column(name).reference? end |
#respond_to?(name) ⇒ Boolean
340 341 342 |
# File 'lib/groonga/record.rb', line 340 def respond_to?(name) super or !@table.column(name.to_s.sub(/=\z/, '')).nil? end |
#scalar_column?(name) ⇒ Boolean
名前が name のカラムの値がスカラーであるなら true を返す。
153 154 155 |
# File 'lib/groonga/record.rb', line 153 def scalar_column?(name) column(name).scalar? end |
#score ⇒ Object
レコードのスコア値を返す。検索結果として生成されたテーブル のみに定義される。
196 197 198 |
# File 'lib/groonga/record.rb', line 196 def score self["_score"] end |
#score=(new_score) ⇒ Object
Sets score. Score column exists only search result table.
203 204 205 |
# File 'lib/groonga/record.rb', line 203 def score=(new_score) self["_score"] = new_score end |
#search(name, query, options = {}) ⇒ Object
名前が name の IndexColumn の search メソッドを呼ぶ。 query と options はそのメソッドにそのまま渡される。詳しく は IndexColumn#search を参照。
160 161 162 |
# File 'lib/groonga/record.rb', line 160 def search(name, query, ={}) column(name).search(query, ) end |
#sub_records ⇒ SubRecords
Returns Sub records of the record.
328 329 330 |
# File 'lib/groonga/record.rb', line 328 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 を 返す。
209 210 211 |
# File 'lib/groonga/record.rb', line 209 def support_score? @table.have_column?("_score") # TODO delegate to Table end |
#support_sub_records? ⇒ Boolean
#n_sub_records が利用できる場合は true を 返す。
224 225 226 |
# File 'lib/groonga/record.rb', line 224 def support_sub_records? @table.support_sub_records? end |
#support_value? ⇒ Boolean
created with value type, false
otherwise.
122 123 124 |
# File 'lib/groonga/record.rb', line 122 def support_value? @table.support_value? end |
#to_json(*args) ⇒ String
Returns the record formatted as JSON.
277 278 279 |
# File 'lib/groonga/record.rb', line 277 def to_json(*args) as_json.to_json(*args) end |
#unlock(options = {}) ⇒ Object
レコードが所属するテーブルのロックを解除する。
利用可能なオプションは現在は無い。
304 305 306 |
# File 'lib/groonga/record.rb', line 304 def unlock(={}) @table.unlock(.merge(:id => @id)) end |
#valid_id? ⇒ Boolean
レコードが持つIDが有効なIDであれば true を返す。
323 324 325 |
# File 'lib/groonga/record.rb', line 323 def valid_id? @table.exist?(@id) end |
#value ⇒ Object
レコードの値を返す。
229 230 231 |
# File 'lib/groonga/record.rb', line 229 def value @table.value(@id, :id => true) end |
#value=(value) ⇒ Object
レコードの値を設定する。既存の値は上書きされる。
234 235 236 |
# File 'lib/groonga/record.rb', line 234 def value=(value) @table.set_value(@id, value, :id => true) end |
#vector_column?(name) ⇒ Boolean
名前が name のカラムの値がベクターであるなら true を返す。
146 147 148 |
# File 'lib/groonga/record.rb', line 146 def vector_column?(name) column(name).vector? end |