class GrnMini::Table
Attributes
grn[RW]
Public Class Methods
new(name, grn)
click to toggle source
# File lib/grn_mini/table.rb, line 11 def initialize(name, grn) @name = name @grn = grn @terms = Groonga["Terms"] || Groonga::PatriciaTrie.create(name: "Terms", key_normalize: true, default_tokenizer: GrnMini::default_tokenizer) @setup_columns_once = false end
Public Instance Methods
each() { |record| ... }
click to toggle source
# File lib/grn_mini/table.rb, line 102 def each @grn.each do |record| yield record end end
empty?()
click to toggle source
# File lib/grn_mini/table.rb, line 98 def empty? size == 0 end
group(key, options = {})
click to toggle source
# File lib/grn_mini/table.rb, line 112 def group(key, options = {}) @grn.group(key, options) end
need_setup_columns?()
click to toggle source
# File lib/grn_mini/table.rb, line 18 def need_setup_columns? !@setup_columns_once && empty? end
select(*args, &block)
click to toggle source
# File lib/grn_mini/table.rb, line 90 def select(*args, &block) @grn.select(*args, &block) end
setup_columns(hash)
click to toggle source
# File lib/grn_mini/table.rb, line 22 def setup_columns(hash) Groonga::Schema.define do |schema| schema.change_table(@name) do |table| hash.each do |key, value| column = key.to_s if value.is_a?(::Array) table.column(column, value_type(value), type: :vector) else table.column(column, value_type(value)) end end end schema.change_table("Terms") do |table| hash.each do |key, value| column = key.to_s if value.is_a?(String) table.index("#{@name}.#{column}", with_position: true) end end end hash.each do |key, value| column = key.to_s if value.is_a?(::Array) elem = value.first if elem.is_a?(GrnMini::Table) schema.change_table(elem.grn.name) do |table| table.index("#{@grn.name}.#{column}") end elsif elem.is_a?(Groonga::Table) schema.change_table(elem.name) do |table| table.index("#{@grn.name}.#{column}") end end end end end @setup_columns_once = true end
size()
click to toggle source
# File lib/grn_mini/table.rb, line 94 def size @grn.size end
sort(keys, options = {})
click to toggle source
# File lib/grn_mini/table.rb, line 108 def sort(keys, options = {}) @grn.sort(keys, options) end
value_type(value)
click to toggle source
# File lib/grn_mini/table.rb, line 68 def value_type(value) if value.is_a?(TrueClass) || value.is_a?(FalseClass) "Bool" elsif value.is_a?(Integer) "Int32" elsif value.is_a?(Float) "Float" elsif value.is_a?(Time) "Time" elsif value.is_a?(String) "ShortText" elsif value.is_a?(GrnMini::Table) value.grn.name elsif value.is_a?(Groonga::Table) value.name elsif value.is_a?(::Array) value_type(value.first) else raise NotSupportColumnType, value end end