class LeoMp3Parser

Public Instance Methods

get_audio_url(language_and_term) click to toggle source
# File lib/leo_mp3_parser.rb, line 4
def get_audio_url(language_and_term)
  validate_arguments(language_and_term)
  url = compose_query(language_and_term)
  compose_url(url)
end

Private Instance Methods

compose_query(language_and_term) click to toggle source
# File lib/leo_mp3_parser.rb, line 29
def compose_query(language_and_term)
  url = 'https://dict.leo.org/dictQuery/m-vocab/' << language_and_term[:language]
  url << '/query.xml?tolerMode=nof&lp=ende&lang=en&rmWords=off&rmSearch=on&directN=0&search='
  url << language_and_term[:term]
  url << '&searchLoc=0&resultOrder=basic&multiwordShowSingle=on&sectLenMax=16'
end
compose_url(url) click to toggle source
# File lib/leo_mp3_parser.rb, line 36
def compose_url(url)
  "https://dict.leo.org/media/audio/#{parse_audio_identifier(url)}.mp3"
end
instantiate_nokogiri_object(url) click to toggle source
# File lib/leo_mp3_parser.rb, line 46
def instantiate_nokogiri_object(url)
  Nokogiri::XML(open(url))
rescue StandardError
  raise_customized_exception
end
parse_audio_identifier(url) click to toggle source
# File lib/leo_mp3_parser.rb, line 40
def parse_audio_identifier(url)
  instantiate_nokogiri_object(url).at_css('pron').first[1]
rescue StandardError
  raise_customized_exception
end
raise_customized_exception() click to toggle source
# File lib/leo_mp3_parser.rb, line 52
def raise_customized_exception
  raise StandardError, 'Nokogiri throws an exception'
end
validate_arguments(language_and_term) click to toggle source
# File lib/leo_mp3_parser.rb, line 12
def validate_arguments(language_and_term)
  raise ArgumentError, 'Argument must be a Hash' unless language_and_term.is_a? Hash
  unless %i[language term].all? { |key| language_and_term.key? key }
    raise ArgumentError, 'Keys must be :language and :term'
  end

  language_and_term.values.map do |value|
    raise ArgumentError, 'Values must be Strings' unless value.is_a? String
  end
  language_and_term.values.map do |value|
    raise ArgumentError, 'Values can not be emtpy' if value.empty?
  end
  unless ['ende', 'esde', 'frde'].any? { |language| language_and_term[:language] == language }
    raise ArgumentError, 'Language must be set to ende, esde or frde'
  end
end