basic_temperature 0.2.2 → 1.0.0

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.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/.inch.yml +3 -0
  3. data/.rubocop.yml +3 -0
  4. data/CHANGELOG.md +68 -7
  5. data/README.md +41 -61
  6. data/bin/console +1 -1
  7. data/docs/classes/BasicTemperature.html +27 -1129
  8. data/docs/classes/BasicTemperature/Temperature.html +1239 -0
  9. data/docs/classes/BasicTemperature/Temperature/AdditionalHelpers.html +78 -0
  10. data/docs/classes/BasicTemperature/Temperature/Assertions.html +78 -0
  11. data/docs/classes/BasicTemperature/Temperature/Casting.html +78 -0
  12. data/docs/classes/BasicTemperature/Temperature/Errors.html +109 -0
  13. data/docs/classes/BasicTemperature/Temperature/Errors/InitializationArguments.html +94 -0
  14. data/docs/classes/BasicTemperature/Temperature/Errors/InvalidDegrees.html +94 -0
  15. data/docs/classes/BasicTemperature/Temperature/Errors/InvalidNumeric.html +94 -0
  16. data/docs/classes/BasicTemperature/Temperature/Errors/InvalidNumericOrTemperature.html +94 -0
  17. data/docs/classes/BasicTemperature/Temperature/Errors/InvalidScale.html +94 -0
  18. data/docs/classes/BasicTemperature/Temperature/Initialization.html +78 -0
  19. data/docs/classes/BasicTemperature/Temperature/Memoization.html +78 -0
  20. data/docs/classes/BasicTemperature/Temperature/Rounding.html +78 -0
  21. data/docs/classes/Object.html +3 -175
  22. data/docs/created.rid +12 -4
  23. data/docs/files/lib/basic_temperature/alias_rb.html +73 -0
  24. data/docs/files/lib/basic_temperature/temperature/additional_helpers_rb.html +94 -0
  25. data/docs/files/lib/basic_temperature/temperature/assertions_rb.html +94 -0
  26. data/docs/files/lib/basic_temperature/temperature/casting_rb.html +94 -0
  27. data/docs/files/lib/basic_temperature/temperature/errors_rb.html +119 -0
  28. data/docs/files/lib/basic_temperature/temperature/initialization_rb.html +94 -0
  29. data/docs/files/lib/basic_temperature/temperature/memoization_rb.html +94 -0
  30. data/docs/files/lib/basic_temperature/temperature/rounding_rb.html +94 -0
  31. data/docs/files/lib/basic_temperature/temperature_rb.html +17 -1
  32. data/docs/files/lib/basic_temperature/version_rb.html +2 -2
  33. data/docs/files/lib/basic_temperature_rb.html +2 -30
  34. data/docs/js/navigation.js.gz +0 -0
  35. data/docs/js/search_index.js +1 -1
  36. data/docs/js/search_index.js.gz +0 -0
  37. data/docs/js/searcher.js.gz +0 -0
  38. data/docs/panel/links.html +16 -0
  39. data/docs/panel/tree.js +1 -1
  40. data/lib/basic_temperature.rb +3 -700
  41. data/lib/basic_temperature/alias.rb +5 -0
  42. data/lib/basic_temperature/temperature.rb +515 -2
  43. data/lib/basic_temperature/temperature/additional_helpers.rb +17 -0
  44. data/lib/basic_temperature/temperature/assertions.rb +30 -0
  45. data/lib/basic_temperature/temperature/casting.rb +19 -0
  46. data/lib/basic_temperature/temperature/errors.rb +50 -0
  47. data/lib/basic_temperature/temperature/initialization.rb +32 -0
  48. data/lib/basic_temperature/temperature/memoization.rb +26 -0
  49. data/lib/basic_temperature/temperature/rounding.rb +13 -0
  50. data/lib/basic_temperature/version.rb +2 -2
  51. metadata +32 -2
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BasicTemperature
4
+ class Temperature
5
+ module AdditionalHelpers
6
+ private
7
+
8
+ def degrees_with_decimal?(degrees)
9
+ degrees % 1 != 0
10
+ end
11
+
12
+ def degrees_without_decimal?(degrees)
13
+ !degrees_with_decimal?(degrees)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BasicTemperature
4
+ class Temperature
5
+ module Assertions
6
+ private
7
+
8
+ def assert_either_positional_arguments_or_keyword_arguments!(positional_arguments, keyword_arguments)
9
+ raise_initialization_arguments_error if positional_arguments.any? && keyword_arguments.any?
10
+ raise_initialization_arguments_error if positional_arguments.none? && keyword_arguments.none?
11
+ end
12
+
13
+ def assert_valid_degrees!(degrees)
14
+ raise_invalid_degrees_error unless degrees.is_a?(Numeric)
15
+ end
16
+
17
+ def assert_valid_scale!(scale)
18
+ raise_invalid_scale_error unless SCALES.include?(scale)
19
+ end
20
+
21
+ def assert_numeric!(numeric)
22
+ raise_invalid_numeric(numeric) unless numeric.is_a?(Numeric)
23
+ end
24
+
25
+ def assert_temperature(temperature)
26
+ temperature.instance_of?(Temperature)
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BasicTemperature
4
+ class Temperature
5
+ module Casting
6
+ private
7
+
8
+ def cast_degrees(degrees)
9
+ Float(degrees)
10
+ rescue ArgumentError
11
+ nil
12
+ end
13
+
14
+ def cast_scale(scale)
15
+ scale.to_s
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BasicTemperature
4
+ class Temperature
5
+ module Errors
6
+ # Raised when <tt>Temperature.new</tt> is called with mixed positional and keyword arguments or without
7
+ # arguments at all.
8
+ class InitializationArguments < StandardError; end
9
+
10
+ # Raised when <tt>degrees</tt> is not a Numeric.
11
+ class InvalidDegrees < StandardError; end
12
+
13
+ # Raised when <tt>scale</tt> can not be casted to any possible scale value.
14
+ # See {SCALES}[rdoc-ref:Temperature::SCALES].
15
+ class InvalidScale < StandardError; end
16
+
17
+ # Raised when <tt>other</tt> is neither Numeric nor Temperature in math operations.
18
+ class InvalidNumericOrTemperature < StandardError; end
19
+
20
+ # Raised when <tt>other</tt> is not a Numeric in math operations.
21
+ class InvalidNumeric < StandardError; end
22
+
23
+ private
24
+
25
+ def raise_initialization_arguments_error
26
+ message =
27
+ 'Positional and keyword arguments are mixed or ' \
28
+ 'neither positional nor keyword arguments are passed.'
29
+
30
+ raise InitializationArguments, message
31
+ end
32
+
33
+ def raise_invalid_degrees_error
34
+ raise InvalidDegrees, 'degree is NOT a numeric value.'
35
+ end
36
+
37
+ def raise_invalid_scale_error
38
+ message =
39
+ 'scale has invalid value, ' \
40
+ "valid values are #{SCALES.map { |scale| "'#{scale}'" }.join(', ')}."
41
+
42
+ raise InvalidScale, message
43
+ end
44
+
45
+ def raise_invalid_numeric(numeric)
46
+ raise InvalidNumeric, "`#{numeric}` is not a Numeric."
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BasicTemperature
4
+ class Temperature
5
+ module Initialization
6
+ private
7
+
8
+ def initialize_via_positional_arguments(positional_arguments)
9
+ degrees, scale = positional_arguments
10
+
11
+ initialize_arguments(degrees, scale)
12
+ end
13
+
14
+ def initialize_via_keywords_arguments(keyword_arguments)
15
+ degrees, scale = keyword_arguments.values_at(:degrees, :scale)
16
+
17
+ initialize_arguments(degrees, scale)
18
+ end
19
+
20
+ def initialize_arguments(degrees, scale)
21
+ casted_degrees = cast_degrees(degrees)
22
+ casted_scale = cast_scale(scale)
23
+
24
+ assert_valid_degrees!(casted_degrees)
25
+ assert_valid_scale!(casted_scale)
26
+
27
+ @degrees = casted_degrees
28
+ @scale = casted_scale
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BasicTemperature
4
+ class Temperature
5
+ module Memoization
6
+ private
7
+
8
+ def memoized(key)
9
+ name = convert_to_variable_name(key)
10
+
11
+ instance_variable_get(name) if instance_variable_defined?(name)
12
+ end
13
+
14
+ def memoize(key, proc)
15
+ name = convert_to_variable_name(key)
16
+ value = proc.call
17
+
18
+ instance_variable_set(name, value)
19
+ end
20
+
21
+ def convert_to_variable_name(key)
22
+ "@#{key}"
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BasicTemperature
4
+ class Temperature
5
+ module Rounding
6
+ private
7
+
8
+ def round_degrees(degrees)
9
+ degrees.round(2)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class BasicTemperature
4
- VERSION = '0.2.2'
3
+ module BasicTemperature
4
+ VERSION = '1.0.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: basic_temperature
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marian Kostyk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-26 00:00:00.000000000 Z
11
+ date: 2020-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: byebug
@@ -147,6 +147,7 @@ files:
147
147
  - ".codeclimate.yml"
