module Conjugue

Public Class Methods

verbo(name, time, person, plural = false) click to toggle source
# File lib/conjugue.rb, line 5
def self.verbo(name, time, person, plural = false)
  unless name =~ /r$/
    unless name =~ /[aeiou]$/
      name += 'a'
    end
    name += 'r'
  end

  time = VerbDatabase::TIMES[time]
  plural = false if plural == :s

  person -= 1
  person += 3 if plural

  paradigm = (VerbDatabase.find_by_verb(name) or VerbDatabase.find_by_paradigm(name) or VerbDatabase.find_by_sufix(name))
  
  # Try finding paradigm by sufix
  unless (paradigm[:conjugations][time] rescue nil)
    puts 'time not found'
    paradigm = VerbDatabase.find_by_sufix(name)

    # Try shortening the sufix
    unless (paradigm[:conjugations][time] rescue nil)
      if (paradigm[:sufix] rescue nil)
        while (sufix = paradigm[:sufix].to_s[1..-1]).size > 1
          paradigm = VerbDatabase.find_by_sufix(sufix) rescue nil
          break if paradigm
        end
      end
    end

  end

  if paradigm
    begin
      sufix = (paradigm[:sufix].to_s.empty? ? paradigm[:name] : paradigm[:sufix])
      conjugate = paradigm[:conjugations][time][person]
      radical_paradigm = paradigm[:name].gsub(Regexp.new(sufix+'$'), '')
      sufix_conjugate = conjugate.gsub(Regexp.new('^'+radical_paradigm), '')
      radical_verb = name.gsub(Regexp.new(sufix+'$'), '')

      conjugate = radical_verb + sufix_conjugate
    rescue
      nil
    end
  else
    conjugate = name
  end

  ret = "#{VerbDatabase::PRONOUNS[person]} #{conjugate}"
  ret.encode('UTF-8')
end