212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
|
# File 'lib/atom/xml/parser.rb', line 212
def loadable!(&error_handler)
class_name = self.name
(class << self; self; end).instance_eval do
define_method "load_#{class_name.demodulize.downcase}" do |o|
xml = nil
case o
when String
xml = XML::Reader.new(o)
when IO
xml = XML::Reader.new(o.read)
when URI
raise ArgumentError, "#{class_name}.load only handles http URIs" if o.scheme != 'http'
xml = XML::Reader.new(Net::HTTP.get_response(o).body)
else
raise ArgumentError, "#{class_name}.load needs String, URI or IO, got #{o.class.name}"
end
if error_handler
xml.set_error_handler(&error_handler)
else
xml.set_error_handler do |reader, message, severity, base, line|
if severity == XML::Reader::SEVERITY_ERROR
raise ParseError, "#{message} at #{line}"
end
end
end
o = self.new(xml)
xml.close
o
end
end
end
|