barometer 0.7.3 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (138) hide show
  1. data/.gitignore +1 -0
  2. data/.travis.yml +7 -0
  3. data/LICENSE +1 -1
  4. data/{README.rdoc → README.md} +124 -110
  5. data/Rakefile +1 -21
  6. data/TODO +8 -9
  7. data/barometer.gemspec +20 -19
  8. data/bin/barometer +36 -83
  9. data/lib/barometer.rb +13 -11
  10. data/lib/barometer/base.rb +10 -10
  11. data/lib/barometer/data.rb +1 -1
  12. data/lib/barometer/data/distance.rb +25 -25
  13. data/lib/barometer/data/geo.rb +9 -9
  14. data/lib/barometer/data/local_datetime.rb +24 -20
  15. data/lib/barometer/data/local_time.rb +13 -13
  16. data/lib/barometer/data/location.rb +6 -6
  17. data/lib/barometer/data/pressure.rb +24 -24
  18. data/lib/barometer/data/speed.rb +28 -28
  19. data/lib/barometer/data/sun.rb +7 -7
  20. data/lib/barometer/data/temperature.rb +29 -29
  21. data/lib/barometer/data/units.rb +9 -9
  22. data/lib/barometer/data/zone.rb +19 -19
  23. data/lib/barometer/formats.rb +1 -1
  24. data/lib/barometer/formats/coordinates.rb +7 -7
  25. data/lib/barometer/formats/format.rb +6 -6
  26. data/lib/barometer/formats/geocode.rb +5 -5
  27. data/lib/barometer/formats/icao.rb +6 -6
  28. data/lib/barometer/formats/postalcode.rb +3 -3
  29. data/lib/barometer/formats/short_zipcode.rb +2 -2
  30. data/lib/barometer/formats/weather_id.rb +10 -10
  31. data/lib/barometer/formats/woe_id.rb +20 -20
  32. data/lib/barometer/formats/zipcode.rb +3 -3
  33. data/lib/barometer/key_file_parser.rb +20 -0
  34. data/lib/barometer/measurements/measurement.rb +32 -32
  35. data/lib/barometer/measurements/result.rb +39 -39
  36. data/lib/barometer/measurements/result_array.rb +12 -12
  37. data/lib/barometer/query.rb +15 -15
  38. data/lib/barometer/services.rb +3 -3
  39. data/lib/barometer/translations/icao_country_codes.yml +20 -20
  40. data/lib/barometer/translations/weather_country_codes.yml +1 -1
  41. data/lib/barometer/translations/zone_codes.yml +2 -2
  42. data/lib/barometer/version.rb +3 -0
  43. data/lib/barometer/weather.rb +27 -27
  44. data/lib/barometer/weather_services/noaa.rb +314 -3
  45. data/lib/barometer/weather_services/service.rb +32 -30
  46. data/lib/barometer/weather_services/weather_bug.rb +35 -33
  47. data/lib/barometer/weather_services/wunderground.rb +31 -29
  48. data/lib/barometer/weather_services/yahoo.rb +36 -35
  49. data/lib/barometer/web_services/geocode.rb +5 -7
  50. data/lib/barometer/web_services/noaa_station_id.rb +53 -0
  51. data/lib/barometer/web_services/placemaker.rb +11 -13
  52. data/lib/barometer/web_services/timezone.rb +5 -7
  53. data/lib/barometer/web_services/weather_id.rb +4 -6
  54. data/lib/barometer/web_services/web_service.rb +4 -4
  55. data/spec/barometer_spec.rb +25 -27
  56. data/spec/cassettes/Barometer.json +1 -0
  57. data/spec/cassettes/Query.json +1 -0
  58. data/spec/cassettes/Query_Format_Coordinates.json +1 -0
  59. data/spec/cassettes/Query_Format_Geocode.json +1 -0
  60. data/spec/cassettes/Query_Format_WeatherID.json +1 -0
  61. data/spec/cassettes/Query_Format_WoeID.json +1 -0
  62. data/spec/cassettes/WeatherService.json +1 -0
  63. data/spec/cassettes/WeatherService_Noaa.json +1 -0
  64. data/spec/cassettes/WeatherService_WeatherBug.json +1 -0
  65. data/spec/cassettes/WeatherService_Wunderground.json +1 -0
  66. data/spec/cassettes/WeatherService_Yahoo.json +1 -0
  67. data/spec/cassettes/WebService_Geocode.json +1 -0
  68. data/spec/cassettes/WebService_NoaaStation.json +1 -0
  69. data/spec/data/distance_spec.rb +60 -60
  70. data/spec/data/geo_spec.rb +23 -23
  71. data/spec/data/local_datetime_spec.rb +44 -44
  72. data/spec/data/local_time_spec.rb +47 -47
  73. data/spec/data/location_spec.rb +16 -16
  74. data/spec/data/pressure_spec.rb +61 -61
  75. data/spec/data/speed_spec.rb +69 -69
  76. data/spec/data/sun_spec.rb +25 -25
  77. data/spec/data/temperature_spec.rb +68 -68
  78. data/spec/data/units_spec.rb +21 -21
  79. data/spec/data/zone_spec.rb +35 -35
  80. data/spec/formats/coordinates_spec.rb +27 -27
  81. data/spec/formats/format_spec.rb +17 -25
  82. data/spec/formats/geocode_spec.rb +23 -31
  83. data/spec/formats/icao_spec.rb +26 -32
  84. data/spec/formats/postalcode_spec.rb +22 -28
  85. data/spec/formats/short_zipcode_spec.rb +20 -26
  86. data/spec/formats/weather_id_spec.rb +57 -67
  87. data/spec/formats/woe_id_spec.rb +59 -59
  88. data/spec/formats/zipcode_spec.rb +39 -47
  89. data/spec/key_file_parser_spec.rb +28 -0
  90. data/spec/measurements/measurement_spec.rb +79 -133
  91. data/spec/measurements/result_array_spec.rb +23 -38
  92. data/spec/measurements/result_spec.rb +100 -128
  93. data/spec/query_spec.rb +83 -100
  94. data/spec/spec_helper.rb +24 -6
  95. data/spec/weather_services/noaa_spec.rb +179 -0
  96. data/spec/weather_services/services_spec.rb +28 -36
  97. data/spec/weather_services/weather_bug_spec.rb +57 -77
  98. data/spec/weather_services/wunderground_spec.rb +36 -65
  99. data/spec/weather_services/yahoo_spec.rb +38 -60
  100. data/spec/weather_spec.rb +79 -79
  101. data/spec/web_services/geocode_spec.rb +7 -11
  102. data/spec/web_services/noaa_station_id_spec.rb +33 -0
  103. data/spec/web_services/placemaker_spec.rb +7 -12
  104. data/spec/web_services/web_services_spec.rb +3 -9
  105. metadata +214 -163
  106. data/VERSION.yml +0 -5
  107. data/lib/barometer/weather_services/google.rb +0 -142
  108. data/lib/barometer/weather_services/weather_dot_com.rb +0 -279
  109. data/spec/fakeweb_helper.rb +0 -179
  110. data/spec/fixtures/formats/weather_id/90210.xml +0 -7
  111. data/spec/fixtures/formats/weather_id/from_USGA0028.xml +0 -3
  112. data/spec/fixtures/formats/weather_id/ksfo.xml +0 -1
  113. data/spec/fixtures/formats/weather_id/manhattan.xml +0 -7
  114. data/spec/fixtures/formats/weather_id/new_york.xml +0 -1
  115. data/spec/fixtures/formats/weather_id/the_hills.xml +0 -1
  116. data/spec/fixtures/geocode/40_73_v3.json +0 -497
  117. data/spec/fixtures/geocode/90210_v3.json +0 -63
  118. data/spec/fixtures/geocode/T5B4M9_v3.json +0 -68
  119. data/spec/fixtures/geocode/atlanta_v3.json +0 -58
  120. data/spec/fixtures/geocode/calgary_ab_v3.json +0 -58
  121. data/spec/fixtures/geocode/ksfo_v3.json +0 -73
  122. data/spec/fixtures/geocode/newyork_ny_v3.json +0 -58
  123. data/spec/fixtures/services/google/calgary_ab.xml +0 -1
  124. data/spec/fixtures/services/placemaker/T5B4M9.xml +0 -65
  125. data/spec/fixtures/services/placemaker/atlanta.xml +0 -65
  126. data/spec/fixtures/services/placemaker/coords.xml +0 -65
  127. data/spec/fixtures/services/placemaker/ksfo.xml +0 -65
  128. data/spec/fixtures/services/placemaker/new_york.xml +0 -65
  129. data/spec/fixtures/services/placemaker/the_hills.xml +0 -65
  130. data/spec/fixtures/services/placemaker/w615702.xml +0 -47
  131. data/spec/fixtures/services/weather_bug/90210_current.xml +0 -93
  132. data/spec/fixtures/services/weather_bug/90210_forecast.xml +0 -76
  133. data/spec/fixtures/services/weather_dot_com/90210.xml +0 -1
  134. data/spec/fixtures/services/wunderground/current_calgary_ab.xml +0 -9
  135. data/spec/fixtures/services/wunderground/forecast_calgary_ab.xml +0 -13
  136. data/spec/fixtures/services/yahoo/90210.xml +0 -3
  137. data/spec/weather_services/google_spec.rb +0 -181
  138. data/spec/weather_services/weather_dot_com_spec.rb +0 -224
