class Paperclip::Tinypng

Public Class Methods

api_key() click to toggle source
# File lib/paperclip_optimal_compressor.rb, line 12
def self.api_key
  defined?(@@tinypng_api_key) ? @@tinypng_api_key : raise('TinyPNG API Key not set. Please see doc: https://gitlab.com/unni.tallman/paperclip_optimal_compressor')
end
api_key=(key) click to toggle source
# File lib/paperclip_optimal_compressor.rb, line 8
def self.api_key=(key)
  @@tinypng_api_key = key
end

Public Instance Methods

make() click to toggle source
# File lib/paperclip_optimal_compressor.rb, line 16
def make
  basename = File.basename(file.path, File.extname(file.path))
  dst_format = options[:format] ? ".\#{options[:format]}" : ''

  dst = Tempfile.new([basename, dst_format])
  dst.binmode

  tinypng_compress File.expand_path(file.path), File.expand_path(dst.path)

  dst
end
tinypng_compress(input, output) click to toggle source
# File lib/paperclip_optimal_compressor.rb, line 28
def tinypng_compress(input, output)
  uri = URI.parse('https://api.tinypng.com/shrink')

  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  # http.ssl_version = :TLSv1
  # http.ciphers = ['DES-CBC3-SHA']

  request = Net::HTTP::Post.new(uri.request_uri)
  request.basic_auth('api', Paperclip::Tinypng.api_key)

  response = http.request(request, File.binread(input))

  if response.code == '201'
    File.binwrite(output, http.get(response['location']).body)
  else
    puts 'Compression failed'
  end
end