Sha256: 5ea2d39aa2062311d480392eb9af5e9d710fdfca6f102c0bc5460d591598ca25

Contents?: true

Size: 1.71 KB

Versions: 10

Compression:

Stored size: 1.71 KB

Contents

require 'digest/md5'
require 'open-uri'

require 'RMagick'

require 'murlsh'

module Murlsh

  # Store images from various sources in asset storage.
  #
  # Storage is determined by store_asset plugins.
  class ImgStore

    # Store images from various sources in asset storage.
    #
    # Storage is determined by store_asset plugins.
    def initialize(config)
      @config = config
    end

    # Build headers to send with request.
    def headers
      result = {}
      result['User-Agent'] = config['user_agent']  if config['user_agent']
      result
    end

    # Fetch an image from a url and store it in asset storage.
    #
    # If a block is given the Magick::ImageList created will be yielded
    # before storage.
    #
    # Returns image url.
    def store_url(url, &block)
      open(url, headers) { |fin| store_img_data(fin.read, &block) }
    end

    # Store a blob of image data in asset storage.
    #
    # If a block is given the Magick::ImageList created will be yielded
    # before storage.
    #
    # Returns image url.
    def store_img_data(img_data, &block)
      img = Magick::ImageList.new.from_blob(img_data)
      yield img if block_given?
      store_img img
    end

    # Store a Magick::ImageList in asset storage.
    #
    # Returns image url.
    def store_img(img)
      img.extend(Murlsh::ImageList)  unless img.is_a?(Murlsh::ImageList)
      img_data = img.to_blob
      md5 = Digest::MD5.hexdigest(img_data)

      name = "img/thumb/#{md5}#{img.preferred_extension}"

      Murlsh::Plugin.hooks('store_asset') do |p|
        # run until one returns something
        if url = p.run(name, img_data, config)
          return url
        end
      end
      nil
    end

    attr_reader :config
  end

end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
murlsh-1.9.3 lib/murlsh/img_store.rb
murlsh-1.9.2 lib/murlsh/img_store.rb
murlsh-1.9.1 lib/murlsh/img_store.rb
murlsh-1.9.0 lib/murlsh/img_store.rb
murlsh-1.8.0 lib/murlsh/img_store.rb
murlsh-1.7.1 lib/murlsh/img_store.rb
murlsh-1.7.0 lib/murlsh/img_store.rb
murlsh-1.6.1 lib/murlsh/img_store.rb
murlsh-1.6.0 lib/murlsh/img_store.rb
murlsh-1.5.0 lib/murlsh/img_store.rb