Sha256: aa372974eafee05250ba46b43806ca4d74dffa4295225dcb7af2cb1f6badef5b

Contents?: true

Size: 1.14 KB

Versions: 1

Compression:

Stored size: 1.14 KB

Contents

require 'net/http'
require 'json'

###
# Stupid simple class for uploading to imgur.
#
#   client = Imgur2.new 'my imgur key'
#   p File.open(ARGV[0], 'rb') { |f|
#     client.upload f
#   }
class Imgur2 < Struct.new(:key)
  VERSION = '1.0.0'

  def self.run argv
    client = Imgur2.new '65aea9a07b4f6110c90248ffa247d41a'
    fh     = argv[0] ? File.open(argv[0], 'rb') : $stdin
    link   = client.upload(fh)['upload']['links']['original']
    client.paste link
    puts link
  ensure
    fh.close
  end

  def upload io
    url = URI.parse 'http://api.imgur.com/2/upload.json'

    JSON.parse Net::HTTP.start(url.host) { |http|
      post = Net::HTTP::Post.new url.path
      post.set_form_data('key'   => key,
                         'image' => [io.read].pack('m'),
                         'type'  => 'base64')
      http.request(post).body
    }
  end

  ##
  # Tries to find clipboard copy executable and if found puts +link+ in your
  # clipboard.

  def paste link
    clipboard = %w{
      /usr/bin/pbcopy
      /usr/bin/xclip
    }.find { |path| File.exist? path }

    if clipboard
      IO.popen clipboard, 'w' do |io| io.write link end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
imgur2-1.0.0 lib/imgur2.rb