Sha256: 470d95fe937749cc97f39eac5303d62c10d24613ecfbc26c66071e71f63124ae
Contents?: true
Size: 1.89 KB
Versions: 1
Compression:
Stored size: 1.89 KB
Contents
module Vk class Result include Enumerable # @example # Vk::Result.new('database.getCountries', Vk::Country, options) def initialize(method, items_class, options = {}, merged_attributes = {}) @items = [] @amount = 0 @client = options.delete(:client) { Vk.client } @items_class = items_class @method = method @options = options @options[:offset] ||= 0 @options[:count] ||= 100 @merged_attributes = merged_attributes end # @return [Fixnum] def count load_items unless @count @count end # @return [Fixnum] def amount @items.size end # @return [<Vk::Base>] attr_reader :items def each(&block) @items.each do |item| block.call(item) end while amount && count && amount < count increase_offset! load_items(&block) end end # @return [<Vk::Base>] def all while amount && count && amount < count increase_offset! load_items end @items end def method_missing(name, *arguments, &block) if respond_to_missing?(name, false) @items_class.public_send(name, *arguments, &block) else super end end # @param [String] name # @param [Boolean] include_all def respond_to_missing?(name, include_all) @items_class.respond_to?(name, include_all) end private def increase_offset! @options[:offset] = amount end def load_items(&block) raise Vk::TooMuchArguments.new(@method, 'count', 1000) if @options[:count].try(:>, 1000) data = @client.request(@method, @options) return unless data @count = data['count'] sleep 0.5 data['items'].each do |item| item = @items_class.new(item.merge(@merged_attributes)) @items << item block.call(item) if block_given? end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
vk-0.6.5.53 | lib/vk/result.rb |