anybase 0.0.9 → 0.0.10

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 CHANGED
@@ -20,12 +20,18 @@ As well, you can tell Anybase to ignore case.
20
20
 
21
21
  Anybase can also have synonyms.
22
22
 
23
- base = Anybase.new('0123456789abcdef', :synonyms => {'0' => 'oO'})
23
+ base = Anybase.new('0123456789abcdef', :synonyms => {'0' => 'oO'}, :ignore_case => true)
24
24
  base.to_i('FoA')
25
25
  => 3850
26
26
  base.to_i('FOA')
27
27
  => 3850
28
28
 
29
+ If you just want to translate the number to look at it you can use #normalize
30
+
31
+ base = Anybase.new('0123456789abcdef', :synonyms => {'0' => 'oO'}, :ignore_case => true)
32
+ base.normalize('FoA')
33
+ => 'f0a'
34
+
29
35
  Anybase can also zeropad your output with whatever your "zero" character is.
30
36
 
31
37
  Anybase.new("012345678").to_native(1234, :zero_pad => 8)
data/Rakefile CHANGED
@@ -1,17 +1,6 @@
1
- begin
2
- require 'jeweler'
3
- Jeweler::Tasks.new do |s|
4
- s.name = "anybase"
5
- s.description = s.summary = "Numbers from anybase to anybase"
6
- s.email = "joshbuddy@gmail.com"
7
- s.homepage = "http://github.com/joshbuddy/anybase"
8
- s.authors = ["Joshua Hull"]
9
- s.files = FileList["[A-Z]*", "{lib,spec}/**/*"]
10
- end
11
- Jeweler::GemcutterTasks.new
12
- rescue LoadError
13
- puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
14
- end
1
+ require 'ext/gem_rake'
2
+
3
+ Bundler::GemHelper.install_tasks
15
4
 
16
5
  require 'spec'
17
6
  require 'spec/rake/spectask'
