ullr 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use 1.9.2@ullr
data/History.txt CHANGED
@@ -14,3 +14,7 @@
14
14
  == 0.1.2 / 2011-12-28
15
15
 
16
16
  * now uses proper min/max values from feed instead of regex matches in forecast text
17
+
18
+ == 0.1.4 / 2012-11-7
19
+
20
+ * fixing issue with dates in new feed format
data/lib/ullr/noaa.rb CHANGED
@@ -6,7 +6,11 @@ module Ullr
6
6
  tag 'start-valid-time'
7
7
  content :period_start
8
8
  attribute :'period-name', String
9
- set_time = lambda{|ob| ob.period_start = DateTime.parse(ob.period_start) }
9
+ set_time = lambda{|ob|
10
+ if ob.period_start =~ /[0-9]*\-[0-9]*\-[0-9]*/
11
+ ob.period_start = DateTime.parse(ob.period_start)
12
+ end
13
+ }
10
14
  after_parse(&set_time)
11
15
  end
12
16
 
@@ -0,0 +1,177 @@
1
+ <?xml version="1.0" encoding="ISO-8859-1"?>
2
+ <dwml version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://graphical.weather.gov/xml/DWMLgen/schema/DWML.xsd">
3
+ <head>
4
+ <product concise-name="dwmlByDay" operational-mode="developmental" srsName="WGS 1984">
5
+ <creation-date refresh-frequency='PT1H'>2012-11-06T08:31:55-08:00</creation-date>
6
+ <category>current observations and forecast</category>
7
+ </product>
8
+ <source>
9
+ <production-center>Pendleton, OR</production-center>
10
+ <credit>http://www.wrh.noaa.gov/pdt</credit>
11
+ <more-information>http://www.nws.noaa.gov/forecasts/xml/</more-information>
12
+ </source>
13
+ </head>
14
+ <data type="forecast">
15
+
16
+ <location>
17
+ <location-key>point1</location-key>
18
+ <description>Mount Bachelor, OR</description>
19
+ <point latitude="43.99" longitude="-121.68"/>
20
+ <city state="OR">Mount Bachelor</city>
21
+ <height datum="mean sea level">7636</height>
22
+ </location>
23
+ <moreWeatherInformation applicable-location="point1">http://forecast.weather.gov/MapClick.php?lat=43.99&amp;lon=-121.68</moreWeatherInformation>
24
+ <time-layout time-coordinate="local" summarization="12hourly">
25
+ <layout-key>k-p6h-n1-1</layout-key> <start-valid-time>2012-11-06T15:00:00-08:00</start-valid-time>
26
+ <end-valid-time>2012-11-12T18:00:00-08:00</end-valid-time>
27
+ </time-layout>
28
+
29
+ <time-layout time-coordinate="local" summarization="12hourly">
30
+ <layout-key>k-p12h-n13-1</layout-key>
31
+ <start-valid-time period-name="This Afternoon">2012-11-06T12:00:00-08:00</start-valid-time>
32
+ <start-valid-time period-name="Tonight">2012-11-06T18:00:00-08:00</start-valid-time>
33
+ <start-valid-time period-name="Wednesday">2012-11-07T06:00:00-08:00</start-valid-time>
34
+ <start-valid-time period-name="Wednesday Night">2012-11-07T18:00:00-08:00</start-valid-time>
35
+ <start-valid-time period-name="Thursday">2012-11-08T06:00:00-08:00</start-valid-time>
36
+ <start-valid-time period-name="Thursday Night">2012-11-08T18:00:00-08:00</start-valid-time>
37
+ <start-valid-time period-name="Friday">2012-11-09T06:00:00-08:00</start-valid-time>
38
+ <start-valid-time period-name="Friday Night">2012-11-09T18:00:00-08:00</start-valid-time>
39
+ <start-valid-time period-name="Saturday">2012-11-10T06:00:00-08:00</start-valid-time>
40
+ <start-valid-time period-name="Saturday Night">2012-11-10T18:00:00-08:00</start-valid-time>
41
+ <start-valid-time period-name="Veterans Day">2012-11-11T06:00:00-08:00</start-valid-time>
42
+ <start-valid-time period-name="Sunday Night">2012-11-11T18:00:00-08:00</start-valid-time>
43
+ <start-valid-time period-name="Monday">2012-11-12T06:00:00-08:00</start-valid-time>
44
+ </time-layout>
45
+
46
+ <time-layout time-coordinate="local" summarization="12hourly">
47
+ <layout-key>k-p24h-n7-1</layout-key>
48
+ <start-valid-time period-name="This Afternoon">2012-11-06T12:00:00-08:00</start-valid-time>
49
+ <start-valid-time period-name="Wednesday">2012-11-07T06:00:00-08:00</start-valid-time>
50
+ <start-valid-time period-name="Thursday">2012-11-08T06:00:00-08:00</start-valid-time>
51
+ <start-valid-time period-name="Friday">2012-11-09T06:00:00-08:00</start-valid-time>
52
+ <start-valid-time period-name="Saturday">2012-11-10T06:00:00-08:00</start-valid-time>
53
+ <start-valid-time period-name="Veterans Day">2012-11-11T06:00:00-08:00</start-valid-time>
54
+ <start-valid-time period-name="Monday">2012-11-12T06:00:00-08:00</start-valid-time>
55
+ </time-layout>
56
+
57
+ <time-layout time-coordinate="local" summarization="12hourly">
58
+ <layout-key>k-p24h-n6-2</layout-key>
59
+ <start-valid-time period-name="Tonight">2012-11-06T18:00:00-08:00</start-valid-time>
60
+ <start-valid-time period-name="Wednesday Night">2012-11-07T18:00:00-08:00</start-valid-time>
61
+ <start-valid-time period-name="Thursday Night">2012-11-08T18:00:00-08:00</start-valid-time>
62
+ <start-valid-time period-name="Friday Night">2012-11-09T18:00:00-08:00</start-valid-time>
63
+ <start-valid-time period-name="Saturday Night">2012-11-10T18:00:00-08:00</start-valid-time>
64
+ <start-valid-time period-name="Sunday Night">2012-11-11T18:00:00-08:00</start-valid-time>
65
+ </time-layout>
66
+
67
+
68
+ <parameters applicable-location="point1">
69
+
70
+ <temperature type="maximum" units="Fahrenheit" time-layout="k-p24h-n7-1">
71
+ <name>Daily Maximum Temperature</name>
72
+ <value>57</value>
73
+ <value>36</value>
74
+ <value>23</value>
75
+ <value>21</value>
76
+ <value>21</value>
77
+ <value>26</value>
78
+ <value>25</value>
79
+ </temperature>
80
+
81
+ <temperature type="minimum" units="Fahrenheit" time-layout="k-p24h-n6-2">
82
+ <name>Daily Minimum Temperature</name>
83
+ <value>36</value>
84
+ <value>20</value>
85
+ <value>16</value>
86
+ <value>18</value>
87
+ <value>20</value>
88
+ <value>24</value>
89
+ </temperature>
90
+
91
+ <probability-of-precipitation type="12 hour" units="percent" time-layout="k-p12h-n13-1">
92
+ <name>12 Hourly Probability of Precipitation</name>
93
+ <value xsi:nil="true"></value>
94
+ <value>30</value>
95
+ <value>30</value>
96
+ <value>30</value>
97
+ <value>60</value>
98
+ <value xsi:nil="true"></value>
99
+ <value xsi:nil="true"></value>
100
+ <value xsi:nil="true"></value>
101
+ <value xsi:nil="true"></value>
102
+ <value xsi:nil="true"></value>
103
+ <value xsi:nil="true"></value>
104
+ <value xsi:nil="true"></value>
105
+ <value xsi:nil="true"></value>
106
+ </probability-of-precipitation>
107
+
108
+ <weather time-layout="k-p12h-n13-1">
109
+ <name>Weather Type, Coverage, Intensity</name>
110
+ <weather-conditions weather-summary="Mostly Sunny"/>
111
+ <weather-conditions weather-summary="Chance Rain/Snow"/>
112
+ <weather-conditions weather-summary="Chance Snow"/>
113
+ <weather-conditions weather-summary="Chance Snow"/>
114
+ <weather-conditions weather-summary="Snow Likely"/>
115
+ <weather-conditions weather-summary="Snow Likely"/>
116
+ <weather-conditions weather-summary="Chance Snow"/>
117
+ <weather-conditions weather-summary="Chance Snow"/>
118
+ <weather-conditions weather-summary="Chance Snow"/>
119
+ <weather-conditions weather-summary="Mostly Cloudy"/>
120
+ <weather-conditions weather-summary="Chance Snow"/>
121
+ <weather-conditions weather-summary="Chance Snow"/>
122
+ <weather-conditions weather-summary="Snow Likely"/>
123
+ </weather>
124
+
125
+ <conditions-icon type="forecast-NWS" time-layout="k-p12h-n13-1">
126
+ <name>Conditions Icon</name> <icon-link>http://forecast.weather.gov/images/wtf/medium/sct.png</icon-link>
127
+ <icon-link>http://forecast.weather.gov/images/wtf/medium/nrasn30.png</icon-link>
128
+ <icon-link>http://forecast.weather.gov/images/wtf/medium/sn30.png</icon-link>
129
+ <icon-link>http://forecast.weather.gov/images/wtf/medium/nsn30.png</icon-link>
130
+ <icon-link>http://forecast.weather.gov/images/wtf/medium/sn60.png</icon-link>
131
+ <icon-link>http://forecast.weather.gov/images/wtf/medium/nsn.png</icon-link>
132
+ <icon-link>http://forecast.weather.gov/images/wtf/medium/sn.png</icon-link>
133
+ <icon-link>http://forecast.weather.gov/images/wtf/medium/nsn.png</icon-link>
134
+ <icon-link>http://forecast.weather.gov/images/wtf/medium/sn.png</icon-link>
135
+ <icon-link>http://forecast.weather.gov/images/wtf/medium/nbkn.png</icon-link>
136
+ <icon-link>http://forecast.weather.gov/images/wtf/medium/sn.png</icon-link>
137
+ <icon-link>http://forecast.weather.gov/images/wtf/medium/nsn.png</icon-link>
138
+ <icon-link>http://forecast.weather.gov/images/wtf/medium/sn.png</icon-link>
139
+ </conditions-icon>
140
+
141
+ <hazards time-layout="k-p6h-n1-1">
142
+ <name>Watches, Warnings, and Advisories</name>
143
+ <hazard-conditions>
144
+ <hazard headline="Special Weather Statement">
145
+ <hazardTextURL>http://forecast.weather.gov/showsigwx.php?warnzone=ORZ509&amp;warncounty=ORC017&amp;firewxzone=ORZ611&amp;local_place1=Mount+Bachelor+OR&amp;product1=Special+Weather+Statement</hazardTextURL>
146
+ </hazard>
147
+ </hazard-conditions>
148
+ </hazards>
149
+
150
+ <wordedForecast time-layout="k-p12h-n13-1" dataSource="pdtNetcdf" wordGenerator="markMitchell">
151
+ <name>Text Forecast</name>
152
+ <text>Mostly sunny, with a high near 57. West wind around 15 mph. </text>
153
+ <text>A chance of rain before 4am, then a chance of rain and snow showers. Partly cloudy, with a low around 36. West wind 17 to 20 mph, with gusts as high as 30 mph. Chance of precipitation is 30%.</text>
154
+ <text>A chance of snow showers before 10am, then a slight chance of snow showers after 4pm. Partly sunny, with a temperature falling to around 32 by 5pm. Southwest wind 5 to 11 mph becoming north in the afternoon. Chance of precipitation is 30%.</text>
155
+ <text>A 30 percent chance of snow showers, mainly after 10pm. Mostly cloudy, with a low around 20. Southwest wind 7 to 10 mph. </text>
156
+ <text>Snow showers likely. Cloudy, with a high near 23. Southwest wind 10 to 15 mph. Chance of precipitation is 60%. New snow accumulation of 2 to 4 inches possible. </text>
157
+ <text>Snow showers likely. Cloudy, with a low around 16.</text>
158
+ <text>A chance of snow showers. Cloudy, with a high near 21.</text>
159
+ <text>A chance of snow showers. Mostly cloudy, with a low around 18.</text>
160
+ <text>A chance of snow showers. Partly sunny, with a high near 21.</text>
161
+ <text>Mostly cloudy, with a low around 20.</text>
162
+ <text>A chance of snow. Cloudy, with a high near 26.</text>
163
+ <text>A chance of snow. Cloudy, with a low around 24.</text>
164
+ <text>Snow likely. Mostly cloudy, with a high near 25.</text>
165
+ </wordedForecast>
166
+
167
+ </parameters>
168
+ </data>
169
+ <data type="current observations">
170
+ <location>
171
+ <location-key>point1</location-key>
172
+ <point latitude="43.98314" longitude="-121.58034"/>
173
+ <area-description>Wanoga Butte (HWY 372 MP 17), OR</area-description>
174
+ <height datum="mean sea level" height-units="feet">6001</height>
175
+ </location>
176
+ <moreWeatherInformation applicable-location="point1"></moreWeatherInformation> <time-layout time-coordinate="local"> <layout-key>k-p1h-n1-1</layout-key> <start-valid-time period-name="current">NA</start-valid-time> </time-layout> <parameters applicable-location="point1"> <temperature type="apparent" units="Fahrenheit" time-layout="k-p1h-n1-1"> <value></value> </temperature> <temperature type="dew point" units="Fahrenheit" time-layout="k-p1h-n1-1"> <value>NA</value> </temperature> <humidity type="relative" time-layout="k-p1h-n1-1"> <value>NA</value> </humidity> <weather time-layout="k-p1h-n1-1"> <name>Weather Type, Coverage, Intensity</name> <weather-conditions weather-summary=""/> <weather-conditions> <value> <visibility units="statute miles">NA</visibility> </value> </weather-conditions> </weather> <conditions-icon type="forecast-NWS" time-layout="k-p1h-n1-1"> <name>Conditions Icon</name> <icon-link>http://forecast.weather.gov/images/wtf/medium/</icon-link> </conditions-icon> <direction type="wind" units="degrees true" time-layout="k-p1h-n1-1"> <value>NA</value> </direction> <wind-speed type="gust" units="knots" time-layout="k-p1h-n1-1"> <value>NA</value> </wind-speed> <wind-speed type="sustained" units="knots" time-layout="k-p1h-n1-1"> <value>NA</value> </wind-speed> <pressure type="barometer" units="inches of mercury" time-layout="k-p1h-n1-1"> <value>NA</value> </pressure> </parameters></data></dwml>
177
+
data/spec/ullr_spec.rb CHANGED
@@ -70,7 +70,7 @@ describe Ullr do
70
70
  end
