alnum 0.0.1 → 0.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
2
  SHA1:
3
- metadata.gz: 540fcbabc9ec1452ffe147f018924f7594511c84
4
- data.tar.gz: ffc28febfd232baa286f2a70027751755c5a9163
3
+ metadata.gz: c1ea393ce1bb8a32bb43a3065ca50d691cb05024
4
+ data.tar.gz: 02915a7d82a094c5ffb0b8e40d4209c5ad905754
5
5
  SHA512:
6
- metadata.gz: 543ec3b8eeea6fca40eb8ad85844635295db713b02f16efbaed9ad51b9407ed99d64184c515fb5ec42c2eb6242d4674b0aa7d4d5240ccda0e63517ae4da9cea7
7
- data.tar.gz: 2c201eb26e79a302d369ff96731c7b18c244b1d36a7d939dc99640fdb744fd90aea2d3e8b25a4fab013d8d39d1a3ff5b228118590394ed234851484f13a921a1
6
+ metadata.gz: e29306672a9acacdfbe878ceeefbc9e6c4af8d13c9ce3be9579841954cb60fe55b06ef5ba8d6ea5300b7fbfe03b17f3e30de1d3b1cf88a5f16dfd8133d69a335
7
+ data.tar.gz: bbb2b9cb9c3f30aa3892a2f08af7e15f52f22f338dc12fea842810dcce74de3265fe6e9e997ab1ca5811af8b58dfffb0358ae04d086a00458ed5bcf7b163b78c
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # alnum
2
2
 
3
- Alnum is a generator of alphanumeric code from integers and vice-versa.
3
+ Alnum is a generator of alphanumeric code from integers and vice-versa. Inspired in the POSIX character class [:alnum:] it uses just alphanumeric characters accordingly to the pattern [a-zA-Z0-9].
4
4
 
5
5
  ## Installation
6
6
 
@@ -12,28 +12,16 @@ Alnum is a generator of alphanumeric code from integers and vice-versa.
12
12
 
13
13
  Quick examples to hit the road:
14
14
 
15
- ### Instantiate your cypher
16
-
17
- ```ruby
18
- cypher = Alnum::Cypher.new
19
- ```
20
-
21
15
  ### Get your alphanumeric code
22
16
 
23
17
  ```ruby
24
- cypher.write(32456) => "8ru"
25
- ```
26
-
27
- ### Instantiate your decipher
28
-
29
- ```ruby
30
- decipher = Alnum::Decipher.new
18
+ Alnum::cypher(32456) => "8ru"
31
19
  ```
32
20
 
33
21
  ### Get your integer back
34
22
 
35
23
  ```ruby
36
- decipher.read("8ru") => 32456
24
+ Alnum::decipher("8ru") => 32456
37
25
  ```
38
26
 
39
27
  ## Purpose
@@ -1,6 +1,8 @@
1
+ require_relative 'lib/alnum/version'
2
+
1
3
  Gem::Specification.new do |s|
2
4
  s.name = 'alnum'
3
- s.version = '0.0.1'
5
+ s.version = Alnum::VERSION
4
6
  s.date = '2015-05-26'
5
7
  s.summary = "Alphanumeric code generator."
6
8
  s.description = "Alnum is a generator of alphanumeric code from integers and vice-versa. Can be useful shortening ID numbers in order to create tiny or short URLs."
@@ -1,14 +1,34 @@
1
- require_relative 'alnum/cypher'
2
- require_relative 'alnum/decipher'
1
+ require_relative 'alnum/symbols'
3
2
 
4
3
  module Alnum
5
4
 
6
- SYMBOLS = %w{
7
- 0 1 2 3 4 5 6 7 8 9
8
- a b c d e f g h i j k l m n o p q r s t u v w x y z
9
- A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
10
- }
11
-
12
5
  BASE = SYMBOLS.length
13
6
 
7
+ def self.cypher(number)
8
+ raise TypeError, "Only integers allowed" unless number.is_a? Integer
9
+
10
+ numbers = []
11
+
12
+ until number < BASE do
13
+ remainder = number % BASE
14
+ numbers << SYMBOLS[remainder]
15
+ number = (number - remainder) / BASE
16
+ end
17
+
18
+ numbers << SYMBOLS[number]
19
+ numbers.reverse.join
20
+ end
21
+
22
+ def self.decipher(alphanumeric)
23
+ number, count = 0, 0
24
+
25
+ alphanumeric.to_s.reverse.each_char() do |c|
26
+ raise RangeError, "Code contains characters out of range: '#{c}'" if SYMBOLS.index(c).nil?
27
+ number += SYMBOLS.index(c) * BASE**count
28
+ count += 1
29
+ end
30
+
31
+ number
32
+ end
33
+
14
34
  end
