anybase 0.0.5 → 0.0.6
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.
- data/README.rdoc +8 -0
- data/VERSION +1 -1
- data/lib/anybase.rb +26 -21
- data/spec/from_spec.rb +12 -1
- metadata +2 -2
data/README.rdoc
CHANGED
@@ -18,6 +18,14 @@ As well, you can tell Anybase to ignore case.
|
|
18
18
|
base.to_i('F0A')
|
19
19
|
=> 3850
|
20
20
|
|
21
|
+
Anybase can also have synonyms.
|
22
|
+
|
23
|
+
base = Anybase.new('0123456789abcdef', :synonyms => {'0' => 'oO'})
|
24
|
+
base.to_i('FoA')
|
25
|
+
=> 3850
|
26
|
+
base.to_i('FOA')
|
27
|
+
=> 3850
|
28
|
+
|
21
29
|
Anybase can also zeropad your output with whatever your "zero" character is.
|
22
30
|
|
23
31
|
Anybase.new("012345678").to_native(1234, :zero_pad => 8)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.6
|
data/lib/anybase.rb
CHANGED
@@ -1,33 +1,39 @@
|
|
1
1
|
class Anybase
|
2
2
|
|
3
|
-
attr_reader :chars, :char_map, :num_map
|
4
|
-
|
5
3
|
UnrecognizedCharacterError = Class.new(RuntimeError)
|
6
|
-
|
4
|
+
Hex = Anybase.new('0123456789abcdef', :ignore_case => true)
|
5
|
+
Base62 = Anybase.new('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789')
|
6
|
+
Base64 = Anybase.new('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/')
|
7
|
+
Base64ForURL = Anybase.new('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_')
|
8
|
+
Base73ForURL = Anybase.new('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789$-_.+!*\'(),')
|
9
|
+
|
10
|
+
attr_reader :chars, :char_map, :num_map
|
11
|
+
|
7
12
|
def initialize(chars, opts = nil)
|
8
13
|
@chars = chars
|
9
14
|
@ignore_case = opts && opts.key?(:ignore_case) ? opts[:ignore_case] : false
|
15
|
+
@synonyms = opts && opts[:synonyms]
|
10
16
|
@char_map = Hash.new{|h,k| raise UnrecognizedCharacterError.new("the character `#{k.chr}' is not included in #{@chars}")}
|
11
17
|
@num_map = {}
|
12
18
|
@chars.split('').each_with_index do |c, i|
|
13
|
-
|
14
|
-
@char_map[c[0]] = i
|
15
|
-
@char_map[c.swapcase[0]] = i
|
16
|
-
else
|
17
|
-
@char_map[c[0]] = i
|
18
|
-
end
|
19
|
+
add_mapping(c, i)
|
19
20
|
@num_map[i] = c
|
21
|
+
@synonyms[c].split('').each { |sc| add_mapping(sc, i) } if @synonyms && @synonyms[c]
|
20
22
|
end
|
21
23
|
end
|
22
|
-
|
24
|
+
|
25
|
+
def ignore_case?
|
26
|
+
@ignore_case
|
27
|
+
end
|
28
|
+
|
23
29
|
def to_i(val)
|
24
30
|
num = 0
|
25
|
-
(0...val.size).each{|i|
|
31
|
+
(0...val.size).each{|i|
|
26
32
|
num += (chars.size ** (val.size - i - 1)) * char_map[val[i]]
|
27
33
|
}
|
28
34
|
num
|
29
35
|
end
|
30
|
-
|
36
|
+
|
31
37
|
def to_native(val, options = nil)
|
32
38
|
str = ''
|
33
39
|
until val.zero?
|
@@ -40,12 +46,11 @@ class Anybase
|
|
40
46
|
end
|
41
47
|
str == '' ? num_map[0].dup : str
|
42
48
|
end
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
end
|
49
|
+
|
50
|
+
def add_mapping(c, i)
|
51
|
+
char_map[c[0]] = i
|
52
|
+
char_map[c.swapcase[0]] = i if ignore_case?
|
53
|
+
end
|
54
|
+
private :add_mapping
|
55
|
+
|
56
|
+
end
|
data/spec/from_spec.rb
CHANGED
@@ -11,7 +11,18 @@ describe Anybase, "from" do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
it "should fold case" do
|
14
|
-
|
14
|
+
base = Anybase.new("012345678abcd", :ignore_case => true)
|
15
|
+
str = 'a23D5d0AbBc'
|
16
|
+
base.to_i(str).should == base.to_i(str.swapcase)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should use synonymous" do
|
20
|
+
Anybase.new("012345678", :synonyms => {'0' => 'oO'}).to_i('O235o').should == 1746
|
21
|
+
proc { Anybase.new("012345678", :synonyms => {'0' => 'o'}).to_i('235O') }.should raise_error(Anybase::UnrecognizedCharacterError)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should use synonymous & ignore case" do
|
25
|
+
Anybase.new("012345678", :synonyms => {'0' => 'o'}, :ignore_case => true).to_i('235O').should == 1746
|
15
26
|
end
|
16
27
|
|
17
28
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: anybase
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joshua Hull
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-
|
12
|
+
date: 2010-02-02 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|