Class: Chimps::Response

Inherits:
Hash show all
Defined in:
lib/chimps/response.rb

Overview

A class to wrap responses from the Infochimps API.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(body, options = {}) ⇒ Chimps::Response

Return a response built from a String with the RestClient::Response module mixed-in.

If :error is passed then this response is is considered an error with the given message.

Parameters:

Options Hash (options):

  • error (String)

    the error message



29
30
31
32
33
# File 'lib/chimps/response.rb', line 29

def initialize body, options={}
  super()
  @body  = body
  @error = options[:error]
end

Instance Attribute Details

#bodyObject (readonly)

The response body.



10
11
12
# File 'lib/chimps/response.rb', line 10

def body
  @body
end

#errorObject (readonly)

The error message for this response, if it was an error.

This is actually generated within RestClient from the HTTP status code and attached to the response. It is passed in when initializing a Chimps::Response by a Chimps::Request.



17
18
19
# File 'lib/chimps/response.rb', line 17

def error
  @error
end

Instance Method Details

#codeInteger

The HTTP status code of the response.

Returns:

  • (Integer)


38
39
40
# File 'lib/chimps/response.rb', line 38

def code
  @code ||= body.to_i
end

#content_typeSymbol, String

The Content-type of the response.

Will return :yaml or :json if possible, else just the raw Content-type.

Returns:



55
56
57
58
59
60
61
# File 'lib/chimps/response.rb', line 55

def content_type
  @content_type ||= case headers[:content_type]
                    when /json/ then :json
                    when /yaml/ then :yaml
                    else headers[:content_type]
                    end
end

#dataHash

Return a new Hash consisting of the data from this response.

FIXME This is used when pretty printing – though it shouldn’t be necessary.

Returns:



107
108
109
110
111
112
113
# File 'lib/chimps/response.rb', line 107

def data
  {}.tap do |d|
    each_pair do |key, value|
      d[key] = value
    end
  end
end

#error?true, false

Was this response an error??

Returns:

  • (true, false)


97
98
99
# File 'lib/chimps/response.rb', line 97

def error?
  !! @error
end

#headersHash

The HTTP headers of the response.

Returns:



45
46
47
# File 'lib/chimps/response.rb', line 45

def headers
  @headers ||= body.headers
end

#parseObject

Parse the response from Infochimps – will do nothing if the response has already been parsed.



82
83
84
85
# File 'lib/chimps/response.rb', line 82

def parse
  return if @parsed
  parse!
end

#parse!Chimps::Response

Parse the response from Infochimps.

Returns:



66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/chimps/response.rb', line 66

def parse!
  data = parse_response_body
  case data
    # hack...sometimes we get back an array instead of a
    # hash...should change the API at Chimps end
  when Hash   then merge!(data)
  when Array  then self[:array]  = data
  when String then self[:string] = data
  else nil
  end
  @parsed = true
  self
end

Print this response.

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • pretty (true, false)

    whether to pretty print the response



119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# File 'lib/chimps/response.rb', line 119

def print options={}
  $stderr.puts(diagnostic_line) if error? || Chimps.verbose?
  output = (options[:to] || $stdout)
  if error?
    parse!
    output.puts self['errors']  if self['errors']
    output.puts self['message'] if self['message']
  else
    case
    when options[:yaml]
      parse!
      output.puts self.to_yaml
    when options[:json] && options[:pretty]
      parse!
      if options[:pretty]
        output.puts JSON.pretty_generate(self)
      else
        output.puts self.to_json
      end
    when headers[:content_type] =~ /json/i && options[:pretty]
      parse!
      output.puts JSON.pretty_generate(self)
    when headers[:content_type] =~ /tab/i && options[:pretty]
      Utils::Typewriter.new(self).print
    else
      output.puts body unless body.chomp.strip.size == 0
    end
  end
end


149
150
151
152
153
154
# File 'lib/chimps/response.rb', line 149

def print_headers options={}
  output = (options[:output]  || $stdout)
  self.body.raw_headers.each_pair do |name, value|
    output.puts "#{name}: #{value}"
  end
end

#success?true, false

Was this response a success?

Returns:

  • (true, false)


90
91
92
# File 'lib/chimps/response.rb', line 90

def success?
  ! error?
end