moscow_metro 0.1.7 → 0.1.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +6 -4
- data/Changelog.md +10 -0
- data/Gemfile +11 -3
- data/Gemfile.lock +23 -3
- data/README.md +69 -15
- data/bin/console +0 -4
- data/lib/moscow_metro/line.rb +33 -11
- data/lib/moscow_metro/station.rb +20 -0
- data/lib/moscow_metro/version.rb +3 -1
- data/moscow_metro.gemspec +16 -12
- metadata +10 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2586265a75c83c37b4e62f3a6a223b2ea1922f10983565a20d14fd452193a7f6
|
4
|
+
data.tar.gz: e4f8e90ab89d6cffb110052a8841feca9bee57cc40e36df245ddd58f684a3e65
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7cc454f5707a6fbf1cc1b70b23c559c19bc286e51790ba7c4c570a46c1d1d6fb64d90a1844ca0257027d8562c5c5c4f62591dfb54efca978ad45ea329d2bc6fe
|
7
|
+
data.tar.gz: d93d3d15d61f1ee20ca11bbcb57a303957bb976786ee6248d99d59ff0f15cc5d55bf68263b7cce1d90936de8ded54690b6c18a29cd511578e4b966518eeb916d
|
data/.travis.yml
CHANGED
data/Changelog.md
CHANGED
@@ -1 +1,11 @@
|
|
1
1
|
# Changelog
|
2
|
+
|
3
|
+
### 0.1.8
|
4
|
+
|
5
|
+
- Corrected Pry dependency in `bin/console`
|
6
|
+
- Added helpers to query lines belonging to metro sub-systems and stations at those lines:
|
7
|
+
|
8
|
+
```ruby
|
9
|
+
MoscowMetro::Station.at_mck #=> Array of stations
|
10
|
+
MoscowMetro::Line.monorail #=> Array of lines
|
11
|
+
```
|
data/Gemfile
CHANGED
@@ -1,8 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
source "https://rubygems.org"
|
2
4
|
|
3
5
|
# Specify your gem's dependencies in moscow_metro.gemspec
|
4
6
|
gemspec
|
5
7
|
|
6
|
-
|
7
|
-
gem "
|
8
|
-
|
8
|
+
group :test do
|
9
|
+
gem "pry"
|
10
|
+
end
|
11
|
+
|
12
|
+
group :test do
|
13
|
+
gem "coveralls", require: false
|
14
|
+
gem "rake"
|
15
|
+
gem "rspec"
|
16
|
+
end
|
data/Gemfile.lock
CHANGED
@@ -1,13 +1,21 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
moscow_metro (0.1.
|
4
|
+
moscow_metro (0.1.7)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
9
|
coderay (1.1.3)
|
10
|
+
coveralls (0.8.23)
|
11
|
+
json (>= 1.8, < 3)
|
12
|
+
simplecov (~> 0.16.1)
|
13
|
+
term-ansicolor (~> 1.3)
|
14
|
+
thor (>= 0.19.4, < 2.0)
|
15
|
+
tins (~> 1.6)
|
10
16
|
diff-lcs (1.4.4)
|
17
|
+
docile (1.3.2)
|
18
|
+
json (2.3.1)
|
11
19
|
method_source (1.0.0)
|
12
20
|
pry (0.13.1)
|
13
21
|
coderay (~> 1.1)
|
@@ -26,15 +34,27 @@ GEM
|
|
26
34
|
diff-lcs (>= 1.2.0, < 2.0)
|
27
35
|
rspec-support (~> 3.10.0)
|
28
36
|
rspec-support (3.10.0)
|
37
|
+
simplecov (0.16.1)
|
38
|
+
docile (~> 1.1)
|
39
|
+
json (>= 1.8, < 3)
|
40
|
+
simplecov-html (~> 0.10.0)
|
41
|
+
simplecov-html (0.10.2)
|
42
|
+
sync (0.5.0)
|
43
|
+
term-ansicolor (1.7.1)
|
44
|
+
tins (~> 1.0)
|
45
|
+
thor (1.0.1)
|
46
|
+
tins (1.26.0)
|
47
|
+
sync
|
29
48
|
|
30
49
|
PLATFORMS
|
31
50
|
ruby
|
32
51
|
|
33
52
|
DEPENDENCIES
|
53
|
+
coveralls
|
34
54
|
moscow_metro!
|
35
55
|
pry
|
36
|
-
rake
|
37
|
-
rspec
|
56
|
+
rake
|
57
|
+
rspec
|
38
58
|
|
39
59
|
BUNDLED WITH
|
40
60
|
2.1.4
|
data/README.md
CHANGED
@@ -1,16 +1,34 @@
|
|
1
1
|
# MoscowMetro
|
2
2
|
|
3
|
-
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/moscow_metro.svg)](https://badge.fury.io/rb/moscow_metro)
|
4
|
+
[![Build Status](https://travis-ci.org/sergeypedan/moscow-metro.svg?branch=master)](https://travis-ci.org/sergeypedan/moscow-metro)
|
5
|
+
[![Maintainability](https://api.codeclimate.com/v1/badges/379adc59603516bdbc8a/maintainability)](https://codeclimate.com/github/sergeypedan/moscow-metro/maintainability)
|
6
|
+
[![Test Coverage](https://api.codeclimate.com/v1/badges/379adc59603516bdbc8a/test_coverage)](https://codeclimate.com/github/sergeypedan/moscow-metro/test_coverage)
|
7
|
+
[![Coverage Status](https://coveralls.io/repos/github/sergeypedan/moscow-metro/badge.svg?branch=master)](https://coveralls.io/github/sergeypedan/moscow-metro?branch=master)
|
8
|
+
|
9
|
+
Список станций и линий Московского метрополитена + хелперы.
|
4
10
|
|
5
11
|
### Актуальность данных
|
6
12
|
|
7
13
|
Дата последней проверки: 1 июля 2020 г.
|
8
14
|
|
15
|
+
Если гем отстал от жизни, можно написать мне в Telegram (`sergey_pedan`) или прислать PR (и лучше написать об этом в Tg).
|
16
|
+
|
17
|
+
### Только метро?
|
18
|
+
|
19
|
+
Есть линии и странции из:
|
20
|
+
|
21
|
+
- Метрополитена
|
22
|
+
- Большой кольцевой линии метро
|
23
|
+
- Монорельса
|
24
|
+
- Московского центрального кольца (МЦК)
|
25
|
+
- Московских центральных диаметров
|
26
|
+
|
9
27
|
### Уникальность названий
|
10
28
|
|
11
|
-
Названия станций не уникальны: есть Белорусская кольцевой и
|
29
|
+
Названия станций не уникальны: есть Белорусская кольцевой и Замоскворецкой линии.
|
12
30
|
|
13
|
-
Возможно, выводя название станций на страницу (например, в
|
31
|
+
Возможно, выводя название станций на страницу (например, в `<select>` или в блоке адреса), вам захочется писать название линии рядом с теми станциями, которые называются одинаково, и не указывать для станций с уникальным именем. Например, «Белорусская кольцевая», но «Новокузнецкая».
|
14
32
|
|
15
33
|
Для этих целей у станций есть свойство `name_uniq` (boolean):
|
16
34
|
|
@@ -24,7 +42,11 @@ ul
|
|
24
42
|
|
25
43
|
### UID линий
|
26
44
|
|
27
|
-
Московский метрополитен использует некие UID для линий, мы берём его, а
|
45
|
+
Московский метрополитен использует некие UID для линий, мы берём его, а не придумываем свои ID. Для большинства линий это Integer, но встречаются линии с UID, состоящим из Integer и строки, как `11A`, поэтому все UID хранятся как String.
|
46
|
+
|
47
|
+
### UID станций
|
48
|
+
|
49
|
+
У станций пока нет UID, добавлю в ближайшем будущем.
|
28
50
|
|
29
51
|
### Корректность данных
|
30
52
|
|
@@ -37,9 +59,10 @@ ul
|
|
37
59
|
- у всех станций заполнен `name_en`
|
38
60
|
- у всех станций заполнен `color`
|
39
61
|
- у всех станций заполнен `line_uid`
|
40
|
-
- у всех станций заполнен `name_uniq`, и
|
62
|
+
- у всех станций заполнен `name_uniq`, и он указывает на существующую линию
|
41
63
|
- у всех станции `line_uid` указывает на какую-то конкретную линию
|
42
64
|
|
65
|
+
|
43
66
|
## Installation
|
44
67
|
|
45
68
|
```ruby
|
@@ -48,21 +71,33 @@ gem "moscow_metro"
|
|
48
71
|
|
49
72
|
## Usage
|
50
73
|
|
51
|
-
Предполагается
|
74
|
+
Предполагается 3 варианта использования этого джема:
|
75
|
+
|
76
|
+
### 1. Использовать данные напрямую из gem
|
52
77
|
|
53
|
-
|
54
|
-
1. Хранить станции и линии в БД, а gem использовать для валидаций.
|
78
|
+
Использовать gem в качестве источника данных, не создавая таблиц в своей БД.
|
55
79
|
|
80
|
+
Для данных о станциях и линиях есть ActiveModel-подобные классы с методами поиска:
|
56
81
|
|
57
|
-
|
82
|
+
```ruby
|
83
|
+
MoscowMetro::Station.all #=> Array of stations
|
58
84
|
|
59
|
-
|
85
|
+
MoscowMetro::Station.at_mcd #=> Array of stations
|
86
|
+
MoscowMetro::Station.at_mck #=> Array of stations
|
87
|
+
MoscowMetro::Station.at_metro #=> Array of stations
|
88
|
+
MoscowMetro::Station.at_monorail #=> Array of stations
|
89
|
+
```
|
60
90
|
|
61
91
|
```ruby
|
62
|
-
MoscowMetro::
|
63
|
-
|
92
|
+
MoscowMetro::Line.all #=> Array of lines
|
93
|
+
|
64
94
|
MoscowMetro::Line.find_by_uid("11A") #=> #<struct MoscowMetro::Line::Record...>
|
65
95
|
MoscowMetro::Line.find_by_uid("404") #=> nil
|
96
|
+
|
97
|
+
MoscowMetro::Line.mcd #=> Array of lines
|
98
|
+
MoscowMetro::Line.mck #=> Array of lines
|
99
|
+
MoscowMetro::Line.metro #=> Array of lines
|
100
|
+
MoscowMetro::Line.monorail #=> Array of lines
|
66
101
|
```
|
67
102
|
|
68
103
|
и attribute-readers у экземпляров:
|
@@ -85,7 +120,9 @@ station.name_en #=> "Aviamotornaya" || nil
|
|
85
120
|
station.name_uniq #=> false || true
|
86
121
|
```
|
87
122
|
|
88
|
-
### 2.
|
123
|
+
### 2. Хранить станции и линии в БД, а gem использовать для валидаций
|
124
|
+
|
125
|
+
Это имеет смысл, если вы решите хранить станции и линии в БД, но не хотите хранить все существующие станции. Тогда при создании новой станции будет полезно проверять корректность имени.
|
89
126
|
|
90
127
|
Например, так:
|
91
128
|
|
@@ -96,6 +133,21 @@ class Metro::Station < ActiveRecord::Base
|
|
96
133
|
end
|
97
134
|
```
|
98
135
|
|
136
|
+
### 3. Для первичного «посева» станций в БД
|
137
|
+
|
138
|
+
Вы хотите хранить станции и линии в БД, и вам нужно просто их туда откуда-то записать.
|
139
|
+
|
140
|
+
```ruby
|
141
|
+
MoscowMetro::Station.all.each do |station|
|
142
|
+
::Station.create!({ name_ru: station.name, name_en: station.name_en, ... })
|
143
|
+
end
|
144
|
+
```
|
145
|
+
|
146
|
+
Также можно использовать данные прямо из YAML-файлов:
|
147
|
+
|
148
|
+
- [stations.yml](https://github.com/sergeypedan/moscow-metro/blob/master/lib/db/stations.yml)
|
149
|
+
- [lines.yml](https://github.com/sergeypedan/moscow-metro/blob/master/lib/db/lines.yml)
|
150
|
+
|
99
151
|
|
100
152
|
## Источники данных
|
101
153
|
|
@@ -107,7 +159,7 @@ end
|
|
107
159
|
- https://en.wikipedia.org/wiki/Moscow_Metro
|
108
160
|
- https://en.wikipedia.org/wiki/List_of_Moscow_Metro_stations
|
109
161
|
|
110
|
-
|
162
|
+
На сайте mosmetro.ru есть удобный `<select>`, из которого можно скачать данные:
|
111
163
|
|
112
164
|
```js
|
113
165
|
window.location.href = "http://mcd.mosmetro.ru/map/desktop/"
|
@@ -131,7 +183,7 @@ let station_objects = divs.map(div => station_object_from_div(div))
|
|
131
183
|
console.table(station_objects)
|
132
184
|
```
|
133
185
|
|
134
|
-
Получаем таблицу
|
186
|
+
Получаем таблицу наподобие этой:
|
135
187
|
|
136
188
|
color | name | line_uid | uid
|
137
189
|
:--------|:--------------------|:---------|:----
|
@@ -144,3 +196,5 @@ console.table(station_objects)
|
|
144
196
|
#ef7e24 | Алексеевская | 6 | 6
|
145
197
|
#4baf4f | Алма-Атинская | 2 | 24
|
146
198
|
#adacac | Алтуфьево | 9 | 1
|
199
|
+
|
200
|
+
Жалко только, в названиях они не ставят букву «ё».
|
data/bin/console
CHANGED
@@ -6,9 +6,5 @@ require "moscow_metro"
|
|
6
6
|
# You can add fixtures and/or initialization code here to make experimenting
|
7
7
|
# with your gem easier. You can also use a different console, if you like.
|
8
8
|
|
9
|
-
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
-
# require "pry"
|
11
|
-
# Pry.start
|
12
|
-
|
13
9
|
require "pry"
|
14
10
|
Pry.start(__FILE__)
|
data/lib/moscow_metro/line.rb
CHANGED
@@ -1,19 +1,41 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module MoscowMetro
|
4
|
-
|
4
|
+
class Line < RecordFromYaml
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
COLUMNS = [:color, :name, :open_year, :uid]
|
7
|
+
RECORDS = YAML.load_file(DB_DIR.join("lines.yml"))
|
8
|
+
Record = Struct.new(*COLUMNS)
|
9
|
+
UIDS = {
|
10
|
+
mcd: %w[D1 D2 D3 D4 D5].freeze,
|
11
|
+
mck: %w[14].freeze,
|
12
|
+
metro: %w[1 2 3 4 5 6 7 8 8A 9 10 11 11A 12].freeze,
|
13
|
+
monorail: %w[13].freeze
|
14
|
+
}
|
9
15
|
|
10
|
-
|
11
|
-
|
12
|
-
|
16
|
+
def self.all
|
17
|
+
RECORDS.map { |record_data| Record.new(*hash_values(COLUMNS, record_data)) }
|
18
|
+
end
|
13
19
|
|
14
|
-
|
15
|
-
|
16
|
-
|
20
|
+
def self.find_by_uid(uid)
|
21
|
+
all.find { |line| line.uid == uid }
|
22
|
+
end
|
17
23
|
|
18
|
-
|
24
|
+
def self.mcd
|
25
|
+
all.select { |line| UIDS[:mck].include? line.uid }
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.mck
|
29
|
+
all.select { |line| UIDS[:mck].include? line.uid }
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.metro
|
33
|
+
all.select { |line| UIDS[:metro].include? line.uid }
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.monorail
|
37
|
+
all.select { |line| UIDS[:monorail].include? line.uid }
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
19
41
|
end
|
data/lib/moscow_metro/station.rb
CHANGED
@@ -24,5 +24,25 @@ module MoscowMetro
|
|
24
24
|
all.map(&:name).uniq
|
25
25
|
end
|
26
26
|
|
27
|
+
def self.at_lines(uids)
|
28
|
+
all.select { |station| uids.include? station.line_uid }
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.at_mcd
|
32
|
+
at_lines Line::UIDS[:mck]
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.at_mck
|
36
|
+
at_lines Line::UIDS[:mck]
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.at_metro
|
40
|
+
at_lines Line::UIDS[:metro]
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.at_monorail
|
44
|
+
at_lines Line::UIDS[:monorail]
|
45
|
+
end
|
46
|
+
|
27
47
|
end
|
28
48
|
end
|
data/lib/moscow_metro/version.rb
CHANGED
data/moscow_metro.gemspec
CHANGED
@@ -1,21 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'lib/moscow_metro/version'
|
2
4
|
|
3
5
|
Gem::Specification.new do |spec|
|
4
|
-
spec.
|
5
|
-
spec.
|
6
|
+
spec.author = "Sergey Pedan"
|
7
|
+
spec.summary = "Database of lines and stations metro & metro-like train transport of Moscow"
|
8
|
+
spec.description = "#{spec.summary}. Can be used as a database alongside a real database or as a source of data for further import into your database."
|
9
|
+
spec.email = ["sergey.pedan@gmail.com"]
|
10
|
+
spec.homepage = "https://github.com/sergeypedan/moscow-metro"
|
11
|
+
spec.license = "MIT"
|
12
|
+
spec.name = "moscow_metro"
|
13
|
+
spec.version = MoscowMetro::VERSION
|
6
14
|
|
7
15
|
spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
|
8
16
|
|
9
|
-
spec.
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
spec.homepage = "https://github.com/sergeypedan/moscow-metro"
|
16
|
-
spec.metadata["homepage_uri"] = spec.homepage
|
17
|
-
spec.metadata["source_code_uri"] = "https://github.com/sergeypedan/moscow-metro"
|
18
|
-
spec.metadata["changelog_uri"] = "https://github.com/sergeypedan/moscow-metro/Changelog.md"
|
17
|
+
spec.metadata = {
|
18
|
+
"changelog_uri" => "#{spec.homepage}/blob/master/Changelog.md",
|
19
|
+
"documentation_uri" => "#{spec.homepage}#usage",
|
20
|
+
"homepage_uri" => spec.homepage,
|
21
|
+
"source_code_uri" => spec.homepage
|
22
|
+
}
|
19
23
|
|
20
24
|
# Specify which files should be added to the gem when it is released.
|
21
25
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
metadata
CHANGED
@@ -1,16 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: moscow_metro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sergey Pedan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-12-
|
11
|
+
date: 2020-12-14 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
|
-
description: Database of lines and stations
|
13
|
+
description: Database of lines and stations metro & metro-like train transport of
|
14
|
+
Moscow. Can be used as a database alongside a real database or as a source of data
|
15
|
+
for further import into your database.
|
14
16
|
email:
|
15
17
|
- sergey.pedan@gmail.com
|
16
18
|
executables:
|
@@ -38,11 +40,13 @@ files:
|
|
38
40
|
- lib/moscow_metro/version.rb
|
39
41
|
- moscow_metro.gemspec
|
40
42
|
homepage: https://github.com/sergeypedan/moscow-metro
|
41
|
-
licenses:
|
43
|
+
licenses:
|
44
|
+
- MIT
|
42
45
|
metadata:
|
46
|
+
changelog_uri: https://github.com/sergeypedan/moscow-metro/blob/master/Changelog.md
|
47
|
+
documentation_uri: https://github.com/sergeypedan/moscow-metro#usage
|
43
48
|
homepage_uri: https://github.com/sergeypedan/moscow-metro
|
44
49
|
source_code_uri: https://github.com/sergeypedan/moscow-metro
|
45
|
-
changelog_uri: https://github.com/sergeypedan/moscow-metro/Changelog.md
|
46
50
|
post_install_message:
|
47
51
|
rdoc_options: []
|
48
52
|
require_paths:
|
@@ -61,5 +65,5 @@ requirements: []
|
|
61
65
|
rubygems_version: 3.1.4
|
62
66
|
signing_key:
|
63
67
|
specification_version: 4
|
64
|
-
summary: Database of lines and stations of Moscow
|
68
|
+
summary: Database of lines and stations metro & metro-like train transport of Moscow
|
65
69
|
test_files: []
|