71
71
 
72
72
  it "should have a value" do
73
- @text.value.should eql('A 20 percent chance of snow. Partly sunny, with a high near 39. West wind around 9 mph. ')
73
+ @text.value.should eql('Mostly sunny, with a high near 57. West wind around 15 mph. ')
74
74
  end
75
75
 
76
76
  it "should respond to has_snow?" do
@@ -78,25 +78,25 @@ describe Ullr do
78
78
  end
79
79
 
80
80
  it "should return true to has_snow? if snow exists" do
81
- @text.has_snow?.should be_true
81
+ @text.has_snow?.should be_false
82
82
  end
83
83
 
84
84
  it "should return false to has_snow? if no snow exists" do
85
- @text.value = "foo"
86
- @text.has_snow?.should be_false
85
+ @text.value = "foo snow"
86
+ @text.has_snow?.should be_true
87
87
  end
88
88
 
89
89
  it "should respond to snow_estimate" do
90
90
  @text.respond_to?(:snow_estimate).should be_true
91
91
  end
92
92
 
93
- it "should return [0,1] as the estimate when snow exists but no estimate given" do
94
- @text.snow_estimate.should eql(['0','1'])
93
+ it "should return [0,0] as the estimate when snow exists but no estimate given" do
94
+ @text.snow_estimate.should eql(['0','0'])
95
95
  end
