lib/turntabler/song.rb
def snag
      assert_current_song
      sh = digest(rand)
      api('snag.add',
        :djid => room.current_dj.id,
        :songid => id,
        :roomid => room.id,
        :section => room.section,
        :site => 'queue',
        :location => 'board',
        :in_queue => 'false',
        :blocked => 'false',
        :vh => digest([client.user.id, room.current_dj.id, id, room.id, 'queue', 'board', 'false', 'false', sh] * '/'),
        :sh => sh,
        :fh => digest(rand)
      )
      true
    end
def snag
      assert_current_song
      sh = digest(rand)
      api('snag.add',
        :djid => room.current_dj.id,
        :songid => id,
        :roomid => room.id,
        :section => room.section,
        :site => 'queue',
        :location => 'board',
        :in_queue => 'false',
        :blocked => 'false',
        :vh => digest([client.user.id, room.current_dj.id, id, room.id, 'queue', 'board', 'false', 'false', sh] * '/'),
        :sh => sh,
        :fh => digest(rand)
      )
      true
    end
def snag assert_current_song sh = digest ( rand ) api ( 'snag.add' , :djid => room . current_dj . id , :songid => id , :roomid => room . id , :section => room . section , :site => 'queue' , :location => 'board' , :in_queue => 'false' , :blocked => 'false' , :vh => digest ( [ client . user . id , room . current_dj . id , id , room . id , 'queue' , 'board' , 'false' , 'false' , sh ] * '/' ) , :sh => sh , :fh => digest ( rand ) ) true end
Triggers the heart animation for the song.

 @note This will not add the song to the user's playlist
 @return [true]
 @raise [Turntabler::Error] if the command fails
 @raise [Turntabler::Error] if the song is not playing in the current song
 @example
   song.snag   # => true
Triggers the heart animation for the song .