basic_temperature 0.2.1 → 0.2.2

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 (50) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +33 -0
  3. data/.coveralls.yml +1 -0
  4. data/.gitignore +3 -0
  5. data/.rubocop.yml +12 -0
  6. data/.travis.yml +2 -1
  7. data/README.md +223 -9
  8. data/basic_temperature.gemspec +6 -1
  9. data/bin/console +4 -4
  10. data/docs/apple-touch-icon.png +0 -0
  11. data/docs/classes/BasicTemperature.html +1227 -0
  12. data/docs/classes/BasicTemperature/InitializationArgumentsError.html +94 -0
  13. data/docs/classes/BasicTemperature/InvalidDegreesError.html +94 -0
  14. data/docs/classes/BasicTemperature/InvalidNumericOrTemperatureError.html +94 -0
  15. data/docs/classes/BasicTemperature/InvalidScaleError.html +94 -0
  16. data/docs/classes/Object.html +274 -0
  17. data/docs/classes/Temperature.html +1227 -0
  18. data/docs/created.rid +4 -0
  19. data/docs/css/github.css +123 -0
  20. data/docs/css/main.css +374 -0
  21. data/docs/css/panel.css +361 -0
  22. data/docs/css/reset.css +48 -0
  23. data/docs/favicon.ico +0 -0
  24. data/docs/files/lib/basic_temperature/temperature_rb.html +73 -0
  25. data/docs/files/lib/basic_temperature/version_rb.html +84 -0
  26. data/docs/files/lib/basic_temperature_rb.html +112 -0
  27. data/docs/i/arrow-down.svg +8 -0
  28. data/docs/i/arrow-right.svg +8 -0
  29. data/docs/i/search.svg +12 -0
  30. data/docs/i/tree_bg.svg +8 -0
  31. data/docs/index.html +11 -0
  32. data/docs/js/highlight.pack.js +1 -0
  33. data/docs/js/jquery-1.3.2.min.js +19 -0
  34. data/docs/js/main.js +25 -0
  35. data/docs/js/navigation.js +105 -0
  36. data/docs/js/navigation.js.gz +0 -0
  37. data/docs/js/search_index.js +1 -0
  38. data/docs/js/search_index.js.gz +0 -0
  39. data/docs/js/searchdoc.js +465 -0
  40. data/docs/js/searcher.js +229 -0
  41. data/docs/js/searcher.js.gz +0 -0
  42. data/docs/panel/index.html +47 -0
  43. data/docs/panel/links.html +12 -0
  44. data/docs/panel/tree.js +1 -0
  45. data/lib/basic_temperature.rb +552 -75
  46. data/lib/basic_temperature/temperature.rb +5 -0
  47. data/lib/basic_temperature/version.rb +1 -1
  48. data/logo.png +0 -0
  49. metadata +112 -4
  50. data/Gemfile.lock +0 -54
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7b20510122a2cac35b771c18843e418c0441e926b421f0f10ae316385af7529d
4
- data.tar.gz: 697c43df7e678d701d1052fd872a3cf0afaffd5eeec666d9ae90927f9f693e0d
3
+ metadata.gz: 306e98f11732ad722fb25ecf4cbdfbe8b0c1151e34ddffa2fa202656fd16d2de
4
+ data.tar.gz: 1f287528c4653c3f270ad8ec6d27afd2ee7e097b9b1b9a4dc216daefb9b7caa4
5
5
  SHA512:
6
- metadata.gz: faf2b656ce8787e1a891dd2784e825b5ac2d42238915ad1f4636bce69fe92cddfb5b7c51fe89aa7a0dbe348606dbf6796efc435f331194efa78e6213f9927717
7
- data.tar.gz: f813145375bd5823ad63fb3e11aed3fbf3a6bbb9e3c6a9eb600ec7b6264f0c63c98b3d4a23b02b53878ebeaa80237a2b11d14de194c5d7acade689dbf3c07e0a
6
+ metadata.gz: 07a9da936a9b9e282423b91993f09255ddd8783412477d77d412401b6f7b110cada000a95dea742725a0584ab3852f3760691d6dc714a528af5a51a3224290ea
7
+ data.tar.gz: 25833d006ce3d8d000ecd0ee30ebe80e66acbbbe4f9c2fecbea6fb44732057e240a6cddd44fa2acf23f7b32c313b0a0f95a0a660c0f7b2a37fe20cd1c37f7ade
@@ -0,0 +1,33 @@
1
+ # DOCS: https://docs.codeclimate.com/docs/advanced-configuration
2
+ version: 2
3
+
4
+ plugins:
5
+ rubocop:
6
+ enabled: true
7
+ channel: rubocop-0-80
8
+
9
+ exclude_patterns:
10
+ - spec/**/*
11
+
12
+ checks:
13
+ argument-count:
14
+ enabled: false
15
+ complex-logic:
16
+ enabled: false
17
+ file-lines:
18
+ enabled: false
19
+ method-complexity:
20
+ enabled: false
21
+ method-count:
22
+ enabled: false
23
+ method-lines:
24
+ enabled: false
25
+ nested-control-flow:
26
+ enabled: false
27
+ return-statements:
28
+ enabled: false
29
+ similar-code:
30
+ enabled: false
31
+ identical-code:
32
+ enabled: false
33
+
@@ -0,0 +1 @@
1
+ service_name: travis-ci
data/.gitignore CHANGED
@@ -12,3 +12,6 @@
12
12
 
13
13
  # Hide `byebug` history
14
14
  .byebug_history
15
+
16
+ # Ignore `Gemfile.lock`
17
+ Gemfile.lock
@@ -9,5 +9,17 @@ AllCops:
9
9
  Layout/LineLength:
10
10
  Max: 110
11
11
 
12
+ Metrics/AbcSize:
13
+ Max: 20
14
+
15
+ Metrics/MethodLength:
16
+ Max: 15
17
+
18
+ Style/AsciiComments:
19
+ Enabled: No
20
+
21
+ Style/Lambda:
22
+ EnforcedStyle: literal
23
+
12
24
  Style/RedundantSelf:
13
25
  Enabled: No
@@ -1,9 +1,11 @@
1
1
  ---
2
+ # DOCS: https://docs.travis-ci.com/user/languages/ruby/#bundler-20
2
3
  language: ruby
3
4
 
4
5
  cache: bundler
5
6
 
6
7
  before_install:
8
+ # Bundler 2.0
7
9
  - yes | gem update --system --force
8
10
  - gem install bundler -v 2.1.2
9
11
 
@@ -15,5 +17,4 @@ rvm:
15
17
  - 2.7.0
16
18
 
17
19
  script:
18
- - bundle exec rubocop
19
20
  - bundle exec rspec
data/README.md CHANGED
@@ -1,8 +1,30 @@
1
- # BasicTemperature
1
+ ## Basic Temperature ##
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/basic_temperature`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ [![Gem Version](https://badge.fury.io/rb/basic_temperature.svg)](https://rubygems.org/gems/basic_temperature) [![Build Status](https://travis-ci.com/marian13/basic_temperature.svg?branch=master)](https://travis-ci.com/marian13/basic_temperature) [![Maintainability](https://api.codeclimate.com/v1/badges/21dc5d50cf5de8346a3c/maintainability)](https://codeclimate.com/github/marian13/basic_temperature/maintainability) [![Coverage Status](https://coveralls.io/repos/github/marian13/basic_temperature/badge.svg)](https://coveralls.io/github/marian13/basic_temperature) [![Inline docs](http://inch-ci.org/github/marian13/basic_temperature.svg?branch=master)](http://inch-ci.org/github/marian13/basic_temperature)
4
+ [![Patreon](https://img.shields.io/badge/patreon-donate-orange.svg)](https://www.patreon.com/user?u=31435716&fan_landing=true)
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
4
6
 
5
- TODO: Delete this and the text above, and describe your gem
7
+ ![alt text](https://raw.githubusercontent.com/marian13/basic_temperature/master/logo.png)
8
+
9
+ `basic_temperature` is a Ruby library which provides a simple [value object](https://martinfowler.com/bliki/ValueObject.html) to work with temperatures and
10
+ allows to perform basic operations like conversion from Celsius to Kelvin, from Kelvin to Fahrenheit etc.
11
+
12
+
13
+ ### Features
14
+ - Provides a `BasicTemperature` class which encapsulates all information about a certain temperature, such
15
+ as its amount of degrees and its scale.
16
+ - Provides APIs for exchanging temperatures from one scale to another (currently Celsius, Fahrenheit, Kelvin and
17
+ Rankine).
18
+
19
+ - Allows comparing temperatures between each other.
20
+ - Supports basic math operations like addition and subtraction.
21
+ - Tested against Ruby 2.3, 2.4, 2.5, 2.6 & 2.7. See
22
+ [.travis-ci.yml](https://github.com/marian13/basic_temperature/blob/9b13cb9909b57c51bb5dc05a8989d07a314e67d6/.travis.yml)
23
+ for the exact versions.
24
+
25
+ ### Dependecies
26
+
27
+ * None.
6
28
 
7
29
  ## Installation
8
30
 
@@ -12,6 +34,14 @@ Add this line to your application's Gemfile:
12
34
  gem 'basic_temperature'
13
35
  ```
