Class: Chimps::Response

Inherits:
Object 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 from the body.

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



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

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

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

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



135
136
137
# File 'lib/chimps/response.rb', line 135

def method_missing name, *args, &block
  data.send(name, *args, &block)
end

Instance Attribute Details

#bodyObject (readonly)

The response body.



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

def body
  @body
end

#dataObject (readonly)

The parsed data of the body



13
14
15
# File 'lib/chimps/response.rb', line 13

def data
  @data
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.



20
21
22
# File 'lib/chimps/response.rb', line 20

def error
  @error
end

Instance Method Details

#codeInteger

The HTTP status code of the response.

Returns:

  • (Integer)


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

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:



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

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

#error?true, false

Was this response an error??

Returns:

  • (true, false)


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

def error?
  !! @error
end

#headersHash

The HTTP headers of the response.

Returns:



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

def headers
  @headers ||= body.headers
end

#parseObject

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



75
76
77
78
# File 'lib/chimps/response.rb', line 75

def parse
  return if @parsed
  parse!
end

#parse!Chimps::Response

Parse the response from Infochimps.

Returns:



67
68
69
70
71
# File 'lib/chimps/response.rb', line 67

def parse!
  @data   = parse_response_body
  @parsed = true
  self
end

Print this response.

Parameters:

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

Options Hash (options):

  • pretty (true, false)

    whether to pretty print the response



98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/chimps/response.rb', line 98

def print options={}
  $stderr.puts(diagnostic_line) if error? || Chimps.verbose?
  output = (options[:to] || $stdout)
  if error?
    parse!
    output.puts data['errors']  if data['errors']
    output.puts data['message'] if data['message']
  else
    case
    when options[:yaml]
      parse!
      output.puts data.to_yaml
    when options[:json] && options[:pretty]
      parse!
      if options[:pretty]
        output.puts JSON.pretty_generate(data)
      else
        output.puts data.to_json
      end
    when headers[:content_type] =~ /json/i && options[:pretty]
      parse!
      output.puts JSON.pretty_generate(data)
    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


128
129
130
131
132
133
# File 'lib/chimps/response.rb', line 128

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)


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

def success?
  ! error?
end