@@ -1,25 +1,25 @@
1
1
  module Barometer
2
2
  #
3
3
  # A simple Location class
4
- #
4
+ #
5
5
  # Used to store location information about the station that
6
6
  # gave the measurement data for a weather query, or the location
7
7
  # that was queried
8
8
  #
9
9
  class Data::Location
10
-
10
+
11
11
  attr_accessor :id, :name, :city
12
12
  attr_accessor :state_name, :state_code, :country, :country_code, :zip_code
13
13
  attr_accessor :latitude, :longitude
14
-
14
+
15
15
  def coordinates
16
16
  [@latitude, @longitude].join(',')
17
17
  end
18
-
18
+
19
19
  def to_s
20
20
  [@name, @city, @state_name || @state_cocde,
21
21
  @country || @country_code].compact.join(', ')
22
22
  end
23
-
23
+
24
24
  end
25
- end
25
+ end
@@ -1,7 +1,7 @@
1
1
  module Barometer
2
2
  #
3
3
  # A simple Pressure class
4
- #
4
+ #
5
5
  # Think of this like the Integer class. Enhancement
6
6
  # is that you can create a number (in a certain unit), then
7
7
  # get that number back already converted to another unit.
@@ -13,40 +13,40 @@ module Barometer
13
13
  # and it seems that it is more common in this case