data/anybase.gemspec ADDED
@@ -0,0 +1,31 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'lib', 'anybase', 'version'))
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "anybase"
5
+ s.version = Anybase::VERSION
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Joshua Hull"]
9
+ s.date = "2010-07-26"
10
+ s.description = %q{Numbers from anybase to anybase}
11
+ s.email = %q{joshbuddy@gmail.com}
12
+ s.extra_rdoc_files = ['README.rdoc']
13
+ s.files = `git ls-files`.split("\n")
14
+ s.homepage = %q{http://github.com/joshbuddy/anybase}
15
+ s.rdoc_options = ["--charset=UTF-8"]
16
+ s.require_paths = ["lib"]
17
+ s.rubygems_version = %q{1.3.6}
18
+ s.summary = %q{Numbers from anybase to anybase}
19
+ s.test_files = `git ls-files`.split("\n").select{|f| f[/^spec/]}
20
+
21
+ if s.respond_to? :specification_version then
22
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
23
+ s.specification_version = 3
24
+
25
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
26
+ else
27
+ end
28
+ else
29
+ end
30
+ end
31
+
data/lib/anybase.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require 'anybase/version'
2
+
1
3
  class Anybase
2
4
 
3
5
  UnrecognizedCharacterError = Class.new(RuntimeError)
@@ -8,12 +10,21 @@ class Anybase
8
10
  @chars = chars
9
11
  @ignore_case = opts && opts.key?(:ignore_case) ? opts[:ignore_case] : false
10
12
  @synonyms = opts && opts[:synonyms]
13
+ @synonyms_tr = ['', ''] if @synonyms
11
14
  @char_map = Hash.new{|h,k| raise UnrecognizedCharacterError.new("the character `#{k.chr}' is not included in #{@chars}")}
12
15
  @num_map = {}
16
+ if ignore_case?
17
+ @chars.downcase!
18
+ end
13
19
  @chars.split('').each_with_index do |c, i|
14
20
  add_mapping(c, i)
15
21
  @num_map[i] = c
16
- @synonyms[c].split('').each { |sc| add_mapping(sc, i) } if @synonyms && @synonyms[c]
22
+ if @synonyms && @synonyms[c]
23
+ @synonyms[c].split('').each { |sc|
24
+ @synonyms_tr[1] << c
25
+ @synonyms_tr[0] << sc
26
+ }
27
+ end
17
28
  end
18
29
  end
19
30
 
@@ -25,6 +36,11 @@ class Anybase
25
36
  chars.length ** digits
26
37
  end
27
38
 
39
+ def normalize(val)
40
+ val = val.downcase if ignore_case?
41
+ @synonyms ? val.tr(*@synonyms_tr) : val
42
+ end
43
+
28
44
  def random(digits, opts = nil)
29
45
  zero_pad = opts && opts.key?(:zero_pad) ? opts[:zero_pad] : true
30
46
  number = ''
@@ -37,6 +53,7 @@ class Anybase
37
53
  end
38
54
 
39
55
  def to_i(val)
56
+ val = normalize(val)
40
57
  num = 0
41
58
  (0...val.size).each{|i|
42
59
  num += (chars.size ** (val.size - i - 1)) * char_map[val[i]]
@@ -59,7 +76,6 @@ class Anybase
59
76
 
60
77
  def add_mapping(c, i)
61
78
  char_map[c[0]] = i
62
- char_map[c.swapcase[0]] = i if ignore_case?
63
79
  end
64
80
  private :add_mapping
65
81
 
@@ -0,0 +1,3 @@
1
+ class Anybase
2
+ VERSION = '0.0.10'.freeze
3
+ end
data/spec/util_spec.rb CHANGED
@@ -7,4 +7,7 @@ describe Anybase, "from" do
7
7
  (Anybase.new("012345678").size(10) * Anybase.new("012345678").size(10)).should == Anybase.new("012345678").size(20)
8
8
  end
9
9
 
10
- end
10
+ it "should normalize a number" do
11
+ Anybase.new("01", :synonyms => {'0' => 'o', '1' => 'l'}, :ignore_case => true).normalize("l10oO1o").should == '1100010'
12
+ end
13
+ end
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: anybase
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 11
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
8
  - 0
8
- - 9
9
- version: 0.0.9
9
+ - 10
10
+ version: 0.0.10
10
11
  platform: ruby
11
12
  authors:
12
13
  - Joshua Hull
@@ -14,7 +15,7 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-05-17 00:00:00 -04:00
18
+ date: 2010-07-26 00:00:00 -04:00
18
19
  default_executable:
19
20
  dependencies: []
20
21
 
@@ -30,7 +31,9 @@ files:
30
31
  - README.rdoc
31
32
  - Rakefile
32
33
  - VERSION
34
+ - anybase.gemspec
33
35
  - lib/anybase.rb
36
+ - lib/anybase/version.rb
34
37
  - spec/from_spec.rb
35
38
  - spec/spec.opts
36
39
  - spec/spec_helper.rb
@@ -46,28 +49,33 @@ rdoc_options:
46
49
  require_paths:
47
50
  - lib
48
51
  required_ruby_version: !ruby/object:Gem::Requirement
52
+ none: false
49
53
  requirements:
50
54
  - - ">="
51
55
  - !ruby/object:Gem::Version
56
+ hash: 3
52
57
  segments:
53
58
  - 0
54
59
  version: "0"
55
60
  required_rubygems_version: !ruby/object:Gem::Requirement
61
+ none: false
56
62
  requirements:
57
63
  - - ">="
58
64
  - !ruby/object:Gem::Version
65
+ hash: 3
59
66
  segments:
60
67
  - 0
61
68
  version: "0"
62
69
  requirements: []
63
70
 
64
71
  rubyforge_project:
65
- rubygems_version: 1.3.6
72
+ rubygems_version: 1.3.7
66
73
  signing_key:
67
74
  specification_version: 3
68
75
  summary: Numbers from anybase to anybase
69
76
  test_files:
70
77
  - spec/from_spec.rb
78
+ - spec/spec.opts
71
79
  - spec/spec_helper.rb
72
80
  - spec/to_spec.rb
73
81
  - spec/util_spec.rb