basic_temperature 0.2.2 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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