verbs 2.1.1 → 2.2.1
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 +7 -0
- data/.github/workflows/ruby.yml +33 -0
- data/README.rdoc +3 -2
- data/Rakefile +0 -3
- data/lib/verbs.rb +1 -1
- data/lib/verbs/conjugations.rb +13 -4
- data/lib/verbs/conjugator.rb +117 -28
- data/lib/verbs/verblike.rb +32 -32
- data/lib/verbs/version.rb +3 -3
- data/test/test_verbs.rb +53 -1
- data/verbs.gemspec +25 -24
- metadata +34 -32
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 46ce7e5cfe62a82289b8c7770e9bf9905106d776c960a309007b41782bf1b6fa
|
4
|
+
data.tar.gz: f92d5047b6743da58b2669744fd04e6400e913c2c7221b83f657b8f2f39cef25
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: aff4a218c912eaa3266f416e79b2de1420179e3c282ef30777d155a84560d83cade09d850a85ae546a8f52f714372cd7a1a2f4daa4140e52c68dd24da757221b
|
7
|
+
data.tar.gz: '0798baa0c945dad303ac4c8c569f7a7d30bd55faa50d40f09168983ed4868ea18d214f55dea71a6f81336bec04f64a0b1a6a58eee11bfec8e2d65b11322974fc'
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# This workflow uses actions that are not certified by GitHub.
|
2
|
+
# They are provided by a third-party and are governed by
|
3
|
+
# separate terms of service, privacy policy, and support
|
4
|
+
# documentation.
|
5
|
+
# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
|
6
|
+
# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
|
7
|
+
|
8
|
+
name: Ruby
|
9
|
+
|
10
|
+
on:
|
11
|
+
push:
|
12
|
+
branches: [ master ]
|
13
|
+
pull_request:
|
14
|
+
branches: [ master ]
|
15
|
+
|
16
|
+
jobs:
|
17
|
+
test:
|
18
|
+
|
19
|
+
runs-on: ubuntu-latest
|
20
|
+
|
21
|
+
steps:
|
22
|
+
- uses: actions/checkout@v2
|
23
|
+
- name: Set up Ruby
|
24
|
+
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
|
25
|
+
# change this to (see https://github.com/ruby/setup-ruby#versioning):
|
26
|
+
# uses: ruby/setup-ruby@v1
|
27
|
+
uses: ruby/setup-ruby@ec106b438a1ff6ff109590de34ddc62c540232e0
|
28
|
+
with:
|
29
|
+
ruby-version: 2.6
|
30
|
+
- name: Install dependencies
|
31
|
+
run: bundle install
|
32
|
+
- name: Run tests
|
33
|
+
run: bundle exec rake
|
data/README.rdoc
CHANGED
@@ -47,7 +47,7 @@ Set this to a string to prepend the conjugated verb with it. When set to tru
|
|
47
47
|
|
48
48
|
EXAMPLE TENSE ASPECT
|
49
49
|
|
50
|
-
I
|
50
|
+
I used to accept past habitual
|
51
51
|
I had accepted past perfect
|
52
52
|
I accepted past perfective
|
53
53
|
I was accepting past progressive
|
@@ -70,7 +70,8 @@ Set this to a string to prepend the conjugated verb with it. When set to tru
|
|
70
70
|
* {Lingua::Conjugate}[http://cpansearch.perl.org/src/RWG/Lingua-EN-Conjugate-0.308/lib/Lingua/EN/Conjugate.pm]
|
71
71
|
* {Pat Byrd and Tom McKlin}[http://www2.gsu.edu/~wwwesl/egw/pluralsv.htm]
|
72
72
|
* {Rick Harrison}[http://www.rickharrison.com/language/aspect.html]
|
73
|
+
* {Anatoli Makarevich}[https://github.com/makaroni4] for {#6}[https://github.com/rossmeissl/verbs/pull/6]
|
73
74
|
|
74
75
|
== Copyright
|
75
76
|
|
76
|
-
Copyright (c)
|
77
|
+
Copyright (c) 2012 Andy Rossmeissl. See LICENSE for details.
|
data/Rakefile
CHANGED
data/lib/verbs.rb
CHANGED
@@ -10,7 +10,7 @@ require 'verbs/improper_construction'
|
|
10
10
|
module Verbs
|
11
11
|
CONSONANTS = %w(b c d f g h j k l m n p q r s t v w x z)
|
12
12
|
CONSONANT_PATTERN = "[#{CONSONANTS.join}]"
|
13
|
-
DOUBLED_CONSONANTS = %w(b c d f g h j k l m n p q r s t
|
13
|
+
DOUBLED_CONSONANTS = %w(b c d f g h j k l m n p q r s t z)
|
14
14
|
DOUBLED_CONSONANT_PATTERN = "[#{DOUBLED_CONSONANTS.join}]"
|
15
15
|
VOWELS = %w(a e i o u y)
|
16
16
|
VOWEL_PATTERN = "[#{VOWELS.join}]"
|
data/lib/verbs/conjugations.rb
CHANGED
@@ -1,14 +1,16 @@
|
|
1
1
|
Verbs::Conjugator.conjugations do |conjugate|
|
2
2
|
|
3
|
-
conjugate.irregular :be do |verb| # copular
|
3
|
+
conjugate.irregular :be do |verb| # copular
|
4
4
|
verb.form :am, :tense => :present, :person => :first, :plurality => :singular
|
5
5
|
verb.form :is, :tense => :present, :person => :third, :plurality => :singular
|
6
6
|
verb.form :are, :tense => :present, :person => :second, :plurality => :singular
|
7
|
+
verb.form :are, :tense => :present, :person => :second, :plurality => :plural
|
7
8
|
verb.form :are, :tense => :present, :person => :first, :plurality => :plural
|
8
9
|
verb.form :are, :tense => :present, :person => :third, :plurality => :plural
|
9
10
|
verb.form :was, :tense => :past, :person => :first, :plurality => :singular
|
10
11
|
verb.form :was, :tense => :past, :person => :third, :plurality => :singular
|
11
12
|
verb.form :were, :tense => :past, :person => :second, :plurality => :singular
|
13
|
+
verb.form :were, :tense => :past, :person => :second, :plurality => :plural
|
12
14
|
verb.form :were, :tense => :past, :person => :first, :plurality => :plural
|
13
15
|
verb.form :were, :tense => :past, :person => :third, :plurality => :plural
|
14
16
|
verb.form :were, :tense => :past, :mood => :subjunctive
|
@@ -17,15 +19,17 @@ Verbs::Conjugator.conjugations do |conjugate|
|
|
17
19
|
verb.form :been, :tense => :past, :derivative => :participle
|
18
20
|
end
|
19
21
|
|
20
|
-
conjugate.irregular :have do |verb|
|
22
|
+
conjugate.irregular :have do |verb|
|
21
23
|
verb.form :have, :tense => :present, :person => :first, :plurality => :singular
|
22
24
|
verb.form :has, :tense => :present, :person => :third, :plurality => :singular
|
23
25
|
verb.form :have, :tense => :present, :person => :second, :plurality => :singular
|
26
|
+
verb.form :have, :tense => :present, :person => :second, :plurality => :plural
|
24
27
|
verb.form :have, :tense => :present, :person => :first, :plurality => :plural
|
25
28
|
verb.form :have, :tense => :present, :person => :third, :plurality => :plural
|
26
29
|
verb.form :had, :tense => :past, :person => :first, :plurality => :singular
|
27
30
|
verb.form :had, :tense => :past, :person => :third, :plurality => :singular
|
28
31
|
verb.form :had, :tense => :past, :person => :second, :plurality => :singular
|
32
|
+
verb.form :had, :tense => :past, :person => :second, :plurality => :plural
|
29
33
|
verb.form :had, :tense => :past, :person => :first, :plurality => :plural
|
30
34
|
verb.form :had, :tense => :past, :person => :third, :plurality => :plural
|
31
35
|
verb.form :having, :tense => :present, :derivative => :participle
|
@@ -128,6 +132,7 @@ Verbs::Conjugator.conjugations do |conjugate|
|
|
128
132
|
conjugate.irregular :put, :put, :put
|
129
133
|
conjugate.irregular :quit, :quit, :quit
|
130
134
|
conjugate.irregular :read, :read, :read
|
135
|
+
conjugate.irregular :reset, :reset, :reset
|
131
136
|
conjugate.irregular :rid, :rid, :rid
|
132
137
|
conjugate.irregular :ride, :rode, :ridden
|
133
138
|
conjugate.irregular :ring, :rang, :rung
|
@@ -181,7 +186,7 @@ Verbs::Conjugator.conjugations do |conjugate|
|
|
181
186
|
conjugate.irregular :strive, :strove, :striven
|
182
187
|
conjugate.irregular :swear, :swore, :sworn
|
183
188
|
conjugate.irregular :sweep, :swept, :swept
|
184
|
-
conjugate.irregular :swell, :swelled, :swelled
|
189
|
+
conjugate.irregular :swell, :swelled, :swelled
|
185
190
|
conjugate.irregular :swim, :swam, :swum
|
186
191
|
conjugate.irregular :swing, :swung, :swung
|
187
192
|
conjugate.irregular :take, :took, :taken
|
@@ -198,7 +203,7 @@ Verbs::Conjugator.conjugations do |conjugate|
|
|
198
203
|
conjugate.irregular :upset, :upset, :upset
|
199
204
|
conjugate.irregular :wake, :woke, :woken
|
200
205
|
conjugate.irregular :wear, :wore, :worn
|
201
|
-
conjugate.irregular :weave, :
|
206
|
+
conjugate.irregular :weave, :wove, :woven
|
202
207
|
conjugate.irregular :wed, :wed, :wed
|
203
208
|
conjugate.irregular :weep, :wept, :wept
|
204
209
|
conjugate.irregular :wind, :wound, :wound
|
@@ -250,6 +255,7 @@ Verbs::Conjugator.conjugations do |conjugate|
|
|
250
255
|
conjugate.single_terminal_consonant :cocker
|
251
256
|
conjugate.single_terminal_consonant :coedit
|
252
257
|
conjugate.single_terminal_consonant :cohabit
|
258
|
+
conjugate.single_terminal_consonant :color
|
253
259
|
conjugate.single_terminal_consonant :concenter
|
254
260
|
conjugate.single_terminal_consonant :corner
|
255
261
|
conjugate.single_terminal_consonant :cover
|
@@ -262,6 +268,7 @@ Verbs::Conjugator.conjugations do |conjugate|
|
|
262
268
|
conjugate.single_terminal_consonant :decipher
|
263
269
|
conjugate.single_terminal_consonant :deflower
|
264
270
|
conjugate.single_terminal_consonant :delimit
|
271
|
+
conjugate.single_terminal_consonant :deliver
|
265
272
|
conjugate.single_terminal_consonant :deposit
|
266
273
|
conjugate.single_terminal_consonant :develop
|
267
274
|
conjugate.single_terminal_consonant :differ
|
@@ -307,6 +314,7 @@ Verbs::Conjugator.conjugations do |conjugate|
|
|
307
314
|
conjugate.single_terminal_consonant :flounder
|
308
315
|
conjugate.single_terminal_consonant :fluster
|
309
316
|
conjugate.single_terminal_consonant :flutter
|
317
|
+
conjugate.single_terminal_consonant :follow
|
310
318
|
conjugate.single_terminal_consonant :foreshorten
|
311
319
|
conjugate.single_terminal_consonant :founder
|
312
320
|
conjugate.single_terminal_consonant :fritter
|
@@ -427,6 +435,7 @@ Verbs::Conjugator.conjugations do |conjugate|
|
|
427
435
|
conjugate.single_terminal_consonant :toughen
|
428
436
|
conjugate.single_terminal_consonant :tower
|
429
437
|
conjugate.single_terminal_consonant :transit
|
438
|
+
conjugate.single_terminal_consonant :trigger
|
430
439
|
conjugate.single_terminal_consonant :tucker
|
431
440
|
conjugate.single_terminal_consonant :unburden
|
432
441
|
conjugate.single_terminal_consonant :uncover
|
data/lib/verbs/conjugator.rb
CHANGED
@@ -1,31 +1,60 @@
|
|
1
|
+
# The program conjugates most common english verbs with the following option:
|
2
|
+
# * :tense => :past or :present or :future
|
3
|
+
# * :person => :first or :second or :third
|
4
|
+
# * :plurality => :singular or :plural
|
5
|
+
# * :aspect => :habitual or :perfect or :perfective or :progressive or :prospective
|
6
|
+
# * :mood => :indicative or :imperative or :subjunctive
|
7
|
+
# Respective defaults are :present, :third, :singular, :habitual, and :indicative
|
8
|
+
#
|
9
|
+
# Author:: Andy Rossmeissl
|
10
|
+
# Copyright:: Copyright (c) 2009 Andy Rossmeissl
|
11
|
+
# License:: Found in LICENSE file
|
12
|
+
|
1
13
|
module Verbs
|
2
14
|
module Conjugator
|
3
15
|
extend self
|
4
16
|
|
17
|
+
# This class determines the conjugations from the given options (or defaults)
|
18
|
+
# conjugations are then applied to the verb
|
5
19
|
class Conjugations
|
6
20
|
include Singleton
|
7
21
|
|
22
|
+
# permit outside functions access to these variables
|
8
23
|
attr_reader :irregulars, :single_terminal_consonants, :copulars
|
9
24
|
|
25
|
+
# Creates initial variables for class
|
10
26
|
def initialize
|
11
27
|
@irregulars, @single_terminal_consonants, @copulars = {}, [], {}
|
12
28
|
end
|
13
29
|
|
30
|
+
# Determines irregular verbs from the expression
|
31
|
+
# Params:
|
32
|
+
# * infinitive, the given verb
|
33
|
+
# * preterite, denote events that took place in the past
|
34
|
+
# * past_participle, form of a verb, ending in 'ed'
|
35
|
+
# * &blk, block of code that may be run
|
14
36
|
def irregular(infinitive, preterite = nil, past_participle = nil, &blk)
|
15
37
|
if block_given?
|
38
|
+
# create new Verb object with infinitive and &blk
|
16
39
|
irregular = ::Verbs::Verb.new infinitive, &blk
|
17
40
|
else
|
18
41
|
raise ArgumentError, "Standard irregular verbs must specify preterite and past participle forms" unless preterite and past_participle
|
42
|
+
# create new Verb object with infinitive, preterite and past_participle
|
19
43
|
irregular = ::Verbs::Verb.new infinitive, :preterite => preterite, :past_participle => past_participle
|
20
44
|
end
|
21
45
|
@irregulars[infinitive] = irregular
|
22
46
|
end
|
23
47
|
|
48
|
+
# Find single terminal consonant with the infinitive
|
49
|
+
# Params:
|
50
|
+
# * infinitive, the given verb
|
24
51
|
def single_terminal_consonant(infinitive)
|
25
52
|
@single_terminal_consonants << infinitive
|
26
53
|
end
|
27
54
|
end
|
28
55
|
|
56
|
+
# Runs a block of code if given in a class instance
|
57
|
+
# else only class instance is created
|
29
58
|
def conjugations
|
30
59
|
if block_given?
|
31
60
|
yield Conjugations.instance
|
@@ -34,28 +63,40 @@ module Verbs
|
|
34
63
|
end
|
35
64
|
end
|
36
65
|
|
66
|
+
# Using options given, determine the conjugation and the subject
|
67
|
+
# Return the subject, if there is one, and the proper conjugation
|
68
|
+
# Params:
|
69
|
+
# * infinitive, the given verb
|
70
|
+
# * options, the list of parameters to alter the conjugation
|
37
71
|
def conjugate(infinitive, options = {})
|
72
|
+
infinitive = infinitive.dup if infinitive.is_a?(String)
|
73
|
+
|
74
|
+
# set all options according to parameter, or the default
|
38
75
|
tense = options[:tense] || :present # present, past, future
|
39
76
|
person = options[:person] || :third # first, second, third
|
40
77
|
plurality = options[:plurality] || :singular # singular, plural
|
41
78
|
diathesis = options[:diathesis] || :active # active, passive
|
42
79
|
mood = options[:mood] || :indicative # imperative, subjunctive
|
43
80
|
aspect = options[:aspect] || :habitual # perfective, habitual, progressive, perfect, prospective
|
44
|
-
|
45
|
-
check_for_improper_constructions(tense, person, mood)
|
46
|
-
|
47
|
-
form = form_for(tense, aspect)
|
48
81
|
|
82
|
+
check_for_improper_constructions(tense, person, mood) # find incompatabilities
|
83
|
+
form = form_for(tense, aspect) # find form array based on tense and aspect
|
84
|
+
|
85
|
+
# map form array to conjugation array, applying infinitive and options to the array
|
49
86
|
conjugation = form.map { |e| resolve e, infinitive, tense, person, plurality, mood }.join(' ').strip
|
50
87
|
|
51
|
-
if options[:subject]
|
52
|
-
actor = options.delete(:subject)
|
88
|
+
if options[:subject] # When options includes a subject,
|
89
|
+
actor = options.delete(:subject) # remove from options and make subject humanized
|
53
90
|
actor = subject(options).humanize if actor.is_a?(TrueClass)
|
54
91
|
end
|
55
92
|
|
56
93
|
"#{actor} #{conjugation}".strip
|
57
94
|
end
|
58
95
|
|
96
|
+
# Finds the pronoun associated with the subject for the conjugation
|
97
|
+
# Returns the pronoun
|
98
|
+
# Params:
|
99
|
+
# * options, list of options given to determine conjugation
|
59
100
|
def subject(options)
|
60
101
|
case [options[:person], options[:plurality]]
|
61
102
|
when [:first, :singular]
|
@@ -73,6 +114,14 @@ module Verbs
|
|
73
114
|
|
74
115
|
private
|
75
116
|
|
117
|
+
# Resolves conflictions between options of the conjugation
|
118
|
+
# Params:
|
119
|
+
# * element,
|
120
|
+
# * infinitive, the given verb
|
121
|
+
# * tense, an option given by the user
|
122
|
+
# * person, an option given by the user
|
123
|
+
# * plurality, an option given by the user
|
124
|
+
# * mood, an option given by the user
|
76
125
|
def resolve(element, infinitive, tense, person, plurality, mood)
|
77
126
|
case element
|
78
127
|
when String
|
@@ -86,6 +135,13 @@ module Verbs
|
|
86
135
|
end
|
87
136
|
end
|
88
137
|
|
138
|
+
# Change the form to express the proper grammatical function
|
139
|
+
# Params:
|
140
|
+
# * infinitive,the given verb
|
141
|
+
# * inflection, form to be changed
|
142
|
+
# * person, an option given by the user
|
143
|
+
# * plurality, an option given by the user
|
144
|
+
# * mood, an option given by the user
|
89
145
|
def inflect(infinitive, inflection, person, plurality, mood)
|
90
146
|
send(*([inflection, infinitive, person, plurality, mood][0, method(inflection).arity + 1]))
|
91
147
|
end
|
@@ -100,6 +156,12 @@ module Verbs
|
|
100
156
|
end
|
101
157
|
end
|
102
158
|
|
159
|
+
# Conjugate verb to past with relevent options determining outcome
|
160
|
+
# Params:
|
161
|
+
# * infinitive, the given verb
|
162
|
+
# * person, the subject of the verb
|
163
|
+
# * plurality, an option given by the user
|
164
|
+
# * mood, an option given by the user
|
103
165
|
def past(infinitive, person, plurality, mood)
|
104
166
|
if verb = conjugations.irregulars[infinitive]
|
105
167
|
conjugate_irregular(verb, :tense => :past, :person => person, :plurality => plurality, :mood => mood)
|
@@ -108,20 +170,28 @@ module Verbs
|
|
108
170
|
end
|
109
171
|
end
|
110
172
|
|
173
|
+
# Forming verb to apply present tense endings
|
174
|
+
# Params:
|
175
|
+
# * infinitive, the given verb
|
111
176
|
def present_participle(infinitive)
|
112
|
-
if infinitive.to_s.match(/#{CONSONANT_PATTERN}#{VOWEL_PATTERN}#{CONSONANT_PATTERN}$/) and !conjugations.single_terminal_consonants.include?(infinitive)
|
177
|
+
if infinitive.to_s.match(/#{CONSONANT_PATTERN}#{VOWEL_PATTERN}#{CONSONANT_PATTERN}$/) and !conjugations.single_terminal_consonants.include?(infinitive.to_sym)
|
113
178
|
present_participle_with_doubled_terminal_consonant_for infinitive
|
114
179
|
elsif infinitive.to_s.match(/c$/)
|
115
180
|
infinitive.to_s.concat('king').to_sym
|
116
|
-
elsif infinitive.to_s.match(/ye$/) or infinitive.to_s.match(/oe$/) or infinitive.to_s.match(/nge$/) or infinitive.to_s.match(/ee$/)
|
181
|
+
elsif infinitive.to_s.match(/^be$/) or infinitive.to_s.match(/ye$/) or infinitive.to_s.match(/oe$/) or infinitive.to_s.match(/nge$/) or infinitive.to_s.match(/ee$/)
|
117
182
|
infinitive.to_s.concat('ing').to_sym
|
118
183
|
elsif infinitive.to_s.match(/ie$/)
|
119
184
|
infinitive.to_s[0..-2].concat('ying').to_sym
|
185
|
+
elsif infinitive.to_s.match(/e$/)
|
186
|
+
infinitive.to_s[0..-2].concat('ing').to_sym
|
120
187
|
else
|
121
188
|
infinitive.to_s[0..-1].concat('ing').to_sym
|
122
189
|
end
|
123
190
|
end
|
124
191
|
|
192
|
+
# Forming verb to apply past tense endings
|
193
|
+
# Params:
|
194
|
+
# * infinitive, the given verb
|
125
195
|
def past_participle(infinitive)
|
126
196
|
if verb = conjugations.irregulars[infinitive]
|
127
197
|
conjugate_irregular(verb, :tense => :past, :derivative => :participle)
|
@@ -130,6 +200,10 @@ module Verbs
|
|
130
200
|
end
|
131
201
|
end
|
132
202
|
|
203
|
+
#
|
204
|
+
# Params:
|
205
|
+
# * verb,
|
206
|
+
# * options,
|
133
207
|
def conjugate_irregular(verb, options)
|
134
208
|
return verb[options] if verb[options]
|
135
209
|
|
@@ -149,30 +223,30 @@ module Verbs
|
|
149
223
|
end
|
150
224
|
end
|
151
225
|
|
226
|
+
# Apply thir person rules to the verb for the conjugation
|
227
|
+
# Params:
|
228
|
+
# * verb, apply proper third person rules to this
|
152
229
|
def present_third_person_singular_form_for(verb)
|
153
|
-
infinitive =
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
infinitive
|
161
|
-
elsif infinitive.to_s.match(/[szx]$/) or infinitive.to_s.match(/[sc]h$/)
|
162
|
-
infinitive.to_s.concat('es').to_sym
|
230
|
+
infinitive = verb.is_a?(Verb) ? verb.infinitive.to_s : verb.to_s
|
231
|
+
|
232
|
+
if infinitive =~ /[a-z&&#{CONSONANT_PATTERN}]y$/i
|
233
|
+
infinitive[0..-2] + 'ies'
|
234
|
+
elsif infinitive =~ /(ss|sh|t?ch|zz|x|#{CONSONANT_PATTERN}o)$/i
|
235
|
+
infinitive + 'es'
|
236
|
+
elsif infinitive =~ /[^s]s$/i
|
237
|
+
infinitive + 'ses'
|
163
238
|
else
|
164
|
-
infinitive
|
239
|
+
infinitive + 's'
|
165
240
|
end
|
166
241
|
end
|
167
242
|
|
243
|
+
# Apply the regular past tense to a given verb for the conjugation
|
244
|
+
# Params:
|
245
|
+
# * verb, apply regular past tense rules to this
|
168
246
|
def regular_preterite_for(verb)
|
169
|
-
infinitive =
|
170
|
-
|
171
|
-
|
172
|
-
when String, Symbol
|
173
|
-
verb.to_sym
|
174
|
-
end
|
175
|
-
if verb.to_s.match(/#{CONSONANT_PATTERN}#{VOWEL_PATTERN}#{DOUBLED_CONSONANT_PATTERN}$/) and !conjugations.single_terminal_consonants.include?(verb)
|
247
|
+
infinitive = verb.is_a?(Verb) ? verb.infinitive.to_s : verb.to_s
|
248
|
+
|
249
|
+
if verb.to_s.match(/#{CONSONANT_PATTERN}#{VOWEL_PATTERN}#{DOUBLED_CONSONANT_PATTERN}$/) and !conjugations.single_terminal_consonants.include?(verb.to_sym)
|
176
250
|
regular_preterite_with_doubled_terminal_consonant_for verb
|
177
251
|
elsif verb.to_s.match(/#{CONSONANT_PATTERN}e$/) or verb.to_s.match(/ye$/) or verb.to_s.match(/oe$/) or verb.to_s.match(/nge$/) or verb.to_s.match(/ie$/) or verb.to_s.match(/ee$/)
|
178
252
|
infinitive.to_s.concat('d').to_sym
|
@@ -183,14 +257,24 @@ module Verbs
|
|
183
257
|
end
|
184
258
|
end
|
185
259
|
|
260
|
+
# Apply proper rules to consonant endings
|
261
|
+
# Params:
|
262
|
+
# * verb, apply doule consonant to this
|
186
263
|
def regular_preterite_with_doubled_terminal_consonant_for(verb)
|
187
264
|
regular_preterite_for verb.to_s.concat(verb.to_s[-1,1]).to_sym
|
188
265
|
end
|
189
266
|
|
267
|
+
# Apply proper rules to consonant endings
|
268
|
+
# Params:
|
269
|
+
# * verb, apply doule consonant to this
|
190
270
|
def present_participle_with_doubled_terminal_consonant_for(verb)
|
191
271
|
present_participle verb.to_s.concat(verb.to_s[-1,1]).to_sym
|
192
272
|
end
|
193
273
|
|
274
|
+
# Add appropriate aspects to the tense of the conjugation
|
275
|
+
# Params:
|
276
|
+
# * tense, an option given by the user
|
277
|
+
# * aspect, an option given by the user
|
194
278
|
def form_for(tense, aspect)
|
195
279
|
form = []
|
196
280
|
if tense == :future
|
@@ -201,7 +285,7 @@ module Verbs
|
|
201
285
|
form.concat ['be', :present_participle] if aspect == :progressive
|
202
286
|
form.concat ['be about to', :infinitive] if aspect == :prospective
|
203
287
|
else
|
204
|
-
form.concat ['
|
288
|
+
form.concat ['used to', :infinitive] if [tense, aspect] == [:past, :habitual]
|
205
289
|
form.concat [:have, :past_participle] if aspect == :perfect
|
206
290
|
form << :past if [tense, aspect] == [:past, :perfective]
|
207
291
|
form.concat [:be, :present_participle] if aspect == :progressive
|
@@ -211,7 +295,12 @@ module Verbs
|
|
211
295
|
end
|
212
296
|
form
|
213
297
|
end
|
214
|
-
|
298
|
+
|
299
|
+
# Confirm an imperative mood contains the present tense and second person
|
300
|
+
# Params:
|
301
|
+
# * tense, an option given by the user
|
302
|
+
# * person, how the conjugation refers to the subject
|
303
|
+
# * mood, an option given by the user
|
215
304
|
def check_for_improper_constructions(tense, person, mood)
|
216
305
|
if mood == :imperative and not (person == :second and tense == :present)
|
217
306
|
raise Verbs::ImproperConstruction, 'The imperative mood requires present tense and second person'
|
data/lib/verbs/verblike.rb
CHANGED
@@ -1,32 +1,32 @@
|
|
1
|
-
module Verbs
|
2
|
-
module Verblike
|
3
|
-
class Wrapper
|
4
|
-
def initialize(base)
|
5
|
-
@base = base
|
6
|
-
end
|
7
|
-
|
8
|
-
def conjugate(options)
|
9
|
-
words = @base.to_s.split(' ')
|
10
|
-
words.shift if words.first.downcase == 'to'
|
11
|
-
infinitive = words.shift.to_sym
|
12
|
-
conjugation = ::Verbs::Conjugator.conjugate infinitive, options
|
13
|
-
conjugated = words.unshift(conjugation.to_s).join(' ')
|
14
|
-
@base.is_a?(Symbol) ? conjugated.to_sym : conjugated
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
module Access
|
19
|
-
def verb
|
20
|
-
::Verbs::Verblike::Wrapper.new self
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
class String
|
27
|
-
include ::Verbs::Verblike::Access
|
28
|
-
end
|
29
|
-
|
30
|
-
class Symbol
|
31
|
-
include ::Verbs::Verblike::Access
|
32
|
-
end
|
1
|
+
module Verbs
|
2
|
+
module Verblike
|
3
|
+
class Wrapper
|
4
|
+
def initialize(base)
|
5
|
+
@base = base
|
6
|
+
end
|
7
|
+
|
8
|
+
def conjugate(options)
|
9
|
+
words = @base.to_s.split(' ')
|
10
|
+
words.shift if words.first.downcase == 'to'
|
11
|
+
infinitive = words.shift.to_sym
|
12
|
+
conjugation = ::Verbs::Conjugator.conjugate infinitive, options
|
13
|
+
conjugated = words.unshift(conjugation.to_s).join(' ')
|
14
|
+
@base.is_a?(Symbol) ? conjugated.to_sym : conjugated
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
module Access
|
19
|
+
def verb
|
20
|
+
::Verbs::Verblike::Wrapper.new self
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class String
|
27
|
+
include ::Verbs::Verblike::Access
|
28
|
+
end
|
29
|
+
|
30
|
+
class Symbol
|
31
|
+
include ::Verbs::Verblike::Access
|
32
|
+
end
|
data/lib/verbs/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
module Verbs
|
2
|
-
VERSION = "2.
|
3
|
-
end
|
1
|
+
module Verbs
|
2
|
+
VERSION = "2.2.1"
|
3
|
+
end
|
data/test/test_verbs.rb
CHANGED
@@ -2,16 +2,29 @@ require 'helper'
|
|
2
2
|
|
3
3
|
class TestVerbs < Test::Unit::TestCase
|
4
4
|
def test_copular_conjugation
|
5
|
+
# present habitual
|
5
6
|
assert_equal 'am', Verbs::Conjugator.conjugate(:be, :tense => :present, :person => :first, :plurality => :singular, :aspect => :habitual)
|
6
7
|
assert_equal 'are', Verbs::Conjugator.conjugate(:be, :tense => :present, :person => :second, :plurality => :singular, :aspect => :habitual)
|
7
8
|
assert_equal 'is', Verbs::Conjugator.conjugate(:be, :tense => :present, :person => :third, :plurality => :singular, :aspect => :habitual)
|
8
9
|
assert_equal 'are', Verbs::Conjugator.conjugate(:be, :tense => :present, :person => :first, :plurality => :plural, :aspect => :habitual)
|
9
10
|
assert_equal 'are', Verbs::Conjugator.conjugate(:be, :tense => :present, :person => :third, :plurality => :plural, :aspect => :habitual)
|
11
|
+
|
12
|
+
# past habitual
|
13
|
+
assert_equal 'used to be', Verbs::Conjugator.conjugate(:be, :tense => :past, :person => :first, :plurality => :singular, :aspect => :habitual)
|
14
|
+
assert_equal 'used to be', Verbs::Conjugator.conjugate(:be, :tense => :past, :person => :second, :plurality => :singular, :aspect => :habitual)
|
15
|
+
assert_equal 'used to be', Verbs::Conjugator.conjugate(:be, :tense => :past, :person => :third, :plurality => :singular, :aspect => :habitual)
|
16
|
+
assert_equal 'used to be', Verbs::Conjugator.conjugate(:be, :tense => :past, :person => :first, :plurality => :plural, :aspect => :habitual)
|
17
|
+
assert_equal 'used to be', Verbs::Conjugator.conjugate(:be, :tense => :past, :person => :third, :plurality => :plural, :aspect => :habitual)
|
18
|
+
|
10
19
|
assert_equal 'was', Verbs::Conjugator.conjugate(:be, :tense => :past, :person => :first, :plurality => :singular, :aspect => :perfective)
|
11
20
|
assert_equal 'were', Verbs::Conjugator.conjugate(:be, :tense => :past, :person => :second, :plurality => :singular, :aspect => :perfective)
|
12
21
|
assert_equal 'was', Verbs::Conjugator.conjugate(:be, :tense => :past, :person => :third, :plurality => :singular, :aspect => :perfective)
|
13
22
|
assert_equal 'were', Verbs::Conjugator.conjugate(:be, :tense => :past, :person => :first, :plurality => :plural, :aspect => :perfective)
|
14
23
|
assert_equal 'were', Verbs::Conjugator.conjugate(:be, :tense => :past, :person => :third, :plurality => :plural, :aspect => :perfective)
|
24
|
+
|
25
|
+
assert_equal 'was being', Verbs::Conjugator.conjugate(:be, :tense => :past, :person => :third, :aspect => :progressive)
|
26
|
+
assert_equal 'is being', Verbs::Conjugator.conjugate(:be, :tense => :present, :person => :third, :aspect => :progressive)
|
27
|
+
assert_equal 'will be being', Verbs::Conjugator.conjugate(:be, :tense => :future, :person => :third, :aspect => :progressive)
|
15
28
|
end
|
16
29
|
def test_irregular_conjugation
|
17
30
|
assert_equal 'break', Verbs::Conjugator.conjugate(:break, :tense => :present, :person => :first, :plurality => :singular, :aspect => :habitual)
|
@@ -53,6 +66,10 @@ class TestVerbs < Test::Unit::TestCase
|
|
53
66
|
end
|
54
67
|
def test_regular_conjugation_with_irregular_terminal_consonant
|
55
68
|
assert_equal 'abandoned', Verbs::Conjugator.conjugate(:abandon, :tense => :past, :person => :first, :plurality => :singular, :aspect => :perfective)
|
69
|
+
assert_equal 'followed', Verbs::Conjugator.conjugate(:follow, :tense => :past, :person => :first, :plurality => :singular, :aspect => :perfective)
|
70
|
+
assert_equal 'triggered', Verbs::Conjugator.conjugate(:trigger, :tense => :past, :person => :first, :plurality => :singular, :aspect => :perfective)
|
71
|
+
assert_equal 'colored', Verbs::Conjugator.conjugate(:color, :tense => :past, :person => :first, :plurality => :singular, :aspect => :perfective)
|
72
|
+
assert_equal 'delivered', Verbs::Conjugator.conjugate(:deliver, :tense => :past, :person => :first, :plurality => :singular, :aspect => :perfective)
|
56
73
|
end
|
57
74
|
def test_regular_conjugation_with_ean_suffix
|
58
75
|
assert_equal 'cleaned', Verbs::Conjugator.conjugate(:clean, :tense => :past, :person => :first, :plurality => :singular, :aspect => :perfective)
|
@@ -65,6 +82,7 @@ class TestVerbs < Test::Unit::TestCase
|
|
65
82
|
end
|
66
83
|
def test_regular_conjugation_with_terminal_e
|
67
84
|
assert_equal 'created', Verbs::Conjugator.conjugate(:create, :tense => :past, :person => :first, :plurality => :singular, :aspect => :perfective)
|
85
|
+
assert_equal 'was hiding', Verbs::Conjugator.conjugate(:hide, :tense => :past, :person => :first, :plurality => :singular, :aspect => :progressive)
|
68
86
|
end
|
69
87
|
def test_regular_conjugation_with_unusual_terminal_e
|
70
88
|
assert_equal 'dyed', Verbs::Conjugator.conjugate(:dye, :tense => :past, :person => :first, :plurality => :singular, :aspect => :perfective)
|
@@ -75,6 +93,7 @@ class TestVerbs < Test::Unit::TestCase
|
|
75
93
|
end
|
76
94
|
def test_conjugation_with_terminal_sibilance
|
77
95
|
assert_equal 'passes', Verbs::Conjugator.conjugate(:pass, :tense => :present, :person => :third, :plurality => :singular, :aspect => :habitual)
|
96
|
+
assert_equal 'focusses', Verbs::Conjugator.conjugate(:focus, :tense => :present, :person => :third, :plurality => :singular, :aspect => :habitual)
|
78
97
|
assert_equal 'buzzes', Verbs::Conjugator.conjugate(:buzz, :tense => :present, :person => :third, :plurality => :singular, :aspect => :habitual)
|
79
98
|
assert_equal 'coaxes', Verbs::Conjugator.conjugate(:coax, :tense => :present, :person => :third, :plurality => :singular, :aspect => :habitual)
|
80
99
|
assert_equal 'washes', Verbs::Conjugator.conjugate(:wash, :tense => :present, :person => :third, :plurality => :singular, :aspect => :habitual)
|
@@ -93,7 +112,7 @@ class TestVerbs < Test::Unit::TestCase
|
|
93
112
|
end
|
94
113
|
def test_aspects
|
95
114
|
Verbs::Conjugator.with_options :person => :first, :plurality => :singular, :subject => true do |standard|
|
96
|
-
assert_equal 'I
|
115
|
+
assert_equal 'I used to accept', standard.conjugate(:accept, :tense => :past, :aspect => :habitual)
|
97
116
|
assert_equal 'I had accepted', standard.conjugate(:accept, :tense => :past, :aspect => :perfect)
|
98
117
|
assert_equal 'I accepted', standard.conjugate(:accept, :tense => :past, :aspect => :perfective)
|
99
118
|
assert_equal 'I was accepting', standard.conjugate(:accept, :tense => :past, :aspect => :progressive)
|
@@ -122,4 +141,37 @@ class TestVerbs < Test::Unit::TestCase
|
|
122
141
|
Verbs::Conjugator.conjugate(:accept, :mood => :imperative)
|
123
142
|
end
|
124
143
|
end
|
144
|
+
|
145
|
+
def test_s_forms
|
146
|
+
Verbs::Conjugator.with_options :person => :third, :tense => :present do |standard|
|
147
|
+
assert_equal 'does', standard.conjugate('do')
|
148
|
+
assert_equal 'flies', standard.conjugate('fly')
|
149
|
+
assert_equal 'assesses', standard.conjugate('assess')
|
150
|
+
assert_equal 'blushes', standard.conjugate('blush')
|
151
|
+
assert_equal 'catches', standard.conjugate('catch')
|
152
|
+
assert_equal 'fizzes', standard.conjugate('fizz')
|
153
|
+
assert_equal 'relaxes', standard.conjugate('relax')
|
154
|
+
assert_equal 'bakes', standard.conjugate('bake')
|
155
|
+
assert_equal 'calls', standard.conjugate('call')
|
156
|
+
assert_equal 'dies', standard.conjugate('die')
|
157
|
+
assert_equal 'glues', standard.conjugate('glue')
|
158
|
+
assert_equal 'moos', standard.conjugate('moo')
|
159
|
+
assert_equal 'changes', standard.conjugate('change')
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
def test_immutability
|
164
|
+
verb = 'like'
|
165
|
+
Verbs::Conjugator.conjugate(verb, :tense => :past, :aspect => :perfective)
|
166
|
+
assert_equal 'like', verb
|
167
|
+
end
|
168
|
+
|
169
|
+
def test_second_person_plural_forms
|
170
|
+
Verbs::Conjugator.with_options :person => :second, :plurality => :plural, :subject => true do |standard|
|
171
|
+
assert_equal 'You had accepted', standard.conjugate(:accept, :tense => :past, :aspect => :perfect)
|
172
|
+
assert_equal 'You accepted', standard.conjugate(:accept, :tense => :past, :aspect => :perfective)
|
173
|
+
assert_equal 'You were accepting', standard.conjugate(:accept, :tense => :past, :aspect => :progressive)
|
174
|
+
assert_equal 'You were about to accept', standard.conjugate(:accept, :tense => :past, :aspect => :prospective)
|
175
|
+
end
|
176
|
+
end
|
125
177
|
end
|
data/verbs.gemspec
CHANGED
@@ -1,24 +1,25 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
$:.push File.expand_path("../lib", __FILE__)
|
3
|
-
require "verbs/version"
|
4
|
-
|
5
|
-
Gem::Specification.new do |s|
|
6
|
-
s.name = 'verbs'
|
7
|
-
s.version = Verbs::VERSION
|
8
|
-
s.platform = Gem::Platform::RUBY
|
9
|
-
s.authors = ["Andy Rossmeissl"]
|
10
|
-
s.description = %q{Conjugates most common english verbs for all persons, tenses, standard aspects, and modern moods (with active diathesis). Standard and exceptional spelling rules are obeyed.}
|
11
|
-
s.summary = %q{English verb conjugation in Ruby}
|
12
|
-
s.email = %q{andy@rossmeissl.net}
|
13
|
-
s.homepage = %q{http://github.com/rossmeissl/verbs}
|
14
|
-
|
15
|
-
s.files = `git ls-files`.split("\n")
|
16
|
-
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
|
-
s.require_paths = ["lib"]
|
19
|
-
|
20
|
-
s.add_development_dependency '
|
21
|
-
s.
|
22
|
-
s.add_dependency '
|
23
|
-
|
24
|
-
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "verbs/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = 'verbs'
|
7
|
+
s.version = Verbs::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Andy Rossmeissl"]
|
10
|
+
s.description = %q{Conjugates most common english verbs for all persons, tenses, standard aspects, and modern moods (with active diathesis). Standard and exceptional spelling rules are obeyed.}
|
11
|
+
s.summary = %q{English verb conjugation in Ruby}
|
12
|
+
s.email = %q{andy@rossmeissl.net}
|
13
|
+
s.homepage = %q{http://github.com/rossmeissl/verbs}
|
14
|
+
|
15
|
+
s.files = `git ls-files`.split("\n")
|
16
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
|
+
s.require_paths = ["lib"]
|
19
|
+
|
20
|
+
s.add_development_dependency 'test-unit'
|
21
|
+
s.add_development_dependency 'rake'
|
22
|
+
s.add_dependency 'activesupport', '>= 2.3.4'
|
23
|
+
s.add_dependency 'i18n'
|
24
|
+
end
|
25
|
+
|
metadata
CHANGED
@@ -1,62 +1,69 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: verbs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
5
|
-
prerelease:
|
4
|
+
version: 2.2.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Andy Rossmeissl
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2020-05-25 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
14
|
+
name: test-unit
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
28
39
|
- !ruby/object:Gem::Version
|
29
40
|
version: '0'
|
30
41
|
- !ruby/object:Gem::Dependency
|
31
42
|
name: activesupport
|
32
43
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
44
|
requirements:
|
35
|
-
- -
|
45
|
+
- - ">="
|
36
46
|
- !ruby/object:Gem::Version
|
37
47
|
version: 2.3.4
|
38
48
|
type: :runtime
|
39
49
|
prerelease: false
|
40
50
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
51
|
requirements:
|
43
|
-
- -
|
52
|
+
- - ">="
|
44
53
|
- !ruby/object:Gem::Version
|
45
54
|
version: 2.3.4
|
46
55
|
- !ruby/object:Gem::Dependency
|
47
56
|
name: i18n
|
48
57
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
58
|
requirements:
|
51
|
-
- -
|
59
|
+
- - ">="
|
52
60
|
- !ruby/object:Gem::Version
|
53
61
|
version: '0'
|
54
62
|
type: :runtime
|
55
63
|
prerelease: false
|
56
64
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
65
|
requirements:
|
59
|
-
- -
|
66
|
+
- - ">="
|
60
67
|
- !ruby/object:Gem::Version
|
61
68
|
version: '0'
|
62
69
|
description: Conjugates most common english verbs for all persons, tenses, standard
|
@@ -67,8 +74,9 @@ executables: []
|
|
67
74
|
extensions: []
|
68
75
|
extra_rdoc_files: []
|
69
76
|
files:
|
70
|
-
- .document
|
71
|
-
- .
|
77
|
+
- ".document"
|
78
|
+
- ".github/workflows/ruby.yml"
|
79
|
+
- ".gitignore"
|
72
80
|
- Gemfile
|
73
81
|
- LICENSE
|
74
82
|
- README.rdoc
|
@@ -86,32 +94,26 @@ files:
|
|
86
94
|
- verbs.gemspec
|
87
95
|
homepage: http://github.com/rossmeissl/verbs
|
88
96
|
licenses: []
|
97
|
+
metadata: {}
|
89
98
|
post_install_message:
|
90
99
|
rdoc_options: []
|
91
100
|
require_paths:
|
92
101
|
- lib
|
93
102
|
required_ruby_version: !ruby/object:Gem::Requirement
|
94
|
-
none: false
|
95
103
|
requirements:
|
96
|
-
- -
|
104
|
+
- - ">="
|
97
105
|
- !ruby/object:Gem::Version
|
98
106
|
version: '0'
|
99
|
-
segments:
|
100
|
-
- 0
|
101
|
-
hash: 856194337
|
102
107
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
103
|
-
none: false
|
104
108
|
requirements:
|
105
|
-
- -
|
109
|
+
- - ">="
|
106
110
|
- !ruby/object:Gem::Version
|
107
111
|
version: '0'
|
108
|
-
segments:
|
109
|
-
- 0
|
110
|
-
hash: 856194337
|
111
112
|
requirements: []
|
112
|
-
|
113
|
-
rubygems_version: 1.8.24
|
113
|
+
rubygems_version: 3.0.1
|
114
114
|
signing_key:
|
115
|
-
specification_version:
|
115
|
+
specification_version: 4
|
116
116
|
summary: English verb conjugation in Ruby
|
117
|
-
test_files:
|
117
|
+
test_files:
|
118
|
+
- test/helper.rb
|
119
|
+
- test/test_verbs.rb
|