mac-say 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/LICENSE.txt +1 -1
- data/README.md +17 -4
- data/img/voices_manual.png +0 -0
- data/lib/mac/say/version.rb +1 -1
- data/lib/mac/say/voices_attributes.rb +14 -1
- data/mac-say.gemspec +11 -11
- data/test/test_mac-say.rb +48 -49
- metadata +25 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7fbd8952d1388b8784f78db4baf677ccb88da4219377fd2b268a0d843b3cb04a
|
4
|
+
data.tar.gz: f0e497209c8b6f9b5e3e29d3b2adcab49c5376e2a6c9613375dbe66dd0aa1af6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: efac1b9b152281063b8540cab4d88e7561f405a3edf560409b808b061f0b410fe6bad88b3db857bb6eff83b070a0280d1220e6920e9852e6f26fb3a4881d36ca
|
7
|
+
data.tar.gz: 4de62bb491c7bb0fdd6c8311b5d7cf2d905a78c0fe0a1479ee3a7d32e8926028960e1714a191e7c5d6b8a8a63f406a4d526f2bf41e27bbdacf93a365daf590cb
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -203,17 +203,21 @@ rescue Mac::Say::UnknownVoiceAttribute => e
|
|
203
203
|
end
|
204
204
|
```
|
205
205
|
|
206
|
-
## Installing & Updating MacOS TTS Voices
|
206
|
+
## Installing & Updating MacOS TTS Voices (MacOS 12.2+)
|
207
207
|
|
208
|
-
Open `System Preferences` using Spotlight / Alfred / Dock and follow text or visual instructions:
|
208
|
+
Open `System Preferences` using Menu / Spotlight / Alfred / Dock and follow text or visual instructions:
|
209
209
|
|
210
210
|
```
|
211
|
-
System Preferences → Accessibility →
|
211
|
+
System Preferences → Accessibility → Spoken Content → System Voice →
|
212
212
|
→ Customize… → (select voices) → OK → (Wait for download…)
|
213
213
|
```
|
214
214
|
|
215
215
|
![Installing & Updating MacOS TTS Voices](./img/voices_manual.png)
|
216
216
|
|
217
|
+
## Caveats
|
218
|
+
|
219
|
+
- All the `Siri...` voices you might see in the system voices list are not available in `say`, that's why you can not user them
|
220
|
+
|
217
221
|
## Dev Notes
|
218
222
|
|
219
223
|
```sh
|
@@ -239,8 +243,17 @@ $ bundle exec m
|
|
239
243
|
$ bundle exec m ./test/test_mac-say.rb:34
|
240
244
|
```
|
241
245
|
|
246
|
+
__Additionally to update dependencies I use my [one-liner](https://gist.github.com/smileart/9d1d17e9da8cba19f792304fd4b0e58d).__
|
247
|
+
|
248
|
+
```
|
249
|
+
# A snippet to look for any new/unknown voices and test their attributes
|
250
|
+
pp Mac::Say.voices.select {|v| v[:gender].nil? }
|
251
|
+
talker = Mac::Say.new(voice: :rishi)
|
252
|
+
talker.say string: 'Hello, my name is Rishi. I am an Indian-English voice.'
|
253
|
+
```
|
254
|
+
|
242
255
|
## Copyright
|
243
256
|
|
244
|
-
Copyright (c)
|
257
|
+
Copyright (c) 2022 Serge Bedzhyk
|
245
258
|
|
246
259
|
See [LICENSE.txt](./LICENSE.txt) for details.
|
data/img/voices_manual.png
CHANGED
Binary file
|
data/lib/mac/say/version.rb
CHANGED
@@ -3,9 +3,10 @@
|
|
3
3
|
#
|
4
4
|
# @note Unfortunately information in system *.plist files
|
5
5
|
# e.g. /System/Library/Speech/Voices/<VoiceName>.SpeechVoice/Contents/Info.plist"
|
6
|
-
# is inconsistent, fragmentary and sometimes incorrect, but:
|
6
|
+
# is inconsistent, fragmentary and sometimes incorrect, but also keep in mind:
|
7
7
|
#
|
8
8
|
# WARNING: all the attributes values provided here are highly subjective!!!
|
9
|
+
#
|
9
10
|
ADDITIONAL_VOICE_ATTRIBUTES = {
|
10
11
|
_unknown_voice: {
|
11
12
|
gender: nil,
|
@@ -409,6 +410,12 @@ ADDITIONAL_VOICE_ATTRIBUTES = {
|
|
409
410
|
quality: :medium,
|
410
411
|
singing: false
|
411
412
|
},
|
413
|
+
neel: {
|
414
|
+
gender: :male,
|
415
|
+
joke: false,
|
416
|
+
quality: :medium,
|
417
|
+
singing: false
|
418
|
+
},
|
412
419
|
nicolas: {
|
413
420
|
gender: :male,
|
414
421
|
joke: false,
|
@@ -481,6 +488,12 @@ ADDITIONAL_VOICE_ATTRIBUTES = {
|
|
481
488
|
quality: :low,
|
482
489
|
singing: false
|
483
490
|
},
|
491
|
+
rishi: {
|
492
|
+
gender: :male,
|
493
|
+
joke: false,
|
494
|
+
quality: :low,
|
495
|
+
singing: false
|
496
|
+
},
|
484
497
|
samantha: {
|
485
498
|
gender: :female,
|
486
499
|
joke: false,
|
data/mac-say.gemspec
CHANGED
@@ -30,16 +30,16 @@ Gem::Specification.new do |gem|
|
|
30
30
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
31
31
|
gem.require_paths = ['lib']
|
32
32
|
|
33
|
-
gem.add_development_dependency 'bundler', '~>
|
34
|
-
gem.add_development_dependency 'minitest', '~> 5.
|
35
|
-
gem.add_development_dependency 'minitest-reporters', '~> 1.
|
36
|
-
gem.add_development_dependency 'rake', '~>
|
37
|
-
gem.add_development_dependency 'simplecov', '~> 0.
|
33
|
+
gem.add_development_dependency 'bundler', '~> 2.3'
|
34
|
+
gem.add_development_dependency 'minitest', '~> 5.15'
|
35
|
+
gem.add_development_dependency 'minitest-reporters', '~> 1.5'
|
36
|
+
gem.add_development_dependency 'rake', '~> 13.0'
|
37
|
+
gem.add_development_dependency 'simplecov', '~> 0.16'
|
38
38
|
gem.add_development_dependency 'rubygems-tasks', '~> 0.2'
|
39
|
-
gem.add_development_dependency 'yard', '~> 0.
|
40
|
-
gem.add_development_dependency 'inch', '~> 0.
|
41
|
-
gem.add_development_dependency 'redcarpet', '~> 3.
|
42
|
-
gem.add_development_dependency 'github-markup', '~>
|
43
|
-
gem.add_development_dependency 'm', '~> 1.
|
44
|
-
gem.add_development_dependency 'coveralls', '~> 0.8'
|
39
|
+
gem.add_development_dependency 'yard', '~> 0.9'
|
40
|
+
gem.add_development_dependency 'inch', '~> 0.8'
|
41
|
+
gem.add_development_dependency 'redcarpet', '~> 3.5'
|
42
|
+
gem.add_development_dependency 'github-markup', '~> 4.0'
|
43
|
+
gem.add_development_dependency 'm', '~> 1.6'
|
44
|
+
gem.add_development_dependency 'coveralls', '~> 0.8.23'
|
45
45
|
end
|
data/test/test_mac-say.rb
CHANGED
@@ -10,19 +10,19 @@ describe 'Mac::Say as a macOS `say` wrapper' do
|
|
10
10
|
end
|
11
11
|
|
12
12
|
it 'must have a VERSION constant' do
|
13
|
-
Mac::Say.const_get('VERSION').wont_be_empty
|
13
|
+
_(Mac::Say.const_get('VERSION')).wont_be_empty
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'must return available voices as an Array of Hashes' do
|
17
|
-
Mac::Say.voices.wont_be_empty
|
18
|
-
Mac::Say.voices.must_be_kind_of Array
|
17
|
+
_(Mac::Say.voices).wont_be_empty
|
18
|
+
_(Mac::Say.voices).must_be_kind_of Array
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'must return specific Hash structure for a voice' do
|
22
22
|
voice = Mac::Say.voice(:name, :alex)
|
23
|
-
voice.wont_be_empty
|
24
|
-
voice.must_be_kind_of Hash
|
25
|
-
voice.keys.must_equal Mac::Say::VOICE_ATTRIBUTES
|
23
|
+
_(voice).wont_be_empty
|
24
|
+
_(voice).must_be_kind_of Hash
|
25
|
+
_(voice.keys).must_equal Mac::Say::VOICE_ATTRIBUTES
|
26
26
|
end
|
27
27
|
|
28
28
|
it 'must return additional attributes for known voices' do
|
@@ -30,52 +30,52 @@ describe 'Mac::Say as a macOS `say` wrapper' do
|
|
30
30
|
voice = Mac::Say.voice(:name, voice_name)
|
31
31
|
additional_voice_attributes = ADDITIONAL_VOICE_ATTRIBUTES[voice_name]
|
32
32
|
|
33
|
-
voice[:gender].must_equal additional_voice_attributes[:gender]
|
34
|
-
voice[:joke].must_equal additional_voice_attributes[:joke]
|
35
|
-
voice[:quality].must_equal additional_voice_attributes[:quality]
|
33
|
+
_(voice[:gender]).must_equal additional_voice_attributes[:gender]
|
34
|
+
_(voice[:joke]).must_equal additional_voice_attributes[:joke]
|
35
|
+
_(voice[:quality]).must_equal additional_voice_attributes[:quality]
|
36
36
|
end
|
37
37
|
|
38
38
|
it '.voice must search for a voice using single attribute' do
|
39
39
|
voice = Mac::Say.voice(:name, :alex)
|
40
|
-
voice[:name].must_equal :alex
|
40
|
+
_(voice[:name]).must_equal :alex
|
41
41
|
end
|
42
42
|
|
43
43
|
it '.voice must search for a voice using block given' do
|
44
44
|
voices = Mac::Say.voice {|voice| voice[:language] == :en && voice[:joke] == false }
|
45
|
-
voices.must_be_kind_of Array
|
45
|
+
_(voices).must_be_kind_of Array
|
46
46
|
end
|
47
47
|
|
48
48
|
it '.voice must return one voice as a Hash' do
|
49
49
|
voice = Mac::Say.voice(:name, :alex)
|
50
|
-
voice.must_be_kind_of Hash
|
50
|
+
_(voice).must_be_kind_of Hash
|
51
51
|
end
|
52
52
|
|
53
53
|
# For this test to pass you'd have to have more than
|
54
54
|
# one British voice on your machine!
|
55
55
|
it '.voice must return an Array of voices if > 1' do
|
56
56
|
voices = Mac::Say.voice(:country, :gb)
|
57
|
-
voices.must_be_kind_of Array
|
57
|
+
_(voices).must_be_kind_of Array
|
58
58
|
end
|
59
59
|
|
60
60
|
it ".voice must return nil if voice wasn't found" do
|
61
61
|
voices = Mac::Say.voice(:name, :xxx)
|
62
|
-
voices.must_be_nil
|
62
|
+
_(voices).must_be_nil
|
63
63
|
end
|
64
64
|
|
65
65
|
|
66
66
|
it '.say must return 0 in successive speech' do
|
67
67
|
expectation = ["#{@say_path} -v 'alex' -r 175", 0]
|
68
|
-
Mac::Say.say('42').must_equal expectation
|
68
|
+
_(Mac::Say.say('42')).must_equal expectation
|
69
69
|
end
|
70
70
|
|
71
71
|
it '.say must use custom voice' do
|
72
72
|
expectation = ["#{@say_path} -v 'alex' -r 175", 0]
|
73
|
-
Mac::Say.say('42', :alex).must_equal expectation
|
73
|
+
_(Mac::Say.say('42', :alex)).must_equal expectation
|
74
74
|
end
|
75
75
|
|
76
76
|
it '.say must work with multiple lines' do
|
77
77
|
expectation = ["#{@say_path} -v 'alex' -r 175", 0]
|
78
|
-
Mac::Say.say(<<-TEXT, :alex).must_equal expectation
|
78
|
+
_(Mac::Say.say(<<-TEXT, :alex)).must_equal expectation
|
79
79
|
1
|
80
80
|
2
|
81
81
|
3
|
@@ -83,13 +83,13 @@ describe 'Mac::Say as a macOS `say` wrapper' do
|
|
83
83
|
end
|
84
84
|
|
85
85
|
it '.say must fail on wrong voice' do
|
86
|
-
|
86
|
+
_{
|
87
87
|
Mac::Say.say 'OMG! I lost my voice!', :wrong
|
88
88
|
}.must_raise Mac::Say::VoiceNotFound
|
89
89
|
end
|
90
90
|
|
91
91
|
it '.voice must fail on wrong voice attribute' do
|
92
|
-
|
92
|
+
_{
|
93
93
|
Mac::Say.voice(:tone, :enthusiastic)
|
94
94
|
}.must_raise Mac::Say::UnknownVoiceAttribute
|
95
95
|
end
|
@@ -102,24 +102,24 @@ describe 'Mac::Say as a macOS `say` wrapper' do
|
|
102
102
|
end
|
103
103
|
|
104
104
|
it 'must instantiate Mac::Say' do
|
105
|
-
@reader.must_be_instance_of Mac::Say
|
105
|
+
_(@reader).must_be_instance_of Mac::Say
|
106
106
|
end
|
107
107
|
|
108
108
|
it '#say must return 0 on successive speech' do
|
109
109
|
expectation = ["#{@say_path} -v 'alex' -r 175", 0]
|
110
|
-
@reader.say(string: '42').must_equal expectation
|
110
|
+
_(@reader.say(string: '42')).must_equal expectation
|
111
111
|
end
|
112
112
|
|
113
113
|
it '#read must be a synonym of #say' do
|
114
114
|
expectation = ["#{@say_path} -v 'alex' -r 175", 0]
|
115
|
-
@reader.read(string: '42').must_equal expectation
|
115
|
+
_(@reader.read(string: '42')).must_equal expectation
|
116
116
|
end
|
117
117
|
|
118
118
|
it '#say must support :file' do
|
119
119
|
absolute_path = File.absolute_path './fixtures/text/en_gb_test.txt', File.dirname(__FILE__)
|
120
120
|
expectation = ["#{@say_path} -f #{absolute_path} -v 'alex' -r 175", 0]
|
121
121
|
|
122
|
-
@reader.say(file: absolute_path).must_equal expectation
|
122
|
+
_(@reader.say(file: absolute_path)).must_equal expectation
|
123
123
|
end
|
124
124
|
|
125
125
|
it '#say must read :file from initial config' do
|
@@ -127,17 +127,16 @@ describe 'Mac::Say as a macOS `say` wrapper' do
|
|
127
127
|
expectation = ["#{@say_path} -f #{absolute_path} -v 'alex' -r 175", 0]
|
128
128
|
|
129
129
|
@reader = Mac::Say.new(file: absolute_path)
|
130
|
-
@reader.say.must_equal expectation
|
130
|
+
_(@reader.say).must_equal expectation
|
131
131
|
end
|
132
132
|
|
133
133
|
it 'must return nil additional attrs for unknown voices' do
|
134
134
|
if ENV['USE_FAKE_SAY']
|
135
135
|
voice = @reader.voice(:name, :test)
|
136
|
-
additional_voice_attributes = ADDITIONAL_VOICE_ATTRIBUTES[:test]
|
137
136
|
|
138
|
-
voice[:gender].must_be_nil
|
139
|
-
voice[:joke].must_be_nil
|
140
|
-
voice[:quality].must_be_nil
|
137
|
+
_(voice[:gender]).must_be_nil
|
138
|
+
_(voice[:joke]).must_be_nil
|
139
|
+
_(voice[:quality]).must_be_nil
|
141
140
|
end
|
142
141
|
end
|
143
142
|
|
@@ -149,90 +148,90 @@ describe 'Mac::Say as a macOS `say` wrapper' do
|
|
149
148
|
|
150
149
|
# init
|
151
150
|
@reader = Mac::Say.new(file: gb_absolute_path)
|
152
|
-
@reader.config[:file].must_equal gb_absolute_path
|
151
|
+
_(@reader.config[:file]).must_equal gb_absolute_path
|
153
152
|
|
154
153
|
# change
|
155
|
-
@reader.say(file: us_absolute_path).must_equal expectation
|
156
|
-
@reader.config[:file].must_equal us_absolute_path
|
154
|
+
_(@reader.say(file: us_absolute_path)).must_equal expectation
|
155
|
+
_(@reader.config[:file]).must_equal us_absolute_path
|
157
156
|
end
|
158
157
|
|
159
158
|
it '#say must prioritise :file over :string' do
|
160
159
|
absolute_path = File.absolute_path './fixtures/text/en_gb_test.txt', File.dirname(__FILE__)
|
161
160
|
expectation = ["#{@say_path} -f #{absolute_path} -v 'alex' -r 175", 0]
|
162
161
|
|
163
|
-
@reader.say(string: 'test', file: absolute_path).must_equal expectation
|
162
|
+
_(@reader.say(string: 'test', file: absolute_path)).must_equal expectation
|
164
163
|
end
|
165
164
|
|
166
165
|
it '#say must support custom :rate' do
|
167
166
|
expectation = ["#{@say_path} -v 'alex' -r 250", 0]
|
168
|
-
@reader.say(string: '42', rate: 250).must_equal expectation
|
167
|
+
_(@reader.say(string: '42', rate: 250)).must_equal expectation
|
169
168
|
end
|
170
169
|
|
171
170
|
it '#say must support custom :voice' do
|
172
171
|
expectation = ["#{@say_path} -v 'fiona' -r 175", 0]
|
173
|
-
@reader.say(string: '42', voice: :fiona).must_equal expectation
|
172
|
+
_(@reader.say(string: '42', voice: :fiona)).must_equal expectation
|
174
173
|
end
|
175
174
|
|
176
175
|
it '#say must change the :voice' do
|
177
176
|
expectation = ["#{@say_path} -v 'fiona' -r 175", 0]
|
178
|
-
@reader.config[:voice].must_equal :alex
|
177
|
+
_(@reader.config[:voice]).must_equal :alex
|
179
178
|
|
180
|
-
@reader.say(string: '42', voice: :fiona).must_equal expectation
|
181
|
-
@reader.config[:voice].must_equal :fiona
|
179
|
+
_(@reader.say(string: '42', voice: :fiona)).must_equal expectation
|
180
|
+
_(@reader.config[:voice]).must_equal :fiona
|
182
181
|
|
183
|
-
@reader.say(string: '13').must_equal expectation
|
182
|
+
_(@reader.say(string: '13')).must_equal expectation
|
184
183
|
end
|
185
184
|
|
186
185
|
it '#say must change the :rate' do
|
187
186
|
expectation = ["#{@say_path} -v 'alex' -r 300", 0]
|
188
|
-
@reader.config[:rate].must_equal 175
|
187
|
+
_(@reader.config[:rate]).must_equal 175
|
189
188
|
|
190
|
-
@reader.say(string: '42', rate: 300).must_equal expectation
|
191
|
-
@reader.config[:rate].must_equal 300
|
189
|
+
_(@reader.say(string: '42', rate: 300)).must_equal expectation
|
190
|
+
_(@reader.config[:rate]).must_equal 300
|
192
191
|
|
193
|
-
@reader.say(string: '13').must_equal expectation
|
192
|
+
_(@reader.say(string: '13')).must_equal expectation
|
194
193
|
end
|
195
194
|
|
196
195
|
it '#say must fail on wrong initial voice' do
|
197
|
-
|
196
|
+
_{
|
198
197
|
talker = Mac::Say.new(voice: :wrong)
|
199
198
|
talker.say string: 'OMG! I lost my voice!'
|
200
199
|
}.must_raise Mac::Say::VoiceNotFound
|
201
200
|
end
|
202
201
|
|
203
202
|
it '#say must fail on wrong dynamic voice' do
|
204
|
-
|
203
|
+
_{
|
205
204
|
talker = Mac::Say.new
|
206
205
|
talker.say string: 'OMG! I lost my voice!', voice: :wrong
|
207
206
|
}.must_raise Mac::Say::VoiceNotFound
|
208
207
|
end
|
209
208
|
|
210
209
|
it '#voice must fail on wrong say path' do
|
211
|
-
|
210
|
+
_{
|
212
211
|
Mac::Say.new(say_path: '/wrong/wrong/path').voice(:name, :alex)
|
213
212
|
}.must_raise Mac::Say::CommandNotFound
|
214
213
|
end
|
215
214
|
|
216
215
|
it '#say must fail on wrong say path' do
|
217
|
-
|
216
|
+
_{
|
218
217
|
Mac::Say.new(say_path: '/wrong/wrong/path').say 'test'
|
219
218
|
}.must_raise Mac::Say::CommandNotFound
|
220
219
|
end
|
221
220
|
|
222
221
|
it '#say must fail on wrong file path' do
|
223
|
-
|
222
|
+
_{
|
224
223
|
Mac::Say.new.say(file: '/wrong/wrong/path')
|
225
224
|
}.must_raise Mac::Say::FileNotFound
|
226
225
|
end
|
227
226
|
|
228
227
|
it '#voice must fail on wrong attribute' do
|
229
|
-
|
228
|
+
_{
|
230
229
|
Mac::Say.new.voice(:articulation, :nostalgic)
|
231
230
|
}.must_raise Mac::Say::UnknownVoiceAttribute
|
232
231
|
end
|
233
232
|
|
234
233
|
it '#say must fail on initial wrong file path' do
|
235
|
-
|
234
|
+
_{
|
236
235
|
Mac::Say.new(file: '/wrong/wrong/path').say
|
237
236
|
}.must_raise Mac::Say::FileNotFound
|
238
237
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mac-say
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Serge Bedzhyk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,70 +16,70 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '2.3'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '2.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: minitest
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '5.
|
33
|
+
version: '5.15'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '5.
|
40
|
+
version: '5.15'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: minitest-reporters
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '1.
|
47
|
+
version: '1.5'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '1.
|
54
|
+
version: '1.5'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '13.0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '13.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: simplecov
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '0.
|
75
|
+
version: '0.16'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '0.
|
82
|
+
version: '0.16'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: rubygems-tasks
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -100,84 +100,84 @@ dependencies:
|
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: 0.
|
103
|
+
version: '0.9'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: 0.
|
110
|
+
version: '0.9'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: inch
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 0.
|
117
|
+
version: '0.8'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: 0.
|
124
|
+
version: '0.8'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: redcarpet
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - "~>"
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: '3.
|
131
|
+
version: '3.5'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: '3.
|
138
|
+
version: '3.5'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: github-markup
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
143
|
- - "~>"
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version: '
|
145
|
+
version: '4.0'
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
150
|
- - "~>"
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version: '
|
152
|
+
version: '4.0'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: m
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
157
|
- - "~>"
|
158
158
|
- !ruby/object:Gem::Version
|
159
|
-
version: '1.
|
159
|
+
version: '1.6'
|
160
160
|
type: :development
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
164
|
- - "~>"
|
165
165
|
- !ruby/object:Gem::Version
|
166
|
-
version: '1.
|
166
|
+
version: '1.6'
|
167
167
|
- !ruby/object:Gem::Dependency
|
168
168
|
name: coveralls
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
170
170
|
requirements:
|
171
171
|
- - "~>"
|
172
172
|
- !ruby/object:Gem::Version
|
173
|
-
version:
|
173
|
+
version: 0.8.23
|
174
174
|
type: :development
|
175
175
|
prerelease: false
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
178
178
|
- - "~>"
|
179
179
|
- !ruby/object:Gem::Version
|
180
|
-
version:
|
180
|
+
version: 0.8.23
|
181
181
|
description: Ruby wrapper around the modern version of the macOS `say` command. Inspired
|
182
182
|
by the @bratta's mactts
|
183
183
|
email: smileart21@gmail.com
|
@@ -229,8 +229,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
229
229
|
- !ruby/object:Gem::Version
|
230
230
|
version: '0'
|
231
231
|
requirements: []
|
232
|
-
|
233
|
-
rubygems_version: 2.6.11
|
232
|
+
rubygems_version: 3.1.4
|
234
233
|
signing_key:
|
235
234
|
specification_version: 4
|
236
235
|
summary: Ruby wrapper around the macOS `say` command
|