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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 62c6bea054e83b3cd1d731cfbcb37b2704b3f788
4
- data.tar.gz: d7b74ae3ff6bb08e9c3a66545883c894c43ca4fb
3
+ metadata.gz: 6ab9b3216247da3d4d6d303c3a3d14f8accc42f3
4
+ data.tar.gz: a7ad007a936cd6cda892a722fe8ddd854696bd39
5
5
  SHA512:
6
- metadata.gz: 22fb7d51308547ca73b00e0f4e59b387b259f1a96dfdbfc815029761e44a58c2b677b9ec4b9a2b0c207d424a15edcc2f84415723fdc8c42c7fecdb13db8ab6a9
7
- data.tar.gz: 9243ade0c22b2f88d1b4291c1342043dddf3f1f1a3cf86570592ffb5bcc73724b52838bd9460cdf9a09b760bdec0653cbdf5979b70a287146d27e8478b22e90f
6
+ metadata.gz: 3e0bde4ed6f87a70a865a68a040323ee4c1ccd9c89e2bd64223e9ebdb88b45a8d4d9108efe39f94615dd7875b64294dc6aff02e4c3a4990c90c11566b22225ee
7
+ data.tar.gz: 7b18931e5cb42141ed5ed2d66cc7abdf5429b9645de6d55d20c07e2b540681ccc3a41717f1aec6c7626d3b66ebc61e5c2ca1480fa434ed3b3045daca129fae2b
@@ -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", "~> 10.0"
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
@@ -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 }
@@ -1,3 +1,3 @@
1
1
  module Bassy
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
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.0
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: '10.0'
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: '10.0'
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: '0'
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: '0'
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: