- validates_presence_of :user_id, :name, :public, :description, :timestamp
-# validates_numericality_of :latitude, :longitude
- validates_inclusion_of :inserted, :in => [ true, false]
-
- belongs_to :user
- has_many :tags, :class_name => 'Tracetag', :foreign_key => 'gpx_id', :dependent => :delete_all
- has_many :points, :class_name => 'Tracepoint', :foreign_key => 'gpx_id', :dependent => :delete_all
+ belongs_to :user, :counter_cache => true
+ has_many :tags, :class_name => "Tracetag", :foreign_key => "gpx_id", :dependent => :delete_all
+ has_many :points, :class_name => "Tracepoint", :foreign_key => "gpx_id", :dependent => :delete_all
+
+ scope :visible, -> { where(:visible => true) }
+ scope :visible_to, ->(u) { visible.where("visibility IN ('public', 'identifiable') OR user_id = ?", u) }
+ scope :visible_to_all, -> { where(:visibility => %w(public identifiable)) }
+ scope :tagged, ->(t) { joins(:tags).where(:gpx_file_tags => { :tag => t }) }
+
+ validates_presence_of :user_id, :name, :timestamp
+ validates_presence_of :description, :on => :create
+ validates_length_of :name, :maximum => 255
+ validates_length_of :description, :maximum => 255
+ # validates_numericality_of :latitude, :longitude
+ validates_inclusion_of :inserted, :in => [true, false]
+ validates_inclusion_of :visibility, :in => %w(private public trackable identifiable)
+
+ def destroy
+ super
+ FileUtils.rm_f(trace_name)
+ FileUtils.rm_f(icon_picture_name)
+ FileUtils.rm_f(large_picture_name)
+ end
+
+ def tagstring
+ tags.collect(&:tag).join(", ")
+ end