Class: SleepingKingStudios::Tools::Toolbox::Inflector::Rules

Inherits:
Object
  • Object
show all
Defined in:
lib/sleeping_king_studios/tools/toolbox/inflector/rules.rb

Overview

Rules for inflecting words.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(irregular_words: nil, plural_rules: nil, singular_rules: nil, uncountable_words: nil) ⇒ Rules

Returns a new instance of Rules.

Parameters:

  • irregular_words (Hash<String, String>) (defaults to: nil)

    Hash of irregular word pairs in singular => plural order, e.g. “child” => “children”.

  • plural_rules (Array<Array<(Regexp, String)>>) (defaults to: nil)

    Rules for pluralizing words.

  • singular_rules (Array<Array<(Regexp, String)>>) (defaults to: nil)

    Rules for singularizing words.

  • uncountable_words (Array<String>) (defaults to: nil)

    List of uncountable words, e.g. “data”.



18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/sleeping_king_studios/tools/toolbox/inflector/rules.rb', line 18

def initialize(
  irregular_words:   nil,
  plural_rules:      nil,
  singular_rules:    nil,
  uncountable_words: nil
)
  @plural_rules      = plural_rules    || default_plural_rules
  @singular_rules    = singular_rules  || default_singular_rules
  @irregular_words   = irregular_words || default_irregular_words
  @uncountable_words =
    Set.new(uncountable_words || default_uncountable_words)

  @irregular_words_reversed = reverse_hash(@irregular_words)
end

Instance Attribute Details

#irregular_wordsArray<Array<(String, String)>] Hash of irregular word pairs in singular => plural order. (readonly)

Returns Array<Array<(String, String)>] Hash of irregular word pairs in singular => plural order.

Returns:

  • (Array<Array<(String, String)>] Hash of irregular word pairs in singular => plural order.)

    Array<Array<(String, String)>] Hash of irregular word pairs in singular => plural order.



35
36
37
# File 'lib/sleeping_king_studios/tools/toolbox/inflector/rules.rb', line 35

def irregular_words
  @irregular_words
end

#irregular_words_reversedArray<Array<(String, String)>] Hash of irregular word pairs in plural => singular order. (readonly)

Returns Array<Array<(String, String)>] Hash of irregular word pairs in plural => singular order.

Returns:

  • (Array<Array<(String, String)>] Hash of irregular word pairs in plural => singular order.)

    Array<Array<(String, String)>] Hash of irregular word pairs in plural => singular order.



39
40
41
# File 'lib/sleeping_king_studios/tools/toolbox/inflector/rules.rb', line 39

def irregular_words_reversed
  @irregular_words_reversed
end

#plural_rulesArray<Array<(Regexp, String)>> (readonly)

Returns Rules for pluralizing words.

Returns:

  • (Array<Array<(Regexp, String)>>)

    Rules for pluralizing words.



42
43
44
# File 'lib/sleeping_king_studios/tools/toolbox/inflector/rules.rb', line 42

def plural_rules
  @plural_rules
end

#singular_rulesArray<Array<(Regexp, String)>> (readonly)

Returns Rules for singularizing words.

Returns:

  • (Array<Array<(Regexp, String)>>)

    Rules for singularizing words.



45
46
47
# File 'lib/sleeping_king_studios/tools/toolbox/inflector/rules.rb', line 45

def singular_rules
  @singular_rules
end

#uncountable_wordsArray<String> (readonly)

Returns List of uncountable words.

Returns:

  • (Array<String>)

    List of uncountable words.



48
49
50
# File 'lib/sleeping_king_studios/tools/toolbox/inflector/rules.rb', line 48

def uncountable_words
  @uncountable_words
end

Instance Method Details

#define_irregular_word(singular, plural) ⇒ Rules

Defines an irregular word pair.

Parameters:

  • singular (String)

    The singular form of the word.

  • plural (String)

    The plural form of the word.

Returns:

  • (Rules)

    The rules object.



56
57
58
59
60
61
62
63
64
# File 'lib/sleeping_king_studios/tools/toolbox/inflector/rules.rb', line 56

def define_irregular_word(singular, plural)
  validate_string(singular)
  validate_string(plural)

  @irregular_words[singular]        = plural
  @irregular_words_reversed[plural] = singular

  self
end

#define_plural_rule(pattern, replace) ⇒ Rules

Defines a pluralization rule.

Parameters:

  • pattern (Regexp)

    The pattern to match.

  • replace (String)

    The string to replace.

Returns:

  • (Rules)

    The rules object.



72
73
74
75
76
77
78
79
# File 'lib/sleeping_king_studios/tools/toolbox/inflector/rules.rb', line 72

def define_plural_rule(pattern, replace)
  validate_pattern(pattern)
  validate_string(replace, as: 'replace')

  @plural_rules.unshift([pattern, replace])

  self
end

#define_singular_rule(pattern, replace) ⇒ Rules

Defines a singularization rule.

Parameters:

  • pattern (Regexp)

    The pattern to match.

  • replace (String)

    The string to replace.

Returns:

  • (Rules)

    The rules object.



87
88
89
90
91
92
93
94
# File 'lib/sleeping_king_studios/tools/toolbox/inflector/rules.rb', line 87

def define_singular_rule(pattern, replace)
  validate_pattern(pattern)
  validate_string(replace, as: 'replace')

  @singular_rules.unshift([pattern, replace])

  self
end

#define_uncountable_word(word) ⇒ Rules

Defines an uncountable word.

Parameters:

  • word (String)

    The uncountable word.

Returns:

  • (Rules)

    The rules object.



101
102
103
104
105
106
107
# File 'lib/sleeping_king_studios/tools/toolbox/inflector/rules.rb', line 101

def define_uncountable_word(word)
  validate_string(word)

  @uncountable_words << word

  self
end

#inspectString

Returns A human-readable representation of the rules object.

Returns:

  • (String)

    A human-readable representation of the rules object.



110
111
112
# File 'lib/sleeping_king_studios/tools/toolbox/inflector/rules.rb', line 110

def inspect
  "#<SleepingKingStudios::Tools::Toolbox::Inflector::Rules:#{object_id}>"
end