natophone 0.0.2 → 0.0.3
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/CHANGELOG.md +5 -0
- data/README.md +20 -13
- data/lib/app.rb +46 -13
- data/lib/cli.rb +4 -2
- data/lib/version.rb +1 -1
- data/spec/natophone_spec.rb +34 -14
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c22b9ae46a28af9e9a4cdfc480b3d0494bca20c3
|
4
|
+
data.tar.gz: 169d1119299ce35c9bf6995f3ea4293f21ac2f4a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aee62cce368e20f3ddb50ea72638ab8d1daa2d3c4ef76a25dfb31801259cf7a2d7ff04775e3a8b6639824c90c9656c6dee1d990343d0b46b5eae02cb9d97d7c7
|
7
|
+
data.tar.gz: 78efa1aa284404573692b281d514a247f9f324d22dfb2b7fcd138b906227848af6d077bff2c515f8502e1dbabcb68e55d9a7dfc05f3bdf56ef487e55f05f378e
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+

|
2
|
+
|
3
|
+
[](https://coveralls.io/r/ericdke/NATOPhone?branch=master)
|
4
|
+
|
1
5
|
# NATOPhone
|
2
6
|
|
3
7
|
Simple tool to encode/decode [NATO alphabet](https://en.wikipedia.org/wiki/NATO_phonetic_alphabet).
|
@@ -6,7 +10,9 @@ Simple tool to encode/decode [NATO alphabet](https://en.wikipedia.org/wiki/NATO_
|
|
6
10
|
|
7
11
|
### CLI
|
8
12
|
|
9
|
-
|
13
|
+
```raw
|
14
|
+
gem install natophone
|
15
|
+
```
|
10
16
|
|
11
17
|
### Library
|
12
18
|
|
@@ -18,23 +24,24 @@ gem 'natophone'
|
|
18
24
|
|
19
25
|
And then execute:
|
20
26
|
|
21
|
-
|
27
|
+
`bundle`
|
22
28
|
|
23
29
|
## Usage
|
24
30
|
|
25
31
|
### CLI
|
26
32
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
33
|
+
```raw
|
34
|
+
natophone encode Hello world.
|
35
|
+
natophone -E Hello world.
|
36
|
+
natophone -E 'Hello world.' 'Goodbye!'
|
37
|
+
natophone -E --yell Hello world.
|
38
|
+
natophone -E --json Hello world.
|
39
|
+
natophone decode hotel echo lima lima oscar - whiskey oscar romeo lima delta stop
|
40
|
+
natophone -D hotel echo lima lima oscar - whiskey oscar romeo lima delta stop
|
41
|
+
natophone -D 'hotel echo lima lima oscar' 'whiskey oscar romeo lima delta stop'
|
42
|
+
natophone -D --yell hotel echo lima lima oscar
|
43
|
+
natophone -D --json hotel echo lima lima oscar
|
44
|
+
```
|
38
45
|
|
39
46
|
### Library
|
40
47
|
|
data/lib/app.rb
CHANGED
@@ -21,9 +21,7 @@ module NATOPhone
|
|
21
21
|
|
22
22
|
def otan_alphabet_decode
|
23
23
|
otan = otan_alphabet_encode.invert
|
24
|
-
otan.merge!({
|
25
|
-
"point" => "."
|
26
|
-
})
|
24
|
+
otan.merge!({"point" => "."})
|
27
25
|
end
|
28
26
|
|
29
27
|
def sanitize(string)
|
@@ -53,15 +51,33 @@ module NATOPhone
|
|
53
51
|
}.to_json
|
54
52
|
end
|
55
53
|
|
54
|
+
def to_s
|
55
|
+
@translate
|
56
|
+
end
|
57
|
+
|
58
|
+
def to_a
|
59
|
+
@encode
|
60
|
+
end
|
61
|
+
|
56
62
|
private
|
57
63
|
|
58
64
|
def convert(input)
|
59
|
-
input =
|
65
|
+
input = check_input(input)
|
60
66
|
characters = sanitize(input).downcase.chars
|
61
67
|
res = characters.map {|char| @dic[char]}.compact
|
62
68
|
uniq_separator(res)
|
63
69
|
end
|
64
70
|
|
71
|
+
def check_input(input)
|
72
|
+
if input.is_a?(String)
|
73
|
+
return input
|
74
|
+
elsif input.is_a?(Array)
|
75
|
+
return input.join(' ')
|
76
|
+
else
|
77
|
+
raise TypeError, "Error: Encoder accepts only Strings or Arrays."
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
65
81
|
def uniq_separator(input)
|
66
82
|
bucket = []
|
67
83
|
input.each do |c|
|
@@ -93,22 +109,39 @@ module NATOPhone
|
|
93
109
|
}.to_json
|
94
110
|
end
|
95
111
|
|
112
|
+
def to_s
|
113
|
+
@translate
|
114
|
+
end
|
115
|
+
|
116
|
+
def to_a
|
117
|
+
@decode
|
118
|
+
end
|
119
|
+
|
96
120
|
private
|
97
121
|
|
98
122
|
def convert(args)
|
123
|
+
words = if args.is_a?(String)
|
124
|
+
convert_string(args)
|
125
|
+
elsif args.is_a?(Array)
|
126
|
+
convert_array(args)
|
127
|
+
else
|
128
|
+
raise TypeError, "Error: Decoder accepts only Strings or Arrays."
|
129
|
+
end
|
130
|
+
words.map {|word| @dic[word]}
|
131
|
+
end
|
132
|
+
|
133
|
+
def convert_string args
|
134
|
+
args.split(' ').map {|word| word}
|
135
|
+
end
|
136
|
+
|
137
|
+
def convert_array args
|
99
138
|
words = []
|
100
|
-
|
101
|
-
|
139
|
+
args.each do |string|
|
140
|
+
string.split(' ').each do |word|
|
102
141
|
words << word
|
103
142
|
end
|
104
|
-
else
|
105
|
-
args.each do |string|
|
106
|
-
string.split(' ').each do |word|
|
107
|
-
words << word
|
108
|
-
end
|
109
|
-
end
|
110
143
|
end
|
111
|
-
words
|
144
|
+
return words
|
112
145
|
end
|
113
146
|
|
114
147
|
end # End of class Decoder
|
data/lib/cli.rb
CHANGED
@@ -7,6 +7,7 @@ module NATOPhone
|
|
7
7
|
class NATOPhoneCLI < Thor
|
8
8
|
|
9
9
|
desc "encode WORD(S)", "Encode to NATO alphabet"
|
10
|
+
map "-E" => "encode"
|
10
11
|
option :yell, aliases: '-Y', type: :boolean, desc: "Option to YELL the translation"
|
11
12
|
option :json, aliases: '-J', type: :boolean, desc: "Option to export the translation in JSON"
|
12
13
|
def encode(*args)
|
@@ -16,11 +17,12 @@ module NATOPhone
|
|
16
17
|
elsif options[:json]
|
17
18
|
puts enc.to_json
|
18
19
|
else
|
19
|
-
puts "\n#{enc
|
20
|
+
puts "\n#{enc}\n\n"
|
20
21
|
end
|
21
22
|
end
|
22
23
|
|
23
24
|
desc "decode NATO", "Decode from NATO alphabet"
|
25
|
+
map "-D" => "decode"
|
24
26
|
option :yell, aliases: '-Y', type: :boolean, desc: "Option to YELL the translation"
|
25
27
|
option :json, aliases: '-J', type: :boolean, desc: "Option to export the translation in JSON"
|
26
28
|
def decode(*args)
|
@@ -30,7 +32,7 @@ module NATOPhone
|
|
30
32
|
elsif options[:json]
|
31
33
|
puts dec.to_json
|
32
34
|
else
|
33
|
-
puts "\n#{dec
|
35
|
+
puts "\n#{dec}\n\n"
|
34
36
|
end
|
35
37
|
end
|
36
38
|
|
data/lib/version.rb
CHANGED
data/spec/natophone_spec.rb
CHANGED
@@ -7,11 +7,12 @@ describe NATOPhone::Encoder do
|
|
7
7
|
let(:enc2) { NATOPhone::Encoder.new(['1.0 Hello World.']) }
|
8
8
|
|
9
9
|
describe "#args" do
|
10
|
+
str = '1.0 Hello World.'
|
10
11
|
it "shows args" do
|
11
|
-
expect(enc.args).to eq
|
12
|
+
expect(enc.args).to eq str
|
12
13
|
end
|
13
14
|
it "shows args" do
|
14
|
-
expect(enc2.args).to eq [
|
15
|
+
expect(enc2.args).to eq [str]
|
15
16
|
end
|
16
17
|
end
|
17
18
|
|
@@ -21,14 +22,17 @@ describe NATOPhone::Encoder do
|
|
21
22
|
expect(enc.translate).to eq str
|
22
23
|
end
|
23
24
|
it "shows translation" do
|
24
|
-
expect(enc2.
|
25
|
+
expect(enc2.to_s).to eq str
|
26
|
+
end
|
27
|
+
it "shows translation" do
|
28
|
+
expect(NATOPhone::Encoder.new('uniq spaces').to_s).to eq 'uniform november india quebec - sierra papa alpha charlie echo sierra'
|
25
29
|
end
|
26
30
|
end
|
27
31
|
|
28
32
|
describe "#encode" do
|
29
33
|
arr = ["one", "stop", "zero", "-", "hotel", "echo", "lima", "lima", "oscar", "-", "whiskey", "oscar", "romeo", "lima", "delta", "stop"]
|
30
34
|
it "shows encoded result" do
|
31
|
-
expect(enc.
|
35
|
+
expect(enc.to_a).to eq arr
|
32
36
|
end
|
33
37
|
it "shows encoded result" do
|
34
38
|
expect(enc2.encode).to eq arr
|
@@ -46,19 +50,29 @@ describe NATOPhone::Encoder do
|
|
46
50
|
end
|
47
51
|
|
48
52
|
describe "#to_json" do
|
53
|
+
arg = '1.0 Hello World.'
|
54
|
+
trans = 'one stop zero - hotel echo lima lima oscar - whiskey oscar romeo lima delta stop'
|
55
|
+
deco = ["one", "stop", "zero", "-", "hotel", "echo", "lima", "lima", "oscar", "-", "whiskey", "oscar", "romeo", "lima", "delta", "stop"]
|
56
|
+
ye = 'ONE STOP ZERO - HOTEL ECHO LIMA LIMA OSCAR - WHISKEY OSCAR ROMEO LIMA DELTA STOP'
|
49
57
|
it "outputs json" do
|
50
58
|
j = JSON.parse(enc.to_json)
|
51
|
-
expect(j['args']).to eq
|
52
|
-
expect(j['translate']).to eq
|
53
|
-
expect(j['encode']).to eq
|
54
|
-
expect(j['yell']).to eq
|
59
|
+
expect(j['args']).to eq arg
|
60
|
+
expect(j['translate']).to eq trans
|
61
|
+
expect(j['encode']).to eq deco
|
62
|
+
expect(j['yell']).to eq ye
|
55
63
|
end
|
56
64
|
it "outputs json" do
|
57
65
|
j = JSON.parse(enc2.to_json)
|
58
|
-
expect(j['args']).to eq [
|
59
|
-
expect(j['translate']).to eq
|
60
|
-
expect(j['encode']).to eq
|
61
|
-
expect(j['yell']).to eq
|
66
|
+
expect(j['args']).to eq [arg]
|
67
|
+
expect(j['translate']).to eq trans
|
68
|
+
expect(j['encode']).to eq deco
|
69
|
+
expect(j['yell']).to eq ye
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "type error" do
|
74
|
+
it "raises a type error" do
|
75
|
+
expect(lambda {NATOPhone::Encoder.new({'test' => 'Run, you fools!'})}).to raise_error(TypeError)
|
62
76
|
end
|
63
77
|
end
|
64
78
|
|
@@ -82,10 +96,10 @@ describe NATOPhone::Decoder do
|
|
82
96
|
describe "#translate" do
|
83
97
|
str = '1.0 hello world.'
|
84
98
|
it "shows translation" do
|
85
|
-
expect(dec.
|
99
|
+
expect(dec.to_s).to eq str
|
86
100
|
end
|
87
101
|
it "shows translation" do
|
88
|
-
expect(dec2.
|
102
|
+
expect(dec2.to_s).to eq str
|
89
103
|
end
|
90
104
|
end
|
91
105
|
|
@@ -130,5 +144,11 @@ describe NATOPhone::Decoder do
|
|
130
144
|
end
|
131
145
|
end
|
132
146
|
|
147
|
+
describe "type error" do
|
148
|
+
it "raises a type error" do
|
149
|
+
expect(lambda {NATOPhone::Decoder.new({'test' => 'Run, you fools!'})}).to raise_error(TypeError)
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
133
153
|
end
|
134
154
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: natophone
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Dejonckheere
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-09-
|
11
|
+
date: 2014-09-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|