poefy 0.6.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/spec/poefy_spec.rb DELETED
@@ -1,722 +0,0 @@
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
- db_file = "#{@root}/data/spec_test_tiny.db"
11
- File.delete(db_file) if File.exists?(db_file)
12
- end
13
- after(:all) do
14
- db_file = "#{@root}/data/spec_test_tiny.db"
15
- File.delete(db_file) if File.exists?(db_file)
16
- end
17
-
18
- describe "using tiny dataset spec_test_tiny.db / spec_test_tiny.txt" do
19
-
20
- file_txt = "spec_test_tiny.txt"
21
- file_db = "spec_test_tiny.db"
22
-
23
- before(:each) do
24
- @poefy = Poefy::PoefyGen.new(file_db, { proper: false })
25
- end
26
- after(:each) do
27
- @poefy.close
28
- end
29
- it "initialised object not nil" do
30
- expect(@poefy).to_not be_nil
31
- end
32
-
33
- describe "#make_database( '#{@root}/data/#{file_txt}', true )" do
34
- it "should make the database '#{@root}/data/#{file_db}" do
35
- db_file = "#{@root}/data/#{file_db}"
36
- @poefy.make_database "#{@root}/data/#{file_txt}", true
37
- expect(@poefy.db.exists?).to be true
38
- expect(File.exists?(db_file)).to be true
39
- end
40
- end
41
-
42
- describe ":rhyme option" do
43
-
44
- describe "should return nil" do
45
- it "blank, no argument" do
46
- poem = @poefy.poem
47
- expect(poem).to be_nil
48
- end
49
- it "({ })" do
50
- poem = @poefy.poem ({ })
51
- expect(poem).to be_nil
52
- end
53
- it "({ rhyme: nil })" do
54
- poem = @poefy.poem ({ rhyme: nil })
55
- expect(poem).to be_nil
56
- end
57
- it "({ rhyme: ' ' })" do
58
- poem = @poefy.poem ({ rhyme: ' ' })
59
- expect(poem).to be_nil
60
- end
61
- it "({ rhyme: '' })" do
62
- poem = @poefy.poem ({ rhyme: '' })
63
- expect(poem).to be_nil
64
- end
65
- end
66
-
67
- describe "should return correct number of lines" do
68
- rhymes = %w{a b z A aa ab zz AA AB AA1 A1 B1 Z1 AB1 A1A1A1A1B1B1B1B1B1}
69
- rhymes += ['A1A1A1 A1A1A1 B1B1B1B1B1B1','a b c a b c']
70
- rhymes += [' abc','abc ',' abc ']
71
- rhymes += ['n aaa n','n aXXXa N1']
72
- rhymes.each do |i|
73
- it "({ rhyme: '#{i}' })" do
74
- poem = @poefy.poem ({ rhyme: i })
75
- expect(poem.count).to be i.gsub(/[0-9]/,'').length
76
- end
77
- end
78
- end
79
-
80
- describe "should accept characters other than number" do
81
- rhymes = %w{. , : .. ., ,, :: (()) @ ~ <<>< A1A1A1...a;}
82
- rhymes.each do |i|
83
- it "({ rhyme: '#{i}' })" do
84
- poem = @poefy.poem ({ rhyme: i })
85
- expect(poem.count).to be i.gsub(/[0-9]/,'').length
86
- end
87
- end
88
- end
89
-
90
- describe "should be nil if can't parse rhyme string" do
91
- rhymes = %w{a1 b1 ab1 Ab1 AAAAABb1 1 1111 1122 11221 ;;::1. }
92
- rhymes += ['AA Bb1','11 11','11 1 1','..1.']
93
- rhymes.each do |i|
94
- it "({ rhyme: '#{i}' })" do
95
- poem = @poefy.poem ({ rhyme: i })
96
- expect(poem).to be_nil
97
- end
98
- end
99
- end
100
-
101
- describe "should be nil if can't complete rhyme string" do
102
- rhymes = %w{aaaaaa abcd aaaaabbbbb}
103
- rhymes.each do |i|
104
- it "({ rhyme: '#{i}' })" do
105
- poem = @poefy.poem ({ rhyme: i })
106
- expect(poem).to be_nil
107
- end
108
- end
109
- end
110
-
111
- describe "should correctly repeat uppercase lines" do
112
- lines = 200
113
- it "({ rhyme: 'A' * #{lines} })" do
114
- poem = @poefy.poem ({ rhyme: 'A' * lines })
115
- expect(poem.count).to be lines
116
- expect(poem.uniq.count).to be 1
117
- end
118
- it "({ rhyme: ('A'..'C').to_a.map { |i| i * #{lines} }.join })" do
119
- rhyme = ('A'..'C').to_a.map { |i| i * lines }.join
120
- poem = @poefy.poem ({ rhyme: rhyme })
121
- expect(poem.count).to be lines * 3
122
- expect(poem.uniq.count).to be 3
123
- end
124
- end
125
-
126
- describe "should be nil if can't complete repeating rhyme string" do
127
- lines = 200
128
- it "({ rhyme: ('A'..'D').to_a.map { |i| i * #{lines} }.join })" do
129
- rhyme = ('A'..'D').to_a.map { |i| i * lines }.join
130
- poem = @poefy.poem ({ rhyme: rhyme })
131
- expect(poem).to be_nil
132
- end
133
- end
134
-
135
- end
136
-
137
- describe ":form option" do
138
-
139
- describe "should return correct number of lines" do
140
- it "({ form: :default })" do
141
- poem = @poefy.poem ({ form: :default })
142
- expect(poem.count).to be 1
143
- end
144
- end
145
-
146
- describe "should be nil if given a named form it can't fulfil" do
147
- it "({ form: 'sonnet' })" do
148
- poem = @poefy.poem ({ form: 'sonnet' })
149
- expect(poem).to be_nil
150
- end
151
- it "({ form: :villanelle })" do
152
- poem = @poefy.poem ({ form: :villanelle })
153
- expect(poem).to be_nil
154
- end
155
- end
156
-
157
- describe "should be nil if given a junk named form" do
158
- it "({ form: 'sonnet_junk' })" do
159
- poem = @poefy.poem ({ form: 'sonnet_junk' })
160
- expect(poem).to be_nil
161
- end
162
- it "({ form: :not_a_form })" do
163
- poem = @poefy.poem ({ form: :not_a_form })
164
- expect(poem).to be_nil
165
- end
166
- it "({ form: :not_a_form, indent: '0010' })" do
167
- poem = @poefy.poem ({ form: :not_a_form, indent: '0010' })
168
- expect(poem).to be_nil
169
- end
170
- end
171
-
172
- describe "should be valid if given a junk named form, and a rhyme" do
173
- it "({ form: :not_a_form, rhyme: 'abcb' })" do
174
- poem = @poefy.poem ({ form: :not_a_form, rhyme: 'abcb' })
175
- expect(poem.count).to be 4
176
- end
177
- end
178
-
179
- describe "should overwrite a named form if another option is specified" do
180
- it "({ form: 'default', rhyme: 'ab' })" do
181
- poem = @poefy.poem ({ form: 'default', rhyme: 'ab' })
182
- expect(poem.count).to be 2
183
- end
184
- it "({ form: :villanelle, rhyme: 'abcb' })" do
185
- poem = @poefy.poem ({ form: :villanelle, rhyme: 'abcb' })
186
- expect(poem.count).to be 4
187
- end
188
- end
189
- end
190
- end
191
-
192
- ##############################################################################
193
-
194
- describe "using dataset shakespeare.db / shakespeare_sonnets.txt" do
195
-
196
- file_txt = "shakespeare_sonnets.txt"
197
- file_db = "shakespeare.db"
198
-
199
- # All the Shakespeare lines are pentameter, so some forms should fail.
200
- forms = Poefy::PoeticForms::POETIC_FORMS
201
- forms_fail = [:limerick, :haiku, :common, :ballad, :double_dactyl]
202
- forms_pass = forms.keys - forms_fail
203
-
204
- before(:each) do
205
- @poefy = Poefy::PoefyGen.new(file_db, { proper: false })
206
- end
207
- after(:each) do
208
- @poefy.close
209
- end
210
-
211
- it "initialised object not nil" do
212
- expect(@poefy).to_not be_nil
213
- end
214
-
215
- describe "#make_database( '#{@root}/data/#{file_txt}', true )" do
216
- it "should make the database '#{@root}/data/#{file_db}" do
217
- db_file = "#{@root}/data/#{file_db}"
218
- input = `sed '/[a-z]/!d' #{@root}/data/#{file_txt}`
219
- @poefy.make_database input
220
- expect(@poefy.db.exists?).to be true
221
- expect(File.exists?(db_file)).to be true
222
- end
223
- end
224
-
225
- describe "using acrostic option" do
226
- describe "should return correct number of lines" do
227
- it "({ form: :sonnet, acrostic: 'pauldpthompson' })" do
228
- poem = @poefy.poem ({ form: :sonnet,
229
- acrostic: 'pauldpthompson' })
230
- expect(poem.count).to be 14
231
- end
232
- end
233
- describe "should fail to be created" do
234
- it "({ form: :sonnet, acrostic: 'qqqqqqqqqqqqqq' })" do
235
- poem = @poefy.poem ({ form: :sonnet,
236
- acrostic: 'qqqqqqqqqqqqqq' })
237
- expect(poem).to be_nil
238
- end
239
- end
240
- end
241
-
242
- describe "using form string" do
243
- describe "should return correct number of lines" do
244
-
245
- # Make sure each form's lines match the expected output.
246
- # Generate a few to be sure.
247
- forms_pass.each do |form|
248
- it "({ form: #{form} })" do
249
- 10.times do
250
- poem = @poefy.poem ({ form: form })
251
- expect(poem.count).to satisfy do |c|
252
- [*forms[form][:rhyme]].map do |r|
253
- r.gsub(/[0-9]/,'').length
254
- end.include?(c)
255
- end
256
- end
257
- end
258
- end
259
- end
260
-
261
- describe "should fail to be created" do
262
- forms_fail.each do |form|
263
- it "({ form: #{form} })" do
264
- 4.times do
265
- poem = @poefy.poem ({ form: form })
266
- expect(poem).to be_nil
267
- end
268
- end
269
- end
270
- end
271
- end
272
-
273
- describe "make sonnets" do
274
- sonnet_options = [
275
- { rhyme: 'ababcdcdefefgg' },
276
- { rhyme: 'abab cdcd efef gg', indent: '0101 0101 0011 01' },
277
- { form: 'sonnet' },
278
- { form: :sonnet, syllable: 0 },
279
- { form: :sonnet, syllable: 10 },
280
- { form: :sonnet, regex: /^[A-Z].*$/ },
281
- { form: :sonnet, regex: '^[A-Z].*$' },
282
- { form: :sonnet, acrostic: 'pauldpthompson' },
283
- { form: 'sonnet', indent: '01010101001101' },
284
- { form: 'sonnet', proper: false }
285
- ]
286
- sonnet_options.each do |option|
287
- it "#{option}" do
288
- 4.times do
289
- poem = @poefy.poem(option)
290
- expect(poem).to_not be_nil
291
- end
292
- end
293
- end
294
- end
295
- end
296
-
297
- ##############################################################################
298
-
299
- describe "using dataset whitman.db / whitman_leaves.txt" do
300
-
301
- file_txt = "whitman_leaves.txt"
302
- file_db = "whitman.db"
303
-
304
- # There's a good mix of syllable count, so all forms should pass.
305
- forms = Poefy::PoeticForms::POETIC_FORMS
306
- forms_pass = forms.keys
307
-
308
- before(:each) do
309
- @poefy = Poefy::PoefyGen.new(file_db, { proper: false })
310
- end
311
- after(:each) do
312
- @poefy.close
313
- end
314
-
315
- it "initialised object not nil" do
316
- expect(@poefy).to_not be_nil
317
- end
318
-
319
- describe "#make_database( '#{@root}/data/#{file_txt}', true )" do
320
- it "should make the database '#{@root}/data/#{file_db}" do
321
- db_file = "#{@root}/data/#{file_db}"
322
- input = `sed '/[a-z]/!d' #{@root}/data/#{file_txt}`
323
- @poefy.make_database input
324
- expect(@poefy.db.exists?).to be true
325
- expect(File.exists?(db_file)).to be true
326
- end
327
- end
328
-
329
- describe "using form string" do
330
- describe "should return correct number of lines" do
331
-
332
- # Make sure each form's lines match the expected output.
333
- # Generate a few to be sure.
334
- forms_pass.each do |form|
335
- it "({ form: #{form} })" do
336
- 10.times do
337
- poem = @poefy.poem ({ form: form })
338
- expect(poem.count).to satisfy do |c|
339
- [*forms[form][:rhyme]].map do |r|
340
- r.gsub(/[0-9]/,'').length
341
- end.include?(c)
342
- end
343
- end
344
- end
345
- end
346
- end
347
- end
348
-
349
- describe "make sonnets" do
350
- sonnet_options = [
351
- { rhyme: 'ababcdcdefefgg' },
352
- { rhyme: 'abab cdcd efef gg', indent: '0101 0101 0011 01' },
353
- { form: 'sonnet' },
354
- { form: :sonnet, syllable: 0 },
355
- { form: :sonnet, syllable: 10 },
356
- { form: :sonnet, regex: /^[A-Z].*$/ },
357
- { form: :sonnet, regex: '^[A-Z].*$' },
358
- { form: :sonnet, acrostic: 'pauldpthompson' },
359
- { form: 'sonnet', indent: '01010101001101' },
360
- { form: 'sonnet', proper: false }
361
- ]
362
- sonnet_options.each do |option|
363
- it "#{option}" do
364
- 4.times do
365
- poem = @poefy.poem(option)
366
- expect(poem).to_not be_nil
367
- end
368
- end
369
- end
370
- end
371
-
372
- describe "using syllable string" do
373
-
374
- it "({ rhyme: 'abcb defe', syllable: '[8,6,8,6,0,8,6,8,6]' })" do
375
- options = {
376
- rhyme: 'abcb defe',
377
- syllable: '[8,6,8,6,0,8,6,8,6]'
378
- }
379
- poem = @poefy.poem (options)
380
- expect(poem.count).to be options[:rhyme].length
381
- end
382
-
383
- it "({ rhyme: 'abcb defe', syllable: '[8,6,8,6,8,6,8,6]' })" do
384
- options = {
385
- rhyme: 'abcb defe',
386
- syllable: '[8,6,8,6,8,6,8,6]'
387
- }
388
- poem = @poefy.poem (options)
389
- expect(poem.count).to be options[:rhyme].length
390
- end
391
- end
392
- end
393
-
394
- ##############################################################################
395
-
396
- describe "#transform_string_syllable" do
397
-
398
- # Singleton which includes the method.
399
- # Make the private methods public.
400
- let(:obj) do
401
- class Sing
402
- include Poefy::PoeticForms
403
- include Poefy::StringManipulation
404
- public *private_instance_methods
405
- end.new
406
- end
407
- describe "using rhyme string 'aabba'" do
408
- input_and_output = [
409
- ['10',
410
- {1=>10,2=>10,3=>10,4=>10,5=>10}],
411
- ['9,10,11',
412
- {1=>[9,10,11],2=>[9,10,11],3=>[9,10,11],4=>[9,10,11],5=>[9,10,11]}],
413
- ['[8,8,5,5,8]',
414
- {1=>8,2=>8,3=>5,4=>5,5=>8}],
415
- ['[[8,9],[8,9],[4,5,6],[4,5,6],[8,9]]',
416
- {1=>[8,9],2=>[8,9],3=>[4,5,6],4=>[4,5,6],5=>[8,9]}],
417
- ['{1:8,2:8,3:5,4:5,5:8}',
418
- {1=>8,2=>8,3=>5,4=>5,5=>8}],
419
- ['{1:8,2:8,3:5,5:8}',
420
- {1=>8,2=>8,3=>5,4=>0,5=>8}],
421
- ['{0:99,1:8,2:8,3:5,5:8}',
422
- {1=>8,2=>8,3=>5,4=>99,5=>8}],
423
- ['{1:[8,9],2:[8,9],3:[4,5,6],4:[4,5,6],5:[8,9]}',
424
- {1=>[8,9],2=>[8,9],3=>[4,5,6],4=>[4,5,6],5=>[8,9]}],
425
- ['{1:[8,9],2:[8,9],3:[4,5,6],5:[8,9]}',
426
- {1=>[8,9],2=>[8,9],3=>[4,5,6],4=>0,5=>[8,9]}],
427
- ['{0:99,1:[8,9],2:[8,9],3:[4,5,6],5:[8,9]}',
428
- {1=>[8,9],2=>[8,9],3=>[4,5,6],4=>99,5=>[8,9]}],
429
- ['{0:[8,9],3:[4,5,6],4:[4,5,6]}',
430
- {1=>[8,9],2=>[8,9],3=>[4,5,6],4=>[4,5,6],5=>[8,9]}],
431
- ['{1:8,5:8}',
432
- {1=>8,2=>0,3=>0,4=>0,5=>8}],
433
- ['{1:8,2:8,3:5,-2:5,-1:8}',
434
- {1=>8,2=>8,3=>5,4=>5,5=>8}]
435
- ]
436
- input_and_output.each do |pair|
437
- it "syllable: #{pair.first}" do
438
- rhyme = obj.tokenise_rhyme('aabba')
439
- out = obj.transform_string_syllable(pair.first, 'aabba')
440
- again = obj.transform_string_syllable(out, 'aabba')
441
- expect(out).to eq pair.last
442
- expect(again).to eq out
443
- expect(again).to eq pair.last
444
- end
445
- end
446
- end
447
- end
448
-
449
- ##############################################################################
450
-
451
- describe "#transform_string_regex" do
452
-
453
- # Singleton which includes the method.
454
- # Make the private methods public.
455
- let(:obj) do
456
- class Sing
457
- include Poefy::PoeticForms
458
- include Poefy::StringManipulation
459
- public *private_instance_methods
460
- end.new
461
- end
462
-
463
- describe "using rhyme string 'aabba'" do
464
- input_and_output = [
465
- ['^[^e]*$',
466
- {
467
- 1=>/^[^e]*$/,
468
- 2=>/^[^e]*$/,
469
- 3=>/^[^e]*$/,
470
- 4=>/^[^e]*$/,
471
- 5=>/^[^e]*$/
472
- }],
473
- ['[/(?=^[A-Z])(?=^[^eE]*$)/,/^[^eE]*$/,/^[^eE]*$/,/^[^eE]*$/,/^[^eE]*$/]',
474
- {
475
- 1=>/(?=^[A-Z])(?=^[^eE]*$)/,
476
- 2=>/^[^eE]*$/,
477
- 3=>/^[^eE]*$/,
478
- 4=>/^[^eE]*$/,
479
- 5=>/^[^eE]*$/
480
- }],
481
- ['{1=>/(?=^[A-Z])(?=^[^eE]*$)/,2=>/^[^eE]*$/,3=>/^[^eE]*$/,4=>/^[^eE]*$/,5=>/^[^eE]*$/}',
482
- {
483
- 1=>/(?=^[A-Z])(?=^[^eE]*$)/,
484
- 2=>/^[^eE]*$/,
485
- 3=>/^[^eE]*$/,
486
- 4=>/^[^eE]*$/,
487
- 5=>/^[^eE]*$/
488
- }],
489
- ['{0=>/^[^eE]*$/,1=>/(?=^[A-Z])(?=^[^eE]*$)/}',
490
- {
491
- 1=>/(?=^[A-Z])(?=^[^eE]*$)/,
492
- 2=>/^[^eE]*$/,
493
- 3=>/^[^eE]*$/,
494
- 4=>/^[^eE]*$/,
495
- 5=>/^[^eE]*$/
496
- }],
497
- ['{1=>/(?=^[A-Z])(?=^[^eE]*$)/,2=>/^[^eE]*$/,3=>/^[^eE]*$/,5=>/^[^eE]*$/}',
498
- {
499
- 1=>/(?=^[A-Z])(?=^[^eE]*$)/,
500
- 2=>/^[^eE]*$/,
501
- 3=>/^[^eE]*$/,
502
- 4=>nil,
503
- 5=>/^[^eE]*$/
504
- }],
505
- ['{1=>/(?=^[A-Z])(?=^[^eE]*$)/,4=>/^[^eE]*$/}',
506
- {
507
- 1=>/(?=^[A-Z])(?=^[^eE]*$)/,
508
- 2=>nil,
509
- 3=>nil,
510
- 4=>/^[^eE]*$/,
511
- 5=>nil
512
- }],
513
- ['{1=>/(?=^[A-Z])(?=^[^eE]*$)/,2=>/^[^eE]*$/,3=>/^[^eE]*$/,-1=>/^[^eE]*$/,-2=>/^[^eE]*$/}',
514
- {
515
- 1=>/(?=^[A-Z])(?=^[^eE]*$)/,
516
- 2=>/^[^eE]*$/,
517
- 3=>/^[^eE]*$/,
518
- 4=>/^[^eE]*$/,
519
- 5=>/^[^eE]*$/
520
- }]
521
- ]
522
- input_and_output.each do |pair|
523
- it "regex: #{pair.first}" do
524
- out = obj.transform_string_regex(pair.first, 'aabba')
525
- again = obj.transform_string_regex(out, 'aabba')
526
- expect(out).to eq pair.last
527
- expect(again).to eq out
528
- expect(again).to eq pair.last
529
- end
530
- end
531
- end
532
- end
533
-
534
- ##############################################################################
535
-
536
- describe "reusing the same PoefyGen instance" do
537
- it "should correctly merge the option hashes" do
538
-
539
- # Default to use rondeau poetic form, and proper sentence validation
540
- poefy = Poefy::PoefyGen.new('shakespeare', { form: 'rondeau', proper: true })
541
-
542
- # Generate a properly sentenced rondeau
543
- poem = poefy.poem
544
- expect(poem.count).to be 17
545
-
546
- # Generate a rondeau without proper validation
547
- poem = poefy.poem ({ proper: false })
548
- expect(poem.count).to be 17
549
-
550
- # Generate a proper rondeau with a certain indentation
551
- poem = poefy.poem ({ indent: '01012 0012 010112' })
552
- expect(poem.count).to be 17
553
-
554
- # Generate other forms
555
- poem = poefy.poem ({ rhyme: 'abbaabbacdecde' })
556
- expect(poem.count).to be 14
557
- poem = poefy.poem ({ form: 'sonnet' })
558
- expect(poem.count).to be 14
559
- poem = poefy.poem ({ form: 'ballade' })
560
- expect(poem.count).to be 31
561
-
562
- # Generate a default rondeau again
563
- poem = poefy.poem
564
- expect(poem.count).to be 17
565
- end
566
- end
567
-
568
- ##############################################################################
569
-
570
- describe "using the transform option" do
571
-
572
- it "should correctly transform the output 1" do
573
- poefy = Poefy::PoefyGen.new :shakespeare
574
- transform_hash = {
575
- 4 => proc { |line, num, poem| line.upcase },
576
- 12 => proc { |line, num, poem| line.upcase }
577
- }
578
- poem = poefy.poem({ form: :sonnet, transform: transform_hash })
579
- expect(poem.count).to be 14
580
- expect(poem[3]).to eq poem[3].upcase
581
- expect(poem[11]).to eq poem[11].upcase
582
- end
583
-
584
- it "should correctly transform the output 2" do
585
- poefy = Poefy::PoefyGen.new :shakespeare
586
- transform_hash = {
587
- 4 => proc { |line, num, poem| poem.count },
588
- -3 => proc { |line, num, poem| poem.count },
589
- 7 => proc { |line, num, poem| 'test string' }
590
- }
591
- poem = poefy.poem({ form: :sonnet, transform: transform_hash })
592
- expect(poem.count).to be 14
593
- expect(poem[3]).to eq '14'
594
- expect(poem[11]).to eq '14'
595
- expect(poem[6]).to eq 'test string'
596
- end
597
-
598
- it "should correctly transform the output 3" do
599
- poefy = Poefy::PoefyGen.new :shakespeare
600
- transform_proc = proc { |line, num, poem| line.downcase }
601
- poem = poefy.poem({ form: :sonnet, transform: transform_proc })
602
- expect(poem.count).to be 14
603
- poem.each do |i|
604
- expect(i).to eq i.downcase
605
- end
606
- end
607
-
608
- it "should correctly transform the output 4" do
609
- poefy = Poefy::PoefyGen.new :shakespeare
610
- transform_proc = proc { |line, num, poem| "#{num} #{line.downcase}" }
611
- poem = poefy.poem({ form: :sonnet, transform: transform_proc })
612
- expect(poem.count).to be 14
613
- poem.each.with_index do |line, index|
614
- expect(line).to eq line.downcase
615
- first_word = line.split(' ').first
616
- expect(first_word).to eq (index + 1).to_s
617
- end
618
- end
619
- end
620
-
621
- ##############################################################################
622
-
623
- describe "using the form_from_text option" do
624
- before(:all) do
625
- @file = "#{@root}/data/i_want_to_hold_your_hand.txt"
626
- end
627
-
628
- it "should use the exact poetic form 1" do
629
- poefy = Poefy::PoefyGen.new(:beatles, {
630
- form_from_text: @file
631
- })
632
- poem = poefy.poem
633
- expect(poem.count).to be 46
634
- end
635
-
636
- it "should use the exact poetic form 2" do
637
- poefy = Poefy::PoefyGen.new :beatles
638
- poem = poefy.poem({
639
- form_from_text: @file
640
- })
641
- expect(poem.count).to be 46
642
- end
643
-
644
- it "should correctly modify the poetic form 1" do
645
- poefy = Poefy::PoefyGen.new(:beatles, {
646
- form_from_text: @file,
647
- syllable: 6
648
- })
649
- poem = poefy.poem
650
- expect(poem.count).to be 46
651
- end
652
-
653
- it "should correctly modify the poetic form 2" do
654
- poefy = Poefy::PoefyGen.new :beatles
655
- poem = poefy.poem({
656
- form_from_text: @file,
657
- syllable: 6
658
- })
659
- expect(poem.count).to be 46
660
- end
661
-
662
- it "should correctly modify the poetic form 3" do
663
- poefy = Poefy::PoefyGen.new(:beatles, {
664
- form_from_text: @file
665
- })
666
- poem = poefy.poem({
667
- syllable: 6
668
- })
669
- expect(poem.count).to be 46
670
- end
671
-
672
- it "should correctly replace the poetic form" do
673
- poefy = Poefy::PoefyGen.new(:beatles, {
674
- syllable: 6
675
- })
676
- poem = poefy.poem({
677
- form_from_text: @file
678
- })
679
- expect(poem.count).to be 46
680
- end
681
-
682
- ############################################################################
683
-
684
- describe "private method #poetic_form_from_text" do
685
-
686
- # Singleton which includes the method.
687
- # Make the private methods public.
688
- let(:obj) do
689
- class Sing
690
- include Poefy::PoeticFormFromText
691
- include Poefy::StringManipulation
692
- public *private_instance_methods
693
- end.new
694
- end
695
-
696
- it "80 should rhyme with weighty" do
697
- lines = ["Lorem ipsum dolor weighty", "Lorem ipsum dolor 80"]
698
- form = obj.poetic_form_from_text(lines)
699
- expect(form[:rhyme].uniq.count).to be 1
700
- end
701
- it "80 should not rhyme with shoe" do
702
- lines = ["Lorem ipsum dolor shoe", "Lorem ipsum dolor 80"]
703
- form = obj.poetic_form_from_text(lines)
704
- expect(form[:rhyme].uniq.count).to_not be 1
705
- end
706
- it "2 should rhyme with shoe" do
707
- lines = ["Lorem ipsum dolor shoe", "Lorem ipsum dolor 2"]
708
- form = obj.poetic_form_from_text(lines)
709
- expect(form[:rhyme].uniq.count).to be 1
710
- end
711
- it "2 should not rhyme with weighty" do
712
- lines = ["Lorem ipsum dolor weighty", "Lorem ipsum dolor 2"]
713
- form = obj.poetic_form_from_text(lines)
714
- expect(form[:rhyme].uniq.count).to_not be 1
715
- end
716
- end
717
-
718
- end
719
-
720
- end
721
-
722
- ################################################################################