shift_cipher 1.0.0 → 1.1.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
- SHA1:
3
- metadata.gz: 62a19e3156396b6ae9b8e03e92147b6afa6939eb
4
- data.tar.gz: 0a127d219db38403c298c6a6ec059c7db5fca804
2
+ SHA256:
3
+ metadata.gz: 87ae282c5d202c988b9b263d2f36ee535670c8fe64e6505d87189ee43d0bf66f
4
+ data.tar.gz: 7bf8d7cf8071fa62afc459d6fdfbb621beca9c831bd42881cacd1f370e72c2fe
5
5
  SHA512:
6
- metadata.gz: 6afa30e0afb2236a92659fa775b6bede6652d6d668628e0e05b0fbc55aa6f9342d18fac8611033a94297a8d81d6bb9422b0be759ef66d233677d3e63beb8f6c0
7
- data.tar.gz: 726d3a52c26e4fb3dffbb1ecef70110ec70e38c11bccb33109daa69f5db79c08fe683cbf91fc8e6e874829ca5596e93affb5b3696a110894215d023a8d9c18dc
6
+ metadata.gz: f06e85cc27dc998ab730ae3dabe9bc479234bcda5755a90d3d323e6a835cdb690ea605e634a1078482d327e5d873dc91e6717262b5c23fb69b9d103592dea19d
7
+ data.tar.gz: 96ebd739e5923a9f51f628ae4f1702c8cce3412785c391b07260ce236b6e5ec45a4301175703a8aec4bea9bffa907d78b3470707802a5cbb75f379e82232f386
data/.travis.yml CHANGED
@@ -1,3 +1,3 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.2.1
3
+ - 2.5.1
data/README.md CHANGED
@@ -43,29 +43,16 @@ Encrypt a message:
43
43
 
44
44
  ```
45
45
  encrypted_message = cipher.encrypt('hello world')
46
- p encrypted_message # => "khoor zruog"
46
+ p encrypted_message # => "khoorzruog"
47
47
  ```
48
48
 
49
49
  Decrypt a message:
50
50
 
51
51
  ```
52
- decrypted_message = cipher.decrypt('khoor zruog')
53
- p decrypted_message # => "hello world"
52
+ decrypted_message = cipher.decrypt('khoorzruog')
53
+ p decrypted_message # => "helloworld"
54
54
  ```
55
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
-
69
56
  ## Development
70
57
 
71
58
  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 CHANGED
File without changes
@@ -1,58 +1,46 @@
1
1
  module ShiftCipher
2
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)
3
+ DEFAULT_OFFSET = 0
12
4
 
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
5
+ FIRST_UNICODE_CODEPOINT = 97
6
+ LAST_UNICODE_CODEPOINT = 123
18
7
 
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
8
+ attr_accessor :offset
31
9
 
32
- # raise an error ...
33
- # what about case when start set to 0?
10
+ def initialize(start = 0)
11
+ @offset = calculate_offset(start)
34
12
  end
35
13
 
36
14
  def encrypt(message)
37
- shift(message, @offset)
15
+ shift(message, offset)
38
16
  end
39
17
 
40
18
  def decrypt(message)
41
- shift(message, - @offset)
19
+ shift(message, -offset)
42
20
  end
43
21
 
44
22
  private
23
+
45
24
  def shift(message, directional_offset)
46
- shifted_message = ""
47
- message.downcase.split("").each do |character|
25
+ return unless message
26
+
27
+ message.downcase.split("").map do |character|
48
28
  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
29
+ character_for(character.ord + directional_offset)
30
+ elsif is_numeric?(character)
31
+ character
53
32
  end
54
- end if message
55
- shifted_message.squeeze(' ')
33
+ end.join("").squeeze(" ")
34
+ end
35
+
36
+ def calculate_offset(character)
37
+ if ("A".."z").include?(character)
38
+ character.downcase.ord - FIRST_UNICODE_CODEPOINT
39
+ elsif (0..26).include?(character.to_i.abs)
40
+ character.to_i
41
+ else
42
+ DEFAULT_OFFSET
43
+ end
56
44
  end
57
45
 
58
46
  def is_alpha?(character)
