bassy 0.1.0 → 0.1.1
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 +4 -4
- data/bassy.gemspec +2 -2
- data/lib/bassy.rb +18 -1
- data/lib/bassy/version.rb +1 -1
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6ab9b3216247da3d4d6d303c3a3d14f8accc42f3
|
4
|
+
data.tar.gz: a7ad007a936cd6cda892a722fe8ddd854696bd39
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e0bde4ed6f87a70a865a68a040323ee4c1ccd9c89e2bd64223e9ebdb88b45a8d4d9108efe39f94615dd7875b64294dc6aff02e4c3a4990c90c11566b22225ee
|
7
|
+
data.tar.gz: 7b18931e5cb42141ed5ed2d66cc7abdf5429b9645de6d55d20c07e2b540681ccc3a41717f1aec6c7626d3b66ebc61e5c2ca1480fa434ed3b3045daca129fae2b
|
data/bassy.gemspec
CHANGED
@@ -29,6 +29,6 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.require_paths = ["lib"]
|
30
30
|
|
31
31
|
spec.add_development_dependency "bundler", "~> 1.10"
|
32
|
-
spec.add_development_dependency "rake", "~>
|
33
|
-
spec.add_development_dependency "rspec"
|
32
|
+
spec.add_development_dependency "rake", "~> 11.0"
|
33
|
+
spec.add_development_dependency "rspec", "~> 3.4"
|
34
34
|
end
|
data/lib/bassy.rb
CHANGED
@@ -1,37 +1,52 @@
|
|
1
1
|
require "bassy/version"
|
2
2
|
|
3
|
+
# Encapsulates the functionality of the gem
|
3
4
|
module Bassy
|
5
|
+
|
6
|
+
# Public facing API to handle the conversion
|
7
|
+
# +number+ - the number to convert
|
8
|
+
# +from+ - the base to convert from
|
9
|
+
# +to+ - the base to convert to
|
10
|
+
# Returns a string representation of the the number in the new base
|
4
11
|
def self.convert(number, from, *too)
|
5
12
|
from = from.to_s
|
6
13
|
number = number.to_s
|
7
14
|
|
15
|
+
# Handle case where something is to be converted to decimal
|
8
16
|
if too.empty?
|
9
17
|
to = 10.to_s
|
10
18
|
else
|
11
19
|
to = too.first.to_s
|
12
20
|
end
|
13
21
|
|
22
|
+
# Can only handle bases upto 36
|
14
23
|
fail ArgumentError if [from, to].any? { |a| !(2..36).include? a.to_i }
|
15
24
|
|
25
|
+
# No conversion required if both bases are same
|
16
26
|
if from == to
|
17
27
|
return number
|
18
28
|
else
|
19
29
|
convert_base(number, from, to)
|
20
|
-
|
21
30
|
end
|
22
31
|
end
|
23
32
|
|
24
33
|
private
|
25
34
|
|
35
|
+
# Handle the actual conversion
|
26
36
|
def self.convert_base(number, from, to)
|
37
|
+
# A mapping of ordinality
|
27
38
|
mapping = create_mapping
|
39
|
+
|
40
|
+
# Convert to decimal first
|
28
41
|
dec = number.chars.reduce(0) do |conv, c|
|
29
42
|
conv = conv * from.to_i + mapping[c]
|
30
43
|
end
|
31
44
|
|
32
45
|
reverse_mapping = mapping.invert
|
46
|
+
|
33
47
|
conv = ""
|
34
48
|
|
49
|
+
# Then convert decimal to the new base
|
35
50
|
while dec > 0
|
36
51
|
conv << reverse_mapping[dec % to.to_i]
|
37
52
|
dec /= to.to_i
|
@@ -40,11 +55,13 @@ module Bassy
|
|
40
55
|
conv.reverse
|
41
56
|
end
|
42
57
|
|
58
|
+
# Creates a mapping of ordinality for each character possible till base 36
|
43
59
|
def self.create_mapping
|
44
60
|
h = {}
|
45
61
|
keys = ('0'..'9').to_a
|
46
62
|
values = (0..9).to_a
|
47
63
|
keys.zip(values) { |k,v| h[k] = v }
|
64
|
+
|
48
65
|
keys = ('A'..'Z').to_a
|
49
66
|
values = (10..35).to_a
|
50
67
|
keys.zip(values) { |k,v| h[k] = v }
|
data/lib/bassy/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bassy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pawan Dubey
|
@@ -30,28 +30,28 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '11.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '11.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '3.4'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '3.4'
|
55
55
|
description: Bassy takes a number and convert it from a given base to the specified
|
56
56
|
base.
|
57
57
|
email:
|