weather-report 0.3.7 → 0.4.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: a54cde6c43574f517d352bb0108e4df59e489502
4
- data.tar.gz: 9abe9627e9648796999cc617f3a8e1c01562e571
2
+ SHA256:
3
+ metadata.gz: 91182fd85a0f2daafaf887d39b5e29e8688bc5352edf4a1f7a7cd23a3d655b87
4
+ data.tar.gz: a532ba5d0c9e80671354f62dcab66b5dd726676b7844831922beb1e3e317dd89
5
5
  SHA512:
6
- metadata.gz: 04357dbeee595b0778420964c5d3103fcb07229489bbb50fa06386e1c12224820f7ad4efd9cf8b8ce5205539a9090a6fe68bb302f50da954a3e2eae474e14ff6
7
- data.tar.gz: 35e2f06ec179721583ef66aab3f70e626e3b0947c7de6f73ebc5c1f4d60b128e3159baf591d0bbf1940ad7f82d3f94a07b71b9b4141b022bbcadfd7fc639487f
6
+ metadata.gz: 2d12cf105a1f36d726378d16ca6758181fab1887793b13dc02b3c615550777456ce509515084c0c3ec6516fd917f73cc3ff0ae116e9dc9ad49cd5c15b3bb4b24
7
+ data.tar.gz: 3b145a1828e505b00b602afc2addd3a0b17a984df4ecfdd8e902a4ceb53806ed259ecf0bed0185f09964a84a5e818da885246b4f5193faac17f158d4d0365d68
data/.gitignore CHANGED
@@ -4,7 +4,6 @@
4
4
  .config
5
5
  .yardoc
6
6
  .ruby-version
7
- Gemfile.lock
8
7
  InstalledFiles
9
8
  _yardoc
10
9
  coverage
@@ -1,7 +1,9 @@
1
1
  language: ruby
2
+ cache: bundler
2
3
  rvm:
3
- - "1.9.2"
4
- - "1.9.3"
5
- - "2.0.0"
6
- - jruby-19mode # JRuby in 1.9 mode
7
- - rbx-19mode
4
+ - "2.5"
5
+ - "2.6"
6
+ - "2.7"
7
+ # - jruby
8
+ # - rbx-3
9
+ before_install: gem install bundler -v 2.1.4
@@ -0,0 +1,44 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ weather-report (0.4.0)
5
+ nokogiri
6
+ slop (~> 4.0.0)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ ansi (1.5.0)
12
+ builder (3.2.4)
13
+ growl (1.0.3)
14
+ guard-compat (1.2.1)
15
+ guard-minitest (2.4.6)
16
+ guard-compat (~> 1.2)
17
+ minitest (>= 3.0)
18
+ mini_portile2 (2.4.0)
19
+ minitest (5.14.2)
20
+ minitest-reporters (1.4.2)
21
+ ansi
22
+ builder
23
+ minitest (>= 5.0)
24
+ ruby-progressbar
25
+ nokogiri (1.10.10)
26
+ mini_portile2 (~> 2.4.0)
27
+ rake (13.0.1)
28
+ rb-fsevent (0.10.4)
29
+ ruby-progressbar (1.10.1)
30
+ slop (4.0.0)
31
+
32
+ PLATFORMS
33
+ ruby
34
+
35
+ DEPENDENCIES
36
+ growl
37
+ guard-minitest
38
+ minitest-reporters
39
+ rake
40
+ rb-fsevent
41
+ weather-report!
42
+
43
+ BUNDLED WITH
44
+ 2.1.4
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Weather Report
2
2
 