148
148
  - ".coveralls.yml"
149
149
  - ".gitignore"
150
+ - ".inch.yml"
150
151
  - ".rspec"
151
152
  - ".rubocop.yml"
152
153
  - ".travis.yml"
@@ -164,6 +165,19 @@ files:
164
165
  - docs/classes/BasicTemperature/InvalidDegreesError.html
165
166
  - docs/classes/BasicTemperature/InvalidNumericOrTemperatureError.html
166
167
  - docs/classes/BasicTemperature/InvalidScaleError.html
168
+ - docs/classes/BasicTemperature/Temperature.html
169
+ - docs/classes/BasicTemperature/Temperature/AdditionalHelpers.html
170
+ - docs/classes/BasicTemperature/Temperature/Assertions.html
171
+ - docs/classes/BasicTemperature/Temperature/Casting.html
172
+ - docs/classes/BasicTemperature/Temperature/Errors.html
173
+ - docs/classes/BasicTemperature/Temperature/Errors/InitializationArguments.html
174
+ - docs/classes/BasicTemperature/Temperature/Errors/InvalidDegrees.html
175
+ - docs/classes/BasicTemperature/Temperature/Errors/InvalidNumeric.html
176
+ - docs/classes/BasicTemperature/Temperature/Errors/InvalidNumericOrTemperature.html
177
+ - docs/classes/BasicTemperature/Temperature/Errors/InvalidScale.html
178
+ - docs/classes/BasicTemperature/Temperature/Initialization.html
179
+ - docs/classes/BasicTemperature/Temperature/Memoization.html
180
+ - docs/classes/BasicTemperature/Temperature/Rounding.html
167
181
  - docs/classes/Object.html
