morse-code-rb 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d462b9a026bf1b78899a3658c9f1aea1724c55e3a667885411643e7d5cf87bba
4
- data.tar.gz: 863ca3cca3e2aeafabbd8af2dbc38e5a3d789c43a6d4a792992d7de803fbcd79
3
+ metadata.gz: 9263cb71a4b0825bf8c972a69d46a3b2461c7769ac77fe7d6aa1703bf0d90738
4
+ data.tar.gz: 150bcd7cc8363c9dd9b16c860941000d8884568c215786da5322a7d719e7fd26
5
5
  SHA512:
6
- metadata.gz: fea1e42aeae37195b47e1ad0a4230b17711d93ba92ca57177e6c17b9c10c1e9ed6f5b851f0c89ed49eb266363c1672b6a1dcd2da1c21717189014494e98481c0
7
- data.tar.gz: ca1ab83f9bc9ede971db2c47712f5765517aa6b02569c5880cd70872f74782de64229c56c1f57d44e21f55e550e4e8dfea286958d3d99f99716b2db73951105e
6
+ metadata.gz: eddd17a7394c4175351df3846a6386cc093ebad82eaf534517d6482e0b329558f60b14791ec5074c03ed34c8b83e9a4876bfa214e8ad523927d6eabbd85e589b
7
+ data.tar.gz: 5ad8cfdf1eb2746d7a71290041f43d4519d7ee380159f89ed172bd52593f157c9377b1cd88058610cbdee9e266bac9d7405ba037571a828ccac54594b16c7e40
data/README.md CHANGED
@@ -103,7 +103,7 @@ $> mc -e 'I am Robot.' --dit-dah
103
103
  => "DITDIT / DITDAH DAHDAH / DITDAHDIT DAHDAHDAH DAHDITDITDIT DAHDAHDAH DAH DITDAHDITDAHDITDAH"
104
104
 
105
105
  $> mc -e 'I am Chinese 我是中国人'
106
- $> ".. / .- -- / -.-. .... .. -. . ... . / --...-....-...- --..--...-.---- -..---...-.--.- -.-.--.------.- -..---.-.---.-."
106
+ => ".. / .- -- / -.-. .... .. -. . ... . / --...-....-...- --..--...-.---- -..---...-.--.- -.-.--.------.- -..---.-.---.-."
107
107
 
108
108
  $> mc -e -w 'I am Chinese 我是中国人'
109
109
  => ".. / .- -- / -.-. .... .. -. . ... . / --...-....-...- --..--...-.---- -..---...-.--.- -.-.--.------.- -..---.-.---.-."
@@ -151,6 +151,11 @@ $ bundle exec rake test
151
151
 
152
152
  Click the `'Pull Request'` button and fill out the form.
153
153
 
