Class: Dimelo::CCP::API::LazzyCollection

Inherits:
BasicObject
Includes:
Enumerable
Defined in:
lib/dimelo/ccp/api/lazzy_collection.rb

Defined Under Namespace

Classes: Paginator

Constant Summary

Constants inherited from BasicObject

BasicObject::KEEP_METHODS

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from BasicObject

remove_methods!

Constructor Details

#initialize(params = {}, &block) ⇒ LazzyCollection

Returns a new instance of LazzyCollection.



23
24
25
# File 'lib/dimelo/ccp/api/lazzy_collection.rb', line 23

def initialize(params={}, &block)
  @paginator = Paginator.new(params, &block)
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args, &block) ⇒ Object (protected)

/!\ Fetch all API, please avoid this behavior



58
59
60
61
62
63
# File 'lib/dimelo/ccp/api/lazzy_collection.rb', line 58

def method_missing(name, *args, &block)
  super unless respond_to?(name)
  warn %{WARNING: Method '#{name}` called on LazzyCollection object from #{Kernel.caller.first}.
  All API items might be fetched, so please verify that you are a consenting adult.}
  self.to_a.send(name, *args, &block)
end

Instance Attribute Details

#paginatorObject (readonly)

Returns the value of attribute paginator.



21
22
23
# File 'lib/dimelo/ccp/api/lazzy_collection.rb', line 21

def paginator
  @paginator
end

Class Method Details

.new(params, &block) ⇒ Object



10
11
12
13
14
15
16
17
# File 'lib/dimelo/ccp/api/lazzy_collection.rb', line 10

def new(params, &block)
  if (params.has_key?(:offset) || params.has_key?('offset'))
    yield params
  else
    instance = super(params, &block)
    instance.paginator.first.is_a?(Enumerable) ? instance : instance.paginator.first
  end
end

Instance Method Details

#[](index) ⇒ Object



27
28
29
# File 'lib/dimelo/ccp/api/lazzy_collection.rb', line 27

def [](index)
  paginator.get_item_at(index)
end

#each(&block) ⇒ Object



40
41
42
43
44
45
46
47
48
49
# File 'lib/dimelo/ccp/api/lazzy_collection.rb', line 40

def each(&block)
  index = 0
  while true
    item = paginator.get_item_at(index)
    break if item.nil?
    yield item if block.present?
    index += 1
  end
  paginator.flatten
end

#inspectObject



51
52
53
# File 'lib/dimelo/ccp/api/lazzy_collection.rb', line 51

def inspect
  "<Dimelo::CCP::API::LazzyCollection instance>"
end

#respond_to?(method) ⇒ Boolean

Returns:

  • (Boolean)


36
37
38
# File 'lib/dimelo/ccp/api/lazzy_collection.rb', line 36

def respond_to?(method)
  super || Array.public_instance_methods.include?(method.to_s)
end

#to_aObject Also known as: to_ary



31
32
33
# File 'lib/dimelo/ccp/api/lazzy_collection.rb', line 31

def to_a
  @to_a ||= each
end