shift_cipher 0.1.1 → 1.0.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
  SHA1:
3
- metadata.gz: abdd06cc35ae61955bdefcf9f9792c9c7b13bdd8
4
- data.tar.gz: 66e3503497f4dc3e349f62804fc7c5f24614698e
3
+ metadata.gz: 62a19e3156396b6ae9b8e03e92147b6afa6939eb
4
+ data.tar.gz: 0a127d219db38403c298c6a6ec059c7db5fca804
5
5
  SHA512:
6
- metadata.gz: a7fbc28663808cce272ed4ab46f5bcfc509e5b47fafaf0e8408840e3f23a9c3cbae531da33dd460fc23344418f6d7e275888cc64523d6a3b3d84cd685cd25d79
7
- data.tar.gz: 36817906f3b14ae747319c7792688d82b559975c04f7f77a60bb30086070afa50d3ecd8fcb586ba3f5747bc9fbb0995712930721eae45803c914bf847ada1d71
6
+ metadata.gz: 6afa30e0afb2236a92659fa775b6bede6652d6d668628e0e05b0fbc55aa6f9342d18fac8611033a94297a8d81d6bb9422b0be759ef66d233677d3e63beb8f6c0
7
+ data.tar.gz: 726d3a52c26e4fb3dffbb1ecef70110ec70e38c11bccb33109daa69f5db79c08fe683cbf91fc8e6e874829ca5596e93affb5b3696a110894215d023a8d9c18dc
data/README.md CHANGED
@@ -1,12 +1,12 @@
1
1
  # ShiftCipher
2
2
 
3
- A simple shift cipher, also known as a caeser ciipher
3
+ A simple shift cipher, also known as a Caesar cipher
4
4
 
5
5
  ## Installation
6
6
 
7
7
  Add this line to your application's Gemfile:
8
8
 
9
- ```ruby
9
+ ```
10
10
  gem 'shift_cipher'
11
11
  ```
12
12
 
@@ -20,28 +20,52 @@ Or install it yourself as:
20
20
 
21
21
  ## Usage
22
22
 
23
- Initialise the Caeser cipher
23
+ Initialise the Caesar cipher
24
24
 
25
- ```ruby
26
- cipher = ShiftCipher::Caeser.new(3) # initialised with an offset of 3 ('a' = 'd')
27
25
  ```
26
+ cipher = ShiftCipher::Caesar.new(3) # initialised with an offset of 3 ('a' = 'd')
27
+ ```
28
+
28
29
  or
29
- ```ruby
30
- cipher = ShiftCipher::Caeser.new('d') # initialised with an offset of 3 ('a' = 'd')
30
+
31
+ ```
32
+ cipher = ShiftCipher::Caesar.new(-3) # initialised with a negative offset of 3 ('a' = 'x')
33
+ ```
34
+
35
+ or
36
+
37
+
38
+ ```
39
+ cipher = ShiftCipher::Caesar.new('d') # initialised with an offset of 3 ('a' = 'd')
31
40
  ```
32
41
 
33
42
  Encrypt a message:
34
- ```ruby
43
+
44
+ ```
35
45
  encrypted_message = cipher.encrypt('hello world')
36
46
  p encrypted_message # => "khoor zruog"
37
47
  ```
38
48
 
39
49
  Decrypt a message:
40
- ```ruby
50
+
51
+ ```
41
52
  decrypted_message = cipher.decrypt('khoor zruog')
42
53
  p decrypted_message # => "hello world"
