talks 0.0.5 → 0.1.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/CHANGELOG.md +4 -0
- data/README.md +57 -3
- data/bin/talking +10 -0
- data/bin/talks +3 -0
- data/lib/talks.rb +5 -0
- data/lib/talks/configuration.rb +16 -0
- data/lib/talks/hooks.rb +74 -0
- data/lib/talks/version.rb +1 -1
- metadata +8 -3
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
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
|
-
### This is beta now
|
5
|
+
### This is beta now. Specs are really needed.
|
6
6
|
|
7
7
|
If you want to HEAR some response from your code, just use this gem.
|
8
8
|
|
@@ -15,6 +15,12 @@ and you want to know when this task will ends, but don't want to check your mac
|
|
15
15
|
you can just add small hook in the end of your code and when it will ends - you will hear it with voice that you
|
16
16
|
choose from MacOS X `say` function collection.
|
17
17
|
|
18
|
+
You can find some examples of `talks` usage in organization [ruby-talks](https://github.com/ruby-talks):
|
19
|
+
|
20
|
+
* [rails-talks](https://github.com/ruby-talks/rails-talks)
|
21
|
+
* [bundler-talks](https://github.com/ruby-talks/bundler-talks)
|
22
|
+
* [spec-talks](https://github.com/ruby-talks/spec-talks)
|
23
|
+
|
18
24
|
## How?
|
19
25
|
|
20
26
|
This gem just using native MacOS X `say` command line tool.
|
@@ -36,6 +42,50 @@ messages:
|
|
36
42
|
The same you can do in your code dynamicly through Talks.config instance.
|
37
43
|
You can configure now only default voice for `say` method and voices and messages for 4 types of talks: `info, warn, success, error`
|
38
44
|
|
45
|
+
For command-line commands you can configure default voices and hook messages:
|
46
|
+
|
47
|
+
`~/.talksrc`
|
48
|
+
```yml
|
49
|
+
bundle:
|
50
|
+
voice: 'vicki'
|
51
|
+
before_message: 'Bundler again will do all right'
|
52
|
+
after_message: "Bundler's job is done here"
|
53
|
+
```
|
54
|
+
|
55
|
+
You can create your own default preferences for each command-line tool which you want to run with `talks` or `talking` command in front:
|
56
|
+
|
57
|
+
`~/.talksrc`
|
58
|
+
```yml
|
59
|
+
ls:
|
60
|
+
voice: 'bad'
|
61
|
+
before_message: 'Now we will see what in the directory'
|
62
|
+
after_message: ''
|
63
|
+
cap:
|
64
|
+
...
|
65
|
+
vim:
|
66
|
+
...
|
67
|
+
scp:
|
68
|
+
...
|
69
|
+
... and etc
|
70
|
+
```
|
71
|
+
|
72
|
+
### Using talks/talking command-line tool
|
73
|
+
|
74
|
+
`talks` or `talking` command-line tool wrap your command-line commands with talks hooks:
|
75
|
+
|
76
|
+
```bash
|
77
|
+
$ talking bundle install
|
78
|
+
```
|
79
|
+
|
80
|
+
After that `talks` will wrap execution of this command with voice messages. By default messages will be like 'command_name task started/ended'.
|
81
|
+
You can preconfigure messages in your `~/.talksrc` file or you can send options right in talking command:
|
82
|
+
|
83
|
+
```bash
|
84
|
+
$ talking -v agnes -bm 'We gonna die!' -am 'Not sure if we can hear that' rm -rf ./
|
85
|
+
# the same
|
86
|
+
$ talking --voice agnes --before-message 'We...' --after-message 'Not...' rm -rf ./
|
87
|
+
```
|
88
|
+
|
39
89
|
### Using talks in your code
|
40
90
|
|
41
91
|
```bash
|
@@ -74,14 +124,18 @@ VOICES = %w(
|
|
74
124
|
|
75
125
|
## Who?
|
76
126
|
|
77
|
-
I did it myself
|
127
|
+
I did it by myself
|
78
128
|
|
79
129
|
### Contributors
|
80
130
|
|
81
|
-
* @gazay
|
131
|
+
* @gazay
|
82
132
|
|
83
133
|
### A lot of thanks
|
84
134
|
|
135
|
+
* @aderyabin - idea of extended customization of talks is his.
|
136
|
+
|
137
|
+
* @brainopia - bro helps me with any my idea. He adviced me to do command line tool talks.
|
138
|
+
|
85
139
|
You can help me with this fun gem and I'll gladly add you here, or above
|
86
140
|
|
87
141
|
## License
|
data/bin/talking
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
talks_dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
|
4
|
+
$LOAD_PATH.unshift(talks_dir) unless $LOAD_PATH.include?(talks_dir)
|
5
|
+
require 'talks'
|
6
|
+
|
7
|
+
command = (ARGV.first == 'talks' ? ARGV[1..-1] : ARGV)
|
8
|
+
command_with_hooks = Talks.add_hooks command
|
9
|
+
|
10
|
+
exec command_with_hooks
|
data/bin/talks
ADDED
data/lib/talks.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require File.expand_path('../talks/configuration.rb', __FILE__)
|
2
|
+
require File.expand_path('../talks/hooks.rb', __FILE__)
|
2
3
|
|
3
4
|
module Talks
|
4
5
|
class << self
|
@@ -26,6 +27,10 @@ module Talks
|
|
26
27
|
`say -v #{say_voice(type, options)} #{message}`
|
27
28
|
end
|
28
29
|
|
30
|
+
def add_hooks(command)
|
31
|
+
Talks::Hooks.create command
|
32
|
+
end
|
33
|
+
|
29
34
|
TYPES.each do |type|
|
30
35
|
define_method type do |message = nil, options = {type: type}|
|
31
36
|
message ||= config.message(type)
|
data/lib/talks/configuration.rb
CHANGED
@@ -40,6 +40,22 @@ module Talks
|
|
40
40
|
[message(type), voice(type)]
|
41
41
|
end
|
42
42
|
|
43
|
+
def default_message_for(command_name, position = :after)
|
44
|
+
"#{command_name} task #{position == :before ? 'started' : 'ended'}"
|
45
|
+
end
|
46
|
+
|
47
|
+
def message_for(command_name, position = :after)
|
48
|
+
command = command_name.to_sym
|
49
|
+
options[command] &&
|
50
|
+
options[command][(position == :before ? :before_message : :after_message)]
|
51
|
+
end
|
52
|
+
|
53
|
+
def voice_for(command_name)
|
54
|
+
command = command_name.to_sym
|
55
|
+
options[command] &&
|
56
|
+
options[command][:voice]
|
57
|
+
end
|
58
|
+
|
43
59
|
private
|
44
60
|
|
45
61
|
def symbolize_hash_keys(opts)
|
data/lib/talks/hooks.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
module Talks
|
2
|
+
module Hooks
|
3
|
+
class << self
|
4
|
+
|
5
|
+
def create(args)
|
6
|
+
engine = check_engine
|
7
|
+
options, args = shift_options(args.dup)
|
8
|
+
command_name = command args
|
9
|
+
voice, before_message, after_message = parse options, command_name
|
10
|
+
|
11
|
+
before_hook = hook(engine, voice, before_message)
|
12
|
+
after_hook = hook(engine, voice, after_message)
|
13
|
+
command = args.join(' ')
|
14
|
+
|
15
|
+
[before_hook, command, after_hook].join('; ')
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def shift_options(args, options={})
|
21
|
+
# Check arguments for talks
|
22
|
+
# one-two dashed. -v or --voice
|
23
|
+
if args.first =~ /^-{1,2}[\w-]+$/
|
24
|
+
options[args[0]] = args[1]
|
25
|
+
args.shift(2)
|
26
|
+
shift_options(args, options)
|
27
|
+
else
|
28
|
+
[options, args]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def command(args)
|
33
|
+
if args[0..1] == %w(bundle exec)
|
34
|
+
args[2]
|
35
|
+
else
|
36
|
+
args[0]
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def check_engine
|
41
|
+
if RUBY_PLATFORM =~ /darwin/i
|
42
|
+
'say'
|
43
|
+
else
|
44
|
+
abort 'Now talks can work only on MacOS X, you can help with support other OS'
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def parse(options, command_name)
|
49
|
+
voice = options['-v'] || options['--voice'] ||
|
50
|
+
Talks.config.voice_for(command_name.to_sym) ||
|
51
|
+
Talks.config.default_voice
|
52
|
+
|
53
|
+
before_message = options['-bm'] || options['--before-message'] ||
|
54
|
+
Talks.config.message_for(command_name, :before) ||
|
55
|
+
Talks.config.default_message_for(command_name, :before)
|
56
|
+
|
57
|
+
after_message = options['-am'] || options['--after-message'] ||
|
58
|
+
Talks.config.message_for(command_name, :after) ||
|
59
|
+
Talks.config.default_message_for(command_name, :after)
|
60
|
+
|
61
|
+
[voice, before_message, after_message]
|
62
|
+
end
|
63
|
+
|
64
|
+
def hook(engine, voice, message)
|
65
|
+
if engine == 'say'
|
66
|
+
"say #{message} -v #{voice}"
|
67
|
+
else
|
68
|
+
abort 'Now you can use talks gem only on mac with say'
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
data/lib/talks/version.rb
CHANGED
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.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,12 +9,14 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-05-
|
12
|
+
date: 2012-05-24 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Simple gem for `say` function of mac os x
|
15
15
|
email:
|
16
16
|
- alex.gaziev@gmail.com
|
17
|
-
executables:
|
17
|
+
executables:
|
18
|
+
- talking
|
19
|
+
- talks
|
18
20
|
extensions: []
|
19
21
|
extra_rdoc_files: []
|
20
22
|
files:
|
@@ -22,8 +24,11 @@ files:
|
|
22
24
|
- Gemfile
|
23
25
|
- README.md
|
24
26
|
- Rakefile
|
27
|
+
- bin/talking
|
28
|
+
- bin/talks
|
25
29
|
- lib/talks.rb
|
26
30
|
- lib/talks/configuration.rb
|
31
|
+
- lib/talks/hooks.rb
|
27
32
|
- lib/talks/runner.rb
|
28
33
|
- lib/talks/version.rb
|
29
34
|
- spec/talks.rb
|