class Kagu::Track

Constants

MANDATORY_ATTRIBUTES

Attributes

added_at[R]
album[R]
artist[R]
bpm[R]
genre[R]
id[R]
length[R]
path[R]
title[R]
year[R]

Public Instance Methods

<=>(other) click to toggle source
# File lib/kagu/track.rb, line 12
def <=>(other)
  return nil unless other.is_a?(self.class)
  length <=> other.length
end
==(other) click to toggle source
# File lib/kagu/track.rb, line 17
def ==(other)
  other.is_a?(self.class) && artist == other.artist && title == other.title
end
eql?(other) click to toggle source
Calls superclass method
# File lib/kagu/track.rb, line 21
def eql?(other)
  super || self == other
end
exists_on_disk?() click to toggle source
# File lib/kagu/track.rb, line 25
def exists_on_disk?
  path.present? && path.file?
end
hash() click to toggle source
# File lib/kagu/track.rb, line 29
def hash
  [artist, title].hash
end
to_s() click to toggle source
# File lib/kagu/track.rb, line 33
def to_s
  "#{artist} - #{title}"
end

Private Instance Methods

added_at=(value) click to toggle source
# File lib/kagu/track.rb, line 39
def added_at=(value)
  case value
  when String
    value = Time.parse(value)
  when Integer
    value = Time.at(value)
  end
  @added_at = value.is_a?(Time) ? value.utc : nil
end
album=(value) click to toggle source
# File lib/kagu/track.rb, line 49
def album=(value)
  @album = value.to_s.squish.presence
end
artist=(value) click to toggle source
# File lib/kagu/track.rb, line 53
def artist=(value)
  @artist = value.to_s.squish.presence
end
bpm=(value) click to toggle source
# File lib/kagu/track.rb, line 57
def bpm=(value)
  value = value.to_s =~ /\A[0-9]+\z/ ? value.to_i : nil
  @bpm = value && value > 0 ? value : nil
end
genre=(value) click to toggle source
# File lib/kagu/track.rb, line 62
def genre=(value)
  @genre = value.to_s.squish.presence
end
id=(value) click to toggle source
# File lib/kagu/track.rb, line 66
def id=(value)
  @id = value.to_s.presence
end
length=(value) click to toggle source
# File lib/kagu/track.rb, line 70
def length=(value)
  @length = value.to_s =~ /\A[0-9]+\z/ ? value.to_i : nil
end
path=(value) click to toggle source
# File lib/kagu/track.rb, line 74
def path=(value)
  value = value.to_s.presence
  value = Addressable::URI.unescape(Addressable::URI.parse(value).path).presence if value.is_a?(String) && value.starts_with?('file://')
  value = value.encode('UTF-8', 'UTF-8-MAC') if value.present? && Kagu::IS_MAC_OS
  @path = value.present? ? Pathname.new(value) : nil
end
title=(value) click to toggle source
# File lib/kagu/track.rb, line 81
def title=(value)
  @title = value.to_s.squish.presence
end
year=(value) click to toggle source
# File lib/kagu/track.rb, line 85
def year=(value)
  @year = value.to_s =~ /\A\d{,4}\z/ ? value.to_i : nil
end