morse-code-rb 0.4.0 → 0.5.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.
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