Module: OpenURI::Meta
- Defined in:
- opal/stdlib/open-uri.rb
Overview
Mixin for holding meta-information.
Instance Attribute Summary collapse
-
#base_uri ⇒ Object
returns a URI that is the base of relative URIs in the data.
-
#meta ⇒ Object
readonly
returns a Hash that represents header fields.
-
#metas ⇒ Object
readonly
returns a Hash that represents header fields.
-
#status ⇒ Object
returns an Array that consists of status code and message.
Class Method Summary collapse
-
.init(obj, src = nil) ⇒ Object
:nodoc:.
Instance Method Summary collapse
-
#charset ⇒ Object
returns a charset parameter in Content-Type field.
-
#content_type ⇒ Object
returns "type/subtype" which is MIME Content-Type.
-
#content_type_parse ⇒ Object
:nodoc:.
- #find_encoding(charset) ⇒ Object
- #last_modified ⇒ Object
-
#meta_add_field(name, value) ⇒ Object
:nodoc:.
-
#meta_add_field2(name, values) ⇒ Object
:nodoc:.
-
#meta_setup_encoding ⇒ Object
:nodoc:.
- #set_encoding(enc) ⇒ Object
Instance Attribute Details
#base_uri ⇒ Object
returns a URI that is the base of relative URIs in the data. It may differ from the URI supplied by a user due to redirection.
223 224 225 |
# File 'opal/stdlib/open-uri.rb', line 223 def base_uri @base_uri end |
#meta ⇒ Object (readonly)
returns a Hash that represents header fields. The Hash keys are downcased for canonicalization. The Hash values are a field body. If there are multiple field with same field name, the field values are concatenated with a comma.
230 231 232 |
# File 'opal/stdlib/open-uri.rb', line 230 def @meta end |
#metas ⇒ Object (readonly)
returns a Hash that represents header fields. The Hash keys are downcased for canonicalization. The Hash value are an array of field values.
235 236 237 |
# File 'opal/stdlib/open-uri.rb', line 235 def @metas end |
#status ⇒ Object
returns an Array that consists of status code and message.
219 220 221 |
# File 'opal/stdlib/open-uri.rb', line 219 def status @status end |
Class Method Details
.init(obj, src = nil) ⇒ Object
:nodoc:
202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 |
# File 'opal/stdlib/open-uri.rb', line 202 def Meta.init(obj, src=nil) # :nodoc: obj.extend Meta obj.instance_eval { @base_uri = nil @meta = {} # name to string. legacy. @metas = {} # name to array of strings. } if src obj.status = src.status obj.base_uri = src.base_uri src..each {|name, values| obj.(name, values) } end end |
Instance Method Details
#charset ⇒ Object
returns a charset parameter in Content-Type field. It is downcased for canonicalization.
If charset parameter is not given but a block is given, the block is called and its result is returned. It can be used to guess charset.
If charset parameter and block is not given, nil is returned except text type in HTTP. In that case, "iso-8859-1" is returned as defined by RFC2616 3.7.1.
300 301 302 303 304 305 306 307 |
# File 'opal/stdlib/open-uri.rb', line 300 def charset type = content_type_parse if type && %r{\Atext/} =~ type && @base_uri && /\Ahttp\z/i =~ @base_uri.scheme 'iso-8859-1' # RFC2616 3.7.1 else nil end end |
#content_type ⇒ Object
returns "type/subtype" which is MIME Content-Type. It is downcased for canonicalization. Content-Type parameters are stripped.
312 313 314 315 |
# File 'opal/stdlib/open-uri.rb', line 312 def content_type type = content_type_parse type || 'application/octet-stream' end |
#content_type_parse ⇒ Object
:nodoc:
284 285 286 287 288 |
# File 'opal/stdlib/open-uri.rb', line 284 def content_type_parse # :nodoc: content_type = @metas['content-type'] # FIXME Extract type, subtype and parameters content_type.join(', ') end |
#find_encoding(charset) ⇒ Object
253 254 255 256 257 258 259 260 261 262 263 |
# File 'opal/stdlib/open-uri.rb', line 253 def find_encoding(charset) enc = nil if charset begin enc = Encoding.find(charset) rescue ArgumentError end end enc = Encoding::ASCII_8BIT unless enc enc end |
#last_modified ⇒ Object
276 277 278 279 280 281 282 |
# File 'opal/stdlib/open-uri.rb', line 276 def last_modified if (vs = @metas['last-modified']) Time.at(`Date.parse(#{vs.join(', ')}) / 1000`).utc else nil end end |
#meta_add_field(name, value) ⇒ Object
:nodoc:
272 273 274 |
# File 'opal/stdlib/open-uri.rb', line 272 def (name, value) # :nodoc: (name, [value]) end |
#meta_add_field2(name, values) ⇒ Object
:nodoc:
265 266 267 268 269 270 |
# File 'opal/stdlib/open-uri.rb', line 265 def (name, values) # :nodoc: name = name.downcase @metas[name] = values @meta[name] = values.join(', ') if name == 'content-type' end |
#meta_setup_encoding ⇒ Object
:nodoc:
237 238 239 240 241 |
# File 'opal/stdlib/open-uri.rb', line 237 def # :nodoc: charset = self.charset enc = find_encoding(charset) set_encoding(enc) end |
#set_encoding(enc) ⇒ Object
243 244 245 246 247 248 249 250 251 |
# File 'opal/stdlib/open-uri.rb', line 243 def set_encoding(enc) if self.respond_to? :force_encoding self.force_encoding(enc) elsif self.respond_to? :string self.string.force_encoding(enc) else # Tempfile self.set_encoding enc end end |