basic_temperature 0.1.0 → 0.2.1
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/.gitignore +3 -0
- data/.rubocop.yml +13 -0
- data/.travis.yml +14 -1
- data/CHANGELOG.md +13 -0
- data/Gemfile +3 -4
- data/Gemfile.lock +21 -1
- data/Rakefile +5 -3
- data/basic_temperature.gemspec +27 -14
- data/lib/basic_temperature.rb +31 -19
- data/lib/basic_temperature/version.rb +4 -2
- metadata +61 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b20510122a2cac35b771c18843e418c0441e926b421f0f10ae316385af7529d
|
4
|
+
data.tar.gz: 697c43df7e678d701d1052fd872a3cf0afaffd5eeec666d9ae90927f9f693e0d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: faf2b656ce8787e1a891dd2784e825b5ac2d42238915ad1f4636bce69fe92cddfb5b7c51fe89aa7a0dbe348606dbf6796efc435f331194efa78e6213f9927717
|
7
|
+
data.tar.gz: f813145375bd5823ad63fb3e11aed3fbf3a6bbb9e3c6a9eb600ec7b6264f0c63c98b3d4a23b02b53878ebeaa80237a2b11d14de194c5d7acade689dbf3c07e0a
|
data/.gitignore
CHANGED
data/.rubocop.yml
ADDED
data/.travis.yml
CHANGED
@@ -1,6 +1,19 @@
|
|
1
1
|
---
|
2
2
|
language: ruby
|
3
|
+
|
3
4
|
cache: bundler
|
5
|
+
|
6
|
+
before_install:
|
7
|
+
- yes | gem update --system --force
|
8
|
+
- gem install bundler -v 2.1.2
|
9
|
+
|
4
10
|
rvm:
|
11
|
+
- 2.3.0
|
12
|
+
- 2.4.0
|
13
|
+
- 2.5.0
|
14
|
+
- 2.6.0
|
5
15
|
- 2.7.0
|
6
|
-
|
16
|
+
|
17
|
+
script:
|
18
|
+
- bundle exec rubocop
|
19
|
+
- bundle exec rspec
|
data/CHANGELOG.md
CHANGED
@@ -1,2 +1,15 @@
|
|
1
|
+
## 0.2.1
|
2
|
+
### Features:
|
3
|
+
- Spaceship operator <=>
|
4
|
+
|
5
|
+
### Tech improvements:
|
6
|
+
- [byebug](https://github.com/deivid-rodriguez/byebug) as dev dependency
|
7
|
+
- [rspec](https://rspec.info/) as dev dependency
|
8
|
+
- [rubocop](https://github.com/rubocop-hq/rubocop) as dev dependency
|
9
|
+
- [Travis CI](https://travis-ci.com/) setup
|
10
|
+
|
11
|
+
## 0.2.0
|
12
|
+
- 'Accidentally' yanked
|
13
|
+
|
1
14
|
## 0.1.0
|
2
15
|
- Initial Release.
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,13 +1,21 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
basic_temperature (0.1
|
4
|
+
basic_temperature (0.2.1)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
+
ast (2.4.0)
|
10
|
+
byebug (10.0.2)
|
9
11
|
diff-lcs (1.3)
|
12
|
+
jaro_winkler (1.5.4)
|
13
|
+
parallel (1.19.1)
|
14
|
+
parser (2.7.0.3)
|
15
|
+
ast (~> 2.4.0)
|
16
|
+
rainbow (3.0.0)
|
10
17
|
rake (12.3.3)
|
18
|
+
rexml (3.2.4)
|
11
19
|
rspec (3.9.0)
|
12
20
|
rspec-core (~> 3.9.0)
|
13
21
|
rspec-expectations (~> 3.9.0)
|
@@ -21,14 +29,26 @@ GEM
|
|
21
29
|
diff-lcs (>= 1.2.0, < 2.0)
|
22
30
|
rspec-support (~> 3.9.0)
|
23
31
|
rspec-support (3.9.2)
|
32
|
+
rubocop (0.80.0)
|
33
|
+
jaro_winkler (~> 1.5.1)
|
34
|
+
parallel (~> 1.10)
|
35
|
+
parser (>= 2.7.0.1)
|
36
|
+
rainbow (>= 2.2.2, < 4.0)
|
37
|
+
rexml
|
38
|
+
ruby-progressbar (~> 1.7)
|
39
|
+
unicode-display_width (>= 1.4.0, < 1.7)
|
40
|
+
ruby-progressbar (1.10.1)
|
41
|
+
unicode-display_width (1.6.1)
|
24
42
|
|
25
43
|
PLATFORMS
|
26
44
|
ruby
|
27
45
|
|
28
46
|
DEPENDENCIES
|
29
47
|
basic_temperature!
|
48
|
+
byebug (~> 10.0)
|
30
49
|
rake (~> 12.0)
|
31
50
|
rspec (~> 3.0)
|
51
|
+
rubocop (~> 0.80.0)
|
32
52
|
|
33
53
|
BUNDLED WITH
|
34
54
|
2.1.2
|
data/Rakefile
CHANGED
data/basic_temperature.gemspec
CHANGED
@@ -1,26 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'lib/basic_temperature/version'
|
2
4
|
|
3
5
|
Gem::Specification.new do |spec|
|
4
|
-
spec.name
|
5
|
-
spec.version
|
6
|
-
|
7
|
-
spec.
|
6
|
+
spec.name = 'basic_temperature'
|
7
|
+
spec.version = BasicTemperature::VERSION
|
8
|
+
|
9
|
+
spec.authors = ['Marian Kostyk']
|
10
|
+
spec.email = ['mariankostyk13895@gmail.com']
|
11
|
+
|
12
|
+
spec.summary = 'Value object for basic temperature operations.'
|
13
|
+
spec.description =
|
14
|
+
'Value object for basic temperature operations like ' \
|
15
|
+
'conversions from Celcius to Fahrenhait or Kelvin etc.'
|
8
16
|
|
9
|
-
spec.
|
10
|
-
spec.description = %q{Value object for basic temperature operations like conversions from Celcius to Fahrenhait or Kelvin etc.}
|
11
|
-
spec.homepage = "https://github.com/marian13/basic_temperature"
|
12
|
-
spec.license = "MIT"
|
13
|
-
spec.required_ruby_version = Gem::Requirement.new(">= 2.0.0")
|
17
|
+
spec.homepage = 'https://github.com/marian13/basic_temperature'
|
14
18
|
|
15
|
-
spec.
|
16
|
-
|
17
|
-
spec.
|
19
|
+
spec.license = 'MIT'
|
20
|
+
|
21
|
+
spec.required_ruby_version = Gem::Requirement.new('>= 2.3.0')
|
22
|
+
|
23
|
+
spec.metadata['homepage_uri'] = spec.homepage
|
24
|
+
spec.metadata['source_code_uri'] = spec.homepage
|
25
|
+
spec.metadata['changelog_uri'] = "#{spec.homepage}/CHANGELOG.md"
|
18
26
|
|
19
27
|
# Specify which files should be added to the gem when it is released.
|
20
28
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
21
|
-
spec.files
|
29
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
22
30
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
23
31
|
end
|
24
32
|
|
25
|
-
spec.require_paths = [
|
33
|
+
spec.require_paths = ['lib']
|
34
|
+
|
35
|
+
spec.add_development_dependency 'byebug', '~> 10.0'
|
36
|
+
spec.add_development_dependency 'rake', '~> 12.0'
|
37
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
38
|
+
spec.add_development_dependency 'rubocop', '~> 0.80.0'
|
26
39
|
end
|
data/lib/basic_temperature.rb
CHANGED
@@ -1,10 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'basic_temperature/version'
|
2
4
|
|
5
|
+
# Value Object for basic temperature operations like conversions from Celcius to Fahrenhait or Kelvin etc.
|
6
|
+
# rubocop:disable Metrics/ClassLength
|
3
7
|
class BasicTemperature
|
4
8
|
class InitializationArgumentsError < StandardError; end
|
5
9
|
class InvalidDegreesError < StandardError; end
|
6
10
|
class InvalidScaleError < StandardError; end
|
7
|
-
class
|
11
|
+
class InvalidOtherError < StandardError; end
|
8
12
|
class CoersionError < StandardError; end
|
9
13
|
|
10
14
|
SCALES =
|
@@ -13,7 +17,6 @@ class BasicTemperature
|
|
13
17
|
FAHRENHEIT = 'fahrenheit',
|
14
18
|
KELVIN = 'kelvin'
|
15
19
|
]
|
16
|
-
.map(&:freeze)
|
17
20
|
.freeze
|
18
21
|
|
19
22
|
attr_reader :degrees, :scale
|
@@ -24,18 +27,22 @@ class BasicTemperature
|
|
24
27
|
|
25
28
|
if keyword_arguments.any?
|
26
29
|
initialize_via_keywords_arguments(keyword_arguments)
|
27
|
-
|
30
|
+
else # positional_arguments.any?
|
28
31
|
initialize_via_positional_arguments(positional_arguments)
|
29
32
|
end
|
30
33
|
end
|
31
34
|
|
35
|
+
# rubocop:disable Naming/AccessorMethodName
|
32
36
|
def set_degrees(degrees)
|
33
37
|
BasicTemperature.new(degrees, scale)
|
34
38
|
end
|
39
|
+
# rubocop:enable Naming/AccessorMethodName
|
35
40
|
|
41
|
+
# rubocop:disable Naming/AccessorMethodName
|
36
42
|
def set_scale(scale)
|
37
43
|
self.to_scale(scale)
|
38
44
|
end
|
45
|
+
# rubocop:enable Naming/AccessorMethodName
|
39
46
|
|
40
47
|
def to_scale(scale)
|
41
48
|
case cast_scale(scale)
|
@@ -98,28 +105,28 @@ class BasicTemperature
|
|
98
105
|
@to_kelvin = BasicTemperature.new(degrees, KELVIN)
|
99
106
|
end
|
100
107
|
|
101
|
-
def ==(
|
102
|
-
return false unless
|
108
|
+
def ==(other)
|
109
|
+
return false unless other.instance_of?(BasicTemperature)
|
103
110
|
|
104
|
-
self.degrees ==
|
111
|
+
self.degrees == other.degrees && self.scale == other.scale
|
105
112
|
end
|
106
113
|
|
107
|
-
def +(
|
114
|
+
def +(other)
|
108
115
|
degrees, scale =
|
109
|
-
case
|
116
|
+
case other
|
110
117
|
when Numeric
|
111
|
-
[self.degrees +
|
118
|
+
[self.degrees + other, self.scale]
|
112
119
|
when BasicTemperature
|
113
|
-
[self.to_scale(
|
120
|
+
[self.to_scale(other.scale).degrees + other.degrees, other.scale]
|
114
121
|
else
|
115
|
-
|
122
|
+
raise_invalid_other_error(other)
|
116
123
|
end
|
117
124
|
|
118
125
|
BasicTemperature.new(degrees, scale)
|
119
126
|
end
|
120
127
|
|
121
|
-
def -(
|
122
|
-
self +
|
128
|
+
def -(other)
|
129
|
+
self + -other
|
123
130
|
end
|
124
131
|
|
125
132
|
def -@
|
@@ -136,6 +143,12 @@ class BasicTemperature
|
|
136
143
|
"#{degrees.to_i} #{scale.capitalize}"
|
137
144
|
end
|
138
145
|
|
146
|
+
def <=>(other)
|
147
|
+
return unless other.instance_of?(BasicTemperature)
|
148
|
+
|
149
|
+
self.to_scale(other.scale).degrees <=> other.degrees
|
150
|
+
end
|
151
|
+
|
139
152
|
private
|
140
153
|
|
141
154
|
def initialize_via_positional_arguments(positional_arguments)
|
@@ -173,9 +186,7 @@ class BasicTemperature
|
|
173
186
|
end
|
174
187
|
|
175
188
|
def assert_numeric_or_temperature!(numeric_or_temperature)
|
176
|
-
if numeric_or_temperature.is_a?(Numeric) || numeric_or_temperature.instance_of?(BasicTemperature)
|
177
|
-
return
|
178
|
-
end
|
189
|
+
return if numeric_or_temperature.is_a?(Numeric) || numeric_or_temperature.instance_of?(BasicTemperature)
|
179
190
|
|
180
191
|
raise_coersion_error(numeric_or_temperature)
|
181
192
|
end
|
@@ -199,16 +210,17 @@ class BasicTemperature
|
|
199
210
|
def raise_invalid_scale_error
|
200
211
|
message =
|
201
212
|
'scale has invalid value, ' \
|
202
|
-
"valid values are #{SCALES.map { |scale| "'#{scale}'"}.join(', ')}."
|
213
|
+
"valid values are #{SCALES.map { |scale| "'#{scale}'" }.join(', ')}."
|
203
214
|
|
204
215
|
raise InvalidScaleError, message
|
205
216
|
end
|
206
217
|
|
207
|
-
def
|
208
|
-
raise
|
218
|
+
def raise_invalid_other_error(other)
|
219
|
+
raise InvalidOtherError, "`#{other}` is neither Numeric nor Temperature."
|
209
220
|
end
|
210
221
|
|
211
222
|
def raise_coersion_error(object)
|
212
223
|
raise CoersionError, "#{object} is neither Numeric nor Temperature."
|
213
224
|
end
|
214
225
|
end
|
226
|
+
# rubocop:enable Metrics/ClassLength
|
metadata
CHANGED
@@ -1,15 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: basic_temperature
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
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-02-
|
12
|
-
dependencies:
|
11
|
+
date: 2020-02-27 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: byebug
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '10.0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '10.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '12.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '12.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rubocop
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.80.0
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.80.0
|
13
69
|
description: Value object for basic temperature operations like conversions from Celcius
|
14
70
|
to Fahrenhait or Kelvin etc.
|
15
71
|
email:
|
@@ -20,6 +76,7 @@ extra_rdoc_files: []
|
|
20
76
|
files:
|
21
77
|
- ".gitignore"
|
22
78
|
- ".rspec"
|
79
|
+
- ".rubocop.yml"
|
23
80
|
- ".travis.yml"
|
24
81
|
- CHANGELOG.md
|
25
82
|
- Gemfile
|
@@ -47,7 +104,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
47
104
|
requirements:
|
48
105
|
- - ">="
|
49
106
|
- !ruby/object:Gem::Version
|
50
|
-
version: 2.
|
107
|
+
version: 2.3.0
|
51
108
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
109
|
requirements:
|
53
110
|
- - ">="
|