14
14
  #
15
15
  class Data::Pressure < Data::Units
16
-
16
+
17
17
  METRIC_UNITS = "mb"
18
18
  IMPERIAL_UNITS = "in"
19
-
19
+
20
20
  attr_accessor :millibars, :inches
21
-
21
+
22
22
  def initialize(metric=true)
23
23
  @millibars = nil
24
24
  @inches = nil
25
25
  super(metric)
26
26
  end
27
-
27
+
28
28
  def metric_default=(value); self.mb = value; end
29
29
  def imperial_default=(value); self.in = value; end
30
30
 
31
31
  #
32
32
  # CONVERTERS
33
33
  #
34
-
34
+
35
35
  def self.mb_to_in(mb)
36
36
  return nil unless mb && (mb.is_a?(Integer) || mb.is_a?(Float))
37
37
  mb.to_f * 0.02953
38
38
  end
39
-
39
+
40
40
  def self.in_to_mb(inches)
41
41
  return nil unless inches &&
42
42
  (inches.is_a?(Integer) || inches.is_a?(Float))
43
43
  inches.to_f * 33.8639
44
44
  end
45
-
45
+
46
46
  #
47
47
  # ACCESSORS
48
48
  #
49
-
49
+
50
50
  # store millibars
51
51
  #
52
52
  def mb=(mb)
@@ -54,7 +54,7 @@ module Barometer
54
54
  @millibars = mb.to_f
55
55
  self.update_inches(mb.to_f)
56
56
  end
57
-
57
+
58
58
  # store inches
59
59
  #
60
60
  def in=(inches)
