—

title: Shrine 2.5.0

New features

plugin :add_metadata

add_metadata do |io, context|
  movie = FFMPEG::Movie.new(io.path)

  { "duration"   => movie.duration,
    "bitrate"    => movie.bitrate,
    "resolution" => movie.resolution,
    "frame_rate" => movie.frame_rate }
end

# You can also optionally add metadata reader methods to the UploadedFile
metadata_method :duration, :bitrate, :resolution, :frame_rate
plugin :store_dimensions
uploaded_file = uploader.upload(image)

uploaded_file.width      #=> 500
uploaded_file.height     #=> 400
uploaded_file.dimensions #=> [500, 400] (new)
plugin :versions, fallback_to_original: false
plugin :rack_file
params[:file] #=> {:tempfile=>#<Tempfile>, :name=>"file", ...}

uploaded_file = uploader.upload(params[:file])
uploaded_file.original_filename #=> "nature.jpg"
uploaded_file.mime_type         #=> "image/jpeg"

Other improvements

plugin :validation_helpers

Attacher.validate do
  if validate_extension_inclusion %w[jpg jpeg png gif]
    validate_mime_type_inclusion %w[image/jpeg image/png image/gif]
  end
end
plugin :default_url

Attacher.default_url do |options|
  self   #=> #<Shrine::Attacher>
  name   #=> :image
  record #=> #<Photo>

  "/images/missing/#{name}.jpg"
end

Backwards compatibility

# deprecated
plugin :default_url do |context|
  "/images/missing/#{context[:name]}.jpg"
end

Documentation