weather_jp 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,3 +2,6 @@ language: ruby
2
2
  rvm:
3
3
  - 1.9.2
4
4
  - 1.9.3
5
+ notifications:
6
+ email: false
7
+
@@ -0,0 +1,7 @@
1
+ v 1.0.0
2
+
3
+ Add parse method to WeatherJp
4
+
5
+ see READEME for more description
6
+
7
+ ----
@@ -37,6 +37,10 @@ tsuyama = WeatherJp.get "津山"
37
37
  tokyo.today.to_s
38
38
  #=> これは "東京都 東京の天気は曇りのち晴れ、最高気温34度...etc" になります
39
39
 
40
+ # もしくは解析したい文字列があるなら
41
+ WeatherJp.parse("今日のうどん県の天気教えて下され〜〜").to_s
42
+ #=> "香川県 高松の今日の天気は曇のち晴れ 最高気温25度 最低気温17度 降水確率は20% です。"
43
+
40
44
  # Weather オブジェクトを取得するいくつかの方法
41
45
  akiba.get_weather(4) #=> <#DayWeather object>
42
46
  tokyo.today.forecast #=> can be "晴れ"
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- [![Build Status](https://secure.travis-ci.org/Taiki45/weather_jp.png?branch=master)](http://travis-ci.org/Taiki45/weather_jp)
1
+ [![Build Status](https://secure.travis-ci.org/taiki45/weather_jp.png)](http://travis-ci.org/taiki45/weather_jp)
2
2
 
3
3
  ## About
4
4
 
@@ -37,6 +37,10 @@ tsuyama = WeatherJp.get "津山"
37
37
  tokyo.today.to_s
38
38
  #=> can be "東京都 東京の天気は曇りのち晴れ、最高気温34度...etc"
39
39
 
40
+ # or your have unparsed string
41
+ WeatherJp.parse("今日のうどん県の天気教えて下され〜〜").to_s
42
+ #=> "香川県 高松の今日の天気は曇のち晴れ 最高気温25度 最低気温17度 降水確率は20% です。"
43
+
40
44
  # to get weather info in differrnt ways
41
45
  akiba.get_weather(4) #=> <#DayWeather object>
42
46
  tokyo.today.forecast #=> can be "晴れ"
@@ -7,7 +7,6 @@ require 'rss'
7
7
  require 'nokogiri'
8
8
 
9
9
  module WeatherJp
10
-
11
10
  class << self
12
11
  def get(city_name, option = nil)
13
12
  if option
@@ -31,26 +30,28 @@ module WeatherJp
31
30
 
32
31
  def parser(str)
33
32
  if str =~ /((?<city>.*)の
34
- (?<day>今日|きょう|明日|あした|明後日|あさって|3日後|4日後|3日後|4日後)の(天気|てんき).*) |
35
- ((?<day>今日|きょう|明日|あした|明後日|あさって|3日後|4日後|3日後|4日後)
36
- (?<city>.*)の(天気|てんき))/ux then
37
- data = Regexp.last_match
38
- day = data[:day]
39
- case day
40
- when /今日|きょう/u
41
- day = 'today'
42
- when /明日|あした/u
43
- day = 'tomorrow'
44
- when /明後日|あさって/u
45
- day = 'day_after_tomorrow'
46
- when /3日後|3日後/u
47
- day = 3
48
- when /4日後|4日後/u
49
- day = 4
50
- else
51
- raise "No matched"
52
- end
53
- {day: day, city: data[:city]}
33
+ (?<day>今日|きょう|明日|あした|明後日|あさって|3日後|4日後|3日後|4日後)
34
+ (天気|てんき).*) |
35
+ ((?<day>今日|きょう|明日|あした|明後日|あさって|3日後|4日後|3日後|4日後)の
36
+ (?<city>.*)の(天気|てんき))
37
+ /ux
38
+ data = Regexp.last_match
39
+ day = data[:day]
40
+ case day
41
+ when /今日|きょう/u
42
+ day = 'today'
43
+ when /明日|あした/u
44
+ day = 'tomorrow'
45
+ when /明後日|あさって/u
46
+ day = 'day_after_tomorrow'
47
+ when /3日後|3日後/u
48
+ day = 3
49
+ when /4日後|4日後/u
50
+ day = 4
51
+ else
52
+ raise "No matched"
53
+ end
54
+ {day: day, city: data[:city]}
54
55
  else
55
56
  nil
56
57
  end
@@ -61,9 +62,7 @@ module WeatherJp
61
62
  include Enumerable
62
63
 
63
64
  def initialize(city_name)
64
- city_name = city_name.to_s if city_name.class == Symbol
65
- @area_code, @city_name = get_area_code(city_name)
66
- @weathers = set_weathers
65
+ @area_code, @city_name, @weathers = Wrapper.get(city_name)
67
66
  @day_weathers = Array.new(@weathers.size) do |n|
68
67
  DayWeather.new(@weathers,@city_name, n)
69
68
  end
@@ -71,7 +70,6 @@ module WeatherJp
71
70
 
72
71
  attr_reader :city_name, :area_code, :day_weathers
73
72
 
74
- public
75
73
  def to_hash
76
74
  @weathers
77
75
  end
@@ -109,35 +107,36 @@ module WeatherJp
109
107
  get_weather(s)
110
108
  end
111
109
  end
110
+ end
112
111
 
113
- private
114
- def set_weathers
115
- begin
116
- weathers = Array.new
117
- get_weather_data.each do |i|
118
- h = Hash.new
119
- h[:day] = i.slice(/(.*?):\s+(.*?)\./, 1)
120
- h[:forecast] = i.slice(/(.*?):\s+(.*?)\./, 2)
121
- h[:max_temp] = i.slice(/(最高).*?(\d+)/u, 2)
122
- h[:min_temp] = i.slice(/(最低).*?(\d+)/u, 2)
123
- h[:rain] = i.slice(/(降水確率).*?(\d+)/u, 2)
124
- weathers << h
112
+ module Wrapper
113
+ class << self
114
+ def get(city_name)
115
+ area_code, city_name = get_area_code(city_name.to_s)
116
+ weathers = set_weathers(parse_rss(get_rss(area_code)))
117
+ [area_code, city_name, weathers]
118
+ end
119
+
120
+ def get_area_code(city_name)
121
+ get_xml city_name do |xml|
122
+ parse_xml xml
125
123
  end
126
- weathers
127
- rescue
128
- raise StandardError,
129
- "the MSN weather sever may be downed, or something wrong"
130
124
  end
131
- end
132
125
 
133
- def get_area_code(city_name)
134
- uri = URI.encode(
135
- "http://weather.service.msn.com/" + \
136
- "find.aspx?outputview=search&weadegreetype=C&culture=ja-JP&" + \
137
- "weasearchstr=#{city_name}")
138
- doc = Nokogiri::XML(open(uri))
126
+ def get_xml(city_name)
127
+ result = []
128
+ open(URI.encode("http://weather.service.msn.com/" +
129
+ "find.aspx?outputview=search&weadegreetype=C&culture=ja-JP&" +
130
+ "weasearchstr=#{city_name}")) do |xml|
131
+ result = yield xml
132
+ end
133
+ result
134
+ end
135
+
136
+ def parse_xml(xml)
137
+ doc = Nokogiri::XML(xml)
139
138
  begin
140
- code =
139
+ code =
141
140
  doc.xpath('//weather').attr('weatherlocationcode').value
142
141
  full_name =
143
142
  doc.xpath('//weather').attr('weatherlocationname').value
@@ -146,36 +145,51 @@ module WeatherJp
146
145
  "invaild city name '#{city_name}'!"
147
146
  end
148
147
  [code.slice(3..-1), full_name]
149
- end
150
-
151
-
152
- def get_weather_data
153
- parse_rss(get_rss)
154
- end
148
+ end
155
149
 
156
- def get_rss
157
- begin
158
- uri = URI.parse(
159
- "http://weather.jp.msn.com/" + \
160
- "RSS.aspx?wealocations=wc:#{@area_code}&" + \
161
- "weadegreetype=C&culture=ja-JP")
150
+ def get_rss(area_code)
151
+ begin
152
+ uri = URI.parse(
153
+ "http://weather.jp.msn.com/" +
154
+ "RSS.aspx?wealocations=wc:#{area_code}&" +
155
+ "weadegreetype=C&culture=ja-JP"
156
+ )
162
157
  RSS::Parser.parse(uri, false)
163
- rescue
164
- raise StandardError,
165
- "the MSN weather sever may be downed, or got invaild city code"
158
+ rescue
159
+ raise StandardError,
160
+ "the MSN weather sever may be downed, or got invaild city code"
161
+ end
166
162
  end
167
- end
168
163
 
169
- def parse_rss(rss)
170
- str = rss.channel.item(0).description
171
- data = remove_html_tag(str).split(/%/)
172
- data.pop
173
- data.map {|i| i.delete!('"') }
174
- end
164
+ def parse_rss(rss)
165
+ str = rss.channel.item(0).description
166
+ data = remove_html_tag(str).split(/%/)
167
+ data.pop
168
+ data.map {|i| i.delete!('"') }
169
+ end
170
+
171
+ def remove_html_tag(str)
172
+ str.gsub(/<(\"[^\"]*\"|'[^']*'|[^'\">])*>/,'""')
173
+ end
175
174
 
176
- def remove_html_tag(string)
177
- string.gsub!(/<(\"[^\"]*\"|'[^']*'|[^'\">])*>/,'""')
175
+ def set_weathers(raw_data)
176
+ weathers = Array.new
177
+ begin
178
+ raw_data.each do |i|
179
+ h = Hash.new
180
+ h[:day] = i.slice(/(.*?):\s+(.*?)\./, 1)
181
+ h[:forecast] = i.slice(/(.*?):\s+(.*?)\./, 2)
182
+ h[:max_temp] = i.slice(/(最高).*?(\d+)/u, 2)
183
+ h[:min_temp] = i.slice(/(最低).*?(\d+)/u, 2)
184
+ h[:rain] = i.slice(/(降水確率).*?(\d+)/u, 2)
185
+ weathers << h
186
+ end
187
+ weathers
188
+ rescue
189
+ raise StandardError,
190
+ "the MSN weather sever may be downed, or something wrong"
191
+ end
192
+ end
178
193
  end
179
194
  end
180
195
  end
181
-
@@ -1,3 +1,3 @@
1
1
  module WeatherJp
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
@@ -2,14 +2,13 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  describe "DayWeather" do
5
- before(:all) do
6
- @tokyo = WeatherJp::Weather.new(:tokyo)
7
- @weather = @tokyo.get_weather(:today)
5
+ before :all do
6
+ @weather = WeatherJp.get(:tokyo, :today)
8
7
  end
9
8
 
10
9
  describe "#initialize" do
11
10
  it "should have @city_name" do
12
- @weather.city_name.should == "東京都 東京"
11
+ @weather.city_name.should == "tokyo"
13
12
  end
14
13
 
15
14
  it "should have @weather as Hash" do
@@ -22,15 +21,9 @@ describe "DayWeather" do
22
21
  it "should return String" do
23
22
  @weather.inspect.class.should == String
24
23
  end
25
- end
26
24
 
27
- describe "#to_s" do
28
- it "should return String" do
29
- @weather.to_s.class.should == String
30
- end
31
-
32
- it "should be certain string format" do
33
- @weather.to_s.should =~ /東京都\s東京の今日の天気は.*\sです。/u
25
+ it "should have certain format" do
26
+ @weather.inspect.should == "#<DayWeather:@city_name = tokyo, @day=今日, @forecast=晴のち雨, @max_temp=29, @min_temp=24, @rain=80>"
34
27
  end
35
28
  end
36
29
 
@@ -73,3 +66,4 @@ describe "DayWeather" do
73
66
  end
74
67
  end
75
68
  end
69
+
@@ -6,12 +6,27 @@ require 'rubygems'
6
6
  require 'nokogiri'
7
7
  require 'weather_jp'
8
8
 
9
+ module WeatherJp::Wrapper
10
+ class << self
11
+ def get_area_code(city_name)
12
+ ["JAXX0085", 'tokyo']
13
+ end
14
+
15
+ def get_rss(area_code)
16
+ get_dummy_rss
17
+ end
18
+ end
19
+ end
20
+
9
21
  def fixture_path
10
22
  File.expand_path('../fixture/', __FILE__)
11
23
  end
12
24
 
13
- def rss_one
14
- file = open(fixture_path + '/RSS.rss')
15
- yield file.read
16
- file.close
25
+ def get_dummy_rss
26
+ rss = ''
27
+ open(fixture_path + '/RSS.rss') do |file|
28
+ rss = RSS::Parser.parse(file.read)
29
+ end
30
+ rss
17
31
  end
32
+
@@ -2,7 +2,7 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  describe "WeatherJp" do
5
- before(:all) do
5
+ before :all do
6
6
  @weather = WeatherJp.get :tokyo
7
7
  end
8
8
 
@@ -24,28 +24,22 @@ describe "WeatherJp" do
24
24
  end
25
25
  end
26
26
 
27
- describe ".parse" do
28
- WeatherJp.parse("今日の東京の天気教えて").to_s.should =~ /東京都\s東京の今日の天気は.*です。/u
29
- end
30
-
31
- describe ".parser" do
32
- {"東京の今日の天気" => {day: "today", city: "東京"},
33
- "今日の東京の天気" => {day: "today", city: "東京"},
34
- "東京の明日の天気" => {day: "tomorrow", city: "東京"},
35
- "東京の明後日の天気" => {day: "day_after_tomorrow", city: "東京"},
36
- "東京の3日後の天気" => {day: 3, city: "東京"},
37
- "東京の3日後の天気" => {day: 3, city: "東京"},
38
- "東京の4日後の天気" => {day: 4, city: "東京"},
39
- "東京の4日後の天気" => {day: 4, city: "東京"},
40
- "東京の今日の天気教えて〜" => {day: "today", city: "東京"},
41
- #"ねえ、東京の今日の天気教えなさいよ" => {day: "today", city: "東京"},
42
- #"ε( ε^o^)э東京の今日の天気教えてほしいでし…!" => {day: "today", city: "東京"},
43
- "あきるの市の今日の天気" => {day: "today", city: "あきるの市"},
44
- "あきるの市の今日の天気教えなさい" => {day: "today", city: "あきるの市"},
45
- "今日のあきるの市の天気" => {day: "today", city: "あきるの市"}
46
- }.each do |test, expect|
47
- WeatherJp.parser(test).should == expect
48
- end
27
+ describe ".parser" do
28
+ {"東京の今日の天気" => {day: "today", city: "東京"},
29
+ "今日の東京の天気" => {day: "today", city: "東京"},
30
+ "東京の明日の天気" => {day: "tomorrow", city: "東京"},
31
+ "東京の明後日の天気" => {day: "day_after_tomorrow", city: "東京"},
32
+ "東京の3日後の天気" => {day: 3, city: "東京"},
33
+ "東京の3日後の天気" => {day: 3, city: "東京"},
34
+ "東京の4日後の天気" => {day: 4, city: "東京"},
35
+ "東京の4日後の天気" => {day: 4, city: "東京"},
36
+ "東京の今日の天気教えて〜" => {day: "today", city: "東京"},
37
+ "あきるの市の今日の天気" => {day: "today", city: "あきるの市"},
38
+ "あきるの市の今日の天気教えなさい" => {day: "today", city: "あきるの市"},
39
+ "今日のあきるの市の天気" => {day: "today", city: "あきるの市"}
40
+ }.each do |test, expect|
41
+ WeatherJp.parser(test).should == expect
49
42
  end
43
+ end
50
44
  end
51
45
 
@@ -13,18 +13,9 @@ describe "Weather" do
13
13
  @weather.area_code.should == "JAXX0085"
14
14
  end
15
15
 
16
- it "should have @city_name and can access" do
17
- @weather.city_name.should == "東京都 東京"
18
- end
19
-
20
- it "should accept String argument" do
21
- weather = WeatherJp::Weather.new "東京都府中市"
22
- weather.city_name.should == "東京都 府中市"
23
- end
24
-
25
16
  it "should accept Symbol argument" do
26
17
  weather = WeatherJp::Weather.new :tokyo
27
- weather.city_name.should == "東京都 東京"
18
+ weather.city_name.should == "tokyo"
28
19
  end
29
20
 
30
21
  it "should have @day_weathers as Array" do
@@ -42,16 +33,6 @@ describe "Weather" do
42
33
  end
43
34
  end
44
35
 
45
- describe "#get_area_code" do
46
- it "should get vaild area code" do
47
- @weather.area_code.should == "JAXX0085"
48
- end
49
-
50
- it "should raise error when invaild city name taken" do
51
- WeatherJp::Weather.new(:aaa).city_name.should == "アメリカ合衆国 マイアミ"
52
- end
53
- end
54
-
55
36
  describe "#to_hash" do
56
37
  it "should return Array and include Hashs" do
57
38
  @weather.to_hash.class.should == Array
@@ -141,55 +122,4 @@ describe "Weather" do
141
122
  end
142
123
  end
143
124
  end
144
-
145
- describe "with fixtures" do
146
- before :all do
147
- dummy = ''
148
- rss_one {|rss| dummy = RSS::Parser.parse rss }
149
- WeatherJp::Weather.class_exec dummy do |dummy|
150
- alias :back_code :get_area_code
151
- alias :back_rss :get_rss
152
- define_method(:get_area_code) {|city_name| ["JAXX0085", 'tokyo'] }
153
- define_method(:get_rss) { dummy }
154
- end
155
- @weather = WeatherJp::Weather.new(:tokyo)
156
- end
157
-
158
- describe "#set_weathers" do
159
- it "should have vaild data" do
160
- expect = [{:day=>"今日", :forecast=>"晴のち雨", :max_temp=>"29", :min_temp=>"24", :rain=>"80"},
161
- {:day=>"明日", :forecast=>"雨のち晴", :max_temp=>"30", :min_temp=>"22", :rain=>"60"},
162
- {:day=>"火曜日", :forecast=>"曇時々晴", :max_temp=>"27", :min_temp=>"22", :rain=>"30"},
163
- {:day=>"水曜日", :forecast=>"曇時々雨", :max_temp=>"25", :min_temp=>"20", :rain=>"50"},
164
- {:day=>"木曜日", :forecast=>"曇り", :max_temp=>"28", :min_temp=>"20", :rain=>"40"}
165
- ]
166
- @weather.to_hash.should == expect
167
- end
168
- end
169
-
170
- describe "#get_weather_data" do
171
- describe "#parse_rss" do
172
- it "should parse rss data" do
173
- expect = ["今日: 晴のち雨. 最低: 24&#176;C. 最高: 29&#176;C. 降水確率: 80", "明日: 雨のち晴. 最低: 22&#176;C. 最高: 30&#176;C. 降水確率: 60", "火曜日: 曇時々晴. 最低: 22&#176;C. 最高: 27&#176;C. 降水確率: 30", "水曜日: 曇時々雨. 最低: 20&#176;C. 最高: 25&#176;C. 降水確率: 50", "木曜日: 曇り. 最低: 20&#176;C. 最高: 28&#176;C. 降水確率: 40"]
174
- rss_one do |rss|
175
- @weather.send(:parse_rss, RSS::Parser.parse(rss)).should == expect
176
- end
177
- end
178
- end
179
-
180
- describe "#remove_html_tag" do
181
- it "should remove html tags" do
182
- data = %q(<html>a<a href="dummy">b</a><span>c</sapan></html>)
183
- @weather.send(:remove_html_tag, data).should == %(""a""b""""c"""")
184
- end
185
- end
186
- end
187
-
188
- after :all do
189
- WeatherJp::Weather.class_exec do
190
- alias :get_area_code :back_code
191
- alias :get_rss :back_rss
192
- end
193
- end
194
- end
195
125
  end
@@ -0,0 +1,32 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ describe "Wrapper" do
5
+ describe ".set_weathers" do
6
+ it "should make vaild data" do
7
+ expect = [{:day=>"今日", :forecast=>"晴のち雨", :max_temp=>"29", :min_temp=>"24", :rain=>"80"},
8
+ {:day=>"明日", :forecast=>"雨のち晴", :max_temp=>"30", :min_temp=>"22", :rain=>"60"},
9
+ {:day=>"火曜日", :forecast=>"曇時々晴", :max_temp=>"27", :min_temp=>"22", :rain=>"30"},
10
+ {:day=>"水曜日", :forecast=>"曇時々雨", :max_temp=>"25", :min_temp=>"20", :rain=>"50"},
11
+ {:day=>"木曜日", :forecast=>"曇り", :max_temp=>"28", :min_temp=>"20", :rain=>"40"}
12
+ ]
13
+ dummy_data = ["今日: 晴のち雨. 最低: 24&#176;C. 最高: 29&#176;C. 降水確率: 80", "明日: 雨のち晴. 最低: 22&#176;C. 最高: 30&#176;C. 降水確率: 60", "火曜日: 曇時々晴. 最低: 22&#176;C. 最高: 27&#176;C. 降水確率: 30", "水曜日: 曇時々雨. 最低: 20&#176;C. 最高: 25&#176;C. 降水確率: 50", "木曜日: 曇り. 最低: 20&#176;C. 最高: 28&#176;C. 降水確率: 40"]
14
+ WeatherJp::Wrapper.set_weathers(dummy_data) == expect
15
+ end
16
+ end
17
+
18
+ describe ".parse_rss" do
19
+ it "should parse rss data" do
20
+ expect = ["今日: 晴のち雨. 最低: 24&#176;C. 最高: 29&#176;C. 降水確率: 80", "明日: 雨のち晴. 最低: 22&#176;C. 最高: 30&#176;C. 降水確率: 60", "火曜日: 曇時々晴. 最低: 22&#176;C. 最高: 27&#176;C. 降水確率: 30", "水曜日: 曇時々雨. 最低: 20&#176;C. 最高: 25&#176;C. 降水確率: 50", "木曜日: 曇り. 最低: 20&#176;C. 最高: 28&#176;C. 降水確率: 40"]
21
+ WeatherJp::Wrapper.parse_rss(get_dummy_rss).should == expect
22
+ end
23
+
24
+ describe ".remove_html_tag" do
25
+ it "should remove html tags" do
26
+ str = %q(<html>a<a href="dummy">b</a><span>c</sapan></html>)
27
+ WeatherJp::Wrapper.remove_html_tag(str).should == %(""a""b""""c"""")
28
+ end
29
+ end
30
+ end
31
+ end
32
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: weather_jp
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.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: 2012-10-01 00:00:00.000000000 Z
12
+ date: 2012-10-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
@@ -85,6 +85,7 @@ files:
85
85
  - .gitignore
86
86
  - .travis.yml
87
87
  - Gemfile
88
+ - HISTORY.md
88
89
  - LICENSE
89
90
  - README.jp.md
90
91
  - README.md
@@ -97,6 +98,7 @@ files:
97
98
  - spec/spec_helper.rb
98
99
  - spec/weather_jp_spec.rb
99
100
  - spec/weather_spec.rb
101
+ - spec/wrapper_spec.rb
100
102
  - weather_jp.gemspec
101
103
  homepage: http://taiki45.github.com/weather_jp
102
104
  licenses: []
@@ -112,7 +114,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
112
114
  version: '0'
113
115
  segments:
114
116
  - 0
115
- hash: 1993595247945938449
117
+ hash: 2403131100939033497
116
118
  required_rubygems_version: !ruby/object:Gem::Requirement
117
119
  none: false
118
120
  requirements:
@@ -121,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
121
123
  version: '0'
122
124
  segments:
123
125
  - 0
124
- hash: 1993595247945938449
126
+ hash: 2403131100939033497
125
127
  requirements: []
126
128
  rubyforge_project:
127
129
  rubygems_version: 1.8.23
@@ -134,3 +136,4 @@ test_files:
134
136
  - spec/spec_helper.rb
135
137
  - spec/weather_jp_spec.rb
136
138
  - spec/weather_spec.rb
139
+ - spec/wrapper_spec.rb