eew_parser 0.1.9 → 0.2.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 +4 -4
 - data/.travis.yml +1 -1
 - data/eew_parser.gemspec +2 -1
 - data/lib/area_code.rb +3 -0
 - data/lib/eew_parser.rb +110 -97
 - data/lib/epicenter_code.rb +3 -0
 - data/spec/eew_parser_spec.rb +4 -2
 - metadata +3 -3
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 21123397596c23d603c3effd0d986bce0ced93206de76c2d14e560f5137045db
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: eece41255984ffe5d4f5b7a2f789f32257ea362b2701b6fa762d485f99e7e422
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: fd0cde626f2c1d2e9919f7ac9ee096595079a1b177883cee6a5016ad3b182f1a71fb87bd155dbc631546ab4ac6d8263cfa0879e92a128788afd04e207ef51238
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: a487e06a2191dbc8f769df9f1ed043c9e2a38c3da6a03ad9b03c9b52a0ef80a1bff243034a98a438ec894a229220ede3ff2d634ea8d9aa55748bdc703878ba9b
         
     | 
    
        data/.travis.yml
    CHANGED
    
    
    
        data/eew_parser.gemspec
    CHANGED
    
    | 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            Gem::Specification.new do |spec|
         
     | 
| 
       2 
2 
     | 
    
         
             
              spec.name          = "eew_parser"
         
     | 
| 
       3 
     | 
    
         
            -
              spec.version       = "0. 
     | 
| 
      
 3 
     | 
    
         
            +
              spec.version       = "0.2.0"
         
     | 
| 
       4 
4 
     | 
    
         
             
              spec.authors       = ["Masaki Matsushita"]
         
     | 
| 
       5 
5 
     | 
    
         
             
              spec.email         = ["glass.saga@gmail.com"]
         
     | 
| 
       6 
6 
     | 
    
         
             
              spec.summary       = %q{Parser for Earthquake Early Warning from JMA}
         
     | 
| 
         @@ -13,6 +13,7 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       13 
13 
     | 
    
         
             
              spec.test_files    = spec.files.grep(%r{^(test|spec|features)/})
         
     | 
| 
       14 
14 
     | 
    
         
             
              spec.require_paths = ["lib"]
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
      
 16 
     | 
    
         
            +
              spec.required_ruby_version = '>= 2.3.0'
         
     | 
| 
       16 
17 
     | 
    
         
             
              spec.add_development_dependency "bundler", "~> 1.16"
         
     | 
| 
       17 
18 
     | 
    
         
             
              spec.add_development_dependency "rake", "~> 11.2"
         
     | 
| 
       18 
19 
     | 
    
         
             
              spec.add_development_dependency "rspec", "~> 3.7"
         
     | 
    
        data/lib/area_code.rb
    CHANGED
    
    
    
        data/lib/eew_parser.rb
    CHANGED
    
    | 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            #encoding: utf-8
         
     | 
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            require_relative "epicenter_code"
         
     | 
| 
       4 
4 
     | 
    
         
             
            require_relative "area_code"
         
     | 
| 
         @@ -28,6 +28,7 @@ module EEW 
     | 
|
| 
       28 
28 
     | 
    
         
             
                def initialize(str)
         
     | 
| 
       29 
29 
     | 
    
         
             
                  raise ArgumentError unless str.is_a?(String)
         
     | 
| 
       30 
30 
     | 
    
         
             
                  @fastcast = str.dup
         
     | 
| 
      
 31 
     | 
    
         
            +
                  @fastcast.force_encoding(Encoding::ASCII)
         
     | 
| 
       31 
32 
     | 
    
         
             
                  @fastcast.freeze
         
     | 
| 
       32 
33 
     | 
    
         
             
                  raise Error, "電文の形式が不正です" if @fastcast.bytesize < 135
         
     | 
| 
       33 
34 
     | 
    
         
             
                end
         
     | 
| 
         @@ -72,6 +73,7 @@ module EEW 
     | 
|
| 
       72 
73 
     | 
    
         
             
            震源の深さの確からしさ(気象庁の部内システムでの利用): #{probability_of_depth_jma}
         
     | 
| 
       73 
74 
     | 
    
         
             
            震央位置の海陸判定: #{land_or_sea}
         
     | 
| 
       74 
