to_decimal 1.0.0 → 1.0.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 +5 -5
- data/CHANGELOG.md +14 -2
- data/Gemfile +12 -4
- data/Gemfile.lock +34 -8
- data/README.md +1 -3
- data/lib/to_decimal.rb +5 -0
- data/lib/to_decimal/convertor_class.rb +6 -4
- data/lib/to_decimal/validator_class.rb +18 -7
- data/test/to_decimal_test.rb +41 -39
- metadata +41 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7cd86aa616511538aaaaee26a042ed3682234c60
|
4
|
+
data.tar.gz: d42d619ea1b91d3db07b1149ee0347915590ab31
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0fa9c5ec9e5f10c990f66736e6e554412fe1e9d56ecff0a2e6983075a7ad017666222aaf8fcb50b6811913887b9ed6738fef730fc71068031b3b556cf27d1b61
|
7
|
+
data.tar.gz: 62318b811a0ad64d97db076e273599d62742ebd300047851a0c0515462b9bea58d6782cadea72b12858b184f23b35456ea7708c32248b859d9796e81f3471d0f
|
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,19 @@
|
|
1
|
-
# to_decimal
|
1
|
+
# to_decimal 1.0.1 (2019-03-16)
|
2
2
|
---
|
3
3
|
|
4
|
-
|
4
|
+
- update required ruby version to 2.4.5 due to security fix
|
5
|
+
- update the required versions of:
|
6
|
+
- rake (12.3.2)
|
7
|
+
- add development dependencies:
|
8
|
+
- rubocop (0.65.0)
|
9
|
+
- pry (0.12.2)
|
10
|
+
- minitest (5.11)
|
11
|
+
- minitest-reporters (1.3.6)
|
12
|
+
- Fix some style issues in the code
|
13
|
+
|
14
|
+
# to_decimal 1.0.0 (2018-11-27)
|
15
|
+
---
|
16
|
+
**Breaking changes !**
|
5
17
|
|
6
18
|
- Provides a namespace `ToDecimal` to the gem
|
7
19
|
- Renames the main class from `ToDecimal` to `Convertor`
|
data/Gemfile
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
ruby '~> 2.4.
|
3
|
+
ruby '~> 2.4.5'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
gem '
|
5
|
+
source 'https://rubygems.org'
|
6
|
+
|
7
|
+
gem 'bundler', '~> 2.0', '>= 2.0.1'
|
8
|
+
gem 'rake', '~> 12.3', '>= 12.3.2'
|
9
|
+
|
10
|
+
group :development do
|
11
|
+
gem 'minitest', '~> 5.11', '>= 5.11.3'
|
12
|
+
gem 'minitest-reporters', '~> 1.3', '>= 1.3.6'
|
13
|
+
gem 'pry', '~> 0.12.2'
|
14
|
+
gem 'rubocop', '~> 0.65.0'
|
15
|
+
end
|
data/Gemfile.lock
CHANGED
@@ -2,26 +2,52 @@ GEM
|
|
2
2
|
remote: https://rubygems.org/
|
3
3
|
specs:
|
4
4
|
ansi (1.5.0)
|
5
|
+
ast (2.4.0)
|
5
6
|
builder (3.2.3)
|
7
|
+
coderay (1.1.2)
|
8
|
+
jaro_winkler (1.5.2)
|
9
|
+
method_source (0.9.2)
|
6
10
|
minitest (5.11.3)
|
7
|
-
minitest-reporters (1.
|
11
|
+
minitest-reporters (1.3.6)
|
8
12
|
ansi
|
9
13
|
builder
|
10
14
|
minitest (>= 5.0)
|
11
15
|
ruby-progressbar
|
12
|
-
|
13
|
-
|
16
|
+
parallel (1.14.0)
|
17
|
+
parser (2.6.0.0)
|
18
|
+
ast (~> 2.4.0)
|
19
|
+
powerpack (0.1.2)
|
20
|
+
pry (0.12.2)
|
21
|
+
coderay (~> 1.1.0)
|
22
|
+
method_source (~> 0.9.0)
|
23
|
+
psych (3.1.0)
|
24
|
+
rainbow (3.0.0)
|
25
|
+
rake (12.3.2)
|
26
|
+
rubocop (0.65.0)
|
27
|
+
jaro_winkler (~> 1.5.1)
|
28
|
+
parallel (~> 1.10)
|
29
|
+
parser (>= 2.5, != 2.5.1.1)
|
30
|
+
powerpack (~> 0.1)
|
31
|
+
psych (>= 3.1.0)
|
32
|
+
rainbow (>= 2.2.2, < 4.0)
|
33
|
+
ruby-progressbar (~> 1.7)
|
34
|
+
unicode-display_width (~> 1.4.0)
|
35
|
+
ruby-progressbar (1.10.0)
|
36
|
+
unicode-display_width (1.4.1)
|
14
37
|
|
15
38
|
PLATFORMS
|
16
39
|
ruby
|
17
40
|
|
18
41
|
DEPENDENCIES
|
19
|
-
|
20
|
-
minitest
|
21
|
-
|
42
|
+
bundler (~> 2.0.1)
|
43
|
+
minitest (~> 5.11, >= 5.11.3)
|
44
|
+
minitest-reporters (~> 1.3, >= 1.3.6)
|
45
|
+
pry (~> 0.12.2)
|
46
|
+
rake (~> 12.3, >= 12.3.2)
|
47
|
+
rubocop (~> 0.65.0)
|
22
48
|
|
23
49
|
RUBY VERSION
|
24
|
-
ruby 2.
|
50
|
+
ruby 2.4.5p335
|
25
51
|
|
26
52
|
BUNDLED WITH
|
27
|
-
|
53
|
+
2.0.1
|
data/README.md
CHANGED
@@ -66,12 +66,10 @@ This project is tested under minitest.
|
|
66
66
|
|
67
67
|
# Usage
|
68
68
|
|
69
|
-
### Instance methods
|
70
|
-
|
71
69
|
The gem gives you access to 9 objects under the namespace `ToDecimal` called :
|
72
70
|
`Base2`, `Base3`,... `Base10`.
|
73
71
|
|
74
|
-
Each object has a `[]`
|
72
|
+
Each object has a `[]` method, which takes as parameter an integer OR a string
|
75
73
|
representation of the corresponding base and returns this integer expressed
|
76
74
|
in base 10 :
|
77
75
|
|
data/lib/to_decimal.rb
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
require 'bundler/setup'
|
3
|
+
Bundler.require(:default, :development)
|
4
|
+
|
1
5
|
require_relative 'to_decimal/validator_class'
|
2
6
|
require_relative 'to_decimal/convertor_class'
|
3
7
|
require_relative 'to_decimal/wrong_base_input_error'
|
@@ -13,6 +17,7 @@ module ToDecimal
|
|
13
17
|
Base9 = Convertor.new(9)
|
14
18
|
Base10 = Convertor.new(10)
|
15
19
|
|
20
|
+
# Ensure no other convertor object will be created
|
16
21
|
class Convertor
|
17
22
|
class << self
|
18
23
|
private :new
|
@@ -1,17 +1,18 @@
|
|
1
1
|
module ToDecimal
|
2
|
+
# The main class that performs the actual conversion
|
2
3
|
class Convertor
|
3
4
|
attr_reader :base
|
4
5
|
|
5
6
|
def initialize(base)
|
6
7
|
validate_base(base)
|
7
8
|
@base = base
|
8
|
-
|
9
|
+
freeze
|
9
10
|
end
|
10
11
|
|
11
12
|
def [](input)
|
12
13
|
input = remove_leading_zeros_of(input)
|
13
14
|
Validator.new(input, base).validate
|
14
|
-
|
15
|
+
|
15
16
|
input_as_integer = integerize(input)
|
16
17
|
convert(input_as_integer)
|
17
18
|
end
|
@@ -31,8 +32,9 @@ module ToDecimal
|
|
31
32
|
end
|
32
33
|
|
33
34
|
def validate_base(base)
|
34
|
-
raise ArgumentError,
|
35
|
-
raise ArgumentError,
|
35
|
+
raise ArgumentError, 'Base must be an Integer' unless base.is_a?(Integer)
|
36
|
+
raise ArgumentError, 'Base must be 1..10' unless \
|
37
|
+
base.positive? && base <= 10
|
36
38
|
end
|
37
39
|
end
|
38
40
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
module ToDecimal
|
2
|
+
# Class to validate arguments
|
2
3
|
class Validator
|
3
4
|
def initialize(input, base)
|
4
5
|
@input = input
|
@@ -6,17 +7,27 @@ module ToDecimal
|
|
6
7
|
end
|
7
8
|
|
8
9
|
def validate
|
9
|
-
|
10
|
-
representation of an integer. You input : #{@input}
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
err_value = "Argument must be an integer or a valid string\
|
11
|
+
representation of an integer. You input : #{@input}, of class #{@input.class}."
|
12
|
+
raise ArgumentError, err_value unless valid_integer_string_or_integer?
|
13
|
+
|
14
|
+
err_base = "A number of base #{@base} cannot have a\
|
15
|
+
digit greater or equal to #{@base}. Check your argument: #{@input}."
|
16
|
+
raise WrongBaseInputError, err_base unless valid_input_base?
|
14
17
|
end
|
15
18
|
|
16
19
|
private
|
17
20
|
|
18
21
|
def valid_integer_string_or_integer?
|
19
|
-
|
22
|
+
valid_integer_string? || valid_integer?
|
23
|
+
end
|
24
|
+
|
25
|
+
def valid_integer?
|
26
|
+
@input.is_a?(Integer)
|
27
|
+
end
|
28
|
+
|
29
|
+
def valid_integer_string?
|
30
|
+
(@input.is_a?(String) && @input.to_i.to_s == @input)
|
20
31
|
end
|
21
32
|
|
22
33
|
def valid_input_base?
|
@@ -24,4 +35,4 @@ module ToDecimal
|
|
24
35
|
digitized_input.none? { |digit| digit >= @base }
|
25
36
|
end
|
26
37
|
end
|
27
|
-
end
|
38
|
+
end
|
data/test/to_decimal_test.rb
CHANGED
@@ -4,18 +4,10 @@ Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
|
|
4
4
|
|
5
5
|
require_relative '../lib/to_decimal'
|
6
6
|
|
7
|
-
# ========== Test helper method ================================================
|
8
|
-
|
9
|
-
def execute_test_with(test_values, base_convertor)
|
10
|
-
test_values.each do |data_set|
|
11
|
-
assert_equal data_set[1], base_convertor[data_set[0]]
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
7
|
class ToDecimalBaseValidationTest < Minitest::Test
|
16
8
|
|
17
|
-
# ======== Testing error is
|
18
|
-
|
9
|
+
# ======== Testing error is raised if input is not of the correct base =======
|
10
|
+
|
19
11
|
def test_raises_error_if_input_is_not_from_base_2
|
20
12
|
base2 = ToDecimal::Base2
|
21
13
|
assert_raises(ToDecimal::WrongBaseInputError) { base2[2] }
|
@@ -64,20 +56,30 @@ class ToDecimalBaseValidationTest < Minitest::Test
|
|
64
56
|
end
|
65
57
|
end
|
66
58
|
|
67
|
-
# ========= Testing return values of []
|
59
|
+
# ========= Testing return values of [] method =================================
|
60
|
+
|
61
|
+
# ========= Test helper method
|
62
|
+
|
63
|
+
def execute_test_with(test_values, base_convertor)
|
64
|
+
test_values.each do |data_set|
|
65
|
+
assert_equal data_set[1], base_convertor[data_set[0]]
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# ========= Test class
|
68
70
|
|
69
71
|
class ToDecimalConvserionFromIntegerTest < Minitest::Test
|
70
72
|
|
71
73
|
# Test data
|
72
|
-
TEST_VALUES_BASE_2 = [[101, 5], [100_000_000, 256]]
|
73
|
-
TEST_VALUES_BASE_3 = [[
|
74
|
-
TEST_VALUES_BASE_4 = [[
|
75
|
-
TEST_VALUES_BASE_5 = [[14, 9], [
|
76
|
-
TEST_VALUES_BASE_6 = [[13, 9], [
|
77
|
-
TEST_VALUES_BASE_7 = [[12, 9], [
|
78
|
-
TEST_VALUES_BASE_8 = [[11, 9], [
|
79
|
-
TEST_VALUES_BASE_9 = [[10, 9], [
|
80
|
-
TEST_VALUES_BASE_10 = [[9, 9], [
|
74
|
+
TEST_VALUES_BASE_2 = [[101, 5], [100_000_000, 256]].freeze
|
75
|
+
TEST_VALUES_BASE_3 = [[1_122_111, 1201], [12, 5]].freeze
|
76
|
+
TEST_VALUES_BASE_4 = [[11_001, 321], [322, 58]].freeze
|
77
|
+
TEST_VALUES_BASE_5 = [[14, 9], [10_011_302, 78_952]].freeze
|
78
|
+
TEST_VALUES_BASE_6 = [[13, 9], [1_405_304, 78_952]].freeze
|
79
|
+
TEST_VALUES_BASE_7 = [[12, 9], [446_116, 78_952]].freeze
|
80
|
+
TEST_VALUES_BASE_8 = [[11, 9], [232_150, 78_952]].freeze
|
81
|
+
TEST_VALUES_BASE_9 = [[10, 9], [130_264, 78_952]].freeze
|
82
|
+
TEST_VALUES_BASE_10 = [[9, 9], [78_952, 78_952]].freeze
|
81
83
|
|
82
84
|
def test_returns_decimal_value_of_integer_of_base_2
|
83
85
|
execute_test_with(TEST_VALUES_BASE_2, ToDecimal::Base2)
|
@@ -117,15 +119,15 @@ class ToDecimalConvserionFromIntegerTest < Minitest::Test
|
|
117
119
|
end
|
118
120
|
|
119
121
|
class ToDecimalConvserionFromStringTest < Minitest::Test
|
120
|
-
TEST_VALUES_BASE_2 = [['101', 5], ['100000000', 256]]
|
121
|
-
TEST_VALUES_BASE_3 = [['1122111',
|
122
|
-
TEST_VALUES_BASE_4 = [['11001', 321], ['322', 58]]
|
123
|
-
TEST_VALUES_BASE_5 = [['14', 9], ['10011302',
|
124
|
-
TEST_VALUES_BASE_6 = [['13', 9], ['1405304',
|
125
|
-
TEST_VALUES_BASE_7 = [['12', 9], ['446116',
|
126
|
-
TEST_VALUES_BASE_8 = [['11', 9], ['232150',
|
127
|
-
TEST_VALUES_BASE_9 = [['10', 9], ['130264',
|
128
|
-
TEST_VALUES_BASE_10 = [['9', 9], ['78952',
|
122
|
+
TEST_VALUES_BASE_2 = [['101', 5], ['100000000', 256]].freeze
|
123
|
+
TEST_VALUES_BASE_3 = [['1122111', 1_201], ['12', 5]].freeze
|
124
|
+
TEST_VALUES_BASE_4 = [['11001', 321], ['322', 58]].freeze
|
125
|
+
TEST_VALUES_BASE_5 = [['14', 9], ['10011302', 78_952]].freeze
|
126
|
+
TEST_VALUES_BASE_6 = [['13', 9], ['1405304', 78_952]].freeze
|
127
|
+
TEST_VALUES_BASE_7 = [['12', 9], ['446116', 78_952]].freeze
|
128
|
+
TEST_VALUES_BASE_8 = [['11', 9], ['232150', 78_952]].freeze
|
129
|
+
TEST_VALUES_BASE_9 = [['10', 9], ['130264', 78_952]].freeze
|
130
|
+
TEST_VALUES_BASE_10 = [['9', 9], ['78952', 78_952]].freeze
|
129
131
|
|
130
132
|
def test_returns_decimal_value_of_string_of_base_2
|
131
133
|
execute_test_with(TEST_VALUES_BASE_2, ToDecimal::Base2)
|
@@ -165,15 +167,15 @@ class ToDecimalConvserionFromStringTest < Minitest::Test
|
|
165
167
|
end
|
166
168
|
|
167
169
|
class RemoveLeadingZeroesFromStringsTest < Minitest::Test
|
168
|
-
TEST_VALUES_BASE_2 = [['00101', 5], ['0100000000', 256]]
|
169
|
-
TEST_VALUES_BASE_3 = [['001122111',
|
170
|
-
TEST_VALUES_BASE_4 = [['0011001', 321], ['322', 58]]
|
171
|
-
TEST_VALUES_BASE_5 = [['0014', 9], ['010011302',
|
172
|
-
TEST_VALUES_BASE_6 = [['0013', 9], ['01405304',
|
173
|
-
TEST_VALUES_BASE_7 = [['0012', 9], ['0446116',
|
174
|
-
TEST_VALUES_BASE_8 = [['0011', 9], ['0232150',
|
175
|
-
TEST_VALUES_BASE_9 = [['0010', 9], ['0130264',
|
176
|
-
TEST_VALUES_BASE_10 = [['009', 9], ['078952',
|
170
|
+
TEST_VALUES_BASE_2 = [['00101', 5], ['0100000000', 256]].freeze
|
171
|
+
TEST_VALUES_BASE_3 = [['001122111', 1_201], ['012', 5]].freeze
|
172
|
+
TEST_VALUES_BASE_4 = [['0011001', 321], ['322', 58]].freeze
|
173
|
+
TEST_VALUES_BASE_5 = [['0014', 9], ['010011302', 78_952]].freeze
|
174
|
+
TEST_VALUES_BASE_6 = [['0013', 9], ['01405304', 78_952]].freeze
|
175
|
+
TEST_VALUES_BASE_7 = [['0012', 9], ['0446116', 78_952]].freeze
|
176
|
+
TEST_VALUES_BASE_8 = [['0011', 9], ['0232150', 78_952]].freeze
|
177
|
+
TEST_VALUES_BASE_9 = [['0010', 9], ['0130264', 78_952]].freeze
|
178
|
+
TEST_VALUES_BASE_10 = [['009', 9], ['078952', 78_952]].freeze
|
177
179
|
|
178
180
|
def test_removes_leading_zeros_from_string_with_base2
|
179
181
|
execute_test_with(TEST_VALUES_BASE_2, ToDecimal::Base2)
|
@@ -216,4 +218,4 @@ class ConvertorCannotBeInstantiatedTest < Minitest::Test
|
|
216
218
|
def test_raises_error_if_user_tries_to_instantiate_new_convertor
|
217
219
|
assert_raises(NoMethodError) { ToDecimal::Convertor.new }
|
218
220
|
end
|
219
|
-
end
|
221
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: to_decimal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Laurent Guinotte
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-03-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,14 +16,20 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '2.0'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 2.0.1
|
20
23
|
type: :development
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
27
|
- - "~>"
|
25
28
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
29
|
+
version: '2.0'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 2.0.1
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: rake
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,6 +72,34 @@ dependencies:
|
|
66
72
|
- - "~>"
|
67
73
|
- !ruby/object:Gem::Version
|
68
74
|
version: '1.1'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: pry
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: 0.12.2
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: 0.12.2
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: rubocop
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - "~>"
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: 0.65.0
|
96
|
+
type: :development
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - "~>"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: 0.65.0
|
69
103
|
description: |
|
70
104
|
Provides a simple way to convert an integer expressed in bases
|
71
105
|
2 up to 10 to a decimal integer
|
@@ -99,7 +133,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
99
133
|
requirements:
|
100
134
|
- - ">="
|
101
135
|
- !ruby/object:Gem::Version
|
102
|
-
version: 2.4.
|
136
|
+
version: 2.4.5
|
103
137
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
138
|
requirements:
|
105
139
|
- - ">="
|
@@ -107,8 +141,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
107
141
|
version: '0'
|
108
142
|
requirements: []
|
109
143
|
rubyforge_project:
|
110
|
-
rubygems_version: 2.
|
144
|
+
rubygems_version: 2.6.14.3
|
111
145
|
signing_key:
|
112
146
|
specification_version: 4
|
113
|
-
summary: A
|
147
|
+
summary: A small gem to convert integers from bases 2..10 to decimal integers
|
114
148
|
test_files: []
|