caesar 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.
Files changed (3) hide show
  1. data/README.textile +21 -0
  2. data/lib/caesar.rb +51 -0
  3. metadata +55 -0
@@ -0,0 +1,21 @@
1
+ h1. Caesar Cipher
2
+
3
+ encode/decode any string using the Caesar Cipher method.
4
+
5
+ h3. Instalation
6
+
7
+ pre. gem install caesar
8
+
9
+ h3. Usage
10
+
11
+ bc.. require 'caesar'
12
+
13
+ Caesar.encode('A', 'CAESAR') #=> "CAESAR"
14
+ Caesar.encode('R', 'CAESAR') #=> "TRVJRI"
15
+
16
+ Caesar.decode('A', 'CAESAR') #=> "CAESAR"
17
+ Caesar.decode('R', 'TRVJRI') #=> "CAESAR"
18
+
19
+ h3. Authors
20
+
21
+ Roberto Decurnex ("nex.development@gmail.com":malto:nex.development@gmail.com)
@@ -0,0 +1,51 @@
1
+ # Caesar Cipher
2
+ #
3
+ # encode/decode any string using the Caesar Cipher method.
4
+ #
5
+ # Usage:
6
+ # Caesar.encode('A', 'CAESAR') #=> "CAESAR"
7
+ # Caesar.encode('R', 'CAESAR') #=> "TRVJRI"
8
+ #
9
+ # Caesar.decode('A', 'CAESAR') #=> "CAESAR"
10
+ # Caesar.decode('R', 'TRVJRI') #=> "CAESAR"
11
+ #
12
+
13
+ module Caesar
14
+ A_OFFSET = 65 #'A'.unpack('C').first
15
+ Z_OFFSET = 90 #'Z'.unpack('C').first
16
+
17
+ def Caesar.encode(key, plain_text)
18
+ key_offset = key.upcase.unpack('C').first
19
+
20
+ cipher_text = plain_text.upcase.split('').collect do |letter|
21
+ cipher_letter = (letter.unpack('C').first + key_offset - A_OFFSET)
22
+ if cipher_letter > Z_OFFSET
23
+ cipher_letter -= ( Z_OFFSET - A_OFFSET + 1 )
24
+ end
25
+ cipher_letter.chr
26
+ end
27
+
28
+ return cipher_text.join
29
+ end
30
+
31
+ def Caesar.decode(key, cipher_text)
32
+ key_offset = key.upcase.unpack('C').first
33
+
34
+ plain_text = cipher_text.split('').collect do |cipher_letter|
35
+ if !('A'..'Z').include?(cipher_letter)
36
+ cipher_letter
37
+ else
38
+ if cipher_letter.unpack('C').first >= key_offset
39
+ letter = cipher_letter.unpack('C').first - key_offset
40
+ else
41
+ letter = (cipher_letter.unpack('C').first + (Z_OFFSET - A_OFFSET + 1)) - key_offset
42
+ end
43
+ letter += A_OFFSET
44
+ letter.chr
45
+ end
46
+ end
47
+
48
+ return plain_text.join
49
+ end
50
+ end
51
+
metadata ADDED
@@ -0,0 +1,55 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: caesar
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: "0.3"
6
+ platform: ruby
7
+ authors:
8
+ - Roberto Decurnex
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-07-18 00:00:00 Z
14
+ dependencies: []
15
+
16
+ description: A simple Caesar Cipher ruby implementation
17
+ email: nex.development@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - README.textile
26
+ - lib/caesar.rb
27
+ homepage: http://robertodecurnex.github.com/caesar
28
+ licenses: []
29
+
30
+ post_install_message:
31
+ rdoc_options: []
32
+
33
+ require_paths:
34
+ - lib
35
+ required_ruby_version: !ruby/object:Gem::Requirement
36
+ none: false
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: "0"
41
+ required_rubygems_version: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "0"
47
+ requirements: []
48
+
49
+ rubyforge_project:
50
+ rubygems_version: 1.8.5
51
+ signing_key:
52
+ specification_version: 3
53
+ summary: caesar-0.1
54
+ test_files: []
55
+