Module: Rabbit::Parser::Ext::Image::Private

Defined in:
lib/rabbit/parser/ext/image.rb

Class Method Summary collapse

Class Method Details

.image_filename(canvas, uri) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/rabbit/parser/ext/image.rb', line 49

def image_filename(canvas, uri)
  case uri.scheme.to_s.downcase
  when "file"
    GLib.filename_from_utf8(uri.path)
  when "http", "https", "ftp"
    other_uri_filename(canvas, uri)
  else
    path = Pathname.new(GLib.filename_from_utf8(uri.path))
    return path.to_s if path.absolute?

    expanded_path = canvas.full_path(path.to_s)
    expanded_uri = URI(expanded_path)
    if expanded_uri.scheme.nil?
      expanded_path
    else
      image_filename(canvas, expanded_uri)
    end
  end
end

.other_uri_filename(canvas, uri) ⇒ Object



75
76
77
78
79
# File 'lib/rabbit/parser/ext/image.rb', line 75

def other_uri_filename(canvas, uri)
  filename = tmp_filename(canvas, uri.to_s)
  setup_image_file(canvas, uri, filename)
  filename
end

.setup_image_file(canvas, uri, filename) ⇒ Object



81
82
83
84
85
86
87
88
89
90
91
# File 'lib/rabbit/parser/ext/image.rb', line 81

def setup_image_file(canvas, uri, filename)
  begin
    open(uri, "rb") do |in_file|
      File.open(filename, "wb") do |out|
        out.print(in_file.read)
      end
    end
  rescue SocketError, OpenURI::HTTPError
    canvas.logger.warn("#{$!.message}: #{uri}")
  end
end

.tmp_filename(canvas, key) ⇒ Object



69
70
71
72
73
# File 'lib/rabbit/parser/ext/image.rb', line 69

def tmp_filename(canvas, key)
  dir = canvas.tmp_dir_name
  FileUtils.mkdir_p(dir)
  File.join(dir, CGI.escape(key))
end