43
54
  ```
44
55
 
56
+ ### Using the CLI tool:
57
+
58
+ ````
59
+ shift_cipher [options] text
60
+ ````
61
+
62
+ #### Options
63
+ ```-h, --help``` Displays help message
64
+ ```-o, --offset OFFSET``` Sets the alphabet offset
65
+ ```-s, --start START``` Sets the starting letter of the shifted alphabet
66
+ ```-d, --decrypt``` Decrypts the given message Decrypt
67
+
68
+
45
69
  ## Development
46
70
 
47
71
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
data/bin/shift_cipher ADDED
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # == Synopsis
4
+ # This is a simple shift (Caesar) cipher for Ruby
5
+ #
6
+ # == Examples
7
+ # Encode text
8
+ # shift_cipher -o 4 "hello world" => "khoor zruog"
9
+ # Decode text
10
+ # shift_cipher -o 4 -d "khoor zruog" => "hello world"
11
+ #
12
+ # Other examples:
13
+ # We can set the starting letter of the shifted alphabet rather than the offset. The following is
14
+ # equivalent to shift_cipher -o 3 "hello world"
15
+ # shift_cipher -s "c" "hello world" => "jgnnq yqtnf"
16
+ #
17
+ # == Usage
18
+ # shift_cipher [options] text
19
+ #
20
+ # For help use: shift_cipher -h
21
+ #
22
+ # == Options
23
+ # -h, --help Displays help message
24
+ # -o, --offset OFFSET Sets the alphabet offset
25
+ # -s, --start START Sets the starting letter of the shifted alphabet
26
+ # -d, --decrypt Decrypts the given message Decrypt
27
+ #
28
+ # == Author
29
+ # elsapet
30
+ #
31
+ # == Copyright
32
+ # Copyright (c) 2015 elsapet
33
+ # Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php
34
+
35
+
36
+ require 'shift_cipher'
37
+ require 'optparse'
38
+
39
+ options = {}
40
+
41
+ OptionParser.new do |opts|
42
+ opts.on("-o [OFFSET]", "--offset [OFFSET]", "-s [OFFSET]", "--start [OFFSET]") do |o|
43
+ options[:offset] = o
44
+ end
45
+ opts.on("-d", "--decrypt", "Decrypt") do
46
+ options[:decrypt] = true
47
+ end
48
+ end.parse!
49
+
50
+ cipher = options[:offset] ? ShiftCipher::Caesar.new(options[:offset]) : ShiftCipher::Caesar.new
51
+
52
+ if options[:decrypt]
53
+ p cipher.decrypt(ARGV.last)
54
+ else
55
+ p cipher.encrypt(ARGV.last)
56
+ end
@@ -0,0 +1,80 @@
1
+ module ShiftCipher
2
+ class Caesar
3
+ attr_accessor :offset
4
+
5
+ def initialize(start = 0)
6
+
7
+ # set default
8
+ @offset = 0
9
+
10
+ # have we got a string?
11
+ if start.respond_to?(:ord)
12
+
13
+ # is it alphabetic?
14
+ if ('A'..'Z').include?(start)
15
+ @offset = start.downcase.ord - 97
16
+ elsif ('a'..'z').include?(start)
17
+ @offset = start.ord - 97
18
+
19
+ # is it numeric & in range?
20
+ elsif (1..26).include?(start.to_i.abs)
21
+ @offset = start.to_i
22
+ end
23
+
24
+ # have we got a number
25
+ elsif start.respond_to?(:to_i)
26
+ # is it in range?
27
+ if (1..26).include?(start.to_i)
28
+ @offset = start.to_i
29
+ end
30
+ end
31
+
32
+ # raise an error ...
33
+ # what about case when start set to 0?
34
+ end
35
+
36
+ def encrypt(message)
37
+ shift(message, @offset)
38
+ end
39
+
40
+ def decrypt(message)
41
+ shift(message, - @offset)
42
+ end
43
+
44
+ private
45
+ def shift(message, directional_offset)
46
+ shifted_message = ""
47
+ message.downcase.split("").each do |character|
48
+ if is_alpha?(character)
49
+ shifted_character = shift_character(character, directional_offset)
50
+ shifted_message += shifted_character
51
+ elsif is_numeric?(character) #or is_whitespace?(character)
52
+ shifted_message += character
53
+ end
54
+ end if message
55
+ shifted_message.squeeze(' ')
56
+ end
57
+
58
+ def is_alpha?(character)
59
+ character.match(/^[[:alpha:]]$/)
60
+ end
61
+
62
+ def is_numeric?(character)
63
+ character.match(/^[[:digit:]]$/)
64
+ end
65
+
66
+ def is_whitespace?(character)
67
+ character.match(/^\s$/)
68
+ end
69
+
70
+ def shift_character(character, offset)
71
+ shifted_ord = character.ord + offset
72
+ if shifted_ord < 97
73
+ shifted_ord = 123 - (97 - shifted_ord)
74
+ elsif shifted_ord > 122
75
+ shifted_ord = 97 + (shifted_ord - 123)
76
+ end
77
+ shifted_ord.chr
78
+ end
79
+ end
80
+ end
@@ -1,3 +1,3 @@
1
1
  module ShiftCipher
2
- VERSION = "0.1.1"
2
+ VERSION = "1.0.0"
3
3
  end
data/lib/shift_cipher.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require "shift_cipher/version"
2
- require "shift_cipher/caeser"
2
+ require "shift_cipher/caesar"
3
3
 
4
4
  module ShiftCipher
5
5
  end
data/shift_cipher.gemspec CHANGED
@@ -7,16 +7,14 @@ Gem::Specification.new do |spec|
7
7
  spec.name = "shift_cipher"
8
8
  spec.version = ShiftCipher::VERSION
9
9
  spec.authors = ["elsapet"]
10
- spec.email = ["ebraae@gmail.com"]
11
10
 
12
11
  spec.summary = "encrypt and de-crypt messages"
13
- spec.description = "encrypt and de-crypt messages using a simple caeser cipher, given an offset"
12
+ spec.description = "encrypt and de-crypt messages using a simple Caesar cipher, given an offset"
14
13
  spec.homepage = "https://github.com/elsapet/shift_cipher"
15
14
  spec.license = "MIT"
16
15
 
17
16
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
- spec.bindir = "exe"
19
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
17
+ spec.executables = ["shift_cipher"]
20
18
  spec.require_paths = ["lib"]
21
19
 
22
20
  spec.add_development_dependency "bundler", "~> 1.9"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shift_cipher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - elsapet
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-03 00:00:00.000000000 Z
11
+ date: 2015-06-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -72,11 +72,11 @@ dependencies:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
74
  version: 0.10.0
75
- description: encrypt and de-crypt messages using a simple caeser cipher, given an
75
+ description: encrypt and de-crypt messages using a simple Caesar cipher, given an
76
76
  offset
77
- email:
78
- - ebraae@gmail.com
79
- executables: []
77
+ email:
78
+ executables:
79
+ - shift_cipher
80
80
  extensions: []
81
81
  extra_rdoc_files: []
82
82
  files:
@@ -89,7 +89,9 @@ files:
89
89
  - Rakefile
90
90
  - bin/console
91
91
  - bin/setup
92
+ - bin/shift_cipher
92
93
  - lib/shift_cipher.rb
94
+ - lib/shift_cipher/caesar.rb
93
95
  - lib/shift_cipher/caeser.rb
94
96
  - lib/shift_cipher/version.rb
95
97
  - shift_cipher.gemspec
@@ -113,7 +115,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
115
  version: '0'
114
116
  requirements: []
115
117
  rubyforge_project:
116
- rubygems_version: 2.4.6
118
+ rubygems_version: 2.2.1
117
119
  signing_key:
118
120
  specification_version: 4
119
121
  summary: encrypt and de-crypt messages