Sha256: 71cf901d988e3120e3c6fb18d17cc05a2ec4b50b5d3f74aa27ca9fe886cdced7

Contents?: true

Size: 1.66 KB

Versions: 14

Compression:

Stored size: 1.66 KB

Contents

module Moysklad::Resources
  class Indexed  < SimpleDelegator
    WrongEntriesCountError = Class.new StandardError
    NoIdInEntity  = Class.new StandardError

    include WhereFilter
    include LoadAll
    include IndexedCache

    def initialize resource
      raise TypeError, 'resource должен быть Moysklad::Resources::Base' unless resource.is_a? Moysklad::Resources::Base
      super resource
    end

    # Автоматически подгружает постранично данныез из API и возвращает их все сразу.
    #
    # @return [Array of Moysklad::Entities::Base]
    def all(params = {})
      cache_fetch do
        pull_list(params)
      end
    end

    # Возвращает запрашивемую запись из кеша.
    # Предварительно подгружает все записи через метод `all`
    #
    # @return Moyskald::Entities::Base
    def find id
      index[id]
    end

    # Перечень id-ов всех элементов в ресуресе
    #
    # @return [Array of uuids]
    def uuids
      index.keys
    end

    # Неиндексированный ресурс
    #
    # @return Moysklad::Resources::Base
    def resource
      __getobj__
    end

    private

    def values
      index.values
    end

    def index
      pull_list unless cached_index
      cached_index
    end

    def pull_list(params={})
      load_all(params)
    end

    def prepare_index list
      i={}
      list.each do |r|
        raise NoIdInEntity, "У объекта нет id: #{r}" unless r.respond_to?(:id) && r.id
        i[r.id]=r
      end
      return i
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
moysklad-0.4.9 lib/moysklad/resources/indexed.rb
moysklad-0.4.8 lib/moysklad/resources/indexed.rb
moysklad-0.4.7 lib/moysklad/resources/indexed.rb
moysklad-0.4.6 lib/moysklad/resources/indexed.rb
moysklad-0.4.5 lib/moysklad/resources/indexed.rb
moysklad-0.4.4 lib/moysklad/resources/indexed.rb
moysklad-0.4.3 lib/moysklad/resources/indexed.rb
moysklad-0.4.2 lib/moysklad/resources/indexed.rb
moysklad-0.4.1 lib/moysklad/resources/indexed.rb
moysklad-0.4.0 lib/moysklad/resources/indexed.rb
moysklad-0.3.4 lib/moysklad/resources/indexed.rb
moysklad-0.3.3 lib/moysklad/resources/indexed.rb
moysklad-0.3.2 lib/moysklad/resources/indexed.rb
moysklad-0.3.1 lib/moysklad/resources/indexed.rb