module Falcon::Base::SingletonMethods

def falcon_encode(name, options = {})


:encode => lambda { |encoding| encoding.delay.encode }
:metadata => :method_return_options_hash,
:profiles => ['web_mp4', 'web_ogg']
falcon_encode 'media', :source => :method_return_path_to_file,

:profiles => ['web_mp4', 'web_ogg']
falcon_encode 'media', :source => lambda { |file| file.data.path },
def falcon_encode(name, options = {})
  extend ClassMethods
  include InstanceMethods
    
  options.assert_valid_keys(:source, :profiles, :metadata, :encode)
  
  unless respond_to?(:falcon_encoding_definitions)
    class_attribute :falcon_encoding_definitions, :instance_writer => false
    self.falcon_encoding_definitions = {}
  end
  
  self.falcon_encoding_definitions[name] = options
  
  has_many :falcon_encodings, 
    :class_name => 'Falcon::Encoding', 
    :as => :videoable,
    :dependent => :destroy
  after_save :save_falcon_medias
  
  define_falcon_callbacks :encode, :"#{name}_encode"
  
  define_method name do |*args|
    a = falcon_media_for(name)
    (args.length > 0) ? a.to_s(args.first) : a
  end
  define_method "#{name}=" do |source_path|
    falcon_media_for(name).assign(source_path)
  end
  define_method "#{name}?" do
    falcon_media_for(name).exist?
  end
end