75 
     | 
    
         
             
            警報を含む内容かどうか: #{warning?}
         
     | 
| 
      
 76 
     | 
    
         
            +
            予測手法: #{prediction_method}
         
     | 
| 
       75 
77 
     | 
    
         
             
            最大予測震度の変化: #{change}
         
     | 
| 
       76 
78 
     | 
    
         
             
            最大予測震度の変化の理由: #{reason_of_change}
         
     | 
| 
       77 
79 
     | 
    
         
             
                  EOS
         
     | 
| 
         @@ -90,25 +92,36 @@ module EEW 
     | 
|
| 
       90 
92 
     | 
    
         | 
| 
       91 
93 
     | 
    
         
             
                Attributes = [
         
     | 
| 
       92 
94 
     | 
    
         
             
                  :type, :from, :drill_type, :report_time, :number_of_telegram, :continue?, :earthquake_time, :id, :status, :final?, :number, :epicenter, :position, :depth,
         
     | 
| 
       93 
     | 
    
         
            -
                  :magnitude, :seismic_intensity, : 
     | 
| 
       94 
     | 
    
         
            -
                  :land_or_sea, :warning?, :change, :reason_of_change, :ebi
         
     | 
| 
      
 95 
     | 
    
         
            +
                  :magnitude, :seismic_intensity, :observation_points_of_magnitude, :probability_of_depth, :probability_of_magnitude, :probability_of_position, :probability_of_depth_jma,
         
     | 
| 
      
 96 
     | 
    
         
            +
                  :land_or_sea, :warning?, :prediction_method, :change, :reason_of_change, :ebi
         
     | 
| 
       95 
97 
     | 
    
         
             
                ].freeze
         
     | 
| 
       96 
98 
     | 
    
         | 
| 
       97 
99 
     | 
    
         
             
                # 電文を解析した結果をHashで返します。
         
     | 
| 
       98 
100 
     | 
    
         
             
                def to_hash
         
     | 
| 
       99 
     | 
    
         
            -
                  hash 
     | 
| 
       100 
     | 
    
         
            -
             
     | 
| 
       101 
     | 
    
         
            -
                     
     | 
| 
      
 101 
     | 
    
         
            +
                  unless @hash
         
     | 
| 
      
 102 
     | 
    
         
            +
                    @hash = {}
         
     | 
| 
      
 103 
     | 
    
         
            +
                    Attributes.each do |attribute|
         
     | 
| 
      
 104 
     | 
    
         
            +
                      @hash[attribute] = __send__(attribute)
         
     | 
| 
      
 105 
     | 
    
         
            +
                    end
         
     | 
| 
      
 106 
     | 
    
         
            +
                    @hash.freeze
         
     | 
| 
       102 
107 
     | 
    
         
             
                  end
         
     | 
| 
       103 
     | 
    
         
            -
                  return hash
         
     | 
| 
      
 108 
     | 
    
         
            +
                  return @hash.dup
         
     | 
| 
       104 
109 
     | 
    
         
             
                end
         
     | 
| 
       105 
110 
     | 
    
         | 
| 
       106 
111 
     | 
    
         
             
                # 正しい電文であるかを返します
         
     | 
| 
       107 
     | 
    
         
            -
                def  
     | 
| 
       108 
     | 
    
         
            -
                   
     | 
| 
       109 
     | 
    
         
            -
                     
     | 
| 
      
 112 
     | 
    
         
            +
                def valid?
         
     | 
| 
      
 113 
     | 
    
         
            +
                  unless @valid
         
     | 
| 
      
 114 
     | 
    
         
            +
                    begin
         
     | 
| 
      
 115 
     | 
    
         
            +
                      Attributes.each do |attribute|
         
     | 
| 
      
 116 
     | 
    
         
            +
                        __send__(attribute)
         
     | 
| 
      
 117 
     | 
    
         
            +
                      end
         
     | 
| 
      
 118 
     | 
    
         
            +
                    rescue Error
         
     | 
| 
      
 119 
     | 
    
         
            +
                      @valid = false
         
     | 
| 
      
 120 
     | 
    
         
            +
                    else
         
     | 
| 
      
 121 
     | 
    
         
            +
                      @valid = true
         
     | 
| 
      
 122 
     | 
    
         
            +
                    end
         
     | 
| 
       110 
123 
     | 
    
         
             
                  end
         
     | 
