cw 0.0.10 → 0.0.11
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 +4 -4
- data/Gemfile +1 -8
- data/README.md +25 -17
- data/cw.gemspec +12 -1
- data/test/test_cw.rb +106 -116
- metadata +128 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 989e1bb7fa13915779b903aaefd8167e0afda345
|
4
|
+
data.tar.gz: 8e473d0a5adfec8808ba0d2fd4255dc4cbc22df1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fa0bbd224e8b08c6b67241df869fc41b3b8f857c8b9baf4d337007d56acfaacd31f73f7def2434f8f1b56acb922989aaebba7461814cb3fed3b97472ceea8407
|
7
|
+
data.tar.gz: b2c18e86a87c71948a0d9aa0e416f7c935cbe0c0113374afe871c20034c1b5c4549f182ef8c9bd283f44679a2f98090bc4ca4c22cb3f5cf5b6b0db6e04a0b137
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -18,8 +18,16 @@ gem install cw
|
|
18
18
|
ruby example.rb
|
19
19
|
|
20
20
|
```
|
21
|
+
# Run tests
|
21
22
|
|
22
|
-
|
23
|
+
```sh
|
24
|
+
|
25
|
+
gem install --dev cw
|
26
|
+
ruby test/test_cw.rb
|
27
|
+
|
28
|
+
```
|
29
|
+
|
30
|
+
- Note: Currently only tested on OS X, and Ruby v2.0.0 and greater.
|
23
31
|
|
24
32
|
```ruby
|
25
33
|
|
@@ -68,22 +76,22 @@ ruby example.rb
|
|
68
76
|
|
69
77
|
Command / Alias
|
70
78
|
---------------
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
79
|
+
- ewpm / effective_wpm
|
80
|
+
- no_run / pause
|
81
|
+
- comment / name
|
82
|
+
- repeat_word / double_words
|
83
|
+
- word_length / word_size
|
84
|
+
- word_shuffle / shuffle
|
85
|
+
- random_letters
|
86
|
+
- random_numbers
|
87
|
+
- having_size_of / word_size
|
88
|
+
- number_of_words / word_count
|
89
|
+
- words_including / including
|
90
|
+
- words_ending_with / ending_with
|
91
|
+
- random_alphanumeric / random_letters_numbers
|
92
|
+
- words_beginning_with / beginning_with
|
93
|
+
- words_no_longer_than / no_longer_than
|
94
|
+
- words_no_shorter_than / no_shorter_than
|
87
95
|
|
88
96
|
# License
|
89
97
|
|
data/cw.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = 'cw'
|
7
|
-
spec.version = '0.0.
|
7
|
+
spec.version = '0.0.11'
|
8
8
|
spec.date = '2016-05-21'
|
9
9
|
spec.authors = ["Martyn Jago"]
|
10
10
|
spec.email = ["martyn.jago@btinternet.com"]
|
@@ -14,4 +14,15 @@ Gem::Specification.new do |spec|
|
|
14
14
|
spec.files = `git ls-files`.split($/)
|
15
15
|
spec.license = 'MIT'
|
16
16
|
spec.require_paths = ["lib", "audio", "data/text", "test"]
|
17
|
+
|
18
|
+
spec.add_dependency('wavefile')
|
19
|
+
spec.add_dependency('paint')
|
20
|
+
spec.add_dependency('feedjira')
|
21
|
+
spec.add_dependency('htmlentities')
|
22
|
+
spec.add_dependency('sanitize')
|
23
|
+
spec.add_dependency('ruby-progressbar')
|
24
|
+
spec.add_dependency('rake')
|
25
|
+
|
26
|
+
spec.add_development_dependency "minitest"
|
27
|
+
spec.add_development_dependency "simplecov"
|
17
28
|
end
|
data/test/test_cw.rb
CHANGED
@@ -30,12 +30,12 @@ class TestCW < MiniTest::Test
|
|
30
30
|
|
31
31
|
def test_name_is_unnamed_if_unnamed
|
32
32
|
assert_equal 'unnamed', @cw.name
|
33
|
-
|
33
|
+
end
|
34
34
|
|
35
35
|
def test_name_can_be_set
|
36
36
|
@cw.name 'testing'
|
37
37
|
assert_equal 'testing', @cw.name
|
38
|
-
|
38
|
+
end
|
39
39
|
|
40
40
|
def test_loads_words_by_default
|
41
41
|
assert_equal ["the", "of", "and", "a", "to"] , @cw.words.first(5)
|
@@ -47,7 +47,7 @@ class TestCW < MiniTest::Test
|
|
47
47
|
pause
|
48
48
|
temp = Params.dictionary
|
49
49
|
}
|
50
|
-
assert_equal File.expand_path(ROOT + '/
|
50
|
+
assert_equal File.expand_path(ROOT + '/data/text/common_words.txt'), File.expand_path(temp)
|
51
51
|
end
|
52
52
|
|
53
53
|
def test_CW_takes_a_block
|
@@ -85,9 +85,9 @@ class TestCW < MiniTest::Test
|
|
85
85
|
temp = nil
|
86
86
|
cw = CW.new {
|
87
87
|
no_run
|
88
|
-
temp = Params.
|
88
|
+
temp = Params.audio_filename
|
89
89
|
}
|
90
|
-
assert_equal "
|
90
|
+
assert_equal "audio_output.wav", temp
|
91
91
|
end
|
92
92
|
|
93
93
|
def test_reload_reloads_dictionary
|
@@ -131,19 +131,18 @@ class TestCW < MiniTest::Test
|
|
131
131
|
assert_equal ["the", "of", "and", "a", "to"] , @cw.words.first(5)
|
132
132
|
end
|
133
133
|
|
134
|
-
|
135
|
-
|
136
|
-
unnamed
|
134
|
+
def test_to_s_outputs_test_run_header_if_paused
|
135
|
+
temp =
|
136
|
+
%q(unnamed
|
137
137
|
=======
|
138
138
|
WPM: 25
|
139
|
-
=======
|
140
|
-
|
141
|
-
|
142
|
-
end
|
139
|
+
=======)
|
140
|
+
assert_equal temp, @cw.to_s
|
141
|
+
end
|
143
142
|
|
144
143
|
def test_to_s_outputs_relevant_params_if_set
|
145
|
-
temp =
|
146
|
-
unnamed
|
144
|
+
temp =
|
145
|
+
%q(unnamed
|
147
146
|
=======
|
148
147
|
WPM: 25
|
149
148
|
Shuffle: yes
|
@@ -151,14 +150,13 @@ Word count: 2
|
|
151
150
|
Word size: 3
|
152
151
|
Beginning: l
|
153
152
|
Ending: x
|
154
|
-
=======
|
155
|
-
)
|
153
|
+
=======)
|
156
154
|
@cw.shuffle
|
157
155
|
@cw.word_count 2
|
158
156
|
@cw.word_size 3
|
159
157
|
@cw.ending_with('x')
|
160
158
|
@cw.beginning_with('l')
|
161
|
-
assert_equal temp, @cw.to_s
|
159
|
+
assert_equal temp, @cw.to_s.strip()
|
162
160
|
end
|
163
161
|
|
164
162
|
def test_wpm_defaults_to_25_if_unset
|
@@ -201,7 +199,7 @@ Ending: x
|
|
201
199
|
@cw.word_size 2
|
202
200
|
assert_equal ["of", "to", "in", "is", "it"] , @cw.words.first(5)
|
203
201
|
end
|
204
|
-
|
202
|
+
|
205
203
|
def test_beginning_with_returns_words_beginning_with_letter
|
206
204
|
@cw.beginning_with 'l'
|
207
205
|
assert_equal ["like", "look", "long", "little", "large"] , @cw.words.first(5)
|
@@ -249,13 +247,13 @@ Ending: x
|
|
249
247
|
assert_equal ["that", "with", "they", "this", "have"] , @cw.words.first(5)
|
250
248
|
end
|
251
249
|
|
252
|
-
def
|
253
|
-
@cw.
|
254
|
-
assert_equal
|
250
|
+
def test_words_fn_adds_words
|
251
|
+
@cw.words = "one two three four"
|
252
|
+
assert_equal "one two three four", @cw.words
|
255
253
|
end
|
256
254
|
|
257
|
-
def
|
258
|
-
@cw.
|
255
|
+
def test_words_fn_passes_in_an_array_of_words_as_is
|
256
|
+
@cw.words = ["one", "two", "three", "four"]
|
259
257
|
assert_equal ["one", "two", "three", "four"] , @cw.words
|
260
258
|
end
|
261
259
|
|
@@ -296,10 +294,10 @@ Ending: x
|
|
296
294
|
@cw.words.each { |w| assert_equal 4, w.length}
|
297
295
|
end
|
298
296
|
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
297
|
+
def test_random_numbers_returns_random_numbers
|
298
|
+
@cw.random_numbers
|
299
|
+
@cw.words.each { |w| assert_match /\A[-+]?\d+\z/ , w }
|
300
|
+
end
|
303
301
|
|
304
302
|
def test_random_letters_numbers_can_take_size_and_count_option
|
305
303
|
@cw.random_letters_numbers(count: 3, size: 4)
|
@@ -321,45 +319,38 @@ Ending: x
|
|
321
319
|
|
322
320
|
def test_alphabet_generates_alphabet
|
323
321
|
@cw.alphabet
|
324
|
-
assert_equal ["
|
322
|
+
assert_equal ["a b c d e f g h i j k l m n o p q r s t u v w x y z"], @cw.words
|
325
323
|
end
|
326
324
|
|
327
325
|
def test_alphabet_generates_reversed_alphabet
|
328
326
|
@cw.alphabet(reverse: true)
|
329
|
-
assert_equal ['
|
327
|
+
assert_equal ['z y x w v u t s r q p o n m l k j i h g f e d c b a'], @cw.words
|
330
328
|
end
|
331
329
|
|
332
330
|
def test_alphabet_shuffles_alphabet
|
333
331
|
@cw.alphabet(shuffle: true)
|
334
|
-
refute_equal ["
|
335
|
-
assert_equal "abcdefghijklmnopqrstuvwxyz", @cw.words.first.chars.sort.join
|
332
|
+
refute_equal ["a b c d e f g h i j k l m n o p q r s t u v w x y z"], @cw.words
|
333
|
+
assert_equal "abcdefghijklmnopqrstuvwxyz", @cw.words.first.chars.sort.join.strip
|
336
334
|
end
|
337
335
|
|
338
336
|
def test_reverse_reverses_words
|
339
|
-
@cw.
|
337
|
+
@cw.words = 'first then last'
|
340
338
|
@cw.reverse
|
341
|
-
assert_equal
|
339
|
+
assert_equal 'tsal neht tsrif', @cw.words
|
342
340
|
end
|
343
341
|
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
end
|
342
|
+
#todo
|
343
|
+
# def test_convert_generates_correct_command_for_default
|
344
|
+
# @cw.dry_run = true
|
345
|
+
# @cw.words = "some words"
|
346
|
+
# assert_equal "echo some words | ebook2cw -w 25 -o \"mp3_output\" ", @cw.convert
|
347
|
+
# end
|
351
348
|
|
352
|
-
def
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
end
|
357
|
-
|
358
|
-
def test_run_converts_and_plays
|
359
|
-
@cw.dry_run = true
|
360
|
-
@cw.assign_words "some words"
|
361
|
-
assert_equal 'played', @cw.run
|
362
|
-
end
|
349
|
+
# def test_run_converts_and_plays
|
350
|
+
# @cw.dry_run = true
|
351
|
+
# @cw.words = ["some", "words"]
|
352
|
+
# assert_equal 'played', @cw.run
|
353
|
+
# end
|
363
354
|
|
364
355
|
def test_frequency_returns_frequency
|
365
356
|
assert_equal 567, @cw.frequency(567)
|
@@ -367,19 +358,21 @@ Ending: x
|
|
367
358
|
assert_equal 456, @cw.frequency
|
368
359
|
end
|
369
360
|
|
370
|
-
|
371
|
-
|
372
|
-
@cw.
|
373
|
-
|
374
|
-
|
361
|
+
#todo
|
362
|
+
# def test_play_builds_correct_command_for_default
|
363
|
+
# @cw.words = "some words"
|
364
|
+
# @cw.dry_run = true
|
365
|
+
# assert_equal "afplay mp3_output0000.mp3", @cw.play
|
366
|
+
# end
|
375
367
|
|
376
|
-
#
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
368
|
+
#todo
|
369
|
+
## def test_dot_ms_returns_correct_time_in_milliseconds
|
370
|
+
## assert_in_delta(0.1, @cw.dot_ms(12), 0.001)
|
371
|
+
## end
|
372
|
+
##
|
373
|
+
## def test_space_ms_returns_correct_time_in_milliseconds
|
374
|
+
## assert_in_delta(0.3, @cw.space_ms(12), 0.001)
|
375
|
+
## end
|
383
376
|
|
384
377
|
def test_method_aliases
|
385
378
|
assert @cw.method(:word_length), @cw.method(:word_size)
|
@@ -396,132 +389,129 @@ Ending: x
|
|
396
389
|
assert @cw.method(:no_run), @cw.method(:pause)
|
397
390
|
end
|
398
391
|
|
399
|
-
def
|
392
|
+
def test_set_wpm_param
|
400
393
|
@cw.wpm 33
|
401
|
-
assert @cw.
|
394
|
+
assert @cw.cl.cl_wpm == '-w 33 ', 'wpm param invalid'
|
402
395
|
end
|
403
396
|
|
404
|
-
def
|
397
|
+
def test_set_ewpm_param
|
405
398
|
@cw.effective_wpm 33
|
406
|
-
assert @cw.
|
399
|
+
assert @cw.cl.cl_effective_wpm == '-e 33 ', 'effective_wpm param invalid'
|
407
400
|
end
|
408
401
|
|
409
|
-
def
|
402
|
+
def test_set_word_spacing_W_param
|
410
403
|
@cw.word_spacing 2
|
411
|
-
assert @cw.
|
404
|
+
assert @cw.cl.cl_word_spacing == '-W 2 ', 'word_spacing param invalid'
|
412
405
|
end
|
413
406
|
|
414
|
-
def
|
407
|
+
def test_set_freq_f_param
|
415
408
|
@cw.frequency 800
|
416
|
-
assert @cw.
|
409
|
+
assert @cw.cl.cl_frequency == '-f 800 ', 'frequency param invalid'
|
417
410
|
end
|
418
411
|
|
419
|
-
def
|
412
|
+
def test_set_squarewave_param
|
420
413
|
@cw.set_tone_type :squarewave
|
421
|
-
assert @cw.
|
414
|
+
assert @cw.cl.cl_squarewave == '-T 2 ', 'squarewave param invalid'
|
422
415
|
end
|
423
416
|
|
424
|
-
def
|
417
|
+
def test_set_sawtooth_param
|
425
418
|
@cw.set_tone_type :sawtooth
|
426
|
-
assert @cw.
|
419
|
+
assert @cw.cl.cl_sawtooth == '-T 1 ', 'sawtooth param invalid'
|
427
420
|
end
|
428
421
|
|
429
|
-
def
|
422
|
+
def test_set_sinewave_param
|
430
423
|
@cw.set_tone_type :sinewave
|
431
|
-
assert @cw.
|
424
|
+
assert @cw.cl.cl_sinewave == '-T 0 ', 'sinewave param invalid'
|
432
425
|
end
|
433
426
|
|
434
427
|
def test_build_build_cl_ignores_invalid_tone_type
|
435
428
|
@cw.set_tone_type :sinewave
|
436
429
|
@cw.set_tone_type :invalid
|
437
|
-
assert @cw.
|
430
|
+
assert @cw.cl.cl_sinewave == '-T 0 ', 'not ignoring invalid tone type'
|
438
431
|
end
|
439
432
|
|
440
|
-
def
|
433
|
+
def test_set_author_param
|
441
434
|
@cw.author 'some author'
|
442
|
-
assert @cw.
|
435
|
+
assert @cw.cl.cl_author == '-a "some author" ', 'author param invalid'
|
443
436
|
end
|
444
437
|
|
445
|
-
def
|
438
|
+
def test_set_title_param
|
446
439
|
@cw.title 'some title'
|
447
|
-
assert @cw.
|
440
|
+
assert @cw.cl.cl_title == '-t "some title" ', 'title param invalid'
|
448
441
|
end
|
449
442
|
|
450
|
-
def
|
443
|
+
def test_set_N_param_in_noise_mode
|
451
444
|
@cw.noise
|
452
|
-
assert @cw.
|
445
|
+
assert @cw.cl.cl_noise.include?('-N 5 '), 'noise N param invalid'
|
453
446
|
end
|
454
447
|
|
455
|
-
def
|
448
|
+
def test_set_B_param_in_noise_mode
|
456
449
|
@cw.noise
|
457
|
-
assert @cw.
|
450
|
+
assert @cw.cl.cl_noise.include?('-B 1000 '), 'noise B param invalid'
|
458
451
|
end
|
459
452
|
|
460
|
-
def
|
461
|
-
assert @cw.
|
453
|
+
def test_set_default_filename
|
454
|
+
assert @cw.cl.cl_audio_filename.include?('audio_output.wav'), 'default audio output filename invalid'
|
462
455
|
end
|
463
456
|
|
464
|
-
def
|
465
|
-
@cw.
|
466
|
-
assert @cw.
|
457
|
+
def test_set_audio_filename_to_given_name
|
458
|
+
@cw.audio_filename('some name')
|
459
|
+
assert @cw.cl.cl_audio_filename.include?("some name"), 'default audio filename invalid'
|
467
460
|
end
|
468
461
|
|
469
|
-
|
470
|
-
# cl = Cl.new(mp3_filename: "some name")
|
471
|
-
# cw = CW.new do
|
472
|
-
# name 'some name'
|
473
|
-
# no_run
|
474
|
-
# end
|
475
|
-
# assert cw.build_build_cl.include?('-o "some name" '), 'prefix mp3 filename invalid'
|
476
|
-
# end
|
477
|
-
|
478
|
-
def test_build_build_cl_sets_q_param_when_numeric_quality
|
462
|
+
def test_set_q_param_when_numeric_quality
|
479
463
|
@cw.quality 5
|
480
|
-
assert @cw.
|
464
|
+
assert @cw.cl.cl_quality.include?('-q 5 '), 'audio quality invalid'
|
481
465
|
end
|
482
466
|
|
483
|
-
def
|
467
|
+
def test_set_low_quality
|
484
468
|
@cw.quality :low
|
485
|
-
assert @cw.
|
469
|
+
assert @cw.cl.cl_quality.include?('-q 9 '), 'audio low quality invalid'
|
486
470
|
end
|
487
471
|
|
488
|
-
def
|
472
|
+
def test_set_medium_quality
|
489
473
|
@cw.quality :medium
|
490
|
-
assert @cw.
|
474
|
+
assert @cw.cl.cl_quality.include?('-q 5 '), 'audio medium quality invalid'
|
491
475
|
end
|
492
476
|
|
493
|
-
def
|
477
|
+
def test_set_high_quality
|
494
478
|
@cw.quality :high
|
495
|
-
assert @cw.
|
479
|
+
assert @cw.cl.cl_quality.include?('-q 1 '), 'audio high quality invalid'
|
496
480
|
end
|
497
481
|
|
498
482
|
def test_build_command_includes_custom_commands_via_build_cl
|
499
483
|
@cw.command_line '-x "some custom command"'
|
500
|
-
assert @cw.
|
484
|
+
assert @cw.cl.cl_command_line.include?( '-x "some custom command"'), 'custom command invalid'
|
501
485
|
end
|
502
486
|
|
503
487
|
def test_cl_echo_returns_correct_string
|
504
488
|
str = ''
|
505
489
|
CW.new do
|
506
|
-
str = @cl.cl_echo
|
490
|
+
str = @cl.cl_echo('some words')
|
507
491
|
pause
|
508
492
|
end
|
509
|
-
|
493
|
+
assert str.include?('echo some words | ebook2cw -w 25')
|
510
494
|
end
|
511
495
|
|
512
496
|
def test_words_exist
|
513
497
|
temp = nil
|
514
498
|
CW.new do
|
515
|
-
|
516
|
-
temp =
|
499
|
+
words = 'some words added here'
|
500
|
+
temp = words
|
501
|
+
pause
|
502
|
+
end
|
503
|
+
assert_equal(4, temp.split.size)
|
504
|
+
CW.new do
|
505
|
+
@words.add 'a couple of words'
|
506
|
+
temp = words
|
517
507
|
pause
|
518
508
|
end
|
519
|
-
|
509
|
+
assert_equal(4, temp.split.size)
|
520
510
|
CW.new do
|
521
511
|
@words.add nil
|
522
|
-
temp =
|
512
|
+
temp = words
|
523
513
|
pause
|
524
514
|
end
|
525
|
-
|
515
|
+
assert_nil(temp)
|
526
516
|
end
|
527
517
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cw
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martyn Jago
|
@@ -9,7 +9,133 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
date: 2016-05-21 00:00:00.000000000 Z
|
12
|
-
dependencies:
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: wavefile
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: paint
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: feedjira
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: htmlentities
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: sanitize
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: ruby-progressbar
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rake
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: minitest
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: simplecov
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
13
139
|
description: A ruby library to help learn and practice morse code
|
14
140
|
email:
|
15
141
|
- martyn.jago@btinternet.com
|