@@ -63,18 +51,17 @@ module ShiftCipher
63
51
  character.match(/^[[:digit:]]$/)
64
52
  end
65
53
 
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)
54
+ # Given the shifted order for a char, returns the corresponding character
55
+ # If the offset takes us past 123 ('z'), we wrap around to 97 ('A')
56
+ #
57
+ # Returns Char
58
+ def character_for(unicode_codepoint)
59
+ if unicode_codepoint < FIRST_UNICODE_CODEPOINT
60
+ unicode_codepoint = LAST_UNICODE_CODEPOINT - (FIRST_UNICODE_CODEPOINT - unicode_codepoint)
61
+ elsif unicode_codepoint >= LAST_UNICODE_CODEPOINT
62
+ unicode_codepoint = FIRST_UNICODE_CODEPOINT + (unicode_codepoint - LAST_UNICODE_CODEPOINT)
76
63
  end
77
- shifted_ord.chr
64
+ unicode_codepoint.chr
78
65
  end
79
66
  end
80
- end
67
+ end
@@ -1,3 +1,3 @@
1
1
  module ShiftCipher
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
data/shift_cipher.gemspec CHANGED
@@ -17,10 +17,10 @@ Gem::Specification.new do |spec|
17
17
  spec.executables = ["shift_cipher"]
18
18
  spec.require_paths = ["lib"]
19
19
 
20
- spec.add_development_dependency "bundler", "~> 1.9"
21
- spec.add_development_dependency "rake", "~> 10.0"
20
+ spec.add_development_dependency "bundler"
21
+ spec.add_development_dependency "rake"
22
22
 
23
23
  # testing
24
- spec.add_development_dependency "rspec", "~> 3.2", ">= 3.2.3"
25
- spec.add_development_dependency "pry", "~> 0.10.0"
24
+ spec.add_development_dependency "rspec"
25
+ spec.add_development_dependency "pry"
26
26
  end
metadata CHANGED
@@ -1,77 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shift_cipher
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - elsapet
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-18 00:00:00.000000000 Z
11
+ date: 2018-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.9'
19
+ version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.9'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '3.2'
48
45
  - - ">="
49
46
  - !ruby/object:Gem::Version
50
- version: 3.2.3
47
+ version: '0'
51
48
  type: :development
52
49
  prerelease: false
53
50
  version_requirements: !ruby/object:Gem::Requirement
54
51
  requirements:
55
- - - "~>"
56
- - !ruby/object:Gem::Version
57
- version: '3.2'
58
52
  - - ">="
59
53
  - !ruby/object:Gem::Version
60
- version: 3.2.3
54
+ version: '0'
61
55
  - !ruby/object:Gem::Dependency
62
56
  name: pry
63
57
  requirement: !ruby/object:Gem::Requirement
64
58
  requirements:
65
- - - "~>"
59
+ - - ">="
66
60
  - !ruby/object:Gem::Version
67
- version: 0.10.0
61
+ version: '0'
68
62
  type: :development
69
63
  prerelease: false
70
64
  version_requirements: !ruby/object:Gem::Requirement
71
65
  requirements:
72
- - - "~>"
66
+ - - ">="
73
67
  - !ruby/object:Gem::Version
74
- version: 0.10.0
68
+ version: '0'
75
69
  description: encrypt and de-crypt messages using a simple Caesar cipher, given an
76
70
  offset
77
71
  email:
@@ -92,7 +86,6 @@ files:
92
86
  - bin/shift_cipher
93
87
  - lib/shift_cipher.rb
94
88
  - lib/shift_cipher/caesar.rb
95
- - lib/shift_cipher/caeser.rb
96
89
  - lib/shift_cipher/version.rb
97
90
  - shift_cipher.gemspec
98
91
  homepage: https://github.com/elsapet/shift_cipher
@@ -115,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
108
  version: '0'
116
109
  requirements: []
117
110
  rubyforge_project:
118
- rubygems_version: 2.2.1
111
+ rubygems_version: 2.7.6
119
112
  signing_key:
120
113
  specification_version: 4
121
114
  summary: encrypt and de-crypt messages
@@ -1,80 +0,0 @@
1
- module ShiftCipher
2
- class Caeser
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)
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