| 
       111 
     | 
    
         
            -
                  return  
     | 
| 
      
 124 
     | 
    
         
            +
                  return @valid
         
     | 
| 
       112 
125 
     | 
    
         
             
                end
         
     | 
| 
       113 
126 
     | 
    
         | 
| 
       114 
127 
     | 
    
         
             
                def inspect
         
     | 
| 
         @@ -116,7 +129,7 @@ module EEW 
     | 
|
| 
       116 
129 
     | 
    
         
             
                end
         
     | 
| 
       117 
130 
     | 
    
         | 
| 
       118 
131 
     | 
    
         
             
                def ==(other)
         
     | 
| 
       119 
     | 
    
         
            -
                  fastcast == other.fastcast 
     | 
| 
      
 132 
     | 
    
         
            +
                  fastcast == other.fastcast
         
     | 
| 
       120 
133 
     | 
    
         
             
                end
         
     | 
| 
       121 
134 
     | 
    
         | 
| 
       122 
135 
     | 
    
         
             
                def <=>(other)
         
     | 
| 
         @@ -139,6 +152,12 @@ module EEW 
     | 
|
| 
       139 
152 
     | 
    
         
             
                  end
         
     | 
| 
       140 
153 
     | 
    
         
             
                end
         
     | 
| 
       141 
154 
     | 
    
         | 
| 
      
 155 
     | 
    
         
            +
                # キャンセル報かどうか
         
     | 
| 
      
 156 
     | 
    
         
            +
                def canceled?
         
     | 
| 
      
 157 
     | 
    
         
            +
                  return true if @fastcast[0, 2] == "39"
         
     | 
| 
      
 158 
     | 
    
         
            +
                  return false
         
     | 
| 
      
 159 
     | 
    
         
            +
                end
         
     | 
| 
      
 160 
     | 
    
         
            +
             
     | 
| 
       142 
161 
     | 
    
         
             
                # 発信官署
         
     | 
| 
       143 
162 
     | 
    
         
             
                def from
         
     | 
| 
       144 
163 
     | 
    
         
             
                  case @fastcast[3, 2]
         
     | 
| 
         @@ -234,6 +253,7 @@ module EEW 
     | 
|
| 
       234 
253 
     | 
    
         
             
                  raise Error, "電文の形式が不正です(地震識別番号: #{id})"
         
     | 
| 
       235 
254 
     | 
    
         
             
                end
         
     | 
| 
       236 
255 
     | 
    
         | 
| 
      
 256 
     | 
    
         
            +
                # 地震識別番号 + 通番
         
     | 
| 
       237 
257 
     | 
    
         
             
                def __id__
         
     | 
| 
       238 
258 
     | 
    
         
             
                  (id * 10) + number
         
     | 
| 
       239 
259 
     | 
    
         
             
                end
         
     | 
| 
         @@ -260,7 +280,7 @@ module EEW 
     | 
|
| 
       260 
280 
     | 
    
         | 
| 
       261 
281 
     | 
    
         
             
                # 発表状況と訓練識別が通常かどうか
         
     | 
| 
       262 
282 
     | 
    
         
             
                def normal?
         
     | 
| 
       263 
     | 
    
         
            -
                  return true if @fastcast[59] == "0" && @fastcast[6, 2] == "00"
         
     | 
| 
      
 283 
     | 
    
         
            +
                  return true if (@fastcast[59] == "0" || @fastcast[59] == 9) && @fastcast[6, 2] == "00"
         
     | 
| 
       264 
284 
     | 
    
         
             
                  return false
         
     | 
| 
       265 
285 
     | 
    
         
             
                end
         
     | 
| 
       266 
286 
     | 
    
         | 
| 
         @@ -351,13 +371,6 @@ module EEW 
     | 
|
| 
       351 
371 
     | 
    
         
             
                  "07" => "7"
         
     | 
| 
       352 
372 
     | 
    
         
             
                }.freeze
         
     | 
| 
       353 
373 
     | 
    
         | 
| 
       354 
     | 
    
         
            -
                # 電文フォーマットの震度を文字列に変換
         
     | 
| 
       355 
     | 
    
         
            -
                def to_seismic_intensity(str)
         
     | 
| 
       356 
     | 
    
         
            -
                  SeismicIntensity.fetch(str)
         
     | 
