alnum 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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