Class: Skyline::MediaFile

Inherits:
MediaNode
  • Object
show all
Includes:
Taggable
Defined in:
app/models/skyline/media_file.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Taggable

#available_tags, #clone_with_associated_tags, #raw_tags, #raw_tags=

Methods inherited from MediaNode

#file_path, #full_path, #name=, #path=, #renamed?, sanitize_filename, #sanitized?, #title

Class Method Details

.set_missing_file_typesObject



13
14
15
16
17
18
# File 'app/models/skyline/media_file.rb', line 13

def self.set_missing_file_types
  self.all(:conditions => "file_type = '' OR file_type IS NULL").each do |media_file|
    media_file.set_file_type!
  end
  true
end

Instance Method Details

#dataObject



74
75
76
# File 'app/models/skyline/media_file.rb', line 74

def data
  @data
end

#data=(data) ⇒ Object

sanitize filename and set correct mime-type for IO object of file data

Parameters

data<IO>

IO object with file data

Returns

data<IO>

IO object with sanitized filename and correct mime-type



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'app/models/skyline/media_file.rb', line 58

def data=(data)
  unless data.size == 0
    @data = data
    self.name = sanitize_filename(@data.original_filename)
    
    # Fix the mime types
    @data.content_type = MIME::Types.type_for(@data.original_filename).to_s
    self.content_type = @data.content_type.downcase.gsub(/[^a-z\-\/]/,"")
    self.file_type = self.determine_file_type
    
    self.set_dimensions
    self.size = @data.size
  end
  @data
end

#determine_file_typeObject



86
87
88
89
# File 'app/models/skyline/media_file.rb', line 86

def determine_file_type
  lookup = Mime::Type.lookup(self.content_type)
  lookup.instance_variable_get("@symbol").to_s
end

#dimensionObject

returns the dimension of the original image

Returns

<Hash>

hash of width and height attributes



46
47
48
49
# File 'app/models/skyline/media_file.rb', line 46

def dimension
  return nil if self.file_type != "image"
  {"width" => self.width, "height" => self.height}
end

#set_file_type!Object



91
92
93
94
# File 'app/models/skyline/media_file.rb', line 91

def set_file_type!
  file_type = determine_file_type
  self.update_attribute(:file_type, file_type) unless file_type.blank?
end

#thumbnail(width = 100, height = 100) ⇒ Object

returns thumbnail of image

Parameters

width<Integer>

required width of the thumbnail

height<Integer>

required height of the thumbnail

Returns

<ImageBlob>

blob of the Magick::Image



27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'app/models/skyline/media_file.rb', line 27

def thumbnail(width=100,height=100)
  img = Magick::Image::read(self.file_path).first
  
  org_w = img.columns
  org_h = img.rows
      
  if (width.to_i > org_w || height.to_i > org_h) 
    width = [width.to_i, org_w].min
    height = [height.to_i, org_h].min
  end

  stream = img.change_geometry!("#{width}x#{height}"){ |c,r,i| i.resize!(c,r) }
  stream.to_blob        
end

#url(prefix = nil) ⇒ Object



78
79
80
81
82
83
84
# File 'app/models/skyline/media_file.rb', line 78

def url(prefix=nil)
  if prefix
    "/media_dirs/#{self.parent_id}/media_files_data/#{prefix}/#{self.name}"
  else
    "/media_dirs/#{self.parent_id}/media_files_data/#{self.name}"
  end
end