lib/mms2r/media.rb
def attachment(types)

      # get all the files that are of the major types passed in
      files = []

      types.each do |type|
        media.keys.find_all{|k| type.include?("/") ? k == type : k.index(type) == 0 }.each do |key|
          files += media[key]
        end
      end
      return nil if files.empty?

      # set temp holders
      file = nil # explicitly declare the file and size
      size = 0
      mime_type = nil

      #get the largest file
      files.each do |path|
        next unless File.exist?(path)
        if File.size(path) > size
          size = File.size(path)
          file = File.new(path)
          media.each do |type,_files|
            mime_type = type if _files.detect{ |_path| _path == path }
          end
        end
      end

      return nil if file.nil?

      # These singleton methods implement the interface necessary to be used
      # as a drop-in replacement for files uploaded with CGI.rb.
      # This helps if you want to use the files with, for example,
      # attachment_fu.

      def file.local_path
        self.path
      end

      def file.original_filename
        File.basename(self.path)
      end

      def file.size
        File.size(self.path)
      end

      # this one is kind of confusing because it needs a closure.
      class << file
        self
      end.send(:define_method, :content_type) { mime_type }

      file
    end
def attachment(types)

      # get all the files that are of the major types passed in
      files = []

      types.each do |type|
        media.keys.find_all{|k| type.include?("/") ? k == type : k.index(type) == 0 }.each do |key|
          files += media[key]
        end
      end
      return nil if files.empty?

      # set temp holders
      file = nil # explicitly declare the file and size
      size = 0
      mime_type = nil

      #get the largest file
      files.each do |path|
        next unless File.exist?(path)
        if File.size(path) > size
          size = File.size(path)
          file = File.new(path)
          media.each do |type,_files|
            mime_type = type if _files.detect{ |_path| _path == path }
          end
        end
      end

      return nil if file.nil?

      # These singleton methods implement the interface necessary to be used
      # as a drop-in replacement for files uploaded with CGI.rb.
      # This helps if you want to use the files with, for example,
      # attachment_fu.

      def file.local_path
        self.path
      end

      def file.original_filename
        File.basename(self.path)
      end

      def file.size
        File.size(self.path)
      end

      # this one is kind of confusing because it needs a closure.
      class << file
        self
      end.send(:define_method, :content_type) { mime_type }

      file
    end
def attachment ( types ) # get all the files that are of the major types passed in files = [ ] types . each do | type | media . keys . find_all { | k | type . include? ( "/" ) ? k == type : k . index ( type ) == 0 } . each do | key | files += media [ key ] end end return nil if files . empty? # set temp holders file = nil # explicitly declare the file and size size = 0 mime_type = nil #get the largest file files . each do | path | next unless File . exist? ( path ) if File . size ( path ) > size size = File . size ( path ) file = File . new ( path ) media . each do | type , _files | mime_type = type if _files . detect { | _path | _path == path } end end end return nil if file . nil? # These singleton methods implement the interface necessary to be used # as a drop-in replacement for files uploaded with CGI.rb. # This helps if you want to use the files with, for example, # attachment_fu. def file . local_path self . path end def file . original_filename File . basename ( self . path ) end def file . size File . size ( self . path ) end # this one is kind of confusing because it needs a closure. class << file self end . send ( :define_method , :content_type ) { mime_type } file end
used by #default_media and #text to return the biggest attachment type
 listed in the types array
used by #default_media and #text to return the biggest attachment type listed in the types array