Class: Linguistics::Latin::Verb::LatinVerb::LatinVerbClassifier

Inherits:
Object
  • Object
show all
Defined in:
lib/linguistics/latin/verb/latinverb/latinverb_classifier.rb

Overview

ARGUMENTS

  * s :: a "four principal parts" string whence can be derived
the first person singular present indicative as well as the
infinitive

RETURNS

The classification, a subclass of VerbType

PURPOSE

Given the principal parts as a string, decide which conjuation is in play

}}

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(input) ⇒ LatinVerbClassifier

Returns a new instance of LatinVerbClassifier.



32
33
34
# File 'lib/linguistics/latin/verb/latinverb/latinverb_classifier.rb', line 32

def initialize(input)
  @classification = self.classify input
end

Instance Attribute Details

#classificationObject (readonly)

{{{



30
31
32
# File 'lib/linguistics/latin/verb/latinverb/latinverb_classifier.rb', line 30

def classification
  @classification
end

Instance Method Details

#classify(s) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/linguistics/latin/verb/latinverb/latinverb_classifier.rb', line 36

def classify(s)

  divided_string = s.split( /\s+/ )

  first_pres = divided_string[0] || ''
  infinitive = divided_string[1] || ''

  return Linguistics::Latin::Verb::Classification::Defective if
    Linguistics::Latin::Verb::LatinVerb::DEFECTIVE_VERBS.member? first_pres

  return Linguistics::Latin::Verb::Classification::Irregular if
    Linguistics::Latin::Verb::LatinVerb::IRREGULAR_VERBS.member? first_pres

  return Linguistics::Latin::Verb::Classification::Semideponent if
    Linguistics::Latin::Verb::LatinVerb::SEMI_DEPONENTS.keys.any?{ |k| first_pres=~/#{k}$/} &&
    s !~ /PreventDeponentInfiniteRegress/

  return Linguistics::Latin::Verb::Classification::Impersonal if
    Linguistics::Latin::Verb::LatinVerb::IMPERSONAL_VERBS.member? s

  # Very irregular irregulars, A&G206, e/f
  return Linguistics::Latin::Verb::Classification::Irregular if
    s =~ %r'^(aiō|quaesō|ovāre)$'

  return Linguistics::Latin::Verb::Classification::Deponent if
    (infinitive =~ /ī$/  and first_pres =~ /r$/)

  return Linguistics::Latin::Verb::Classification::Regular

end

#deponent?Boolean

Returns:

  • (Boolean)


77
78
79
# File 'lib/linguistics/latin/verb/latinverb/latinverb_classifier.rb', line 77

def deponent?
  @deponent ||= (@classification == Linguistics::Latin::Verb::Classification::Deponent)
end

#impersonal?Boolean

Returns:

  • (Boolean)


85
86
87
# File 'lib/linguistics/latin/verb/latinverb/latinverb_classifier.rb', line 85

def impersonal?
  @impersonal ||= (@classification == Linguistics::Latin::Verb::Classification::Impersonal)
end

#irregular?Boolean

Returns:

  • (Boolean)


89
90
91
# File 'lib/linguistics/latin/verb/latinverb/latinverb_classifier.rb', line 89

def irregular?
  @irregular = @classification == Linguistics::Latin::Verb::Classification::Irregular
end

#present_only?Boolean

Returns:

  • (Boolean)


73
74
75
# File 'lib/linguistics/latin/verb/latinverb/latinverb_classifier.rb', line 73

def present_only?
  @present_only ||= ( @classification ==  Linguistics::Latin::Verb::Classification::PresentOnly )
end

#regular?Boolean

Returns:

  • (Boolean)


93
94
95
# File 'lib/linguistics/latin/verb/latinverb/latinverb_classifier.rb', line 93

def regular?
  @regular = @classification == Linguistics::Latin::Verb::Classification::Regular
end

#semideponent?Boolean

Returns:

  • (Boolean)


81
82
83
# File 'lib/linguistics/latin/verb/latinverb/latinverb_classifier.rb', line 81

def semideponent?
  @semideponent ||= (@classification == Linguistics::Latin::Verb::Classification::Semideponent)
end

#set_as_defectiveObject



67
68
69
70
71
# File 'lib/linguistics/latin/verb/latinverb/latinverb_classifier.rb', line 67

def set_as_defective
  unless @classification == Linguistics::Latin::Verb::Classification::Impersonal
    @classification = Linguistics::Latin::Verb::Classification::PresentOnly
  end
end