mac-say 0.2.1 → 0.2.2
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 +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
|

|
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
|