Class: Mi100::Morsecoder

Inherits:
Object
  • Object
show all
Defined in:
lib/mi100/morsecoder.rb

Constant Summary collapse

DEFAULT_MORSE_UNIT_MILLIS =
50
DEFAULT_MORSE_FREQUENCY =
4000
DEFAULT_LETTER_SPACE_DOTS =
3
DEFAULT_WORD_SPACE_DOTS =
7
MORSECODE =
{ 
  "1" => [1,3,3,3,3],
  "2" => [1,1,3,3,3],
  "3" => [1,1,1,3,3],
  "4" => [1,1,1,1,3],
  "5" => [1,1,1,1,1],
  "6" => [3,1,1,1,1],
  "7" => [3,3,1,1,1],
  "8" => [3,3,3,1,1],
  "9" => [3,3,3,3,1],
  "0" => [3,3,3,3,3],
  "A" => [1,3],
  "B" => [3,1,1,1],
  "C" => [3,1,3,1],
  "D" => [3,1,1],
  "E" => [1],
  "F" => [1,1,3,1],
  "G" => [3,3,1],
  "H" => [1,1,1,1],
  "I" => [1,1],
  "J" => [1,3,3,3],
  "K" => [1,3,1,1],
  "L" => [1,3,1,1],
  "M" => [3,3],
  "N" => [3,1],
  "O" => [3,3,3],
  "P" => [1,3,3,1],
  "Q" => [3,3,1,3],
  "R" => [1,3,1],
  "S" => [1,1,1],
  "T" => [3],
  "U" => [1,1,3],
  "V" => [1,1,1,3],
  "W" => [1,3,3],
  "X" => [3,1,1,3],
  "Y" => [3,1,3,3],
  "Z" => [3,3,1,1],
  "." => [1,3,1,3,1,3],
  "," => [3,3,1,1,3,3],
  "?" => [1,1,3,3,1,1],
  "!" => [3,1,3,1,3,3],
  "-" => [3,1,1,1,1,3],
  "/" => [3,1,1,3,1],
  "@" => [1,3,3,1,3,1],
  "(" => [3,1,3,3,1],
  ")" => [3,1,3,3,1,3]
}

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(str = "HELLO WORLD", frequency = Morsecoder.default_frequency, unit = Morsecoder.default_unit) ⇒ Morsecoder



105
106
107
108
109
# File 'lib/mi100/morsecoder.rb', line 105

def initialize(str="HELLO WORLD", frequency = Morsecoder.default_frequency, unit=Morsecoder.default_unit)
  @str = str
  @frequency = frequency
  @unit = unit
end

Class Attribute Details

.default_frequencyObject

Returns the value of attribute default_frequency.



71
72
73
# File 'lib/mi100/morsecoder.rb', line 71

def default_frequency
  @default_frequency
end

.default_unitObject

Returns the value of attribute default_unit.



71
72
73
# File 'lib/mi100/morsecoder.rb', line 71

def default_unit
  @default_unit
end

Instance Attribute Details

#frequencyObject

Returns the value of attribute frequency.



103
104
105
# File 'lib/mi100/morsecoder.rb', line 103

def frequency
  @frequency
end

#strObject

Returns the value of attribute str.



103
104
105
# File 'lib/mi100/morsecoder.rb', line 103

def str
  @str
end

#unitObject

Returns the value of attribute unit.



103
104
105
# File 'lib/mi100/morsecoder.rb', line 103

def unit
  @unit
end

Class Method Details

.resetObject



94
95
96
97
98
99
# File 'lib/mi100/morsecoder.rb', line 94

def reset
  @default_unit = DEFAULT_MORSE_UNIT_MILLIS
  @default_frequency = DEFAULT_MORSE_FREQUENCY
  @default_letter_space = DEFAULT_LETTER_SPACE_DOTS
  @default_word_space = DEFAULT_WORD_SPACE_DOTS
end

.to_morse_from(the_str, frequency = @default_frequency, unit = @default_unit) ⇒ Object



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/mi100/morsecoder.rb', line 73

def to_morse_from(the_str, frequency = @default_frequency, unit = @default_unit)
  letter_space = @default_letter_space
  word_space = @default_word_space
  morsecode = []

  the_str.to_s.split(//).each do |char|
    code = MORSECODE[char.upcase]
    if code
      code.each do |dots|
        morsecode << {frequency: frequency, duration: unit * dots}
        morsecode << {frequency: false, duration: unit * dots}
      end
      morsecode << {frequency: false, duration: unit * letter_space}
    else
      morsecode << {frequency: false, duration: unit * word_space}
    end
  end
  
  morsecode
end

Instance Method Details

#eachObject



117
118
119
# File 'lib/mi100/morsecoder.rb', line 117

def each
  to_morse.each {|code| yield(code[:frequency], code[:duration])}
end

#to_morseObject



111
112
113
114
115
# File 'lib/mi100/morsecoder.rb', line 111

def to_morse
  frequency = @frequency
  unit = @unit
  Morsecoder.to_morse_from(@str, frequency, unit)
end