class Lolita::Configuration::Tab::Files

FileTab extend Lolita default tab with new lolita accessors.

Attributes

association[R]
association_type[R]
uploader[R]

Public Class Methods

new(dbi, *args, &block) click to toggle source

As any other Lolita::Configuration::Tab this should receive dbi object. Additional args that may represent methods, for details see Lolita::Configuration::Tab. And block.

Calls superclass method
# File lib/lolita-file-upload/configuration/tab/files.rb, line 15
   def initialize(dbi, *args, &block)
@type=:files
@dissociate = true
           @filters=[]
@dbi=dbi
set_default_association
           super(dbi, @type, *args, &block)
   end

Public Instance Methods

association_dbi() click to toggle source
# File lib/lolita-file-upload/configuration/tab/files.rb, line 57
def association_dbi
  Lolita::DBI::Base.new self.association.klass
end
default_fields() click to toggle source
# File lib/lolita-file-upload/configuration/tab/files.rb, line 69
def default_fields
  if association
    association_dbi.fields.each{|db_field|
      self.field(:name => db_field.name, :type => db_field.type, :dbi_field => db_field) if db_field.content?
    }
  end
end
editable_fields() click to toggle source
# File lib/lolita-file-upload/configuration/tab/files.rb, line 77
def editable_fields
  if association
    self.default_fields if self.fields.empty?
    self.fields
  end
end
extension_white_list() click to toggle source
# File lib/lolita-file-upload/configuration/tab/files.rb, line 84
def extension_white_list
  self.association.klass.uploaders[self.uploader].new.extension_white_list
end
field(*args, &block) click to toggle source
# File lib/lolita-file-upload/configuration/tab/files.rb, line 61
def field *args, &block
  if association
    field = Lolita::Configuration::Factory::Field.add(association_dbi,*args,&block)
    @fields << field
    field
  end
end
filters(title=nil, extensions=nil) click to toggle source

NOTE: Filters only limit frontend, backend limit is set in Uploader

Add another filter or just title for uploader's extension_white_list

Example

# using in lolita configuration definition
lolita do
  tab(:file) do
    title "Pictures"
    filters "Images", "png,jpg"
    # OR
    filters "Pictures"
  end
end
# File lib/lolita-file-upload/configuration/tab/files.rb, line 38
   def filters(title=nil, extensions=nil)
           @filters << {:title => title, :extensions => extensions || self.extension_white_list} if title
(@filters.empty? && self.extension_white_list) ? [{:title => self.title, :extensions => self.extension_white_list}] : @filters
   end

Private Instance Methods

all_text_fields() click to toggle source
# File lib/lolita-file-upload/configuration/tab/files.rb, line 90
def all_text_fields
  adapter = Lolita::DBI::Base.create(self.association.klass)
  @text_fields ||=adapter.fields.collect{|field| 
    if field.type == "string"
      field.name
    end
  }.compact
end
set_default_association() click to toggle source
# File lib/lolita-file-upload/configuration/tab/files.rb, line 99
def set_default_association
  @association=self.dbi.associations.detect{|name,assoc| 
    !assoc.polymorphic? && !assoc.klass.uploaders.empty?
  }
  if @association
    @association = @association.last
    @association_type = @association.macro
    @uploader = @association.klass.uploaders.keys.first #FIXME what to do when there is more than one uploader
  end
end
validate() click to toggle source
Calls superclass method
# File lib/lolita-file-upload/configuration/tab/files.rb, line 110
def validate
  super
  unless self.uploader
    raise "#{self.dbi.klass} has no uploader. Add your custom uploader or use Lolita's built in `has_many :files, :class_name=>'Lolita::Upload::File'`."
  end
end