alba_habla 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +19 -0
  3. data/bin/alba_habla +19 -0
  4. data/lib/alba_habla.rb +89 -0
  5. metadata +75 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 347e188fb36dc48d56e0fb6722c448f7c505bf8a
4
+ data.tar.gz: df82debec97f3e2cf4ea431c2b419f658af5d124
5
+ SHA512:
6
+ metadata.gz: 12dcdcde86afef2a4bba5abcbf3f9eb8502a3a6ec3f8bb584b544e7e8dc4a8ee7970136e3eb3f798e3488a20a025105e8d7c4a9dd1f7c307a99f9663e0eeae42
7
+ data.tar.gz: 525b8029f3d8c88f47b83476a310f189209241ade9d750fee52165192c26fd5829c0aeee3c35adb053c72e9fb74a0989c2f3bee2369cac3a7633a1dc12e81fb0
data/README.md ADDED
@@ -0,0 +1,19 @@
1
+ # Alba Habla
2
+
3
+ _A fun little wrapper around you OS's speech synthesizer_
4
+
5
+ ## Installation
6
+
7
+ ```ruby
8
+ $ git clone git@github.com:mertonium/alba_habla.git
9
+ $ cd alba_habla
10
+ $ gem build alba_habla.gemspec
11
+ $ gem install ./alba_habla-0.0.1.gem
12
+ ```
13
+
14
+ ## Execution
15
+
16
+ ```bash
17
+ $ alba_habla
18
+ ```
19
+
data/bin/alba_habla ADDED
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env ruby
2
+ require 'io/console'
3
+ require 'alba_habla'
4
+
5
+ ah = AlbaHabla.new(File.expand_path(File.dirname(__FILE__)) + '/books/')
6
+
7
+ command = nil
8
+ command_history = []
9
+
10
+ # Main program loop
11
+ while command != 'bye'
12
+ print 'What shall I say? '
13
+ command = gets.chomp
14
+ command_history.push command
15
+ ah.process_command(command)
16
+ end
17
+
18
+ puts 'COMMAND HISTORY'
19
+ command_history.each { |h| puts h }
data/lib/alba_habla.rb ADDED
@@ -0,0 +1,89 @@
1
+ # Main class used to process commands
2
+ class AlbaHabla
3
+ attr_reader :voice
4
+
5
+ VERSION = '0.0.1'.freeze
6
+
7
+ DEFAULT_VOICES = {
8
+ 'say' => 'Fiona',
9
+ 'espeak' => 'en-westindies'
10
+ }.freeze
11
+
12
+ def initialize(book_path)
13
+ @voice = DEFAULT_VOICES[executable]
14
+ @book_path = book_path
15
+ end
16
+
17
+ def process_command(command)
18
+ subcommand = command.split(' ').first
19
+ if available_subcommands.include? subcommand
20
+ send(subcommand, command.split(' ')[1..-1].join(' '))
21
+ else
22
+ talk(command)
23
+ end
24
+ end
25
+
26
+ private
27
+
28
+ def executable
29
+ @executable ||= %w[espeak say].reject do |ex|
30
+ `which #{ex}` == ''
31
+ end.first
32
+ end
33
+
34
+ def cli_options
35
+ "-v #{voice}"
36
+ end
37
+
38
+ def talk_command
39
+ "#{executable} #{cli_options}"
40
+ end
41
+
42
+ def talk(string)
43
+ `#{talk_command} "#{string}"`
44
+ end
45
+
46
+ def books
47
+ {
48
+ 'sam' => 'green_eggs_and_ham.txt',
49
+ 'cat' => 'the_cat_in_the_hat.txt',
50
+ 'ladybird' => 'what_the_ladybird_heard.txt',
51
+ 'ladybird2' => 'what_the_lady_bird_heard_next.txt',
52
+ 'fox' => 'fox_in_socks.txt'
53
+ }
54
+ end
55
+
56
+ def word_bag
57
+ @word_bag || begin
58
+ bag = []
59
+ books.values.each do |book_file|
60
+ IO.foreach(@book_path + book_file) do |line|
61
+ bag << line.gsub(/[,'\.!\?]/, '').split(' ')
62
+ end
63
+ end
64
+ bag.flatten.compact.uniq
65
+ end
66
+ end
67
+
68
+ def read(book_name)
69
+ if books.key? book_name
70
+ IO.foreach(@book_path + books[book_name]) do |line|
71
+ puts line
72
+ talk line.delete('"')
73
+ end
74
+ else
75
+ talk "Sorry, I don't know that book. Ask Daddy to add it."
76
+ end
77
+ end
78
+
79
+ def spell(_)
80
+ word = word_bag.sample
81
+ puts word.downcase
82
+ talk "Let's spell #{word}."
83
+ talk word.split('').join(' ').to_s
84
+ end
85
+
86
+ def available_subcommands
87
+ %w[read spell]
88
+ end
89
+ end
metadata ADDED
@@ -0,0 +1,75 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: alba_habla
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Mertonium
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-06-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.2'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rubocop
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.49'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.49'
41
+ description: A simple little program that reads back what you type.
42
+ email: j@j10z.xyz
43
+ executables:
44
+ - alba_habla
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - README.md
49
+ - bin/alba_habla
50
+ - lib/alba_habla.rb
51
+ homepage: https://github.com/mertonium/alba_habla
52
+ licenses:
53
+ - MIT
54
+ metadata: {}
55
+ post_install_message:
56
+ rdoc_options: []
57
+ require_paths:
58
+ - lib
59
+ required_ruby_version: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ requirements: []
70
+ rubyforge_project:
71
+ rubygems_version: 2.6.11
72
+ signing_key:
73
+ specification_version: 4
74
+ summary: Type something, read it back.
75
+ test_files: []