168
182
  - docs/classes/Temperature.html
169
183
  - docs/created.rid
@@ -172,6 +186,14 @@ files:
172
186
  - docs/css/panel.css
173
187
  - docs/css/reset.css
174
188
  - docs/favicon.ico
189
+ - docs/files/lib/basic_temperature/alias_rb.html
190
+ - docs/files/lib/basic_temperature/temperature/additional_helpers_rb.html
191
+ - docs/files/lib/basic_temperature/temperature/assertions_rb.html
192
+ - docs/files/lib/basic_temperature/temperature/casting_rb.html
193
+ - docs/files/lib/basic_temperature/temperature/errors_rb.html
194
+ - docs/files/lib/basic_temperature/temperature/initialization_rb.html
195
+ - docs/files/lib/basic_temperature/temperature/memoization_rb.html
196
+ - docs/files/lib/basic_temperature/temperature/rounding_rb.html
175
197
  - docs/files/lib/basic_temperature/temperature_rb.html
176
198
  - docs/files/lib/basic_temperature/version_rb.html
177
199
  - docs/files/lib/basic_temperature_rb.html
@@ -194,7 +216,15 @@ files:
194
216
  - docs/panel/links.html
195
217
  - docs/panel/tree.js
196
218
  - lib/basic_temperature.rb
219
+ - lib/basic_temperature/alias.rb
197
220
  - lib/basic_temperature/temperature.rb
221
+ - lib/basic_temperature/temperature/additional_helpers.rb
222
+ - lib/basic_temperature/temperature/assertions.rb
223
+ - lib/basic_temperature/temperature/casting.rb
224
+ - lib/basic_temperature/temperature/errors.rb
225
+ - lib/basic_temperature/temperature/initialization.rb
226
+ - lib/basic_temperature/temperature/memoization.rb
227
+ - lib/basic_temperature/temperature/rounding.rb
198
228
  - lib/basic_temperature/version.rb
199
229
  - logo.png
200
230
  homepage: https://github.com/marian13/basic_temperature