pascoale 0.2.1 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2307ce9b797a93d8b3e34b1713f876deccc40ca7
4
- data.tar.gz: a245bcd4c270bdb0174310a0ca744b55937e537a
3
+ metadata.gz: df683dc0656ff42d733b197e6300a4307fb4fa9e
4
+ data.tar.gz: bde991b20736b57e50aa491be74db8468b900de0
5
5
  SHA512:
6
- metadata.gz: 5f05925bb2a43974d600951932f5328dbae470eb592ff65925e7b7f0ccbd9a8aaadbad48414073dd697f627218c2c3ce536eb2f85edef1076f916dea72bf3f6e
7
- data.tar.gz: fea1464a11e29dc3dccad26a248b3b6612a38d31ff829ac2880bba5f5c14b414f2313befc1e15e02e87bfb2c054586080b7622ea71b5d0137c90671623d78ce1
6
+ metadata.gz: 9b15fb0dbd2e3cafcf5b75e7dd6bb7434e36508ad79c3fbbdb86de50483778d71fc27616983f7a59da2fd34bfc0c822d36ef3ad20b3344fa0a2e5a440d0436c5
7
+ data.tar.gz: 8d032df4c2c4268daad83c7fcfdcc88df4267eb894c74d08957968a2680ea83bca7f4f34dabd1188e3d9d38b8060c68c3b850498ac9875935bddd9e94a1ee545
data/.gitignore CHANGED
@@ -2,6 +2,7 @@
2
2
  *.rbc
3
3
  .bundle
4
4
  .config
5
+ .idea/
5
6
  .yardoc
6
7
  Gemfile.lock
7
8
  InstalledFiles
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby-2.1
1
+ ruby-2.2
data/.travis.yml ADDED
@@ -0,0 +1,13 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.1
4
+ install:
5
+ - gem install bundler -v '~> 1.9' && bundle install
6
+ deploy:
7
+ provider: rubygems
8
+ api_key:
9
+ secure: MU7uLfXgToLsBwVVY6yWDVEwziQhGou7tTDFe5Wj21djanGNzj9KG12MyQgwiTzm6J2PKzu9aIKRh6EtBWZF69XxeLuUrdGeq/sqDoCXUenyysKhJMwGMQRzwCdO8JigzNOKpnVX7+FpPwap+6RmoKQze6ZZ3GG0zuOKLHyiI4Q=
10
+ gem: pascoale
11
+ on:
12
+ tags: true
13
+ repo: VAGAScom/pascoale
data/Rakefile CHANGED
@@ -1 +1,14 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
2
+
3
+ begin
4
+ require 'rspec/core/rake_task'
5
+ RSpec::Core::RakeTask.new(:spec)
6
+
7
+ task :default => [:spec, :build]
8
+ rescue LoadError
9
+ end
10
+
11
+ desc 'Run benchmark against corpus'
12
+ task :benchmark do
13
+ `ruby -I lib lib/pascoale/syllable_separator_benchmark.rb`
14
+ end
data/data/everything.txt CHANGED
@@ -149171,8 +149171,8 @@
149171
149171
  ["ressaque","nome masculino",["res","sa","que"]]
149172
149172
  ["ressarcimento","nome masculino",["res","sar","ci","men","to"]]
149173
149173
  ["ressarcir","verbo",["res","sar","cir"]]
149174
- ["ressaudação","nome feminino",["res","sa","u","da","ção"]]
149175
- ["ressaudar","verbo",["res","sa","u","dar"]]
149174
+ ["ressaudação","nome feminino",["res","sau","da","ção"]]
149175
+ ["ressaudar","verbo",["res","sau","dar"]]
149176
149176
  ["ressecação","nome feminino",["res","se","ca","ção"]]
149177
149177
  ["resseção","nome feminino",["res","se","ção"]]
149178
149178
  ["ressecar","verbo",["res","se","car"]]
@@ -154769,17 +154769,17 @@
154769
154769
  ["saucarismo","nome masculino",["sau","ca","ris","mo"]]
154770
154770
  ["saucar","nome masculino",["sau","car"]]
154771
154771
  ["saúco","nome masculino",["sa","ú","co"]]
154772
- ["saudação","nome feminino",["sa","u","da","ção"]]
154772
+ ["saudação","nome feminino",["sau","da","ção"]]
154773
154773
  ["saudade-branca","nome feminino",["sau","da","de-bran","ca"]]
154774
- ["saudade","nome feminino",["sa","u","da","de"]]
154774
+ ["saudade","nome feminino",["sau","da","de"]]
154775
154775
  ["saudade-perpétua","nome feminino",["sau","da","de-per","pé","tu","a"]]
154776
154776
  ["saudade-roxa","nome feminino",["sau","da","de-ro","xa"]]
154777
- ["saudador","adjetivo",["sa","u","da","dor"]]
154778
- ["saudador","nome masculino",["sa","u","da","dor"]]
154777
+ ["saudador","adjetivo",["sau","da","dor"]]
154778
+ ["saudador","nome masculino",["sau","da","dor"]]
154779
154779
  ["saudante","adjetivo",["sau","dan","te"]]
154780
154780
  ["saudar","nome masculino",["sau","dar"]]
154781
- ["saudar","verbo",["sa","u","dar"]]
154782
- ["saudável","adjetivo",["sa","u","dá","vel"]]
154781
+ ["saudar","verbo",["sau","dar"]]
154782
+ ["saudável","adjetivo",["sau","dá","vel"]]
154783
154783
  ["saudavelmente","advérbio",["sau","da","vel","men","te"]]
154784
154784
  ["saúde","interjeição",["sa","ú","de"]]
154785
154785
  ["saúde","nome feminino",["sa","ú","de"]]
@@ -154792,12 +154792,12 @@
154792
154792
  ["saudó","nome masculino",["sau","dó"]]
154793
154793
  ["saudosamente","advérbio",["sau","do","sa","men","te"]]
154794
154794
  ["saudosa","nome feminino",["sau","do","sa"]]
154795
- ["saudosismo","nome masculino",["sa","u","do","sis","mo"]]
154796
- ["saudosista","adjetivo",["sa","u","do","sis","ta"]]
154797
- ["saudosista","nome feminino",["sa","u","do","sis","ta"]]
154798
- ["saudosista","nome masculino",["sa","u","do","sis","ta"]]
154799
- ["saudoso","adjetivo",["sa","u","do","so"]]
154800
- ["saudoso","nome masculino",["sa","u","do","so"]]
154795
+ ["saudosismo","nome masculino",["sau","do","sis","mo"]]
154796
+ ["saudosista","adjetivo",["sau","do","sis","ta"]]
154797
+ ["saudosista","nome feminino",["sau","do","sis","ta"]]
154798
+ ["saudosista","nome masculino",["sau","do","sis","ta"]]
154799
+ ["saudoso","adjetivo",["sau","do","so"]]
154800
+ ["saudoso","nome masculino",["sau","do","so"]]
154801
154801
  ["sauiá","nome masculino",["sau","i","á"]]