3
- A Ruby library and CLI to get Japanese Weather via Livedoor Weather Web Service(http://weather.livedoor.com/weather_hacks/webservice).
3
+ A Ruby library and CLI to get Japanese Weather via 天気予報 API(https://weather.tsukumijima.net/) which is compatible with Livedoor Weather Web Service.
4
4
 
5
5
  [![Build Status](https://travis-ci.org/zakuni/weather-report.png)](https://travis-ci.org/zakuni/weather-report)
6
6
 
@@ -3,41 +3,35 @@
3
3
  require 'rubygems'
4
4
  $:.unshift File.expand_path '../lib', File.dirname(__FILE__)
5
5
  require 'weather-report'
6
- require 'optparse'
7
- require 'ostruct'
6
+ require 'slop'
8
7
 
9
- options = OpenStruct.new
8
+ opts = Slop.parse(help: true) do
9
+ banner 'Usage: weather-report CITY [options]'
10
10
 
11
- opt_parser = OptionParser.new do |opts|
12
- opts.banner = 'Usage: weather-report CITY [options]'
11
+ separator ""
12
+ separator "Common options:"
13
13
 
14
- opts.separator ""
15
- opts.separator "Common options:"
16
-
17
- opts.on_tail("-l", "--list", "Show city list") do
14
+ on :l, :list, 'Show city list' do
18
15
  WeatherReport.cities.each do |city|
19
16
  puts city
20
17
  end
21
18
  exit
22
19
  end
23
20
 
24
- opts.on_tail("-h", "--help", "Show this message") do
25
- puts opts
26
- exit
27
- end
28
-
29
- opts.on_tail("-v", "--version", "Show version") do
21
+ on :v, :version, "Show version" do
30
22
  puts "weather-report v#{WeatherReport::VERSION}"
31
23
  exit
32
24
  end
33
25
  end
34
26
 
27
+ exit if opts.help?
28
+
35
29
  if ARGV.empty?
36
- puts opt_parser.help
37
- exit 1
30
+ puts opts.help
31
+ exit
38
32
  end
39
33
 
40
- city = opt_parser.parse(ARGV)
34
+ city = ARGV
41
35
  weather = WeatherReport::Weather.new(WeatherReport::Weather.request_cityid(*city))
42
36
 
43
37
  [weather.today, weather.tomorrow, weather.day_after_tomorrow].each do |day|
@@ -8,7 +8,10 @@ require 'weather-report/day'
8
8
  require 'weather-report/version'
9
9
 
10
10
  module WeatherReport
11
- class WeatherReportError < StandardError; end
11
+ class Error < StandardError; end
12
+ class ArgumentError < Error; end
13
+ class NoCityError < Error; end
14
+ class NoForecastError < Error; end
12
15
 
13
16
  # @return [Weather] get weather of the city
14
17
  def self.get(city_name)
@@ -18,7 +21,7 @@ module WeatherReport
18
21
  # @return [Array] get city list
19
22
  def self.cities
20
23
  proxy = Weather.parse_proxy(ENV["http_proxy"])
21
- doc = Nokogiri::XML(open("http://weather.livedoor.com/forecast/rss/primary_area.xml", :proxy_http_basic_authentication => [proxy.server, proxy.user, proxy.pass]))
24
+ doc = Nokogiri::XML(open("https://weather.tsukumijima.net/primary_area.xml", :proxy_http_basic_authentication => [proxy.server, proxy.user, proxy.pass]))
22
25
  doc.xpath("//city").map{|i|
23
26
  i["title"]
24
27
  }
@@ -5,8 +5,9 @@ module WeatherReport
5
5
  attr_reader :date, :telop, :temperature_min, :temperature_max
6
6
 
7
7
  def initialize(forecasts, dateLabel)
8
+ raise ArgumentError, "dateLabel must be 今日, 明日 or 明後日" unless dateLabel =~ /(今日|明日|明後日)/
8
9
  @forecast = forecast(forecasts, dateLabel)
9
- end
10
+ end
10
11
 
11
12
  # @return [Boolean] return true if it rains.
12
13
  def rain?
@@ -34,19 +35,19 @@ module WeatherReport
34
35
  @telop ||= @forecast["telop"]
35
36
  end
36
37
 
37
- # @return [Fixnum] the minimum temperature.
38
+ # @return [Fixnum] the minimum temperature.
38
39
  # Temperature of today could be nil.
39
40
  def temperature_min
40
41
  min = @forecast["temperature"]["min"]
41
- @temperature ||=
42
+ @temperature ||=
42
43
  min ? min["celsius"].to_i : nil
43
44
  end
44
45
 
45
- # @return [Fixnum] the maximum temperature.
46
+ # @return [Fixnum] the maximum temperature.
46
47
  # Temperature of today could be nil.
47
48
  def temperature_max
48
49
  max = @forecast["temperature"]["max"]
49
- @temperature_max ||=
50
+ @temperature_max ||=
50
51
  max ? max["celsius"].to_i : nil
51
52
  end
52
53
 
@@ -64,7 +65,7 @@ module WeatherReport
64
65
 
65
66
  def forecast(forecasts, dateLabel)
66
67
  forecasts["forecasts"].each {|elem| return elem if elem["dateLabel"] == dateLabel}
67
- return nil
68
+ raise NoForecastError
68
69
  end
69
70
  end
70
71
  end
@@ -1,3 +1,3 @@
1
1
  module WeatherReport
2
- VERSION = "0.3.7"
2
+ VERSION = '0.4.0'.freeze
3
3
  end
@@ -5,17 +5,17 @@ module WeatherReport
5
5
  attr_reader :today, :tomorrow, :day_after_tomorrow
6
6
 
7
7
  def initialize(city_id)
8
- @uri = URI.parse("http://weather.livedoor.com/forecast/webservice/json/v1?city=#{city_id}")
8
+ @uri = URI.parse("https://weather.tsukumijima.net/api/forecast?city=#{city_id}")
9
9
  end
10
10
 
11
11
  # @return [String] the id of given city
12
12
  def self.request_cityid(city_name)
13
13
  raise ArgumentError, "City name must be String." unless city_name.kind_of?(String)
14
14
  proxy = Weather.parse_proxy(ENV["http_proxy"])
15
- doc = Nokogiri::XML(open("http://weather.livedoor.com/forecast/rss/primary_area.xml", :proxy_http_basic_authentication => [proxy.server, proxy.user, proxy.pass]))
15
+ doc = Nokogiri::XML(open("https://weather.tsukumijima.net/primary_area.xml", :proxy_http_basic_authentication => [proxy.server, proxy.user, proxy.pass]))
16
16
  doc.search("//city[@title='#{city_name}']").attr("id").value
17
17
  rescue NoMethodError
18
- raise WeatherReportError, "It seems like city #{city_name} does not exist.\nPlease look at http://weather.livedoor.com/forecast/rss/primary_area.xml for city list."
18
+ raise NoCityError, "It seems like city #{city_name} does not exist.\nPlease look at https://weather.tsukumijima.net/primary_area.xml for city list."
19
19
  end
20
20
 
21
21
  def self.parse_proxy(proxy)
@@ -26,8 +26,8 @@ module WeatherReport
26
26
  host, port = server.split(":")
27
27
  account = raccount.nil? ? "" : raccount.reverse.split(":")
28
28
  user, pass = account
29
-
30
- proxy = OpenStruct.new({
29
+
30
+ proxy = OpenStruct.new({
31
31
  "server" => server.empty? ? nil : "http://#{server}",
32
32
  "user" => user.nil? ? "" : user,
33
33
  "pass" => pass.nil? ? "" : pass
@@ -74,7 +74,7 @@ module WeatherReport
74
74
  def read
75
75
  @response ||= JSON.parse(@uri.read)
76
76
  rescue => e
77
- raise WeatherReportError
77
+ raise Error
78
78
  end
79
79
  end
80
80
  end
@@ -7,27 +7,60 @@ class TestDay < MiniTest::Unit::TestCase
7
7
 
8
8
  def setup
9
9
  city_id = Weather.request_cityid("東京")
10
- uri = URI.parse("http://weather.livedoor.com/forecast/webservice/json/v1?city=#{city_id}")
10
+ uri = URI.parse("https://weather.tsukumijima.net/api/forecast?city=#{city_id}")
11
11
  @forecasts = JSON.parse(uri.read)
12
12
  @day = Day.new(@forecasts, "明日")
13
13
  end
14
14
 
15
15
  def test_initialize
16
16
  assert_instance_of Day, Day.new(@forecasts, "明日")
17
+ assert_raises(ArgumentError) do
18
+ Day.new(@forecasts, "昨日")
19
+ end
17
20
  end
18
21
 
19
22
  def test_rain?
20
23
  assert_respond_to @day, :rain?
24
+ @day.stub(:telop, '晴れ') do
25
+ assert_equal @day.rain?, false
26
+ end
27
+ @day.stub(:telop, '雨') do
28
+ assert_equal @day.rain?, true
29
+ end
30
+ @day.stub(:telop, '晴れ時々雨') do
31
+ assert_equal @day.rain?, true
32
+ end
21
33
  end
22
34
 
23
35
  def test_snow?
24
36
  assert_respond_to @day, :snow?
37
+ @day.stub(:telop, '晴れ') do
38
+ assert_equal @day.snow?, false
39
+ end
40
+ @day.stub(:telop, '雪') do
41
+ assert_equal @day.snow?, true
42
+ end
43
+ @day.stub(:telop, '雪のち晴れ') do
44
+ assert_equal @day.snow?, true
45
+ end
25
46
  end
26
47
 
27
48
  def test_umbrella?
28
49
  assert_respond_to @day, :umbrella?
50
+ @day.stub(:telop, '晴れ') do
51
+ assert_equal @day.umbrella?, false
52
+ end
53
+ @day.stub(:telop, '雨') do
54
+ assert_equal @day.umbrella?, true
55
+ end
56
+ @day.stub(:telop, '晴れのち雨') do
57
+ assert_equal @day.umbrella?, true
58
+ end
59
+ @day.stub(:telop, '曇りのち晴れ') do
60
+ assert_equal @day.umbrella?, false
61
+ end
29
62
  end
30
-
63
+
31
64
  def test_date
32
65
  assert_respond_to @day, :date
33
66
  assert_instance_of Date, @day.date
@@ -52,9 +85,11 @@ class TestDay < MiniTest::Unit::TestCase
52
85
  assert_respond_to @day, :to_h
53
86
  end
54
87
 
55
- def test_send
88
+ def test_forecast
56
89
  forecasts = {"forecasts" => [{"dateLabel" => "明日"}]}
57
90
  refute_nil @day.send(:forecast, forecasts, "明日")
58
- assert_nil @day.send(:forecast, forecasts, "明後日")
91
+ assert_raises NoForecastError do
92
+ @day.send(:forecast, forecasts, "明後日")
93
+ end
59
94
  end
60
95
  end
@@ -11,7 +11,7 @@ class TestWeather < MiniTest::Unit::TestCase
11
11
  end
12
12
 
13
13
  def test_initialize
14
- assert_raises ArgumentError do
14
+ assert_raises ::ArgumentError do
15
15
  Weather.new
16
16
  end
17
17
  assert_instance_of Weather, Weather.new(@id)
@@ -50,6 +50,9 @@ class TestWeather < MiniTest::Unit::TestCase
50
50
  assert_raises(ArgumentError) do
51
51
  Weather.request_cityid(nil)
52
52
  end
53
+ assert_raises(NoCityError) do
54
+ Weather.request_cityid("存在しない街")
55
+ end
53
56
  end
54
57
 
55
58
  def test_to_h
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_dependency "nokogiri"
22
- spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_dependency "slop", "~> 4.0.0"
23
23
  spec.add_development_dependency "rake"
24
24
  spec.add_development_dependency "guard-minitest"
25
25
  spec.add_development_dependency "rb-fsevent"
metadata CHANGED
@@ -1,111 +1,111 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: weather-report
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.7
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - zakuni
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-19 00:00:00.000000000 Z
11
+ date: 2020-09-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: bundler
28
+ name: slop
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.3'
34
- type: :development
33
+ version: 4.0.0
34
+ type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.3'
40
+ version: 4.0.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: guard-minitest
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rb-fsevent
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: minitest-reporters
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - '>='
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - '>='
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: growl
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - '>='
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - '>='
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  description: A Ruby library and CLI to get Japanese Weather via Livedoor Weather Web
@@ -117,9 +117,10 @@ executables:
117
117
  extensions: []
118
118
  extra_rdoc_files: []
119
119
  files:
120
- - .gitignore
121
- - .travis.yml
120
+ - ".gitignore"
121
+ - ".travis.yml"
122
122
  - Gemfile
123
+ - Gemfile.lock
123
124
  - Guardfile
124
125
  - LICENSE.txt
125
126
  - README.md
@@ -144,17 +145,16 @@ require_paths:
144
145
  - lib
145
146
  required_ruby_version: !ruby/object:Gem::Requirement
146
147
  requirements:
147
- - - '>='
148
+ - - ">="
148
149
  - !ruby/object:Gem::Version
149
150
  version: '0'
150
151
  required_rubygems_version: !ruby/object:Gem::Requirement
151
152
  requirements:
152
- - - '>='
153
+ - - ">="
153
154
  - !ruby/object:Gem::Version
154
155
  version: '0'
155
156
  requirements: []
156
- rubyforge_project:
157
- rubygems_version: 2.0.3
157
+ rubygems_version: 3.1.2
158
158
  signing_key:
159
159
  specification_version: 4
160
160
  summary: A Ruby client of Livedoor Weather Web Service.
@@ -163,4 +163,3 @@ test_files:
163
163
  - test/test_helper.rb
164
164
  - test/test_weather-report.rb
165
165
  - test/test_weather.rb
166
- has_rdoc: