class URI::Data
Constants
- COMPONENT
- MIME_PARAM_RE
- MIME_TYPE_RE
Attributes
content_type[R]
data[R]
Public Class Methods
build(arg)
click to toggle source
# File lib/data_uri/uri.rb, line 46 def self.build(arg) data = nil content_type = nil case arg when IO data = arg when Hash data = arg[:data] content_type = arg[:content_type] end raise 'Invalid build argument: ' + arg.inspect unless data if !content_type && data.respond_to?(:content_type) content_type = data.content_type end new('data', nil, nil, nil, nil, nil, "#{content_type};base64,#{Base64.encode64(data.read).chop}", nil, nil) end
new(*args)
click to toggle source
Calls superclass method
# File lib/data_uri/uri.rb, line 11 def initialize(*args) if args.length == 1 uri = args.first.to_s unless uri.match(/^data:/) raise URI::InvalidURIError.new('Invalid Data URI: ' + args.first.inspect) end @scheme = 'data' @opaque = uri[5 .. -1] else super(*args) end @data = @opaque if md = MIME_TYPE_RE.match(@data) @content_type = md[1] @data = @data[@content_type.length .. -1] end @content_type ||= 'text/plain' @mime_params = {} while md = MIME_PARAM_RE.match(@data) @mime_params[md[1]] = md[2] @data = @data[md[0].length .. -1] end if base64 = /^;base64/.match(@data) @data = @data[7 .. -1] end unless /^,/.match(@data) raise URI::InvalidURIError.new('Invalid data URI') end @data = @data[1 .. -1] @data = base64 ? Base64.decode64(@data) : URI.decode(@data) if @data.respond_to?(:force_encoding) && charset = @mime_params['charset'] @data.force_encoding(charset) end end
Public Instance Methods
open() { |io| ... }
click to toggle source
# File lib/data_uri/open_uri.rb, line 5 def open io = StringIO.new(data) OpenURI::Meta.init(io) io.meta_add_field('content-type', content_type) if block_given? begin yield io ensure io.close end else io end end