154802
154802
  ["sauí","nome masculino",["sau","í"]]
154803
154803
  ["sauna","nome feminino",["sau","na"]]
data/lib/pascoale.rb CHANGED
@@ -6,6 +6,8 @@ end
6
6
 
7
7
  require 'pascoale/version'
8
8
  require 'pascoale/constants'
9
- require 'pascoale/edits'
10
9
  require 'pascoale/syllable_separator'
10
+ require 'pascoale/reflector'
11
+ require 'pascoale/edits'
11
12
  require 'pascoale/formatter'
13
+ require 'pascoale/inflector'
@@ -1,6 +1,14 @@
1
1
  module Pascoale
2
2
  module Constants
3
- VOWELS = 'aeiouáéíóúâêôãõày'
3
+ ACCENTED = 'áâàéêíóôú'
4
+ NOT_ACCENTED = 'aaaeeioou'
5
+ AS = 'aáâãà'
6
+ ES = 'eéê'
7
+ IS = 'ií'
8
+ OS = 'oóôõ'
9
+ US = 'uú'
10
+ YS = 'y'
11
+ VOWELS = AS + ES + IS + OS + US + YS
4
12
  SEMIVOWELS = 'iu'
5
13
  CONSONANTS = 'bcdfghjklmnpqrstvwxzç'
6
14
  LETTERS = VOWELS + CONSONANTS
@@ -1,6 +1,6 @@
1
1
  module Pascoale
2
2
  class Formatter
3
- EXCEPTIONS = %(a o e da do de na no em as os das dos nas nos à com sem ao)
3
+ EXCEPTIONS = %w(a o e da do de na no em as os das dos nas nos à com sem ao)
4
4
 
5
5
  def initialize(text, force_downcase: EXCEPTIONS)
6
6
  @text = text