| 
       357 
     | 
    
         
            -
                rescue KeyError
         
     | 
| 
       358 
     | 
    
         
            -
                  raise Error, "電文の形式が不正です(震度: #{str})"
         
     | 
| 
       359 
     | 
    
         
            -
                end
         
     | 
| 
       360 
     | 
    
         
            -
             
     | 
| 
       361 
374 
     | 
    
         
             
                # 最大予測震度
         
     | 
| 
       362 
375 
     | 
    
         
             
                def seismic_intensity
         
     | 
| 
       363 
376 
     | 
    
         
             
                  to_seismic_intensity(@fastcast[108, 2]) 
         
     | 
| 
         @@ -561,11 +574,8 @@ module EEW 
     | 
|
| 
       561 
574 
     | 
    
         | 
| 
       562 
575 
     | 
    
         
             
                # EBIを含むかどうか
         
     | 
| 
       563 
576 
     | 
    
         
             
                def has_ebi?
         
     | 
| 
       564 
     | 
    
         
            -
                  if @fastcast[135, 3] == "EBI"
         
     | 
| 
       565 
     | 
    
         
            -
             
     | 
| 
       566 
     | 
    
         
            -
                  else
         
     | 
| 
       567 
     | 
    
         
            -
                    return false
         
     | 
| 
       568 
     | 
    
         
            -
                  end
         
     | 
| 
      
 577 
     | 
    
         
            +
                  return true if @fastcast[135, 3] == "EBI"
         
     | 
| 
      
 578 
     | 
    
         
            +
                  return false
         
     | 
| 
       569 
579 
     | 
    
         
             
                end
         
     | 
| 
       570 
580 
     | 
    
         | 
| 
       571 
581 
     | 
    
         
             
                # 地域毎の警報の判別、最大予測震度及び主要動到達予測時刻
         
     | 
| 
         @@ -582,48 +592,84 @@ module EEW 
     | 
|
| 
       582 
592 
     | 
    
         
             
                  @ebi = []
         
     | 
| 
       583 
593 
     | 
    
         
             
                  i = 139
         
     | 
| 
       584 
594 
     | 
    
         
             
                  while i + 20 < @fastcast.bytesize
         
     | 
| 
       585 
     | 
    
         
            -
                     
     | 
| 
       586 
     | 
    
         
            -
                     
     | 
| 
       587 
     | 
    
         
            -
                    local 
     | 
| 
       588 
     | 
    
         
            -
             
     | 
| 
       589 
     | 
    
         
            -
             
     | 
| 
       590 
     | 
    
         
            -
                       
     | 
| 
       591 
     | 
    
         
            -
             
     | 
| 
       592 
     | 
    
         
            -
                       
     | 
| 
       593 
     | 
    
         
            -
             
     | 
| 
       594 
     | 
    
         
            -
             
     | 
| 
       595 
     | 
    
         
            -
                     
     | 
| 
       596 
     | 
    
         
            -
                     
     | 
| 
       597 
     | 
    
         
            -
                      local[:arrival_time] = nil # 予想到達時刻
         
     | 
| 
       598 
     | 
    
         
            -
                    else
         
     | 
| 
       599 
     | 
    
         
            -
                      local[:arrival_time] = Time.local("20" + @fastcast[26, 2], @fastcast[28, 2], @fastcast[30, 2], @fastcast[i+10, 2], @fastcast[i+12, 2], @fastcast[i+14, 2])
         
     | 
| 
       600 
     | 
    
         
            -
                    end
         
     | 
| 
       601 
     | 
    
         
            -
                    case @fastcast[i+17]
         
     | 
| 
       602 
     | 
    
         
            -
                    when "0"
         
     | 
| 
       603 
     | 
    
         
            -
                      local[:warning] = false # 警報を含むかどうか
         
     | 
| 
       604 
     | 
    
         
            -
                    when "1"
         
     | 
| 
       605 
     | 
    
         
            -
                      local[:warning] = true
         
     | 
| 
       606 
     | 
    
         
            -
                    when "/", "2".."9"
         
     | 
| 
       607 
     | 
    
         
            -
                      local[:warning] = nil
         
     | 
| 
       608 
     | 
    
         
            -
                    else
         
     | 
| 
       609 
     | 
    
         
            -
                      raise Error, "電文の形式が不正でです(警報の判別[EBI])"
         
     | 
