Class: Zipmark::Iterator

Inherits:
Object
  • Object
show all
Defined in:
lib/zipmark/iterator.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(json, options = {}) ⇒ Iterator

Returns a new instance of Iterator.



5
6
7
8
9
# File 'lib/zipmark/iterator.rb', line 5

def initialize(json, options = {})
  @json = JSON.parse(json)
  @options = options
  @current_item = items.first
end

Instance Attribute Details

#current_itemObject

Returns the value of attribute current_item.



3
4
5
# File 'lib/zipmark/iterator.rb', line 3

def current_item
  @current_item
end

#jsonObject

Returns the value of attribute json.



3
4
5
# File 'lib/zipmark/iterator.rb', line 3

def json
  @json
end

#optionsObject

Returns the value of attribute options.



3
4
5
# File 'lib/zipmark/iterator.rb', line 3

def options
  @options
end

Instance Method Details

#clientObject



11
12
13
# File 'lib/zipmark/iterator.rb', line 11

def client
  options[:client]
end

#collectionObject



15
16
17
# File 'lib/zipmark/iterator.rb', line 15

def collection
  json[options[:resource_name]]
end

#fetch_item_from_next_pageObject



48
49
50
51
52
53
54
55
# File 'lib/zipmark/iterator.rb', line 48

def fetch_item_from_next_page
  return if pagination.last_page?
  self.json = JSON.parse(client.get(next_page["href"]).body)
  @items = nil
  @pagination = nil
  @current_item = items.first
  return true
end

#itemsObject



27
28
29
# File 'lib/zipmark/iterator.rb', line 27

def items
  @items ||= collection.map {|item| Entity.new(item.merge(:client => options[:client], :resource_type => resource_singular)) }
end


23
24
25
# File 'lib/zipmark/iterator.rb', line 23

def links
  json["links"]
end

#metadataObject



19
20
21
# File 'lib/zipmark/iterator.rb', line 19

def 
  json["meta"]
end

#next_itemObject



39
40
41
42
43
44
45
46
# File 'lib/zipmark/iterator.rb', line 39

def next_item
  item = @items.fetch(@items.index(current_item) + 1) rescue nil
  if item
    @current_item = item
  else
    @current_item = fetch_item_from_next_page ? @items.fetch(0) : nil
  end
end

#next_pageObject



57
58
59
# File 'lib/zipmark/iterator.rb', line 57

def next_page
  links.detect {|l| l["rel"] == "next"}
end

#pagesObject



65
66
67
# File 'lib/zipmark/iterator.rb', line 65

def pages
  pagination.pages if pagination
end

#paginationObject



35
36
37
# File 'lib/zipmark/iterator.rb', line 35

def pagination
  @pagination ||= Pagination.new(["pagination"] ) if 
end

#resource_singularObject



31
32
33
# File 'lib/zipmark/iterator.rb', line 31

def resource_singular
  options[:resource_name].sub(/s$/, '')
end

#total_itemsObject



61
62
63
# File 'lib/zipmark/iterator.rb', line 61

def total_items
  pagination.total if pagination
end