@@ -0,0 +1,139 @@
1
+ module Pascoale
2
+ class Inflector
3
+ include Constants
4
+
5
+ PLURAL_RULES = [
6
+ # Exceções
7
+ ['qualquer', 'quaisquer'],
8
+ ['avô', 'avós'],
9
+ ['raiz', 'raízes'],
10
+ ['júnior', 'juniores'],
11
+ ['sênior', 'seniores'],
12
+ ['caráter', 'caracteres'],
13
+ # ão => ães
14
+ ['alemão', 'alemães'],
15
+ ['capitão', 'capitães'],
16
+ ['pão', 'pães'],
17
+ ['cão', 'cães'],
18
+ ['charlatão', 'charlatães'],
19
+ ['sacristão', 'sacristães'],
20
+ ['capelão', 'capelães'],
21
+ ['escrivão', 'escrivães'],
22
+ ['tabelião', 'tabeliães'],
23
+ # ão => ãos
24
+ ['sótão', 'sótãos'],
25
+ ['cidadão', 'cidadãos'],
26
+ ['chão', 'chãos'],
27
+ ['bênção', 'bênçãos'],
28
+ ['cristão', 'cristãos'],
29
+ ['grão', 'grãos'],
30
+ ['órfão', 'órfãos'],
31
+ ['irmão', 'irmãos'],
32
+ ['mão', 'mãos'],
33
+ ['refrão', 'refrãos'],
34
+ # S exceptions - no flex
35
+ ['pires', 'pires'],
36
+ ['vírus', 'vírus'],
37
+ ['atlas', 'atlas'],
38
+ ['lápis', 'lápis'],
39
+ ['ônibus', 'ônibus'],
40
+ # S exceptions - accent change
41
+ ['gás', 'gases'],
42
+ ['mês', 'meses'],
43
+ # S general rule
44
+ [/(s)$/, '\1es'],
45
+ # L exceptions
46
+ ['mal', 'males'],
47
+ ['cônsul', 'cônsules'],
48
+ ['gol', 'gols'],
49
+ # L rules (too many accents :p)
50
+ [/([#{ACCENTED}].*)[#{ES}]l$/, '\1eis'],
51
+ [/[#{ES}]l$/, 'éis'],
52
+ [/([#{ACCENTED}].*)[#{IS}]l$/, '\1eis'],
53
+ [/[#{IS}]l$/, 'is'],
54
+ [/([#{ACCENTED}].*)[#{OS}]l$/, '\1ois'],
55
+ [/[#{OS}]l$/, 'óis'],
56
+ [/([#{VOWELS}])l$/, '\1is'],
57
+ # General rules
58
+ [/ão$/, 'ões'],
59
+ [/^(.*zinho)$/, ->(match) { m = match.sub(/zinho$/, ''); Inflector.new(m).pluralize.sub(/s$/, '').tr(ACCENTED, NOT_ACCENTED) + 'zinhos'}],
60
+ [/^(.*zinha)$/, ->(match) { m = match.sub(/zinha$/, ''); Inflector.new(m).pluralize.sub(/s$/, '').tr(ACCENTED, NOT_ACCENTED) + 'zinhas'}],
61
+ [/^.*n$/, ->(match) { match.tr(ACCENTED, NOT_ACCENTED) + 's' }],
62
+ [/(m)$/, 'ns'],
63
+ [/([rz])$/, '\1es'],
64
+ [/([#{VOWELS}])$/, '\1s']
65
+ ]
66
+
67
+ SINGULAR_RULES =[
68
+ # Exceptions
69
+ ['papeizinhos', 'papelzinho'],
70
+ ['avós', 'avô'],
71
+ ['quaisquer', 'qualquer'],
72
+ ['raízes', 'raiz'],
73
+ ['juniores', 'júnior'],
74
+ ['seniores', 'sênior'],
75
+ ['caracteres', 'caráter'],
76
+ ['males', 'mal'],
77
+ ['cônsules', 'cônsul'],
78
+ # NS to N, not M
79
+ ['abdomens', 'abdômen'],
80
+ ['germens', 'gérmen'],
81
+ ['hifens', 'hífen'],
82
+ ['liquens', 'líquen'],
83
+ # S exceptions - no flex
84
+ ['pires', 'pires'],
85
+ ['vírus', 'vírus'],
86
+ ['atlas', 'atlas'],
87
+ ['lápis', 'lápis'],
88
+ ['ônibus', 'ônibus'],
89
+ # S exceptions - accent change
90
+ ['gases', 'gás'],
91
+ ['meses', 'mês'],
92
+ # S general rule
93
+ [/ses$/, 's'],
94
+ # L general rules
95
+ [/áveis$/, 'ável'], # No good >_<, too specific
96
+ [/éis$/, 'el'],
97
+ [/óis$/, 'ol'],
98
+ [/eis$/, 'il'],
99
+ [/([aou])is$/, '\1l'],
100
+ # General rules
101
+ [/^(.*zinhos)$/, ->(match) { m = match.sub(/zinhos$/, ''); Inflector.new(m + 's').singularize + 'zinho'}],
102
+ [/^(.*zinhas)$/, ->(match) { m = match.sub(/zinhas$/, ''); Inflector.new(m + 's').singularize + 'zinha'}],
103
+ [/is$/, 'il'],
104
+ [/res$/, 'r'],
105
+ [/zes$/, 'z'],
106
+ [/ns$/, 'm'],
107
+ [/ães$/, 'ão'],
108
+ [/ões$/, 'ão'],
109
+ [/s$/, '']
110
+ ]
111
+
112
+ def initialize(text)
113
+ @text = text
114
+ end
115
+
116
+ def pluralize
117
+ @pluralized ||= apply_rules_to(@text, PLURAL_RULES)
118
+ end
119
+
120
+ def singularize
121
+ @singularized ||= apply_rules_to(@text, SINGULAR_RULES)
122
+ end
123
+
124
+ private
125
+ def apply_rules_to(text, rules)
126
+ rslt = text.dup
127
+ rules.each do |regex, replace|
128
+ reg = Regexp === regex ? regex : /^#{regex}$/
129
+ case replace
130
+ when Proc
131
+ return rslt if rslt.sub!(reg, &replace)
132
+ else
133
+ return rslt if rslt.sub!(reg, replace)
134
+ end
135
+ end
136
+ rslt
137
+ end
138
+ end
139
+ end
@@ -0,0 +1,29 @@
1
+ module Pascoale
2
+ class Reflector
3
+ include Constants
4
+
5
+ def initialize(text)
6
+ @text = text
7
+ end
8
+
9
+ # ALWAYS have accents
10
+ def proparoxytone?
11
+ syllables = SyllableSeparator.new(@text).separate
12
+ return false if syllables.size < 3
13
+ syllables[-3] =~ /[#{ACCENTED}]/
14
+ end
15
+
16
+ # Most common case in portuguese
17
+ def paroxytone?
18
+ !proparoxytone? && !oxytone?
19
+ end
20
+
21
+ # Accends or specific terminators
22
+ def oxytone?
23
+ syllables = SyllableSeparator.new(@text).separate
24
+ return true if syllables.size == 1
25
+ return true if syllables[-1] =~ /[#{ACCENTED}]/
26
+ syllables[-1] =~ /(is?|im|ins?|us?|um|uns?|l|n|r|x|ps|ãs?|ãos?|ons?|ais?|eis?|ois?|aus?|eus?|ous?|ias?|ies?|ios?|uas?|ues?|uos?)$/
27
+ end
28
+ end
29
+ end
@@ -4,23 +4,36 @@ module Pascoale
4
4
 
5
5
  ONSET = "(?:ch|lh|nh|gu|qu|[pbtdcgfv][lr]|[#{CONSONANTS}])"
6
6
 
7
- # Still in doubt if we should add suffixes to the "i" semivowel...
8
- # it slightly improves the the matches, but some of them causes more
9
- # noise than fix things =\
10
- #NUCLEUS = "(?:ãe|ão|õe|[#{VOWELS}](?:u|i(?!nh|r$|m$|dora?$|ção$|dade$))?)"
11
- NUCLEUS = "(?:ãe|ão|õe|[#{VOWELS}](?:u|i(?!nh|r$|m$|ção$|dora?$))?)"
7
+ CODA = '[bcdfghjklmnpqrstvwxz]'
12
8
 
13
- CODA = "[#{CONSONANTS}]"
9
+ # Biggest problem are "sinéreses" and "diéreses".
10
+ # It seems some consonants like "n" and "m" in the next syllable can cause it.
11
+ NUCLEUS_RULES = ['ãe',
12
+ 'ão',
13
+ 'õe',
14
+ 'au',
15
+ 'ou',
16
+ 'iu(?!m$)',
17
+ '[áâàãéêíóôú][iu]',
18
+ '[aieou][iu](?=[aeo])',
19
+ "ai(?!m$|ns$|r$|ç[ãõ]|[nm]#{ONSET}|nh)",
20
+ "eu(?![nm]#{ONSET})",
21
+ "ei(?![nm]#{ONSET})",
22
+ "ui(?!m$|ns$|ç[ãõ]|r$|dade$|z|[nm]#{ONSET}|nar$|d[ao]$|dora?$)",
23
+ "oi(?!m$|ns$|ç[ãõ]|r$|dade$|z|[nm]#{ONSET}|nar$|dora?$)",
24
+ '[aáâàãeéêiíoóôuúy]']
25
+
26
+ NUCLEUS = "(?:#{NUCLEUS_RULES.join('|')})"
14
27
 
15
28
  # The concept of "rhyme" does not help in this algorithm. It seems the
16
- # concept makes no sense for syllable separation in portuguese
29
+ # concept makes no sense for syllable separation in portuguese (by an algorithm, at least)
17
30
  KERNEL = "#{ONSET}?#{NUCLEUS}"
18
31
 
19
32
  def initialize(word)
20
33
  @word = word
21
34
  end
22
35
 
23
- def separated
36
+ def separate
24
37
  rest = @word
25
38
  result = []
26
39
  while rest && rest.size > 0
@@ -33,6 +46,8 @@ module Pascoale
33
46
  if rest =~ /^([#{CONSONANTS}]#{KERNEL})(?:(#{KERNEL})|(#{CODA})(#{KERNEL})|(#{CODA}#{CODA})(#{KERNEL})|(#{CODA}#{CODA})|(#{CODA}))?(.*)$/
34
47
  result << $1 + $3.to_s + $5.to_s + $7.to_s + $8.to_s
35
48
  rest = $2.to_s + $4.to_s + $6.to_s + $9.to_s
49
+ else
50
+ raise %(Cannot separate "#{@word}". No rule match next syllable at "#{result.join('')}|>#{rest}")
36
51
  end
37
52
  else
38
53
  raise %(Cannot separate "#{@word}". No rule match next syllable at "#{result.join('')}|>#{rest}")
@@ -40,5 +55,6 @@ module Pascoale
40
55
  end
41
56
  result
42
57
  end
58
+ alias separated separate
43
59
  end
44
60
  end
@@ -10,7 +10,7 @@ begin
10
10
  begin
11
11
  word, _, separation = eval(line)
12
12
  next if word =~ /\-/
13
- s = Pascoale::SyllableSeparator.new(word).separated
13
+ s = Pascoale::SyllableSeparator.new(word).separate
14
14
  if s == separation
15
15
  correct_counter += 1
16
16
  else
@@ -1,3 +1,3 @@
1
1
  module Pascoale
2
- VERSION = "0.2.1"
2
+ VERSION = '0.3.0'
3
3
  end
data/pascoale.gemspec CHANGED
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
19
19
 
20
20
  spec.add_development_dependency 'bundler'
21
21
  spec.add_development_dependency 'rake'
22
- spec.add_development_dependency 'rspec', '~> 3'
22
+ spec.add_development_dependency 'rspec', '~> 3.0'
23
23
  spec.add_development_dependency 'guard-rspec', '~> 4'
24
+ spec.add_development_dependency 'simplecov', '~> 0', '>= 0.9'
24
25
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Pascoale::Edits do
4
- let(:edits) { Pascoale::Edits.new('test') }
3
+ describe Edits do
4
+ let(:edits) { Edits.new('test') }
5
5
 
6
6
  it 'deletes letters' do
7
7
  expect(edits.deletions).to include('est', 'tst', 'tet', 'tes')
@@ -1,37 +1,37 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Pascoale::Formatter do
3
+ describe Formatter do
4
4
  describe '#as_title' do
5
5
  it 'formats simple text' do
6
- formatter = Pascoale::Formatter.new('teste')
6
+ formatter = Formatter.new('teste')
7
7
  expect(formatter.as_title).to eq 'Teste'
8
8
  end
9
9
 
10
10
  it 'formats simple text with accent' do
11
- formatter = Pascoale::Formatter.new('épico')
11
+ formatter = Formatter.new('épico')
12
12
  expect(formatter.as_title).to eq 'Épico'
13
13
  end
14
14
 
15
15
  it 'formats multiple words' do
16
- formatter = Pascoale::Formatter.new('joão alves ferreira')
16
+ formatter = Formatter.new('joão alves ferreira')
17
17
  expect(formatter.as_title).to eq 'João Alves Ferreira'
18
18
  end
19
19
 
20
20
  it 'formats prepositions and connect words as exceptions' do
21
- formatter = Pascoale::Formatter.new('josé da silva e santos dos anjos')
21
+ formatter = Formatter.new('josé da silva e santos dos anjos')
22
22
  expect(formatter.as_title).to eq 'José da Silva e Santos dos Anjos'
23
23
  end
24
24
 
25
25
  it 'formats first words always as capitalized' do
26
- formatter = Pascoale::Formatter.new('da vida e das coisas')
26
+ formatter = Formatter.new('da vida e das coisas')
27
27
  expect(formatter.as_title).to eq 'Da Vida e das Coisas'
28
28
  end
29
29
 
30
30
  it 'formats acronyms' do
31
- formatter = Pascoale::Formatter.new('a ONU não gosta de violência')
31
+ formatter = Formatter.new('a ONU não gosta de violência')
32
32
  expect(formatter.as_title).to eq 'A ONU Não Gosta de Violência'
33
33
 
34
- formatter = Pascoale::Formatter.new('IRQ é algo ultrapassado!')
34
+ formatter = Formatter.new('IRQ é algo ultrapassado!')
35
35
  expect(formatter.as_title).to eq 'IRQ É Algo Ultrapassado!'
36
36
  end
37
37
  end
@@ -0,0 +1,371 @@
1
+ require 'spec_helper'
2
+
3
+ describe Inflector do
4
+ describe '#pluralize' do
5
+ matcher :pluralize_as do |expected|
6
+ result = nil
7
+ match do |actual|
8
+ result = Inflector.new(actual).pluralize
9
+ result == expected
10
+ end
11
+ failure_message do |actual|
12
+ %(expected "#{actual}" to pluralize as "#{expected}", but was "#{result}")
13
+ end
14
+ end
15
+
16
+ it 'pluralize simple cases' do
17
+ expect('teste').to pluralize_as 'testes'
18
+ expect('venda').to pluralize_as 'vendas'
19
+ expect('casa').to pluralize_as 'casas'
20
+ expect('peru').to pluralize_as 'perus'
21
+ expect('pai').to pluralize_as 'pais'
22
+ expect('lei').to pluralize_as 'leis'
23
+ expect('herói').to pluralize_as 'heróis'
24
+ expect('réu').to pluralize_as 'réus'
25
+ expect('troféu').to pluralize_as 'troféus'
26
+ expect('fogaréu').to pluralize_as 'fogaréus'
27
+ expect('degrau').to pluralize_as 'degraus'
28
+ expect('grau').to pluralize_as 'graus'
29
+ expect('sarau').to pluralize_as 'saraus'
30
+ expect('bacalhau').to pluralize_as 'bacalhaus'
31
+ expect('maçã').to pluralize_as 'maçãs'
32
+ expect('mãe').to pluralize_as 'mães'
33
+ end
34
+
35
+ it 'pluralize paroxytone "ão"' do
36
+ expect('sótão').to pluralize_as 'sótãos'
37
+ expect('cidadão').to pluralize_as 'cidadãos'
38
+ expect('chão').to pluralize_as 'chãos'
39
+ expect('bênção').to pluralize_as 'bênçãos'
40
+ expect('cristão').to pluralize_as 'cristãos'
41
+ expect('grão').to pluralize_as 'grãos'
42
+ expect('órfão').to pluralize_as 'órfãos'
43
+ expect('irmão').to pluralize_as 'irmãos'
44
+ expect('mão').to pluralize_as 'mãos'
45
+ expect('refrão').to pluralize_as 'refrãos' # OK also: refrães
46
+ end
47
+
48
+ it 'pluralize "ão" to "ões"' do
49
+ expect('botão').to pluralize_as 'botões'
50
+ expect('guardião').to pluralize_as 'guardiões' # OK also: guardiães
51
+ expect('verão').to pluralize_as 'verões' # OK also: verãos
52
+ expect('anão').to pluralize_as 'anões' # OK also: anãos
53
+ expect('cirurgião').to pluralize_as 'cirurgiões' # OK also: cirurgiães
54
+ expect('corrimão').to pluralize_as 'corrimões' # OK also: corrimãos
55
+ expect('vilão').to pluralize_as 'vilões' # OK also: vilãos
56
+ expect('ancião').to pluralize_as 'anciões' # OK also: anciães, anciãos
57
+ expect('ermitão').to pluralize_as 'ermitões' # OK also: ermitães, ermitãos
58
+ expect('faisão').to pluralize_as 'faisões' # OK also: faisães
59
+ end
60
+
61
+ it 'pluralize "ão" to "ães"' do
62
+ expect('alemão').to pluralize_as ('alemães')
63
+ expect('capitão').to pluralize_as ('capitães')
64
+ expect('pão').to pluralize_as ('pães')
65
+ expect('cão').to pluralize_as ('cães')
66
+ expect('charlatão').to pluralize_as ('charlatães')
67
+ expect('sacristão').to pluralize_as ('sacristães')
68
+ expect('capelão').to pluralize_as ('capelães')
69
+ expect('escrivão').to pluralize_as ('escrivães')
70
+ expect('tabelião').to pluralize_as ('tabeliães')
71
+ end
72
+
73
+ it 'pluralize "m" to "ns"' do
74
+ expect('homem').to pluralize_as 'homens'
75
+ expect('jardim').to pluralize_as 'jardins'
76
+ expect('som').to pluralize_as 'sons'
77
+ expect('atum').to pluralize_as 'atuns'
78
+ end
79
+
80
+ it 'pluralize "r" or "z" to "es"' do
81
+ expect('mar').to pluralize_as 'mares'
82
+ expect('açúcar').to pluralize_as 'açúcares'
83
+ expect('hambúrguer').to pluralize_as 'hambúrgueres'
84
+ expect('flor').to pluralize_as 'flores'
85
+ expect('repórter').to pluralize_as 'repórteres'
86
+ expect('revólver').to pluralize_as 'revólveres'
87
+ expect('rapaz').to pluralize_as 'rapazes'
88
+ expect('cruz').to pluralize_as 'cruzes'
89
+ expect('luz').to pluralize_as 'luzes'
90
+ end
91
+
92
+ it 'pluralize "s" to "es"' do
93
+ expect('obus').to pluralize_as 'obuses'
94
+ expect('país').to pluralize_as 'países'
95
+
96
+ expect('pires').to pluralize_as 'pires'
97
+ expect('vírus').to pluralize_as 'vírus'
98
+ expect('lápis').to pluralize_as 'lápis'
99
+ expect('atlas').to pluralize_as 'atlas'
100
+ expect('ônibus').to pluralize_as 'ônibus'
101
+
102
+ # No accent
103
+ expect('gás').to pluralize_as 'gases'
104
+ expect('mês').to pluralize_as 'meses'
105
+ end
106
+
107
+ it 'pluralize "l" to "is"' do
108
+ expect('animal').to pluralize_as 'animais'
109
+ expect('canal').to pluralize_as 'canais'
110
+ expect('vogal').to pluralize_as 'vogais'
111
+ expect('igual').to pluralize_as 'iguais'
112
+ expect('anel').to pluralize_as 'anéis'
113
+ expect('pastel').to pluralize_as 'pastéis'
114
+ expect('anzol').to pluralize_as 'anzóis'
115
+ expect('lençol').to pluralize_as 'lençóis'
116
+ expect('espanhol').to pluralize_as 'espanhóis'
117
+
118
+ expect('infantil').to pluralize_as 'infantis'
119
+ expect('gentil').to pluralize_as 'gentis'
120
+ expect('funil').to pluralize_as 'funis'
121
+ expect('barril').to pluralize_as 'barris'
122
+ expect('ardil').to pluralize_as 'ardis'
123
+ expect('fuzil').to pluralize_as 'fuzis'
124
+
125
+ expect('fóssil').to pluralize_as 'fósseis'
126
+ expect('hábil').to pluralize_as 'hábeis'
127
+ expect('útil').to pluralize_as 'úteis'
128
+ expect('fácil').to pluralize_as 'fáceis'
129
+ expect('difícil').to pluralize_as 'difíceis'
130
+
131
+ expect('projétil').to pluralize_as 'projéteis'
132
+ expect('réptil').to pluralize_as 'répteis'
133
+
134
+ # Yeah! Those are real words :)
135
+ expect('projetil').to pluralize_as 'projetis'
136
+ expect('reptil').to pluralize_as 'reptis'
137
+
138
+ expect('cruel').to pluralize_as 'cruéis'
139
+ expect('vil').to pluralize_as 'vis'
140
+
141
+ expect('álcool').to pluralize_as 'álcoois'
142
+ expect('afável').to pluralize_as 'afáveis'
143
+ expect('amável').to pluralize_as 'amáveis'
144
+ end
145
+
146
+ it 'pluralize "n" to "ns"' do
147
+ expect('abdômen').to pluralize_as 'abdomens'
148
+ expect('gérmen').to pluralize_as 'germens'
149
+ expect('hífen').to pluralize_as 'hifens'
150
+ expect('líquen').to pluralize_as 'liquens'
151
+ end
152
+
153
+ it '"x" does not pluralize' do
154
+ expect('xerox').to pluralize_as 'xerox'
155
+ expect('tórax').to pluralize_as 'tórax'
156
+ expect('clímax').to pluralize_as 'clímax'
157
+ end
158
+
159
+ it 'pluralize "zinho" to "pluraizinhos"' do
160
+ expect('pluralzinho').to pluralize_as 'pluraizinhos'
161
+ expect('botãozinho').to pluralize_as 'botõezinhos'
162
+ expect('balãozinho').to pluralize_as 'balõezinhos'
163
+ expect('pãozinho').to pluralize_as 'pãezinhos'
164
+ expect('papelzinho').to pluralize_as 'papeizinhos'
165
+ expect('anzolzinho').to pluralize_as 'anzoizinhos'
166
+ expect('colarzinho').to pluralize_as 'colarezinhos'
167
+ expect('florzinha').to pluralize_as 'florezinhas'
168
+ expect('molezinha').to pluralize_as 'molezinhas'
169
+ expect('luzinha').to pluralize_as 'luzinhas'
170
+ expect('cruzinha').to pluralize_as 'cruzinhas'
171
+
172
+ # Not diminutive ;)
173
+ expect('colarinho').to pluralize_as 'colarinhos'
174
+ end
175
+
176
+ it 'pluralize exception' do
177
+ expect('avô').to pluralize_as 'avós'
178
+ expect('avó').to pluralize_as 'avós'
179
+
180
+ expect('qualquer').to pluralize_as 'quaisquer'
181
+ expect('raiz').to pluralize_as 'raízes'
182
+ expect('júnior').to pluralize_as 'juniores'
183
+ expect('sênior').to pluralize_as 'seniores'
184
+ expect('caráter').to pluralize_as 'caracteres'
185
+
186
+ expect('mal').to pluralize_as 'males'
187
+ expect('cônsul').to pluralize_as 'cônsules'
188
+ expect('gol').to pluralize_as 'gols'
189
+ end
190
+
191
+ it 'pluralize interesting ones' do
192
+ expect('degrau').to pluralize_as 'degraus'
193
+ expect('chapéu').to pluralize_as 'chapéus'
194
+ end
195
+
196
+ it 'pluralize is immutable' do
197
+ x = Inflector.new('teste')
198
+ x.pluralize
199
+ expect(x.pluralize).to eq 'testes'
200
+ end
201
+ end
202
+
203
+ describe '#singularize' do
204
+ matcher :singularize_as do |expected|
205
+ result = nil
206
+ match do |actual|
207
+ result = Inflector.new(actual).singularize
208
+ result == expected
209
+ end
210
+ failure_message do |actual|
211
+ %(expected "#{actual}" to singularize as "#{expected}", but was "#{result}")
212
+ end
213
+ end
214
+
215
+ it 'singularize simple cases' do
216
+ expect('testes').to singularize_as 'teste'
217
+ expect('vendas').to singularize_as 'venda'
218
+ expect('casas').to singularize_as 'casa'
219
+ end
220
+
221
+ it 'singularize paroxytone "ão"' do
222
+ expect('sótãos').to singularize_as 'sótão'
223
+ expect('cidadãos').to singularize_as 'cidadão'
224
+ expect('chãos').to singularize_as 'chão'
225
+ expect('bênçãos').to singularize_as 'bênção'
226
+ expect('cristãos').to singularize_as 'cristão'
227
+ expect('grãos').to singularize_as 'grão'
228
+ expect('órfãos').to singularize_as 'órfão'
229
+ expect('irmãos').to singularize_as 'irmão'
230
+ expect('mãos').to singularize_as 'mão'
231
+ expect('refrãos').to singularize_as 'refrão'
232
+ end
233
+
234
+ it 'singularize "ões" to "ão" ' do
235
+ expect('botões').to singularize_as 'botão'
236
+ expect('guardiões').to singularize_as 'guardião' # OK also: guardiães
237
+ expect('verões').to singularize_as 'verão' # OK also: verãos
238
+ expect('anões').to singularize_as 'anão' # OK also: anãos
239
+ expect('cirurgiões').to singularize_as 'cirurgião' # OK also: cirurgiães
240
+ expect('corrimões').to singularize_as 'corrimão' # OK also: corrimãos
241
+ expect('vilões').to singularize_as 'vilão' # OK also: vilãos
242
+ expect('anciões').to singularize_as 'ancião' # OK also: anciães, anciãos
243
+ expect('ermitões').to singularize_as 'ermitão' # OK also: ermitães, ermitãos
244
+ expect('faisões').to singularize_as 'faisão' # OK also: faisães
245
+ end
246
+
247
+ it 'singularize "ães" to "ão"' do
248
+ expect('alemães').to singularize_as 'alemão'
249
+ expect('capitães').to singularize_as 'capitão'
250
+ expect('pães').to singularize_as 'pão'
251
+ expect('cães').to singularize_as 'cão'
252
+ expect('charlatães').to singularize_as 'charlatão'
253
+ expect('sacristães').to singularize_as 'sacristão'
254
+ expect('capelães').to singularize_as 'capelão'
255
+ expect('escrivães').to singularize_as 'escrivão'
256
+ expect('tabeliães').to singularize_as 'tabelião'
257
+ end
258
+
259
+ it 'singularize "ns" to "m"' do
260
+ expect('homens').to singularize_as 'homem'
261
+ expect('jardins').to singularize_as 'jardim'
262
+ expect('sons').to singularize_as 'som'
263
+ expect('atuns').to singularize_as 'atum'
264
+ end
265
+
266
+ it 'singularize "es" to "r" or "z"' do
267
+ expect('mares').to singularize_as 'mar'
268
+ expect('açúcares').to singularize_as 'açúcar'
269
+ expect('hambúrgueres').to singularize_as 'hambúrguer'
270
+ expect('flores').to singularize_as 'flor'
271
+ expect('repórteres').to singularize_as 'repórter'
272
+ expect('revólveres').to singularize_as 'revólver'
273
+ expect('rapazes').to singularize_as 'rapaz'
274
+ expect('cruzes').to singularize_as 'cruz'
275
+ expect('luzes').to singularize_as 'luz'
276
+ end
277
+
278
+ it 'singularize "es" to "s"' do
279
+ expect('obuses').to singularize_as 'obus'
280
+ expect('países').to singularize_as 'país'
281
+
282
+ expect('pires').to singularize_as 'pires'
283
+ expect('vírus').to singularize_as 'vírus'
284
+ expect('lápis').to singularize_as 'lápis'
285
+ expect('atlas').to singularize_as 'atlas'
286
+ expect('ônibus').to singularize_as 'ônibus'
287
+
288
+ # No accent
289
+ expect('gases').to singularize_as 'gás'
290
+ expect('meses').to singularize_as 'mês'
291
+ end
292
+
293
+ it 'singularize "is" to "l"' do
294
+ expect('animais').to singularize_as 'animal'
295
+ expect('canais').to singularize_as 'canal'
296
+ expect('vogais').to singularize_as 'vogal'
297
+ expect('iguais').to singularize_as 'igual'
298
+ expect('anéis').to singularize_as 'anel'
299
+ expect('pastéis').to singularize_as 'pastel'
300
+ expect('anzóis').to singularize_as 'anzol'
301
+ expect('lençóis').to singularize_as 'lençol'
302
+ expect('espanhóis').to singularize_as 'espanhol'
303
+
304
+ expect('infantis').to singularize_as 'infantil'
305
+ expect('gentis').to singularize_as 'gentil'
306
+ expect('funis').to singularize_as 'funil'
307
+ expect('barris').to singularize_as 'barril'
308
+ expect('ardis').to singularize_as 'ardil'
309
+ expect('fuzis').to singularize_as 'fuzil'
310
+
311
+ expect('fósseis').to singularize_as 'fóssil'
312
+ expect('hábeis').to singularize_as 'hábil'
313
+ expect('úteis').to singularize_as 'útil'
314
+ expect('fáceis').to singularize_as 'fácil'
315
+ expect('difíceis').to singularize_as 'difícil'
316
+
317
+ expect('projéteis').to singularize_as 'projétil'
318
+ expect('répteis').to singularize_as 'réptil'
319
+
320
+ # Yeah! Those are real words :)
321
+ expect('projetis').to singularize_as 'projetil'
322
+ expect('reptis').to singularize_as 'reptil'
323
+
324
+ expect('cruéis').to singularize_as 'cruel'
325
+ expect('vis').to singularize_as 'vil'
326
+
327
+ expect('álcoois').to singularize_as 'álcool'
328
+ expect('afáveis').to singularize_as 'afável'
329
+ expect('amáveis').to singularize_as 'amável'
330
+ expect('papéis').to singularize_as 'papel'
331
+ end
332
+
333
+ it 'singularize "ns" to "n"' do
334
+ expect('abdomens').to singularize_as 'abdômen'
335
+ expect('germens').to singularize_as 'gérmen'
336
+ expect('hifens').to singularize_as 'hífen'
337
+ expect('liquens').to singularize_as 'líquen'
338
+ end
339
+
340
+ it 'pluralize "pluraizinhos" to "zinho"' do
341
+ expect('pluraizinhos').to singularize_as 'pluralzinho'
342
+ expect('botõezinhos').to singularize_as 'botãozinho'
343
+ expect('balõezinhos').to singularize_as 'balãozinho'
344
+ expect('pãezinhos').to singularize_as 'pãozinho'
345
+ expect('anzoizinhos').to singularize_as 'anzolzinho'
346
+ expect('colarezinhos').to singularize_as 'colarzinho'
347
+ expect('florezinhas').to singularize_as 'florzinha'
348
+ expect('molezinhas').to singularize_as 'molezinha'
349
+ expect('luzinhas').to singularize_as 'luzinha'
350
+ expect('cruzinhas').to singularize_as 'cruzinha'
351
+
352
+ # Not diminutive ;)
353
+ expect('colarinhos').to singularize_as 'colarinho'
354
+ end
355
+
356
+ it 'singularize exception' do
357
+ expect('papeizinhos').to singularize_as 'papelzinho'
358
+ expect('avós').to singularize_as 'avô'
359
+
360
+ expect('quaisquer').to singularize_as 'qualquer'
361
+ expect('raízes').to singularize_as 'raiz'
362
+ expect('juniores').to singularize_as 'júnior'
363
+ expect('seniores').to singularize_as 'sênior'
364
+ expect('caracteres').to singularize_as 'caráter'
365
+
366
+ expect('males').to singularize_as 'mal'
367
+ expect('cônsules').to singularize_as 'cônsul'
368
+ expect('gols').to singularize_as 'gol'
369
+ end
370
+ end
371
+ end
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+
3
+ describe Reflector do
4
+ describe '#proparoxytone?' do
5
+ it 'detects proparoxytone words' do
6
+ expect(Reflector.new('dióxido')).to be_proparoxytone
7
+ expect(Reflector.new('pãozinho')).not_to be_proparoxytone
8
+ end
9
+ end
10
+
11
+ describe '#paroxytone?' do
12
+ it 'detects paroxytone words' do
13
+ expect(Reflector.new('jiboia')).to be_paroxytone
14
+ expect(Reflector.new('ideia')).to be_paroxytone
15
+ expect(Reflector.new('assembleia')).to be_paroxytone
16
+ expect(Reflector.new('heroico')).to be_paroxytone
17
+ end
18
+ end
19
+
20
+ describe '#oxytone?' do
21
+ it 'detects oxytone words' do
22
+ expect(Reflector.new('pão')).to be_oxytone
23
+ expect(Reflector.new('pé')).to be_oxytone
24
+ expect(Reflector.new('chulé')).to be_oxytone
25
+ expect(Reflector.new('parati')).to be_oxytone
26
+ expect(Reflector.new('urubu')).to be_oxytone
27
+ expect(Reflector.new('jabuti')).to be_oxytone
28
+ expect(Reflector.new('jesus')).to be_oxytone
29
+ expect(Reflector.new('tatu')).to be_oxytone
30
+ expect(Reflector.new('amor')).to be_oxytone
31
+ expect(Reflector.new('terror')).to be_oxytone
32
+ expect(Reflector.new('ruim')).to be_oxytone
33
+ expect(Reflector.new('condor')).to be_oxytone
34
+ expect(Reflector.new('anzol')).to be_oxytone
35
+ end
36
+ end
37
+
38
+ it 'detects edge cases' do
39
+ expect(Reflector.new('cítara')).to be_proparoxytone
40
+ expect(Reflector.new('citara')).to be_paroxytone
41
+ expect(Reflector.new('citará')).to be_oxytone
42
+
43
+ expect(Reflector.new('pais')).to be_oxytone
44
+ expect(Reflector.new('país')).to be_oxytone
45
+ end
46
+ end
@@ -1,17 +1,17 @@
1
1
  require 'spec_helper'
2
2
 
3
- RSpec::Matchers.define :separate_as do |expected|
4
- result = nil
5
- match do |actual|
6
- result = Pascoale::SyllableSeparator.new(actual).separated
7
- result == expected
3
+ describe SyllableSeparator do
4
+ matcher :separate_as do |expected|
5
+ result = nil
6
+ match do |actual|
7
+ result = SyllableSeparator.new(actual).separate
8
+ result == expected
9
+ end
10
+ failure_message do |actual|
11
+ %( expected "#{actual}" to separate as "#{expected}", but was "#{result}")
12
+ end
8
13
  end
9
- failure_message do |actual|
10
- %( expected "#{actual}" to separate as "#{expected}", but was "#{result}")
11
- end
12
- end
13
14
 
14
- describe Pascoale::SyllableSeparator do
15
15
  it 'separates simple words' do
16
16
  expect('bola').to separate_as %w(bo la)
17
17
  expect('batata').to separate_as %w(ba ta ta)
@@ -56,7 +56,7 @@ describe Pascoale::SyllableSeparator do
56
56
  expect('falansterialismo').to separate_as %w(fa lans te ri a lis mo)
57
57
  end
58
58
 
59
- it 'separates single vowels at beggining' do
59
+ it 'separates single vowels at beginning' do
60
60
  expect('abacaxi').to separate_as %w(a ba ca xi)
61
61
  expect('exceto').to separate_as %w(ex ce to)
62
62
  expect('arrocho').to separate_as %w(ar ro cho)
@@ -94,6 +94,7 @@ describe Pascoale::SyllableSeparator do
94
94
  expect('piropneumático').to separate_as %w(pi rop neu má ti co)
95
95
  expect('mnemônica').to separate_as %w(mne mô ni ca)
96
96
  expect('pseudônimo').to separate_as %w(pseu dô ni mo)
97
+ expect('psicólogo').to separate_as %w(psi có lo go)
97
98
  expect('gnomo').to separate_as %w(gno mo)
98
99
  end
99
100
 
@@ -101,9 +102,6 @@ describe Pascoale::SyllableSeparator do
101
102
  expect('saudade').to separate_as %w(sau da de)
102
103
  expect('vaidade').to separate_as %w(vai da de)
103
104
  expect('suave').to separate_as %w(su a ve)
104
-
105
- # Not sure how to deal with these
106
- #expect('traidor').to separate_as %w(trai dor)
107
105
  end
108
106
 
109
107
  it 'separates "dieréses"' do
@@ -120,9 +118,6 @@ describe Pascoale::SyllableSeparator do
120
118
  expect('construir').to separate_as %w(cons tru ir)
121
119
  expect('destruir').to separate_as %w(des tru ir)
122
120
  expect('destruição').to separate_as %w(des tru i ção)
123
-
124
- #expect('acuidade').to separate_as %w(a cu i da de)
125
- #expect('ajuizar').to separate_as %w(a ju i zar)
126
121
  end
127
122
 
128
123
  it 'separates random words' do
@@ -146,5 +141,73 @@ describe Pascoale::SyllableSeparator do
146
141
  # For example, the word bellow is correctly separated
147
142
  # (as the dictionary says). =\
148
143
  expect('abrupção').to separate_as %w(a brup ção)
144
+
145
+ expect('pais').to separate_as %w(pais)
146
+ expect('país').to separate_as %w(pa ís)
147
+ end
148
+
149
+ it 'separates "amanhã"' do
150
+ expect('amanhã').to separate_as %w(a ma nhã)
151
+ end
152
+
153
+
154
+ it 'separates "ainda"' do
155
+ expect('ainda').to separate_as %w(a in da)
156
+ end
157
+
158
+ it 'separates "ruim"' do
159
+ expect('ruim').to separate_as %w(ru im)
160
+ end
161
+
162
+ it 'separates "acuidade" and "ajuizar"' do
163
+ expect('acuidade').to separate_as %w(a cu i da de)
164
+ expect('ajuizar').to separate_as %w(a ju i zar)
165
+ end
166
+
167
+ it 'separates "traidor"' do
168
+ expect('traidor').to separate_as %w(trai dor)
169
+ end
170
+
171
+ it 'separates "arruinar"' do
172
+ expect('arruinar').to separate_as %w(ar ru i nar)
173
+ end
174
+
175
+ it 'separates "ou"' do
176
+ expect('cenoura').to separate_as %w(ce nou ra)
177
+ expect('roupa').to separate_as %w(rou pa)
178
+ end
179
+
180
+ it 'separates "moinho"' do
181
+ expect('moinho').to separate_as %w(mo i nho)
182
+ end
183
+
184
+ it 'separates "fluido"' do
185
+ expect('fluido').to separate_as %w(flu i do)
186
+ end
187
+
188
+ it 'separates "cair"' do
189
+ expect('cair').to separate_as %w(ca ir)
190
+ end
191
+
192
+ it 'separates "saudade" and "saudoso"' do
193
+ expect('saudade').to separate_as %w(sau da de)
194
+ expect('saudoso').to separate_as %w(sau do so)
195
+ end
196
+
197
+ it 'separates "rein..." and "reim..."' do
198
+ expect('reimplantar').to separate_as %w(re im plan tar)
199
+ expect('reinventar').to separate_as %w(re in ven tar)
200
+ expect('reincidência').to separate_as %w(re in ci dên ci a)
201
+ expect('deixar').to separate_as %w(dei xar)
202
+ expect('pereira').to separate_as %w(pe rei ra)
203
+ end
204
+
205
+ it 'separates "transeunte"' do
206
+ expect('transeunte').to separate_as %w(tran se un te)
207
+ end
208
+
209
+ it 'separates "doido"' do
210
+ expect('doído').to separate_as %w(do í do)
211
+ expect('doido').to separate_as %w(doi do)
149
212
  end
150
213
  end
data/spec/spec_helper.rb CHANGED
@@ -1 +1,5 @@
1
+ require 'simplecov'
2
+ SimpleCov.start
1
3
  require 'pascoale'
4
+
5
+ include Pascoale
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pascoale
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ronie Uliana
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-13 00:00:00.000000000 Z
11
+ date: 2015-07-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3'
47
+ version: '3.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '3'
54
+ version: '3.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: guard-rspec
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +66,26 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '4'
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: '0.9'
79
+ type: :development
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - "~>"
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0.9'
69
89
  description:
70
90
  email:
71
91
  - ronie.uliana@vagas.com.br
@@ -76,6 +96,7 @@ files:
76
96
  - ".gitignore"
77
97
  - ".ruby-gemset"
78
98
  - ".ruby-version"
99
+ - ".travis.yml"
79
100
  - Gemfile
80
101
  - Guardfile
81
102
  - LICENSE.txt
@@ -88,12 +109,16 @@ files:
88
109
  - lib/pascoale/constants.rb
89
110
  - lib/pascoale/edits.rb
90
111
  - lib/pascoale/formatter.rb
112
+ - lib/pascoale/inflector.rb
113
+ - lib/pascoale/reflector.rb
91
114
  - lib/pascoale/syllable_separator.rb
92
115
  - lib/pascoale/syllable_separator_benchmark.rb
93
116
  - lib/pascoale/version.rb
94
117
  - pascoale.gemspec
95
118
  - spec/lib/pascoale/edits_spec.rb
96
119
  - spec/lib/pascoale/formatter_spec.rb
120
+ - spec/lib/pascoale/inflector_spec.rb
121
+ - spec/lib/pascoale/reflector_spec.rb
97
122
  - spec/lib/pascoale/syllable_separator_spec.rb
98
123
  - spec/spec_helper.rb
99
124
  homepage: http://github.com/ruliana/pascoale
@@ -116,12 +141,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
116
141
  version: '0'
117
142
  requirements: []
118
143
  rubyforge_project:
119
- rubygems_version: 2.2.2
144
+ rubygems_version: 2.4.6
120
145
  signing_key:
121
146
  specification_version: 4
122
147
  summary: Text processing utilities for Brazilian Portuguese
123
148
  test_files:
124
149
  - spec/lib/pascoale/edits_spec.rb
125
150
  - spec/lib/pascoale/formatter_spec.rb
151
+ - spec/lib/pascoale/inflector_spec.rb
152
+ - spec/lib/pascoale/reflector_spec.rb
126
153
  - spec/lib/pascoale/syllable_separator_spec.rb
127
154
  - spec/spec_helper.rb