to_decimal 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|