anemoi 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/.gitignore ADDED
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ *.rbc
3
+ *.sw*
4
+ *~
5
+ .bundle
6
+ .config
7
+ .yardoc
8
+ Gemfile.lock
9
+ InstalledFiles
10
+ _yardoc
11
+ coverage
12
+ doc/
13
+ lib/bundler/man
14
+ pkg
15
+ rdoc
16
+ spec/reports
17
+ test/tmp
18
+ test/version_tmp
19
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Ryo NAKAMURA
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,102 @@
1
+ # Anemoi
2
+
3
+ Anemoiに日本語で天気を聞くと天気予報を教えてくれます。
4
+ 天気予報は Livedoor Weather Web Service ( [http://weather.livedoor.com/weather_hacks/](http://weather.livedoor.com/weather_hacks/) )からお借りしています。
5
+
6
+ ## Installation
7
+
8
+ Add this line to your application's Gemfile:
9
+
10
+ gem 'anemoi'
11
+
12
+ And then execute:
13
+
14
+ $ bundle
15
+
16
+ Or install it yourself as:
17
+
18
+ $ gem install anemoi
19
+
20
+ ## Usage
21
+
22
+ ```
23
+ $ anemoi 明日の天気
24
+ ```
25
+
26
+ or
27
+
28
+ ```ruby
29
+ require 'anemoi'
30
+ require 'awesome_print'
31
+
32
+ ap Anemoi.get_weather('明日の群馬の天気ください')
33
+
34
+ {
35
+ :specified => {
36
+ :date => :tomorrow,
37
+ :city => {
38
+ :id => 58,
39
+ :name => "前橋"
40
+ }
41
+ },
42
+ :forecastday => :tomorrow,
43
+ :forecastdate => "Sun, 22 Jul 2012 00:00:00 +0900",
44
+ :day => "Sunday",
45
+ :location => {
46
+ :area => "関東",
47
+ :pref => "群馬県",
48
+ :city => "前橋"
49
+ },
50
+ :weather => "曇時々雨",
51
+ :description => "北部では、22日朝まで土砂災害に注意して下さい。群馬県では、22日朝まで濃霧による視程障害に注意して下さい。\n\nオホーツク海高気圧が東日本に張り出しています...",
52
+ :temperature => {
53
+ :max => {
54
+ :celsius => "25",
55
+ :fahrenheit => "77"
56
+ },
57
+ :min => {
58
+ :celsius => "19",
59
+ :fahrenheit => "66.2"
60
+ }
61
+ }
62
+ }
63
+
64
+ ac = Anemoi::Client.new(default_city: "京都")
65
+ ap ac.get_weather('明日のお天気お願いします〜〜')
66
+
67
+ {
68
+ :specified => {
69
+ :date => :tomorrow,
70
+ :city => nil
71
+ },
72
+ :forecastday => :tomorrow,
73
+ :forecastdate => "Sun, 22 Jul 2012 00:00:00 +0900",
74
+ :day => "Sunday",
75
+ :location => {
76
+ :area => "近畿",
77
+ :pref => "京都府",
78
+ :city => "京都"
79
+ },
80
+ :weather => "曇のち雨",
81
+ :description => "京都府では、21日夜遅くまで急な強い雨や落雷に注意して下さい。\n\n近畿地方は、湿った空気の影響で、雲が広がり、中部では非常に激しい雨の降っているところがあ...",
82
+ :temperature => {
83
+ :max => {
84
+ :celsius => "29",
85
+ :fahrenheit => "84.2"
86
+ },
87
+ :min => {
88
+ :celsius => "23",
89
+ :fahrenheit => "73.4"
90
+ }
91
+ }
92
+ }
93
+ ```
94
+
95
+ Livedoor Weather Web Service に依存しているため、取得できる地域は [RSSフィード一覧](http://weather.livedoor.com/weather_hacks/rss_feed_list.html) の142箇所に限られます。
96
+ 今日、明日、明後日の3日間に対応。
97
+
98
+ ## Dependency
99
+
100
+ gem 'horai'
101
+ gem 'httparty'
102
+
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
data/anemoi.gemspec ADDED
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/anemoi/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["kkosuge"]
6
+ gem.email = ["kkosuge@about.me"]
7
+ gem.description = %q{get weather forecast from expression with natural language (ONLY IN JAPANESE)}
8
+ gem.summary = %q{get weather forecast from expression with natural language (ONLY IN JAPANESE)}
9
+ gem.homepage = "https://github.com/kkosuge/Anemoi"
10
+
11
+ gem.files = `git ls-files`.split($\)
12
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
+ gem.name = "anemoi"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = Anemoi::VERSION
17
+
18
+ gem.add_dependency "httparty"
19
+ gem.add_dependency "horai"
20
+ gem.add_development_dependency "rspec"
21
+ end
data/bin/anemoi ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "pp"
4
+ require "date"
5
+
6
+ text = ARGV[0]
7
+ unless text
8
+ puts "Usage: anemoi [明日の天気]"
9
+ exit!
10
+ end
11
+
12
+ $LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
13
+ require "anemoi"
14
+
15
+ pp Anemoi.get_weather(text)
@@ -0,0 +1,205 @@
1
+ # encoding: utf-8
2
+
3
+ module Anemoi
4
+ class AreaParser
5
+ ID_BY_CITY = {
6
+ "稚内" => 1,
7
+ "旭川" => 2,
8
+ "留萌" => 3,
9
+ "札幌" => 4,
10
+ "岩見沢" => 5,
11
+ "倶知安" => 6,
12
+ "網走" => 7,
13
+ "北見" => 8,
14
+ "紋別" => 9,
15
+ "根室" => 10,
16
+ "釧路" => 11,
17
+ "帯広" => 12,
18
+ "室蘭" => 13,
19
+ "浦河" => 14,
20
+ "函館" => 15,
21
+ "江差" => 16,
22
+ "青森" => 17,
23
+ "むつ" => 18,
24
+ "八戸" => 19,
25
+ "秋田" => 20,
26
+ "横手" => 21,
27
+ "盛岡" => 22,
28
+ "大船渡" => 24,
29
+ "仙台" => 25,
30
+ "白石" => 26,
31
+ "山形" => 27,
32
+ "米沢" => 28,
33
+ "酒田" => 29,
34
+ "新庄" => 30,
35
+ "福島" => 31,
36
+ "小名浜" => 32,
37
+ "若松" => 33,
38
+ "水戸" => 54,
39
+ "土浦" => 55,
40
+ "宇都宮" => 56,
41
+ "大田原" => 57,
42
+ "前橋" => 58,
43
+ "みなかみ" => 59,
44
+ "さいたま" => 60,
45
+ "熊谷" => 61,
46
+ "秩父" => 62,
47
+ "東京" => 63,
48
+ "大島" => 64,
49
+ "八丈島" => 65,
50
+ "父島" => 66,
51
+ "千葉" => 67,
52
+ "銚子" => 68,
53
+ "館山" => 69,
54
+ "横浜" => 70,
55
+ "小田原" => 71,
56
+ "甲府" => 75,
57
+ "河口湖" => 76,
58
+ "富山" => 44,
59
+ "伏木" => 45,
60
+ "金沢" => 46,
61
+ "輪島" => 47,
62
+ "福井" => 48,
63
+ "敦賀" => 49,
64
+ "新潟" => 50,
65
+ "長岡" => 51,
66
+ "高田" => 52,
67
+ "相川" => 53,
68
+ "長野" => 72,
69
+ "松本" => 73,
70
+ "飯田" => 74,
71
+ "静岡" => 34,
72
+ "網代" => 35,
73
+ "三島" => 36,
74
+ "浜松" => 37,
75
+ "名古屋" => 38,
76
+ "豊橋" => 39,
77
+ "岐阜" => 40,
78
+ "高山" => 41,
79
+ "尾鷲" => 43,
80
+ "大津" => 77,
81
+ "彦根" => 78,
82
+ "京都" => 79,
83
+ "舞鶴" => 80,
84
+ "大阪" => 81,
85
+ "神戸" => 82,
86
+ "豊岡" => 83,
87
+ "奈良" => 84,
88
+ "風屋" => 85,
89
+ "和歌山" => 86,
90
+ "潮岬" => 87,
91
+ "岡山" => 88,
92
+ "津山" => 89,
93
+ "広島" => 90,
94
+ "庄原" => 91,
95
+ "松江" => 92,
96
+ "浜田" => 93,
97
+ "西郷" => 94,
98
+ "鳥取" => 95,
99
+ "米子" => 96,
100
+ "下関" => 97,
101
+ "山口" => 98,
102
+ "柳井" => 99,
103
+ "萩" => 100,
104
+ "徳島" => 101,
105
+ "日和佐" => 102,
106
+ "高松" => 103,
107
+ "松山" => 104,
108
+ "新居浜" => 105,
109
+ "宇和島" => 106,
110
+ "高知" => 107,
111
+ "室戸" => 108,
112
+ "清水" => 109,
113
+ "福岡" => 110,
114
+ "八幡" => 111,
115
+ "飯塚" => 112,
116
+ "久留米" => 113,
117
+ "大分" => 114,
118
+ "中津" => 115,
119
+ "日田" => 116,
120
+ "佐伯" => 117,
121
+ "長崎" => 118,
122
+ "佐世保" => 119,
123
+ "厳原" => 120,
124
+ "福江" => 121,
125
+ "佐賀" => 122,
126
+ "伊万里" => 123,
127
+ "熊本" => 124,
128
+ "阿蘇乙姫" => 125,
129
+ "牛深" => 126,
130
+ "人吉" => 127,
131
+ "宮崎" => 128,
132
+ "延岡" => 129,
133
+ "都城" => 130,
134
+ "高千穂" => 131,
135
+ "鹿児島" => 132,
136
+ "鹿屋" => 133,
137
+ "種子島" => 134,
138
+ "名瀬" => 135,
139
+ "那覇" => 136,
140
+ "名護" => 137,
141
+ "久米島" => 138,
142
+ "南大東島" => 139,
143
+ "宮古島" => 140,
144
+ "石垣島" => 141,
145
+ "与那国島" => 142,
146
+ "津" => 42,
147
+ "宮古" => 23
148
+ }
149
+
150
+ CITY_BY_PREF = {
151
+ "北海" => "札幌",
152
+ "岩手" => "盛岡",
153
+ "宮城" => "仙台",
154
+ "茨城" => "水戸",
155
+ "栃木" => "宇都宮",
156
+ "群馬" => "前橋",
157
+ "埼玉" => "さいたま",
158
+ "神奈川" => "横浜",
159
+ "山梨" => "甲府",
160
+ "富山" => "富山",
161
+ "石川" => "金沢",
162
+ "長野" => "長野",
163
+ "愛知" => "名古屋",
164
+ "三重" => "津",
165
+ "滋賀" => "大津",
166
+ "兵庫" => "神戸",
167
+ "島根" => "松江",
168
+ "香川" => "高松",
169
+ "愛媛" => "松山",
170
+ "沖縄" => "那覇"
171
+ }
172
+
173
+ @@city_regexp = /#{ID_BY_CITY.map(&:first).join('|')}/
174
+ @@pref_regexp = /#{CITY_BY_PREF.map(&:first).join('|')}/
175
+
176
+ class << self
177
+ def parse(text)
178
+ text = canonical_city(text)
179
+ info_by_city(city_by_pref(text))
180
+ end
181
+
182
+ def city_by_pref(text)
183
+ if city = text.match(@@pref_regexp)
184
+ city = city.values_at(0).first
185
+ text.gsub! city, CITY_BY_PREF[city]
186
+ end
187
+ text
188
+ end
189
+
190
+ def info_by_city(text)
191
+ city = text.match(@@city_regexp)
192
+ if city
193
+ name = city.values_at(0).first
194
+ return { :id => ID_BY_CITY[name], :name => name }
195
+ end
196
+ nil
197
+ end
198
+
199
+ def canonical_city(text)
200
+ text.gsub!("東京都","東京")
201
+ text
202
+ end
203
+ end
204
+ end
205
+ end
@@ -0,0 +1,60 @@
1
+ # encoding: utf-8
2
+
3
+ module Anemoi
4
+ class Client
5
+ include HTTParty
6
+
7
+ WEATHER_URL = "http://weather.livedoor.com/forecast/webservice/rest/v1"
8
+ AREA_TABLE_URL = "http://weather.livedoor.com/forecast/rss/forecastmap.xml"
9
+
10
+ def initialize(options={})
11
+ options[:default_city] ||= "東京"
12
+ @default_city = AreaParser.parse(options[:default_city])
13
+ @default_date = options[:default_date] || :today
14
+ end
15
+
16
+ def get_weather(text, opts = {})
17
+ specified_city = AreaParser.parse(text)
18
+ specified_date = horai_date_parse(text)
19
+ city = specified_city || @default_city
20
+ date = specified_date || @default_date
21
+ query = { :city => city[:id], :day => date }.merge(opts)
22
+ hash = get WEATHER_URL, :query => query
23
+
24
+ {
25
+ :specified => {
26
+ :date => specified_date,
27
+ :city => specified_city
28
+ },
29
+ :forecastday => date,
30
+ :forecastdate => hash["lwws"]["forecastdate"],
31
+ :day => hash["lwws"]["day"],
32
+ :location => hash["lwws"]["location"],
33
+ :weather => hash["lwws"]["telop"],
34
+ :description => hash["lwws"]["description"],
35
+ :temperature => hash["lwws"]["temperature"]
36
+ }.deep_symbolize_keys
37
+ rescue ParseError
38
+ nil
39
+ end
40
+
41
+ def horai_date_parse(text)
42
+ @jajp ||= Horai::JaJP.new
43
+ date = @jajp.parse(text)
44
+ now = Date.today
45
+ case date
46
+ when now + 0; :today
47
+ when now + 1; :tomorrow
48
+ when now + 2; :day_after_tomorrow
49
+ else nil
50
+ end
51
+ end
52
+
53
+ private
54
+
55
+ # use HTTParty.get
56
+ def get(*args)
57
+ self.class.get(*args)
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,25 @@
1
+ class Hash
2
+ def transform_keys
3
+ result = {}
4
+ each_key do |key|
5
+ result[yield(key)] = self[key]
6
+ end
7
+ result
8
+ end
9
+
10
+ def symbolize_keys
11
+ transform_keys{ |key| key.to_sym rescue key }
12
+ end
13
+
14
+ def deep_transform_keys(&block)
15
+ result = {}
16
+ each do |key, value|
17
+ result[yield(key)] = value.is_a?(Hash) ? value.deep_transform_keys(&block) : value
18
+ end
19
+ result
20
+ end
21
+
22
+ def deep_symbolize_keys
23
+ deep_transform_keys{ |key| key.to_sym rescue key }
24
+ end
25
+ end
@@ -0,0 +1,3 @@
1
+ module Anemoi
2
+ VERSION = "0.1.1"
3
+ end
data/lib/anemoi.rb ADDED
@@ -0,0 +1,15 @@
1
+ require "httparty"
2
+ require "horai"
3
+ require "date"
4
+
5
+ require "anemoi/version"
6
+ require "anemoi/hash"
7
+ require "anemoi/area_parser"
8
+ require "anemoi/client"
9
+
10
+ module Anemoi
11
+ def self.get_weather(text)
12
+ @@instance ||= Client.new
13
+ @@instance.get_weather(text)
14
+ end
15
+ end
@@ -0,0 +1,48 @@
1
+ # encoding: utf-8
2
+
3
+ require "spec_helper"
4
+
5
+ describe Anemoi::AreaParser do
6
+ describe "#city_by_pref" do
7
+ it "県を入力して県庁所在地を出力する" do
8
+ city = Anemoi::AreaParser.city_by_pref('群馬')
9
+ city.should == '前橋'
10
+ end
11
+
12
+ it "県が含まれなかったら入力をそのまま返す" do
13
+ city = Anemoi::AreaParser.city_by_pref('ニャッス')
14
+ city.should == 'ニャッス'
15
+ end
16
+ end
17
+
18
+ describe "#info_by_city" do
19
+ it "町が含まれたテキストからidと町の名前を返す" do
20
+ Anemoi::AreaParser.info_by_city('前橋〜〜').should == { :id => 58, :name => '前橋' }
21
+ end
22
+ end
23
+
24
+ describe "#parse" do
25
+ it "県が含まれた文字列からidを返す" do
26
+ Anemoi::AreaParser.parse('明日の群馬の天気など')[:id].should == 58
27
+ end
28
+
29
+ it "県が含まれなかったらnilを返す" do
30
+ Anemoi::AreaParser.parse('明日の天気など').should be_nil
31
+ end
32
+
33
+ it "京都東京都" do
34
+ Anemoi::AreaParser.info_by_city('京都')[:id].should == 79
35
+ Anemoi::AreaParser.info_by_city('東京都')[:id].should == 63
36
+ end
37
+
38
+ it "津" do
39
+ Anemoi::AreaParser.info_by_city('津')[:name].should == '津'
40
+ Anemoi::AreaParser.info_by_city('大津')[:name].should == '大津'
41
+ end
42
+
43
+ it "宮古島宮古" do
44
+ Anemoi::AreaParser.info_by_city('宮古')[:name].should == '宮古'
45
+ Anemoi::AreaParser.info_by_city('宮古島')[:name].should == '宮古島'
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,53 @@
1
+ # encoding: utf-8
2
+
3
+ require "spec_helper"
4
+
5
+ describe Anemoi::Client do
6
+ describe "#horai_date_parse" do
7
+ before do
8
+ @anemoi = Anemoi::Client.new
9
+ end
10
+
11
+ it "明日" do
12
+ @anemoi.horai_date_parse("明日の天気").should == :tomorrow
13
+ end
14
+ it "明後日" do
15
+ @anemoi.horai_date_parse("明後日の天気").should == :day_after_tomorrow
16
+ end
17
+ it "指定がない場合" do
18
+ @anemoi.horai_date_parse("あれ").should be_nil
19
+ end
20
+ end
21
+
22
+ describe "#get_weather" do
23
+ result = Anemoi::Client.new.get_weather("群馬の天気")
24
+ it "result" do
25
+ result[:location][:city].should == "前橋"
26
+ result[:forecastday].should == :today
27
+ result[:weather].should =~ /[晴曇雨]/
28
+ end
29
+
30
+ describe "指定した日と場所" do
31
+ it "指定した場合" do
32
+ result = Anemoi::Client.new.get_weather("群馬の天気")
33
+ result[:specified][:city].should be_kind_of Hash
34
+ end
35
+ it "指定しない場合[:specified][:city]はnil" do
36
+ result = Anemoi::Client.new.get_weather("天気")
37
+ result[:specified][:city].should be_nil
38
+ end
39
+ it "時間を指定しない場合は今日" do
40
+ result = Anemoi::Client.new.get_weather("天気")
41
+ result[:forecastday].should == :today
42
+ end
43
+ it "場所を指定しない場合は東京" do
44
+ result = Anemoi::Client.new.get_weather("天気")
45
+ result[:location][:city].should == "東京"
46
+ end
47
+ end
48
+ end
49
+
50
+ it "Anemoi.get_weather" do
51
+ Anemoi.get_weather("明日の広島")[:weather].should =~ /[晴曇雨]/
52
+ end
53
+ end
@@ -0,0 +1,4 @@
1
+ $LOAD_PATH.unshift File.expand_path("../", __FILE__)
2
+ $LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
3
+
4
+ require "anemoi"
metadata ADDED
@@ -0,0 +1,112 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: anemoi
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - kkosuge
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-07-21 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: httparty
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: horai
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ description: get weather forecast from expression with natural language (ONLY IN JAPANESE)
63
+ email:
64
+ - kkosuge@about.me
65
+ executables:
66
+ - anemoi
67
+ extensions: []
68
+ extra_rdoc_files: []
69
+ files:
70
+ - .gitignore
71
+ - Gemfile
72
+ - LICENSE
73
+ - README.md
74
+ - Rakefile
75
+ - anemoi.gemspec
76
+ - bin/anemoi
77
+ - lib/anemoi.rb
78
+ - lib/anemoi/area_parser.rb
79
+ - lib/anemoi/client.rb
80
+ - lib/anemoi/hash.rb
81
+ - lib/anemoi/version.rb
82
+ - spec/anemoi/area_parser_spec.rb
83
+ - spec/anemoi/client_spec.rb
84
+ - spec/spec_helper.rb
85
+ homepage: https://github.com/kkosuge/Anemoi
86
+ licenses: []
87
+ post_install_message:
88
+ rdoc_options: []
89
+ require_paths:
90
+ - lib
91
+ required_ruby_version: !ruby/object:Gem::Requirement
92
+ none: false
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ required_rubygems_version: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ requirements: []
104
+ rubyforge_project:
105
+ rubygems_version: 1.8.23
106
+ signing_key:
107
+ specification_version: 3
108
+ summary: get weather forecast from expression with natural language (ONLY IN JAPANESE)
109
+ test_files:
110
+ - spec/anemoi/area_parser_spec.rb
111
+ - spec/anemoi/client_spec.rb
112
+ - spec/spec_helper.rb