| 
       610 
     | 
    
         
            -
                    end
         
     | 
| 
       611 
     | 
    
         
            -
                    case @fastcast[i+18]
         
     | 
| 
       612 
     | 
    
         
            -
                    when "0"
         
     | 
| 
       613 
     | 
    
         
            -
                      local[:arrival] = false # 既に到達しているかどうか
         
     | 
| 
       614 
     | 
    
         
            -
                    when "1"
         
     | 
| 
       615 
     | 
    
         
            -
                      local[:arrival] = true
         
     | 
| 
       616 
     | 
    
         
            -
                    when "/", "2".."9"
         
     | 
| 
       617 
     | 
    
         
            -
                      local[:arrival] = nil
         
     | 
| 
       618 
     | 
    
         
            -
                    else
         
     | 
| 
       619 
     | 
    
         
            -
                      raise Error, "電文の形式が不正でです(主要動の到達予測状況[EBI])"
         
     | 
| 
       620 
     | 
    
         
            -
                    end
         
     | 
| 
       621 
     | 
    
         
            -
                    @ebi << local
         
     | 
| 
      
 595 
     | 
    
         
            +
                    local_str = @fastcast[i, 20]
         
     | 
| 
      
 596 
     | 
    
         
            +
                    area_code = ebi_area_code(local_str)
         
     | 
| 
      
 597 
     | 
    
         
            +
                    local = {
         
     | 
| 
      
 598 
     | 
    
         
            +
                      area_code: area_code,
         
     | 
| 
      
 599 
     | 
    
         
            +
                      area_name: ebi_area_name(area_code),
         
     | 
| 
      
 600 
     | 
    
         
            +
                      intensity: ebi_intensity(local_str),
         
     | 
| 
      
 601 
     | 
    
         
            +
                      arrival_time: ebi_arrival_time(local_str),
         
     | 
| 
      
 602 
     | 
    
         
            +
                      warning: ebi_warning(local_str),
         
     | 
| 
      
 603 
     | 
    
         
            +
                      arrival: ebi_arrival(local_str)
         
     | 
| 
      
 604 
     | 
    
         
            +
                    }
         
     | 
| 
      
 605 
     | 
    
         
            +
                    local.freeze
         
     | 
| 
      
 606 
     | 
    
         
            +
                    @ebi.push(local)
         
     | 
| 
       622 
607 
     | 
    
         
             
                    i += 20
         
     | 
| 
       623 
608 
     | 
    
         
             
                  end
         
     | 
| 
       624 
609 
     | 
    
         
             
                  @ebi.freeze
         
     | 
| 
       625 
610 
     | 
    
         
             
                  return @ebi.dup
         
     | 
| 
       626 
611 
     | 
    
         
             
                end
         
     | 
| 
      
 612 
     | 
    
         
            +
             
     | 
| 
      
 613 
     | 
    
         
            +
                private
         
     | 
| 
      
 614 
     | 
    
         
            +
             
     | 
| 
      
 615 
     | 
    
         
            +
                # 電文フォーマットの震度を文字列に変換
         
     | 
| 
      
 616 
     | 
    
         
            +
                def to_seismic_intensity(str)
         
     | 
| 
      
 617 
     | 
    
         
            +
                  SeismicIntensity.fetch(str)
         
     | 
| 
      
 618 
     | 
    
         
            +
                rescue KeyError
         
     | 
| 
      
 619 
     | 
    
         
            +
                  raise Error, "電文の形式が不正です(震度: #{str})"
         
     | 
| 
      
 620 
     | 
    
         
            +
                end
         
     | 
| 
      
 621 
     | 
    
         
            +
             
     | 
| 
      
 622 
     | 
    
         
            +
                def ebi_area_code(local_str)
         
     | 
| 
      
 623 
     | 
    
         
            +
                  return Integer(local_str[0, 3])
         
     | 
| 
      
 624 
     | 
    
         
            +
                rescue ArgumentError
         
     | 
| 
      
 625 
     | 
    
         
            +
                  raise Error, "電文の形式が不正です(EBI: 地域コード)"
         
     | 
| 
      
 626 
     | 
    
         
            +
                end
         
     | 
| 
      
 627 
     | 
    
         
            +
             
     | 
| 
      
 628 
     | 
    
         
            +
                def ebi_area_name(area_code)
         
     | 
