module VkMusic::Utility::AudioNodeParser

Parse {Audio} from Nokogiri::XML::Node

Public Class Methods

call(node, client_id) click to toggle source

@param node [Nokogiri::XML::Node] @param client_id [Integer] @return [Audio]

# File lib/vk_music/utility/audio_node_parser.rb, line 11
def call(node, client_id)
  input = node.at_css('input')
  if input
    parse_input(input, node, client_id)
  else
    parse_post(node, client_id)
  end
end

Private Class Methods

get_encoded_url(input) click to toggle source
# File lib/vk_music/utility/audio_node_parser.rb, line 31
def get_encoded_url(input)
  url_encoded = input.attribute('value').to_s
  url_encoded = nil if url_encoded.empty? || url_encoded == Constants::URL::VK[:audio_unavailable]

  url_encoded
end
get_id_array(node) click to toggle source
# File lib/vk_music/utility/audio_node_parser.rb, line 38
def get_id_array(node)
  node.attribute('data-id').to_s.split('_')
end
get_main_data(node) click to toggle source
# File lib/vk_music/utility/audio_node_parser.rb, line 42
def get_main_data(node)
  [
    node.at_css('.ai_artist').text.strip,
    node.at_css('.ai_title').text.strip,
    Integer(node.at_css('.ai_dur').attribute('data-dur').to_s, 10)
  ]
end
parse_input(input, node, client_id) click to toggle source
# File lib/vk_music/utility/audio_node_parser.rb, line 22
def parse_input(input, node, client_id)
  id_array = get_id_array(node)
  artist, title, duration = get_main_data(node)

  Audio.new(id: Integer(id_array[1], 10), owner_id: Integer(id_array[0], 10),
            artist: artist, title: title, duration: duration,
            url_encoded: get_encoded_url(input), url: nil, client_id: client_id)
end
parse_post(node, client_id) click to toggle source
# File lib/vk_music/utility/audio_node_parser.rb, line 50
def parse_post(node, client_id)
  artist = node.at_css('.medias_music_author').text.strip
  title = NodeTextChildrenReader.call(node.at_css('.medias_audio_title'))
  duration = DurationParser.call(node.at_css('.medias_audio_dur').text)
  Audio.new(artist: artist, title: title, duration: duration, client_id: client_id)
end