number_station 0.0.1 → 0.0.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 +4 -4
- data/.github/ISSUE_TEMPLATE/bug_report.md +35 -0
- data/.github/ISSUE_TEMPLATE/custom.md +7 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +17 -0
- data/.gitignore +3 -0
- data/CODE_OF_CONDUCT.md +6 -0
- data/Gemfile +6 -1
- data/README.asciidoc +2 -1
- data/Rakefile +23 -4
- data/bin/number_station +23 -1
- data/config/conf.json +15 -0
- data/lib/number_station/alphabet.rb +71 -0
- data/lib/number_station/cli.rb +134 -0
- data/lib/number_station/config_reader.rb +43 -0
- data/lib/number_station/make_pad.rb +51 -0
- data/lib/number_station/version.rb +24 -0
- data/lib/number_station.rb +111 -47
- data/number_station.gemspec +61 -0
- data/resources/intro_message.txt +1 -1
- data/resources/outro_message.txt +1 -1
- metadata +51 -12
- data/Gemfile.lock +0 -12
- data/lib/utils/char_lookup.rb +0 -66
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 307e4f7227c11f3a5f102d751834125e78313460b0687db0b66fc27767119412
|
4
|
+
data.tar.gz: fcc9d8d383ab9858bfb8b641598ccac627e8710d3486832cb96331bf9b44e6ef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3604feb7f2e4e0a40c68d934112a0ca59b418b8a1858613f5e94e0d3b33933d9548cb316f63d64b1cde68dd7abe3e59c9ed4f1bd474d37503622037d086dc40c
|
7
|
+
data.tar.gz: bee70668d29379c88b725ef7328a8a6af982b7299b888a6fbba7576f1da0f59c00451e04f0eb9e1df586bac4002274910fae7755c67290a85b650b4146d556a6
|
@@ -0,0 +1,35 @@
|
|
1
|
+
---
|
2
|
+
name: Bug report
|
3
|
+
about: Create a report to help us improve
|
4
|
+
|
5
|
+
---
|
6
|
+
|
7
|
+
**Describe the bug**
|
8
|
+
A clear and concise description of what the bug is.
|
9
|
+
|
10
|
+
**To Reproduce**
|
11
|
+
Steps to reproduce the behavior:
|
12
|
+
1. Go to '...'
|
13
|
+
2. Click on '....'
|
14
|
+
3. Scroll down to '....'
|
15
|
+
4. See error
|
16
|
+
|
17
|
+
**Expected behavior**
|
18
|
+
A clear and concise description of what you expected to happen.
|
19
|
+
|
20
|
+
**Screenshots**
|
21
|
+
If applicable, add screenshots to help explain your problem.
|
22
|
+
|
23
|
+
**Desktop (please complete the following information):**
|
24
|
+
- OS: [e.g. iOS]
|
25
|
+
- Browser [e.g. chrome, safari]
|
26
|
+
- Version [e.g. 22]
|
27
|
+
|
28
|
+
**Smartphone (please complete the following information):**
|
29
|
+
- Device: [e.g. iPhone6]
|
30
|
+
- OS: [e.g. iOS8.1]
|
31
|
+
- Browser [e.g. stock browser, safari]
|
32
|
+
- Version [e.g. 22]
|
33
|
+
|
34
|
+
**Additional context**
|
35
|
+
Add any other context about the problem here.
|
@@ -0,0 +1,17 @@
|
|
1
|
+
---
|
2
|
+
name: Feature request
|
3
|
+
about: Suggest an idea for this project
|
4
|
+
|
5
|
+
---
|
6
|
+
|
7
|
+
**Is your feature request related to a problem? Please describe.**
|
8
|
+
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
9
|
+
|
10
|
+
**Describe the solution you'd like**
|
11
|
+
A clear and concise description of what you want to happen.
|
12
|
+
|
13
|
+
**Describe alternatives you've considered**
|
14
|
+
A clear and concise description of any alternative solutions or features you've considered.
|
15
|
+
|
16
|
+
**Additional context**
|
17
|
+
Add any other context or screenshots about the feature request here.
|
data/.gitignore
ADDED
data/CODE_OF_CONDUCT.md
ADDED
data/Gemfile
CHANGED
data/README.asciidoc
CHANGED
@@ -2,7 +2,8 @@
|
|
2
2
|
This gem (WIP) contains a number of utilities to aid in the running of a number station.
|
3
3
|
|
4
4
|
=== Contributing ===
|
5
|
-
|
5
|
+
Contributions are welcome, please fork the repo, create a branch, add your code, and make a PR
|
6
|
+
against master on this repo.
|
6
7
|
|
7
8
|
=== Licence ===
|
8
9
|
number_station is distributed under the GPL 3.0 licence. For more information see the _COPYING_
|
data/Rakefile
CHANGED
@@ -1,4 +1,24 @@
|
|
1
|
-
|
1
|
+
=begin
|
2
|
+
Ruby Number Station
|
3
|
+
Author: David Kirwan https://gitub.com/davidkirwan
|
4
|
+
Licence: GPL 3.0
|
5
|
+
NumberStation is a collection of utilities to aid in the running of a number station
|
6
|
+
Copyright (C) 2018 David Kirwan
|
7
|
+
|
8
|
+
This program is free software: you can redistribute it and/or modify
|
9
|
+
it under the terms of the GNU General Public License as published by
|
10
|
+
the Free Software Foundation, either version 3 of the License, or
|
11
|
+
(at your option) any later version.
|
12
|
+
|
13
|
+
This program is distributed in the hope that it will be useful,
|
14
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
GNU General Public License for more details.
|
17
|
+
|
18
|
+
You should have received a copy of the GNU General Public License
|
19
|
+
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
20
|
+
=end
|
21
|
+
|
2
22
|
require 'bundler'
|
3
23
|
require 'fileutils'
|
4
24
|
Bundler::GemHelper.install_tasks
|
@@ -7,8 +27,8 @@ task :default => :menu
|
|
7
27
|
|
8
28
|
task :menu do
|
9
29
|
puts welcomeMsg = <<-MSG
|
10
|
-
rake build # Build
|
11
|
-
rake install # Build and install
|
30
|
+
rake build # Build number_station-x.x.x.gem into the pkg directory
|
31
|
+
rake install # Build and install number_station-x.x.x.gem into system gems
|
12
32
|
rake release # Create tag vx.x.x and build and push number_station-x.x.x.gem to http://rubygems.org/
|
13
33
|
MSG
|
14
34
|
end
|
@@ -16,6 +36,5 @@ end
|
|
16
36
|
desc "Clean up build artifacts"
|
17
37
|
task :clean do
|
18
38
|
FileUtils.rm_rf("./pkg/")
|
19
|
-
FileUtils.rm_rf("./tmp/")
|
20
39
|
end
|
21
40
|
|
data/bin/number_station
CHANGED
@@ -1,3 +1,25 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
=begin
|
3
|
+
Ruby Number Station
|
4
|
+
Author: David Kirwan https://gitub.com/davidkirwan
|
5
|
+
Licence: GPL 3.0
|
6
|
+
NumberStation is a collection of utilities to aid in the running of a number station
|
7
|
+
Copyright (C) 2018 David Kirwan
|
2
8
|
|
3
|
-
|
9
|
+
This program is free software: you can redistribute it and/or modify
|
10
|
+
it under the terms of the GNU General Public License as published by
|
11
|
+
the Free Software Foundation, either version 3 of the License, or
|
12
|
+
(at your option) any later version.
|
13
|
+
|
14
|
+
This program is distributed in the hope that it will be useful,
|
15
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
16
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
17
|
+
GNU General Public License for more details.
|
18
|
+
|
19
|
+
You should have received a copy of the GNU General Public License
|
20
|
+
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
21
|
+
=end
|
22
|
+
require "number_station"
|
23
|
+
|
24
|
+
# Start the CLI
|
25
|
+
NumberStation::CLI.start(ARGV)
|
data/config/conf.json
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
=begin
|
2
|
+
Ruby Number Station
|
3
|
+
Author: David Kirwan https://gitub.com/davidkirwan
|
4
|
+
Licence: GPL 3.0
|
5
|
+
NumberStation is a collection of utilities to aid in the running of a number station
|
6
|
+
Copyright (C) 2018 David Kirwan
|
7
|
+
|
8
|
+
This program is free software: you can redistribute it and/or modify
|
9
|
+
it under the terms of the GNU General Public License as published by
|
10
|
+
the Free Software Foundation, either version 3 of the License, or
|
11
|
+
(at your option) any later version.
|
12
|
+
|
13
|
+
This program is distributed in the hope that it will be useful,
|
14
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
GNU General Public License for more details.
|
17
|
+
|
18
|
+
You should have received a copy of the GNU General Public License
|
19
|
+
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
20
|
+
=end
|
21
|
+
|
22
|
+
module NumberStation
|
23
|
+
|
24
|
+
ALPHABET ={
|
25
|
+
'0' => "zero",
|
26
|
+
'1' => "one",
|
27
|
+
'2' => "two",
|
28
|
+
'3' => "three",
|
29
|
+
'4' => "four",
|
30
|
+
'5' => "five",
|
31
|
+
'6' => "six",
|
32
|
+
'7' => "seven",
|
33
|
+
'8' => "eight",
|
34
|
+
'9' => "nine",
|
35
|
+
'a' => "alpha",
|
36
|
+
'b' => "bravo",
|
37
|
+
'c' => "charlie",
|
38
|
+
'd' => "delta",
|
39
|
+
'e' => "echo",
|
40
|
+
'f' => "foxtrot",
|
41
|
+
'g' => "gamma",
|
42
|
+
'h' => "hotel",
|
43
|
+
'i' => "india",
|
44
|
+
'j' => "juliette",
|
45
|
+
'k' => "kilo",
|
46
|
+
'l' => "lima",
|
47
|
+
'm' => "mike",
|
48
|
+
'n' => "november",
|
49
|
+
'o' => "oscar",
|
50
|
+
'p' => "pappa",
|
51
|
+
'q' => "quebec",
|
52
|
+
'r' => "romeo",
|
53
|
+
's' => "sierra",
|
54
|
+
't' => "tango",
|
55
|
+
'u' => "uniform",
|
56
|
+
'v' => "victor",
|
57
|
+
'w' => "whiskey",
|
58
|
+
'x' => "xray",
|
59
|
+
'y' => "yankee",
|
60
|
+
'z' => "zulu"
|
61
|
+
}
|
62
|
+
|
63
|
+
def self.lookup(c)
|
64
|
+
begin
|
65
|
+
return NumberStation::ALPHABET[c] + ' ' || ' '
|
66
|
+
rescue Exception => e
|
67
|
+
return ' '
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
=begin
|
2
|
+
Ruby Number Station
|
3
|
+
Author: David Kirwan https://gitub.com/davidkirwan
|
4
|
+
Licence: GPL 3.0
|
5
|
+
NumberStation is a collection of utilities to aid in the running of a number station
|
6
|
+
Copyright (C) 2018 David Kirwan
|
7
|
+
|
8
|
+
This program is free software: you can redistribute it and/or modify
|
9
|
+
it under the terms of the GNU General Public License as published by
|
10
|
+
the Free Software Foundation, either version 3 of the License, or
|
11
|
+
(at your option) any later version.
|
12
|
+
|
13
|
+
This program is distributed in the hope that it will be useful,
|
14
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
GNU General Public License for more details.
|
17
|
+
|
18
|
+
You should have received a copy of the GNU General Public License
|
19
|
+
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
20
|
+
=end
|
21
|
+
|
22
|
+
require 'thor'
|
23
|
+
require 'fileutils'
|
24
|
+
|
25
|
+
module NumberStation
|
26
|
+
class CLI < Thor
|
27
|
+
|
28
|
+
# create_config
|
29
|
+
desc "create_config [--path PATH]", "copy the sample config to current directory."
|
30
|
+
long_desc <<-CREATE_CONFIG_LONG_DESC
|
31
|
+
`create_config` will copy the sample config from config/config.json to the current directory. If the
|
32
|
+
optional parameter `--path PATH` is passed then this file is copied to the location specified by the
|
33
|
+
PATH parameter.
|
34
|
+
CREATE_CONFIG_LONG_DESC
|
35
|
+
option :path, :type => :string
|
36
|
+
def create_config()
|
37
|
+
NumberStation::ConfigReader.read_config()
|
38
|
+
config_file_path = File.join(File.dirname(__FILE__), "../../config/conf.json")
|
39
|
+
|
40
|
+
if options[:path]
|
41
|
+
path = options[:path]
|
42
|
+
unless File.file?(File.join(path, "/conf.json"))
|
43
|
+
#write config to path
|
44
|
+
NumberStation.log.debug "Copying sample config to #{path}"
|
45
|
+
FileUtils.cp(config_file_path, path)
|
46
|
+
else
|
47
|
+
NumberStation.log.debug "File already exists at #{File.join(path, "/conf.json")}"
|
48
|
+
end
|
49
|
+
else
|
50
|
+
path = Dir.pwd
|
51
|
+
unless File.file?(File.join(path, "/conf.json"))
|
52
|
+
#write config to local directory the binary was called from
|
53
|
+
NumberStation.log.debug "Copying sample config to #{path}"
|
54
|
+
FileUtils.cp(config_file_path, path)
|
55
|
+
else
|
56
|
+
NumberStation.log.debug "File already exists at #{File.join(path, "/conf.json")}"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
# convert_message
|
63
|
+
desc "convert_message [MESSAGE]", "Convert a message to phonetic output."
|
64
|
+
long_desc <<-CONVERT_MESSAGE_LONG_DESC
|
65
|
+
convert_message takes a parameter which should point to a text file containing a message.
|
66
|
+
Optional parameters:\n
|
67
|
+
--intro [INTRO] should be a text file containing intro message.\n
|
68
|
+
--outro [OUTRO] should be a text file containing the outro message.
|
69
|
+
|
70
|
+
Final message will be created from intro + message + outro
|
71
|
+
CONVERT_MESSAGE_LONG_DESC
|
72
|
+
option :intro, :type => :string
|
73
|
+
option :outro, :type => :string
|
74
|
+
option :mp3, :type => :string
|
75
|
+
def convert_message(message)
|
76
|
+
NumberStation::ConfigReader.read_config()
|
77
|
+
|
78
|
+
intro_path = options[:intro]
|
79
|
+
message_path = message
|
80
|
+
outro_path = options[:outro]
|
81
|
+
mp3_path = options[:mp3]
|
82
|
+
NumberStation.log.debug "intro_path: #{intro_path}" if options[:intro]
|
83
|
+
NumberStation.log.debug "message_path: #{message_path}"
|
84
|
+
NumberStation.log.debug "outro_path: #{outro_path}" if options[:outro]
|
85
|
+
NumberStation.log.debug "mp3_output: " if options[:mp3]
|
86
|
+
|
87
|
+
output = ""
|
88
|
+
output += NumberStation.read_message(intro_path) if options[:intro]
|
89
|
+
output += NumberStation.read_message(message_path)
|
90
|
+
output += NumberStation.read_message(outro_path) if options[:outro]
|
91
|
+
|
92
|
+
NumberStation.log.info "output: #{output}"
|
93
|
+
|
94
|
+
if options[:mp3]
|
95
|
+
NumberStation.log.debug "Generating mp3 output: #{mp3_path}"
|
96
|
+
NumberStation.run(output, mp3_path)
|
97
|
+
end
|
98
|
+
|
99
|
+
return output
|
100
|
+
end
|
101
|
+
|
102
|
+
|
103
|
+
# convert_message
|
104
|
+
desc "make_one_time_pad [--path PATH --num NUM --length LENGTH]", "Generate a one time pad of LENGTH containing NUM entries"
|
105
|
+
long_desc <<-MAKE_ONE_TIME_PAD_LONG_DESC
|
106
|
+
Generate a one time pad of LENGTH containing NUM entries
|
107
|
+
Optional parameters:\n
|
108
|
+
--path PATH\n
|
109
|
+
--num NUM\n
|
110
|
+
--length LENGTH
|
111
|
+
|
112
|
+
If no parameters are passed it will generate a single one time pad in the current
|
113
|
+
directory of size 250 characters.
|
114
|
+
MAKE_ONE_TIME_PAD_LONG_DESC
|
115
|
+
option :length, :type => :numeric
|
116
|
+
option :num_pads, :type => :numeric
|
117
|
+
option :path, :type => :string
|
118
|
+
def make_one_time_pad()
|
119
|
+
NumberStation::ConfigReader.read_config()
|
120
|
+
NumberStation.log.debug "make_one_time_pad"
|
121
|
+
|
122
|
+
length = options[:length]
|
123
|
+
num_pads = options[:num_pads]
|
124
|
+
path = options[:path]
|
125
|
+
|
126
|
+
NumberStation.log.debug "length: #{length}" if options[:length]
|
127
|
+
NumberStation.log.debug "num_pads: #{num_pads}" if options[:num_pads]
|
128
|
+
NumberStation.log.debug "path: #{path}" if options[:path]
|
129
|
+
|
130
|
+
NumberStation.make_otp(path, length, num_pads)
|
131
|
+
end
|
132
|
+
|
133
|
+
end
|
134
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
=begin
|
2
|
+
Ruby Number Station
|
3
|
+
Author: David Kirwan https://gitub.com/davidkirwan
|
4
|
+
Licence: GPL 3.0
|
5
|
+
NumberStation is a collection of utilities to aid in the running of a number station
|
6
|
+
Copyright (C) 2018 David Kirwan
|
7
|
+
|
8
|
+
This program is free software: you can redistribute it and/or modify
|
9
|
+
it under the terms of the GNU General Public License as published by
|
10
|
+
the Free Software Foundation, either version 3 of the License, or
|
11
|
+
(at your option) any later version.
|
12
|
+
|
13
|
+
This program is distributed in the hope that it will be useful,
|
14
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
GNU General Public License for more details.
|
17
|
+
|
18
|
+
You should have received a copy of the GNU General Public License
|
19
|
+
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
20
|
+
=end
|
21
|
+
|
22
|
+
module NumberStation
|
23
|
+
class ConfigReader
|
24
|
+
|
25
|
+
def self.read_config()
|
26
|
+
begin
|
27
|
+
config_file_path = File.join(Dir.pwd, "conf.json")
|
28
|
+
NumberStation.set_data( JSON.parse(File.read(config_file_path)) )
|
29
|
+
NumberStation.set_log( Logger.new(STDOUT) )
|
30
|
+
NumberStation.log.level = NumberStation.data["logging"]["level"]
|
31
|
+
NumberStation.log.debug "Reading in config file: #{config_file_path}"
|
32
|
+
rescue Exception => e
|
33
|
+
config_file_path = File.join(File.dirname(__FILE__), "../../config/conf.json")
|
34
|
+
NumberStation.set_data( JSON.parse(File.read(config_file_path)) )
|
35
|
+
NumberStation.set_log( Logger.new(STDOUT) )
|
36
|
+
NumberStation.log.level = NumberStation.data["logging"]["level"]
|
37
|
+
NumberStation.log.debug "Reading in default config file: #{config_file_path}"
|
38
|
+
end
|
39
|
+
NumberStation.log.debug "NumberStation::ConfigReader#read_config"
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
=begin
|
2
|
+
Ruby Number Station
|
3
|
+
Author: David Kirwan https://gitub.com/davidkirwan
|
4
|
+
Licence: GPL 3.0
|
5
|
+
NumberStation is a collection of utilities to aid in the running of a number station
|
6
|
+
Copyright (C) 2018 David Kirwan
|
7
|
+
|
8
|
+
This program is free software: you can redistribute it and/or modify
|
9
|
+
it under the terms of the GNU General Public License as published by
|
10
|
+
the Free Software Foundation, either version 3 of the License, or
|
11
|
+
(at your option) any later version.
|
12
|
+
|
13
|
+
This program is distributed in the hope that it will be useful,
|
14
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
GNU General Public License for more details.
|
17
|
+
|
18
|
+
You should have received a copy of the GNU General Public License
|
19
|
+
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
20
|
+
=end
|
21
|
+
require "securerandom"
|
22
|
+
require "json"
|
23
|
+
|
24
|
+
module NumberStation
|
25
|
+
def self.make_otp(pad_path, length, num_pads)
|
26
|
+
path = pad_path || Dir.pwd
|
27
|
+
len = length.to_i || 250
|
28
|
+
num = num_pads.to_i || 5
|
29
|
+
|
30
|
+
NumberStation.log.debug "make_otp"
|
31
|
+
pads = {}
|
32
|
+
id = rand(0..99999).to_s.rjust(5, "0")
|
33
|
+
file_name = File.join(path, "one_time_pad_#{id}.json")
|
34
|
+
NumberStation.log.debug "file_name: #{file_name}"
|
35
|
+
|
36
|
+
0.upto(num - 1) {|i| pads[i] = SecureRandom.hex(len)}
|
37
|
+
one_time_pads = {
|
38
|
+
:id=> id,
|
39
|
+
:pads=> pads
|
40
|
+
}
|
41
|
+
|
42
|
+
unless File.file?(file_name)
|
43
|
+
f = File.open(file_name, "w")
|
44
|
+
f.write(one_time_pads.to_json)
|
45
|
+
f.close
|
46
|
+
else
|
47
|
+
raise Exception.new("Exception #{file_name} already exists")
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
=begin
|
2
|
+
Ruby Number Station
|
3
|
+
Author: David Kirwan https://gitub.com/davidkirwan
|
4
|
+
Licence: GPL 3.0
|
5
|
+
NumberStation is a collection of utilities to aid in the running of a number station
|
6
|
+
Copyright (C) 2018 David Kirwan
|
7
|
+
|
8
|
+
This program is free software: you can redistribute it and/or modify
|
9
|
+
it under the terms of the GNU General Public License as published by
|
10
|
+
the Free Software Foundation, either version 3 of the License, or
|
11
|
+
(at your option) any later version.
|
12
|
+
|
13
|
+
This program is distributed in the hope that it will be useful,
|
14
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
GNU General Public License for more details.
|
17
|
+
|
18
|
+
You should have received a copy of the GNU General Public License
|
19
|
+
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
20
|
+
=end
|
21
|
+
|
22
|
+
module NumberStation
|
23
|
+
VERSION = "0.0.2"
|
24
|
+
end
|
data/lib/number_station.rb
CHANGED
@@ -1,66 +1,130 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
=begin
|
2
|
+
Ruby Number Station
|
3
|
+
Author: David Kirwan https://gitub.com/davidkirwan
|
4
|
+
Licence: GPL 3.0
|
5
|
+
NumberStation is a collection of utilities to aid in the running of a number station
|
6
|
+
Copyright (C) 2018 David Kirwan
|
7
|
+
|
8
|
+
This program is free software: you can redistribute it and/or modify
|
9
|
+
it under the terms of the GNU General Public License as published by
|
10
|
+
the Free Software Foundation, either version 3 of the License, or
|
11
|
+
(at your option) any later version.
|
12
|
+
|
13
|
+
This program is distributed in the hope that it will be useful,
|
14
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
GNU General Public License for more details.
|
17
|
+
|
18
|
+
You should have received a copy of the GNU General Public License
|
19
|
+
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
20
|
+
=end
|
21
|
+
require 'pastel'
|
22
|
+
require 'json'
|
23
|
+
require 'logger'
|
24
|
+
require 'number_station/alphabet'
|
25
|
+
require 'number_station/cli'
|
26
|
+
require 'number_station/config_reader'
|
27
|
+
require 'number_station/make_pad'
|
28
|
+
require 'number_station/version'
|
29
|
+
|
30
|
+
|
31
|
+
module NumberStation
|
32
|
+
|
33
|
+
def self.hexlify(s)
|
34
|
+
a = []
|
35
|
+
s.each_byte do |b|
|
36
|
+
a << sprintf('%02X', b)
|
37
|
+
end
|
38
|
+
a.join
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.unhexlify(s)
|
42
|
+
a = s.split
|
43
|
+
return a.pack('H*')
|
44
|
+
end
|
6
45
|
|
46
|
+
def self.command?(name)
|
47
|
+
`which #{name}`
|
48
|
+
$?.success?
|
49
|
+
end
|
7
50
|
|
8
|
-
def
|
9
|
-
|
10
|
-
end
|
51
|
+
def self.set_log(log)
|
52
|
+
@log = log
|
53
|
+
end
|
11
54
|
|
55
|
+
def self.log()
|
56
|
+
return @log
|
57
|
+
end
|
12
58
|
|
13
|
-
def
|
14
|
-
|
15
|
-
end
|
59
|
+
def self.set_data(data)
|
60
|
+
@data = data
|
61
|
+
end
|
16
62
|
|
63
|
+
def self.data()
|
64
|
+
return @data
|
65
|
+
end
|
17
66
|
|
18
|
-
def
|
19
|
-
|
20
|
-
message.split(" ").each do |i|
|
21
|
-
sentence += word_template(i)
|
67
|
+
def self.word_template(word)
|
68
|
+
return "<prosody pitch=\"#{randomsign + rand(0..200).to_s}\">#{word}</prosody>"
|
22
69
|
end
|
23
70
|
|
24
|
-
sentence_template = "<speak version=\"1.0\" xmlns=\"\" xmlns:xsi=\"\" xsi:schemaLocation=\"\" xml:lang=\"\"><voice gender=\"female\">#{sentence}</voice></speak>"
|
25
|
-
return sentence_template
|
26
|
-
end
|
27
71
|
|
72
|
+
def self.randomsign()
|
73
|
+
rand(0..1) == 0 ? "-" : "+"
|
74
|
+
end
|
28
75
|
|
29
|
-
def write_template_file(filename, sentence)
|
30
|
-
f = File.open(filename, "w")
|
31
|
-
f.write(sentence)
|
32
|
-
f.close
|
33
|
-
end
|
34
76
|
|
77
|
+
def self.generate_sentence(message)
|
78
|
+
sentence = ""
|
79
|
+
message.split(" ").each do |i|
|
80
|
+
sentence += word_template(i)
|
81
|
+
end
|
35
82
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
end
|
83
|
+
sentence_template = "<speak version=\"1.0\" xmlns=\"\" xmlns:xsi=\"\" xsi:schemaLocation=\"\" xml:lang=\"\"><voice gender=\"female\">#{sentence}</voice></speak>"
|
84
|
+
return sentence_template
|
85
|
+
end
|
40
86
|
|
41
87
|
|
42
|
-
def
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
end
|
88
|
+
def self.write_template_file(filename, sentence)
|
89
|
+
f = File.open(filename, "w")
|
90
|
+
f.write(sentence)
|
91
|
+
f.close
|
92
|
+
end
|
48
93
|
|
49
94
|
|
50
|
-
def
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
95
|
+
def self.call_espeak(input_file_path, output_file_path)
|
96
|
+
cmd = "espeak -ven+f3 -m -p 60 -s 180 -f #{input_file_path} --stdout | ffmpeg -i - -ar 44100 -ac 2 -ab 192k -f mp3 #{output_file_path}"
|
97
|
+
|
98
|
+
unless NumberStation.command?('espeak') || NumberStation.command?('ffmpeg')
|
99
|
+
NumberStation.log.error "number_station requires the espeak and ffmpeg utilities are installed in order to output an mp3 file."
|
100
|
+
else
|
101
|
+
`#{cmd}`
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
56
105
|
|
106
|
+
def self.run(message, output_file_path)
|
107
|
+
filename = "/tmp/GLaDOS_tmp.xml"
|
108
|
+
sentence = NumberStation.generate_sentence(message)
|
109
|
+
NumberStation.write_template_file(filename, sentence)
|
110
|
+
NumberStation.call_espeak(filename, output_file_path)
|
111
|
+
end
|
112
|
+
|
113
|
+
|
114
|
+
def self.read_message(file_name)
|
115
|
+
message = ''
|
57
116
|
|
58
|
-
|
59
|
-
|
117
|
+
f = File.open(file_name)
|
118
|
+
raw_message = f.readlines()
|
119
|
+
f.close()
|
60
120
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
message
|
65
|
-
|
66
|
-
|
121
|
+
raw_message.each do |i|
|
122
|
+
# puts i
|
123
|
+
i.gsub!(/\n/, "").strip.each_char do |c|
|
124
|
+
message += NumberStation.lookup(c)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
return message + "\n"
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
=begin
|
2
|
+
Ruby Number Station
|
3
|
+
Author: David Kirwan https://gitub.com/davidkirwan
|
4
|
+
Licence: GPL 3.0
|
5
|
+
NumberStation is a collection of utilities to aid in the running of a number station
|
6
|
+
Copyright (C) 2018 David Kirwan
|
7
|
+
|
8
|
+
This program is free software: you can redistribute it and/or modify
|
9
|
+
it under the terms of the GNU General Public License as published by
|
10
|
+
the Free Software Foundation, either version 3 of the License, or
|
11
|
+
(at your option) any later version.
|
12
|
+
|
13
|
+
This program is distributed in the hope that it will be useful,
|
14
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
GNU General Public License for more details.
|
17
|
+
|
18
|
+
You should have received a copy of the GNU General Public License
|
19
|
+
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
20
|
+
=end
|
21
|
+
|
22
|
+
lib = File.expand_path("../lib", __FILE__)
|
23
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
24
|
+
require "number_station/version"
|
25
|
+
|
26
|
+
Gem::Specification.new do |spec|
|
27
|
+
spec.name = "number_station"
|
28
|
+
spec.version = NumberStation::VERSION
|
29
|
+
spec.date = "2018-10-12"
|
30
|
+
spec.authors = ["David Kirwan"]
|
31
|
+
spec.email = ["davidkirwanirl@gmail.com"]
|
32
|
+
spec.license = "GPL 3.0"
|
33
|
+
|
34
|
+
spec.summary = "(WIP) Run your own number station!"
|
35
|
+
spec.description = "(WIP) A collection of utilities to aid in running your own number station!"
|
36
|
+
spec.homepage = "https://rubygems.org/gems/number_station"
|
37
|
+
|
38
|
+
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
39
|
+
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
40
|
+
if spec.respond_to?(:metadata)
|
41
|
+
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
42
|
+
else
|
43
|
+
raise "RubyGems 2.0 or newer is required to protect against " \
|
44
|
+
"public gem pushes."
|
45
|
+
end
|
46
|
+
|
47
|
+
# Specify which files should be added to the gem when it is released.
|
48
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
49
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
50
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
51
|
+
end
|
52
|
+
spec.bindir = "bin"
|
53
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
54
|
+
spec.require_paths = ["lib"]
|
55
|
+
|
56
|
+
spec.add_dependency "pastel"
|
57
|
+
spec.add_dependency "thor"
|
58
|
+
|
59
|
+
spec.add_development_dependency "bundler", "~> 1.16"
|
60
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
61
|
+
end
|
data/resources/intro_message.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
ei7htb ei7htb
|
data/resources/outro_message.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
ei7htb ei7htb
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: number_station
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Kirwan
|
@@ -11,13 +11,13 @@ cert_chain: []
|
|
11
11
|
date: 2018-10-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: pastel
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
|
-
type: :
|
20
|
+
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
@@ -25,20 +25,48 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: thor
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
|
-
type: :
|
34
|
+
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
-
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.16'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.16'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '10.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '10.0'
|
69
|
+
description: "(WIP) A collection of utilities to aid in running your own number station!"
|
42
70
|
email:
|
43
71
|
- davidkirwanirl@gmail.com
|
44
72
|
executables:
|
@@ -46,21 +74,32 @@ executables:
|
|
46
74
|
extensions: []
|
47
75
|
extra_rdoc_files: []
|
48
76
|
files:
|
77
|
+
- ".github/ISSUE_TEMPLATE/bug_report.md"
|
78
|
+
- ".github/ISSUE_TEMPLATE/custom.md"
|
79
|
+
- ".github/ISSUE_TEMPLATE/feature_request.md"
|
80
|
+
- ".gitignore"
|
81
|
+
- CODE_OF_CONDUCT.md
|
49
82
|
- COPYING
|
50
83
|
- Gemfile
|
51
|
-
- Gemfile.lock
|
52
84
|
- README.asciidoc
|
53
85
|
- Rakefile
|
54
86
|
- bin/number_station
|
87
|
+
- config/conf.json
|
55
88
|
- lib/number_station.rb
|
56
|
-
- lib/
|
89
|
+
- lib/number_station/alphabet.rb
|
90
|
+
- lib/number_station/cli.rb
|
91
|
+
- lib/number_station/config_reader.rb
|
92
|
+
- lib/number_station/make_pad.rb
|
93
|
+
- lib/number_station/version.rb
|
94
|
+
- number_station.gemspec
|
57
95
|
- resources/body_message.txt
|
58
96
|
- resources/intro_message.txt
|
59
97
|
- resources/outro_message.txt
|
60
|
-
homepage:
|
98
|
+
homepage: https://rubygems.org/gems/number_station
|
61
99
|
licenses:
|
62
100
|
- GPL 3.0
|
63
|
-
metadata:
|
101
|
+
metadata:
|
102
|
+
allowed_push_host: https://rubygems.org
|
64
103
|
post_install_message:
|
65
104
|
rdoc_options: []
|
66
105
|
require_paths:
|
@@ -69,7 +108,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
69
108
|
requirements:
|
70
109
|
- - ">="
|
71
110
|
- !ruby/object:Gem::Version
|
72
|
-
version:
|
111
|
+
version: '0'
|
73
112
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
74
113
|
requirements:
|
75
114
|
- - ">="
|
@@ -80,5 +119,5 @@ rubyforge_project:
|
|
80
119
|
rubygems_version: 2.7.7
|
81
120
|
signing_key:
|
82
121
|
specification_version: 4
|
83
|
-
summary:
|
122
|
+
summary: "(WIP) Run your own number station!"
|
84
123
|
test_files: []
|
data/Gemfile.lock
DELETED
data/lib/utils/char_lookup.rb
DELETED
@@ -1,66 +0,0 @@
|
|
1
|
-
######################################################
|
2
|
-
# Ruby Number Station
|
3
|
-
# Author: David Kirwan https://gitub.com/davidkirwan
|
4
|
-
# Licence: GPL 3.0
|
5
|
-
######################################################
|
6
|
-
|
7
|
-
class Char_list
|
8
|
-
class << self
|
9
|
-
attr_accessor :chars, :lookup
|
10
|
-
|
11
|
-
@c = nil
|
12
|
-
|
13
|
-
def chars
|
14
|
-
@c ={
|
15
|
-
'0' => "zero",
|
16
|
-
'1' => "one",
|
17
|
-
'2' => "two",
|
18
|
-
'3' => "three",
|
19
|
-
'4' => "four",
|
20
|
-
'5' => "five",
|
21
|
-
'6' => "six",
|
22
|
-
'7' => "seven",
|
23
|
-
'8' => "eight",
|
24
|
-
'9' => "nine",
|
25
|
-
'a' => "alpha",
|
26
|
-
'b' => "bravo",
|
27
|
-
'c' => "charlie",
|
28
|
-
'd' => "delta",
|
29
|
-
'e' => "echo",
|
30
|
-
'f' => "foxtrot",
|
31
|
-
'g' => "gamma",
|
32
|
-
'h' => "hotel",
|
33
|
-
'i' => "india",
|
34
|
-
'j' => "juliette",
|
35
|
-
'k' => "kilo",
|
36
|
-
'l' => "lima",
|
37
|
-
'm' => "mike",
|
38
|
-
'n' => "november",
|
39
|
-
'o' => "oscar",
|
40
|
-
'p' => "pappa",
|
41
|
-
'q' => "quebec",
|
42
|
-
'r' => "romeo",
|
43
|
-
's' => "sierra",
|
44
|
-
't' => "tango",
|
45
|
-
'u' => "uniform",
|
46
|
-
'v' => "victor",
|
47
|
-
'w' => "whiskey",
|
48
|
-
'x' => "xray",
|
49
|
-
'y' => "yankee",
|
50
|
-
'z' => "zulu"
|
51
|
-
}
|
52
|
-
end
|
53
|
-
|
54
|
-
|
55
|
-
def lookup(c)
|
56
|
-
begin
|
57
|
-
x
|
58
|
-
rescue Exception => e
|
59
|
-
x
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|