conjugate 1.5.0 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +26 -0
- data/Guardfile +24 -0
- data/README.markdown +16 -0
- data/Rakefile +7 -0
- data/conjugate.gemspec +19 -14
- data/lib/conjugate/common.rb +16 -44
- data/lib/conjugate/french.rb +20 -11
- data/lib/conjugate/french_templates/irregular_verbs.rb +27 -27
- data/lib/conjugate/spanish.rb +15 -5
- data/lib/conjugate/spanish_templates/irregular_verbs.rb +176 -180
- data/lib/conjugate/spanish_templates/templates.rb +192 -192
- data/lib/conjugate.rb +10 -2
- data/spec/common_spec.rb +30 -0
- data/spec/french_spec.rb +187 -0
- data/spec/spanish_spec.rb +115 -0
- metadata +45 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: df25562c7b30bebf362cd32ebee17284aca23b49
|
4
|
+
data.tar.gz: 4f01c56fe1d9665bd2ba6715d11f276b289984c2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 484d6989392dc8e747975983d24a7a3ff60fadc5f1b0feb1a687e9ff218bcc8866540efaefda7ebdde9da27cc450499a636b36ab8f8fff542a15f8e538df62c5
|
7
|
+
data.tar.gz: 1fa557846689ba6745080f8116ff0c06a3c3bd1f8a07a9f121902c63a8e19af2c6739cce15ba2140a3427b6f36bdcad9ab42f989df083f4ff05b88fd4ac883df
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
conjugate (1.6.0)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: http://rubygems.org/
|
8
|
+
specs:
|
9
|
+
diff-lcs (1.2.5)
|
10
|
+
rake (10.1.1)
|
11
|
+
rspec (2.14.1)
|
12
|
+
rspec-core (~> 2.14.0)
|
13
|
+
rspec-expectations (~> 2.14.0)
|
14
|
+
rspec-mocks (~> 2.14.0)
|
15
|
+
rspec-core (2.14.8)
|
16
|
+
rspec-expectations (2.14.5)
|
17
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
18
|
+
rspec-mocks (2.14.6)
|
19
|
+
|
20
|
+
PLATFORMS
|
21
|
+
ruby
|
22
|
+
|
23
|
+
DEPENDENCIES
|
24
|
+
conjugate!
|
25
|
+
rake
|
26
|
+
rspec
|
data/Guardfile
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
guard :rspec do
|
5
|
+
watch(%r{^spec/.+_spec\.rb$})
|
6
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
7
|
+
watch('spec/spec_helper.rb') { "spec" }
|
8
|
+
|
9
|
+
# Rails example
|
10
|
+
watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
11
|
+
watch(%r{^app/(.*)(\.erb|\.haml|\.slim)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
|
12
|
+
watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
|
13
|
+
watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
|
14
|
+
watch('config/routes.rb') { "spec/routing" }
|
15
|
+
watch('app/controllers/application_controller.rb') { "spec/controllers" }
|
16
|
+
|
17
|
+
# Capybara features specs
|
18
|
+
watch(%r{^app/views/(.+)/.*\.(erb|haml|slim)$}) { |m| "spec/features/#{m[1]}_spec.rb" }
|
19
|
+
|
20
|
+
# Turnip features and steps
|
21
|
+
watch(%r{^spec/acceptance/(.+)\.feature$})
|
22
|
+
watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
|
23
|
+
end
|
24
|
+
|
data/README.markdown
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
Conjugate
|
2
2
|
=========
|
3
|
+
[![Build Status](https://travis-ci.org/JeremyGeros/Conjugate.png?branch=master)](https://travis-ci.org/JeremyGeros/Conjugate)
|
3
4
|
|
4
5
|
Conjugates verbs into their proper form given a pronoun. Can conjugate irregular verbs that are in this list https://gist.github.com/1841995
|
5
6
|
Currently only has support for Spanish.
|
@@ -22,6 +23,21 @@ Conjugate::French.conjugate(:pronoun => :je, :verb => 'acheter', :tense => :pres
|
|
22
23
|
=> achète
|
23
24
|
```
|
24
25
|
|
26
|
+
There is also a helper method to pass a language option, either the name or language code
|
27
|
+
```
|
28
|
+
Conjugate.conjugate({language: 'french', verb: 'jouer', tense: :present, pronoun: :je})
|
29
|
+
=> joue
|
30
|
+
|
31
|
+
Conjugate.conjugate({language: 'fr', verb: 'jouer', tense: :present, pronoun: :je})
|
32
|
+
=> joue
|
33
|
+
|
34
|
+
Conjugate.conjugate({language: 'spanish', verb: 'comprar', tense: :present, pronoun: :yo})
|
35
|
+
=> compro
|
36
|
+
|
37
|
+
Conjugate.conjugate({language: 'es', verb: 'comprar', tense: :present, pronoun: :yo})
|
38
|
+
=> compro
|
39
|
+
```
|
40
|
+
|
25
41
|
License
|
26
42
|
=======
|
27
43
|
|
data/Rakefile
ADDED
data/conjugate.gemspec
CHANGED
@@ -1,15 +1,20 @@
|
|
1
|
-
Gem::Specification.new do |
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
1
|
+
Gem::Specification.new do |gem|
|
2
|
+
gem.name = 'conjugate'
|
3
|
+
gem.version = '1.6.0'
|
4
|
+
gem.date = '2015-07-08'
|
5
|
+
gem.summary = "Conjugate Verbs using a version of the templates defined here http://en.wiktionary.org/wiki/Category:Spanish_verb_inflection-table_templates"
|
6
|
+
gem.description = gem.summary
|
7
|
+
gem.authors = ["Jeremy Geros"]
|
8
|
+
gem.email = 'jeremy@govocab.com'
|
9
|
+
gem.license = 'MIT'
|
10
|
+
|
11
|
+
gem.files = `git ls-files`.split("\n")
|
12
|
+
gem.require_paths = ["lib"]
|
13
|
+
|
14
|
+
gem.homepage = 'https://github.com/JeremyGeros/Conjugate'
|
15
|
+
|
16
|
+
gem.required_ruby_version = '>= 1.9.2'
|
17
|
+
|
18
|
+
gem.add_development_dependency 'rspec'
|
19
|
+
gem.add_development_dependency 'rake'
|
15
20
|
end
|
data/lib/conjugate/common.rb
CHANGED
@@ -1,26 +1,17 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
module Common
|
3
|
-
|
4
3
|
@@dividing_infinitive_regex = /\{{3}\d+\}{3}([[:alpha:]]+)/
|
5
|
-
|
4
|
+
|
6
5
|
def conjugate(opts ={})
|
7
|
-
@debug = opts[:debug].nil? ? false : true
|
8
|
-
|
9
6
|
template = template(opts)
|
10
|
-
debug(template)
|
11
7
|
tense = tense(opts[:tense])
|
12
|
-
|
13
8
|
verb = opts[:verb]
|
14
|
-
debug(verb)
|
15
|
-
|
16
9
|
infinitive = template[:infinitive].dup
|
17
|
-
|
18
|
-
|
10
|
+
|
19
11
|
verb_parts = divide_infinitive(infinitive, verb)
|
20
|
-
|
21
|
-
debug(tense)
|
12
|
+
|
22
13
|
return nil if (tense != :passe_compose) && (template[tense].nil? || template[tense][opts[:pronoun].to_sym].nil?)
|
23
|
-
|
14
|
+
|
24
15
|
conjugation_template = nil
|
25
16
|
|
26
17
|
if defined? conjugation_template_finder
|
@@ -28,11 +19,9 @@ module Common
|
|
28
19
|
else
|
29
20
|
conjugation_template = template[tense][opts[:pronoun].to_sym].dup
|
30
21
|
end
|
31
|
-
|
32
|
-
|
22
|
+
|
33
23
|
positions = conjugation_template.scan(/\{{3}(\d+)\}{3}/).flatten
|
34
|
-
|
35
|
-
|
24
|
+
|
36
25
|
positions.each do |p|
|
37
26
|
if opts[:highlight]
|
38
27
|
conjugation_template.gsub!(/\{{3}#{p}\}{3}/, "<span class='regular'>#{ verb_parts[p.to_i - 1] }</span>")
|
@@ -42,26 +31,25 @@ module Common
|
|
42
31
|
end
|
43
32
|
conjugation_template
|
44
33
|
end
|
45
|
-
|
34
|
+
|
46
35
|
# def conjugation_template_finder(template, tense, opts)
|
47
|
-
#
|
36
|
+
#
|
48
37
|
# end
|
49
|
-
|
38
|
+
|
50
39
|
def regular_ending(verb)
|
51
40
|
verb[-2..-1]
|
52
41
|
end
|
53
|
-
|
42
|
+
|
54
43
|
def tense(t)
|
55
44
|
(common_name(t) || :present).to_sym
|
56
45
|
end
|
57
|
-
|
46
|
+
|
58
47
|
def divide_infinitive(infinitive, verb)
|
59
48
|
inserts = infinitive.scan(@@dividing_infinitive_regex).flatten
|
60
|
-
|
61
|
-
|
49
|
+
|
62
50
|
word_parts = []
|
63
51
|
word_copy = verb.dup
|
64
|
-
|
52
|
+
|
65
53
|
inserts.each do |letters|
|
66
54
|
sub_word = ""
|
67
55
|
if letters.length <= 1
|
@@ -70,27 +58,11 @@ module Common
|
|
70
58
|
sub_word = word_copy.scan(/(.+)#{letters}/).flatten.first
|
71
59
|
end
|
72
60
|
sub_word ||= ""
|
73
|
-
|
61
|
+
|
74
62
|
word_parts << sub_word
|
75
|
-
word_copy = word_copy.gsub(/^#{sub_word}#{letters}/, '')
|
63
|
+
word_copy = word_copy.gsub(/^#{sub_word}#{letters}/, '')
|
76
64
|
end
|
77
65
|
word_parts << word_copy unless word_copy == ""
|
78
66
|
word_parts
|
79
67
|
end
|
80
|
-
|
81
|
-
def debug(info)
|
82
|
-
if @debug
|
83
|
-
puts info.inspect
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
# stubbed method individual languages override this to support multiple tenses names
|
88
|
-
def common_name(t)
|
89
|
-
return nil unless t
|
90
|
-
actual_tense = t.to_s.gsub(' ', '_').to_sym
|
91
|
-
@changable_names ||= {:past => :preterite, :past => :passe_compose, :passé_composé => :passe_compose}
|
92
|
-
actual_tense = @changable_names[actual_tense] || actual_tense
|
93
|
-
actual_tense
|
94
|
-
end
|
95
|
-
|
96
|
-
end
|
68
|
+
end
|
data/lib/conjugate/french.rb
CHANGED
@@ -5,28 +5,28 @@ require 'conjugate/common'
|
|
5
5
|
|
6
6
|
module Conjugate
|
7
7
|
module French
|
8
|
+
@@language = 'french'
|
9
|
+
|
8
10
|
extend Common
|
9
11
|
extend self
|
10
|
-
|
12
|
+
|
13
|
+
|
14
|
+
|
11
15
|
def generate_list_of_know_irregular_verbs
|
12
16
|
puts "- " + FrenchIrregularVerbs.keys.sort.join("\n- ")
|
13
17
|
end
|
14
|
-
|
18
|
+
|
15
19
|
def find_irregular(verb)
|
16
20
|
FrenchIrregularVerbs[verb.downcase]
|
17
21
|
end
|
18
|
-
|
22
|
+
|
19
23
|
def template(opts)
|
20
24
|
FrenchTemplates[(opts[:template] || find_irregular(opts[:verb]) || regular_ending(opts[:verb])).to_sym]
|
21
25
|
end
|
22
|
-
|
26
|
+
|
23
27
|
def conjugation_template_finder(template, tense, opts)
|
24
28
|
if tense == :passe_compose
|
25
29
|
if is_etre_verb(opts[:verb])
|
26
|
-
debug(FrenchTemplates[:être])
|
27
|
-
debug(FrenchTemplates[:être][:present])
|
28
|
-
debug(FrenchTemplates[:être][:present][opts[:pronoun].to_sym])
|
29
|
-
debug(template)
|
30
30
|
FrenchTemplates[:être][:present][opts[:pronoun].to_sym] + ' ' + template[:past_participle]
|
31
31
|
else
|
32
32
|
FrenchTemplates[:avoir][:present][opts[:pronoun].to_sym] + ' ' + template[:past_participle]
|
@@ -35,10 +35,19 @@ module Conjugate
|
|
35
35
|
template[tense][opts[:pronoun].to_sym]
|
36
36
|
end
|
37
37
|
end
|
38
|
-
|
38
|
+
|
39
39
|
def is_etre_verb(verb)
|
40
40
|
['monter', 'rester', 'sortir', 'venir', 'aller', 'naître', 'descendre', 'entrer', 'retourner', 'tomber', 'renter', 'arriver', 'mourir', 'partir', 'passer', 'décéder', 'redescendre', 'rentrer', 'remonter', 'repartir', 'renaître', 'retomber', 'ressortir', 'devenir', 'parvenir', 'revenir', 'survenir', 'provenir', 'intervenir', 'convenir', 'contrevenir', 'advenir'].include? verb.downcase
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
|
+
# stubbed method individual languages override this to support multiple tenses names
|
44
|
+
def common_name(t)
|
45
|
+
return nil unless t
|
46
|
+
actual_tense = t.to_s.gsub(' ', '_').to_sym
|
47
|
+
@changable_names ||= {:past => :passe_compose, :passé_composé => :passe_compose}
|
48
|
+
actual_tense = @changable_names[actual_tense] || actual_tense
|
49
|
+
actual_tense
|
50
|
+
end
|
51
|
+
|
43
52
|
end
|
44
|
-
end
|
53
|
+
end
|
@@ -8,7 +8,7 @@ FrenchIrregularVerbs = {
|
|
8
8
|
'dire' => :dire,
|
9
9
|
|
10
10
|
'avoir' => :avoir,
|
11
|
-
|
11
|
+
|
12
12
|
'lire' => :lire,
|
13
13
|
|
14
14
|
'aller' => :aller,
|
@@ -162,7 +162,7 @@ FrenchIrregularVerbs = {
|
|
162
162
|
'peser' => :e_er,
|
163
163
|
|
164
164
|
'promener' => :e_er,
|
165
|
-
|
165
|
+
|
166
166
|
'acheter' => :e_er,
|
167
167
|
|
168
168
|
'céder' => :é_er,
|
@@ -340,50 +340,50 @@ FrenchIrregularVerbs = {
|
|
340
340
|
'enjoindre' => :re_gn,
|
341
341
|
|
342
342
|
'rejoindre' => :re_gn,
|
343
|
-
|
343
|
+
|
344
344
|
'venir' => :venir,
|
345
|
-
|
345
|
+
|
346
346
|
'devenir' => :venir,
|
347
|
-
|
347
|
+
|
348
348
|
'advenir ' => :venir,
|
349
|
-
|
349
|
+
|
350
350
|
'contrevenir' => :venir,
|
351
|
-
|
351
|
+
|
352
352
|
'circonvenir' => :venir,
|
353
|
-
|
353
|
+
|
354
354
|
'convenir' => :venir,
|
355
|
-
|
355
|
+
|
356
356
|
'intervenir' => :venir,
|
357
|
-
|
358
|
-
'parvenir' => :venir,
|
359
|
-
|
357
|
+
|
358
|
+
'parvenir' => :venir,
|
359
|
+
|
360
360
|
'prévenir' => :venir,
|
361
|
-
|
361
|
+
|
362
362
|
'provenir' => :venir,
|
363
|
-
|
363
|
+
|
364
364
|
'revenir' => :venir,
|
365
|
-
|
365
|
+
|
366
366
|
'subvenir' => :venir,
|
367
|
-
|
367
|
+
|
368
368
|
'survenir' => :venir,
|
369
|
-
|
369
|
+
|
370
370
|
'revoir' => :revoir,
|
371
|
-
|
371
|
+
|
372
372
|
'dormir' => :dormir,
|
373
|
-
|
373
|
+
|
374
374
|
'appartenir' => :tenir,
|
375
|
-
|
375
|
+
|
376
376
|
'contenir' => :tenir,
|
377
|
-
|
378
|
-
'obtenir' => :tenir,
|
379
|
-
|
377
|
+
|
378
|
+
'obtenir' => :tenir,
|
379
|
+
|
380
380
|
'retenir' => :tenir,
|
381
|
-
|
381
|
+
|
382
382
|
'soutenir' => :tenir,
|
383
|
-
|
383
|
+
|
384
384
|
'tenir' => :tenir,
|
385
|
-
|
385
|
+
|
386
386
|
'devoir' => :devoir,
|
387
|
-
|
387
|
+
|
388
388
|
'valoir' => :valoir
|
389
389
|
}
|
data/lib/conjugate/spanish.rb
CHANGED
@@ -7,18 +7,28 @@ module Conjugate
|
|
7
7
|
module Spanish
|
8
8
|
extend self
|
9
9
|
extend Common
|
10
|
-
|
10
|
+
|
11
|
+
@@language = 'spanish'
|
12
|
+
|
11
13
|
def generate_list_of_know_irregular_verbs
|
12
14
|
puts "- " + SpanishIrregularVerbs.keys.sort.join("\n- ")
|
13
15
|
end
|
14
|
-
|
16
|
+
|
15
17
|
def find_irregular(verb)
|
16
18
|
SpanishIrregularVerbs[verb.downcase]
|
17
19
|
end
|
18
|
-
|
20
|
+
|
19
21
|
def template(opts)
|
20
22
|
SpanishTemplates[(opts[:template] || find_irregular(opts[:verb]) || regular_ending(opts[:verb])).to_sym]
|
21
23
|
end
|
22
|
-
|
24
|
+
|
25
|
+
def common_name(t)
|
26
|
+
return nil unless t
|
27
|
+
actual_tense = t.to_s.gsub(' ', '_').to_sym
|
28
|
+
@changable_names ||= {:past => :preterite}
|
29
|
+
actual_tense = @changable_names[actual_tense] || actual_tense
|
30
|
+
actual_tense
|
31
|
+
end
|
32
|
+
|
23
33
|
end
|
24
|
-
end
|
34
|
+
end
|