japan_etc 0.5.1 → 0.9.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/.rubocop.yml +5 -5
- data/.rubocop_todo.yml +59 -6
- data/Gemfile +1 -1
- data/database/japan_etc_tollbooths.csv +2935 -2878
- data/japan_etc.gemspec +2 -1
- data/lib/japan_etc/database.rb +20 -3
- data/lib/japan_etc/database_provider/base.rb +6 -4
- data/lib/japan_etc/database_provider/{nexco.rb → base_nexco.rb} +39 -23
- data/lib/japan_etc/database_provider/hanshin_expressway.rb +6 -3
- data/lib/japan_etc/database_provider/metropolitan_expressway.rb +6 -3
- data/lib/japan_etc/database_provider/nagoya_expressway.rb +6 -3
- data/lib/japan_etc/database_provider/nexco_central.rb +13 -0
- data/lib/japan_etc/database_provider/nexco_east.rb +13 -0
- data/lib/japan_etc/database_provider/nexco_west.rb +13 -0
- data/lib/japan_etc/database_provider/past_database.csv +2922 -0
- data/lib/japan_etc/database_provider/past_database.rb +49 -0
- data/lib/japan_etc/road.rb +11 -1
- data/lib/japan_etc/tollbooth.rb +66 -7
- data/lib/japan_etc/util.rb +7 -1
- data/lib/japan_etc/version.rb +1 -1
- metadata +25 -7
- data/lib/japan_etc/database_provider.rb +0 -6
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'japan_etc/database_provider/base'
|
4
|
+
require 'japan_etc/tollbooth'
|
5
|
+
require 'faraday'
|
6
|
+
require 'nokogiri'
|
7
|
+
|
8
|
+
module JapanETC
|
9
|
+
module DatabaseProvider
|
10
|
+
# http://www.nagoya-expressway.or.jp/etc/etc-lane.html
|
11
|
+
class PastDatabase < Base
|
12
|
+
def source_id
|
13
|
+
'PastDatabase'
|
14
|
+
end
|
15
|
+
|
16
|
+
def fetch_tollbooths
|
17
|
+
rows.map do |row|
|
18
|
+
create_tollbooth_from_row(row)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def create_tollbooth_from_row(row)
|
23
|
+
identifier = Tollbooth::Identifier.from(row[0])
|
24
|
+
|
25
|
+
road = Road.new(row[1], row[2])
|
26
|
+
|
27
|
+
Tollbooth.new(
|
28
|
+
identifier: identifier,
|
29
|
+
road: road,
|
30
|
+
name: row[3],
|
31
|
+
direction: row[4],
|
32
|
+
entrance_or_exit: row[5],
|
33
|
+
note: row[6],
|
34
|
+
source: source_id,
|
35
|
+
priority: -1
|
36
|
+
)
|
37
|
+
end
|
38
|
+
|
39
|
+
def rows
|
40
|
+
CSV.parse(csv, headers: :first_row)
|
41
|
+
end
|
42
|
+
|
43
|
+
def csv
|
44
|
+
path = File.join(__dir__, 'past_database.csv')
|
45
|
+
File.read(path)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/japan_etc/road.rb
CHANGED
@@ -5,6 +5,7 @@ require 'japan_etc/util'
|
|
5
5
|
|
6
6
|
module JapanETC
|
7
7
|
Road = Struct.new(:name, :route_name) do
|
8
|
+
include Comparable
|
8
9
|
include Util
|
9
10
|
|
10
11
|
IRREGULAR_ABBREVIATIONS = {
|
@@ -22,7 +23,7 @@ module JapanETC
|
|
22
23
|
def initialize(name, route_name = nil)
|
23
24
|
raise ValidationError, '#name cannot be nil' if name.nil?
|
24
25
|
|
25
|
-
super(normalize(name), normalize(route_name))
|
26
|
+
super(remove_whitespaces(normalize(name)), remove_whitespaces(normalize(route_name)))
|
26
27
|
end
|
27
28
|
|
28
29
|
def abbreviation
|
@@ -49,5 +50,14 @@ module JapanETC
|
|
49
50
|
|
50
51
|
abbreviation
|
51
52
|
end
|
53
|
+
|
54
|
+
def <=>(other)
|
55
|
+
[:name, :route_name].each do |attribute|
|
56
|
+
result = send(attribute) <=> other.send(attribute)
|
57
|
+
return result unless result.zero?
|
58
|
+
end
|
59
|
+
|
60
|
+
0
|
61
|
+
end
|
52
62
|
end
|
53
63
|
end
|
data/lib/japan_etc/tollbooth.rb
CHANGED
@@ -8,9 +8,11 @@ require 'japan_etc/util'
|
|
8
8
|
|
9
9
|
module JapanETC
|
10
10
|
class Tollbooth
|
11
|
+
include Comparable
|
11
12
|
include Util
|
12
13
|
|
13
|
-
attr_accessor :identifier, :road, :name, :entrance_or_exit, :direction, :notes
|
14
|
+
attr_accessor :identifier, :road, :name, :entrance_or_exit, :direction, :notes,
|
15
|
+
:source, :priority
|
14
16
|
|
15
17
|
def self.create(
|
16
18
|
road_number:,
|
@@ -20,23 +22,46 @@ module JapanETC
|
|
20
22
|
name:,
|
21
23
|
direction: nil,
|
22
24
|
entrance_or_exit: nil,
|
23
|
-
note: nil
|
25
|
+
note: nil,
|
26
|
+
source: nil,
|
27
|
+
priority: 0
|
24
28
|
)
|
25
29
|
identifier = Identifier.new(road_number, tollbooth_number)
|
26
30
|
road = Road.new(road_name, route_name)
|
27
|
-
|
31
|
+
|
32
|
+
new(
|
33
|
+
identifier: identifier,
|
34
|
+
road: road,
|
35
|
+
name: name,
|
36
|
+
direction: direction,
|
37
|
+
entrance_or_exit: entrance_or_exit,
|
38
|
+
note: note,
|
39
|
+
source: source,
|
40
|
+
priority: priority
|
41
|
+
)
|
28
42
|
end
|
29
43
|
|
30
|
-
def initialize(
|
44
|
+
def initialize(
|
45
|
+
identifier:,
|
46
|
+
road:,
|
47
|
+
name:,
|
48
|
+
direction:,
|
49
|
+
entrance_or_exit:,
|
50
|
+
note:,
|
51
|
+
source:,
|
52
|
+
priority:
|
53
|
+
)
|
31
54
|
raise ValidationError if identifier.nil? || road.nil? || name.nil?
|
32
55
|
|
33
56
|
@identifier = identifier
|
34
57
|
@road = road
|
35
|
-
@name = normalize(name)
|
58
|
+
@name = remove_whitespaces(normalize(name))
|
36
59
|
@direction = direction
|
37
60
|
@entrance_or_exit = entrance_or_exit
|
38
61
|
@notes = []
|
39
62
|
notes << normalize(note) if note
|
63
|
+
@source = source
|
64
|
+
@priority = priority
|
40
65
|
|
41
66
|
normalize!
|
42
67
|
end
|
@@ -56,6 +81,24 @@ module JapanETC
|
|
56
81
|
identifier.hash
|
57
82
|
end
|
58
83
|
|
84
|
+
def <=>(other)
|
85
|
+
result = identifier <=> other.identifier
|
86
|
+
return result unless result.zero?
|
87
|
+
|
88
|
+
result = priority <=> other.priority
|
89
|
+
return -result unless result.zero? # Tollbooth with higher priority comes first
|
90
|
+
|
91
|
+
return -1 if !obsolete? && other.obsolete?
|
92
|
+
return 1 if obsolete? && !other.obsolete?
|
93
|
+
|
94
|
+
%i[road name source].each do |attribute|
|
95
|
+
result = send(attribute) <=> other.send(attribute)
|
96
|
+
return result unless result.zero?
|
97
|
+
end
|
98
|
+
|
99
|
+
0
|
100
|
+
end
|
101
|
+
|
59
102
|
def to_a
|
60
103
|
[
|
61
104
|
identifier.to_s,
|
@@ -63,10 +106,17 @@ module JapanETC
|
|
63
106
|
name,
|
64
107
|
direction,
|
65
108
|
entrance_or_exit,
|
66
|
-
notes.empty? ? nil : notes.join(' ')
|
109
|
+
notes.empty? ? nil : notes.join(' '),
|
110
|
+
source
|
67
111
|
].flatten
|
68
112
|
end
|
69
113
|
|
114
|
+
def obsolete?
|
115
|
+
notes.any? { |note| note.include?('迄') }
|
116
|
+
end
|
117
|
+
|
118
|
+
private
|
119
|
+
|
70
120
|
def normalize!
|
71
121
|
extract_notes_from_name!
|
72
122
|
extract_direction_from_notes!
|
@@ -180,8 +230,13 @@ module JapanETC
|
|
180
230
|
end
|
181
231
|
|
182
232
|
Identifier = Struct.new(:road_number, :tollbooth_number) do
|
233
|
+
include Comparable
|
183
234
|
include Util
|
184
235
|
|
236
|
+
def self.from(string)
|
237
|
+
new(*string.split('-'))
|
238
|
+
end
|
239
|
+
|
185
240
|
def initialize(road_number, tollbooth_number)
|
186
241
|
road_number = convert_to_integer(road_number)
|
187
242
|
raise ValidationError, '#road_number cannot be nil' if road_number.nil?
|
@@ -195,7 +250,11 @@ module JapanETC
|
|
195
250
|
end
|
196
251
|
|
197
252
|
def to_s
|
198
|
-
format('%02d-%03d', road_number, tollbooth_number)
|
253
|
+
@string ||= format('%02d-%03d', road_number, tollbooth_number)
|
254
|
+
end
|
255
|
+
|
256
|
+
def <=>(other)
|
257
|
+
to_s <=> other.to_s
|
199
258
|
end
|
200
259
|
end
|
201
260
|
end
|
data/lib/japan_etc/util.rb
CHANGED
@@ -7,7 +7,7 @@ module JapanETC
|
|
7
7
|
def normalize(string)
|
8
8
|
return nil unless string
|
9
9
|
|
10
|
-
convert_fullwidth_characters_to_halfwidth(string)
|
10
|
+
convert_fullwidth_characters_to_halfwidth(string)
|
11
11
|
end
|
12
12
|
|
13
13
|
def convert_fullwidth_characters_to_halfwidth(string)
|
@@ -16,6 +16,12 @@ module JapanETC
|
|
16
16
|
string.tr(' A-Za-z0-9', ' A-Za-z0-9')
|
17
17
|
end
|
18
18
|
|
19
|
+
def remove_whitespaces(string)
|
20
|
+
return nil unless string
|
21
|
+
|
22
|
+
string.tr(' ', '')
|
23
|
+
end
|
24
|
+
|
19
25
|
def convert_to_integer(object)
|
20
26
|
case object
|
21
27
|
when Numeric
|
data/lib/japan_etc/version.rb
CHANGED
metadata
CHANGED
@@ -1,29 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: japan_etc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yuji Nakayama
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-08-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: addressable
|
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'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: faraday
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
16
30
|
requirements:
|
17
31
|
- - "~>"
|
18
32
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0
|
33
|
+
version: '1.0'
|
20
34
|
type: :runtime
|
21
35
|
prerelease: false
|
22
36
|
version_requirements: !ruby/object:Gem::Requirement
|
23
37
|
requirements:
|
24
38
|
- - "~>"
|
25
39
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0
|
40
|
+
version: '1.0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: nokogiri
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -102,12 +116,16 @@ files:
|
|
102
116
|
- japan_etc.gemspec
|
103
117
|
- lib/japan_etc.rb
|
104
118
|
- lib/japan_etc/database.rb
|
105
|
-
- lib/japan_etc/database_provider.rb
|
106
119
|
- lib/japan_etc/database_provider/base.rb
|
120
|
+
- lib/japan_etc/database_provider/base_nexco.rb
|
107
121
|
- lib/japan_etc/database_provider/hanshin_expressway.rb
|
108
122
|
- lib/japan_etc/database_provider/metropolitan_expressway.rb
|
109
123
|
- lib/japan_etc/database_provider/nagoya_expressway.rb
|
110
|
-
- lib/japan_etc/database_provider/
|
124
|
+
- lib/japan_etc/database_provider/nexco_central.rb
|
125
|
+
- lib/japan_etc/database_provider/nexco_east.rb
|
126
|
+
- lib/japan_etc/database_provider/nexco_west.rb
|
127
|
+
- lib/japan_etc/database_provider/past_database.csv
|
128
|
+
- lib/japan_etc/database_provider/past_database.rb
|
111
129
|
- lib/japan_etc/direction.rb
|
112
130
|
- lib/japan_etc/entrance_or_exit.rb
|
113
131
|
- lib/japan_etc/error.rb
|
@@ -134,7 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
134
152
|
- !ruby/object:Gem::Version
|
135
153
|
version: '0'
|
136
154
|
requirements: []
|
137
|
-
rubygems_version: 3.
|
155
|
+
rubygems_version: 3.1.2
|
138
156
|
signing_key:
|
139
157
|
specification_version: 4
|
140
158
|
summary: Japan ETC (Electronic Toll Collection System) database
|