syllabize 0.5.0 → 0.6.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.
data/README.md CHANGED
@@ -20,9 +20,9 @@ Or install it yourself as:
20
20
 
21
21
  First, require `syllabize`. Then, you can call the `count_syllables` method on a string.
22
22
 
23
- ```ruby
24
- require 'syllables'
25
- => true
23
+ ```bash
24
+ require 'syllabize'
25
+ # => true
26
26
  'Ruby'.count_syllables
27
27
  # => 2
28
28
  ```
@@ -1,12 +1,13 @@
1
1
  require 'yaml'
2
+ require 'numbers_and_words'
2
3
 
3
4
  module Syllabize
4
5
 
5
6
  class Counter
6
- attr_accessor :word, :exceptions_file
7
+ attr_accessor :str, :exceptions_file
7
8
 
8
- def initialize(word)
9
- @word = strip_punctuation(word)
9
+ def initialize(str)
10
+ @str = strip_punctuation(str)
10
11
  handle_non_string_input
11
12
  load_exceptions
12
13
  end
@@ -14,12 +15,14 @@ module Syllabize
14
15
  CONSONANTS = /[bcdfghjklmnpqrstvwxz]/i
15
16
  VOWELS = /[aeiou]/i
16
17
  LE_VOWEL_SOUND = /((le)\z)|((le(d|r|s))|(ling)\z)/i
17
- DIPHTHONGS = /ou|ie|oo|oi|ea|ee|ai|ae|ay/i
18
+ DIPHTHONGS = /ou|ie|io|oa|oo|oi|ea|ee|ai|ae|ay/i
18
19
  Y_AS_VOWEL = /[^yY][yY]/
19
20
  RE_VOWEL = /(^re[aeiou])/i
20
21
 
21
22
  def count_syllables
22
- return handle_exceptions if exceptions.keys.include?(word)
23
+ @str = str.to_i.to_words if is_int_in_string_form?
24
+ return break_into_words if str.split(' ').length > 1
25
+ return handle_exceptions if exceptions.keys.include?(str)
23
26
  @syllables = count_vowels
24
27
  handle_additions
25
28
  handle_subtractions
@@ -28,18 +31,25 @@ module Syllabize
28
31
 
29
32
  private
30
33
 
31
- # for Ruby 1.9
32
- def __dir__
33
- File.dirname(__FILE__)
34
- end unless respond_to?(:__dir__, true)
34
+ def break_into_words
35
+ str.split(' ').collect(&:count_syllables).reduce(:+)
36
+ end
35
37
 
36
38
  def strip_punctuation(string)
37
39
  string.gsub(/\W/,'')
38
40
  end
39
41
 
42
+ def is_int_in_string_form?
43
+ str_as_int = str.to_i
44
+ if str_as_int.zero?
45
+ return str == '0' ? true : false
46
+ end
47
+ (str_as_int * str_as_int) > 0 ? true : false
48
+ end
49
+
40
50
  def handle_non_string_input
41
- if !(word.is_a?(String))
42
- raise ArgumentError.new "#{word} must be a string"
51
+ if !(str.is_a?(String))
52
+ raise ArgumentError.new "#{str} must be a string"
43
53
  end
44
54
  end
45
55
 
@@ -52,7 +62,7 @@ module Syllabize
52
62
  end
53
63
 
54
64
  def handle_exceptions
55
- exceptions[word.to_s]
65
+ exceptions[str.to_s]
56
66
  end
57
67
 
58
68
  def handle_additions
@@ -68,15 +78,15 @@ module Syllabize
68
78
  end
69
79
 
70
80
  def count_vowels
71
- word.scan(VOWELS).count
81
+ str.scan(VOWELS).count
72
82
  end
73
83
 
74
84
  def ends_in_silent_e?
75
- word.downcase.each_char.to_a.last == 'e'
85
+ str.downcase.each_char.to_a.last == 'e'
76
86
  end
77
87
 
78
88
  def contains_le_vowel_sound?
79
- word.scan(LE_VOWEL_SOUND).any?
89
+ str.scan(LE_VOWEL_SOUND).any?
80
90
  end
81
91
 
82
92
  def contains_non_initial_y?
@@ -84,24 +94,30 @@ module Syllabize
84
94
  end
85
95
 
86
96
  def count_ys_in_vowel_role
87
- word.scan(Y_AS_VOWEL).size
97
+ str.scan(Y_AS_VOWEL).size
88
98
  end
89
99
 
90
100
  def begins_with_re_vowel?
91
- word.scan(RE_VOWEL).any?
101
+ str.scan(RE_VOWEL).any?
92
102
  end
93
103
 
94
104
  def contains_diphthongs?
95
- word.downcase.scan(DIPHTHONGS).any?
105
+ str.downcase.scan(DIPHTHONGS).any?
96
106
  end
97
107
 
98
108
  def count_diphthongs
99
- word.downcase.scan(DIPHTHONGS).count
109
+ str.downcase.scan(DIPHTHONGS).count
100
110
  end
101
111
 
102
112
  def ends_in_sm?
103
- word.end_with?('sm')
113
+ str.end_with?('sm')
104
114
  end
115
+
116
+
117
+ # for Ruby 1.9
118
+ def __dir__
119
+ File.dirname(__FILE__)
120
+ end unless respond_to?(:__dir__, true)
105
121
  end
106
122
 
107
123
  end
@@ -1,3 +1,3 @@
1
1
  module Syllabize
2
- VERSION = "0.5.0"
2
+ VERSION = "0.6.0"
3
3
  end
@@ -4,7 +4,7 @@ class Syllabize::Counter
4
4
  public :count_vowels, :ends_in_silent_e?, :count_diphthongs,
5
5
  :contains_diphthongs?, :ends_in_sm?, :contains_non_initial_y?,
6
6
  :count_ys_in_vowel_role, :contains_le_vowel_sound?,
7
- :begins_with_re_vowel?
7
+ :begins_with_re_vowel?, :is_int_in_string_form?
8
8
  end
9
9
 
10
10
  describe Syllabize::Counter do
@@ -16,6 +16,36 @@ describe Syllabize::Counter do
16
16
  end
17
17
  end
18
18
 
19
+ describe '#is_int_in_string_form?' do
20
+ subject { Syllabize::Counter.new(word).is_int_in_string_form? }
21
+ context 'is an int' do
22
+ context 'zero' do
23
+ let(:word) { '0' }
24
+ it 'returns true' do
25
+ expect(subject).to be_true
26
+ end
27
+ end
28
+ context 'positive' do
29
+ let(:word) { '500' }
30
+ it 'returns true' do
31
+ expect(subject).to be_true
32
+ end
33
+ end
34
+ context 'negative' do
35
+ let(:word) { '-10' }
36
+ it 'returns true' do
37
+ expect(subject).to be_true
38
+ end
39
+ end
40
+ end
41
+ context 'not an int' do
42
+ let(:word) { 'pizza' }
43
+ it 'returns false' do
44
+ expect(subject).to be_false
45
+ end
46
+ end
47
+ end
48
+
19
49
  describe '#ends_in_silent_e?' do
20
50
  context 'silent e' do
21
51
  it 'returns true if the word ends in a silent e' do
@@ -84,8 +114,8 @@ describe Syllabize::Counter do
84
114
 
85
115
  describe '#count_diphthongs' do
86
116
  it 'counts the diphthongs in a word' do
87
- expect(Syllabize::Counter.new('air').count_diphthongs).to eq(1)
88
- expect(Syllabize::Counter.new('aerie').count_diphthongs).to eq(2)
117
+ expect(Syllabize::Counter.new('air').count_diphthongs).to eq(1)
118
+ expect(Syllabize::Counter.new('aerie').count_diphthongs).to eq(2)
89
119
  end
90
120
  end
91
121
 
@@ -99,26 +129,31 @@ describe Syllabize::Counter do
99
129
  context 'given a string' do
100
130
  it 'counts the syllables in a word' do
101
131
  {
102
- 'blizzard' => 2,
103
- 'why' => 1,
104
- 'plain' => 1,
105
- 'sticky' => 2,
106
- 'syzygy' => 3,
107
- 'yeses' => 2,
108
- 'communism' => 4,
109
- 'please' => 1,
110
- 'candle' => 2,
111
- 'handling' => 3,
112
- 'realize' => 3,
113
- 'really' => 2,
114
- 'cooperate' => 4,
115
- 'ways' => 1,
116
- "Wayne's" => 1,
117
- 'basement' => 2,
118
- 'basement,' => 2
132
+ 'blizzard' => 2,
133
+ 'why' => 1,
134
+ 'plain' => 1,
135
+ 'sticky' => 2,
136
+ 'syzygy' => 3,
137
+ 'yeses' => 2,
138
+ 'communism' => 4,
139
+ 'please' => 1,
140
+ 'candle' => 2,
141
+ 'handling' => 3,
142
+ 'realize' => 3,
143
+ 'really' => 2,
144
+ 'cooperate' => 4,
145
+ 'ways' => 1,
146
+ "Wayne's" => 1,
147
+ 'basement' => 2,
148
+ 'coach' => 1,
149
+ 'five' => 1,
150
+ 'hundred' => 2,
151
+ 'I really think so' => 5,
152
+ '500' => 3,
153
+ '1,000,000' => 3,
119
154
  }.each do |word, actual|
120
155
  count = Syllabize::Counter.new(word).count_syllables
121
- expect(count).to eq(actual), "#{word} was not the correct number of syllables; expected #{actual}, was #{count}"
156
+ expect(count).to eq(actual), "'#{word}' was not the correct number of syllables; expected #{actual}, was #{count}"
122
157
  end
123
158
  end
124
159
  end
@@ -21,4 +21,5 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "bundler", "~> 1.3"
22
22
  spec.add_development_dependency "rake"
23
23
  spec.add_development_dependency "rspec"
24
+ spec.add_development_dependency "numbers_and_words"
24
25
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: syllabize
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-04-29 00:00:00.000000000 Z
12
+ date: 2014-05-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -59,6 +59,22 @@ dependencies:
59
59
  - - ! '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: numbers_and_words
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
62
78
  description: A syllable counter written in Ruby
63
79
  email:
64
80
  - nick@nickcox.me