@@ -62,57 +62,57 @@ module Barometer
62
62
  @inches = inches.to_f
63
63
  self.update_millibars(inches.to_f)
64
64
  end
65
-
65
+
66
66
  # return the stored millibars or convert from inches
67
67
  #
68
68
  def mb(as_integer=true)
69
69
  mb = (@millibars || Data::Pressure.in_to_mb(@inches))
70
70
  mb ? (as_integer ? mb.to_i : (100*mb).round/100.0) : nil
71
71
  end
72
-
72
+
73
73
  # return the stored inches or convert from millibars
74
74
  #
75
75
  def in(as_integer=true)
76
76
  inches = (@inches || Data::Pressure.mb_to_in(@millibars))
77
77
  inches ? (as_integer ? inches.to_i : (100*inches).round/100.0) : nil
78
78
  end
79
-
79
+
80
80
  #
81
81
  # OPERATORS
82
82
  #
83
-
83
+
84
84
  def <=>(other)
85
85
  self.mb <=> other.mb
86
86
  end
87
-
87
+
88
88
  #
89
89
  # HELPERS
90
90
  #
91
-
91
+
92
92
  # will just return the value (no units)
93
93
  #
94
94
  def to_i(metric=nil)
95
95
  (metric || (metric.nil? && self.metric?)) ? self.mb : self.in
96
96
  end
97
-
97
+
98
98
  # will just return the value (no units) with more precision
99
99
  #
100
100
  def to_f(metric=nil)
101
101
  (metric || (metric.nil? && self.metric?)) ? self.mb(false) : self.in(false)
102
102
  end
103
-
103
+
104
104
  # will return the value with units
105
105
  #
106
106
  def to_s(metric=nil)
107
107
  (metric || (metric.nil? && self.metric?)) ? "#{self.mb} #{METRIC_UNITS}" : "#{self.in} #{IMPERIAL_UNITS}"
108
108
  end
109
-
109
+
110
110
  # will just return the units (no value)
111
111
  #
112
112
  def units(metric=nil)
113
113
  (metric || (metric.nil? && self.metric?)) ? METRIC_UNITS : IMPERIAL_UNITS
114
114
  end
115
-
115
+
116
116
  # when we set inches, it is possible the a non-equivalent value of
117
117
  # millibars remains. if so, clear it.
118
118
  #
@@ -123,7 +123,7 @@ module Barometer
123
123
  # then the conversion of inches
124
124
  @millibars = nil unless difference.abs <= 1.0
125
125
  end
126
-
126
+
127
127
  # when we set millibars, it is possible the a non-equivalent value of
128
128
  # inches remains. if so, clear it.
129
129
  #
@@ -134,10 +134,10 @@ module Barometer
134
134
  # then the conversion of millibars
135
135
  @inches = nil unless difference.abs <= 1.0
136
136
  end
137
-
137
+
138
138
  def nil?
139
139
  (@millibars || @inches) ? false : true
140
140
  end
141
-
141
+
142
142
  end
143
- end
143
+ end
@@ -1,7 +1,7 @@
1
1
  module Barometer
2
2
  #
3
3
  # A simple Speed class
4
- #
4
+ #
5
5
  # Think of this like the Integer class. Enhancement
6
6
  # is that you can create a number (in a certain unit), then
7
7
  # get that number back already converted to another unit.
@@ -10,19 +10,19 @@ module Barometer
10
10
  # the direction is independent of the units
11
11
  #
12
12
  # All comparison operations will be done in metric
13
- #
13
+ #
14
14
  # NOTE: this currently only supports the scale of
15
15
  # kilometers (km) and miles (m) per hour. There is currently
16
16
  # no way to scale to smaller units (eg km -> m -> mm)
17
17
  #
18
18
  class Data::Speed < Data::Units
19
-
19
+
20
20
  METRIC_UNITS = "kph"
21
21
  IMPERIAL_UNITS = "mph"
22
-
22
+
23
23
  attr_accessor :kilometers, :miles
24
24
  attr_accessor :degrees, :direction
25
-
25
+
26
26
  def initialize(metric=true)
27
27
  @kilometers = nil
28
28
  @miles = nil
@@ -30,28 +30,28 @@ module Barometer
30
30
  @direction = nil
