basic_temperature 0.1.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
- - ">="
|