@@ -0,0 +1,9 @@
1
+ module Alnum
2
+
3
+ SYMBOLS = %w{
4
+ 0 1 2 3 4 5 6 7 8 9
5
+ a b c d e f g h i j k l m n o p q r s t u v w x y z
6
+ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
7
+ }
8
+
9
+ end
@@ -0,0 +1,3 @@
1
+ module Alnum
2
+ VERSION = '0.1.0'
3
+ end
@@ -1,28 +1,23 @@
1
1
  require 'test/unit'
2
- require_relative '../lib/alnum/cypher'
3
2
  require_relative './support/test_data'
4
3
 
5
4
  class TestCypher < Test::Unit::TestCase
6
5
 
7
- def setup
8
- @cypher = Alnum::Cypher.new
9
- end
10
-
11
6
  def test_one_character_range
12
7
  62.times do |number|
13
- assert_equal @cypher.write(number), "#{SYMBOLS[number]}"
8
+ assert_equal Alnum::cypher(number), "#{SYMBOLS[number]}"
14
9
  end
15
10
  end
16
11
 
17
12
  def test_only_integers_allowed
18
13
  assert_raise TypeError do
19
- @cypher.write('a')
14
+ Alnum::cypher('a')
20
15
  end
21
16
  end
22
17
 
23
18
  def test_empty_arguments
24
19
  assert_raise ArgumentError do
25
- @cypher.write()
20
+ Alnum::cypher()
26
21
  end
27
22
  end
28
23
 
@@ -1,29 +1,24 @@
1
1
  require 'test/unit'
2
- require_relative '../lib/alnum/decipher'
3
2
  require_relative './support/test_data'
4
3
 
5
4
  class TestDecipher < Test::Unit::TestCase
6
5
 
7
- def setup
8
- @decipher = Alnum::Decipher.new
9
- end
6
+ def test_one_character_range
7
+ 62.times do |number|
8
+ assert_equal Alnum::decipher(SYMBOLS[number]), number
9
+ end
10
+ end
10
11
 
11
- def test_one_character_range
12
- 62.times do |number|
13
- assert_equal @decipher.read(SYMBOLS[number]), number
14
- end
15
- end
12
+ def test_character_out_of_range
13
+ assert_raise RangeError do
14
+ Alnum::decipher('-')
15
+ end
16
+ end
16
17
 
17
- def test_character_out_of_range
18
- assert_raise RangeError do
19
- @decipher.read('-')
20
- end
21
- end
22
-
23
- def test_empty_arguments
24
- assert_raise ArgumentError do
25
- @decipher.read()
26
- end
27
- end
18
+ def test_empty_arguments
19
+ assert_raise ArgumentError do
20
+ Alnum::decipher()
21
+ end
22
+ end
28
23
 
29
24
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alnum
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hanes Barbosa
@@ -21,8 +21,8 @@ files:
21
21
  - README.md
22
22
  - alnum.gemspec
23
23
  - lib/alnum.rb
24
- - lib/alnum/cypher.rb
25
- - lib/alnum/decipher.rb
24
+ - lib/alnum/symbols.rb
25
+ - lib/alnum/version.rb
26
26
  - test/support/test_data.rb
27
27
  - test/test_alnum.rb
28
28
  - test/test_cypher.rb
@@ -1,26 +0,0 @@
1
- require_relative '../alnum'
2
-
3
- module Alnum
4
-
5
- class Cypher
6
-
7
- def write(number)
8
- raise TypeError, "Only integers allowed" unless number.is_a? Integer
9
-
10
- numbers = []
11
- quotient = 0
12
-
13
- until number < BASE do
14
- rest = number % BASE
15
- quotient = (number - rest) / BASE
16
- numbers << SYMBOLS[rest]
17
- number = quotient
18
- end
19
-
20
- numbers << SYMBOLS[number]
21
- numbers.reverse.join
22
- end
23
-
24
- end
25
-
26
- end
@@ -1,22 +0,0 @@
1
- require_relative '../alnum'
2
-
3
- module Alnum
4
-
5
- class Decipher
6
-
7
- def read(alphanumeric)
8
- number = 0
9
- count = 0
10
-
11
- alphanumeric.to_s.reverse.each_char() do |c|
12
- raise RangeError, "Code contains characters out of range: '#{c}'" if SYMBOLS.index(c).nil?
13
- number += SYMBOLS.index(c) * BASE**count
14
- count += 1
15
- end
16
-
17
- number
18
- end
19
-
20
- end
21
-
22
- end