crypt-rot13 1.0.3 → 1.0.4
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.
- data/CHANGES +5 -0
- data/Rakefile +26 -0
- data/crypt-rot13.gemspec +22 -0
- data/lib/crypt/rot13.rb +53 -0
- data/test/test_crypt_rot13.rb +2 -2
- metadata +7 -4
data/CHANGES
CHANGED
data/Rakefile
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
|
4
|
+
desc 'Install the crypt-rot13 library (non-gem)'
|
5
|
+
task :install do
|
6
|
+
dest = File.join(Config::CONFIG['sitelibdir'], 'crypt')
|
7
|
+
Dir.mkdir(dest) unless File.exists? dest
|
8
|
+
cp 'lib/crypt/rot13.rb', dest, :verbose => true
|
9
|
+
end
|
10
|
+
|
11
|
+
desc 'Build the crypt-rot13 gem'
|
12
|
+
task :gem do
|
13
|
+
spec = eval(IO.read('crypt-rot13.gemspec'))
|
14
|
+
Gem::Builder.new(spec).build
|
15
|
+
end
|
16
|
+
|
17
|
+
desc 'Install the crypt-rot13 library as a gem'
|
18
|
+
task :install_gem => [:gem] do
|
19
|
+
file = Dir["*.gem"].first
|
20
|
+
sh "gem install #{file}"
|
21
|
+
end
|
22
|
+
|
23
|
+
Rake::TestTask.new do |t|
|
24
|
+
t.warning = true
|
25
|
+
t.verbose = true
|
26
|
+
end
|
data/crypt-rot13.gemspec
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
|
3
|
+
Gem::Specification.new do |gem|
|
4
|
+
gem.name = 'crypt-rot13'
|
5
|
+
gem.version = '1.0.4'
|
6
|
+
gem.author = 'Daniel J. Berger'
|
7
|
+
gem.license = 'Artistic 2.0'
|
8
|
+
gem.email = 'djberg96@gmail.com'
|
9
|
+
gem.homepage = 'http://www.rubyforge.org/projects/shards'
|
10
|
+
gem.summary = 'Character rotation encryption, i.e. Caesar Cipher'
|
11
|
+
gem.test_file = 'test/test_crypt_rot13.rb'
|
12
|
+
gem.has_rdoc = true
|
13
|
+
gem.files = Dir['**/*'].reject{ |f| f.include?('CVS') }
|
14
|
+
|
15
|
+
gem.rubyforge_project = 'shards'
|
16
|
+
gem.extra_rdoc_files = ['README', 'CHANGES', 'MANIFEST']
|
17
|
+
|
18
|
+
gem.description = <<-EOF
|
19
|
+
The crypt-rot13 library provides an interface for a simple character
|
20
|
+
substitution cipher known as ROT13, a variation on the Caesar cipher.
|
21
|
+
EOF
|
22
|
+
end
|
data/lib/crypt/rot13.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
# The Crypt module serves as a namespace only.
|
2
|
+
module Crypt
|
3
|
+
|
4
|
+
# The Rot13 class encapsulates methods governing character rotation.
|
5
|
+
class Rot13 < String
|
6
|
+
|
7
|
+
# The Rot13::Error class is raised if an illegal rotation value is used.
|
8
|
+
class Error < ArgumentError; end
|
9
|
+
|
10
|
+
# The version of the crypt-rot13 library.
|
11
|
+
VERSION = '1.0.4'
|
12
|
+
|
13
|
+
# Returns a new Rot13 object. The object is a string with the letters
|
14
|
+
# each rotated by +degree+.
|
15
|
+
#
|
16
|
+
# You cannot use a multiple of 26 as the degree or a Rot13::Error will
|
17
|
+
# be raised. So, your days of double rot13 encryption are over.
|
18
|
+
#
|
19
|
+
def initialize(str='', degree=13)
|
20
|
+
str = rotate_string(str, degree) unless str.empty?
|
21
|
+
super(str)
|
22
|
+
end
|
23
|
+
|
24
|
+
# Rotates the Crypt::Rot13 object by +degree+.
|
25
|
+
#
|
26
|
+
def rotate(degree)
|
27
|
+
rotate_string(self, degree)
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def rotate_string(str, degree)
|
33
|
+
case degree.modulo(26)
|
34
|
+
when 0
|
35
|
+
raise Error, 'degree must not be a multiple of 26'
|
36
|
+
when 13
|
37
|
+
str = str.tr('a-zA-Z', 'n-za-mN-ZA-M')
|
38
|
+
else
|
39
|
+
str = str.unpack('C' * str.length).map!{ |e|
|
40
|
+
if e >= 97 && e <= 122
|
41
|
+
e = ((e - 97 + degree) % 26) + 97
|
42
|
+
elsif e >= 65 && e <= 90
|
43
|
+
e = ((e - 65 + degree) % 26) + 65
|
44
|
+
else
|
45
|
+
e = e
|
46
|
+
end
|
47
|
+
}.pack('C' * str.length)
|
48
|
+
end
|
49
|
+
|
50
|
+
str
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/test/test_crypt_rot13.rb
CHANGED
@@ -22,7 +22,7 @@ class TC_Rot13 < Test::Unit::TestCase
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def test_version
|
25
|
-
assert_equal('1.0.
|
25
|
+
assert_equal('1.0.4', Rot13::VERSION)
|
26
26
|
end
|
27
27
|
|
28
28
|
def test_constructor
|
@@ -43,7 +43,7 @@ class TC_Rot13 < Test::Unit::TestCase
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def test_string_class
|
46
|
-
assert_kind_of(String
|
46
|
+
assert_kind_of(String, @r1)
|
47
47
|
end
|
48
48
|
|
49
49
|
def test_return_value_default_degree
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: crypt-rot13
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel J. Berger
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-09-24 00:00:00 -06:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -24,10 +24,13 @@ extra_rdoc_files:
|
|
24
24
|
- CHANGES
|
25
25
|
- MANIFEST
|
26
26
|
files:
|
27
|
-
- test/test_crypt_rot13.rb
|
28
|
-
- README
|
29
27
|
- CHANGES
|
28
|
+
- crypt-rot13.gemspec
|
29
|
+
- lib/crypt/rot13.rb
|
30
30
|
- MANIFEST
|
31
|
+
- Rakefile
|
32
|
+
- README
|
33
|
+
- test/test_crypt_rot13.rb
|
31
34
|
has_rdoc: true
|
32
35
|
homepage: http://www.rubyforge.org/projects/shards
|
33
36
|
licenses:
|