skiplan_client 0.1.0 → 0.1.1
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/lib/skiplan_client/forecast.rb +4 -0
- data/lib/skiplan_client/metrics.rb +14 -2
- data/lib/skiplan_client/skiplan.rb +9 -0
- data/lib/skiplan_client/version.rb +1 -1
- data/lib/skiplan_client/zone.rb +27 -0
- data/lib/skiplan_client.rb +7 -1
- data/test/skiplan_client/forecast_test.rb +14 -12
- data/test/skiplan_client/metrics_test.rb +16 -1
- data/test/skiplan_client/skiplan_client_test.rb +14 -3
- data/test/skiplan_client/weather_object_test.rb +1 -1
- data/test/skiplan_client/zone_test.rb +35 -0
- metadata +6 -3
- data/lib/skiplan_client/weather_object.rb +0 -8
@@ -5,9 +5,9 @@ class Metrics
|
|
5
5
|
|
6
6
|
include AttributeHelper
|
7
7
|
|
8
|
-
METRICS = ['SKI_ALPIN', 'SKI_ALPIN_VERTES', 'SKI_ALPIN_BLEUES', 'SKI_ALPIN_ROUGES', 'SKI_ALPIN_NOIRES',
|
8
|
+
METRICS = ['SKI_NUIT', 'KM_SKATING', 'SKI_ALPIN', 'SKI_ALPIN_VERTES', 'SKI_ALPIN_BLEUES', 'SKI_ALPIN_ROUGES', 'SKI_ALPIN_NOIRES',
|
9
9
|
'SKI_NORDIQUE', 'SKI_NORDIQUE_VERTES', 'SKI_NORDIQUE_BLEUES', 'SKI_NORDIQUE_ROUGES', 'SKI_NORDIQUE_NOIRES',
|
10
|
-
'PIETONS', 'RAQUETTES', 'LUGE', 'SNOWPARK']
|
10
|
+
'REMONTEES', 'PIETONS', 'RAQUETTES', 'LUGE', 'SNOWPARK']
|
11
11
|
|
12
12
|
def initialize(attributes)
|
13
13
|
self.attributes = attributes.keep_if {|k, v| METRICS.include?(k)} unless attributes.nil?
|
@@ -51,6 +51,18 @@ class Metrics
|
|
51
51
|
{:total => get_ratio(@SNOWPARK)}
|
52
52
|
end
|
53
53
|
|
54
|
+
def skilifts
|
55
|
+
{:total => get_ratio(@REMONTEES)}
|
56
|
+
end
|
57
|
+
|
58
|
+
def night_ski
|
59
|
+
@SKI_NUIT && @SKI_NUIT['etat'] == '1'
|
60
|
+
end
|
61
|
+
|
62
|
+
def skating
|
63
|
+
@KM_SKATING['ouvert'] unless @KM_SKATING.nil?
|
64
|
+
end
|
65
|
+
|
54
66
|
private
|
55
67
|
|
56
68
|
def get_ratio(hash)
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'skiplan_client/attribute_helper'
|
2
|
+
|
3
|
+
class Zone
|
4
|
+
|
5
|
+
include AttributeHelper
|
6
|
+
|
7
|
+
def initialize(attributes)
|
8
|
+
self.attributes = attributes
|
9
|
+
end
|
10
|
+
|
11
|
+
def name
|
12
|
+
@nom
|
13
|
+
end
|
14
|
+
|
15
|
+
def skilifts
|
16
|
+
@REMONTEE
|
17
|
+
end
|
18
|
+
|
19
|
+
def slopes
|
20
|
+
@PISTE
|
21
|
+
end
|
22
|
+
|
23
|
+
def ratio(array_field = [])
|
24
|
+
open_entries = array_field.select {|r| r['etat'] == 'O'}
|
25
|
+
"#{open_entries.length}/#{array_field.length}"
|
26
|
+
end
|
27
|
+
end
|
data/lib/skiplan_client.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'skiplan_client/version'
|
2
2
|
require 'skiplan_client/forecast'
|
3
3
|
require 'skiplan_client/metrics'
|
4
|
+
require 'skiplan_client/zone'
|
4
5
|
require 'open-uri'
|
5
6
|
require 'nokogiri'
|
6
7
|
require 'active_support/core_ext/hash/conversions'
|
@@ -18,7 +19,7 @@ module SkiplanClient
|
|
18
19
|
|
19
20
|
def self.get_weather(zone)
|
20
21
|
xml = Nokogiri::XML(open(@config[:base_url]))
|
21
|
-
weather =
|
22
|
+
weather = Skiplan.new
|
22
23
|
|
23
24
|
today_element = xml.xpath('//ZONE[@nom="' + zone + '"]')
|
24
25
|
weather.forecasts['j'] = Forecast.new(Hash.from_xml(today_element.to_s)['ZONE'])
|
@@ -35,6 +36,11 @@ module SkiplanClient
|
|
35
36
|
metrics = xml.xpath('//INDICES')
|
36
37
|
weather.metrics = Metrics.new(Hash.from_xml(metrics.to_s)['INDICES'])
|
37
38
|
|
39
|
+
zones = xml.xpath('//SECTEUR')
|
40
|
+
zones.each do |z|
|
41
|
+
weather.zones[z['nom']] = Zone.new(Hash.from_xml(z.to_s)['SECTEUR'])
|
42
|
+
end
|
43
|
+
|
38
44
|
weather
|
39
45
|
end
|
40
46
|
end
|
@@ -8,19 +8,21 @@ require 'skiplan_client/forecast'
|
|
8
8
|
class ForecastTest < Test::Unit::TestCase
|
9
9
|
|
10
10
|
should 'populate forecast with attributes values' do
|
11
|
-
forecast = Forecast.new({'
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
11
|
+
forecast = Forecast.new({'datemaj' => '03/07/2014 17:01:18',
|
12
|
+
'TEMPERATURE' => '+10',
|
13
|
+
'TEMPERATURE_APM' => '+14',
|
14
|
+
'TEMPERATURE_RESSENTIE' => '+4',
|
15
|
+
'VENT' => '4',
|
16
|
+
'DIRECTION' => 'S',
|
17
|
+
'CIEL_ID' => '101',
|
18
|
+
'CIEL_ID_APM' => '101',
|
19
|
+
'VALRISQUE' => '3',
|
20
|
+
'CUMUL' => '100',
|
21
|
+
'NEIGE' => '20',
|
22
|
+
'DERNIERE_CHUTE' => '22/04/2014 08:31',
|
23
|
+
'VISIBILITE' => '100'})
|
23
24
|
|
25
|
+
assert_equal '03/07/2014 17:01:18', forecast.updated_at
|
24
26
|
assert_equal '101', forecast.weather_am
|
25
27
|
assert_equal '101', forecast.weather_pm
|
26
28
|
assert_equal '+10', forecast.temp_am
|
@@ -8,7 +8,9 @@ require 'skiplan_client/metrics'
|
|
8
8
|
class MetricsTest < Test::Unit::TestCase
|
9
9
|
|
10
10
|
setup do
|
11
|
-
attributes = {'
|
11
|
+
attributes = {'SKI_NUIT' => {'etat' => '1'},
|
12
|
+
'KM_SKATING' => {'ouvert' => '10'},
|
13
|
+
'SKI_ALPIN'=>{'total'=>'44', 'total_periode'=>'44', 'total_periode_hpf'=>'44', 'ouvertes_previsions'=>'0', 'ouvertes'=>'10', 'previsions'=>'0', 'fermees'=>'44', 'lng_total'=>'0.0', 'lng_ouverts'=>'0.0'},
|
12
14
|
'SKI_ALPIN_VERTES'=>{'total'=>'12', 'total_periode'=>'12', 'total_periode_hpf'=>'12', 'ouvertes_previsions'=>'0', 'ouvertes'=>'2', 'previsions'=>'0', 'fermees'=>'12', 'lng_total'=>'0.0', 'lng_ouverts'=>'0.0'},
|
13
15
|
'SKI_ALPIN_BLEUES'=>{'total'=>'15', 'total_periode'=>'15', 'total_periode_hpf'=>'15', 'ouvertes_previsions'=>'0', 'ouvertes'=>'3', 'previsions'=>'0', 'fermees'=>'15', 'lng_total'=>'0.0', 'lng_ouverts'=>'0.0'},
|
14
16
|
'SKI_ALPIN_ROUGES'=>{'total'=>'14', 'total_periode'=>'14', 'total_periode_hpf'=>'14', 'ouvertes_previsions'=>'0', 'ouvertes'=>'4', 'previsions'=>'0', 'fermees'=>'14', 'lng_total'=>'0.0', 'lng_ouverts'=>'0.0'},
|
@@ -18,6 +20,7 @@ class MetricsTest < Test::Unit::TestCase
|
|
18
20
|
'SKI_NORDIQUE_BLEUES'=>{'total'=>'4', 'total_periode'=>'4', 'total_periode_hpf'=>'4', 'ouvertes_previsions'=>'0', 'ouvertes'=>'3', 'previsions'=>'0', 'fermees'=>'4', 'lng_total'=>'20.9', 'lng_ouverts'=>'0.0'},
|
19
21
|
'SKI_NORDIQUE_ROUGES'=>{'total'=>'3', 'total_periode'=>'3', 'total_periode_hpf'=>'3', 'ouvertes_previsions'=>'0', 'ouvertes'=>'1', 'previsions'=>'0', 'fermees'=>'3', 'lng_total'=>'18.5', 'lng_ouverts'=>'0.0'},
|
20
22
|
'SKI_NORDIQUE_NOIRES'=>{'total'=>'3', 'total_periode'=>'3', 'total_periode_hpf'=>'3', 'ouvertes_previsions'=>'0', 'ouvertes'=>'0', 'previsions'=>'0', 'fermees'=>'3', 'lng_total'=>'22.6', 'lng_ouverts'=>'0.0'},
|
23
|
+
'REMONTEES' => {'total'=>'32', 'total_periode'=>'32', 'total_periode_hpf'=>'32', 'ouvertes_previsions'=>'0', 'ouvertes'=>'0', 'previsions'=>'0', 'fermees'=>'32'},
|
21
24
|
'PIETONS'=>{'total'=>'12', 'total_periode'=>'12', 'total_periode_hpf'=>'12', 'ouvertes_previsions'=>'9', 'ouvertes'=>'9', 'previsions'=>'0', 'fermees'=>'3', 'lng_total'=>'47.5', 'lng_ouverts'=>'35.0'},
|
22
25
|
'RAQUETTES'=>{'total'=>'14', 'total_periode'=>'14', 'total_periode_hpf'=>'14', 'ouvertes_previsions'=>'0', 'ouvertes'=>'1', 'previsions'=>'0', 'fermees'=>'14', 'lng_total'=>'61.0', 'lng_ouverts'=>'0.0'},
|
23
26
|
'LUGE'=>{'total'=>'4', 'total_periode'=>'4', 'total_periode_hpf'=>'4', 'ouvertes_previsions'=>'0', 'ouvertes'=>'2', 'previsions'=>'0', 'fermees'=>'4', 'lng_total'=>'0.0', 'lng_ouverts'=>'0.0'},
|
@@ -71,4 +74,16 @@ class MetricsTest < Test::Unit::TestCase
|
|
71
74
|
should 'return metrics for snowparks' do
|
72
75
|
assert_equal '3/8', @metrics.snowpark[:total]
|
73
76
|
end
|
77
|
+
|
78
|
+
should 'return metrics for skilifts' do
|
79
|
+
assert_equal '0/32', @metrics.skilifts[:total]
|
80
|
+
end
|
81
|
+
|
82
|
+
should 'return night ski availability for current day' do
|
83
|
+
assert_equal true, @metrics.night_ski
|
84
|
+
end
|
85
|
+
|
86
|
+
should 'return skating km available' do
|
87
|
+
assert_equal '10', @metrics.skating
|
88
|
+
end
|
74
89
|
end
|
@@ -4,7 +4,7 @@ gem 'shoulda'
|
|
4
4
|
require 'test/unit'
|
5
5
|
require 'shoulda'
|
6
6
|
require 'skiplan_client'
|
7
|
-
require 'skiplan_client/
|
7
|
+
require 'skiplan_client/skiplan'
|
8
8
|
|
9
9
|
class SkiplanClientTest < Test::Unit::TestCase
|
10
10
|
|
@@ -53,12 +53,23 @@ class SkiplanClientTest < Test::Unit::TestCase
|
|
53
53
|
|
54
54
|
assert_equal '0/44', metrics.alpine[:total]
|
55
55
|
assert_equal '0/17', metrics.nordic[:total]
|
56
|
-
assert_equal '
|
57
|
-
assert_equal '0/
|
56
|
+
assert_equal '35/47.5km', metrics.pedestrian[:total]
|
57
|
+
assert_equal '0/61km', metrics.snowshoes[:total]
|
58
58
|
assert_equal '0/4', metrics.sledge[:total]
|
59
59
|
assert_equal '0/8', metrics.snowpark[:total]
|
60
60
|
end
|
61
61
|
|
62
|
+
should 'retrieve zones data' do
|
63
|
+
SkiplanClient.configure('../../data/lumi_response.xml')
|
64
|
+
zones = SkiplanClient.get_weather('CHINAILLON').zones
|
65
|
+
|
66
|
+
assert_equal 10, zones.length
|
67
|
+
assert_equal 'ALPIN CHINAILLON', zones.keys[0]
|
68
|
+
|
69
|
+
ac_zone = zones['ALPIN CHINAILLON']
|
70
|
+
# assert_equal
|
71
|
+
end
|
72
|
+
|
62
73
|
should 'change config url' do
|
63
74
|
config = SkiplanClient.configure('my_new_url')
|
64
75
|
assert_equal 'my_new_url', config
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# encoding : UTF-8
|
2
|
+
require 'rubygems'
|
3
|
+
gem 'shoulda'
|
4
|
+
require 'test/unit'
|
5
|
+
require 'shoulda'
|
6
|
+
require 'skiplan_client/zone'
|
7
|
+
|
8
|
+
class ZoneTest < Test::Unit::TestCase
|
9
|
+
|
10
|
+
setup do
|
11
|
+
attributes = {'nom' => 'ALPIN CHINAILLON',
|
12
|
+
'REMONTEE' => [{'nom' => 'TS LA FLORIA', 'etat' => 'O', 'type' => 'TS', 'msg' => 'Fermee pour la saison'},
|
13
|
+
{'nom' => 'TK LE STADE', 'etat' => 'F', 'type' => 'TK', 'msg' => 'Fermee pour la saison'}],
|
14
|
+
'PISTE' => [{'nom' => 'LA SERPENTINE', 'etat' => 'F', 'type' => 'A', 'msg' => '', 'niveau' => 'V'},
|
15
|
+
{'nom' => 'LE VENAY', 'etat' => 'O', 'type' => 'A', 'msg' => '', 'niveau' => 'V'}]
|
16
|
+
}
|
17
|
+
@zone = Zone.new(attributes)
|
18
|
+
end
|
19
|
+
|
20
|
+
should 'retrieve the data for a given zone' do
|
21
|
+
assert_equal 'ALPIN CHINAILLON', @zone.name
|
22
|
+
assert_equal [{'nom' => 'TS LA FLORIA', 'etat' => 'O', 'type' => 'TS', 'msg' => 'Fermee pour la saison'},
|
23
|
+
{'nom' => 'TK LE STADE', 'etat' => 'F', 'type' => 'TK', 'msg' => 'Fermee pour la saison'}], @zone.skilifts
|
24
|
+
assert_equal [{'nom' => 'LA SERPENTINE', 'etat' => 'F', 'type' => 'A', 'msg' => '', 'niveau' => 'V'},
|
25
|
+
{'nom' => 'LE VENAY', 'etat' => 'O', 'type' => 'A', 'msg' => '', 'niveau' => 'V'}], @zone.slopes
|
26
|
+
end
|
27
|
+
|
28
|
+
should 'return the ratio of open skilifts' do
|
29
|
+
assert_equal '1/2', @zone.ratio(@zone.skilifts)
|
30
|
+
end
|
31
|
+
|
32
|
+
should 'return the ratio of open slopes' do
|
33
|
+
assert_equal '1/2', @zone.ratio(@zone.slopes)
|
34
|
+
end
|
35
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: skiplan_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
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: 2014-11-
|
12
|
+
date: 2014-11-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -124,13 +124,15 @@ files:
|
|
124
124
|
- lib/skiplan_client/attribute_helper.rb
|
125
125
|
- lib/skiplan_client/forecast.rb
|
126
126
|
- lib/skiplan_client/metrics.rb
|
127
|
+
- lib/skiplan_client/skiplan.rb
|
127
128
|
- lib/skiplan_client/version.rb
|
128
|
-
- lib/skiplan_client/
|
129
|
+
- lib/skiplan_client/zone.rb
|
129
130
|
- skiplan_client.gemspec
|
130
131
|
- test/skiplan_client/forecast_test.rb
|
131
132
|
- test/skiplan_client/metrics_test.rb
|
132
133
|
- test/skiplan_client/skiplan_client_test.rb
|
133
134
|
- test/skiplan_client/weather_object_test.rb
|
135
|
+
- test/skiplan_client/zone_test.rb
|
134
136
|
homepage: https://github.com/jeanbaptistevilain/skiplan_client
|
135
137
|
licenses:
|
136
138
|
- MIT
|
@@ -161,3 +163,4 @@ test_files:
|
|
161
163
|
- test/skiplan_client/metrics_test.rb
|
162
164
|
- test/skiplan_client/skiplan_client_test.rb
|
163
165
|
- test/skiplan_client/weather_object_test.rb
|
166
|
+
- test/skiplan_client/zone_test.rb
|