31
31
  super(metric)
32
32
  end
33
-
33
+
34
34
  def metric_default=(value); self.kph = value; end
35
35
  def imperial_default=(value); self.mph = value; end
36
-
36
+
37
37
  #
38
38
  # CONVERTERS
39
39
  #
40
-
40
+
41
41
  def self.km_to_m(km)
42
42
  return nil unless km && (km.is_a?(Integer) || km.is_a?(Float))
43
43
  km.to_f * 0.622
44
44
  end
45
-
45
+
46
46
  def self.m_to_km(m)
47
47
  return nil unless m && (m.is_a?(Integer) || m.is_a?(Float))
48
48
  m.to_f * 1.609
49
49
  end
50
-
50
+
51
51
  #
52
52
  # ACCESSORS
53
53
  #
54
-
54
+
55
55
  # store kilometers per hour
56
56
  #
57
57
  def kph=(kph)
@@ -59,7 +59,7 @@ module Barometer
59
59
  @kilometers = kph.to_f
60
60
  self.update_miles(kph.to_f)
61
61
  end
62
-
62
+
63
63
  # store miles per hour
64
64
  #
65
65
  def mph=(mph)
@@ -67,67 +67,67 @@ module Barometer
67
67
  @miles = mph.to_f
68
68
  self.update_kilometers(mph.to_f)
69
69
  end
70
-
70
+
71
71
  def direction=(direction)
72
72
  return if !direction || !direction.is_a?(String)
73
73
  @direction = direction
74
74
  end
75
-
75
+
76
76
  def degrees=(degrees)
77
77
  return if !degrees || !(degrees.is_a?(Integer) || degrees.is_a?(Float))
78
78
  @degrees = degrees
79
79
  end
80
-
80
+
81
81
  # return the stored kilometers or convert from miles
82
82
  #
83
83
  def kph(as_integer=true)
84
84
  km = (@kilometers || Data::Speed.m_to_km(@miles))
85
85
  km ? (as_integer ? km.to_i : (100*km).round/100.0) : nil
86
86
  end
87
-
87
+
88
88
  # return the stored miles or convert from kilometers
89
89
  #
90
90
  def mph(as_integer=true)
91
91
  m = (@miles || Data::Speed.km_to_m(@kilometers))
92
92
  m ? (as_integer ? m.to_i : (100*m).round/100.0) : nil
93
93
  end
94
-
94
+
95
95
  #
96
96
  # OPERATORS
97
97
  #
98
-
98
+
99
99
  def <=>(other)
100
100
  self.kph <=> other.kph
101
101
  end
102
-
102
+
103
103
  #
104
104
  # HELPERS
105
105
  #
106
-
106
+
107
107
  # will just return the value (no units)
108
108
  #
109
109
  def to_i(metric=nil)
110
110
  (metric || (metric.nil? && self.metric?)) ? self.kph : self.mph
111
111
  end
112
-
112
+
113
113
  # will just return the value (no units) with more precision
114
114
  #
115
115
  def to_f(metric=nil)
116
116
  (metric || (metric.nil? && self.metric?)) ? self.kph(false) : self.mph(false)
117
117
  end
118
-
118
+
119
119
  # will return the value with units
120
120
  #
121
121
  def to_s(metric=nil)
122
122
  (metric || (metric.nil? && self.metric?)) ? "#{self.kph} #{METRIC_UNITS}" : "#{self.mph} #{IMPERIAL_UNITS}"
123
123
  end
124
-
124
+
125
125
  # will just return the units (no value)
126
126
  #
127
127
  def units(metric=nil)
128
128
  (metric || (metric.nil? && self.metric?)) ? METRIC_UNITS : IMPERIAL_UNITS
129
129
  end
130
-
130
+
131
131
  # when we set miles, it is possible the a non-equivalent value of
132
132
  # kilometers remains. if so, clear it.
133
133
  #
@@ -138,7 +138,7 @@ module Barometer
138
138
  # then the conversion of miles
139
139
  @kilometers = nil unless difference.abs <= 1.0
140
140
  end
141
-
141
+
142
142
  # when we set kilometers, it is possible the a non-equivalent value of
