Module: SequelImage

Defined in:
lib/ramaze/contrib/sequel/image.rb

Overview

Scaffold image models utilizing thumbnailing and Ramaze integration. Resizing is done by ImageScience.

Usage:

class Avatar < Sequel::Model
  IMAGE = {
    # specifies belongs_to, will create relation and foreign key

    :owner => :User,

    # Remove original and thumbnails on Avatar#destroy

    :cleanup => true,

    # Algorithm to use in ImageScience
    #
    # * resize(width, height)
    #     Resizes the image to +width+ and +height+ using a cubic-bspline
    #     filter.
    #
    # * thumbnail(size)
    #     Creates a proportional thumbnail of the image scaled so its
    #     longest edge is resized to +size+.
    #
    # * cropped_thumbnail(size)
    #     Creates a square thumbnail of the image cropping the longest edge
    #     to match the shortest edge, resizes to +size+.

    :algorithm => :thumbnail,

    # Key specifies the filename and accessors, value are arguments to the
    # algorithm

    :sizes => {
      :small => 150,
      :medium => 300,
      :large => 600
    }
  }

  # Perform the scaffold
  include SequelImage
end

Defined Under Namespace

Modules: InstanceMethods, SingletonMethods

Class Method Summary collapse

Class Method Details

.included(model) ⇒ Object

[View source]

52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/ramaze/contrib/sequel/image.rb', line 52

def self.included(model)
  args = model::IMAGE
  set_foreign_key = args[:foreign_key] || "#{args[:owner]}_id".downcase.to_sym
  set_belongs_to  = args[:belongs_to]  ||    args[:owner].to_s.downcase.to_sym

  # Define schema
  model.set_schema do
    primary_key :id

    varchar :original # path to the original image
    varchar :mime, :size => 22 # average of /etc/mime.types

    time :created_at
    time :updated_at

    foreign_key set_foreign_key
  end

  # Define Relations
  model.belongs_to set_belongs_to

  # Define Hooks
  model.send(:hooks).clear

  model.before_create do
    generate_thumbnails
    self.created_at = Time.now
  end

  model.before_save do
    self.updated_at = Time.now
  end

  model.before_destroy do
    cleanup if conf[:cleanup]
  end

  # Define singleton methods
  model.extend(SingletonMethods)

  # Define instance methods
  model.send(:include,
             InstanceMethods,
             Ramaze::Helper::CGI,
             Ramaze::Helper::Link)

  args[:sizes].each do |size, *args|
    model.send(:define_method, size){ public_file(size) }
    model.send(:define_method, "#{size}_url"){ file(size) }
  end
end