| 
      
 629 
     | 
    
         
            +
                  return AreaCode.fetch(area_code)
         
     | 
| 
      
 630 
     | 
    
         
            +
                rescue KeyError
         
     | 
| 
      
 631 
     | 
    
         
            +
                  raise Error, "電文の形式が不正です(EBI: 地域名称)" 
         
     | 
| 
      
 632 
     | 
    
         
            +
                end
         
     | 
| 
      
 633 
     | 
    
         
            +
             
     | 
| 
      
 634 
     | 
    
         
            +
                def ebi_intensity(local_str)
         
     | 
| 
      
 635 
     | 
    
         
            +
                  return to_seismic_intensity(local_str[5, 2]) + "以上" if local_str[7, 2] == "//" # 最大予測震度
         
     | 
| 
      
 636 
     | 
    
         
            +
                  return to_seismic_intensity(local_str[5, 2]) if local_str[5, 2] == local_str[7, 2]
         
     | 
| 
      
 637 
     | 
    
         
            +
                  return "#{to_seismic_intensity(local_str[7, 2])}から#{to_seismic_intensity(local_str[5, 2])}"
         
     | 
| 
      
 638 
     | 
    
         
            +
                end
         
     | 
| 
      
 639 
     | 
    
         
            +
             
     | 
| 
      
 640 
     | 
    
         
            +
                # 予想到達時刻
         
     | 
| 
      
 641 
     | 
    
         
            +
                def ebi_arrival_time(local_str)
         
     | 
| 
      
 642 
     | 
    
         
            +
                  return nil if local_str[10, 6] == "//////"
         
     | 
| 
      
 643 
     | 
    
         
            +
                  return Time.local("20" + @fastcast[26, 2], @fastcast[28, 2], @fastcast[30, 2], local_str[10, 2], local_str[12, 2], local_str[14, 2])
         
     | 
| 
      
 644 
     | 
    
         
            +
                rescue ArgumentError
         
     | 
| 
      
 645 
     | 
    
         
            +
                  raise Error, "電文の形式が不正です (EBI: 地震発生時刻)"
         
     | 
| 
      
 646 
     | 
    
         
            +
                end
         
     | 
| 
      
 647 
     | 
    
         
            +
             
     | 
| 
      
 648 
     | 
    
         
            +
                def ebi_warning(local_str)
         
     | 
| 
      
 649 
     | 
    
         
            +
                  case local_str[17]
         
     | 
| 
      
 650 
     | 
    
         
            +
                  when "0"
         
     | 
| 
      
 651 
     | 
    
         
            +
                    return false
         
     | 
| 
      
 652 
     | 
    
         
            +
                  when "1"
         
     | 
| 
      
 653 
     | 
    
         
            +
                    return true
         
     | 
| 
      
 654 
     | 
    
         
            +
                  when "/", "2".."9"
         
     | 
| 
      
 655 
     | 
    
         
            +
                    return nil
         
     | 
| 
      
 656 
     | 
    
         
            +
                  else
         
     | 
| 
      
 657 
     | 
    
         
            +
                    raise Error, "電文の形式が不正です(EBI: 警報の判別)"
         
     | 
| 
      
 658 
     | 
    
         
            +
                  end
         
     | 
| 
      
 659 
     | 
    
         
            +
                end
         
     | 
| 
      
 660 
     | 
    
         
            +
             
     | 
| 
      
 661 
     | 
    
         
            +
                def ebi_arrival(local_str)
         
     | 
| 
      
 662 
     | 
    
         
            +
                  case local_str[18]
         
     | 
| 
      
 663 
     | 
    
         
            +
                  when "0"
         
     | 
| 
      
 664 
     | 
    
         
            +
                    return false
         
     | 
| 
      
 665 
     | 
    
         
            +
                  when "1"
         
     | 
| 
      
 666 
     | 
    
         
            +
                    return true
         
     | 
| 
      
 667 
     | 
    
         
            +
                  when "/", "2".."9"
         
     | 
| 
      
 668 
     | 
    
         
            +
                    return nil
         
     | 
| 
      
 669 
     | 
    
         
            +
                  else
         
     | 
| 
      
 670 
     | 
    
         
            +
                    raise Error, "電文の形式が不正です(EBI: 主要動の到達予測状況)"
         
     | 
