[フレーム]

Module: OpenURI

Defined in:
opal/stdlib/open-uri.rb,
opal/stdlib/nodejs/open-uri.rb

Overview

backtick_javascript: true

Defined Under Namespace

Modules: Meta , OpenRead Classes: Buffer , HTTPError

Class Method Summary collapse

Class Method Details

.build_response(req, status, status_text) ⇒ Object

133
134
135
136
137
138
139
140
141
142
143
# File 'opal/stdlib/open-uri.rb', line 133
def self.build_response(req, status, status_text)
 buf = Buffer .new 
 buf << data(req).pack('c*')
 io = buf.io
 #io.base_uri = uri # TODO: Generate a URI object from the uri String
 io.status = "#{status}#{status_text}"
 io.meta_add_field('content-type', `req.getResponseHeader("Content-Type") || ''`)
 last_modified = `req.getResponseHeader("Last-Modified")`
 io.meta_add_field('last-modified', last_modified) if last_modified
 io
end

.close_io(io) ⇒ Object

113
114
115
116
117
118
119
# File 'opal/stdlib/open-uri.rb', line 113
def self.close_io(io)
 if io.respond_to? :close!
 io.close! # Tempfile
 else
 io.close unless io.closed?
 end
end

.data(req) ⇒ Object

145
146
147
148
149
150
151
152
153
154
155
156
# File 'opal/stdlib/open-uri.rb', line 145
def self.data(req)
 %x{
 var binStr = req.responseText;
 var byteArray = [];
 for (var i = 0, len = binStr.length; i < len; ++i) {
 var c = binStr.charCodeAt(i);
 var byteCode = c & 0xff; // byte at offset i
 byteArray.push(byteCode);
 }
 return byteArray;
 }
end

.open_loop(uri, options) ⇒ Object

:nodoc:

121
122
123
124
125
126
127
128
129
130
131
# File 'opal/stdlib/open-uri.rb', line 121
def self.open_loop(uri, options) # :nodoc:
 req = request(uri)
 data = `req.responseText`
 status = `req.status`
 status_text = `req.statusText && req.statusText.errno ? req.statusText.errno : req.statusText`
 if status == 200 || (status == 0 && data)
 build_response(req, status, status_text)
 else
 raise OpenURI ::HTTPError .new ("#{status}#{status_text}", '')
 end
end

.open_uri(name, *rest) ⇒ Object

:nodoc:

99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'opal/stdlib/open-uri.rb', line 99
def self.open_uri(name, *rest) # :nodoc:
 io = open_loop(name, {})
 io.rewind
 if block_given?
 begin
 yield io
 ensure
 close_io(io)
 end
 else
 io
 end
end

.request(uri) ⇒ Object

158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
# File 'opal/stdlib/open-uri.rb', line 158
def self.request(uri)
 %x{
 try {
 var xhr = new XMLHttpRequest();
 xhr.open('GET', uri, false);
 // We cannot use xhr.responseType = "arraybuffer" because XMLHttpRequest is used in synchronous mode.
 // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseType#Synchronous_XHR_restrictions
 xhr.overrideMimeType('text/plain; charset=x-user-defined');
 xhr.send();
 return xhr;
 } catch (error) {
 #{raise OpenURI ::HTTPError .new (`error.message`, '')}
 }
 }
end

AltStyle によって変換されたページ (->オリジナル) /