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.
- checksums.yaml +4 -4
- data/.inch.yml +3 -0
- data/.rubocop.yml +3 -0
- data/CHANGELOG.md +68 -7
- data/README.md +41 -61
- data/bin/console +1 -1
- data/docs/classes/BasicTemperature.html +27 -1129
- data/docs/classes/BasicTemperature/Temperature.html +1239 -0
- data/docs/classes/BasicTemperature/Temperature/AdditionalHelpers.html +78 -0
- data/docs/classes/BasicTemperature/Temperature/Assertions.html +78 -0
- data/docs/classes/BasicTemperature/Temperature/Casting.html +78 -0
- data/docs/classes/BasicTemperature/Temperature/Errors.html +109 -0
- data/docs/classes/BasicTemperature/Temperature/Errors/InitializationArguments.html +94 -0
- data/docs/classes/BasicTemperature/Temperature/Errors/InvalidDegrees.html +94 -0
- data/docs/classes/BasicTemperature/Temperature/Errors/InvalidNumeric.html +94 -0
- data/docs/classes/BasicTemperature/Temperature/Errors/InvalidNumericOrTemperature.html +94 -0
- data/docs/classes/BasicTemperature/Temperature/Errors/InvalidScale.html +94 -0
- data/docs/classes/BasicTemperature/Temperature/Initialization.html +78 -0
- data/docs/classes/BasicTemperature/Temperature/Memoization.html +78 -0
- data/docs/classes/BasicTemperature/Temperature/Rounding.html +78 -0
- data/docs/classes/Object.html +3 -175
- data/docs/created.rid +12 -4
- data/docs/files/lib/basic_temperature/alias_rb.html +73 -0
- data/docs/files/lib/basic_temperature/temperature/additional_helpers_rb.html +94 -0
- data/docs/files/lib/basic_temperature/temperature/assertions_rb.html +94 -0
- data/docs/files/lib/basic_temperature/temperature/casting_rb.html +94 -0
- data/docs/files/lib/basic_temperature/temperature/errors_rb.html +119 -0
- data/docs/files/lib/basic_temperature/temperature/initialization_rb.html +94 -0
- data/docs/files/lib/basic_temperature/temperature/memoization_rb.html +94 -0
- data/docs/files/lib/basic_temperature/temperature/rounding_rb.html +94 -0
- data/docs/files/lib/basic_temperature/temperature_rb.html +17 -1
- data/docs/files/lib/basic_temperature/version_rb.html +2 -2
- data/docs/files/lib/basic_temperature_rb.html +2 -30
- data/docs/js/navigation.js.gz +0 -0
- data/docs/js/search_index.js +1 -1
- data/docs/js/search_index.js.gz +0 -0
- data/docs/js/searcher.js.gz +0 -0
- data/docs/panel/links.html +16 -0
- data/docs/panel/tree.js +1 -1
- data/lib/basic_temperature.rb +3 -700
- data/lib/basic_temperature/alias.rb +5 -0
- data/lib/basic_temperature/temperature.rb +515 -2
- data/lib/basic_temperature/temperature/additional_helpers.rb +17 -0
- data/lib/basic_temperature/temperature/assertions.rb +30 -0
- data/lib/basic_temperature/temperature/casting.rb +19 -0
- data/lib/basic_temperature/temperature/errors.rb +50 -0
- data/lib/basic_temperature/temperature/initialization.rb +32 -0
- data/lib/basic_temperature/temperature/memoization.rb +26 -0
- data/lib/basic_temperature/temperature/rounding.rb +13 -0
- data/lib/basic_temperature/version.rb +2 -2
- 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
|
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.
|
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-
|
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
|