m9t 0.3.4 → 0.3.5
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.
- data/.gitignore +6 -0
- data/.rspec +3 -0
- data/.travis.yml +11 -0
- data/Rakefile +0 -10
- data/lib/m9t.rb +4 -21
- data/lib/m9t/base.rb +19 -15
- data/lib/m9t/direction.rb +5 -10
- data/lib/m9t/distance.rb +8 -10
- data/lib/m9t/errors.rb +7 -0
- data/lib/m9t/i18n.rb +6 -2
- data/lib/m9t/pressure.rb +6 -11
- data/lib/m9t/speed.rb +11 -13
- data/lib/m9t/temperature.rb +12 -17
- data/lib/m9t/version.rb +1 -4
- data/m9t.gemspec +5 -12
- data/spec/spec_helper.rb +3 -9
- data/spec/unit/base_spec.rb +34 -7
- data/spec/unit/direction_spec.rb +5 -5
- data/spec/unit/distance_spec.rb +11 -11
- data/spec/unit/i18n_spec.rb +2 -2
- data/spec/unit/pressure_spec.rb +1 -1
- data/spec/unit/speed_spec.rb +6 -6
- data/spec/unit/temperature_spec.rb +44 -29
- metadata +20 -8
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Rakefile
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
#!/usr/bin/env rake
|
2
2
|
require 'bundler/gem_tasks'
|
3
|
-
require 'rcov/rcovtask' if RUBY_VERSION < '1.9'
|
4
3
|
require 'rspec/core/rake_task'
|
5
4
|
|
6
5
|
task :default => :spec
|
@@ -8,12 +7,3 @@ task :default => :spec
|
|
8
7
|
RSpec::Core::RakeTask.new do |t|
|
9
8
|
t.pattern = 'spec/**/*_spec.rb'
|
10
9
|
end
|
11
|
-
|
12
|
-
if RUBY_VERSION < '1.9'
|
13
|
-
RSpec::Core::RakeTask.new('spec:rcov') do |t|
|
14
|
-
t.pattern = 'spec/**/*_spec.rb'
|
15
|
-
t.rcov = true
|
16
|
-
t.rcov_opts = ['--exclude', 'spec/,/gems/']
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
data/lib/m9t.rb
CHANGED
@@ -22,26 +22,9 @@
|
|
22
22
|
#++
|
23
23
|
|
24
24
|
# encoding: utf-8
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
I18n.load_path += Dir.glob("#{ locales_path }/*.yml")
|
29
|
-
I18n.reload!
|
30
|
-
|
31
|
-
libs = %w( base direction distance i18n pressure speed temperature version )
|
32
|
-
libs.each do | library |
|
33
|
-
require "m9t/#{ library }"
|
34
|
-
end
|
35
|
-
|
36
|
-
module M9t
|
37
|
-
|
38
|
-
# Base class for all M9t exceptions
|
39
|
-
class M9tError < StandardError
|
40
|
-
end
|
41
|
-
|
42
|
-
# Raised when a M9t class receives an unrecogized ':units' value
|
43
|
-
class UnitError < M9tError
|
44
|
-
end
|
45
|
-
|
25
|
+
libs = %w(i18n base direction distance pressure speed temperature version)
|
26
|
+
libs.each do |library|
|
27
|
+
require "m9t/#{library}"
|
46
28
|
end
|
47
29
|
|
30
|
+
module M9t; end
|
data/lib/m9t/base.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require '
|
2
|
+
require 'm9t/errors'
|
3
|
+
require 'm9t/i18n'
|
3
4
|
|
4
5
|
module M9t
|
5
6
|
module Base
|
@@ -31,7 +32,6 @@ module M9t
|
|
31
32
|
return true if legal_conversion?(from, to)
|
32
33
|
end
|
33
34
|
return legal_constructor?(name)
|
34
|
-
super
|
35
35
|
end
|
36
36
|
|
37
37
|
private
|
@@ -50,7 +50,7 @@ module M9t
|
|
50
50
|
|
51
51
|
def define_conversion(from, to)
|
52
52
|
self.class.instance_exec do
|
53
|
-
define_method("#{
|
53
|
+
define_method("#{from}_to_#{to}") do |value|
|
54
54
|
convert(from.to_sym, to.to_sym, value)
|
55
55
|
end
|
56
56
|
end
|
@@ -64,8 +64,8 @@ module M9t
|
|
64
64
|
# from the unit and returns an instance
|
65
65
|
def define_constructor(name)
|
66
66
|
self.class.instance_exec do
|
67
|
-
define_method(
|
68
|
-
new(
|
67
|
+
define_method(name.to_sym) do | *args |
|
68
|
+
new(args[0].to_f / self::CONVERSIONS[name])
|
69
69
|
end
|
70
70
|
end
|
71
71
|
end
|
@@ -114,7 +114,7 @@ module M9t
|
|
114
114
|
attr_reader :value, :options
|
115
115
|
alias :to_f :value
|
116
116
|
|
117
|
-
def initialize(
|
117
|
+
def initialize(value)
|
118
118
|
@value = value.to_f
|
119
119
|
end
|
120
120
|
|
@@ -136,23 +136,28 @@ module M9t
|
|
136
136
|
|
137
137
|
# Returns the string representation of the measurement,
|
138
138
|
# taking into account locale, desired units and abbreviation.
|
139
|
-
def to_s(
|
140
|
-
options = self.class.options.merge(
|
141
|
-
|
142
|
-
|
143
|
-
|
139
|
+
def to_s(options = {})
|
140
|
+
options = self.class.options.merge(options)
|
141
|
+
if not self.class::CONVERSIONS.has_key?(options[:units])
|
142
|
+
units_error(options[:units])
|
143
|
+
end
|
144
|
+
value_in_units = self.send("to_#{options[:units]}")
|
145
|
+
localized_value = I18n.localize_float(
|
146
|
+
value_in_units, {format: "%0.#{options[:precision]}f"}
|
147
|
+
)
|
144
148
|
|
145
149
|
key = 'units.' + self.class.measurement_name + '.' + options[:units].to_s
|
146
150
|
options[:abbreviated] ? key += '.abbreviated' : key += '.full'
|
147
|
-
unit = I18n.t(key, {:
|
151
|
+
unit = I18n.t(key, {count: value_in_units})
|
148
152
|
|
149
|
-
"#{
|
153
|
+
"#{localized_value}%s#{unit}" % (options[:abbreviated] ? '' : ' ')
|
150
154
|
end
|
151
155
|
|
152
156
|
private
|
153
157
|
|
154
158
|
def units_error(units)
|
155
|
-
|
159
|
+
known = self.class::CONVERSIONS.keys.collect{|unit| unit.to_s}.join(', ')
|
160
|
+
raise M9t::UnitError.new("Unknown units '#{units}'. Known: #{known}")
|
156
161
|
end
|
157
162
|
|
158
163
|
def extract_to(name)
|
@@ -176,4 +181,3 @@ module M9t
|
|
176
181
|
end
|
177
182
|
end
|
178
183
|
end
|
179
|
-
|
data/lib/m9t/direction.rb
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require '
|
2
|
+
require 'm9t/base'
|
3
3
|
|
4
4
|
module M9t
|
5
|
-
|
6
5
|
# Represents a geographical direction
|
7
6
|
class Direction
|
8
|
-
DEFAULT_OPTIONS = {:
|
7
|
+
DEFAULT_OPTIONS = {units: :degrees, abbreviated: false, decimals: 5}
|
9
8
|
CONVERSIONS = {
|
10
|
-
:
|
11
|
-
:
|
9
|
+
degrees: 1.0,
|
10
|
+
compass: nil,
|
12
11
|
}
|
13
12
|
|
14
13
|
# Conversions
|
@@ -18,7 +17,6 @@ module M9t
|
|
18
17
|
include M9t::Base
|
19
18
|
|
20
19
|
class << self
|
21
|
-
|
22
20
|
# Given a value in degrees, returns the nearest (localized) compass direction
|
23
21
|
# M9t::Directions.to_compass(42) => 'NE'
|
24
22
|
def degrees_to_compass(degrees)
|
@@ -34,7 +32,7 @@ module M9t
|
|
34
32
|
# M9t::Direction.compass('NE') => #<M9t::Direction:0xb76cc750 @value=45.0, @options={:units=>:degrees, :decimals=>5, :abbreviated=>false}>
|
35
33
|
def compass(compass_direction)
|
36
34
|
sector = I18n.t(self.measurement_name + '.sectors').find_index(compass_direction)
|
37
|
-
raise "Compass direction '#{
|
35
|
+
raise "Compass direction '#{compass_direction}' not recognised" if sector.nil?
|
38
36
|
new(sector.to_f * COMPASS_SECTOR_DEGREES)
|
39
37
|
end
|
40
38
|
|
@@ -50,7 +48,6 @@ module M9t
|
|
50
48
|
degrees
|
51
49
|
end
|
52
50
|
end
|
53
|
-
|
54
51
|
end
|
55
52
|
|
56
53
|
# Handles the special case where compass directions are the desired output.
|
@@ -65,7 +62,5 @@ module M9t
|
|
65
62
|
def to_compass
|
66
63
|
self.class.degrees_to_compass(@value)
|
67
64
|
end
|
68
|
-
|
69
65
|
end
|
70
|
-
|
71
66
|
end
|
data/lib/m9t/distance.rb
CHANGED
@@ -1,23 +1,21 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require 'i18n'
|
3
2
|
require 'm9t/base'
|
4
3
|
|
5
4
|
module M9t
|
6
|
-
|
7
5
|
# Represents a distance
|
8
6
|
class Distance
|
9
|
-
DEFAULT_OPTIONS
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
:
|
14
|
-
:
|
7
|
+
DEFAULT_OPTIONS = {
|
8
|
+
units: :meters, abbreviated: false, precision: 5
|
9
|
+
}
|
10
|
+
CONVERSIONS = {
|
11
|
+
meters: 1.0,
|
12
|
+
kilometers: 1.0 / 1000.0,
|
13
|
+
feet: 1.0 / 0.3048,
|
14
|
+
miles: 1.0 / 1609.344
|
15
15
|
}
|
16
16
|
|
17
17
|
include M9t::Base
|
18
18
|
|
19
19
|
alias :to_meters :value
|
20
|
-
|
21
20
|
end
|
22
|
-
|
23
21
|
end
|
data/lib/m9t/errors.rb
ADDED
data/lib/m9t/i18n.rb
CHANGED
@@ -1,9 +1,14 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require 'i18n'
|
3
3
|
|
4
|
+
locales_path = File.expand_path(
|
5
|
+
File.join('..', '..', 'locales'), File.dirname(__FILE__)
|
6
|
+
)
|
7
|
+
I18n.load_path += Dir.glob("#{ locales_path }/*.yml")
|
8
|
+
I18n.reload!
|
9
|
+
|
4
10
|
# Monkey patch I18n
|
5
11
|
module I18n
|
6
|
-
|
7
12
|
# Handle non-English numerical separators
|
8
13
|
# with I18n.locale = :it,
|
9
14
|
# I18n.localize_float(5.23) => '5,23000'
|
@@ -22,4 +27,3 @@ module I18n
|
|
22
27
|
integers + decimal_separator + decimal
|
23
28
|
end
|
24
29
|
end
|
25
|
-
|
data/lib/m9t/pressure.rb
CHANGED
@@ -1,23 +1,18 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require 'i18n'
|
3
2
|
require 'm9t/base'
|
4
3
|
|
5
4
|
module M9t
|
6
|
-
|
7
5
|
# Represents atmospheric (or other) pressure
|
8
6
|
class Pressure
|
9
|
-
DEFAULT_OPTIONS = {:
|
7
|
+
DEFAULT_OPTIONS = {units: :bar, abbreviated: false, precision: 5}
|
10
8
|
CONVERSIONS = {
|
11
|
-
:
|
12
|
-
:
|
13
|
-
:
|
14
|
-
:
|
15
|
-
:
|
9
|
+
bar: 1.0,
|
10
|
+
pascals: 1.0 / 0.00001,
|
11
|
+
hectopascals: 1.0 / 0.001,
|
12
|
+
kilopascals: 1.0 / 0.01,
|
13
|
+
inches_of_mercury: 1.0 / (3386.389 * 0.00001)
|
16
14
|
}
|
17
15
|
|
18
16
|
include M9t::Base
|
19
|
-
|
20
17
|
end
|
21
|
-
|
22
18
|
end
|
23
|
-
|
data/lib/m9t/speed.rb
CHANGED
@@ -1,28 +1,26 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require '
|
2
|
+
require 'm9t/base'
|
3
3
|
require 'm9t/distance'
|
4
4
|
|
5
5
|
module M9t
|
6
|
-
|
7
6
|
# Represents a speed
|
8
7
|
class Speed
|
9
|
-
DEFAULT_OPTIONS = {
|
8
|
+
DEFAULT_OPTIONS = {
|
9
|
+
units: :meters_per_second, abbreviated: false, precision: 5
|
10
|
+
}
|
10
11
|
SECONDS_PER_HOUR = 60.0 * 60
|
11
|
-
KMH
|
12
|
-
MPH
|
13
|
-
KNOTS
|
12
|
+
KMH = M9t::Distance::CONVERSIONS[:kilometers] * SECONDS_PER_HOUR
|
13
|
+
MPH = M9t::Distance::CONVERSIONS[:miles] * SECONDS_PER_HOUR
|
14
|
+
KNOTS = KMH / 1.852
|
14
15
|
CONVERSIONS = {
|
15
|
-
:
|
16
|
-
:
|
17
|
-
:
|
18
|
-
:
|
16
|
+
meters_per_second: 1.0,
|
17
|
+
kilometers_per_hour: KMH,
|
18
|
+
miles_per_hour: MPH,
|
19
|
+
knots: KNOTS
|
19
20
|
}
|
20
21
|
|
21
22
|
include M9t::Base
|
22
23
|
|
23
24
|
alias :to_meters_per_second :value
|
24
|
-
|
25
25
|
end
|
26
|
-
|
27
26
|
end
|
28
|
-
|
data/lib/m9t/temperature.rb
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require 'i18n'
|
3
2
|
require 'm9t/base'
|
4
3
|
|
5
4
|
module M9t
|
6
|
-
|
7
5
|
# Represents a temperature
|
8
6
|
# Using degrees (celcius), not kelvin, as default unit
|
9
7
|
class Temperature
|
10
|
-
DEFAULT_OPTIONS
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
:
|
8
|
+
DEFAULT_OPTIONS = {
|
9
|
+
units: :degrees, abbreviated: false, precision: 5
|
10
|
+
}
|
11
|
+
CONVERSIONS = {
|
12
|
+
degrees: 1.0,
|
13
|
+
kelvin: nil,
|
14
|
+
fahrenheit: nil
|
15
15
|
}
|
16
16
|
|
17
17
|
# Conversions
|
@@ -20,14 +20,13 @@ module M9t
|
|
20
20
|
include M9t::Base
|
21
21
|
|
22
22
|
class << self
|
23
|
-
|
24
23
|
# Accepts a value in kelvin and returns the equivalent M9t::Temperature
|
25
|
-
def kelvin(
|
26
|
-
new(
|
24
|
+
def kelvin(kelvin)
|
25
|
+
new(kelvin.to_f + ABSOLUTE_ZERO)
|
27
26
|
end
|
28
27
|
|
29
|
-
def fahrenheit(
|
30
|
-
new(
|
28
|
+
def fahrenheit(fahrenheit)
|
29
|
+
new(fahrenheit_to_degrees(fahrenheit))
|
31
30
|
end
|
32
31
|
|
33
32
|
# Converts degrees to kelvin
|
@@ -47,9 +46,8 @@ module M9t
|
|
47
46
|
|
48
47
|
# Converts Fahrenheit to degrees
|
49
48
|
def fahrenheit_to_degrees(fahrenheit)
|
50
|
-
fahrenheit.to_f - 32 * 5.0 / 9.0
|
49
|
+
(fahrenheit.to_f - 32) * 5.0 / 9.0
|
51
50
|
end
|
52
|
-
|
53
51
|
end
|
54
52
|
|
55
53
|
alias :to_degrees :value
|
@@ -62,8 +60,5 @@ module M9t
|
|
62
60
|
def to_fahrenheit
|
63
61
|
self.class.to_fahrenheit(@value)
|
64
62
|
end
|
65
|
-
|
66
63
|
end
|
67
|
-
|
68
64
|
end
|
69
|
-
|
data/lib/m9t/version.rb
CHANGED
data/m9t.gemspec
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
|
2
|
+
$LOAD_PATH.unshift(File.expand_path('../lib', __FILE__))
|
3
3
|
require 'm9t/version'
|
4
4
|
|
5
5
|
gemspec = Gem::Specification.new do |s|
|
@@ -14,8 +14,8 @@ gemspec = Gem::Specification.new do |s|
|
|
14
14
|
s.author = 'Joe Yates'
|
15
15
|
s.email = 'joe.g.yates@gmail.com'
|
16
16
|
|
17
|
-
s.files = `git ls-files`.lines.map(
|
18
|
-
s.test_files = `git ls-files`.lines.map(
|
17
|
+
s.files = `git ls-files`.lines.map(&:chomp!)
|
18
|
+
s.test_files = `git ls-files spec`.lines.map(&:chomp!)
|
19
19
|
s.require_paths = ['lib']
|
20
20
|
|
21
21
|
s.rubyforge_project = 'nowarning'
|
@@ -23,13 +23,6 @@ gemspec = Gem::Specification.new do |s|
|
|
23
23
|
s.add_dependency 'rake'
|
24
24
|
s.add_dependency 'i18n', '>= 0.3.5'
|
25
25
|
|
26
|
-
s.add_development_dependency 'rspec'
|
27
|
-
if
|
28
|
-
if RUBY_PLATFORM != 'java'
|
29
|
-
s.add_development_dependency 'rcov'
|
30
|
-
end
|
31
|
-
else
|
32
|
-
s.add_development_dependency 'simplecov'
|
33
|
-
end
|
26
|
+
s.add_development_dependency 'rspec', '>= 3.0.0'
|
27
|
+
s.add_development_dependency 'simplecov' if RUBY_PLATFORM != 'java'
|
34
28
|
end
|
35
|
-
|
data/spec/spec_helper.rb
CHANGED
@@ -1,23 +1,17 @@
|
|
1
|
-
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
2
1
|
require 'rspec'
|
3
|
-
require 'rspec/autorun'
|
4
2
|
|
5
|
-
if
|
3
|
+
if RUBY_PLATFORM != 'java'
|
6
4
|
require 'simplecov'
|
7
|
-
|
8
|
-
|
9
|
-
add_filter '/spec/'
|
10
|
-
end
|
5
|
+
SimpleCov.start do
|
6
|
+
add_filter '/spec/'
|
11
7
|
end
|
12
8
|
end
|
13
9
|
|
14
10
|
require 'm9t'
|
15
11
|
|
16
12
|
RSpec.configure do |config|
|
17
|
-
config.treat_symbols_as_metadata_keys_with_true_values = true
|
18
13
|
config.run_all_when_everything_filtered = true
|
19
14
|
config.filter_run :focus
|
20
15
|
|
21
16
|
config.order = 'random'
|
22
17
|
end
|
23
|
-
|
data/spec/unit/base_spec.rb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require '
|
2
|
+
require 'm9t/base'
|
3
3
|
|
4
4
|
class SomeMeasurement
|
5
5
|
DEFAULT_OPTIONS = {
|
6
|
-
:
|
7
|
-
:
|
8
|
-
:
|
6
|
+
units: :foos,
|
7
|
+
abbreviated: false,
|
8
|
+
decimals: 1
|
9
9
|
}
|
10
10
|
CONVERSIONS = {
|
11
|
-
:
|
12
|
-
:
|
11
|
+
foos: 1.0,
|
12
|
+
bars: 1 / 42.0
|
13
13
|
}
|
14
14
|
|
15
15
|
include M9t::Base
|
@@ -18,6 +18,16 @@ end
|
|
18
18
|
class SomeDerivedMeasurement < SomeMeasurement; end
|
19
19
|
|
20
20
|
describe M9t::Base do
|
21
|
+
describe '.respond_to?' do
|
22
|
+
it 'is true for conversion between known units' do
|
23
|
+
expect(SomeMeasurement.respond_to?(:foos_to_bars)).to be_truthy
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'is false for unknown units' do
|
27
|
+
expect(SomeMeasurement.respond_to?(:bazs_to_bars)).to be_falsey
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
21
31
|
describe '.method_missing' do
|
22
32
|
it 'handles conversion between known units' do
|
23
33
|
expect(SomeMeasurement.foos_to_bars(3.0)).to be_a(Float)
|
@@ -30,6 +40,24 @@ describe M9t::Base do
|
|
30
40
|
end
|
31
41
|
end
|
32
42
|
|
43
|
+
describe '#respond_to?' do
|
44
|
+
subject { SomeMeasurement.new(3.0) }
|
45
|
+
|
46
|
+
it 'is true for conversion to known units' do
|
47
|
+
expect(subject.respond_to?(:to_bars)).to be_truthy
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'is false for unknown units' do
|
51
|
+
expect(subject.respond_to?(:to_bazs)).to be_falsey
|
52
|
+
end
|
53
|
+
|
54
|
+
context 'for unrecognized calls' do
|
55
|
+
it 'calls super' do
|
56
|
+
expect(subject.respond_to?(:ciao)).to be_falsey
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
33
61
|
describe '#method_missing' do
|
34
62
|
subject { SomeMeasurement.new(3.0) }
|
35
63
|
|
@@ -50,4 +78,3 @@ describe M9t::Base do
|
|
50
78
|
end
|
51
79
|
end
|
52
80
|
end
|
53
|
-
|
data/spec/unit/direction_spec.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require '
|
2
|
+
require 'm9t/direction'
|
3
3
|
|
4
4
|
describe M9t::Direction do
|
5
5
|
before do
|
@@ -19,7 +19,7 @@ describe M9t::Direction do
|
|
19
19
|
|
20
20
|
context 'abbreviated' do
|
21
21
|
it 'is false' do
|
22
|
-
expect(M9t::Direction.options[:abbreviated]).to
|
22
|
+
expect(M9t::Direction.options[:abbreviated]).to be_falsey
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
@@ -156,7 +156,7 @@ describe M9t::Direction do
|
|
156
156
|
subject { M9t::Direction.new(135) }
|
157
157
|
|
158
158
|
it 'uses the symbol' do
|
159
|
-
expect(subject.to_s(:
|
159
|
+
expect(subject.to_s(abbreviated: true)).to eq('135°')
|
160
160
|
end
|
161
161
|
end
|
162
162
|
|
@@ -164,12 +164,12 @@ describe M9t::Direction do
|
|
164
164
|
subject { M9t::Direction.new(225) }
|
165
165
|
|
166
166
|
it 'works' do
|
167
|
-
expect(subject.to_s(:
|
167
|
+
expect(subject.to_s(units: :compass)).to eq('SW')
|
168
168
|
end
|
169
169
|
|
170
170
|
it 'translates' do
|
171
171
|
I18n.locale = :it
|
172
|
-
expect(subject.to_s(:
|
172
|
+
expect(subject.to_s(units: :compass)).to eq('SO')
|
173
173
|
end
|
174
174
|
end
|
175
175
|
end
|
data/spec/unit/distance_spec.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require '
|
2
|
+
require 'm9t/distance'
|
3
3
|
|
4
4
|
describe M9t::Distance do
|
5
5
|
context 'class methods' do
|
@@ -13,7 +13,7 @@ describe M9t::Distance do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
it 'not abbreviated' do
|
16
|
-
expect(M9t::Distance.options[:abbreviated]).to
|
16
|
+
expect(M9t::Distance.options[:abbreviated]).to be_falsey
|
17
17
|
end
|
18
18
|
|
19
19
|
it 'units: meters' do
|
@@ -76,32 +76,32 @@ describe M9t::Distance do
|
|
76
76
|
|
77
77
|
it 'handles singluar' do
|
78
78
|
distance = M9t::Distance.new(1)
|
79
|
-
expect(distance.to_s(:
|
79
|
+
expect(distance.to_s(precision: 0)).to eq('1 meter')
|
80
80
|
end
|
81
81
|
|
82
82
|
it 'handles plural' do
|
83
83
|
distance = M9t::Distance.new(10)
|
84
|
-
expect(distance.to_s(:
|
84
|
+
expect(distance.to_s(precision: 0)).to eq('10 meters')
|
85
85
|
end
|
86
86
|
|
87
87
|
it 'handles abbreviation' do
|
88
88
|
distance = M9t::Distance.new(0.3)
|
89
|
-
expect(distance.to_s(:
|
89
|
+
expect(distance.to_s(abbreviated: true)).to eq('0.30000m')
|
90
90
|
end
|
91
91
|
|
92
92
|
specify 'units: kilometers' do
|
93
93
|
distance = M9t::Distance.new( 156003 )
|
94
|
-
expect(distance.to_s(:
|
94
|
+
expect(distance.to_s(precision: 1, units: :kilometers)).to eq('156.0 kilometers')
|
95
95
|
end
|
96
96
|
|
97
97
|
specify 'units: miles, singular' do
|
98
98
|
marathon = M9t::Distance.miles(26.21875)
|
99
|
-
expect(marathon.to_s(:
|
99
|
+
expect(marathon.to_s(units: :miles, precision: 0)).to eq('26 miles')
|
100
100
|
end
|
101
101
|
|
102
102
|
specify 'units: miles, plural' do
|
103
103
|
ten_km = M9t::Distance.new(10000)
|
104
|
-
expect(ten_km.to_s(:
|
104
|
+
expect(ten_km.to_s(units: :miles, precision: 1)).to eq('6.2 miles')
|
105
105
|
end
|
106
106
|
|
107
107
|
context 'i18n' do
|
@@ -111,17 +111,17 @@ describe M9t::Distance do
|
|
111
111
|
|
112
112
|
specify 'precision: 0' do
|
113
113
|
distance = M9t::Distance.new(10)
|
114
|
-
expect(distance.to_s(:
|
114
|
+
expect(distance.to_s(precision: 0)).to eq('10 metri')
|
115
115
|
end
|
116
116
|
|
117
117
|
specify 'units: miles' do
|
118
118
|
marathon = M9t::Distance.miles(26.21875)
|
119
|
-
expect(marathon.to_s(:
|
119
|
+
expect(marathon.to_s(units: :miles, precision: 0)).to eq('26 miglia')
|
120
120
|
end
|
121
121
|
|
122
122
|
specify 'units: miles, precision: 1' do
|
123
123
|
ten_km = M9t::Distance.new(10000)
|
124
|
-
expect(ten_km.to_s(:
|
124
|
+
expect(ten_km.to_s(units: :miles, precision: 1)).to eq('6,2 miglia')
|
125
125
|
end
|
126
126
|
end
|
127
127
|
end
|
data/spec/unit/i18n_spec.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require '
|
2
|
+
require 'm9t/i18n'
|
3
3
|
|
4
4
|
describe I18n do
|
5
5
|
before do
|
@@ -49,7 +49,7 @@ describe I18n do
|
|
49
49
|
|
50
50
|
it 'accepts a format indicator' do
|
51
51
|
I18n.locale = :en
|
52
|
-
expect(I18n.localize_float(1.5, {:
|
52
|
+
expect(I18n.localize_float(1.5, {format: '%0.1f'})).to eq('1.5')
|
53
53
|
end
|
54
54
|
end
|
55
55
|
end
|
data/spec/unit/pressure_spec.rb
CHANGED
data/spec/unit/speed_spec.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require '
|
2
|
+
require 'm9t/speed'
|
3
3
|
|
4
4
|
describe M9t::Speed do
|
5
5
|
context 'conversion constants' do
|
@@ -12,7 +12,7 @@ describe M9t::Speed do
|
|
12
12
|
it 'gives an error for unknown units' do
|
13
13
|
speed = M9t::Speed.new(10)
|
14
14
|
expect {
|
15
|
-
speed.to_s(
|
15
|
+
speed.to_s(units: :foos)
|
16
16
|
}.to raise_error(M9t::UnitError)
|
17
17
|
end
|
18
18
|
end
|
@@ -83,21 +83,21 @@ describe M9t::Speed do
|
|
83
83
|
|
84
84
|
specify 'precision' do
|
85
85
|
I18n.locale = :en
|
86
|
-
expect(subject.to_s(:
|
86
|
+
expect(subject.to_s(precision: 0)).to eq('135 meters per second')
|
87
87
|
end
|
88
88
|
|
89
89
|
specify 'abbreviated' do
|
90
|
-
expect(subject.to_s(:
|
90
|
+
expect(subject.to_s(abbreviated: true, precision: 0)).to eq('135m/s')
|
91
91
|
end
|
92
92
|
|
93
93
|
specify 'units: knots, en' do
|
94
94
|
I18n.locale = :en
|
95
|
-
expect(subject.to_s(:
|
95
|
+
expect(subject.to_s(units: :knots, precision: 0)).to eq('262 knots')
|
96
96
|
end
|
97
97
|
|
98
98
|
specify 'units: knots, it' do
|
99
99
|
I18n.locale = :it
|
100
|
-
expect(subject.to_s(:
|
100
|
+
expect(subject.to_s(units: :knots, precision: 0)).to eq('262 nodi')
|
101
101
|
end
|
102
102
|
end
|
103
103
|
end
|
@@ -1,7 +1,12 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require '
|
2
|
+
require 'm9t/temperature'
|
3
3
|
|
4
4
|
describe M9t::Temperature do
|
5
|
+
CONVERSIONS = [
|
6
|
+
[:kelvin, 100, 373.15],
|
7
|
+
[:fahrenheit, 100, 212.0],
|
8
|
+
]
|
9
|
+
|
5
10
|
context 'constants' do
|
6
11
|
specify 'absolute zero' do
|
7
12
|
expect(M9t::Temperature::ABSOLUTE_ZERO).to be_within(0.0001).of(-273.15)
|
@@ -13,7 +18,7 @@ describe M9t::Temperature do
|
|
13
18
|
expect(M9t::Temperature.options[:units]).to eq(:degrees)
|
14
19
|
end
|
15
20
|
|
16
|
-
specify 'precision:
|
21
|
+
specify 'precision: 5' do
|
17
22
|
expect(M9t::Temperature.options[:precision]).to eq(5)
|
18
23
|
end
|
19
24
|
end
|
@@ -32,39 +37,44 @@ describe M9t::Temperature do
|
|
32
37
|
end
|
33
38
|
|
34
39
|
context 'conversion factories' do
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
specify unit do
|
40
|
-
expect(M9t::Temperature.send(unit, 0.0).value).to be_within(expected.abs / 1000.0).of(expected)
|
40
|
+
CONVERSIONS.each do |unit, degrees, other|
|
41
|
+
specify ".#{unit}" do
|
42
|
+
expect(M9t::Temperature.send(unit, other).value).
|
43
|
+
to be_within(degrees.abs / 1000.0).of(degrees)
|
41
44
|
end
|
42
45
|
end
|
43
46
|
end
|
44
47
|
|
45
48
|
context 'conversions' do
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
49
|
+
context 'from degrees' do
|
50
|
+
CONVERSIONS.each do |unit, degrees, other|
|
51
|
+
method = :"to_#{unit}"
|
52
|
+
specify method do
|
53
|
+
expect(M9t::Temperature.send(method, degrees)).to eq(other)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
context 'to degrees' do
|
59
|
+
CONVERSIONS.each do |unit, degrees, other|
|
60
|
+
method = :"#{unit}_to_degrees"
|
61
|
+
specify method do
|
62
|
+
expect(M9t::Temperature.send(method, other)).to eq(degrees)
|
63
|
+
end
|
53
64
|
end
|
54
65
|
end
|
55
66
|
end
|
56
67
|
end
|
57
68
|
|
58
69
|
context 'conversions' do
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
expect(subject.send(method)).to be_within(expected.abs / 1000.0).of(expected)
|
70
|
+
context 'from degrees' do
|
71
|
+
CONVERSIONS.each do |unit, degrees, other|
|
72
|
+
subject { M9t::Temperature.new(degrees) }
|
73
|
+
|
74
|
+
method = :"to_#{unit}"
|
75
|
+
specify method do
|
76
|
+
expect(subject.send(method)).to be_within(other.abs / 1000.0).of(other)
|
77
|
+
end
|
68
78
|
end
|
69
79
|
end
|
70
80
|
end
|
@@ -84,27 +94,32 @@ describe M9t::Temperature do
|
|
84
94
|
|
85
95
|
specify 'precision' do
|
86
96
|
I18n.locale = :en
|
87
|
-
expect(subject.to_s(:
|
97
|
+
expect(subject.to_s(precision: 0)).to eq('135 degrees')
|
88
98
|
end
|
89
99
|
|
90
100
|
specify 'abbreviated, en' do
|
91
101
|
I18n.locale = :en
|
92
|
-
expect(subject.to_s(:
|
102
|
+
expect(subject.to_s(abbreviated: true, precision: 0)).
|
103
|
+
to eq('135°C')
|
93
104
|
end
|
94
105
|
|
95
106
|
specify 'kelvin, en' do
|
96
107
|
I18n.locale = :en
|
97
|
-
expect(subject.to_s(:
|
108
|
+
expect(subject.to_s(units: :kelvin, precision: 2)).
|
109
|
+
to eq('408.15 kelvin')
|
98
110
|
end
|
99
111
|
|
100
112
|
specify 'kelvin, it' do
|
101
113
|
I18n.locale = :it
|
102
|
-
expect(subject.to_s(:
|
114
|
+
expect(subject.to_s(units: :kelvin, precision: 2)).
|
115
|
+
to eq('408,15 kelvin')
|
103
116
|
end
|
104
117
|
|
105
118
|
specify 'abbreviated, kelvin, it' do
|
106
119
|
I18n.locale = :it
|
107
|
-
expect(
|
120
|
+
expect(
|
121
|
+
subject.to_s(units: :kelvin, abbreviated: true, precision: 2)
|
122
|
+
).to eq('408,15K')
|
108
123
|
end
|
109
124
|
end
|
110
125
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: m9t
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2015-10-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -50,7 +50,7 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - ! '>='
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
53
|
+
version: 3.0.0
|
54
54
|
type: :development
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -58,7 +58,7 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - ! '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 3.0.0
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
63
|
name: simplecov
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -82,6 +82,9 @@ executables: []
|
|
82
82
|
extensions: []
|
83
83
|
extra_rdoc_files: []
|
84
84
|
files:
|
85
|
+
- .gitignore
|
86
|
+
- .rspec
|
87
|
+
- .travis.yml
|
85
88
|
- GPL-LICENSE.txt
|
86
89
|
- Gemfile
|
87
90
|
- MIT-LICENSE.txt
|
@@ -91,6 +94,7 @@ files:
|
|
91
94
|
- lib/m9t/base.rb
|
92
95
|
- lib/m9t/direction.rb
|
93
96
|
- lib/m9t/distance.rb
|
97
|
+
- lib/m9t/errors.rb
|
94
98
|
- lib/m9t/i18n.rb
|
95
99
|
- lib/m9t/pressure.rb
|
96
100
|
- lib/m9t/speed.rb
|
@@ -122,7 +126,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
122
126
|
version: '0'
|
123
127
|
segments:
|
124
128
|
- 0
|
125
|
-
hash: -
|
129
|
+
hash: -4097874954869017235
|
126
130
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
131
|
none: false
|
128
132
|
requirements:
|
@@ -131,11 +135,19 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
131
135
|
version: '0'
|
132
136
|
segments:
|
133
137
|
- 0
|
134
|
-
hash: -
|
138
|
+
hash: -4097874954869017235
|
135
139
|
requirements: []
|
136
140
|
rubyforge_project: nowarning
|
137
|
-
rubygems_version: 1.8.23
|
141
|
+
rubygems_version: 1.8.23.2
|
138
142
|
signing_key:
|
139
143
|
specification_version: 3
|
140
144
|
summary: Measurements and conversions library for Ruby
|
141
|
-
test_files:
|
145
|
+
test_files:
|
146
|
+
- spec/spec_helper.rb
|
147
|
+
- spec/unit/base_spec.rb
|
148
|
+
- spec/unit/direction_spec.rb
|
149
|
+
- spec/unit/distance_spec.rb
|
150
|
+
- spec/unit/i18n_spec.rb
|
151
|
+
- spec/unit/pressure_spec.rb
|
152
|
+
- spec/unit/speed_spec.rb
|
153
|
+
- spec/unit/temperature_spec.rb
|