hachioji 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0469f8538553670d196c38dcd5d1f5900e2a1716
4
+ data.tar.gz: fd977c4ca16a9f5c36731b36f12fb1c58511cea9
5
+ SHA512:
6
+ metadata.gz: b94be94afe49d398e543b3f5c2d1934d7e4337d6176d4002e0a4088daf6dc1db0c8a5f450fbb4bf69d8bab354574c69faa5be862ef364d0f11500b6f5975e45f
7
+ data.tar.gz: f95cc49d5db016aa28900198fca9d5642e84ef8e4cf3bbca7acc0d119c3b0e8daad2d7d1d0b40b4007bd3bd8e0bec9f9ab70ab60976b3afc1e9eca25a810c308
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in hachioji.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 tmtysk
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.
@@ -0,0 +1,50 @@
1
+ # Hachioji
2
+
3
+ Utilities for programmers in Hachioji.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'hachioji'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install hachioji
18
+
19
+ ## Usage
20
+
21
+ ### Taikikanshi module
22
+
23
+ This module includes unofficial wrapper classes for "八王子市大気汚染常時監視測定結果 / http://www.taikikansi-hachioji.jp/realtime.htm".
24
+ See http://www.taikikansi-hachioji.jp/realtime.htm to operate/understand gotten values before using this module.
25
+
26
+ Getting latest wind direction:
27
+
28
+ require 'hachioji'
29
+ wc = Hachioji::Taikikanshi::WdClient.new
30
+ wc.parse
31
+ pp wc.latest_values # => {"片倉"=>"南南西", "館"=>"南南東", "大楽寺"=>"南", "川口"=>"南", "八木"=>"南東", "下柚木"=>"南南東", "打越"=>"南西"}
32
+
33
+ Getting average density of PM2.5 in last 24 hours:
34
+
35
+ require 'hachioji'
36
+ pc = Hachioji::Taikikanshi::Pm25Client.new
37
+ pc.parse
38
+ pp pc.averages_24h # => {"片倉"=>17.958333333333332, "館"=>12.875, "八木"=>15.583333333333334, "打越"=>16.0}
39
+
40
+ Confirm with command line:
41
+
42
+ $ hachioji_pm25
43
+ Latest:
44
+ {"片倉"=>45, "館"=>14, "八木"=>25, "打越"=>33}
45
+ Average in last 24H:
46
+ {"片倉"=>17.958333333333332, "館"=>12.875, "八木"=>15.583333333333334, "打越"=>16.0}
47
+
48
+ ## Lisence
49
+
50
+ MIT.
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'hachioji'
4
+
5
+ pc = Hachioji::Taikikanshi::Pm25Client.new
6
+ pc.parse
7
+ print "Latest:\n"
8
+ print "\t#{pc.latest_values}"
9
+ print "\n"
10
+ print "Average in last 24H:\n"
11
+ print "\t#{pc.averages_24h}"
12
+ print "\n"
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'hachioji/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "hachioji"
8
+ spec.version = Hachioji::VERSION
9
+ spec.authors = ["tmtysk"]
10
+ spec.email = ["tmtysk@gmail.com"]
11
+ spec.description = %q{Utilities for programmers in Hachioji}
12
+ spec.summary = %q{Utilities for programmers in Hachioji}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.bindir = 'bin'
22
+ spec.executables = ['hachioji_pm25']
23
+
24
+ spec.add_dependency "nokogiri"
25
+ spec.add_development_dependency "bundler", "~> 1.3"
26
+ spec.add_development_dependency "rake"
27
+ end
@@ -0,0 +1,7 @@
1
+ require 'open-uri'
2
+ require 'kconv'
3
+ require 'nokogiri'
4
+
5
+ module Hachioji; end
6
+
7
+ Dir[File.join(File.dirname(__FILE__), 'hachioji', '*.rb')].sort.each { |f| require f }
@@ -0,0 +1,2 @@
1
+ module Taikikanshi; end
2
+ Dir[File.join(File.dirname(__FILE__), 'taikikanshi', '*.rb')].sort.each { |f| require f }
@@ -0,0 +1,129 @@
1
+ # vim: set autoindent encoding=utf-8 et filetype=ruby sts=2 sw=2 ts=4 :
2
+
3
+ module Hachioji::Taikikanshi
4
+ class BaseClient
5
+ attr_accessor :values, :values_previous
6
+ ENDPOINT_HOST = "http://www.taikikansi-hachioji.jp"
7
+
8
+ def parse
9
+ html = open(self.endpoint_url).read
10
+ @doc = Nokogiri::HTML(html.toutf8)
11
+ @areas = []
12
+ @values = {}
13
+ @values_previous = {}
14
+ got_date = false
15
+ parsing_previous = false
16
+
17
+ @doc.xpath("/html/body/table[2]/tr").each_with_index do |tr,tri|
18
+ if tri == 0
19
+ tr.xpath("./td/font").each_with_index do |font,fonti|
20
+ next if fonti == 0
21
+ @areas << font.text
22
+ @values[font.text] = MeasuredValue.new(area_name: font.text, value_type: measured_value_type)
23
+ @values_previous[font.text] = MeasuredValue.new(area_name: font.text, value_type: measured_value_type)
24
+ end
25
+ else
26
+ tdidx = 0
27
+ tr.xpath("./td").each do |td|
28
+ if td["rowspan"]
29
+ month, day = td.xpath("./font").first.text.scan(/(\d+)/(\d+)/).first
30
+ if !got_date
31
+ @areas.each do |area|
32
+ @values[area].date = Date.new(Date.today.year, month.to_i, day.to_i)
33
+ end
34
+ got_date = true
35
+ else
36
+ @areas.each do |area|
37
+ @values_previous[area].date = Date.new(Date.today.year, month.to_i, day.to_i)
38
+ end
39
+ parsing_previous = true
40
+ end
41
+ else
42
+ val = td.xpath("./font").first.text.strip
43
+ next if val.match(/\d+時/)
44
+ value = measured_value(val)
45
+ if parsing_previous
46
+ @values_previous[@areas[tdidx]].values.insert(0, value)
47
+ else
48
+ @values[@areas[tdidx]].values.insert(0, value)
49
+ end
50
+ tdidx += 1
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+
57
+ def latest_values
58
+ values = {}
59
+ parse if !@values
60
+
61
+ @areas.each do |area|
62
+ values[area] = @values[area].values.last
63
+ end
64
+
65
+ values
66
+ end
67
+
68
+ class << self
69
+ def endpoint_path(path)
70
+ define_method("endpoint_url") {
71
+ "#{ENDPOINT_HOST}#{path}"
72
+ }
73
+ end
74
+
75
+ def available_average
76
+ define_method("averages_24h") {
77
+ averages = {}
78
+ parse if !@values || !@values_previous
79
+
80
+ @areas.each do |area|
81
+ area_values = @values_previous[area].values + @values[area].values
82
+ area_values.compact!
83
+ base_values = area_values.last(24)
84
+ averages[area] = base_values.inject(0){ |sum,v| sum += v }.to_f / base_values.count
85
+ end
86
+
87
+ averages
88
+ }
89
+
90
+ define_method("averages_previous") {
91
+ averages = {}
92
+ parse if !@values || !@values_previous
93
+
94
+ @areas.each do |area|
95
+ area_values = @values_previous[area].values
96
+ area_values.compact!
97
+ base_values = area_values.last(24)
98
+ averages[area] = base_values.inject(0){ |sum,v| sum += v }.to_f / base_values.count
99
+ end
100
+
101
+ averages
102
+ }
103
+ end
104
+
105
+ def measured_value_type(type)
106
+ available_average if type == :float || type == :integer
107
+ define_method("measured_value_type") {
108
+ type
109
+ }
110
+ define_method("measured_value") { |read_value|
111
+ case type
112
+ when :float
113
+ read_value.to_f if read_value.match(/^[\d\.]+$/)
114
+ when :integer
115
+ read_value.to_i if read_value.match(/^[\d]+$/)
116
+ when :string
117
+ read_value.to_s
118
+ else
119
+ nil
120
+ end
121
+ }
122
+ end
123
+
124
+ end
125
+
126
+ endpoint_path "/dummy.html"
127
+ measured_value_type :float
128
+ end
129
+ end
@@ -0,0 +1,10 @@
1
+ # vim: set autoindent encoding=utf-8 et filetype=ruby sts=2 sw=2 ts=4 :
2
+
3
+ module Hachioji::Taikikanshi
4
+ class Ch4Client < BaseClient
5
+
6
+ endpoint_path "/ch4hour.htm"
7
+ measured_value_type :float
8
+
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # vim: set autoindent encoding=utf-8 et filetype=ruby sts=2 sw=2 ts=4 :
2
+
3
+ module Hachioji::Taikikanshi
4
+ class CoClient < BaseClient
5
+
6
+ endpoint_path "/cohour.htm"
7
+ measured_value_type :float
8
+
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # vim: set autoindent encoding=utf-8 et filetype=ruby sts=2 sw=2 ts=4 :
2
+
3
+ module Hachioji::Taikikanshi
4
+ class HumClient < BaseClient
5
+
6
+ endpoint_path "/humhour.htm"
7
+ measured_value_type :float
8
+
9
+ end
10
+ end
@@ -0,0 +1,28 @@
1
+ # vim: set autoindent encoding=utf-8 filetype=ruby sts=3 sw=2 ts=2 :
2
+
3
+ require 'date'
4
+
5
+ module Hachioji::Taikikanshi
6
+ class MeasuredValue
7
+
8
+ attr_accessor :area_name, :date, :values
9
+
10
+ def initialize(area_name: "", date: nil, values: [], value_type: :float)
11
+ @area_name = area_name
12
+ @date = date
13
+ @values = values
14
+ available_average if value_type == :integer || value_type == :float
15
+ end
16
+
17
+ def hour_value_at(hour)
18
+ @values[hour-1]
19
+ end
20
+
21
+ def available_average
22
+ define_singleton_method("average") {
23
+ eff_values = @values.compact
24
+ eff_values.inject(0){ |sum,v| sum += v }.to_f / eff_values.count
25
+ }
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,10 @@
1
+ # vim: set autoindent encoding=utf-8 et filetype=ruby sts=2 sw=2 ts=4 :
2
+
3
+ module Hachioji::Taikikanshi
4
+ class NmhcClient < BaseClient
5
+
6
+ endpoint_path "/nmhchour.htm"
7
+ measured_value_type :float
8
+
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # vim: set autoindent encoding=utf-8 et filetype=ruby sts=2 sw=2 ts=4 :
2
+
3
+ module Hachioji::Taikikanshi
4
+ class No2Client < BaseClient
5
+
6
+ endpoint_path "/no2hour.htm"
7
+ measured_value_type :float
8
+
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # vim: set autoindent encoding=utf-8 et filetype=ruby sts=2 sw=2 ts=4 :
2
+
3
+ module Hachioji::Taikikanshi
4
+ class NoClient < BaseClient
5
+
6
+ endpoint_path "/nohour.htm"
7
+ measured_value_type :float
8
+
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # vim: set autoindent encoding=utf-8 et filetype=ruby sts=2 sw=2 ts=4 :
2
+
3
+ module Hachioji::Taikikanshi
4
+ class NoxClient < BaseClient
5
+
6
+ endpoint_path "/noxhour.htm"
7
+ measured_value_type :float
8
+
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # vim: set autoindent encoding=utf-8 et filetype=ruby sts=2 sw=2 ts=4 :
2
+
3
+ module Hachioji::Taikikanshi
4
+ class OxClient < BaseClient
5
+
6
+ endpoint_path "/oxhour.htm"
7
+ measured_value_type :float
8
+
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # vim: set autoindent encoding=utf-8 et filetype=ruby sts=2 sw=2 ts=4 :
2
+
3
+ module Hachioji::Taikikanshi
4
+ class Pm25Client < BaseClient
5
+
6
+ endpoint_path "/pm25hour.htm"
7
+ measured_value_type :integer
8
+
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # vim: set autoindent encoding=utf-8 et filetype=ruby sts=2 sw=2 ts=4 :
2
+
3
+ module Hachioji::Taikikanshi
4
+ class So2Client < BaseClient
5
+
6
+ endpoint_path "/so2hour.htm"
7
+ measured_value_type :float
8
+
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # vim: set autoindent encoding=utf-8 et filetype=ruby sts=2 sw=2 ts=4 :
2
+
3
+ module Hachioji::Taikikanshi
4
+ class SpmClient < BaseClient
5
+
6
+ endpoint_path "/spmhour.htm"
7
+ measured_value_type :float
8
+
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # vim: set autoindent encoding=utf-8 et filetype=ruby sts=2 sw=2 ts=4 :
2
+
3
+ module Hachioji::Taikikanshi
4
+ class TempClient < BaseClient
5
+
6
+ endpoint_path "/temphour.htm"
7
+ measured_value_type :float
8
+
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # vim: set autoindent encoding=utf-8 et filetype=ruby sts=2 sw=2 ts=4 :
2
+
3
+ module Hachioji::Taikikanshi
4
+ class ThcClient < BaseClient
5
+
6
+ endpoint_path "/thchour.htm"
7
+ measured_value_type :float
8
+
9
+ end
10
+ end
@@ -0,0 +1,59 @@
1
+ # vim: set autoindent encoding=utf-8 et filetype=ruby sts=2 sw=2 ts=4 :
2
+
3
+ module Hachioji::Taikikanshi
4
+ class WdClient < BaseClient
5
+
6
+ endpoint_path "/wdhour.htm"
7
+ measured_value_type :string
8
+
9
+ def parse
10
+ html = open(self.endpoint_url).read
11
+ @doc = Nokogiri::HTML(html.toutf8)
12
+ @areas = []
13
+ @values = {}
14
+ @values_previous = {}
15
+ got_date = false
16
+ parsing_previous = false
17
+
18
+ @doc.xpath("/html/body/table/tr").each_with_index do |tr,tri|
19
+ if tri == 0
20
+ tr.xpath("./td/font").each_with_index do |font,fonti|
21
+ next if fonti == 0
22
+ @areas << font.text
23
+ @values[font.text] = MeasuredValue.new(area_name: font.text, value_type: measured_value_type)
24
+ @values_previous[font.text] = MeasuredValue.new(area_name: font.text, value_type: measured_value_type)
25
+ end
26
+ else
27
+ tdidx = 0
28
+ tr.xpath("./td").each do |td|
29
+ if td["rowspan"]
30
+ month, day = td.xpath("./font").first.text.scan(/(\d+)/(\d+)/).first
31
+ if !got_date
32
+ @areas.each do |area|
33
+ @values[area].date = Date.new(Date.today.year, month.to_i, day.to_i)
34
+ end
35
+ got_date = true
36
+ else
37
+ @areas.each do |area|
38
+ @values_previous[area].date = Date.new(Date.today.year, month.to_i, day.to_i)
39
+ end
40
+ parsing_previous = true
41
+ end
42
+ else
43
+ val = td.xpath("./font").first.text.strip
44
+ next if val.match(/\d+時/)
45
+ value = measured_value(val)
46
+ if parsing_previous
47
+ @values_previous[@areas[tdidx]].values.insert(0, value)
48
+ else
49
+ @values[@areas[tdidx]].values.insert(0, value)
50
+ end
51
+ tdidx += 1
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+
58
+ end
59
+ end
@@ -0,0 +1,10 @@
1
+ # vim: set autoindent encoding=utf-8 et filetype=ruby sts=2 sw=2 ts=4 :
2
+
3
+ module Hachioji::Taikikanshi
4
+ class WsClient < BaseClient
5
+
6
+ endpoint_path "/wshour.htm"
7
+ measured_value_type :float
8
+
9
+ end
10
+ end
@@ -0,0 +1,3 @@
1
+ module Hachioji
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,32 @@
1
+ # vim: set autoindent encoding=utf-8 et filetype=ruby sts=2 sw=2 ts=4 :
2
+
3
+ require "#{File.join(File.dirname(__FILE__), '..', 'lib', 'hachioji')}"
4
+ require "pp"
5
+
6
+ print "=== PM2.5 ===\n"
7
+ pc = Hachioji::Taikikanshi::Pm25Client.new
8
+ pc.parse
9
+ pp pc.values["片倉"].hour_value_at(13)
10
+ pp pc.values_previous["館"].hour_value_at(11)
11
+ pp pc.values["片倉"].average
12
+ pp pc.averages_24h
13
+ pp pc.averages_previous
14
+
15
+ print "=== SO2 ===\n"
16
+ sc = Hachioji::Taikikanshi::So2Client.new
17
+ sc.parse
18
+ pp sc.values["片倉"].hour_value_at(9)
19
+ pp sc.values["館"].average
20
+ pp sc.averages_24h
21
+
22
+ print "=== Ox ===\n"
23
+ oc = Hachioji::Taikikanshi::OxClient.new
24
+ oc.parse
25
+ pp oc.latest_values
26
+
27
+ print "=== Wind Direction ===\n"
28
+ wc = Hachioji::Taikikanshi::WdClient.new
29
+ wc.parse
30
+ pp wc.latest_values
31
+
32
+
metadata ADDED
@@ -0,0 +1,116 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hachioji
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - tmtysk
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-03-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nokogiri
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: Utilities for programmers in Hachioji
56
+ email:
57
+ - tmtysk@gmail.com
58
+ executables:
59
+ - hachioji_pm25
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - .gitignore
64
+ - Gemfile
65
+ - LICENSE.txt
66
+ - README.md
67
+ - Rakefile
68
+ - bin/hachioji_pm25
69
+ - hachioji.gemspec
70
+ - lib/hachioji.rb
71
+ - lib/hachioji/taikikanshi.rb
72
+ - lib/hachioji/taikikanshi/base_client.rb
73
+ - lib/hachioji/taikikanshi/ch4_client.rb
74
+ - lib/hachioji/taikikanshi/co_client.rb
75
+ - lib/hachioji/taikikanshi/hum_client.rb
76
+ - lib/hachioji/taikikanshi/measured_value.rb
77
+ - lib/hachioji/taikikanshi/nmhc_client.rb
78
+ - lib/hachioji/taikikanshi/no2_client.rb
79
+ - lib/hachioji/taikikanshi/no_client.rb
80
+ - lib/hachioji/taikikanshi/nox_client.rb
81
+ - lib/hachioji/taikikanshi/ox_client.rb
82
+ - lib/hachioji/taikikanshi/pm25_client.rb
83
+ - lib/hachioji/taikikanshi/so2_client.rb
84
+ - lib/hachioji/taikikanshi/spm_client.rb
85
+ - lib/hachioji/taikikanshi/temp_client.rb
86
+ - lib/hachioji/taikikanshi/thc_client.rb
87
+ - lib/hachioji/taikikanshi/wd_client.rb
88
+ - lib/hachioji/taikikanshi/ws_client.rb
89
+ - lib/hachioji/version.rb
90
+ - test/check.rb
91
+ homepage: ''
92
+ licenses:
93
+ - MIT
94
+ metadata: {}
95
+ post_install_message:
96
+ rdoc_options: []
97
+ require_paths:
98
+ - lib
99
+ required_ruby_version: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ required_rubygems_version: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - '>='
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ requirements: []
110
+ rubyforge_project:
111
+ rubygems_version: 2.0.0
112
+ signing_key:
113
+ specification_version: 4
114
+ summary: Utilities for programmers in Hachioji
115
+ test_files:
116
+ - test/check.rb