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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: 536d4add05473007155d6508a38be3c2edc844c8b2ca055c284d66b610156218
4
- data.tar.gz: 99c02b0b97440add3b06f8b3e81e4c3695bb3dff8725cce9e89ebed2caf1cc3c
2
+ SHA1:
3
+ metadata.gz: 7cd86aa616511538aaaaee26a042ed3682234c60
4
+ data.tar.gz: d42d619ea1b91d3db07b1149ee0347915590ab31
5
5
  SHA512:
6
- metadata.gz: 9d3c17dd84adcdfd27018bf9c39a57f716e67a925ba92af4520b7872d816dea34075258bee82478ee1e28ef63e1ad941629640bda53cde12d176568cb7eb6014
7
- data.tar.gz: 8ee66486d089201851a3dcd2502cdd2ffc26685a6bccbc69e7dcff294c150615dbe561306a82225f56fbdc369233ab6a19eb3b2a40278230e0da1b2e69796bd6
6
+ metadata.gz: 0fa9c5ec9e5f10c990f66736e6e554412fe1e9d56ecff0a2e6983075a7ad017666222aaf8fcb50b6811913887b9ed6738fef730fc71068031b3b556cf27d1b61
7
+ data.tar.gz: 62318b811a0ad64d97db076e273599d62742ebd300047851a0c0515462b9bea58d6782cadea72b12858b184f23b35456ea7708c32248b859d9796e81f3471d0f
data/CHANGELOG.md CHANGED
@@ -1,7 +1,19 @@
1
- # to_decimal 0.0.3 (2018-11-27)
1
+ # to_decimal 1.0.1 (2019-03-16)
2
2
  ---
3
3
 
4
- **Breaking changes !!!**
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.1'
3
+ ruby '~> 2.4.5'
4
4
 
5
- gem 'minitest'
6
- gem 'minitest-reporters', '~> 1.1'
7
- gem 'rake'
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.1.19)
11
+ minitest-reporters (1.3.6)
8
12
  ansi
9
13
  builder
10
14
  minitest (>= 5.0)
11
15
  ruby-progressbar
12
- rake (12.3.0)
13
- ruby-progressbar (1.9.0)
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
- minitest
20
- minitest-reporters (~> 1.1)
21
- rake
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.5.1p57
50
+ ruby 2.4.5p335
25
51
 
26
52
  BUNDLED WITH
27
- 1.16.1
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 `[]` instance method, which takes as parameter an integer OR a string
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
- self.freeze
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, "Base must be an Integer" unless base.is_a?(Integer)
35
- raise ArgumentError, "Base must be 1..10" unless base > 0 && base <= 10
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
- raise ArgumentError, "Argument must be an integer or a valid string\
10
- representation of an integer. You input : #{@input}" unless valid_integer_string_or_integer?
11
-
12
- raise WrongBaseInputError, "A number of base #{@base} cannot have a digit\
13
- greater or equal to #{@base}. Check your argument: #{@input}" unless valid_input_base?
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
- @input.is_a?(Integer) || (@input.is_a?(String) && @input.to_i.to_s == @input)
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
@@ -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 raises if input is not of the correct base =========
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 [] instance method ========================
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 = [[1122111, 1201], [12, 5]]
74
- TEST_VALUES_BASE_4 = [[11001, 321], [322, 58]]
75
- TEST_VALUES_BASE_5 = [[14, 9], [10011302, 78952]]
76
- TEST_VALUES_BASE_6 = [[13, 9], [1405304, 78952]]
77
- TEST_VALUES_BASE_7 = [[12, 9], [446116, 78952]]
78
- TEST_VALUES_BASE_8 = [[11, 9], [232150, 78952]]
79
- TEST_VALUES_BASE_9 = [[10, 9], [130264, 78952]]
80
- TEST_VALUES_BASE_10 = [[9, 9], [78952, 78952]]
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', 1201], ['12', 5]]
122
- TEST_VALUES_BASE_4 = [['11001', 321], ['322', 58]]
123
- TEST_VALUES_BASE_5 = [['14', 9], ['10011302', 78952]]
124
- TEST_VALUES_BASE_6 = [['13', 9], ['1405304', 78952]]
125
- TEST_VALUES_BASE_7 = [['12', 9], ['446116', 78952]]
126
- TEST_VALUES_BASE_8 = [['11', 9], ['232150', 78952]]
127
- TEST_VALUES_BASE_9 = [['10', 9], ['130264', 78952]]
128
- TEST_VALUES_BASE_10 = [['9', 9], ['78952', 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', 1201], ['012', 5]]
170
- TEST_VALUES_BASE_4 = [['0011001', 321], ['322', 58]]
171
- TEST_VALUES_BASE_5 = [['0014', 9], ['010011302', 78952]]
172
- TEST_VALUES_BASE_6 = [['0013', 9], ['01405304', 78952]]
173
- TEST_VALUES_BASE_7 = [['0012', 9], ['0446116', 78952]]
174
- TEST_VALUES_BASE_8 = [['0011', 9], ['0232150', 78952]]
175
- TEST_VALUES_BASE_9 = [['0010', 9], ['0130264', 78952]]
176
- TEST_VALUES_BASE_10 = [['009', 9], ['078952', 78952]]
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.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: 2018-11-28 00:00:00.000000000 Z
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: '1.16'
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: '1.16'
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.1
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.7.6
144
+ rubygems_version: 2.6.14.3
111
145
  signing_key:
112
146
  specification_version: 4
113
- summary: A simple integer converter from bases 2..10 to decimal integers
147
+ summary: A small gem to convert integers from bases 2..10 to decimal integers
114
148
  test_files: []