class Groonga::Command::Parser::Command::GroongaCommandLogicalify

Public Class Methods

new() click to toggle source
# File lib/groonga/command/parser/command/groonga-command-logicalify.rb, line 26
def initialize
  @logical_table = nil
  @shard_key = nil
end

Public Instance Methods

run(argv=ARGV) click to toggle source
# File lib/groonga/command/parser/command/groonga-command-logicalify.rb, line 31
def run(argv=ARGV)
  begin
    parse_options!(argv)
  rescue OptionParser::ParseError
    puts($!.message)
    return false
  end

  input_paths = argv
  if input_paths.empty?
    logicalify($stdin)
  else
    input_paths.each do |input_path|
      File.open(input_path) do |input|
        logicalify(input)
      end
    end
  end

  true
end

Private Instance Methods

create_logical_select_command(arguments) click to toggle source
# File lib/groonga/command/parser/command/groonga-command-logicalify.rb, line 126
def create_logical_select_command(arguments)
  name = "logical_select"
  command_class = ::Groonga::Command.find(name)
  command_class.new(name, arguments)
end
format_time(time) click to toggle source
# File lib/groonga/command/parser/command/groonga-command-logicalify.rb, line 139
def format_time(time)
  time.strftime("%Y/%m/%d %H:%M:%S")
end
logicalify(input) click to toggle source
# File lib/groonga/command/parser/command/groonga-command-logicalify.rb, line 82
def logicalify(input)
  parser = Parser.new
  parser.on_command do |command|
    logicalify_command(command)
  end
  input.each_line do |line|
    parser << line
  end
end
logicalify_arguments(arguments) click to toggle source
# File lib/groonga/command/parser/command/groonga-command-logicalify.rb, line 132
def logicalify_arguments(arguments)
  arguments = arguments.merge(:logical_table => @logical_table,
                              :shard_key     => @shard_key)
  arguments.delete(:table)
  arguments
end
logicalify_command(command) click to toggle source
# File lib/groonga/command/parser/command/groonga-command-logicalify.rb, line 92
def logicalify_command(command)
  case command.name
  when "select"
    logicalify_command_select(command)
  end
end
logicalify_command_select(command) click to toggle source
# File lib/groonga/command/parser/command/groonga-command-logicalify.rb, line 99
def logicalify_command_select(command)
  min = nil
  max = nil
  case command[:table]
  when /\A#{Regexp.escape(@logical_table)}_(\d{4})(\d{2})(\d{2})\z/
    year = $1.to_i
    month = $2.to_i
    day = $3.to_i
    min = Time.local(year, month, day)
    max = min + (60 * 60 * 24)
  else
    return
  end

  arguments = logicalify_arguments(command.arguments)
  arguments[:min] = format_time(min)
  arguments[:min_border] = "include"
  arguments[:max] = format_time(max)
  arguments[:max_border] = "exclude"
  logical_select = create_logical_select_command(arguments)
  if command.uri_format?
    puts(logical_select.to_uri_format)
  else
    puts(logical_select.to_command_format)
  end
end
parse_options!(argv) click to toggle source
# File lib/groonga/command/parser/command/groonga-command-logicalify.rb, line 54
def parse_options!(argv)
  option_parser = OptionParser.new
  option_parser.banner += " INPUT_PATH1 INPUT_PATH2 ..."
  option_parser.version = VERSION

  option_parser.on("--logical-table=TABLE",
                   "Use TABLE as logical table name",
                   "[#{@logical_table}]") do |logical_table|
    @logical_table = logical_table
  end

  option_parser.on("--shard-key=COLUMN",
                   "Use COLUMN as shard key",
                   "[#{@shard_key}]") do |shard_key|
    @shard_key = shard_key
  end

  option_parser.parse!(argv)

  if @logical_table.nil?
    raise OptionParser::ParseError, "--logical-table is missing"
  end

  if @shard_key.nil?
    raise OptionParser::ParseError, "--shard-key is missing"
  end
end