Class: WCC::Blogs::Client::Response

Inherits:
Struct
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/wcc/blogs/client/response.rb

Overview

rubocop:disable Metrics/BlockLength

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#clientObject

Returns the value of attribute client

Returns:

  • (Object)

    the current value of client



7
8
9
# File 'lib/wcc/blogs/client/response.rb', line 7

def client
  @client
end

#raw_responseObject

Returns the value of attribute raw_response

Returns:

  • (Object)

    the current value of raw_response



7
8
9
# File 'lib/wcc/blogs/client/response.rb', line 7

def raw_response
  @raw_response
end

#requestObject

Returns the value of attribute request

Returns:

  • (Object)

    the current value of request



7
8
9
# File 'lib/wcc/blogs/client/response.rb', line 7

def request
  @request
end

Instance Method Details

#assert_ok!Object

Raises:



38
39
40
41
42
# File 'lib/wcc/blogs/client/response.rb', line 38

def assert_ok!
  return self if status >= 200 && status < 300

  raise ApiError[status], self
end

#bodyObject



13
14
15
# File 'lib/wcc/blogs/client/response.rb', line 13

def body
  @body ||= raw_response.body.to_s
end

#countObject



73
74
75
# File 'lib/wcc/blogs/client/response.rb', line 73

def count
  total
end

#each_page(&block) ⇒ Object

rubocop:disable Metrics/MethodLength

Raises:

  • (ArgumentError)


44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/wcc/blogs/client/response.rb', line 44

def each_page(&block) # rubocop:disable Metrics/MethodLength
  raise ArgumentError, 'Not a collection response' unless page_items

  ret =
    Enumerator.new do |y|
      y << self

      if next_page?
        next_page.each_page.each do |page|
          y << page
        end
      end
    end

  if block_given?
    ret.map(&block)
  else
    ret.lazy
  end
end

#firstObject

Raises:

  • (ArgumentError)


77
78
79
80
81
# File 'lib/wcc/blogs/client/response.rb', line 77

def first
  raise ArgumentError, 'Not a collection response' unless page_items

  page_items.first
end

#itemsObject



65
66
67
# File 'lib/wcc/blogs/client/response.rb', line 65

def items
  each_page.flat_map(&:page_items)
end

#next_pageObject



30
31
32
33
34
35
36
# File 'lib/wcc/blogs/client/response.rb', line 30

def next_page
  return unless next_page_url
  return @next_page if @next_page

  np = client.get(next_page_url, request[:query])
  @next_page = np.assert_ok!
end

#next_page?Boolean

Returns:

  • (Boolean)


26
27
28
# File 'lib/wcc/blogs/client/response.rb', line 26

def next_page?
  !!next_page_url
end

#next_page_urlObject



22
23
24
# File 'lib/wcc/blogs/client/response.rb', line 22

def next_page_url
  raw.dig('_links', 'next')
end

#page_itemsObject



69
70
71
# File 'lib/wcc/blogs/client/response.rb', line 69

def page_items
  raw['items']
end

#rawObject Also known as: to_json



17
18
19
# File 'lib/wcc/blogs/client/response.rb', line 17

def raw
  @raw ||= JSON.parse(body)
end