Sha256: 41c535795221a532ce4a23bb3c2af0972e0561d61163682036f739e5b410bcc5
Contents?: true
Size: 1.64 KB
Versions: 1
Compression:
Stored size: 1.64 KB
Contents
module ShiftCipher class Caeser attr_accessor :offset def initialize(start = 0) # set default @offset = 0 # have we got a string? if start.respond_to?(:ord) # is it alphabetic? if ('A'..'Z').include?(start) @offset = start.downcase.ord - 97 elsif ('a'..'z').include?(start) @offset = start.ord - 97 # is it numeric & in range? elsif (1..26).include?(start.to_i) @offset = start.to_i end # have we got a number elsif start.respond_to?(:to_i) # is it in range? if (1..26).include?(start.to_i) @offset = start.to_i end end # raise an error ... # what about case when start set to 0? end def encrypt(message) shift(message, @offset) end def decrypt(message) shift(message, - @offset) end private def shift(message, directional_offset) shifted_message = "" message.downcase.split("").each do |character| if is_alpha?(character) shifted_character = shift_character(character, directional_offset) shifted_message += shifted_character else shifted_message += character end end if message shifted_message end def is_alpha?(character) character.match(/^[[:alpha:]]$/) end def shift_character(character, offset) shifted_ord = character.ord + offset if shifted_ord < 97 shifted_ord = 123 - (97 - shifted_ord) elsif shifted_ord > 122 shifted_ord = 97 + (shifted_ord - 123) end shifted_ord.chr end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
shift_cipher-0.1.0 | lib/shift_cipher/caeser.rb |