Method: URI::Data#initialize
- Defined in:
- lib/data_uri/uri.rb
#initialize(*args) ⇒ Data
Returns a new instance of Data.
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# 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 |