| 
      
 671 
     | 
    
         
            +
                  end
         
     | 
| 
      
 672 
     | 
    
         
            +
                end
         
     | 
| 
       627 
673 
     | 
    
         
             
              end
         
     | 
| 
       628 
674 
     | 
    
         
             
            end
         
     | 
| 
       629 
675 
     | 
    
         | 
| 
         @@ -646,40 +692,7 @@ EOS 
     | 
|
| 
       646 
692 
     | 
    
         | 
| 
       647 
693 
     | 
    
         
             
              fc = EEW::Parser.new(str)
         
     | 
| 
       648 
694 
     | 
    
         
             
              p fc
         
     | 
| 
       649 
     | 
    
         
            -
               
     | 
| 
       650 
     | 
    
         
            -
               
     | 
| 
       651 
     | 
    
         
            -
              
         
     | 
| 
       652 
     | 
    
         
            -
              puts <<FC
         
     | 
| 
       653 
     | 
    
         
            -
            電文種別コード: #{fc.type}
         
     | 
| 
       654 
     | 
    
         
            -
            発信官署: #{fc.from}
         
     | 
| 
       655 
     | 
    
         
            -
            訓練等の識別符: #{fc.drill_type}
         
     | 
| 
       656 
     | 
    
         
            -
            電文の発表時刻: #{fc.report_time}
         
     | 
| 
       657 
     | 
    
         
            -
            電文がこの電文を含め何通あるか: #{fc.number_of_telegram}
         
     | 
| 
       658 
     | 
    
         
            -
            コードが続くかどうか: #{fc.continue?}
         
     | 
| 
       659 
     | 
    
         
            -
            地震発生時刻もしくは地震検知時刻: #{fc.earthquake_time}
         
     | 
| 
       660 
     | 
    
         
            -
            地震識別番号: #{fc.id}
         
     | 
| 
       661 
     | 
    
         
            -
            発表状況(訂正等)の指示: #{fc.status}
         
     | 
| 
       662 
     | 
    
         
            -
            発表する高度利用者向け緊急地震速報の番号(地震単位での通番): #{fc.number}
         
     | 
| 
       663 
     | 
    
         
            -
            震央地名コード: #{fc.epicenter}
         
     | 
| 
       664 
     | 
    
         
            -
            震央の位置: #{fc.position}
         
     | 
