weatherzone 0.5.8
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/History.txt +6 -0
- data/Manifest.txt +51 -0
- data/README.txt +30 -0
- data/Rakefile +7 -0
- data/bin/weatherzone +0 -0
- data/lib/ext/class.rb +175 -0
- data/lib/ext/object.rb +74 -0
- data/lib/tzinfo/definitions/Australia/CDT.rb +13 -0
- data/lib/tzinfo/definitions/Australia/CST.rb +13 -0
- data/lib/tzinfo/definitions/Australia/EDT.rb +13 -0
- data/lib/tzinfo/definitions/Australia/EST.rb +13 -0
- data/lib/tzinfo/definitions/Australia/WDT.rb +13 -0
- data/lib/tzinfo/definitions/Australia/WST.rb +13 -0
- data/lib/vendor/openuri_memcached/History.txt +18 -0
- data/lib/vendor/openuri_memcached/License.txt +20 -0
- data/lib/vendor/openuri_memcached/README.markdown +48 -0
- data/lib/vendor/openuri_memcached/lib/openuri/common.rb +117 -0
- data/lib/vendor/openuri_memcached/lib/openuri/memcached.rb +36 -0
- data/lib/vendor/openuri_memcached/lib/openuri/rails-cache.rb +21 -0
- data/lib/vendor/openuri_memcached/lib/openuri_memcached.rb +1 -0
- data/lib/weatherzone.rb +39 -0
- data/lib/weatherzone/connection.rb +85 -0
- data/lib/weatherzone/finder.rb +129 -0
- data/lib/weatherzone/helpers/almanac_element.rb +28 -0
- data/lib/weatherzone/helpers/date_parser.rb +33 -0
- data/lib/weatherzone/helpers/units.rb +76 -0
- data/lib/weatherzone/resource.rb +46 -0
- data/lib/weatherzone/resources/almanac.rb +18 -0
- data/lib/weatherzone/resources/almanac_period.rb +51 -0
- data/lib/weatherzone/resources/climate_period.rb +8 -0
- data/lib/weatherzone/resources/conditions.rb +19 -0
- data/lib/weatherzone/resources/country.rb +4 -0
- data/lib/weatherzone/resources/daily_observation.rb +10 -0
- data/lib/weatherzone/resources/district_forecast.rb +5 -0
- data/lib/weatherzone/resources/forecast.rb +47 -0
- data/lib/weatherzone/resources/historical_observation.rb +57 -0
- data/lib/weatherzone/resources/image.rb +9 -0
- data/lib/weatherzone/resources/lift.rb +3 -0
- data/lib/weatherzone/resources/location.rb +100 -0
- data/lib/weatherzone/resources/marine_forecast.rb +9 -0
- data/lib/weatherzone/resources/marine_summary.rb +8 -0
- data/lib/weatherzone/resources/moon_phase.rb +23 -0
- data/lib/weatherzone/resources/news_item.rb +18 -0
- data/lib/weatherzone/resources/point_forecast.rb +40 -0
- data/lib/weatherzone/resources/snow_report.rb +5 -0
- data/lib/weatherzone/resources/state_forecast.rb +4 -0
- data/lib/weatherzone/resources/surf_report.rb +5 -0
- data/lib/weatherzone/resources/tide.rb +9 -0
- data/lib/weatherzone/resources/warning.rb +21 -0
- data/lib/weatherzone/resources/weather.rb +14 -0
- data/test/test_almanac.rb +25 -0
- data/test/test_almanac_period.rb +33 -0
- data/test/test_buoy_observation.rb +24 -0
- data/test/test_climate_period.rb +29 -0
- data/test/test_conditions.rb +32 -0
- data/test/test_connection.rb +28 -0
- data/test/test_country.rb +29 -0
- data/test/test_daily_observation.rb +29 -0
- data/test/test_district_forecast.rb +23 -0
- data/test/test_farenheit_conversion_factor.rb +48 -0
- data/test/test_finder.rb +148 -0
- data/test/test_forecast.rb +30 -0
- data/test/test_helper.rb +38 -0
- data/test/test_historical_observation.rb +32 -0
- data/test/test_image.rb +23 -0
- data/test/test_location.rb +70 -0
- data/test/test_marine_forecast.rb +27 -0
- data/test/test_marine_summary.rb +24 -0
- data/test/test_moon_phase.rb +33 -0
- data/test/test_news_item.rb +22 -0
- data/test/test_point_forecast.rb +24 -0
- data/test/test_snow_report.rb +27 -0
- data/test/test_state_forecast.rb +23 -0
- data/test/test_surf_report.rb +22 -0
- data/test/test_tide.rb +23 -0
- data/test/test_value_and_unit_helpers.rb +45 -0
- data/test/test_warning.rb +23 -0
- data/test/test_weather.rb +22 -0
- metadata +146 -0
@@ -0,0 +1,9 @@
|
|
1
|
+
class MarineForecast < Weatherzone::Resource
|
2
|
+
include Weatherzone::Helpers::Units
|
3
|
+
|
4
|
+
has_elements :issue_day_name, :issue_time_local, :short_text, :long_text, :sea_height_m, :sea_height_text, :swell_height_m, :swell_dir_compass
|
5
|
+
has_attribute :units, :on_elements => [:sea_height_m, :swell_height_m]
|
6
|
+
value_plus_unit_readers :sea_height_m, :swell_height_m
|
7
|
+
|
8
|
+
elements :marine_summary, :as => :marine_summaries, :class => MarineSummary
|
9
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
class MarineSummary < Weatherzone::Resource
|
2
|
+
include Weatherzone::Helpers::Units
|
3
|
+
|
4
|
+
attributes :day
|
5
|
+
has_elements :day, :day_name, :precis, :wind_dir_compass, :wind_speed_kts, :wind_speed_kph
|
6
|
+
has_attribute :units, :on_elements => [:wind_speed_kts, :wind_speed_kph]
|
7
|
+
value_plus_unit_readers :wind_speed_kts, :wind_speed_kph
|
8
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class MoonPhase < Weatherzone::Resource
|
2
|
+
attributes :day
|
3
|
+
has_elements :day_name, :date, :moon_phase
|
4
|
+
has_attribute :phase_num, :on_elements => :moon_phase
|
5
|
+
has_attribute :phase_text, :on_elements => :moon_phase
|
6
|
+
has_attribute :image_name, :on_elements => :moon_phase
|
7
|
+
|
8
|
+
PHASE_TEXT_TRANSLATIONS = {
|
9
|
+
"1st quarter" => "First quarter",
|
10
|
+
"Full moon" => "Full moon",
|
11
|
+
"3rd quarter" => "Last quarter",
|
12
|
+
"New moon" => "New moon"
|
13
|
+
}
|
14
|
+
|
15
|
+
def date
|
16
|
+
Date.parse(@date)
|
17
|
+
end
|
18
|
+
|
19
|
+
def phase_text
|
20
|
+
PHASE_TEXT_TRANSLATIONS[moon_phase_phase_text]
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class NewsItem < Weatherzone::Resource
|
2
|
+
|
3
|
+
include Weatherzone::Helpers::DateParser
|
4
|
+
|
5
|
+
attributes :item_num, :source
|
6
|
+
has_elements :link, :title, :byline, :dateline, :creditline, :copyright, :text
|
7
|
+
has_attribute :type, :on_elements => :link
|
8
|
+
has_attribute :description, :on_elements => :link
|
9
|
+
has_attribute :url, :on_elements => :link
|
10
|
+
has_attribute :date, :on_elements => [:dateline, :copyright]
|
11
|
+
|
12
|
+
interpret_as_date :dateline_date
|
13
|
+
|
14
|
+
def copyright_line
|
15
|
+
"© #{copyright} #{copyright_date}"
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
class PointForecast < Weatherzone::Resource
|
2
|
+
attributes :time
|
3
|
+
has_elements :dp_c, :rh, :wind_dir_degrees, :wind_dir_compass, :wind_speed_kph
|
4
|
+
has_attribute :units, :on_elements => [:dp_c, :rh, :wind_dir_degrees, :wind_speed_kph]
|
5
|
+
|
6
|
+
WIND_DIRECTIONS = {
|
7
|
+
:N => "North",
|
8
|
+
:NNE => "North North East",
|
9
|
+
:NE => "North East",
|
10
|
+
:ENE => "East North East",
|
11
|
+
:E => "East",
|
12
|
+
:ESE => "East South East",
|
13
|
+
:SE => "South East",
|
14
|
+
:SSE => "South South East",
|
15
|
+
:S => "South",
|
16
|
+
:SSW => "South South West",
|
17
|
+
:SW => "South West",
|
18
|
+
:WSW => "West South West",
|
19
|
+
:W => "West",
|
20
|
+
:WNW => "West North West",
|
21
|
+
:NW => "North West",
|
22
|
+
:NNW => "North North West"
|
23
|
+
}
|
24
|
+
|
25
|
+
def meridian_indicator
|
26
|
+
Time.parse(self.time).strftime("%p").downcase
|
27
|
+
end
|
28
|
+
|
29
|
+
def wind_dir_compass_long
|
30
|
+
WIND_DIRECTIONS[self.wind_dir_compass.to_sym] if self.wind_dir_compass
|
31
|
+
end
|
32
|
+
|
33
|
+
def relative_humidity
|
34
|
+
self.rh ? "#{self.rh}#{self.rh_units}" : "n/a"
|
35
|
+
end
|
36
|
+
|
37
|
+
def dew_point
|
38
|
+
self.dp_c ? "#{self.dp_c}#{self.dp_c_units}" : "n/a"
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,5 @@
|
|
1
|
+
class SnowReport < Weatherzone::Resource
|
2
|
+
has_elements :day_name, :issue_time_local, :visibility_text, :road_conditions, :primary_surface, :snow_conditions, :snow_cover, :snow_depth_avg_cm, :snow_depth_new_cm,
|
3
|
+
:snow_making, :grooming, :last_snowfall_date, :resort_summary, :lifts_open
|
4
|
+
elements :lift, :as => :lifts, :class => Lift
|
5
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
class Tide < Weatherzone::Resource
|
2
|
+
include Weatherzone::Helpers::Units
|
3
|
+
include Weatherzone::Helpers::DateParser
|
4
|
+
|
5
|
+
has_elements :day_name, :time, :tide_type, :tide_height_m
|
6
|
+
has_attribute :units, :on_elements => [:tide_height_m]
|
7
|
+
value_plus_unit_readers :tide_height_m
|
8
|
+
interpret_as_time :time
|
9
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class Warning < Weatherzone::Resource
|
2
|
+
|
3
|
+
include Weatherzone::Helpers::DateParser
|
4
|
+
|
5
|
+
attributes :id, :type
|
6
|
+
has_elements :issue_day_name, :issue_time_local, :expire_time_local, :short_text, :long_text, :url
|
7
|
+
|
8
|
+
interpret_as_time :issue_time_local, :expire_time_local
|
9
|
+
|
10
|
+
# Override id and type
|
11
|
+
attr_reader :id, :type
|
12
|
+
|
13
|
+
def hash
|
14
|
+
id.hash
|
15
|
+
end
|
16
|
+
|
17
|
+
def eql?(other)
|
18
|
+
self.id == other.id
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class Weather < Weatherzone::Resource
|
2
|
+
include Weatherzone::Finder
|
3
|
+
elements :country, :as => :countries, :class => Country
|
4
|
+
elements :astro_element, :as => :moon_phases, :class => MoonPhase
|
5
|
+
elements :news_item, :as => :news_items, :class => NewsItem
|
6
|
+
|
7
|
+
def first_location
|
8
|
+
countries.first.locations.first
|
9
|
+
end
|
10
|
+
|
11
|
+
def has_locations?
|
12
|
+
countries.any? && countries.first.locations.any?
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class TestAlmanac < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
super
|
6
|
+
weather = Weather.find_by_location_code("9770")
|
7
|
+
country = weather.countries.first
|
8
|
+
location = country.locations.first
|
9
|
+
@almanac = location.almanacs.first
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_should_be_a_almanac
|
13
|
+
assert_kind_of Almanac, @almanac
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_should_not_have_nil_attributes
|
17
|
+
[:month_num, :month_name, :date_start, :date_end].each do |attr_name|
|
18
|
+
assert_not_nil @almanac.send(attr_name), "@almanac should respond to #{attr_name}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_should_have_many_almanac_periods
|
23
|
+
assert @almanac.almanac_periods.any?
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class TestAlmanacPeriod < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
super
|
7
|
+
weather = Weather.find_by_location_code("9770")
|
8
|
+
country = weather.countries.first
|
9
|
+
location = country.locations.first
|
10
|
+
almanac = location.almanacs.first
|
11
|
+
@almanac_period = almanac.almanac_periods.first
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_should_be_a_almanac_period
|
15
|
+
assert_kind_of AlmanacPeriod, @almanac_period
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_should_not_have_nil_attributes
|
19
|
+
[:code, :title, :month_name, :from, :to].each do |attr_name|
|
20
|
+
assert_not_nil @almanac_period.send(attr_name), "@almanac_period should respond to #{attr_name}"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_should_have_accessors_for_attributes_setup_with_the_almanac_element_helper
|
25
|
+
# Just testing a representative sample as there are 80 odd accessors that get added to the AlmanacPeriod resource in this way
|
26
|
+
[:avg_rainfall_this_month, :avg_rainfall_this_month_value, :avg_rainfall_this_month_units, :avg_rainfall_this_month_days,
|
27
|
+
:avg_rainfall_this_year, :avg_rainfall_this_year_value, :avg_rainfall_this_year_units, :avg_rainfall_this_year_days].each do |attr_name|
|
28
|
+
assert @almanac_period.respond_to?(attr_name), "@almanac_period should respond to #{attr_name}"
|
29
|
+
assert @almanac_period.respond_to?("#{attr_name}="), "@almanac_period should respond to #{attr_name}="
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class TestBuoyObservation < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
super
|
7
|
+
weather = Weather.find_by_location_code("9770")
|
8
|
+
country = weather.countries.first
|
9
|
+
location = country.locations.first
|
10
|
+
@buoy_observation = location.buoy_observations.first
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_be_a_tide
|
14
|
+
assert_kind_of BuoyObservation, @buoy_observation
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_should_not_have_nil_attributes
|
18
|
+
[:day_name, :time, :wave_height_m_significant, :wave_height_m_max, :wave_height_m_units, :wave_height_ft_significant, :wave_height_ft_max, :wave_height_ft_units,
|
19
|
+
:wave_period_significant, :wave_period_peak, :wave_period_units, :wave_dir_degrees, :wave_dir_degrees_units, :wave_dir_compass, :sea_temp_c, :sea_temp_c_units].each do |attr_name|
|
20
|
+
assert_not_nil @buoy_observation.send(attr_name), "@buoy_observation should respond to #{attr_name}"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class TestClimatePeriod < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
super
|
7
|
+
weather = Weather.find_by_location_code("9770")
|
8
|
+
country = weather.countries.first
|
9
|
+
location = country.locations.first
|
10
|
+
@climate_period = location.climate_periods.first
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_be_a_climate_period
|
14
|
+
assert_kind_of ClimatePeriod, @climate_period
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_should_not_have_nil_attributes
|
18
|
+
[:name, :mean_temp_min_c, :mean_temp_max_c, :rain_days, :mean_rainfall_mm].each do |attr_name|
|
19
|
+
assert_not_nil @climate_period.send(attr_name), "@climate_period should respond to #{attr_name}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_should_have_units_attributes
|
24
|
+
[:mean_temp_min_c, :mean_temp_max_c, :mean_rainfall_mm].each do |attr_name|
|
25
|
+
assert_not_nil @climate_period.send("#{attr_name}_units"), "@climate_period should respond to #{attr_name}_units"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class TestConditions < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
super
|
7
|
+
weather = Weather.find_by_location_code("9770")
|
8
|
+
country = weather.countries.first
|
9
|
+
location = country.locations.first
|
10
|
+
@conditions = location.conditions.first
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_be_a_conditions
|
14
|
+
assert_kind_of Conditions, @conditions
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_should_not_have_nil_attributes
|
18
|
+
[:obs_time_utc, :obs_time_local, :temp_c, :dp_c, :rh,
|
19
|
+
:wind_dir_degrees, :wind_dir_compass, :wind_speed_kph, :wind_speed_kts,
|
20
|
+
:wind_gust_kph, :wind_gust_kts, :feels_like_c, :rainfall_mm, :pressure_qnh_hpa].each do |attr_name|
|
21
|
+
assert_not_nil @conditions.send(attr_name), "@conditions should respond to #{attr_name}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_should_have_units_attributes
|
26
|
+
[:temp_c, :dp_c, :rh, :wind_dir_degrees, :wind_speed_kph, :wind_speed_kts,
|
27
|
+
:wind_gust_kph, :wind_gust_kts, :feels_like_c, :pressure_qnh_hpa, :rainfall_mm].each do |attr_name|
|
28
|
+
assert_not_nil @conditions.send("#{attr_name}_units"), "@conditions should respond to #{attr_name}_units"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class TestConnection < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
Weatherzone::Connection.connect("username", "password", :url => "http://ws1.theweather.com.au/") do
|
7
|
+
"sekret" + Weatherzone::Connection.instance.password
|
8
|
+
end
|
9
|
+
@connection = Weatherzone::Connection.instance
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_should_set_username
|
13
|
+
assert_equal "username", @connection.username
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_should_set_password
|
17
|
+
assert_equal "password", @connection.password
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_should_set_key
|
21
|
+
assert_equal "sekretpassword", @connection.key
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_should_provide_base_url
|
25
|
+
assert_equal "http://ws1.theweather.com.au/?u=username&k=sekretpassword", @connection.base_url
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class TestCountry < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
Weatherzone::Connection.instance.stubs(:request).returns( File.open("test/response/everything.xml") )
|
7
|
+
weather = Weather.find_by_location_code("9770")
|
8
|
+
@country = weather.countries.first
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_should_be_a_country
|
12
|
+
assert_kind_of Country, @country
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_should_not_have_nil_attributes
|
16
|
+
[:code, :name].each do |attr_name|
|
17
|
+
assert @country.send(attr_name), "@country should respond to #{attr_name}"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_should_have_locations
|
22
|
+
assert @country.locations.any?
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_locations_should_be_locations
|
26
|
+
assert_kind_of Location, @country.locations.first
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class TestDailyObservtion < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
super
|
7
|
+
weather = Weather.find_by_location_code("9770")
|
8
|
+
country = weather.countries.first
|
9
|
+
location = country.locations.first
|
10
|
+
@daily_observation = location.daily_observations.first
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_be_a_daily_observation
|
14
|
+
assert_kind_of DailyObservation, @daily_observation
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_should_not_have_nil_attributes
|
18
|
+
[:day_name, :date, :temp_min_c, :temp_max_c, :rainfall_mm].each do |attr_name|
|
19
|
+
assert_not_nil @daily_observation.send(attr_name), "@daily_observation should respond to #{attr_name}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_should_have_units_attributes
|
24
|
+
[:temp_min_c, :temp_max_c, :rainfall_mm].each do |attr_name|
|
25
|
+
assert_not_nil @daily_observation.send("#{attr_name}_units"), "@daily_observation should respond to #{attr_name}_units"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class TestDistrictForecast < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
super
|
7
|
+
weather = Weather.find_by_location_code("9770")
|
8
|
+
country = weather.countries.first
|
9
|
+
location = country.locations.first
|
10
|
+
@district_forecast = location.district_forecasts.first
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_be_a_district_forecast
|
14
|
+
assert_kind_of DistrictForecast, @district_forecast
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_should_not_have_nil_attributes
|
18
|
+
[:period, :period_name, :precis, :icon, :icon_filename].each do |attr_name|
|
19
|
+
assert_not_nil @district_forecast.send(attr_name), "@district_forecast should respond to #{attr_name}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|