143
143
  # miles remains. if so, clear it.
144
144
  #
@@ -149,10 +149,10 @@ module Barometer
149
149
  # then the conversion of kilometers
150
150
  @miles = nil unless difference.abs <= 1.0
151
151
  end
152
-
152
+
153
153
  def nil?
154
154
  (@kilometers || @miles) ? false : true
155
155
  end
156
-
156
+
157
157
  end
158
- end
158
+ end
@@ -1,13 +1,13 @@
1
1
  module Barometer
2
2
  #
3
3
  # A simple Sun class
4
- #
4
+ #
5
5
  # Used to store sunrise and sunset information
6
6
  #
7
7
  class Data::Sun
8
-
8
+
9
9
  attr_reader :rise, :set
10
-
10
+
11
11
  def initialize(rise=nil, set=nil)
12
12
  raise ArgumentError unless (rise.is_a?(Data::LocalTime) || rise.nil?)
13
13
  raise ArgumentError unless (set.is_a?(Data::LocalTime) || set.nil?)
@@ -18,16 +18,16 @@ module Barometer
18
18
  def nil?
19
19
  (@rise || @set) ? false : true
20
20
  end
21
-
21
+
22
22
  def after_rise?(time)
23
23
  raise ArgumentError unless time.is_a?(Data::LocalTime)
24
24
  time >= @rise
25
25
  end
26
-
26
+
27
27
  def before_set?(time)
28
28
  raise ArgumentError unless time.is_a?(Data::LocalTime)
29
29
  time <= @set
30
30
  end
31
-
31
+
32
32
  end
33
- end
33
+ end
@@ -1,7 +1,7 @@
1
1
  module Barometer
2
2
  #
3
3
  # A simple Temperature class
4
- #
4
+ #
5
5
  # Think of this like the Integer class. Enhancement
6
6
  # is that you can create a number (in a certain unit), then
7
7
  # get that number back already converted to another unit.
@@ -10,66 +10,66 @@ module Barometer
10
10
  # scale of Kelvin (K)
11
11
  #
12
12
  class Data::Temperature < Data::Units
13
-
13
+
14
14
  METRIC_UNITS = "C"
15
15
  IMPERIAL_UNITS = "F"
16
-
16
+
17
17
  attr_accessor :celsius, :fahrenheit, :kelvin
18
-
18
+
19
19
  def initialize(metric=true)
20
20
  @celsius = nil
21
21
  @fahrenheit = nil
22
22
  @kelvin = nil
23
23
  super(metric)
24
24
  end
25
-
25
+
26
26
  def metric_default=(value); self.c = value; end
27
27
  def imperial_default=(value); self.f = value; end
28
28
 
29
29
  #
30
30
  # CONVERTERS
31
31
  #
32
-
32
+
33
33
  def self.c_to_k(c)
34
34
  return nil unless c && (c.is_a?(Integer) || c.is_a?(Float))
35
35
  273.15 + c.to_f
36
36
  end
37
-
37
+
38
38
  # Tf = (9/5)*Tc+32
39
39
  #
40
40
  def self.c_to_f(c)
41
41
  return nil unless c && (c.is_a?(Integer) || c.is_a?(Float))
42
42
  ((9.0/5.0)*c.to_f)+32.0
43
43
  end
44
-
44
+
45
45
  # Tc = (5/9)*(Tf-32)
46
46
  #
47
47
  def self.f_to_c(f)
48
48
  return nil unless f && (f.is_a?(Integer) || f.is_a?(Float))
49
49
  (5.0/9.0)*(f.to_f-32.0)
50
50
  end
51
-
51
+
52
52
  def self.f_to_k(f)
53
53
  return nil unless f && (f.is_a?(Integer) || f.is_a?(Float))
54
54
  c = self.f_to_c(f.to_f)
55
55
  self.c_to_k(c)
56
56
  end
57
-
57
+
58
58
  def self.k_to_c(k)
59
59
  return nil unless k && (k.is_a?(Integer) || k.is_a?(Float))
60
60
  k.to_f - 273.15
61
61
  end
62
-
62
+
63
63
  def self.k_to_f(k)
