bijective 0.0.0 → 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 +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 [](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:
|