class Petrovich::Case::Rule

A case rule from the set of rules

Attributes

an_exception[R]
as[R]
gender[R]
modifiers[R]
tags[R]
tests[R]

Public Class Methods

new(opts) click to toggle source
# File lib/petrovich/case/rule.rb, line 7
def initialize(opts)
  @gender       = opts[:gender].to_sym.downcase
  @as           = opts[:as]
  @an_exception = opts[:section] == :exceptions
  @modifiers    = opts[:modifiers]
  @tests        = opts[:tests]
  @tags         = []

  @tests_regexp = Regexp.union(Array(@tests).map(&:suffix))
end

Public Instance Methods

an_exception?() click to toggle source

Is this exceptional rule?

# File lib/petrovich/case/rule.rb, line 32
def an_exception?
  an_exception == true
end
get_modifier(name_case) click to toggle source
# File lib/petrovich/case/rule.rb, line 36
def get_modifier(name_case)
  case name_case.to_sym
  when :nominative
    nil
  when :genitive
    modifiers[0]
  when :dative
    modifiers[1]
  when :accusative
    modifiers[2]
  when :instrumental
    modifiers[3]
  when :prepositional
    modifiers[4]
  else
    fail UnknownCaseError, "Unknown grammatic case: #{name_case}".freeze
  end
end
match?(name, match_gender, match_as, known_gender = false) click to toggle source
# File lib/petrovich/case/rule.rb, line 18
def match?(name, match_gender, match_as, known_gender = false)
  return false unless match_as == as

  if known_gender
    return false if match_gender != gender
  else
    return false if gender != :female && match_gender == :female
    return false if gender == :female && match_gender != :female
  end

  !!name.match(@tests_regexp)
end