96
96
 
97
97
  it "should return zeros when no snow exists" do
98
- @text.value = "foo"
99
- @text.snow_estimate.should eql(['0','0'])
98
+ @text.value = "foo New snow accumulation of 0 to 1"
99
+ @text.snow_estimate.should eql(['0','1'])
100
100
  end
101
101
 
102
102
  it "should return the proper snow estimate when range is given" do
@@ -191,7 +191,7 @@ describe Ullr do
191
191
  end
192
192
 
193
193
  it "should have a url" do
194
- @icon_link.url.should eql("http://forecast.weather.gov/images/wtf/sn20.jpg")
194
+ @icon_link.url.should eql("http://forecast.weather.gov/images/wtf/medium/sct.png")
195
195
  end
196
196
  end
197
197
 
@@ -224,7 +224,7 @@ describe Ullr do
224
224
  end
225
225
 
226
226
  it "should have a weather_summary" do
227
- @weather_conditions.weather_summary.should eql("Slight Chc Snow")
227
+ @weather_conditions.weather_summary.should eql("Mostly Sunny")
228
228
  end
229
229
  end
230
230
 
@@ -332,7 +332,7 @@ describe Ullr do
332
332
  end
333
333
 
334
334
  it "should have a DateTime period_start" do
335
- @start_valid_time.period_start.should eql(DateTime.parse('2011-12-18T12:00:00-08:00'))
335
+ @start_valid_time.period_start.should eql(DateTime.parse('2012-11-06T12:00:00-08:00'))
336
336
  end
