lib/barometer/measurements/result.rb in barometer-0.7.3 vs lib/barometer/measurements/result.rb in barometer-0.8.0
- old
+ new
@@ -5,163 +5,163 @@
#
# This is basically a data holding class for the resulting weather
# conditions.
#
class Measurement::Result
-
+
attr_reader :current_at, :updated_at
attr_reader :valid_start_date, :valid_end_date, :date
attr_reader :humidity, :icon, :condition
attr_reader :temperature, :dew_point, :heat_index, :wind_chill
attr_reader :low, :high, :pop
attr_reader :wind, :sun, :pressure, :visibility
attr_accessor :metric, :description
-
+
def initialize(metric=true); @metric = metric; end
-
+
# accessors (with input checking)
#
def temperature=(temperature)
raise ArgumentError unless temperature.is_a?(Data::Temperature)
@temperature = temperature
end
-
+
def dew_point=(dew_point)
raise ArgumentError unless dew_point.is_a?(Data::Temperature)
@dew_point = dew_point
end
-
+
def heat_index=(heat_index)
raise ArgumentError unless heat_index.is_a?(Data::Temperature)
@heat_index = heat_index
end
-
+
def wind_chill=(wind_chill)
raise ArgumentError unless wind_chill.is_a?(Data::Temperature)
@wind_chill = wind_chill
end
-
+
def pressure=(pressure)
raise ArgumentError unless pressure.is_a?(Data::Pressure)
@pressure = pressure
end
-
+
def visibility=(visibility)
raise ArgumentError unless visibility.is_a?(Data::Distance)
@visibility = visibility
end
-
+
def current_at=(current_at)
raise ArgumentError unless (current_at.is_a?(Data::LocalTime) || current_at.is_a?(Data::LocalDateTime))
@current_at = current_at
- end
-
+ end
+
def updated_at=(updated_at)
raise ArgumentError unless (updated_at.is_a?(Data::LocalTime) || updated_at.is_a?(Data::LocalDateTime))
@updated_at = updated_at
end
-
+
def date=(date)
raise ArgumentError unless date.is_a?(Date)
@date = date
@valid_start_date = Data::LocalDateTime.new(date.year,date.month,date.day,0,0,0)
@valid_end_date = Data::LocalDateTime.new(date.year,date.month,date.day,23,59,59)
end
-
+
def valid_start_date=(date)
raise ArgumentError unless date.is_a?(Data::LocalDateTime)
@valid_start_date = date
end
-
+
def valid_end_date=(date)
raise ArgumentError unless date.is_a?(Data::LocalDateTime)
@valid_end_date = date
end
-
+
def high=(high)
raise ArgumentError unless high.is_a?(Data::Temperature)
@high = high
end
-
+
def low=(low)
raise ArgumentError unless low.is_a?(Data::Temperature)
@low = low
end
-
+
def pop=(pop)
raise ArgumentError unless pop.is_a?(Fixnum)
@pop = pop
end
-
+
def humidity=(humidity)
raise ArgumentError unless
(humidity.is_a?(Fixnum) || humidity.is_a?(Float))
@humidity = humidity
end
-
+
def icon=(icon)
raise ArgumentError unless icon.is_a?(String)
@icon = icon
end
-
+
def condition=(condition)
raise ArgumentError unless condition.is_a?(String)
@condition = condition
end
-
+
def wind=(wind)
raise ArgumentError unless wind.is_a?(Data::Speed)
@wind = wind
end
-
+
def sun=(sun)
raise ArgumentError unless (sun.is_a?(Data::Sun) || sun.nil?)
@sun = sun
end
-
+
#
# answer simple questions
#
-
+
def windy?(threshold=10)
raise ArgumentError unless (threshold.is_a?(Fixnum) || threshold.is_a?(Float))
return nil unless wind?
wind.to_f(metric?) >= threshold.to_f
end
-
+
def day?(time)
return nil unless time && sun?
sun.after_rise?(time) && sun.before_set?(time)
end
-
+
def sunny?(time, sunny_icons=nil)
return nil unless time
is_day = day?(time)
return nil if is_day.nil?
is_day && _sunny_by_icon?(sunny_icons)
end
-
+
def wet?(wet_icons=nil, pop_threshold=50, humidity_threshold=99)
result = nil
result ||= _wet_by_pop?(pop_threshold) if pop?
result ||= _wet_by_icon?(wet_icons) if icon?
result ||= _wet_by_humidity?(humidity_threshold) if humidity?
result ||= _wet_by_dewpoint? if (dew_point? && temperature?)
result
end
-
+
#
# helpers
#
-
+
def metric?; metric; end
-
+
def for_datetime?(datetime)
raise ArgumentError unless datetime.is_a?(Data::LocalDateTime)
datetime >= @valid_start_date && datetime <= @valid_end_date
end
-
+
# creates "?" helpers for all attributes (which maps to nil?)
#
def method_missing(method,*args)
# if the method ends in ?, then strip it off and see if we
# respond to the method without the ?
@@ -169,39 +169,39 @@
return send(call_method).nil? ? false : true
else
super(method,*args)
end
end
-
+
private
-
+
def _wet_by_dewpoint?
return nil unless dew_point? && temperature?
temperature.to_f(metric?) <= dew_point.to_f(metric?)
end
-
+
def _wet_by_pop?(threshold=50)
raise ArgumentError unless (threshold.is_a?(Fixnum) || threshold.is_a?(Float))
return nil unless pop?
pop.to_f >= threshold.to_f
end
-
+
def _wet_by_humidity?(threshold=99)
raise ArgumentError unless (threshold.is_a?(Fixnum) || threshold.is_a?(Float))
return nil unless humidity?
humidity.to_f >= threshold.to_f
end
-
+
def _wet_by_icon?(wet_icons=nil)
raise ArgumentError unless (wet_icons.nil? || wet_icons.is_a?(Array))
return nil unless (icon? && wet_icons)
wet_icons.include?(icon.to_s.downcase)
end
-
+
def _sunny_by_icon?(sunny_icons=nil)
raise ArgumentError unless (sunny_icons.nil? || sunny_icons.is_a?(Array))
return nil unless (icon? && sunny_icons)
sunny_icons.include?(icon.to_s.downcase)
end
-
+
end
-end
\ No newline at end of file
+end