require 'rails_rank/base'

module Rankings

class <%= class_name %> < RailsRank::Base

  # return driver class of rails_kvs_driver.
  #
  # @example use rails_kvs_driver-redis_driver
  # def self.rails_kvs_driver
  #   RailsKvsDriver::RedisDriver::Driver
  # end
  #
  # @return [RailsKvsDriver::Base] return driver class of rails_kvs_driver.
  def self.rails_kvs_driver
    raise NoMethodError 'Should override lib/rankings/<%= file_name %>.rb rails_kvs_driver method.'
  end

  # return driver config of rails_kvs_driver.
  #
  # @return [Hash] return driver config of rails_kvs_driver.
  def self.rails_kvs_driver_config
    {
      :host           => 'localhost',                  # host of KVS.
      :port           => 6379,                         # port of KVS.
      :namespace      => 'Ranking::<%= class_name %>', # namespace of avoid a conflict with key
      :timeout_sec    => 5,                            # timeout seconds.
      :pool_size      => 5,                            # connection pool size.
      :config_key     => :none                         # this key is option.(defaults=:none)
                                                       #  when set this key.
                                                       #  will refer to a connection-pool based on config_key,
                                                       #  even if driver setting is the same without this key.
    }
  end

  # callbacked after table.
  # if use data, override this method.
  #
  # @param date_type [RailsRank::Types::Date] type of tabulation.
  # @param time      [Time]                   time slot of tabulation.
  # @param value     [String]                 value of tabulation.
  # @param score     [Integer]                score of value.
  # @param position  [Integer]                position of value.
  def self.after_table(date_type, time, value, score, position)
  end

  # callbacked after table all data of the time slot.
  #
  # @param date_type [RailsRank::Types::Date] the type of tabulation.
  # @param base_time [Time]                   the base time of tabulation.
  def self.after_table_all(date_type, base_time)
  end
end

end