64
64
  return nil unless k && (k.is_a?(Integer) || k.is_a?(Float))
65
65
  c = self.k_to_c(k.to_f)
66
66
  self.c_to_f(c)
67
67
  end
68
-
68
+
69
69
  #
70
70
  # ACCESSORS
71
71
  #
72
-
72
+
73
73
  # store celsius and kelvin
74
74
  #
75
75
  def c=(c)
@@ -78,7 +78,7 @@ module Barometer
78
78
  @kelvin = Data::Temperature.c_to_k(c.to_f)
79
79
  self.update_fahrenheit(c.to_f)
80
80
  end
81
-
81
+
82
82
  # store fahrenheit and kelvin
83
83
  #
84
84
  def f=(f)
@@ -87,7 +87,7 @@ module Barometer
87
87
  @kelvin = Data::Temperature.f_to_k(f.to_f)
88
88
  self.update_celsius(f.to_f)
89
89
  end
90
-
90
+
91
91
  # store kelvin, convert to all
92
92
  #
93
93
  def k=(k)
@@ -96,57 +96,57 @@ module Barometer
96
96
  @celsius = Data::Temperature.k_to_c(k.to_f)
97
97
  @fahrenheit = Data::Temperature.k_to_f(k.to_f)
98
98
  end
99
-
99
+
100
100
  # return the stored celsius or convert from Kelvin
101
101
  #
102
102
  def c(as_integer=true)
103
103
  c = (@celsius || Data::Temperature.k_to_c(@kelvin))
104
104
  c ? (as_integer ? c.to_i : (100*c).round/100.0) : nil
105
105
  end
106
-
106
+
107
107
  # return the stored fahrenheit or convert from Kelvin
108
108
  #
109
109
  def f(as_integer=true)
110
110
  f = (@fahrenheit || Data::Temperature.k_to_f(@kelvin))
111
111
  f ? (as_integer ? f.to_i : (100*f).round/100.0) : nil
112
112
  end
113
-
113
+
114
114
  #
115
115
  # OPERATORS
116
116
  #
117
-
117
+
118
118
  def <=>(other)
119
119
  @kelvin <=> other.kelvin
120
120
  end
121
-
121
+
122
122
  #
123
123
  # HELPERS
124
124
  #
125
-
125
+
126
126
  # will just return the value (no units)
127
127
  #
128
128
  def to_i(metric=nil)
129
129
  (metric || (metric.nil? && self.metric?)) ? self.c : self.f
130
130
  end
131
-
131
+
132
132
  # will just return the value (no units) with more precision
133
133
  #
134
134
  def to_f(metric=nil)
135
135
  (metric || (metric.nil? && self.metric?)) ? self.c(false) : self.f(false)
136
136
  end
137
-
137
+
138
138
  # will return the value with units
139
139
  #
140
140
  def to_s(metric=nil)
141
141
  (metric || (metric.nil? && self.metric?)) ? "#{self.c} #{METRIC_UNITS}" : "#{self.f} #{IMPERIAL_UNITS}"
142
142
  end
143
-
143
+
144
144
  # will just return the units (no value)
145
145
  #
146
146
  def units(metric=nil)
147
147
  (metric || (metric.nil? && self.metric?)) ? METRIC_UNITS : IMPERIAL_UNITS
148
148
  end
149
-
149
+
150
150
  # when we set fahrenheit, it is possible the a non-equivalent value of
151
151
  # celsius remains. if so, clear it.
152
152
  #
@@ -157,7 +157,7 @@ module Barometer
157
157
  # then the conversion of fahrenheit
158
158
  @celsius = nil unless difference.abs <= 1.0
159
159
  end
160
-
160
+
161
161
  # when we set celsius, it is possible the a non-equivalent value of
162
162
  # fahrenheit remains. if so, clear it.
163
163
  #
@@ -168,10 +168,10 @@ module Barometer
168
168
  # then the conversion of celsius
169
169
  @fahrenheit = nil unless difference.abs <= 1.0
170
170
  end
171
-
171
+
172
172
  def nil?
173
173
  (@celsius || @fahrenheit || @kelvin) ? false : true
174
174
  end
175
-
175
+
176
176
  end
177
- end
177
+ end