anybase 0.0.14 → 0.0.15
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.travis.yml +13 -0
- data/Gemfile +2 -2
- data/Rakefile +3 -1
- data/anybase.gemspec +1 -1
- data/lib/anybase.rb +6 -5
- data/lib/anybase/version.rb +1 -1
- data/spec/from_spec.rb +7 -7
- data/spec/spec_helper.rb +1 -1
- data/spec/to_spec.rb +13 -13
- data/spec/util_spec.rb +8 -8
- metadata +23 -24
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d0a553c5494e6bec8b36fe351538873d77a6649b
|
4
|
+
data.tar.gz: dabf637b3b92b006fe73ccbd94fe3c39933f68b4
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8d9a45c0289ff82c8ce0630279bfc54322ae29f7a089ee29f7b0ca3ab8294447afebb93174fefbc224c355685b5f248b9da03ef138f75b188ae1fbe1ebc1eaca
|
7
|
+
data.tar.gz: 870ceff52e3ad3d304af5eae2cc1aac33327389f474f61ccaf8a3460117e55cfda4d1ff616d7cc95383aa0b27c037170c84873a75f58a89222b2a4bcac65fa58
|
data/.travis.yml
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
language: ruby
|
2
|
+
rvm:
|
3
|
+
- 1.9.3
|
4
|
+
- 2.2
|
5
|
+
- 2.1
|
6
|
+
- 2.0
|
7
|
+
- jruby-19mode # JRuby in 1.9 mode
|
8
|
+
- rbx-2
|
9
|
+
|
10
|
+
# Force build to be use Travis' newer container-based builds, which seem
|
11
|
+
# more reliable.
|
12
|
+
# https://docs.travis-ci.com/user/workers/container-based-infrastructure/#Routing-your-build-to-container-based-infrastructure
|
13
|
+
sudo: false
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
data/anybase.gemspec
CHANGED
data/lib/anybase.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require "anybase/version"
|
2
|
+
require "securerandom"
|
2
3
|
|
3
4
|
class Anybase
|
4
5
|
|
@@ -24,7 +25,7 @@ class Anybase
|
|
24
25
|
add_mapping(c, i)
|
25
26
|
@num_map[i] = c
|
26
27
|
if @synonyms && @synonyms[c]
|
27
|
-
@synonyms[c].split('').each { |sc|
|
28
|
+
@synonyms[c].split('').each { |sc|
|
28
29
|
regexp_str << Regexp.quote(sc)
|
29
30
|
@synonyms_tr[1] << c
|
30
31
|
@synonyms_tr[0] << sc
|
@@ -46,11 +47,11 @@ class Anybase
|
|
46
47
|
def ignore_case?
|
47
48
|
@ignore_case
|
48
49
|
end
|
49
|
-
|
50
|
+
|
50
51
|
def size(digits)
|
51
52
|
chars.length ** digits
|
52
53
|
end
|
53
|
-
|
54
|
+
|
54
55
|
def normalize(val)
|
55
56
|
val = val.downcase if ignore_case?
|
56
57
|
@synonyms ? val.tr(*@synonyms_tr) : val
|
@@ -59,14 +60,14 @@ class Anybase
|
|
59
60
|
def random(digits, opts = nil)
|
60
61
|
zero_pad = opts && opts.key?(:zero_pad) ? opts[:zero_pad] : true
|
61
62
|
number = ''
|
62
|
-
digits.times { number << chars[
|
63
|
+
digits.times { number << chars[SecureRandom.random_number(chars.size)]}
|
63
64
|
unless zero_pad
|
64
65
|
number.sub!(/\A#{Regexp.quote(chars[0].chr)}+/, '')
|
65
66
|
number = chars[0].chr if number.empty?
|
66
67
|
end
|
67
68
|
number
|
68
69
|
end
|
69
|
-
|
70
|
+
|
70
71
|
def to_i(val)
|
71
72
|
val = normalize(val)
|
72
73
|
op = if @sign and val[0] == @sign[0]
|
data/lib/anybase/version.rb
CHANGED
data/spec/from_spec.rb
CHANGED
@@ -2,30 +2,30 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Anybase, "from" do
|
4
4
|
it "should translate to a number" do
|
5
|
-
Anybase.new("012345678").to_i('2350').
|
5
|
+
expect(Anybase.new("012345678").to_i('2350')).to eq(1746)
|
6
6
|
end
|
7
7
|
|
8
8
|
it "should raise an exception if any char isn't included" do
|
9
|
-
|
9
|
+
expect { Anybase.new("012345678").to_i('a2350') }.to raise_error(Anybase::UnrecognizedCharacterError)
|
10
10
|
end
|
11
11
|
|
12
12
|
it "should fold case" do
|
13
13
|
base = Anybase.new("012345678abcd", :ignore_case => true)
|
14
14
|
str = 'a23D5d0AbBc'
|
15
|
-
base.to_i(str).
|
15
|
+
expect(base.to_i(str)).to eq(base.to_i(str.swapcase))
|
16
16
|
end
|
17
17
|
|
18
18
|
it "should translate negative numbers with a sign" do
|
19
|
-
Anybase.new("012345678", :sign => '9').to_i('911').
|
19
|
+
expect(Anybase.new("012345678", :sign => '9').to_i('911')).to eq(-10)
|
20
20
|
end
|
21
21
|
|
22
22
|
it "should use synonymous" do
|
23
|
-
Anybase.new("012345678", :synonyms => {'0' => 'oO'}).to_i('O235o').
|
24
|
-
|
23
|
+
expect(Anybase.new("012345678", :synonyms => {'0' => 'oO'}).to_i('O235o')).to eq(1746)
|
24
|
+
expect { Anybase.new("012345678", :synonyms => {'0' => 'o'}).to_i('235O') }.to raise_error(Anybase::UnrecognizedCharacterError)
|
25
25
|
end
|
26
26
|
|
27
27
|
it "should use synonymous & ignore case" do
|
28
|
-
Anybase.new("012345678", :synonyms => {'0' => 'o'}, :ignore_case => true).to_i('235O').
|
28
|
+
expect(Anybase.new("012345678", :synonyms => {'0' => 'o'}, :ignore_case => true).to_i('235O')).to eq(1746)
|
29
29
|
end
|
30
30
|
|
31
31
|
end
|
data/spec/spec_helper.rb
CHANGED
data/spec/to_spec.rb
CHANGED
@@ -2,42 +2,42 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Anybase, "to" do
|
4
4
|
it "should translate base to a number from a string " do
|
5
|
-
Anybase.new("012345678").to_native(1827).
|
5
|
+
expect(Anybase.new("012345678").to_native(1827)).to eq("2450")
|
6
6
|
end
|
7
7
|
|
8
8
|
it "should never return an empty string for 0" do
|
9
|
-
Anybase.new("012345678").to_native(0).
|
9
|
+
expect(Anybase.new("012345678").to_native(0)).to eq("0")
|
10
10
|
end
|
11
11
|
|
12
12
|
it "should normally raise on negative numbers" do
|
13
|
-
|
13
|
+
expect { Anybase.new("012345678").to_native(-10)}.to raise_error(RuntimeError)
|
14
14
|
end
|
15
15
|
|
16
16
|
it "should translate negative numbers with a sign" do
|
17
|
-
Anybase.new("012345678", :sign => '9').to_native(-10).
|
17
|
+
expect(Anybase.new("012345678", :sign => '9').to_native(-10)).to eq('911')
|
18
18
|
end
|
19
19
|
|
20
20
|
it "should zeropad" do
|
21
|
-
Anybase.new("012345678").to_native(1234, :zero_pad => 2).
|
22
|
-
Anybase.new("012345678").to_native(1234, :zero_pad => 4).
|
23
|
-
Anybase.new("012345678").to_native(1234, :zero_pad => 8).
|
21
|
+
expect(Anybase.new("012345678").to_native(1234, :zero_pad => 2)).to eq('1621')
|
22
|
+
expect(Anybase.new("012345678").to_native(1234, :zero_pad => 4)).to eq('1621')
|
23
|
+
expect(Anybase.new("012345678").to_native(1234, :zero_pad => 8)).to eq('00001621')
|
24
24
|
end
|
25
25
|
|
26
26
|
it "create random numbers" do
|
27
|
-
|
27
|
+
allow(SecureRandom).to receive(:random_number).and_return(5,4,3,2,1,0)
|
28
28
|
result = Anybase.new("012345678").random(10)
|
29
|
-
result.
|
29
|
+
expect(result).to eq('5432100000')
|
30
30
|
|
31
|
-
|
32
|
-
Anybase.new("012345678").random(10, :zero_pad => false).
|
31
|
+
allow(SecureRandom).to receive(:random_number).and_return(0,0,1,2,3,4,5)
|
32
|
+
expect(Anybase.new("012345678").random(10, :zero_pad => false)).to eq('12345555')
|
33
33
|
end
|
34
34
|
|
35
35
|
it "return a zero if thats all it can for a random number" do
|
36
36
|
result = Anybase.new("0").random(10)
|
37
|
-
result.
|
37
|
+
expect(result).to eq('0000000000')
|
38
38
|
|
39
39
|
result = Anybase.new("0").random(10, :zero_pad => false)
|
40
|
-
result.
|
40
|
+
expect(result).to eq('0')
|
41
41
|
end
|
42
42
|
|
43
43
|
end
|
data/spec/util_spec.rb
CHANGED
@@ -2,22 +2,22 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Anybase, "util" do
|
4
4
|
it "should tell you the size for an arbitrary number of digits" do
|
5
|
-
Anybase.new("012345678").size(10).
|
6
|
-
(Anybase.new("012345678").size(10) * Anybase.new("012345678").size(10)).
|
5
|
+
expect(Anybase.new("012345678").size(10)).to eq(3486784401)
|
6
|
+
expect(Anybase.new("012345678").size(10) * Anybase.new("012345678").size(10)).to eq(Anybase.new("012345678").size(20))
|
7
7
|
end
|
8
8
|
|
9
9
|
it "should normalize a number" do
|
10
|
-
Anybase.new("01", :synonyms => {'0' => 'o', '1' => 'l'}, :ignore_case => true).normalize("l10oO1o").
|
10
|
+
expect(Anybase.new("01", :synonyms => {'0' => 'o', '1' => 'l'}, :ignore_case => true).normalize("l10oO1o")).to eq('1100010')
|
11
11
|
end
|
12
12
|
|
13
13
|
it "raise if the sign is in the chars" do
|
14
|
-
|
14
|
+
expect{ Anybase.new("01", :sign => '0') }.to raise_error(RuntimeError)
|
15
15
|
end
|
16
16
|
|
17
17
|
it "should allow matching" do
|
18
18
|
funny_octal = Anybase.new("012345678", :synonyms => {'0' => 'oO'})
|
19
|
-
funny_octal.match('235O').
|
20
|
-
funny_octal.match('235Ozzz').
|
21
|
-
funny_octal.match('a235O').
|
19
|
+
expect(funny_octal.match('235O')).to eq('235O')
|
20
|
+
expect(funny_octal.match('235Ozzz')).to eq('235O')
|
21
|
+
expect(funny_octal.match('a235O')).to eq(nil)
|
22
22
|
end
|
23
|
-
end
|
23
|
+
end
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: anybase
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.15
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Joshual Hull
|
@@ -10,30 +9,36 @@ authors:
|
|
10
9
|
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date:
|
12
|
+
date: 2016-02-11 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: rspec
|
17
|
-
requirement:
|
18
|
-
none: false
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
19
17
|
requirements:
|
20
|
-
- -
|
18
|
+
- - ">="
|
21
19
|
- !ruby/object:Gem::Version
|
22
20
|
version: '0'
|
23
21
|
type: :development
|
24
22
|
prerelease: false
|
25
|
-
version_requirements:
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
26
28
|
- !ruby/object:Gem::Dependency
|
27
29
|
name: rake
|
28
|
-
requirement:
|
29
|
-
none: false
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
30
31
|
requirements:
|
31
|
-
- -
|
32
|
+
- - ">="
|
32
33
|
- !ruby/object:Gem::Version
|
33
34
|
version: '0'
|
34
35
|
type: :development
|
35
36
|
prerelease: false
|
36
|
-
version_requirements:
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
37
42
|
description: Numbers from anybase to anybase
|
38
43
|
email:
|
39
44
|
- joshbuddy@gmail.com
|
@@ -42,7 +47,8 @@ executables: []
|
|
42
47
|
extensions: []
|
43
48
|
extra_rdoc_files: []
|
44
49
|
files:
|
45
|
-
- .gitignore
|
50
|
+
- ".gitignore"
|
51
|
+
- ".travis.yml"
|
46
52
|
- Gemfile
|
47
53
|
- README.rdoc
|
48
54
|
- Rakefile
|
@@ -56,33 +62,26 @@ files:
|
|
56
62
|
- spec/util_spec.rb
|
57
63
|
homepage: http://github.com/joshbuddy/anybase
|
58
64
|
licenses: []
|
65
|
+
metadata: {}
|
59
66
|
post_install_message:
|
60
67
|
rdoc_options: []
|
61
68
|
require_paths:
|
62
69
|
- lib
|
63
70
|
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
-
none: false
|
65
71
|
requirements:
|
66
|
-
- -
|
72
|
+
- - ">="
|
67
73
|
- !ruby/object:Gem::Version
|
68
74
|
version: '0'
|
69
|
-
segments:
|
70
|
-
- 0
|
71
|
-
hash: -1286050800804659122
|
72
75
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
76
|
requirements:
|
75
|
-
- -
|
77
|
+
- - ">="
|
76
78
|
- !ruby/object:Gem::Version
|
77
79
|
version: '0'
|
78
|
-
segments:
|
79
|
-
- 0
|
80
|
-
hash: -1286050800804659122
|
81
80
|
requirements: []
|
82
81
|
rubyforge_project: anybase
|
83
|
-
rubygems_version:
|
82
|
+
rubygems_version: 2.4.6
|
84
83
|
signing_key:
|
85
|
-
specification_version:
|
84
|
+
specification_version: 4
|
86
85
|
summary: Numbers from anybase to anybase
|
87
86
|
test_files:
|
88
87
|
- spec/from_spec.rb
|