Class: Skyline::MediaFile
- Includes:
- Taggable
- Defined in:
- app/models/skyline/media_file.rb
Class Method Summary collapse
Instance Method Summary collapse
- #data ⇒ Object
-
#data=(data) ⇒ Object
sanitize filename and set correct mime-type for IO object of file data.
- #determine_file_type ⇒ Object
-
#dimension ⇒ Object
returns the dimension of the original image.
- #set_file_type! ⇒ Object
-
#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.
- #url(prefix = nil) ⇒ Object
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_types ⇒ Object
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
#data ⇒ Object
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_type ⇒ Object
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 |
#dimension ⇒ Object
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 |