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§LenMax=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