poefy 0.5.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.
@@ -0,0 +1,464 @@
1
+ #!/usr/bin/env ruby
2
+ # Encoding: UTF-8
3
+
4
+ ################################################################################
5
+
6
+ describe Poefy::PoefyGen do
7
+
8
+ before(:all) do
9
+ @root = File.expand_path('../../', __FILE__)
10
+ end
11
+ after(:all) do
12
+ db_file = "#{@root}/data/spec_test_tiny.db"
13
+ File.delete(db_file) if File.exists?(db_file)
14
+ end
15
+
16
+ describe "using tiny dataset spec_test_tiny.db / spec_test_tiny.txt" do
17
+
18
+ file_txt = "spec_test_tiny.txt"
19
+ file_db = "spec_test_tiny.db"
20
+
21
+ before(:each) do
22
+ @poefy = Poefy::PoefyGen.new(file_db, { proper: false })
23
+ end
24
+ after(:each) do
25
+ @poefy.close
26
+ end
27
+ it "initialised object not nil" do
28
+ expect(@poefy).to_not be_nil
29
+ end
30
+
31
+ describe "#make_database( '#{@root}/data/#{file_txt}', true )" do
32
+ it "should make the database '#{@root}/data/#{file_db}" do
33
+ db_file = "#{@root}/data/#{file_db}"
34
+ File.delete(db_file) if File.exists?(db_file)
35
+ @poefy.make_database "#{@root}/data/#{file_txt}", true
36
+ expect(@poefy.db.exists?).to be true
37
+ expect(File.exists?(db_file)).to be true
38
+ end
39
+ end
40
+
41
+ describe ":rhyme option" do
42
+
43
+ describe "should return nil" do
44
+ it "({ })" do
45
+ poem = @poefy.poem
46
+ expect(poem).to be_nil
47
+ end
48
+ it "({ rhyme: nil })" do
49
+ poem = @poefy.poem ({ rhyme: nil })
50
+ expect(poem).to be_nil
51
+ end
52
+ it "({ rhyme: ' ' })" do
53
+ poem = @poefy.poem ({ rhyme: ' ' })
54
+ expect(poem).to be_nil
55
+ end
56
+ it "({ rhyme: '' })" do
57
+ poem = @poefy.poem ({ rhyme: '' })
58
+ expect(poem).to be_nil
59
+ end
60
+ end
61
+
62
+ describe "should return correct number of lines" do
63
+ rhymes = %w{a b z A aa ab zz AA AB AA1 A1 B1 Z1 AB1 A1A1A1A1B1B1B1B1B1}
64
+ rhymes += ['A1A1A1 A1A1A1 B1B1B1B1B1B1','a b c a b c']
65
+ rhymes += [' abc','abc ',' abc ']
66
+ rhymes += ['n aaa n','n aXXXa N1']
67
+ rhymes.each do |i|
68
+ it "({ rhyme: '#{i}' })" do
69
+ poem = @poefy.poem ({ rhyme: i })
70
+ expect(poem.count).to be i.gsub(/[0-9]/,'').length
71
+ end
72
+ end
73
+ end
74
+
75
+ describe "should accept characters other than number" do
76
+ rhymes = %w{. , : .. ., ,, :: (()) @ ~ <<>< A1A1A1...a;}
77
+ rhymes.each do |i|
78
+ it "({ rhyme: '#{i}' })" do
79
+ poem = @poefy.poem ({ rhyme: i })
80
+ expect(poem.count).to be i.gsub(/[0-9]/,'').length
81
+ end
82
+ end
83
+ end
84
+
85
+ describe "should be nil if can't parse rhyme string" do
86
+ rhymes = %w{a1 b1 ab1 Ab1 AAAAABb1 1 1111 1122 11221 ;;::1. }
87
+ rhymes += ['AA Bb1','11 11','11 1 1','..1.']
88
+ rhymes.each do |i|
89
+ it "({ rhyme: '#{i}' })" do
90
+ poem = @poefy.poem ({ rhyme: i })
91
+ expect(poem).to be_nil
92
+ end
93
+ end
94
+ end
95
+
96
+ describe "should be nil if can't complete rhyme string" do
97
+ rhymes = %w{aaaaaa abcd aaaaabbbbb}
98
+ rhymes.each do |i|
99
+ it "({ rhyme: '#{i}' })" do
100
+ poem = @poefy.poem ({ rhyme: i })
101
+ expect(poem).to be_nil
102
+ end
103
+ end
104
+ end
105
+
106
+ describe "should correctly repeat uppercase lines" do
107
+ lines = 200
108
+ it "({ rhyme: 'A' * #{lines} })" do
109
+ poem = @poefy.poem ({ rhyme: 'A' * lines })
110
+ expect(poem.count).to be lines
111
+ expect(poem.uniq.count).to be 1
112
+ end
113
+ it "({ rhyme: ('A'..'C').to_a.map { |i| i * #{lines} }.join })" do
114
+ rhyme = ('A'..'C').to_a.map { |i| i * lines }.join
115
+ poem = @poefy.poem ({ rhyme: rhyme })
116
+ expect(poem.count).to be lines * 3
117
+ expect(poem.uniq.count).to be 3
118
+ end
119
+ end
120
+
121
+ describe "should be nil if can't complete repeating rhyme string" do
122
+ lines = 200
123
+ it "({ rhyme: ('A'..'D').to_a.map { |i| i * #{lines} }.join })" do
124
+ rhyme = ('A'..'D').to_a.map { |i| i * lines }.join
125
+ poem = @poefy.poem ({ rhyme: rhyme })
126
+ expect(poem).to be_nil
127
+ end
128
+ end
129
+
130
+ end
131
+
132
+ describe ":form option" do
133
+
134
+ describe "should return correct number of lines" do
135
+ it "({ form: :default })" do
136
+ poem = @poefy.poem ({ form: :default })
137
+ expect(poem.count).to be 1
138
+ end
139
+ end
140
+
141
+ describe "should be nil if given a named form it can't fulfil" do
142
+ it "({ form: 'sonnet' })" do
143
+ poem = @poefy.poem ({ form: 'sonnet' })
144
+ expect(poem).to be_nil
145
+ end
146
+ it "({ form: :villanelle })" do
147
+ poem = @poefy.poem ({ form: :villanelle })
148
+ expect(poem).to be_nil
149
+ end
150
+ end
151
+
152
+ describe "should be nil if given a junk named form" do
153
+ it "({ form: 'sonnet_junk' })" do
154
+ poem = @poefy.poem ({ form: 'sonnet_junk' })
155
+ expect(poem).to be_nil
156
+ end
157
+ it "({ form: :not_a_form })" do
158
+ poem = @poefy.poem ({ form: :not_a_form })
159
+ expect(poem).to be_nil
160
+ end
161
+ it "({ form: :not_a_form, indent: '0010' })" do
162
+ poem = @poefy.poem ({ form: :not_a_form, indent: '0010' })
163
+ expect(poem).to be_nil
164
+ end
165
+ end
166
+
167
+ describe "should be valid if given a junk named form, and a rhyme" do
168
+ it "({ form: :not_a_form, rhyme: 'abcb' })" do
169
+ poem = @poefy.poem ({ form: :not_a_form, rhyme: 'abcb' })
170
+ expect(poem.count).to be 4
171
+ end
172
+ end
173
+
174
+ describe "should overwrite a named form if another option is specified" do
175
+ it "({ form: 'default', rhyme: 'ab' })" do
176
+ poem = @poefy.poem ({ form: 'default', rhyme: 'ab' })
177
+ expect(poem.count).to be 2
178
+ end
179
+ it "({ form: :villanelle, rhyme: 'abcb' })" do
180
+ poem = @poefy.poem ({ form: :villanelle, rhyme: 'abcb' })
181
+ expect(poem.count).to be 4
182
+ end
183
+ end
184
+ end
185
+ end
186
+
187
+ ##############################################################################
188
+
189
+ describe "using dataset shakespeare.db / shakespeare_sonnets.txt" do
190
+
191
+ file_txt = "shakespeare_sonnets.txt"
192
+ file_db = "shakespeare.db"
193
+
194
+ # All the Shakespeare lines are pentameter, so some forms should fail.
195
+ forms = Poefy::PoeticForms::POETIC_FORMS
196
+ forms_fail = [:limerick, :haiku, :common, :ballad]
197
+ forms_pass = forms.keys - forms_fail
198
+
199
+ before(:each) do
200
+ @poefy = Poefy::PoefyGen.new(file_db, { proper: false })
201
+ end
202
+
203
+ it "initialised object not nil" do
204
+ expect(@poefy).to_not be_nil
205
+ end
206
+
207
+ describe "#make_database( '#{@root}/data/#{file_txt}', true )" do
208
+ it "should make the database '#{@root}/data/#{file_db}" do
209
+ db_file = "#{@root}/data/#{file_db}"
210
+ # File.delete(db_file) if File.exists?(db_file)
211
+ input = `sed '/[a-z]/!d' #{@root}/data/#{file_txt}`
212
+ @poefy.make_database input
213
+ expect(@poefy.db.exists?).to be true
214
+ expect(File.exists?(db_file)).to be true
215
+ end
216
+ end
217
+
218
+ describe "using form string" do
219
+ describe "should return correct number of lines" do
220
+
221
+ # Make sure each form's lines match the expected output.
222
+ # Generate a few to be sure.
223
+ forms_pass.each do |form|
224
+ it "({ form: #{form} })" do
225
+ 10.times do
226
+ poem = @poefy.poem ({ form: form })
227
+ expect(poem.count).to satisfy do |c|
228
+ [*forms[form][:rhyme]].map do |r|
229
+ r.gsub(/[0-9]/,'').length
230
+ end.include?(c)
231
+ end
232
+ end
233
+ end
234
+ end
235
+ end
236
+
237
+ describe "should fail to be created" do
238
+ forms_fail.each do |form|
239
+ it "({ form: #{form} })" do
240
+ 4.times do
241
+ poem = @poefy.poem ({ form: form })
242
+ expect(poem).to be_nil
243
+ end
244
+ end
245
+ end
246
+ end
247
+ end
248
+ end
249
+
250
+ ##############################################################################
251
+
252
+ describe "using dataset whitman.db / whitman_leaves.txt" do
253
+
254
+ file_txt = "whitman_leaves.txt"
255
+ file_db = "whitman.db"
256
+
257
+ # There's a good mix of syllable count, so all forms should pass.
258
+ forms = Poefy::PoeticForms::POETIC_FORMS
259
+ forms_pass = forms.keys
260
+
261
+ before(:each) do
262
+ @poefy = Poefy::PoefyGen.new(file_db, { proper: false })
263
+ end
264
+
265
+ it "initialised object not nil" do
266
+ expect(@poefy).to_not be_nil
267
+ end
268
+
269
+ describe "#make_database( '#{@root}/data/#{file_txt}', true )" do
270
+ it "should make the database '#{@root}/data/#{file_db}" do
271
+ db_file = "#{@root}/data/#{file_db}"
272
+ # File.delete(db_file) if File.exists?(db_file)
273
+ input = `sed '/[a-z]/!d' #{@root}/data/#{file_txt}`
274
+ @poefy.make_database input
275
+ expect(@poefy.db.exists?).to be true
276
+ expect(File.exists?(db_file)).to be true
277
+ end
278
+ end
279
+
280
+ describe "using form string" do
281
+ describe "should return correct number of lines" do
282
+
283
+ # Make sure each form's lines match the expected output.
284
+ # Generate a few to be sure.
285
+ forms_pass.each do |form|
286
+ it "({ form: #{form} })" do
287
+ 10.times do
288
+ poem = @poefy.poem ({ form: form })
289
+ expect(poem.count).to satisfy do |c|
290
+ [*forms[form][:rhyme]].map do |r|
291
+ r.gsub(/[0-9]/,'').length
292
+ end.include?(c)
293
+ end
294
+ end
295
+ end
296
+ end
297
+ end
298
+ end
299
+
300
+ describe "using syllable string" do
301
+
302
+ it "({ rhyme: 'abcb defe', syllable: '[8,6,8,6,0,8,6,8,6]' })" do
303
+ options = {
304
+ rhyme: 'abcb defe',
305
+ syllable: '[8,6,8,6,0,8,6,8,6]'
306
+ }
307
+ poem = @poefy.poem (options)
308
+ expect(poem.count).to be options[:rhyme].length
309
+ end
310
+
311
+ it "({ rhyme: 'abcb defe', syllable: '[8,6,8,6,8,6,8,6]' })" do
312
+ options = {
313
+ rhyme: 'abcb defe',
314
+ syllable: '[8,6,8,6,8,6,8,6]'
315
+ }
316
+ poem = @poefy.poem (options)
317
+ expect(poem.count).to be options[:rhyme].length
318
+ end
319
+ end
320
+ end
321
+
322
+ ##############################################################################
323
+
324
+ describe "#transform_string_syllable" do
325
+
326
+ # Singleton which includes the method.
327
+ # Make the private methods public.
328
+ let(:obj) do
329
+ class Sing
330
+ include Poefy::PoeticForms
331
+ include Poefy::StringManipulation
332
+ public *private_instance_methods
333
+ end.new
334
+ end
335
+ describe "using rhyme string 'aabba'" do
336
+ input_and_output = [
337
+ ['10',
338
+ {1=>10,2=>10,3=>10,4=>10,5=>10}],
339
+ ['9,10,11',
340
+ {1=>[9,10,11],2=>[9,10,11],3=>[9,10,11],4=>[9,10,11],5=>[9,10,11]}],
341
+ ['[8,8,5,5,8]',
342
+ {1=>8,2=>8,3=>5,4=>5,5=>8}],
343
+ ['[[8,9],[8,9],[4,5,6],[4,5,6],[8,9]]',
344
+ {1=>[8,9],2=>[8,9],3=>[4,5,6],4=>[4,5,6],5=>[8,9]}],
345
+ ['{1:8,2:8,3:5,4:5,5:8}',
346
+ {1=>8,2=>8,3=>5,4=>5,5=>8}],
347
+ ['{1:8,2:8,3:5,5:8}',
348
+ {1=>8,2=>8,3=>5,4=>0,5=>8}],
349
+ ['{0:99,1:8,2:8,3:5,5:8}',
350
+ {1=>8,2=>8,3=>5,4=>99,5=>8}],
351
+ ['{1:[8,9],2:[8,9],3:[4,5,6],4:[4,5,6],5:[8,9]}',
352
+ {1=>[8,9],2=>[8,9],3=>[4,5,6],4=>[4,5,6],5=>[8,9]}],
353
+ ['{1:[8,9],2:[8,9],3:[4,5,6],5:[8,9]}',
354
+ {1=>[8,9],2=>[8,9],3=>[4,5,6],4=>0,5=>[8,9]}],
355
+ ['{0:99,1:[8,9],2:[8,9],3:[4,5,6],5:[8,9]}',
356
+ {1=>[8,9],2=>[8,9],3=>[4,5,6],4=>99,5=>[8,9]}],
357
+ ['{0:[8,9],3:[4,5,6],4:[4,5,6]}',
358
+ {1=>[8,9],2=>[8,9],3=>[4,5,6],4=>[4,5,6],5=>[8,9]}],
359
+ ['{1:8,5:8}',
360
+ {1=>8,2=>0,3=>0,4=>0,5=>8}],
361
+ ['{1:8,2:8,3:5,-2:5,-1:8}',
362
+ {1=>8,2=>8,3=>5,4=>5,5=>8}]
363
+ ]
364
+ input_and_output.each do |pair|
365
+ it "syllable: #{pair.first}" do
366
+ rhyme = obj.tokenise_rhyme('aabba')
367
+ out = obj.transform_string_syllable(pair.first, 'aabba')
368
+ again = obj.transform_string_syllable(out, 'aabba')
369
+ expect(out).to eq pair.last
370
+ expect(again).to eq out
371
+ expect(again).to eq pair.last
372
+ end
373
+ end
374
+ end
375
+ end
376
+
377
+ ##############################################################################
378
+
379
+ describe "#transform_string_regex" do
380
+
381
+ # Singleton which includes the method.
382
+ # Make the private methods public.
383
+ let(:obj) do
384
+ class Sing
385
+ include Poefy::PoeticForms
386
+ include Poefy::StringManipulation
387
+ public *private_instance_methods
388
+ end.new
389
+ end
390
+
391
+ describe "using rhyme string 'aabba'" do
392
+ input_and_output = [
393
+ ['^[^e]*$',
394
+ {
395
+ 1=>/^[^e]*$/,
396
+ 2=>/^[^e]*$/,
397
+ 3=>/^[^e]*$/,
398
+ 4=>/^[^e]*$/,
399
+ 5=>/^[^e]*$/
400
+ }],
401
+ ['[/(?=^[A-Z])(?=^[^eE]*$)/,/^[^eE]*$/,/^[^eE]*$/,/^[^eE]*$/,/^[^eE]*$/]',
402
+ {
403
+ 1=>/(?=^[A-Z])(?=^[^eE]*$)/,
404
+ 2=>/^[^eE]*$/,
405
+ 3=>/^[^eE]*$/,
406
+ 4=>/^[^eE]*$/,
407
+ 5=>/^[^eE]*$/
408
+ }],
409
+ ['{1=>/(?=^[A-Z])(?=^[^eE]*$)/,2=>/^[^eE]*$/,3=>/^[^eE]*$/,4=>/^[^eE]*$/,5=>/^[^eE]*$/}',
410
+ {
411
+ 1=>/(?=^[A-Z])(?=^[^eE]*$)/,
412
+ 2=>/^[^eE]*$/,
413
+ 3=>/^[^eE]*$/,
414
+ 4=>/^[^eE]*$/,
415
+ 5=>/^[^eE]*$/
416
+ }],
417
+ ['{0=>/^[^eE]*$/,1=>/(?=^[A-Z])(?=^[^eE]*$)/}',
418
+ {
419
+ 1=>/(?=^[A-Z])(?=^[^eE]*$)/,
420
+ 2=>/^[^eE]*$/,
421
+ 3=>/^[^eE]*$/,
422
+ 4=>/^[^eE]*$/,
423
+ 5=>/^[^eE]*$/
424
+ }],
425
+ ['{1=>/(?=^[A-Z])(?=^[^eE]*$)/,2=>/^[^eE]*$/,3=>/^[^eE]*$/,5=>/^[^eE]*$/}',
426
+ {
427
+ 1=>/(?=^[A-Z])(?=^[^eE]*$)/,
428
+ 2=>/^[^eE]*$/,
429
+ 3=>/^[^eE]*$/,
430
+ 4=>nil,
431
+ 5=>/^[^eE]*$/
432
+ }],
433
+ ['{1=>/(?=^[A-Z])(?=^[^eE]*$)/,4=>/^[^eE]*$/}',
434
+ {
435
+ 1=>/(?=^[A-Z])(?=^[^eE]*$)/,
436
+ 2=>nil,
437
+ 3=>nil,
438
+ 4=>/^[^eE]*$/,
439
+ 5=>nil
440
+ }],
441
+ ['{1=>/(?=^[A-Z])(?=^[^eE]*$)/,2=>/^[^eE]*$/,3=>/^[^eE]*$/,-1=>/^[^eE]*$/,-2=>/^[^eE]*$/}',
442
+ {
443
+ 1=>/(?=^[A-Z])(?=^[^eE]*$)/,
444
+ 2=>/^[^eE]*$/,
445
+ 3=>/^[^eE]*$/,
446
+ 4=>/^[^eE]*$/,
447
+ 5=>/^[^eE]*$/
448
+ }]
449
+ ]
450
+ input_and_output.each do |pair|
451
+ it "regex: #{pair.first}" do
452
+ out = obj.transform_string_regex(pair.first, 'aabba')
453
+ again = obj.transform_string_regex(out, 'aabba')
454
+ expect(out).to eq pair.last
455
+ expect(again).to eq out
456
+ expect(again).to eq pair.last
457
+ end
458
+ end
459
+ end
460
+ end
461
+
462
+ end
463
+
464
+ ################################################################################
@@ -0,0 +1,9 @@
1
+ require 'bundler/setup'
2
+ Bundler.setup
3
+
4
+ $LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
5
+ require 'poefy'
6
+
7
+ RSpec.configure do |config|
8
+ # some (optional) config here
9
+ end
metadata ADDED
@@ -0,0 +1,175 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: poefy
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.1
5
+ platform: ruby
6
+ authors:
7
+ - Paul Thompson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-05-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.13'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.13'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: sqlite3
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.3'
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: 1.3.13
65
+ type: :runtime
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - "~>"
70
+ - !ruby/object:Gem::Version
71
+ version: '1.3'
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 1.3.13
75
+ - !ruby/object:Gem::Dependency
76
+ name: ruby_rhymes
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '0.1'
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: 0.1.2
85
+ type: :runtime
86
+ prerelease: false
87
+ version_requirements: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - "~>"
90
+ - !ruby/object:Gem::Version
91
+ version: '0.1'
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: 0.1.2
95
+ - !ruby/object:Gem::Dependency
96
+ name: wordfilter
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: '0.2'
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: 0.2.6
105
+ type: :runtime
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - "~>"
110
+ - !ruby/object:Gem::Version
111
+ version: '0.2'
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ version: 0.2.6
115
+ description: Create poems from an input text file, by generating and querying a SQLite
116
+ database describing each line. Poems are created using a template to select lines
117
+ from the database, according to closing rhyme, syllable count, and regex matching.
118
+ email:
119
+ - nossidge@gmail.com
120
+ executables:
121
+ - poefy
122
+ extensions: []
123
+ extra_rdoc_files: []
124
+ files:
125
+ - ".gitignore"
126
+ - ".rspec"
127
+ - Gemfile
128
+ - LICENSE
129
+ - README.md
130
+ - Rakefile
131
+ - bin/poefy
132
+ - data/emily_dickinson.txt
133
+ - data/english_as_she_is_spoke.txt
134
+ - data/shakespeare_sonnets.txt
135
+ - data/spec_test_tiny.txt
136
+ - data/st_therese_of_lisieux.txt
137
+ - data/whitman_leaves.txt
138
+ - lib/poefy.rb
139
+ - lib/poefy/conditional_satisfaction.rb
140
+ - lib/poefy/database.rb
141
+ - lib/poefy/generation.rb
142
+ - lib/poefy/handle_error.rb
143
+ - lib/poefy/poefy_gen_base.rb
144
+ - lib/poefy/poetic_forms.rb
145
+ - lib/poefy/self.rb
146
+ - lib/poefy/string_manipulation.rb
147
+ - lib/poefy/version.rb
148
+ - poefy.gemspec
149
+ - spec/poefy_spec.rb
150
+ - spec/spec_helper.rb
151
+ homepage: https://github.com/nossidge/poefy
152
+ licenses:
153
+ - GPL-3.0
154
+ metadata: {}
155
+ post_install_message:
156
+ rdoc_options: []
157
+ require_paths:
158
+ - lib
159
+ required_ruby_version: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - ">="
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ required_rubygems_version: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - ">="
167
+ - !ruby/object:Gem::Version
168
+ version: '0'
169
+ requirements: []
170
+ rubyforge_project:
171
+ rubygems_version: 2.6.11
172
+ signing_key:
173
+ specification_version: 4
174
+ summary: Create rhyming poetry by rearranging lines of text
175
+ test_files: []