Class: Innards::Connection

Inherits:
Object
  • Object
show all
Includes:
Exceptions
Defined in:
lib/innards/connection.rb

Overview

Creates a connection to a RETS Server managing any required authentication

Constant Summary collapse

VALID_RETS_VERSIONS =
[
  "1.5",
  "1.7",
  "1.7.2",
  "1.8"
]
VALID_AUTH_MODES =
[
  "digest",
  "basic"
]
DEFAULT_PARAMS =
{
  :login_url => "",
  :user_agent => "innards/v#{Innards::Version::STRING}",
  :rets_version => "1.7.2",
  :auth_mode => "digest",
}
MASTER_PARAMS =
{
  :request_count => 0,
  :cookies => [],
  :digest => {},
  :login_uri => nil,
  :proxy_uri => nil
}
DEFAULT_SEARCH_OPTIONS =
{
  :SearchType => "",
  :Class => "",
  :Query => "",
  :Format => "COMPACT-DECODED",
  :QueryType => "DMQL2",
  :StandardNames => "0",
  :Limit => "NONE"
}
DEFAULT_GETOBJECT_OPTIONS =
{
  :Type => "",
  :Resource => "",
  :ID => ""
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(params = {}) ⇒ Connection

Returns a new instance of Connection.



59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/innards/connection.rb', line 59

def initialize(params = {})

  @params = DEFAULT_PARAMS.merge(params).merge(MASTER_PARAMS)

  @digest_handler = DigestHandler.new @params
  @cookie_handler = CookieHandler.new @params

  raise InvalidUrlException.new unless has_valid_url?
  raise InvalidRetsVersionException.new unless has_valid_rets_version?
  raise InvalidAuthModeException.new unless has_valid_auth_mode?
  raise InvalidUserAgentException.new unless has_valid_user_agent?

end

Instance Attribute Details

#paramsObject (readonly)

Returns the value of attribute params.



57
58
59
# File 'lib/innards/connection.rb', line 57

def params
  @params
end

Instance Method Details

#get_metadata(options = {}) ⇒ Object



110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/innards/connection.rb', line 110

def  options = {}
  require_login!

  options = {
    :Type => "METADATA-SYSTEM",
    :ID => "*",
    :Format => "COMPACT"
  }.merge(options)

  response = make_request_to(@params[:metadata][:GetMetadata],
                             :query => options)
  response_io = StringIO.new(response.body)

  parser = Innards::Parsers::GetMetadataParser.new
  Ox.sax_parse(parser, response_io)

  if parser.valid_rets_response_received?
    parser.
  else
    false
  end
end

#get_object(options = {}) ⇒ Object



156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
# File 'lib/innards/connection.rb', line 156

def get_object options = {}
  require_login!

  options = DEFAULT_GETOBJECT_OPTIONS.merge(options)

  response = make_request_to(@params[:metadata][:GetObject],
                             :query => options)
  response_io = StringIO.new(response.body)

  reader = MultipartHandler.new response.headers["Content-Type"]
  if reader.is_multipart_response?
    reader.parse response.body
  else
    return response.body
  end

end

#login!Object



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/innards/connection.rb', line 73

def login!

  @params[:login_uri] = URI(@params[:login_url])
  @params[:current_request] = @params[:login_uri].path

  response = make_request_to(@params[:current_request])
  response_io = StringIO.new(response.body)

  parser = Innards::Parsers::LoginParser.new
  Ox.sax_parse(parser, response_io)

  if parser.valid_rets_response_received?
    params[:metadata] = parser.
    true
  else
    false
  end

end

#logout!Object



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/innards/connection.rb', line 93

def logout!
  require_login!

  response = make_request_to(@params[:metadata][:Logout])
  response_io = StringIO.new(response.body)

  parser = Innards::Parsers::LogoutParser.new
  Ox.sax_parse(parser, response_io)

  if parser.valid_rets_response_received?
    params[:metadata] = parser.
    true
  else
    false
  end
end

#search(options = {}) ⇒ Object



133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# File 'lib/innards/connection.rb', line 133

def search options = {}
  require_login!

  options = DEFAULT_SEARCH_OPTIONS.merge(options)

  raise InvalidSearchTypeException.new if options[:SearchType].empty?
  raise InvalidClassException.new if options[:Class].empty?
  raise InvalidQueryException.new if options[:Query].empty?

  response = make_request_to(@params[:metadata][:Search],
                             :query => options)
  response_io = StringIO.new(response.body)

  parser = Innards::Parsers::SearchParser.new
  Ox.sax_parse(parser, response_io)

  if parser.valid_rets_response_received?
    parser.results
  else
    false
  end
end