englishext 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. data/lib/englishext.rb +124 -0
  2. metadata +37 -0
data/lib/englishext.rb ADDED
@@ -0,0 +1,124 @@
1
+ # A collection of English-language specific utility methods.
2
+ module EnglishExtensions
3
+ Version = '0.1.0'
4
+ end
5
+
6
+ class String
7
+ # Turns a camel-case string ("camel_case_to_english") to plain English
8
+ # ("camel case to english"). Each word is decapitalized.
9
+ def camel_case_to_english
10
+ words = []
11
+ str = self.clone
12
+ nextCapIndex =(str =~ /[A-Z]/)
13
+ while nextCapIndex != nil
14
+ words << $` if $`.size > 0
15
+ str = $& + $'
16
+ str[0] = str[0..0].downcase
17
+ nextCapIndex =(str =~ /[A-Z]/)
18
+ end
19
+ words << str
20
+ words.join ' '
21
+ end
22
+
23
+ # Turns an English language string into camel case.
24
+ def english_to_camel_case
25
+ cc = ""
26
+ split.each { |word|
27
+ word = word.capitalize unless cc == ''
28
+ cc = cc += word
29
+ }
30
+ cc
31
+ end
32
+
33
+ # Given a singular noun, returns the plural form.
34
+ def plural
35
+ consonantYPattern = Regexp.new("([^aeiou])y$", Regexp::IGNORECASE)
36
+ if self =~ consonantYPattern
37
+ self.gsub consonantYPattern, '\1ies'
38
+ elsif self =~ /^(.*)xis$/
39
+ $1 + 'xes'
40
+ elsif self =~ /[xs]$/
41
+ self + "es"
42
+ elsif self =~ /(.*)tum$/
43
+ $1 + 'ta'
44
+ else
45
+ self + "s"
46
+ end
47
+ end
48
+
49
+ # Returns the proper noun form of a string by capitalizing most of the
50
+ # words.
51
+ #
52
+ # Examples:
53
+ # "bosnia and herzegovina".proper_noun -> "Bosnia and Herzegovina"
54
+ # "macedonia, the former yugoslav republic of".proper_noun ->
55
+ # "Macedonia, the Former Yugoslav Republic of"
56
+ # "virgin islands, u.s.".proper_noun -> "Virgin Islands, U.S."
57
+ def proper_noun
58
+ proper_noun = ""
59
+ str = self.clone
60
+ while(matchIndex = str =~ /[\. ]/)
61
+ word = str[0..matchIndex-1]
62
+ word = word.capitalize unless [ 'and', 'the', 'of' ].index(word) != nil
63
+ proper_noun += word + $&
64
+ str = str[matchIndex+1..str.length]
65
+ end
66
+ word = str
67
+ word = word.capitalize unless [ 'and', 'the', 'of' ].index(word) != nil
68
+ proper_noun += word
69
+ proper_noun
70
+ end
71
+
72
+ def singular
73
+ if self =~ /(.*)ies/
74
+ $1 + 'y'
75
+ elsif self =~ /(.*s)es/
76
+ $1
77
+ else
78
+ self =~ /(.*)s/
79
+ $1
80
+ end
81
+ end
82
+
83
+ # Does this word start with a vowel sound? "User" and "usury" don't, but
84
+ # "ugly" does.
85
+ def starts_with_vowel_sound
86
+ uSomethingUMatch = self =~ /^u[^aeiuo][aeiou]/
87
+ # 'user' and 'usury' don't start with a vowel sound
88
+ self =~ /^[aeiou]/ && !uSomethingUMatch
89
+ end
90
+
91
+ # Given a format for a template sentence, generates the sentence while
92
+ # accounting for details such as pluralization and whether to use "a" or
93
+ # "an".
94
+ #
95
+ # Format codes are:
96
+ # * %num: Number
97
+ # * %is: Transitive verb. This will be turned into "is" or "are",
98
+ # depending on <tt>number</tt>.
99
+ # * %nam: Name. This will be rendered as either singular or
100
+ # plural, depending on <tt>number</tt>.
101
+ # * %a: Indefinite article. This will be turned into "a" or "an",
102
+ # depending on <tt>name</tt>.
103
+ # [name] The name of the object being described.
104
+ # [number] The number of the objects being describes.
105
+ #
106
+ # Examples:
107
+ # "There %is currently %num %nam".template( "product category", 0 ) ->
108
+ # "There are currently 0 product categories"
109
+ # "There %is currently %num %nam".template( "product category", 1 ) ->
110
+ # "There is currently 1 product category"
111
+ # "Add %a %nam".template( "invoice" ) -> "Add an invoice"
112
+ def template( name, number = 1)
113
+ sentence = clone
114
+ sentence.gsub!( /%num/, number.to_s )
115
+ isVerb = number == 1 ? "is" : "are"
116
+ sentence.gsub!( /%is/, isVerb )
117
+ name = name.plural if number != 1
118
+ sentence.gsub!( /%nam/, name )
119
+ article = name.starts_with_vowel_sound ? 'an' : 'a'
120
+ sentence.gsub!( /%a/, article )
121
+ sentence
122
+ end
123
+ end
124
+
metadata ADDED
@@ -0,0 +1,37 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.8.6
3
+ specification_version: 1
4
+ name: englishext
5
+ version: !ruby/object:Gem::Version
6
+ version: 0.1.0
7
+ date: 2005-07-03
8
+ summary: EnglishExtensions contains a few convenience methods for String.
9
+ require_paths:
10
+ - lib
11
+ email: sera@fhwang.net
12
+ homepage: http://englishext.rubyforge.org/
13
+ rubyforge_project:
14
+ description: EnglishExtensions contains a few convenience methods for String.
15
+ autorequire: englishext
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: false
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ -
22
+ - ">"
23
+ - !ruby/object:Gem::Version
24
+ version: 0.0.0
25
+ version:
26
+ platform: ruby
27
+ authors:
28
+ - Francis Hwang
29
+ files:
30
+ - lib/englishext.rb
31
+ test_files: []
32
+ rdoc_options: []
33
+ extra_rdoc_files: []
34
+ executables: []
35
+ extensions: []
36
+ requirements: []
37
+ dependencies: []