pascoale 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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