154
+ ### Resource
155
+ - [Learn More Code](http://www.learnmorsecode.com/)
156
+ - [Morse Pro](https://github.com/scp93ch/morse-pro)
157
+ - [Wavefile](https://github.com/jstrait/wavefile)
158
+
154
159
  ### License
155
160
 
156
161
  MIT License. See [LICENSE](https://github.com/superiorlu/morse_code/blob/master/LICENSE.md) for details.
@@ -1,5 +1,6 @@
1
1
  require 'morse_code/version'
2
2
  require 'morse_code/error'
3
+ require 'morse_code/cacheable'
3
4
  require 'morse_code/encoder'
4
5
  require 'morse_code/decoder'
5
6
  require 'morse_code/sample'
@@ -9,14 +9,24 @@ module MorseCode
9
9
  @@subclasses << subclass
10
10
  end
11
11
 
12
- attr_reader :word
12
+ attr_reader :word, :namespace
13
13
 
14
- def initialize(word = '')
14
+ def initialize(word = '', namespace = '')
15
15
  @word = word
16
+ @namespace = namespace
16
17
  end
17
18
 
18
19
  def supported?
19
- raise NotImplementedError, 'Subclass must override supported? method'
20
+ raise MorseCode::NotImplementedError, 'Subclass must override supported? method'
21
+ end
22
+
23
+ def call
24
+ return supported_class.new(word).call if supported_class
25
+ word
26
+ end
27
+
28
+ def supported_class
29
+ supported_classes.detect { |clazz| clazz.name.start_with?(namespace) }
20
30
  end
21
31
 
22
32
  def supported_classes
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MorseCode
4
+ module Cacheable
5
+ def cache
6
+ @cache ||= {}
7
+ end
8
+
9
+ def fetch(key)
10
+ return cache[key] if cache[key]
11
+ value = yield
12
+ cache[key] = value
13
+ value
14
+ end
15
+ end
16
+ end
@@ -7,6 +7,8 @@ require 'morse_code/decoders/english'
7
7
 
8
8
  module MorseCode
9
9
  class Decoder
10
+ include MorseCode::Cacheable
11
+
10
12
  def initialize(message = '')
11
13
  @message = message.dup
12
14
  end
@@ -35,11 +37,9 @@ module MorseCode
35
37
  private
36
38
 
37
39
  def decode_char(char)
38
- supported_classes = MorseCode::Base.new(char).supported_classes
39
- supported_class = supported_classes.detect { |clazz| clazz.name.start_with?('MorseCode::Decoder') }
40
- return supported_class.new(char).decode if supported_class
41
-
42
- char
40
+ fetch(char) do
41
+ MorseCode::Base.new(char, self.class.name).call
42
+ end
43
43
  end
44
44
  end
45
45
  end
@@ -13,7 +13,7 @@ module MorseCode
13
13
  decode_binary_word >= MIN_CHINESE_CODEPOINT && decode_binary_word <= MAX_CHINESE_CODEPOINT
14
14
  end
15
15
 
16
- def decode
16
+ def call
17
17
  decode_binary_word.chr('UTF-8')
18
18
  end
19
19
 
@@ -10,7 +10,7 @@ module MorseCode
10
10
  !MorseCode::DECODE_MAP[word].nil?
11
11
  end
12
12
 
13
- def decode
13
+ def call
14
14
  MorseCode::DECODE_MAP[word]
15
15
  end
16
16
  end
@@ -7,6 +7,8 @@ require 'morse_code/encoders/english'
7
7
 
8
8
  module MorseCode
9
9
  class Encoder
10
+ include MorseCode::Cacheable
11
+
10
12
  def initialize(message = '')
11
13
  @message = message.upcase
12
14
  end
@@ -38,11 +40,9 @@ module MorseCode
38
40
  end
39
41
 
40
42
  def encode_letter(letter)
41
- supported_classes = MorseCode::Base.new(letter).supported_classes
42
- supported_class = supported_classes.detect { |clazz| clazz.name.start_with?('MorseCode::Encoder') }
43
- return supported_class.new(letter).encode if supported_class
44
-
45
- letter
43
+ fetch(letter) do
44
+ MorseCode::Base.new(letter, self.class.name).call
45
+ end
46
46
  end
47
47
  end
48
48
  end
@@ -10,7 +10,7 @@ module MorseCode
10
10
  !/\p{Han}/.match(word).nil? # \u4e00-\u9fa5
11
11
  end
12
12
 
13
- def encode
13
+ def call
14
14
  word.ord.to_s(2).tr!('0', '.').tr!('1', '-')
15
15
  end
16
16
  end
@@ -10,7 +10,7 @@ module MorseCode
10
10
  !MorseCode::ENCODE_MAP[word].nil?
11
11
  end
12
12
 
13
- def encode
13
+ def call
14
14
  MorseCode::ENCODE_MAP[word]
15
15
  end
16
16
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MorseCode
4
- VERSION = '0.4.0'.freeze
4
+ VERSION = '0.5.0'.freeze
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: morse-code-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - YingRui Lu
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-28 00:00:00.000000000 Z
11
+ date: 2018-11-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -205,6 +205,7 @@ files:
205
205
  - bin/mc
206
206
  - lib/morse_code.rb
207
207
  - lib/morse_code/base.rb
208
+ - lib/morse_code/cacheable.rb
208
209
  - lib/morse_code/cli.rb
209
210
  - lib/morse_code/decoder.rb
210
211
  - lib/morse_code/decoders/chinese.rb