Class: WCC::Contentful::SimpleClient::Response

Inherits:
Object
  • Object
show all
Defined in:
lib/wcc/contentful/simple_client/response.rb

Direct Known Subclasses

SyncResponse

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client, request, raw_response) ⇒ Response

Returns a new instance of Response.



25
26
27
28
29
30
# File 'lib/wcc/contentful/simple_client/response.rb', line 25

def initialize(client, request, raw_response)
  @client = client
  @request = request
  @raw_response = raw_response
  @body = raw_response.body.to_s
end

Instance Attribute Details

#clientObject (readonly)

Returns the value of attribute client.



6
7
8
# File 'lib/wcc/contentful/simple_client/response.rb', line 6

def client
  @client
end

#raw_responseObject (readonly)

Returns the value of attribute raw_response.



5
6
7
# File 'lib/wcc/contentful/simple_client/response.rb', line 5

def raw_response
  @raw_response
end

#requestObject (readonly)

Returns the value of attribute request.



7
8
9
# File 'lib/wcc/contentful/simple_client/response.rb', line 7

def request
  @request
end

Instance Method Details

#assert_ok!Object

Raises:



32
33
34
35
# File 'lib/wcc/contentful/simple_client/response.rb', line 32

def assert_ok!
  return self if code >= 200 && code < 300
  raise ApiError[code], self
end

#bodyObject



12
13
14
# File 'lib/wcc/contentful/simple_client/response.rb', line 12

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

#countObject



78
79
80
# File 'lib/wcc/contentful/simple_client/response.rb', line 78

def count
  raw['total']
end

#each_page(&block) ⇒ Object

Raises:

  • (ArgumentError)


37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/wcc/contentful/simple_client/response.rb', line 37

def each_page(&block)
  raise ArgumentError, 'Not a collection response' unless raw['items']

  memoized_pages = (@memoized_pages ||= [self])
  ret =
    Enumerator.new do |y|
      page_index = 0
      current_page = self
      loop do
        y << current_page

        skip_amt = current_page.raw['items'].length + current_page.raw['skip']
        break if current_page.raw['items'].empty? || skip_amt >= current_page.raw['total']

        page_index += 1
        if page_index < memoized_pages.length
          current_page = memoized_pages[page_index]
        else
          current_page = @client.get(
            @request[:url],
            (@request[:query] || {}).merge({ skip: skip_amt })
          )
          current_page.assert_ok!
          memoized_pages.push(current_page)
        end
      end
    end

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

#error_messageObject



21
22
23
# File 'lib/wcc/contentful/simple_client/response.rb', line 21

def error_message
  raw.dig('message') || "#{code}: #{raw_response.message}"
end

#firstObject

Raises:

  • (ArgumentError)


82
83
84
85
# File 'lib/wcc/contentful/simple_client/response.rb', line 82

def first
  raise ArgumentError, 'Not a collection response' unless raw['items']
  raw['items'].first
end

#itemsObject



72
73
74
75
76
# File 'lib/wcc/contentful/simple_client/response.rb', line 72

def items
  each_page.flat_map do |page|
    page.raw['items']
  end
end

#rawObject Also known as: to_json



16
17
18
# File 'lib/wcc/contentful/simple_client/response.rb', line 16

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