Class: Napster::Models::Track

Inherits:
Object
  • Object
show all
Defined in:
lib/napster/models/track.rb

Overview

Track model

Constant Summary collapse

ATTRIBUTES =
[:type,
:id,
:index,
:disc,
:href,
:playback_seconds,
:explicit,
:name,
:isrc,
:shortcut,
:amg,
:blurbs,
:artist_name,
:album_name,
:formats,
:album_id,
:contributors].freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(arg) ⇒ Track

Returns a new instance of Track.



31
32
33
34
35
36
37
38
# File 'lib/napster/models/track.rb', line 31

def initialize(arg)
  @client = arg[:client] if arg[:client]
  return unless arg[:data]

  ATTRIBUTES.each do |attribute|
    send("#{attribute}=", arg[:data][attribute.to_s.camel_case_lower])
  end
end

Instance Attribute Details

#clientObject

Returns the value of attribute client.



29
30
31
# File 'lib/napster/models/track.rb', line 29

def client
  @client
end

Class Method Details

.collection(arg) ⇒ Object



40
41
42
43
44
45
46
# File 'lib/napster/models/track.rb', line 40

def self.collection(arg)
  return if !arg || !arg[:data]

  arg[:data].map do |track|
    Track.new(data: track, client: @client)
  end
end

Instance Method Details

#find(arg) ⇒ Object



48
49
50
51
# File 'lib/napster/models/track.rb', line 48

def find(arg)
  return find_by_id(arg) if Napster::Moniker.check(arg, :track)
  find_by_name(arg)
end

#find_all_by_name(name) ⇒ Object



58
59
60
61
62
63
64
65
66
67
# File 'lib/napster/models/track.rb', line 58

def find_all_by_name(name)
  options = {
    params: {
      q: name,
      type: 'track'
    }
  }
  response = @client.get('/search', options)
  Napster::Models::Track.collection(data: response['data'])
end

#find_by_id(id) ⇒ Object



53
54
55
56
# File 'lib/napster/models/track.rb', line 53

def find_by_id(id)
  response = @client.get("/tracks/#{id}")
  Napster::Models::Track.new(data: response['tracks'].first)
end

#find_by_name(name) ⇒ Object



69
70
71
# File 'lib/napster/models/track.rb', line 69

def find_by_name(name)
  find_all_by_name(name).first
end