| 
       665 
     | 
    
         
            -
            震源の深さ(単位 km)(不明・未設定時,キャンセル時:///): #{fc.depth}
         
     | 
| 
       666 
     | 
    
         
            -
            マグニチュード(不明・未設定時、キャンセル時:///): #{fc.magnitude}
         
     | 
| 
       667 
     | 
    
         
            -
            最大予測震度(不明・未設定時、キャンセル時://): #{fc.seismic_intensity}
         
     | 
| 
       668 
     | 
    
         
            -
            震央の確からしさ: #{fc.probability_of_position}
         
     | 
| 
       669 
     | 
    
         
            -
            震源の深さの確からしさ: #{fc.probability_of_depth}
         
     | 
| 
       670 
     | 
    
         
            -
            マグニチュードの確からしさ: #{fc.probability_of_magnitude}
         
     | 
| 
       671 
     | 
    
         
            -
            震央の確からしさ(気象庁の部内システムでの利用): #{fc.probability_of_position_jma}
         
     | 
| 
       672 
     | 
    
         
            -
            震源の深さの確からしさ(気象庁の部内システムでの利用): #{fc.probability_of_depth_jma}
         
     | 
| 
       673 
     | 
    
         
            -
            震央位置の海陸判定: #{fc.land_or_sea}
         
     | 
| 
       674 
     | 
    
         
            -
            警報を含む内容かどうか: #{fc.warning?}
         
     | 
| 
       675 
     | 
    
         
            -
            最大予測震度の変化: #{fc.change}
         
     | 
| 
       676 
     | 
    
         
            -
            最大予測震度の変化の理由: #{fc.reason_of_change}
         
     | 
| 
       677 
     | 
    
         
            -
            FC
         
     | 
| 
       678 
     | 
    
         
            -
              fc.ebi.each do |local|
         
     | 
| 
       679 
     | 
    
         
            -
                puts "地域コード: #{local[:area_code]} 地域名: #{local[:area_name]} 最大予測震度: #{local[:intensity]} 予想到達時刻: #{local[:arrival_time]}"
         
     | 
| 
       680 
     | 
    
         
            -
                puts "警報を含むかどうか: #{local[:warning]} 既に到達しているかどうか: #{local[:arrival]}"
         
     | 
| 
       681 
     | 
    
         
            -
              end
         
     | 
| 
       682 
     | 
    
         
            -
             
     | 
| 
      
 695 
     | 
    
         
            +
              puts fc.fastcast
         
     | 
| 
      
 696 
     | 
    
         
            +
              pp fc.to_hash
         
     | 
| 
       683 
697 
     | 
    
         
             
              puts fc.print
         
     | 
| 
       684 
     | 
    
         
            -
              p EEW::AreaCode.values.max_by(&:size).size
         
     | 
| 
       685 
698 
     | 
    
         
             
            end
         
     | 
    
        data/lib/epicenter_code.rb
    CHANGED
    
    
    
        data/spec/eew_parser_spec.rb
    CHANGED
    
    | 
         @@ -43,6 +43,8 @@ EBI 251 S6+6- ////// 11 300 S5+5- ////// 11 250 S5+5- ////// 11 
     | 
|
| 
       43 
43 
     | 
    
         | 
| 
       44 
44 
     | 
    
         
             
              its(:type) { is_expected.to eq("マグニチュード、最大予測震度及び主要動到達予測時刻の高度利用者向け緊急地震速報(グリッドサーチ法、EPOS自動処理手法)") }
         
     | 
| 
       45 
45 
     | 
    
         | 
| 
      
 46 
     | 
    
         
            +
              it { is_expected.not_to be_canceled }
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
       46 
48 
     | 
    
         
             
              its(:from) { is_expected.to eq("東京") }
         
     | 
| 
       47 
49 
     | 
    
         | 
| 
       48 
50 
     | 
    
         
             
              its(:drill_type) { is_expected.to eq("通常") }
         
     | 
| 
         @@ -99,7 +101,7 @@ EBI 251 S6+6- ////// 11 300 S5+5- ////// 11 250 S5+5- ////// 11 
     | 
|
| 
       99 
101 
     | 
    
         | 
| 
       100 
102 
     | 
    
         
             
              its(:land_or_sea) { is_expected.to eq("陸域") }
         
     | 
| 
       101 
103 
     | 
    
         | 
| 
       102 
     | 
    
         
            -
               
     | 
| 
      
 104 
     | 
    
         
            +
              its(:warning?) { is_expected.to be true }
         
     | 
| 
       103 
105 
     | 
    
         | 
| 
       104 
106 
     | 
    
         
             
              its(:prediction_method) { is_expected.to eq("不明又は未設定") }
         
     | 
| 
       105 
107 
     | 
    
         | 
| 
         @@ -167,7 +169,7 @@ ND20110415005001 NCN001 JD////////////// JN/// 
     | 
|
| 
       167 
169 
     | 
    
         
             
                it "can be verified" do
         
     | 
| 
       168 
170 
     | 
    
         
             
                  expect {
         
     | 
| 
       169 
171 
     | 
    
         
             
                    eew = EEW::Parser.new(invalid)
         
     | 
| 
       170 
     | 
    
         
            -
                    eew. 
     | 
| 
      
 172 
     | 
    
         
            +
                    eew.valid?
         
     | 
| 
       171 
173 
     | 
    
         
             
                  }.not_to raise_error
         
     | 
| 
       172 
174 
     | 
    
         
             
                end
         
     | 
| 
       173 
175 
     | 
    
         
             
              end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: eew_parser
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.2.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Masaki Matsushita
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2018-06- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2018-06-21 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: bundler
         
     | 
| 
         @@ -98,7 +98,7 @@ required_ruby_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       98 
98 
     | 
    
         
             
              requirements:
         
     | 
| 
       99 
99 
     | 
    
         
             
              - - ">="
         
     | 
| 
       100 
100 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       101 
     | 
    
         
            -
                  version:  
     | 
| 
      
 101 
     | 
    
         
            +
                  version: 2.3.0
         
     | 
| 
       102 
102 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       103 
103 
     | 
    
         
             
              requirements:
         
     | 
| 
       104 
104 
     | 
    
         
             
              - - ">="
         
     |