14
36
 
37
+ #### Warning
38
+
39
+ Since this gem is under active development and there are often backward-incompatible changes between minor releases, you might want to use a conservative version lock in your Gemfile:
40
+
41
+ ```ruby
42
+ gem 'basic_temperature', '~> 0.2.1'
43
+ ```
44
+
15
45
  And then execute:
16
46
 
17
47
  $ bundle install
@@ -22,19 +52,203 @@ Or install it yourself as:
22
52
 
23
53
  ## Usage
24
54
 
25
- TODO: Write usage instructions here
55
+ ### Creating Temperatures
56
+
57
+ A new temperature can be created in multiple ways:
58
+
59
+ - Using keyword arguments:
26
60
 
27
- ## Development
61
+ ```ruby
62
+ Temperature.new(degrees: 0, scale: :celsius)
63
+ ```
28
64
 
29
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
65
+ - Using positional arguments:
30
66
 
31
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
67
+ ```ruby
68
+ Temperature.new(0, :celsius)
69
+ ```
32
70
 
33
- ## Contributing
71
+ - Even more concise way using `Temperature.[]` (an alias of `Temperature.new`):
72
+
73
+ ```ruby
74
+ Temperature[0, :celsius]
75
+ ```
76
+
77
+ ### Creating Temperatures from already existing temperature objects
78
+
79
+ Sometimes it is useful to create a new temperature from already existing one.
80
+
81
+ For such cases, there are `set_degrees` and `set_scale`.
82
+
83
+ Since temperatures are [value objects](https://martinfowler.com/bliki/ValueObject.html), both methods returns
84
+ new instances.
85
+
86
+ Examples:
87
+
88
+ ```ruby
89
+ temperature = Temperature[0, :celsius]
90
+ # => 0 °C
91
+
92
+ new_temperature = temperature.set_degrees(15)
93
+ # => 15 °C
94
+
95
+ temperature = Temperature[0, :celsius]
96
+ # => 0 °C
97
+
98
+ new_temperature = temperature.set_scale(:kelvin)
99
+ # => 0 K
100
+ ```
101
+
102
+ ### Conversions
103
+
104
+ Temperatures can be converted to diffirent scales.
105
+
106
+ Currently, the following scales are supported: `Celsius`, `Fahrenheit`, `Kelvin` and `Rankine`.
107
+
108
+ ```ruby
109
+ Temperature[20, :celsius].to_celsius
110
+ # => 20 °C
111
+
112
+ Temperature[20, :celsius].to_fahrenheit
113
+ # => 68 °F
114
+
115
+ Temperature[20, :celsius].to_kelvin
116
+ # => 293.15 K
117
+
118
+ Temperature[20, :celsius].to_rankine
119
+ # => 527.67 °R
120
+ ```
121
+
122
+ If it is necessary to convert scale dynamically, `to_scale` method is available.
123
+
124
+ ```ruby
125
+ Temperature[20, :celsius].to_scale(scale)
126
+ ```
127
+
128
+ All conversion formulas are taken from
129
+ [RapidTables](https://www.rapidtables.com/convert/temperature/index.html).
130
+
131
+ Conversion precision: 2 accurate digits after the decimal dot.
132
+
133
+ ### Comparison
134
+
135
+ Temperature implements idiomatic [<=> spaceship operator](https://ruby-doc.org/core/Comparable.html) and mixes in [Comparable](https://ruby-doc.org/core/Comparable.html) module.
136
+
137
+ As a result, all methods from [Comparable](https://ruby-doc.org/core/Comparable.html) are available, e.g:
138
+
139
+ ```ruby
140
+ Temperature[20, :celsius] < Temperature[25, :celsius]
141
+ # => true
34
142
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/basic_temperature.
143
+ Temperature[20, :celsius] <= Temperature[25, :celsius]
144
+ # => true
36
145
 
146
+ Temperature[20, :celsius] == Temperature[25, :celsius]
147
+ # => false
148
+
149
+ Temperature[20, :celsius] > Temperature[25, :celsius]
150
+ # => false
151
+
152
+ Temperature[20, :celsius] >= Temperature[25, :celsius]
153
+ # => false
154
+
155
+ Temperature[20, :celsius].between?(Temperature[15, :celsius], Temperature[25, :celsius])
156
+ # => true
157
+
158
+ # Starting from Ruby 2.4.6
159
+ Temperature[20, :celsius].clamp(Temperature[20, :celsius], Temperature[25, :celsius])
160
+ # => 20 °C
161
+ ```
162
+
163
+ Please note, if the second temperature has a different scale, the first temperature is automatically
164
+ converted to that scale before comparison.
165
+
166
+ ```ruby
167
+ Temperature[20, :celsius] == Temperature[293.15, :kelvin]
168
+ # => true
169
+ ```
170
+
171
+ #### IMPORTANT !!!
172
+
173
+ `degrees` are rounded to the nearest value with a precision of 2 decimal digits before comparison.
174
+
175
+ This means the following temperatures are considered as equal:
176
+
177
+ ```ruby
178
+ Temperature[20.020, :celsius] == Temperature[20.024, :celsius]
179
+ # => true
180
+
181
+ Temperature[20.025, :celsius] == Temperature[20.029, :celsius]
182
+ # => true
183
+ ```
184
+
185
+ while these ones are treated as NOT equal:
186
+
187
+ ```ruby
188
+ Temperature[20.024, :celsius] == Temperature[20.029, :celsius]
189
+ # => false
190
+ ```
191
+
192
+ ### Math
193
+
194
+ #### Addition/Subtraction.
195
+
196
+ ```ruby
197
+ Temperature[20, :celsius] + Temperature[10, :celsius]
198
+ # => 30 °C
199
+
200
+ Temperature[20, :celsius] - Temperature[10, :celsius]
201
+ # => 10 °C
202
+ ```
203
+
204
+ If second temperature has a different scale, first temperature is automatically converted to that scale
205
+ before `degrees` addition/subtraction.
206
+
207
+ ```ruby
208
+ Temperature[283.15, :kelvin] + Temperature[10, :celsius]
209
+ # => 10 °C
210
+ ```
211
+
212
+ Returned temperature will have the same scale as the second temperature.
213
+
214
+ It is possible to add/subtract numerics.
215
+
216
+ ```ruby
217
+ Temperature[20, :celsius] + 10
218
+ # => 30 °C
219
+
220
+ Temperature[20, :celsius] - 10
221
+ # => 10 °C
222
+ ```
223
+
224
+ In such cases, returned temperature will have the same scale as the first temperature.
225
+
226
+ Also [Ruby coersion mechanism](https://ruby-doc.org/core/Numeric.html#method-i-coerce) is supported.
227
+
228
+ ```ruby
229
+ 10 + Temperature[20, :celsius]
230
+ # => 30 °C
231
+
232
+ 10 - Temperature[20, :celsius]
233
+ # => -10 °C
234
+ ```
235
+
236
+ #### Negation
237
+
238
+ ```ruby
239
+ -Temperature[20, :celsius]
240
+ # => -20 °C
241
+ ```
242
+
243
+ ## Versioning
244
+ Basic Temperature follows the [Semantic Versioning](https://semver.org/) standard.
245
+
246
+ ## Contributing
247
+
248
+ Bug reports and pull requests are welcome on GitHub at https://github.com/marian13/basic_temperature.
37
249
 
38
250
  ## License
39
251
 
40
252
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
253
+
254
+ Copyright (c) 2020 [Marian Kostyk](http://mariankostyk.com).
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
12
12
  spec.summary = 'Value object for basic temperature operations.'
13
13
  spec.description =
14
14
  'Value object for basic temperature operations like ' \
15
- 'conversions from Celcius to Fahrenhait or Kelvin etc.'
15
+ 'conversions from Celsius to Fahrenhait or Kelvin etc.'
16
16
 
17
17
  spec.homepage = 'https://github.com/marian13/basic_temperature'
18
18
 
@@ -33,7 +33,12 @@ Gem::Specification.new do |spec|
33
33
  spec.require_paths = ['lib']
34
34
 
35
35
  spec.add_development_dependency 'byebug', '~> 10.0'
36
+ spec.add_development_dependency 'coveralls'
36
37
  spec.add_development_dependency 'rake', '~> 12.0'
38
+ spec.add_development_dependency 'rerun'
39
+ spec.add_development_dependency 'reverse_coverage'
37
40
  spec.add_development_dependency 'rspec', '~> 3.0'
38
41
  spec.add_development_dependency 'rubocop', '~> 0.80.0'
42
+ spec.add_development_dependency 'sdoc'
43
+ spec.add_development_dependency 'simplecov'
39
44
  end
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "basic_temperature"
3
+ require 'bundler/setup'
4
+ require 'basic_temperature/temperature'
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
8
8
 
9
9
  # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
10
+ # require 'pry'
11
11
  # Pry.start
12
12
 
13
- require "irb"
13
+ require 'irb'
14
14
  IRB.start(__FILE__)
Binary file
@@ -0,0 +1,1227 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>BasicTemperature</title>
5
+ <meta charset="UTF-8" />
6
+ <link rel="stylesheet" href="../css/reset.css" type="text/css" media="screen" />
7
+ <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen" />
8
+ <link rel="stylesheet" href="../css/github.css" type="text/css" media="screen" />
9
+ <script src="../js/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>
10
+ <script src="../js/main.js" type="text/javascript" charset="utf-8"></script>
11
+ <script src="../js/highlight.pack.js" type="text/javascript" charset="utf-8"></script>
12
+
13
+
14
+ <meta property="og:title" value="BasicTemperature">
15
+
16
+
17
+
18
+ <meta name="description" content="Temperature is a simple Value Object for basic temperature operations like conversions from Celsius to Fahrenhait or Kelvin etc. Supported scales: Celsius, Fahrenheit, Kelvin and Rankine.">
19
+ <meta property="og:description" content="Temperature is a simple Value Object for basic temperature operations like conversions from Celsius to Fahrenhait or Kelvin etc. Supported scales: Celsius, Fahrenheit, Kelvin and Rankine.">
20
+
21
+
22
+ <meta name="keywords" content="BasicTemperature class">
23
+
24
+ <meta name="keywords" content="[], new, set_degrees, set_scale, to_scale, to_celsius, to_fahrenheit, to_kelvin, to_rankine, <=>, +, -, -@">
25
+
26
+ </head>
27
+
28
+ <body>
29
+ <div class="banner">
30
+
31
+ <h1>
32
+ <span class="type">Class</span>
33
+ BasicTemperature
34
+
35
+ <span class="parent">&lt;
36
+
37
+ <a href="Object.html">Object</a>
38
+
39
+ </span>
40
+
41
+ </h1>
42
+ <ul class="files">
43
+
44
+ <li><a href="../files/lib/basic_temperature_rb.html">lib/basic_temperature.rb</a></li>
45
+
46
+ <li><a href="../files/lib/basic_temperature/version_rb.html">lib/basic_temperature/version.rb</a></li>
47
+
48
+ </ul>
49
+ </div>
50
+ <div id="bodyContent">
51
+ <div id="content">
52
+
53
+ <div class="description">
54
+
55
+ <p><a href="BasicTemperature.html"><code>Temperature</code></a> is a simple <a href="https://martinfowler.com/bliki/ValueObject.html">Value Object</a> for basic temperature operations like conversions from <code>Celsius</code> to <code>Fahrenhait</code> or <code>Kelvin</code> etc.</p>
56
+
57
+ <p>Supported scales: <code>Celsius</code>, <code>Fahrenheit</code>, <code>Kelvin</code> and <code>Rankine</code>.</p>
58
+
59
+ <h2 id="class-BasicTemperature-label-Creating+Temperatures">Creating Temperatures</h2>
60
+
61
+ <p>A new temperature can be created in multiple ways:</p>
62
+ <ul><li>
63
+ <p>Using keyword arguments:</p>
64
+
65
+ <pre><code>Temperature.new(degrees: 0, scale: :celsius)
66
+ </code></pre>
67
+ </li><li>
68
+ <p>Using positional arguments:</p>
69
+
70
+ <pre><code>Temperature.new(0, :celsius)
71
+ </code></pre>
72
+ </li><li>
73
+ <p>Even more concise way using <code>Temperature.[]</code> (an alias of <code>Temperature.new</code>):</p>
74
+
75
+ <pre><code>Temperature[0, :celsius]
76
+ </code></pre>
77
+ </li></ul>
78
+
79
+ <h2 id="class-BasicTemperature-label-Creating+Temperatures+from+already+existing+temperature+objects">Creating Temperatures from already existing temperature objects</h2>
80
+
81
+ <p>Sometimes it is useful to create a new temperature from already existing one.</p>
82
+
83
+ <p>For such cases, there are <a href="BasicTemperature.html#method-i-set_scale">set_degrees}[rdoc-ref:BasicTemperature#set_degrees and {set_scale</a>.</p>
84
+
85
+ <p>Since temperatures are <a href="https://martinfowler.com/bliki/ValueObject.html">Value Objects</a>, both methods returns new instances.</p>
86
+
87
+ <p>Examples:</p>
88
+
89
+ <pre><code>temperature = Temperature[0, :celsius]
90
+ # =&gt; 0 °C
91
+
92
+ new_temperature = temperature.set_degrees(15)
93
+ # =&gt; 15 °C
94
+
95
+ temperature = Temperature[0, :celsius]
96
+ # =&gt; 0 °C
97
+
98
+ new_temperature = temperature.set_scale(:kelvin)
99
+ # =&gt; 0 K
100
+ </code></pre>
101
+
102
+ <h2 id="class-BasicTemperature-label-Conversions">Conversions</h2>
103
+
104
+ <p>Temperatures can be converted to diffirent scales.</p>
105
+
106
+ <p>Currently, the following scales are supported: <code>Celsius</code>, <code>Fahrenheit</code>, <code>Kelvin</code> and <code>Rankine</code>.</p>
107
+
108
+ <pre><code>Temperature[20, :celsius].to_celsius
109
+ # =&gt; 20 °C
110
+
111
+ Temperature[20, :celsius].to_fahrenheit
112
+ # =&gt; 68 °F
113
+
114
+ Temperature[20, :celsius].to_kelvin
115
+ # =&gt; 293.15 K
116
+
117
+ Temperature[20, :celsius].to_rankine
118
+ # =&gt; 527.67 °R
119
+ </code></pre>
120
+
121
+ <p>If it is necessary to convert scale dynamically, <a href="BasicTemperature.html#method-i-to_scale">to_scale</a> method is available.</p>
122
+
123
+ <pre><code>Temperature[20, :celsius].to_scale(scale)
124
+ </code></pre>
125
+
126
+ <p>All conversion formulas are taken from <a href="https://www.rapidtables.com/convert/temperature/index.html">RapidTables</a>.</p>
127
+
128
+ <p>Conversion precision: 2 accurate digits after the decimal dot.</p>
129
+
130
+ <h2 id="class-BasicTemperature-label-Comparison">Comparison</h2>
131
+
132
+ <p><a href="BasicTemperature.html"><code>Temperature</code></a> implements idiomatic <a href="https://ruby-doc.org/core/Comparable.html"><=> spaceship operator</a> and mixes in <a href="https://ruby-doc.org/core/Comparable.html">Comparable</a> module.</p>
133
+
134
+ <p>As a result, all methods from Comparable are available, e.g:</p>
135
+
136
+ <pre><code>Temperature[20, :celsius] &lt; Temperature[25, :celsius]
137
+ # =&gt; true
138
+
139
+ Temperature[20, :celsius] &lt;= Temperature[25, :celsius]
140
+ # =&gt; true
141
+
142
+ Temperature[20, :celsius] == Temperature[25, :celsius]
143
+ # =&gt; false
144
+
145
+ Temperature[20, :celsius] &gt; Temperature[25, :celsius]
146
+ # =&gt; false
147
+
148
+ Temperature[20, :celsius] &gt;= Temperature[25, :celsius]
149
+ # =&gt; false
150
+
151
+ Temperature[20, :celsius].between?(Temperature[15, :celsius], Temperature[25, :celsius])
152
+ # =&gt; true
153
+
154
+ # Starting from Ruby 2.4.6
155
+ Temperature[20, :celsius].clamp(Temperature[20, :celsius], Temperature[25, :celsius])
156
+ # =&gt; 20 °C
157
+ </code></pre>
158
+
159
+ <p>Please note, if <code>other</code> temperature has a different scale, temperature is automatically converted to that scale before comparison.</p>
160
+
161
+ <pre><code>Temperature[20, :celsius] == Temperature[293.15, :kelvin]
162
+ # =&gt; true
163
+ </code></pre>
164
+
165
+ <p>IMPORTANT !!!</p>
166
+
167
+ <p><code>degrees</code> are rounded to the nearest value with a precision of 2 decimal digits before comparison.</p>
168
+
169
+ <p>This means the following temperatures are considered as equal:</p>
170
+
171
+ <pre><code>Temperature[20.020, :celsius] == Temperature[20.024, :celsius]
172
+ # =&gt; true
173
+
174
+ Temperature[20.025, :celsius] == Temperature[20.029, :celsius]
175
+ # =&gt; true
176
+ </code></pre>
177
+
178
+ <p>while these ones are treated as NOT equal:</p>
179
+
180
+ <pre><code>Temperature[20.024, :celsius] == Temperature[20.029, :celsius]
181
+ # =&gt; false
182
+ </code></pre>
183
+
184
+ <h2 id="class-BasicTemperature-label-Math">Math</h2>
185
+
186
+ <h4 id="class-BasicTemperature-label-Addition-2FSubtraction.">Addition/Subtraction.</h4>
187
+
188
+ <pre><code>Temperature[20, :celsius] + Temperature[10, :celsius]
189
+ # =&gt; 30 °C
190
+
191
+ Temperature[20, :celsius] - Temperature[10, :celsius]
192
+ # =&gt; 10 °C
193
+ </code></pre>
194
+
195
+ <p>If second temperature has a different scale, first temperature is automatically converted to that scale before <code>degrees</code> addition/subtraction.</p>
196
+
197
+ <pre><code>Temperature[283.15, :kelvin] + Temperature[10, :celsius]
198
+ # =&gt; 10 °C
199
+ </code></pre>
200
+
201
+ <p>Returned temperature will have the same scale as the second temperature.</p>
202
+
203
+ <p>It is possible to add/subtract numerics.</p>
204
+
205
+ <pre><code>Temperature[20, :celsius] + 10
206
+ # =&gt; 30 °C
207
+
208
+ Temperature[20, :celsius] - 10
209
+ # =&gt; 10 °C
210
+ </code></pre>
211
+
212
+ <p>In such cases, returned temperature will have the same scale as the first temperature.</p>
213
+
214
+ <p>Also <a href="https://ruby-doc.org/core/Numeric.html#method-i-coerce">Ruby coersion mechanism</a> is supported.</p>
215
+
216
+ <pre><code>10 + Temperature[20, :celsius]
217
+ # =&gt; 30 °C
218
+
219
+ 10 - Temperature[20, :celsius]
220
+ # =&gt; -10 °C
221
+ </code></pre>
222
+
223
+ <h4 id="class-BasicTemperature-label-Negation">Negation</h4>
224
+
225
+ <pre><code>-Temperature[20, :celsius]
226
+ # =&gt; -20 °C
227
+ </code></pre>
228
+
229
+ </div>
230
+
231
+
232
+
233
+
234
+
235
+
236
+
237
+
238
+
239
+
240
+
241
+
242
+
243
+
244
+ <!-- Method ref -->
245
+ <div class="sectiontitle">Methods</div>
246
+ <dl class="methods">
247
+
248
+ <dt>#</dt>
249
+ <dd>
250
+ <ul>
251
+
252
+
253
+ <li>
254
+ <a href="#method-i-2B">+</a>,
255
+ </li>
256
+
257
+
258
+ <li>
259
+ <a href="#method-i-2D">-</a>,
260
+ </li>
261
+
262
+
263
+ <li>
264
+ <a href="#method-i-2D-40">-@</a>,
265
+ </li>
266
+
267
+
268
+ <li>
269
+ <a href="#method-i-3C-3D-3E">&lt;=&gt;</a>,
270
+ </li>
271
+
272
+
273
+ <li>
274
+ <a href="#method-c-5B-5D">[]</a>
275
+ </li>
276
+
277
+ </ul>
278
+ </dd>
279
+
280
+ <dt>N</dt>
281
+ <dd>
282
+ <ul>
283
+
284
+
285
+ <li>
286
+ <a href="#method-c-new">new</a>
287
+ </li>
288
+
289
+ </ul>
290
+ </dd>
291
+
292
+ <dt>S</dt>
293
+ <dd>
294
+ <ul>
295
+
296
+
297
+ <li>
298
+ <a href="#method-i-set_degrees">set_degrees</a>,
299
+ </li>
300
+
301
+
302
+ <li>
303
+ <a href="#method-i-set_scale">set_scale</a>
304
+ </li>
305
+
306
+ </ul>
307
+ </dd>
308
+
309
+ <dt>T</dt>
310
+ <dd>
311
+ <ul>
312
+
313
+
314
+ <li>
315
+ <a href="#method-i-to_celsius">to_celsius</a>,
316
+ </li>
317
+
318
+
319
+ <li>
320
+ <a href="#method-i-to_fahrenheit">to_fahrenheit</a>,
321
+ </li>
322
+
323
+
324
+ <li>
325
+ <a href="#method-i-to_kelvin">to_kelvin</a>,
326
+ </li>
327
+
328
+
329
+ <li>
330
+ <a href="#method-i-to_rankine">to_rankine</a>,
331
+ </li>
332
+
333
+
334
+ <li>
335
+ <a href="#method-i-to_scale">to_scale</a>
336
+ </li>
337
+
338
+ </ul>
339
+ </dd>
340
+
341
+ </dl>
342
+
343
+
344
+
345
+ <!-- Includes -->
346
+ <div class="sectiontitle">Included Modules</div>
347
+ <ul>
348
+
349
+ <li>
350
+
351
+ Comparable
352
+
353
+ </li>
354
+
355
+ </ul>
356
+
357
+
358
+
359
+
360
+
361
+
362
+
363
+
364
+
365
+
366
+
367
+ <!-- Section constants -->
368
+ <div class="sectiontitle">Constants</div>
369
+ <table border='0' cellpadding='5'>
370
+
371
+ <tr valign='top'>
372
+ <td class="attr-name">CELSIUS</td>
373
+ <td>=</td>
374
+ <td class="attr-value">&#39;celsius&#39;</td>
375
+ </tr>
376
+
377
+ <tr valign='top'>
378
+ <td>&nbsp;</td>
379
+ <td colspan="2" class="attr-desc"></td>
380
+ </tr>
381
+
382
+
383
+ <tr valign='top'>
384
+ <td class="attr-name">FAHRENHEIT</td>
385
+ <td>=</td>
386
+ <td class="attr-value">&#39;fahrenheit&#39;</td>
387
+ </tr>
388
+
389
+ <tr valign='top'>
390
+ <td>&nbsp;</td>
391
+ <td colspan="2" class="attr-desc"></td>
392
+ </tr>
393
+
394
+
395
+ <tr valign='top'>
396
+ <td class="attr-name">KELVIN</td>
397
+ <td>=</td>
398
+ <td class="attr-value">&#39;kelvin&#39;</td>
399
+ </tr>
400
+
401
+ <tr valign='top'>
402
+ <td>&nbsp;</td>
403
+ <td colspan="2" class="attr-desc"></td>
404
+ </tr>
405
+
406
+
407
+ <tr valign='top'>
408
+ <td class="attr-name">RANKINE</td>
409
+ <td>=</td>
410
+ <td class="attr-value">&#39;rankine&#39;</td>
411
+ </tr>
412
+
413
+ <tr valign='top'>
414
+ <td>&nbsp;</td>
415
+ <td colspan="2" class="attr-desc"></td>
416
+ </tr>
417
+
418
+
419
+ <tr valign='top'>
420
+ <td class="attr-name">SCALES</td>
421
+ <td>=</td>
422
+ <td class="attr-value">[CELSIUS, FAHRENHEIT, KELVIN, RANKINE].freeze</td>
423
+ </tr>
424
+
425
+ <tr valign='top'>
426
+ <td>&nbsp;</td>
427
+ <td colspan="2" class="attr-desc"><p>A list of all currently supported scale values.</p></td>
428
+ </tr>
429
+
430
+
431
+ <tr valign='top'>
432
+ <td class="attr-name">VERSION</td>
433
+ <td>=</td>
434
+ <td class="attr-value">&#39;0.2.1&#39;</td>
435
+ </tr>
436
+
437
+ <tr valign='top'>
438
+ <td>&nbsp;</td>
439
+ <td colspan="2" class="attr-desc"></td>
440
+ </tr>
441
+
442
+
443
+ </table>
444
+
445
+
446
+
447
+
448
+ <!-- Section attributes -->
449
+ <div class="sectiontitle">Attributes</div>
450
+ <table border='0' cellpadding='5'>
451
+
452
+ <tr valign='top'>
453
+ <td class='attr-rw'>
454
+ [R]
455
+ </td>
456
+ <td class='attr-name'>degrees</td>
457
+ <td class='attr-desc'><p>Degrees of the temperature.</p></td>
458
+ </tr>
459
+
460
+ <tr valign='top'>
461
+ <td class='attr-rw'>
462
+ [R]
463
+ </td>
464
+ <td class='attr-name'>scale</td>
465
+ <td class='attr-desc'><p>Scale of the temperature. Look at <a href="BasicTemperature.html#SCALES">SCALES</a> for possible values.</p></td>
466
+ </tr>
467
+
468
+ </table>
469
+
470
+
471
+
472
+ <!-- Methods -->
473
+
474
+ <div class="sectiontitle">Class Public methods</div>
475
+
476
+ <div class="method">
477
+ <div class="title method-title" id="method-c-5B-5D">
478
+
479
+ <b>[](degrees:, scale:)<br />[](degrees, scale)</b>
480
+
481
+ <a href="../classes/BasicTemperature.html#method-c-5B-5D" name="method-c-5B-5D" class="permalink">Link</a>
482
+ </div>
483
+
484
+
485
+ <div class="description">
486
+ <p>Creates a new instance of <a href="Temperature.html"><code>Temperature</code></a>. Alias for <code>new</code>.</p>
487
+ </div>
488
+
489
+
490
+
491
+
492
+
493
+
494
+
495
+
496
+ <div class="sourcecode">
497
+
498
+ <p class="source-link">
499
+ Source:
500
+ <a href="javascript:toggleSource('method-c-5B-5D_source')" id="l_method-c-5B-5D_source">show</a>
501
+
502
+ </p>
503
+ <div id="method-c-5B-5D_source" class="dyn-source">
504
+ <pre><span class="ruby-comment"># File lib/basic_temperature.rb, line 215</span>
505
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier ruby-title">[]</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>, <span class="ruby-operator">**</span><span class="ruby-identifier">kwargs</span>)
506
+ <span class="ruby-identifier">new</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>, <span class="ruby-operator">**</span><span class="ruby-identifier">kwargs</span>)
507
+ <span class="ruby-keyword">end</span></pre>
508
+ </div>
509
+ </div>
510
+
511
+ </div>
512
+
513
+ <div class="method">
514
+ <div class="title method-title" id="method-c-new">
515
+
516
+ <b>new(degrees:, scale:)<br />new(degrees, scale)</b>
517
+
518
+ <a href="../classes/BasicTemperature.html#method-c-new" name="method-c-new" class="permalink">Link</a>
519
+ </div>
520
+
521
+
522
+ <div class="description">
523
+ <p>Creates a new instance of <a href="Temperature.html"><code>Temperature</code></a>. Is aliased as <code>[]</code>.</p>
524
+ </div>
525
+
526
+
527
+
528
+
529
+
530
+
531
+
532
+
533
+ <div class="sourcecode">
534
+
535
+ <p class="source-link">
536
+ Source:
537
+ <a href="javascript:toggleSource('method-c-new_source')" id="l_method-c-new_source">show</a>
538
+
539
+ </p>
540
+ <div id="method-c-new_source" class="dyn-source">
541
+ <pre><span class="ruby-comment"># File lib/basic_temperature.rb, line 226</span>
542
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">initialize</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">positional_arguments</span>, <span class="ruby-operator">**</span><span class="ruby-identifier">keyword_arguments</span>)
543
+ <span class="ruby-identifier">assert_either_positional_arguments_or_keyword_arguments!</span>(<span class="ruby-identifier">positional_arguments</span>, <span class="ruby-identifier">keyword_arguments</span>)
544
+
545
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">keyword_arguments</span>.<span class="ruby-identifier">any?</span>
546
+ <span class="ruby-identifier">initialize_via_keywords_arguments</span>(<span class="ruby-identifier">keyword_arguments</span>)
547
+ <span class="ruby-keyword">else</span> <span class="ruby-comment"># positional_arguments.any?</span>
548
+ <span class="ruby-identifier">initialize_via_positional_arguments</span>(<span class="ruby-identifier">positional_arguments</span>)
549
+ <span class="ruby-keyword">end</span>
550
+ <span class="ruby-keyword">end</span></pre>
551
+ </div>
552
+ </div>
553
+
554
+ </div>
555
+
556
+
557
+
558
+ <div class="sectiontitle">Instance Public methods</div>
559
+
560
+ <div class="method">
561
+ <div class="title method-title" id="method-i-2B">
562
+
563
+ <b>+(temperature)<br />+(numeric)</b>
564
+
565
+ <a href="../classes/BasicTemperature.html#method-i-2B" name="method-i-2B" class="permalink">Link</a>
566
+ </div>
567
+
568
+
569
+ <div class="description">
570
+ <p>Performs addition. Returns a new <a href="Temperature.html"><code>Temperature</code></a>.</p>
571
+
572
+ <pre><code>Temperature[20, :celsius] + Temperature[10, :celsius]
573
+ # =&gt; 30 °C
574
+ </code></pre>
575
+
576
+ <p>If the second temperature has a different scale, the first temperature is automatically converted to that scale before <code>degrees</code> addition.</p>
577
+
578
+ <pre><code>Temperature[283.15, :kelvin] + Temperature[20, :celsius]
579
+ # =&gt; 30 °C
580
+ </code></pre>
581
+
582
+ <p>Returned temperature will have the same scale as the second temperature.</p>
583
+
584
+ <p>It is possible to add numerics.</p>
585
+
586
+ <pre><code>Temperature[20, :celsius] + 10
587
+ # =&gt; 30 °C
588
+ </code></pre>
589
+
590
+ <p>In such cases, returned temperature will have the same scale as the first temperature.</p>
591
+
592
+ <p>Also <a href="https://ruby-doc.org/core/Numeric.html#method-i-coerce">Ruby coersion mechanism</a> is supported.</p>
593
+
594
+ <pre><code>10 + Temperature[20, :celsius]
595
+ # =&gt; 30 °C
596
+ </code></pre>
597
+ </div>
598
+
599
+
600
+
601
+
602
+
603
+
604
+
605
+
606
+ <div class="sourcecode">
607
+
608
+ <p class="source-link">
609
+ Source:
610
+ <a href="javascript:toggleSource('method-i-2B_source')" id="l_method-i-2B_source">show</a>
611
+
612
+ </p>
613
+ <div id="method-i-2B_source" class="dyn-source">
614
+ <pre><span class="ruby-comment"># File lib/basic_temperature.rb, line 493</span>
615
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">+</span>(<span class="ruby-identifier">other</span>)
616
+ <span class="ruby-identifier">assert_numeric_or_temperature!</span>(<span class="ruby-identifier">other</span>)
617
+
618
+ <span class="ruby-identifier">degrees</span>, <span class="ruby-identifier">scale</span> =
619
+ <span class="ruby-keyword">case</span> <span class="ruby-identifier">other</span>
620
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">Numeric</span>
621
+ [<span class="ruby-keyword">self</span>.<span class="ruby-identifier">degrees</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">other</span>, <span class="ruby-keyword">self</span>.<span class="ruby-identifier">scale</span>]
622
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">BasicTemperature</span>
623
+ [<span class="ruby-keyword">self</span>.<span class="ruby-identifier">to_scale</span>(<span class="ruby-identifier">other</span>.<span class="ruby-identifier">scale</span>).<span class="ruby-identifier">degrees</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">other</span>.<span class="ruby-identifier">degrees</span>, <span class="ruby-identifier">other</span>.<span class="ruby-identifier">scale</span>]
624
+ <span class="ruby-keyword">end</span>
625
+
626
+ <span class="ruby-constant">BasicTemperature</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">degrees</span>, <span class="ruby-identifier">scale</span>)
627
+ <span class="ruby-keyword">end</span></pre>
628
+ </div>
629
+ </div>
630
+
631
+ </div>
632
+
633
+ <div class="method">
634
+ <div class="title method-title" id="method-i-2D">
635
+
636
+ <b>-(temperature)<br />-(numeric)</b>
637
+
638
+ <a href="../classes/BasicTemperature.html#method-i-2D" name="method-i-2D" class="permalink">Link</a>
639
+ </div>
640
+
641
+
642
+ <div class="description">
643
+ <p>Performs subtraction. Returns a new <a href="Temperature.html"><code>Temperature</code></a>.</p>
644
+
645
+ <pre><code>Temperature[20, :celsius] - Temperature[10, :celsius]
646
+ # =&gt; 10 °C
647
+ </code></pre>
648
+
649
+ <p>If the second temperature has a different scale, the first temperature is automatically converted to that scale before <code>degrees</code> subtraction.</p>
650
+
651
+ <pre><code>Temperature[283.15, :kelvin] + Temperature[10, :celsius]
652
+ # =&gt; 10 °C
653
+ </code></pre>
654
+
655
+ <p>Returned temperature will have the same scale as the second temperature.</p>
656
+
657
+ <p>It is possible to subtract numerics.</p>
658
+
659
+ <pre><code>Temperature[20, :celsius] - 10
660
+ # =&gt; 10 °C
661
+ </code></pre>
662
+
663
+ <p>In such cases, returned temperature will have the same scale as the first temperature.</p>
664
+
665
+ <p>Also <a href="https://ruby-doc.org/core/Numeric.html#method-i-coerce">Ruby coersion mechanism</a> is supported.</p>
666
+
667
+ <pre><code>10 - Temperature[20, :celsius]
668
+ # =&gt; -10 °C
669
+ </code></pre>
670
+ </div>
671
+
672
+
673
+
674
+
675
+
676
+
677
+
678
+
679
+ <div class="sourcecode">
680
+
681
+ <p class="source-link">
682
+ Source:
683
+ <a href="javascript:toggleSource('method-i-2D_source')" id="l_method-i-2D_source">show</a>
684
+
685
+ </p>
686
+ <div id="method-i-2D_source" class="dyn-source">
687
+ <pre><span class="ruby-comment"># File lib/basic_temperature.rb, line 537</span>
688
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">-</span>(<span class="ruby-identifier">other</span>)
689
+ <span class="ruby-keyword">self</span> <span class="ruby-operator">+</span> <span class="ruby-operator">-</span><span class="ruby-identifier">other</span>
690
+ <span class="ruby-keyword">end</span></pre>
691
+ </div>
692
+ </div>
693
+
694
+ </div>
695
+
696
+ <div class="method">
697
+ <div class="title method-title" id="method-i-2D-40">
698
+
699
+ <b>-@</b>()
700
+
701
+ <a href="../classes/BasicTemperature.html#method-i-2D-40" name="method-i-2D-40" class="permalink">Link</a>
702
+ </div>
703
+
704
+
705
+ <div class="description">
706
+ <p>Returns a new <a href="Temperature.html"><code>Temperature</code></a> with negated <code>degrees</code>.</p>
707
+
708
+ <pre><code>-Temperature[20, :celsius]
709
+ # =&gt; -20 °C
710
+ </code></pre>
711
+ </div>
712
+
713
+
714
+
715
+
716
+
717
+
718
+
719
+
720
+ <div class="sourcecode">
721
+
722
+ <p class="source-link">
723
+ Source:
724
+ <a href="javascript:toggleSource('method-i-2D-40_source')" id="l_method-i-2D-40_source">show</a>
725
+
726
+ </p>
727
+ <div id="method-i-2D-40_source" class="dyn-source">
728
+ <pre><span class="ruby-comment"># File lib/basic_temperature.rb, line 547</span>
729
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">-@</span>
730
+ <span class="ruby-constant">BasicTemperature</span>.<span class="ruby-identifier">new</span>(<span class="ruby-operator">-</span><span class="ruby-keyword">self</span>.<span class="ruby-identifier">degrees</span>, <span class="ruby-keyword">self</span>.<span class="ruby-identifier">scale</span>)
731
+ <span class="ruby-keyword">end</span></pre>
732
+ </div>
733
+ </div>
734
+
735
+ </div>
736
+
737
+ <div class="method">
738
+ <div class="title method-title" id="method-i-3C-3D-3E">
739
+
740
+ <b>&lt;=&gt;</b>(other)
741
+
742
+ <a href="../classes/BasicTemperature.html#method-i-3C-3D-3E" name="method-i-3C-3D-3E" class="permalink">Link</a>
743
+ </div>
744
+
745
+
746
+ <div class="description">
747
+ <p>Compares temperture with <code>other</code> temperature.</p>
748
+
749
+ <p>Returns <code>0</code> if they are considered as equal.</p>
750
+
751
+ <p>Two temperatures are considered as equal when they have the same amount of <code>degrees</code>.</p>
752
+
753
+ <p>Returns <code>-1</code> if temperature is lower than <code>other</code> temperature.</p>
754
+
755
+ <p>Returns <code>1</code> if temperature is higher than <code>other</code> temperature.</p>
756
+
757
+ <p>If <code>other</code> temperature has a different scale, temperature is automatically converted to that scale before <code>degrees</code> comparison.</p>
758
+
759
+ <pre><code>Temperature[20, :celsius] &lt;=&gt; Temperature[20, :celsius]
760
+ # =&gt; 0
761
+
762
+ Temperature[20, :celsius] &lt;=&gt; Temperature[293.15, :kelvin]
763
+ # =&gt; 0
764
+ </code></pre>
765
+
766
+ <p>IMPORTANT!!!</p>
767
+
768
+ <p>This method rounds <code>degrees</code> to the nearest value with a precision of 2 decimal digits.</p>
769
+
770
+ <p>This means the following:</p>
771
+
772
+ <pre><code>Temperature[20.020, :celsius] &lt;=&gt; Temperature[20.024, :celsius]
773
+ # =&gt; 0
774
+
775
+ Temperature[20.025, :celsius] &lt;=&gt; Temperature[20.029, :celsius]
776
+ # =&gt; 0
777
+
778
+ Temperature[20.024, :celsius] &lt;=&gt; Temperature[20.029, :celsius]
779
+ # =&gt; -1
780
+ </code></pre>
781
+ </div>
782
+
783
+
784
+
785
+
786
+
787
+
788
+
789
+
790
+ <div class="sourcecode">
791
+
792
+ <p class="source-link">
793
+ Source:
794
+ <a href="javascript:toggleSource('method-i-3C-3D-3E_source')" id="l_method-i-3C-3D-3E_source">show</a>
795
+
796
+ </p>
797
+ <div id="method-i-3C-3D-3E_source" class="dyn-source">
798
+ <pre><span class="ruby-comment"># File lib/basic_temperature.rb, line 457</span>
799
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">&lt;=&gt;</span>(<span class="ruby-identifier">other</span>)
800
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">assert_temperature</span>(<span class="ruby-identifier">other</span>)
801
+
802
+ <span class="ruby-identifier">compare_degrees</span>(<span class="ruby-keyword">self</span>.<span class="ruby-identifier">to_scale</span>(<span class="ruby-identifier">other</span>.<span class="ruby-identifier">scale</span>).<span class="ruby-identifier">degrees</span>, <span class="ruby-identifier">other</span>.<span class="ruby-identifier">degrees</span>)
803
+ <span class="ruby-keyword">end</span></pre>
804
+ </div>
805
+ </div>
806
+
807
+ </div>
808
+
809
+ <div class="method">
810
+ <div class="title method-title" id="method-i-set_degrees">
811
+
812
+ <b>set_degrees</b>(degrees)
813
+
814
+ <a href="../classes/BasicTemperature.html#method-i-set_degrees" name="method-i-set_degrees" class="permalink">Link</a>
815
+ </div>
816
+
817
+
818
+ <div class="description">
819
+ <p>Returns a new <a href="Temperature.html"><code>Temperature</code></a> with updated <code>degrees</code>.</p>
820
+
821
+ <pre><code>temperature = Temperature[0, :celsius]
822
+ # =&gt; 0 °C
823
+
824
+ new_temperature = temperature.set_degrees(15)
825
+ # =&gt; 15 °C
826
+ </code></pre>
827
+ </div>
828
+
829
+
830
+
831
+
832
+
833
+
834
+
835
+
836
+ <div class="sourcecode">
837
+
838
+ <p class="source-link">
839
+ Source:
840
+ <a href="javascript:toggleSource('method-i-set_degrees_source')" id="l_method-i-set_degrees_source">show</a>
841
+
842
+ </p>
843
+ <div id="method-i-set_degrees_source" class="dyn-source">
844
+ <pre><span class="ruby-comment"># File lib/basic_temperature.rb, line 246</span>
845
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">set_degrees</span>(<span class="ruby-identifier">degrees</span>)
846
+ <span class="ruby-constant">BasicTemperature</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">degrees</span>, <span class="ruby-identifier">scale</span>)
847
+ <span class="ruby-keyword">end</span></pre>
848
+ </div>
849
+ </div>
850
+
851
+ </div>
852
+
853
+ <div class="method">
854
+ <div class="title method-title" id="method-i-set_scale">
855
+
856
+ <b>set_scale</b>(scale)
857
+
858
+ <a href="../classes/BasicTemperature.html#method-i-set_scale" name="method-i-set_scale" class="permalink">Link</a>
859
+ </div>
860
+
861
+
862
+ <div class="description">
863
+ <p>Returns a new <a href="Temperature.html"><code>Temperature</code></a> with updated <code>scale</code>.</p>
864
+
865
+ <pre><code>temperature = Temperature[0, :celsius]
866
+ # =&gt; 0 °C
867
+
868
+ new_temperature = temperature.set_scale(:kelvin)
869
+ # =&gt; 0 K
870
+ </code></pre>
871
+ </div>
872
+
873
+
874
+
875
+
876
+
877
+
878
+
879
+
880
+ <div class="sourcecode">
881
+
882
+ <p class="source-link">
883
+ Source:
884
+ <a href="javascript:toggleSource('method-i-set_scale_source')" id="l_method-i-set_scale_source">show</a>
885
+
886
+ </p>
887
+ <div id="method-i-set_scale_source" class="dyn-source">
888
+ <pre><span class="ruby-comment"># File lib/basic_temperature.rb, line 261</span>
889
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">set_scale</span>(<span class="ruby-identifier">scale</span>)
890
+ <span class="ruby-constant">BasicTemperature</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">degrees</span>, <span class="ruby-identifier">scale</span>)
891
+ <span class="ruby-keyword">end</span></pre>
892
+ </div>
893
+ </div>
894
+
895
+ </div>
896
+
897
+ <div class="method">
898
+ <div class="title method-title" id="method-i-to_celsius">
899
+
900
+ <b>to_celsius</b>()
901
+
902
+ <a href="../classes/BasicTemperature.html#method-i-to_celsius" name="method-i-to_celsius" class="permalink">Link</a>
903
+ </div>
904
+
905
+
906
+ <div class="description">
907
+ <p>Converts temperature to Celsius scale. If temperature is already in Celsius, returns current temperature object.</p>
908
+
909
+ <p>Memoizes subsequent calls.</p>
910
+
911
+ <p>Conversion formulas are taken from <a href="https://www.rapidtables.com/">RapidTables</a>:</p>
912
+ <ol><li>
913
+ <p><a href="https://www.rapidtables.com/convert/temperature/celsius-to-fahrenheit.html">Celsius to Fahrenheit</a>.</p>
914
+ </li><li>
915
+ <p><a href="https://www.rapidtables.com/convert/temperature/celsius-to-kelvin.html">Celsius to Kelvin</a>.</p>
916
+ </li><li>
917
+ <p><a href="https://www.rapidtables.com/convert/temperature/celsius-to-rankine.html">Celsius to Rankine</a>.</p>
918
+ </li></ol>
919
+
920
+ <pre><code>Temperature[0, :fahrenheit].to_celsius
921
+ # =&gt; -17.78 °C
922
+ </code></pre>
923
+ </div>
924
+
925
+
926
+
927
+
928
+
929
+
930
+
931
+
932
+ <div class="sourcecode">
933
+
934
+ <p class="source-link">
935
+ Source:
936
+ <a href="javascript:toggleSource('method-i-to_celsius_source')" id="l_method-i-to_celsius_source">show</a>
937
+
938
+ </p>
939
+ <div id="method-i-to_celsius_source" class="dyn-source">
940
+ <pre><span class="ruby-comment"># File lib/basic_temperature.rb, line 308</span>
941
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">to_celsius</span>
942
+ <span class="ruby-identifier">memoized</span>(<span class="ruby-value">:to_celsius</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">memoize</span>(<span class="ruby-value">:to_celsius</span>, <span class="ruby-operator">-&gt;</span> {
943
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">self</span> <span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">scale</span> <span class="ruby-operator">==</span> <span class="ruby-constant">CELSIUS</span>
944
+
945
+ <span class="ruby-identifier">degrees</span> =
946
+ <span class="ruby-keyword">case</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">scale</span>
947
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">FAHRENHEIT</span>
948
+ (<span class="ruby-keyword">self</span>.<span class="ruby-identifier">degrees</span> <span class="ruby-operator">-</span> <span class="ruby-value">32</span>) <span class="ruby-operator">*</span> (<span class="ruby-value">5</span> <span class="ruby-operator">/</span> <span class="ruby-value">9r</span>)
949
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">KELVIN</span>
950
+ <span class="ruby-keyword">self</span>.<span class="ruby-identifier">degrees</span> <span class="ruby-operator">-</span> <span class="ruby-value">273.15</span>
951
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">RANKINE</span>
952
+ (<span class="ruby-keyword">self</span>.<span class="ruby-identifier">degrees</span> <span class="ruby-operator">-</span> <span class="ruby-value">491.67</span>) <span class="ruby-operator">*</span> (<span class="ruby-value">5</span> <span class="ruby-operator">/</span> <span class="ruby-value">9r</span>)
953
+ <span class="ruby-keyword">end</span>
954
+
955
+ <span class="ruby-constant">BasicTemperature</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">degrees</span>, <span class="ruby-constant">CELSIUS</span>)
956
+ })
957
+ <span class="ruby-keyword">end</span></pre>
958
+ </div>
959
+ </div>
960
+
961
+ </div>
962
+
963
+ <div class="method">
964
+ <div class="title method-title" id="method-i-to_fahrenheit">
965
+
966
+ <b>to_fahrenheit</b>()
967
+
968
+ <a href="../classes/BasicTemperature.html#method-i-to_fahrenheit" name="method-i-to_fahrenheit" class="permalink">Link</a>
969
+ </div>
970
+
971
+
972
+ <div class="description">
973
+ <p>Converts temperature to Fahrenheit scale. If temperature is already in Fahrenheit, returns current temperature object.</p>
974
+
975
+ <p>Memoizes subsequent calls.</p>
976
+
977
+ <p>Conversion formulas are taken from <a href="https://www.rapidtables.com/">RapidTables</a>:</p>
978
+ <ol><li>
979
+ <p><a href="https://www.rapidtables.com/convert/temperature/fahrenheit-to-celsius.html">Fahrenheit to Celsius</a>.</p>
980
+ </li><li>
981
+ <p><a href="https://www.rapidtables.com/convert/temperature/fahrenheit-to-kelvin.html">Fahrenheit to Kelvin</a>.</p>
982
+ </li><li>
983
+ <p><a href="https://www.rapidtables.com/convert/temperature/fahrenheit-to-rankine.html">Fahrenheit to Rankine</a>.</p>
984
+ </li></ol>
985
+
986
+ <pre><code>Temperature[0, :celsius].to_fahrenheit
987
+ # =&gt; 32 °F
988
+ </code></pre>
989
+ </div>
990
+
991
+
992
+
993
+
994
+
995
+
996
+
997
+
998
+ <div class="sourcecode">
999
+
1000
+ <p class="source-link">
1001
+ Source:
1002
+ <a href="javascript:toggleSource('method-i-to_fahrenheit_source')" id="l_method-i-to_fahrenheit_source">show</a>
1003
+
1004
+ </p>
1005
+ <div id="method-i-to_fahrenheit_source" class="dyn-source">
1006
+ <pre><span class="ruby-comment"># File lib/basic_temperature.rb, line 340</span>
1007
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">to_fahrenheit</span>
1008
+ <span class="ruby-identifier">memoized</span>(<span class="ruby-value">:to_fahrenheit</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">memoize</span>(<span class="ruby-value">:to_fahrenheit</span>, <span class="ruby-operator">-&gt;</span> {
1009
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">self</span> <span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">scale</span> <span class="ruby-operator">==</span> <span class="ruby-constant">FAHRENHEIT</span>
1010
+
1011
+ <span class="ruby-identifier">degrees</span> =
1012
+ <span class="ruby-keyword">case</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">scale</span>
1013
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">CELSIUS</span>
1014
+ <span class="ruby-keyword">self</span>.<span class="ruby-identifier">degrees</span> <span class="ruby-operator">*</span> (<span class="ruby-value">9</span> <span class="ruby-operator">/</span> <span class="ruby-value">5r</span>) <span class="ruby-operator">+</span> <span class="ruby-value">32</span>
1015
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">KELVIN</span>
1016
+ <span class="ruby-keyword">self</span>.<span class="ruby-identifier">degrees</span> <span class="ruby-operator">*</span> (<span class="ruby-value">9</span> <span class="ruby-operator">/</span> <span class="ruby-value">5r</span>) <span class="ruby-operator">-</span> <span class="ruby-value">459.67</span>
1017
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">RANKINE</span>
1018
+ <span class="ruby-keyword">self</span>.<span class="ruby-identifier">degrees</span> <span class="ruby-operator">-</span> <span class="ruby-value">459.67</span>
1019
+ <span class="ruby-keyword">end</span>
1020
+
1021
+ <span class="ruby-constant">BasicTemperature</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">degrees</span>, <span class="ruby-constant">FAHRENHEIT</span>)
1022
+ })
1023
+ <span class="ruby-keyword">end</span></pre>
1024
+ </div>
1025
+ </div>
1026
+
1027
+ </div>
1028
+
1029
+ <div class="method">
1030
+ <div class="title method-title" id="method-i-to_kelvin">
1031
+
1032
+ <b>to_kelvin</b>()
1033
+
1034
+ <a href="../classes/BasicTemperature.html#method-i-to_kelvin" name="method-i-to_kelvin" class="permalink">Link</a>
1035
+ </div>
1036
+
1037
+
1038
+ <div class="description">
1039
+ <p>Converts temperature to Kelvin scale. If temperature is already in Kelvin, returns current</p>
1040
+
1041
+ <pre><code>temperature object.
1042
+ </code></pre>
1043
+
1044
+ <p>Memoizes subsequent calls.</p>
1045
+
1046
+ <p>Conversion formulas are taken from <a href="https://www.rapidtables.com/">RapidTables</a>:</p>
1047
+ <ol><li>
1048
+ <p><a href="https://www.rapidtables.com/convert/temperature/kelvin-to-celsius.html">Kelvin to Celsius</a>.</p>
1049
+ </li><li>
1050
+ <p><a href="https://www.rapidtables.com/convert/temperature/kelvin-to-fahrenheit.html">Kelvin to Fahrenheit</a>.</p>
1051
+ </li><li>
1052
+ <p><a href="https://www.rapidtables.com/convert/temperature/kelvin-to-rankine.html">Kelvin to Rankine</a>.</p>
1053
+ </li></ol>
1054
+
1055
+ <pre><code>Temperature[0, :kelvin].to_rankine
1056
+ # =&gt; 0 °R
1057
+ </code></pre>
1058
+ </div>
1059
+
1060
+
1061
+
1062
+
1063
+
1064
+
1065
+
1066
+
1067
+ <div class="sourcecode">
1068
+
1069
+ <p class="source-link">
1070
+ Source:
1071
+ <a href="javascript:toggleSource('method-i-to_kelvin_source')" id="l_method-i-to_kelvin_source">show</a>
1072
+
1073
+ </p>
1074
+ <div id="method-i-to_kelvin_source" class="dyn-source">
1075
+ <pre><span class="ruby-comment"># File lib/basic_temperature.rb, line 372</span>
1076
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">to_kelvin</span>
1077
+ <span class="ruby-identifier">memoized</span>(<span class="ruby-value">:to_kelvin</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">memoize</span>(<span class="ruby-value">:to_kelvin</span>, <span class="ruby-operator">-&gt;</span> {
1078
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">self</span> <span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">scale</span> <span class="ruby-operator">==</span> <span class="ruby-constant">KELVIN</span>
1079
+
1080
+ <span class="ruby-identifier">degrees</span> =
1081
+ <span class="ruby-keyword">case</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">scale</span>
1082
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">CELSIUS</span>
1083
+ <span class="ruby-keyword">self</span>.<span class="ruby-identifier">degrees</span> <span class="ruby-operator">+</span> <span class="ruby-value">273.15</span>
1084
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">FAHRENHEIT</span>
1085
+ (<span class="ruby-keyword">self</span>.<span class="ruby-identifier">degrees</span> <span class="ruby-operator">+</span> <span class="ruby-value">459.67</span>) <span class="ruby-operator">*</span> (<span class="ruby-value">5</span> <span class="ruby-operator">/</span> <span class="ruby-value">9r</span>)
1086
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">RANKINE</span>
1087
+ <span class="ruby-keyword">self</span>.<span class="ruby-identifier">degrees</span> <span class="ruby-operator">*</span> (<span class="ruby-value">5</span> <span class="ruby-operator">/</span> <span class="ruby-value">9r</span>)
1088
+ <span class="ruby-keyword">end</span>
1089
+
1090
+ <span class="ruby-constant">BasicTemperature</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">degrees</span>, <span class="ruby-constant">KELVIN</span>)
1091
+ })
1092
+ <span class="ruby-keyword">end</span></pre>
1093
+ </div>
1094
+ </div>
1095
+
1096
+ </div>
1097
+
1098
+ <div class="method">
1099
+ <div class="title method-title" id="method-i-to_rankine">
1100
+
1101
+ <b>to_rankine</b>()
1102
+
1103
+ <a href="../classes/BasicTemperature.html#method-i-to_rankine" name="method-i-to_rankine" class="permalink">Link</a>
1104
+ </div>
1105
+
1106
+
1107
+ <div class="description">
1108
+ <p>Converts temperature to Rankine scale. If temperature is already in Rankine, returns current temperature object.</p>
1109
+
1110
+ <p>Memoizes subsequent calls.</p>
1111
+
1112
+ <p>Conversion formulas are taken from <a href="https://www.rapidtables.com/">RapidTables</a>:</p>
1113
+ <ol><li>
1114
+ <p><a href="https://www.rapidtables.com/convert/temperature/rankine-to-celsius.html">Rankine to Celsius</a>.</p>
1115
+ </li><li>
1116
+ <p><a href="https://www.rapidtables.com/convert/temperature/rankine-to-fahrenheit.html">Rankine to Fahrenheit</a>.</p>
1117
+ </li><li>
1118
+ <p><a href="https://www.rapidtables.com/convert/temperature/rankine-to-kelvin.html">Rankine to Kelvin</a>.</p>
1119
+ </li></ol>
1120
+
1121
+ <pre><code>Temperature[0, :rankine].to_kelvin
1122
+ # =&gt; 0 K
1123
+ </code></pre>
1124
+ </div>
1125
+
1126
+
1127
+
1128
+
1129
+
1130
+
1131
+
1132
+
1133
+ <div class="sourcecode">
1134
+
1135
+ <p class="source-link">
1136
+ Source:
1137
+ <a href="javascript:toggleSource('method-i-to_rankine_source')" id="l_method-i-to_rankine_source">show</a>
1138
+
1139
+ </p>
1140
+ <div id="method-i-to_rankine_source" class="dyn-source">
1141
+ <pre><span class="ruby-comment"># File lib/basic_temperature.rb, line 404</span>
1142
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">to_rankine</span>
1143
+ <span class="ruby-identifier">memoized</span>(<span class="ruby-value">:to_rankine</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">memoize</span>(<span class="ruby-value">:to_rankine</span>, <span class="ruby-operator">-&gt;</span> {
1144
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">self</span> <span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">scale</span> <span class="ruby-operator">==</span> <span class="ruby-constant">RANKINE</span>
1145
+
1146
+ <span class="ruby-identifier">degrees</span> =
1147
+ <span class="ruby-keyword">case</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">scale</span>
1148
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">CELSIUS</span>
1149
+ (<span class="ruby-keyword">self</span>.<span class="ruby-identifier">degrees</span> <span class="ruby-operator">+</span> <span class="ruby-value">273.15</span>) <span class="ruby-operator">*</span> (<span class="ruby-value">9</span> <span class="ruby-operator">/</span> <span class="ruby-value">5r</span>)
1150
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">FAHRENHEIT</span>
1151
+ <span class="ruby-keyword">self</span>.<span class="ruby-identifier">degrees</span> <span class="ruby-operator">+</span> <span class="ruby-value">459.67</span>
1152
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">KELVIN</span>
1153
+ <span class="ruby-keyword">self</span>.<span class="ruby-identifier">degrees</span> <span class="ruby-operator">*</span> (<span class="ruby-value">9</span> <span class="ruby-operator">/</span> <span class="ruby-value">5r</span>)
1154
+ <span class="ruby-keyword">end</span>
1155
+
1156
+ <span class="ruby-constant">BasicTemperature</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">degrees</span>, <span class="ruby-constant">RANKINE</span>)
1157
+ })
1158
+ <span class="ruby-keyword">end</span></pre>
1159
+ </div>
1160
+ </div>
1161
+
1162
+ </div>
1163
+
1164
+ <div class="method">
1165
+ <div class="title method-title" id="method-i-to_scale">
1166
+
1167
+ <b>to_scale</b>(scale)
1168
+
1169
+ <a href="../classes/BasicTemperature.html#method-i-to_scale" name="method-i-to_scale" class="permalink">Link</a>
1170
+ </div>
1171
+
1172
+
1173
+ <div class="description">
1174
+ <p>Converts temperature to specific <code>scale</code>. If temperature is already in desired <code>scale</code>, returns current temperature object.</p>
1175
+
1176
+ <p>Raises <a href="BasicTemperature/InvalidScaleError.html">InvalidScaleError</a> when <code>scale</code> can not be casted to any possible scale value (see <a href="BasicTemperature.html#SCALES">SCALES</a>).</p>
1177
+
1178
+ <pre><code>Temperature[60, :fahrenheit].to_scale(:celsius)
1179
+ # =&gt; 15.56 °C
1180
+ </code></pre>
1181
+ </div>
1182
+
1183
+
1184
+
1185
+
1186
+
1187
+
1188
+
1189
+
1190
+ <div class="sourcecode">
1191
+
1192
+ <p class="source-link">
1193
+ Source:
1194
+ <a href="javascript:toggleSource('method-i-to_scale_source')" id="l_method-i-to_scale_source">show</a>
1195
+
1196
+ </p>
1197
+ <div id="method-i-to_scale_source" class="dyn-source">
1198
+ <pre><span class="ruby-comment"># File lib/basic_temperature.rb, line 277</span>
1199
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">to_scale</span>(<span class="ruby-identifier">scale</span>)
1200
+ <span class="ruby-identifier">casted_scale</span> = <span class="ruby-identifier">cast_scale</span>(<span class="ruby-identifier">scale</span>)
1201
+
1202
+ <span class="ruby-identifier">assert_valid_scale!</span>(<span class="ruby-identifier">casted_scale</span>)
1203
+
1204
+ <span class="ruby-keyword">case</span> <span class="ruby-identifier">casted_scale</span>
1205
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">CELSIUS</span>
1206
+ <span class="ruby-identifier">to_celsius</span>
1207
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">FAHRENHEIT</span>
1208
+ <span class="ruby-identifier">to_fahrenheit</span>
1209
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">KELVIN</span>
1210
+ <span class="ruby-identifier">to_kelvin</span>
1211
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">RANKINE</span>
1212
+ <span class="ruby-identifier">to_rankine</span>
1213
+ <span class="ruby-keyword">end</span>
1214
+ <span class="ruby-keyword">end</span></pre>
1215
+ </div>
1216
+ </div>
1217
+
1218
+ </div>
1219
+
1220
+
1221
+
1222
+
1223
+ </div>
1224
+
1225
+ </div>
1226
+ </body>
1227
+ </html>