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 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: []