talks 0.0.3 → 0.0.4
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/README.md +22 -3
- data/lib/talks.rb +25 -23
- data/lib/talks/configuration.rb +55 -0
- data/lib/talks/runner.rb +20 -0
- data/lib/talks/version.rb +1 -1
- data/spec/talks.rb +14 -1
- metadata +4 -3
- data/Gemfile.lock +0 -14
data/README.md
CHANGED
@@ -1,11 +1,13 @@
|
|
1
|
-
# Talks gem — now your ruby
|
1
|
+
# Talks gem — now your ruby can talk with you
|
2
2
|
|
3
|
-
###
|
3
|
+
### Now it works only on MacOS X, soon we'll add support for linux and maybe windows through eSpeak or festival
|
4
4
|
|
5
|
-
|
5
|
+
### This is beta now
|
6
6
|
|
7
7
|
If you want to HEAR some response from your code, just use this gem.
|
8
8
|
|
9
|
+
Sponsored by Evil Martians <http://evilmartians.com>
|
10
|
+
|
9
11
|
## Why?
|
10
12
|
|
11
13
|
For example - some really long task and you just get some coffee, read book or surf internet
|
@@ -17,6 +19,23 @@ choose from MacOS X `say` function collection.
|
|
17
19
|
|
18
20
|
This gem just using native MacOS X `say` command line tool.
|
19
21
|
|
22
|
+
### Configuration
|
23
|
+
|
24
|
+
You can configure default voices and messages for `talks` with `~/.talksrc` file. It should be written in YAML format:
|
25
|
+
|
26
|
+
`~/.talksrc`
|
27
|
+
```yml
|
28
|
+
default_voice: 'whisper'
|
29
|
+
voices:
|
30
|
+
info: 'pipe'
|
31
|
+
messages:
|
32
|
+
info: 'hello'
|
33
|
+
warn: 'WE GONNA DIE!!!'
|
34
|
+
```
|
35
|
+
|
36
|
+
The same you can do in your code dynamicly through Talks.config instance.
|
37
|
+
Soon I'll add configuration with dotfile project-wide.
|
38
|
+
|
20
39
|
### Using talks in your code
|
21
40
|
|
22
41
|
```bash
|
data/lib/talks.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require File.expand_path('../talks/configuration.rb', __FILE__)
|
2
|
+
|
1
3
|
module Talks
|
2
4
|
class << self
|
3
5
|
|
@@ -7,19 +9,12 @@ module Talks
|
|
7
9
|
trinoids vicki victoria whisper zarvox
|
8
10
|
)
|
9
11
|
|
10
|
-
|
11
|
-
info: 'vicki',
|
12
|
-
warn: 'whisper',
|
13
|
-
success: 'vicki',
|
14
|
-
error: 'bad'
|
15
|
-
}
|
12
|
+
TYPES = [:info, :warn, :success, :error]
|
16
13
|
|
17
|
-
|
18
|
-
@voice ||= :info
|
19
|
-
end
|
14
|
+
attr :config
|
20
15
|
|
21
|
-
def
|
22
|
-
@
|
16
|
+
def configure(options)
|
17
|
+
@config = Talks::Configuration.new(options)
|
23
18
|
end
|
24
19
|
|
25
20
|
def voices
|
@@ -27,23 +22,30 @@ module Talks
|
|
27
22
|
end
|
28
23
|
|
29
24
|
def say(message, options = {})
|
30
|
-
type = options[:type]
|
31
|
-
say_voice
|
32
|
-
if options[:voice] and VOICES.include?(options[:voice].to_s)
|
33
|
-
options[:voice]
|
34
|
-
elsif PREFS.keys.include? type
|
35
|
-
PREFS[type]
|
36
|
-
else
|
37
|
-
PREFS[voice]
|
38
|
-
end
|
39
|
-
`say -v #{say_voice} #{message}`
|
25
|
+
type = options[:type] || :default
|
26
|
+
`say -v #{say_voice(type, options)} #{message}`
|
40
27
|
end
|
41
28
|
|
42
|
-
|
43
|
-
define_method type do |message, options = {type: type}|
|
29
|
+
TYPES.each do |type|
|
30
|
+
define_method type do |message = nil, options = {type: type}|
|
31
|
+
message ||= config.message(type)
|
44
32
|
say(message, options)
|
45
33
|
end
|
46
34
|
end
|
47
35
|
|
36
|
+
private
|
37
|
+
|
38
|
+
def say_voice(type, options)
|
39
|
+
if options[:voice] and VOICES.include?(options[:voice].to_s)
|
40
|
+
options[:voice]
|
41
|
+
elsif TYPES.include? type
|
42
|
+
config.voice type
|
43
|
+
else
|
44
|
+
config.default_voice
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
48
|
end
|
49
49
|
end
|
50
|
+
|
51
|
+
require File.expand_path('../talks/runner.rb', __FILE__)
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module Talks
|
4
|
+
class Configuration
|
5
|
+
|
6
|
+
DEFAULT_VOICES = {
|
7
|
+
info: 'vicki',
|
8
|
+
warn: 'whisper',
|
9
|
+
success: 'vicki',
|
10
|
+
error: 'bad'
|
11
|
+
}
|
12
|
+
|
13
|
+
DEFAULT_MESSAGES = {
|
14
|
+
info: 'Information note',
|
15
|
+
warn: 'Warning',
|
16
|
+
success: 'Success',
|
17
|
+
error: 'Error'
|
18
|
+
}
|
19
|
+
|
20
|
+
attr_accessor :voices, :messages, :default_voice, :options
|
21
|
+
|
22
|
+
def initialize(opts)
|
23
|
+
@options = symbolize_hash_keys(opts)
|
24
|
+
@default_voice = options[:default_voice] || 'vicki'
|
25
|
+
@voices = options[:voices] && DEFAULT_VOICES.merge(options[:voices]) ||
|
26
|
+
DEFAULT_VOICES
|
27
|
+
@messages = options[:messages] && DEFAULT_MESSAGES.merge(options[:messages]) ||
|
28
|
+
DEFAULT_MESSAGES
|
29
|
+
end
|
30
|
+
|
31
|
+
def voice(type)
|
32
|
+
voices[type] if voices.keys.include?(type)
|
33
|
+
end
|
34
|
+
|
35
|
+
def message(type)
|
36
|
+
messages[type] if messages.keys.include?(type)
|
37
|
+
end
|
38
|
+
|
39
|
+
def talk(type)
|
40
|
+
[message(type), voice(type)]
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def symbolize_hash_keys(opts)
|
46
|
+
sym_opts = {}
|
47
|
+
opts.each do |key, value|
|
48
|
+
sym_opts[key.to_sym] = \
|
49
|
+
value.is_a?(Hash) ? symbolize_hash_keys(value) : value
|
50
|
+
end
|
51
|
+
sym_opts
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
data/lib/talks/runner.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# What file is used for talks startup configuration.
|
2
|
+
unless defined?(OPTS_INITFILE)
|
3
|
+
if RUBY_PLATFORM =~ /mswin/
|
4
|
+
# Of course MS Windows has to be different
|
5
|
+
OPTS_INITFILE = 'talks.ini'
|
6
|
+
HOME_DIR = (ENV['HOME'] ||
|
7
|
+
ENV['HOMEDRIVE'].to_s + ENV['HOMEPATH'].to_s).to_s
|
8
|
+
else
|
9
|
+
OPTS_INITFILE = '.talksrc'
|
10
|
+
HOME_DIR = ENV['HOME'].to_s
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
initfile = File.join(HOME_DIR, OPTS_INITFILE)
|
15
|
+
|
16
|
+
if File.exist?(initfile)
|
17
|
+
Talks.configure(YAML.load_file(initfile))
|
18
|
+
else
|
19
|
+
Talks.configure({})
|
20
|
+
end
|
data/lib/talks/version.rb
CHANGED
data/spec/talks.rb
CHANGED
@@ -2,11 +2,24 @@ require File.expand_path('../../lib/talks.rb', __FILE__)
|
|
2
2
|
|
3
3
|
Talks.voices.each do |v|
|
4
4
|
p v
|
5
|
-
Talks.say 'Tests start',
|
5
|
+
Talks.say 'Tests start', voice: v
|
6
6
|
end
|
7
7
|
|
8
|
+
p 'say `say`'
|
8
9
|
Talks.say 'say'
|
10
|
+
p 'info `say again`'
|
9
11
|
Talks.info 'say again'
|
12
|
+
p 'warn `I warn you`'
|
10
13
|
Talks.warn 'I warn you'
|
14
|
+
p 'error `This is how error sounds`'
|
11
15
|
Talks.error 'This is how error sounds'
|
16
|
+
p 'success `This is success!`'
|
12
17
|
Talks.success 'This is success!'
|
18
|
+
p 'info `default`'
|
19
|
+
Talks.info
|
20
|
+
p 'warn `default`'
|
21
|
+
Talks.warn
|
22
|
+
p 'warn `error`'
|
23
|
+
Talks.error
|
24
|
+
p 'warn `success`'
|
25
|
+
Talks.success
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: talks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-05-
|
12
|
+
date: 2012-05-23 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Simple gem for `say` function of mac os x
|
15
15
|
email:
|
@@ -20,10 +20,11 @@ extra_rdoc_files: []
|
|
20
20
|
files:
|
21
21
|
- CHANGELOG.md
|
22
22
|
- Gemfile
|
23
|
-
- Gemfile.lock
|
24
23
|
- README.md
|
25
24
|
- Rakefile
|
26
25
|
- lib/talks.rb
|
26
|
+
- lib/talks/configuration.rb
|
27
|
+
- lib/talks/runner.rb
|
27
28
|
- lib/talks/version.rb
|
28
29
|
- spec/talks.rb
|
29
30
|
- talks.gemspec
|