bijective 0.0.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +14 -0
- data/README.md +18 -1
- data/bijective.gemspec +1 -1
- data/lib/bijective.rb +15 -3
- data/lib/bijective/generator.rb +4 -0
- data/lib/bijective/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ac434b4d245a7f10b36c4ed8e44363dcd09abcd2
|
4
|
+
data.tar.gz: 5e9d82d69e59620ed490dbf624f715f121ab3af8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 21f96aab0bf5ec0cbffeb426e38deb33e7035ce525d1913ed4f42cf6887a23c64f54b13aa69bbec4b27b9e8d76504efd56d478d1e678737d0976a13dc550390b
|
7
|
+
data.tar.gz: 2ee3a69d68aaa927987d6964110bfcde1a8439d37f3d2e8781098ab1094692472e72d29dcaebb2fe93891fb45e7bc77c39c4af0fea10cd14c0fa4d154ff8085f
|
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# bijective
|
1
|
+
# bijective [![Build Status](https://travis-ci.org/dnshl/bijective.png)](https://travis-ci.org/dnshl/bijective)
|
2
2
|
|
3
3
|
## Install
|
4
4
|
gem install bijective
|
@@ -9,5 +9,22 @@
|
|
9
9
|
- Create a new instance with generated sequence
|
10
10
|
- Encode or decode
|
11
11
|
|
12
|
+
```
|
13
|
+
irb(main):001:0> require 'bijective'
|
14
|
+
=> true
|
15
|
+
|
16
|
+
irb(main):002:0> sequence = Bijective::Generator.generate_sequence
|
17
|
+
=> "10mQU8Hc64YhgbItfkKvX37NzlZrVweRx5OJBPqni2dLuDEpsFoMjyATS9aGWC"
|
18
|
+
|
19
|
+
irb(main):003:0> bijective = Bijective::Instance.new(sequence)
|
20
|
+
=> #<Bijective::Instance:0x007fe931a80800 @sequence="10mQU8Hc64YhgbItfkKvX37NzlZrVweRx5OJBPqni2dLuDEpsFoMjyATS9aGWC", @base=62>
|
21
|
+
|
22
|
+
irb(main):004:0> bijective.encode(91939)
|
23
|
+
=> "NST"
|
24
|
+
|
25
|
+
irb(main):005:0> bijective.decode('NST')
|
26
|
+
=> 91939
|
27
|
+
```
|
28
|
+
|
12
29
|
## License
|
13
30
|
See License file.
|
data/bijective.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.description = "bijective can be used to decode strings and encode numbers"
|
11
11
|
s.authors = ["Dennis Hall"]
|
12
12
|
s.email = 'dennis@dennishall.de'
|
13
|
-
s.homepage = '
|
13
|
+
s.homepage = 'https://github.com/dnshl/bijective'
|
14
14
|
|
15
15
|
s.files = `git ls-files`.split("\n")
|
16
16
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
data/lib/bijective.rb
CHANGED
@@ -3,6 +3,12 @@ require 'bijective/initialization_error'
|
|
3
3
|
|
4
4
|
module Bijective
|
5
5
|
class Instance
|
6
|
+
# Constructor initialises instance variables @sequence and @base.
|
7
|
+
#
|
8
|
+
# @param sequence [String] set instance object variable @sequence
|
9
|
+
# @raise [InitializationError] if sequence parameter has duplicate
|
10
|
+
# characters
|
11
|
+
# @return [Instance] new object instance
|
6
12
|
def initialize sequence
|
7
13
|
dublicate = sequence.split(//).uniq.join
|
8
14
|
|
@@ -14,9 +20,12 @@ module Bijective
|
|
14
20
|
@base = @sequence.length
|
15
21
|
end
|
16
22
|
|
17
|
-
#
|
23
|
+
# Encodes the given integer
|
24
|
+
#
|
25
|
+
# @param i [Integer] the integer to encode
|
26
|
+
# @return [String] the encoded string
|
18
27
|
def encode i
|
19
|
-
return @sequence[0] if i == 0
|
28
|
+
return @sequence[0,1] if i == 0
|
20
29
|
s = ''
|
21
30
|
while i > 0
|
22
31
|
s << @sequence[i.modulo(@base)]
|
@@ -25,7 +34,10 @@ module Bijective
|
|
25
34
|
s.reverse
|
26
35
|
end
|
27
36
|
|
28
|
-
#
|
37
|
+
# Decodes the given string
|
38
|
+
#
|
39
|
+
# @param s [String] the string to decode
|
40
|
+
# @return [Integer] the decoded integer
|
29
41
|
def decode s
|
30
42
|
i = 0
|
31
43
|
s.each_char { |c| i = i * @base + @sequence.index(c) }
|
data/lib/bijective/generator.rb
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
module Bijective
|
2
2
|
class Generator
|
3
|
+
# Class method to generate a random string containing uppercase / lowercase
|
4
|
+
# letters and numbers from 0 to 9
|
5
|
+
#
|
6
|
+
# @return [String] random string; with length 62
|
3
7
|
def self.generate_sequence
|
4
8
|
upcase_letters = ('A'..'Z').to_a
|
5
9
|
downcase_letters = ('a'..'z').to_a
|
data/lib/bijective/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bijective
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dennis Hall
|
@@ -17,6 +17,7 @@ extensions: []
|
|
17
17
|
extra_rdoc_files: []
|
18
18
|
files:
|
19
19
|
- .gitignore
|
20
|
+
- .travis.yml
|
20
21
|
- License
|
21
22
|
- README.md
|
22
23
|
- Rakefile
|
@@ -29,7 +30,7 @@ files:
|
|
29
30
|
- test/test_bijective.rb
|
30
31
|
- test/test_generator.rb
|
31
32
|
- test/test_initialization_error.rb
|
32
|
-
homepage:
|
33
|
+
homepage: https://github.com/dnshl/bijective
|
33
34
|
licenses: []
|
34
35
|
metadata: {}
|
35
36
|
post_install_message:
|