337
337
  end
338
338
  end
@@ -516,15 +516,15 @@ describe Ullr do
516
516
 
517
517
  it "should decoreate an object with correct min temp data" do
518
518
  @min = @temps[:minimum].first
519
- @min.temperature.should eql('25')
520
- @min.start_time.should eql(DateTime.parse('2011-12-18T18:00:00-08:00'))
519
+ @min.temperature.should eql('36')
520
+ @min.start_time.should eql(DateTime.parse('2012-11-06T18:00:00-08:00'))
521
521
  @min.period_name.should eql('Tonight')
522
522
  end
523
523
 
524
524
  it "should decoreate an object with correct max temp data" do
525
525
  @max = @temps[:maximum].first
526
- @max.temperature.should eql('39')
527
- @max.start_time.should eql(DateTime.parse('2011-12-18T12:00:00-08:00'))
526
+ @max.temperature.should eql('57')
527
+ @max.start_time.should eql(DateTime.parse('2012-11-06T12:00:00-08:00'))
528
528
  @max.period_name.should eql('This Afternoon')
529
529
  end
530
530
  end
data/ullr-0.1.0.gem ADDED
Binary file
data/ullr-0.1.1.gem ADDED
Binary file
data/ullr-0.1.2.gem ADDED
Binary file
data/ullr-0.1.3.gem ADDED
Binary file
data/ullr.gemspec ADDED
@@ -0,0 +1,35 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{ullr}
5
+ s.version = "0.1.4"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = [%q{Timmy Crawford}]
9
+ s.date = %q{2011-12-28}
10
+ s.description = %q{ullr is a little gem that consumes NOAA weather xml for a given lat/long, and returns an array of data with 12 hour forecasts along with some sugar to let you know if any sugar will be falling from the sky.}
11
+ s.email = %q{timmydcrawford@gmail.com}
12
+ s.executables = [%q{ullr}]
13
+ s.extra_rdoc_files = [%q{History.txt}, %q{bin/ullr}]
14
+ s.files = [%q{.bnsignore}, %q{History.txt}, %q{README.md}, %q{Rakefile}, %q{bin/ullr}, %q{lib/ullr.rb}, %q{lib/ullr/noaa.rb}, %q{lib/ullr/forecast.rb}, %q{spec/spec_helper.rb}, %q{spec/ullr_spec.rb}, %q{version.txt}]
15
+ s.homepage = %q{https://github.com/timmyc/ullr}
16
+ s.rdoc_options = [%q{--main}, %q{README.md}]
17
+ s.require_paths = [%q{lib}]
18
+ s.rubyforge_project = %q{ullr}
19
+ s.rubygems_version = %q{1.8.6}
20
+ s.summary = %q{ullr consumes NOAA weather xml for a given lat/long, and returns an array of forecast data.}
21
+ s.test_files = [%q{spec/ullr_spec.rb}]
22
+ s.add_dependency(%q<happymapper>, [">=0.4.0"])
23
+
24
+ if s.respond_to? :specification_version then
25
+ s.specification_version = 3
26
+
27
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
28
+ s.add_development_dependency(%q<bones>, [">= 3.7.3"])
29
+ else
30
+ s.add_dependency(%q<bones>, [">= 3.7.3"])
31
+ end
32
+ else
33
+ s.add_dependency(%q<bones>, [">= 3.7.3"])
34
+ end
35
+ end
data/version.txt CHANGED
@@ -1 +1 @@
1
- 0.1.3
1
+ 0.1.4
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ullr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,22 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-28 00:00:00.000000000Z
12
+ date: 2012-11-06 00:00:00.000000000Z
13
13
  dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: happymapper
16
- requirement: &70173084964980 !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: 0.4.0
22
- type: :runtime
23
- prerelease: false
24
- version_requirements: *70173084964980
25
14
  - !ruby/object:Gem::Dependency
26
15
  name: bones
27
- requirement: &70173084963640 !ruby/object:Gem::Requirement
16
+ requirement: &70290534088780 !ruby/object:Gem::Requirement
28
17
  none: false
29
18
  requirements:
30
19
  - - ! '>='
@@ -32,10 +21,10 @@ dependencies:
32
21
  version: 3.7.3
33
22
  type: :development
34
23
  prerelease: false
35
- version_requirements: *70173084963640
24
+ version_requirements: *70290534088780
36
25
  description: ullr is a little gem that consumes NOAA weather xml for a given lat/long,
37
- and returns an array of data with 12 hour forecasts along with some sugar to let
38
- you know if any sugar will be falling from the sky.
26
+ and returns a ruby object with 12 hour forecasts along with some sugar to let you
27
+ know if any sugar will be falling from the sky.
39
28
  email: timmydcrawford@gmail.com
40
29
  executables:
41
30
  - ullr
@@ -45,15 +34,22 @@ extra_rdoc_files:
45
34
  - bin/ullr
46
35
  files:
47
36
  - .bnsignore
37
+ - .rvmrc
48
38
  - History.txt
49
39
  - README.md
50
40
  - Rakefile
51
41
  - bin/ullr
52
42
  - lib/ullr.rb
53
- - lib/ullr/noaa.rb
54
43
  - lib/ullr/forecast.rb
44
+ - lib/ullr/noaa.rb
45
+ - spec/fixtures/noaa.xml
55
46
  - spec/spec_helper.rb
56
47
  - spec/ullr_spec.rb
48
+ - ullr-0.1.0.gem
49
+ - ullr-0.1.1.gem
50
+ - ullr-0.1.2.gem
51
+ - ullr-0.1.3.gem
52
+ - ullr.gemspec
57
53
  - version.txt
58
54
  homepage: https://github.com/timmyc/ullr
59
55
  licenses: []
@@ -80,7 +76,7 @@ rubyforge_project: ullr
80
76
  rubygems_version: 1.8.6
81
77
  signing_key:
82
78
  specification_version: 3
83
- summary: ullr consumes NOAA weather xml for a given lat/long, and returns an array
84
- of forecast data.
85
- test_files:
86
- - spec/ullr_spec.rb
79
+ summary: ullr is a little gem that consumes NOAA weather xml for a given lat/long,
80
+ and returns a ruby object with 12 hour forecasts along with some sugar to let you
81
+ know if any sugar will be falling from the sky.
82
+ test_files: []