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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0a3ca24e1f947f900ac557036affe46c5eabf2c1ce0e0f9d3f9c6e5ac5fd9082
4
- data.tar.gz: '05229b81d7ae536c6c7187e0b012f173d48ff3678addcca1034be6ce61a0e699'
3
+ metadata.gz: 2586265a75c83c37b4e62f3a6a223b2ea1922f10983565a20d14fd452193a7f6
4
+ data.tar.gz: e4f8e90ab89d6cffb110052a8841feca9bee57cc40e36df245ddd58f684a3e65
5
5
  SHA512:
6
- metadata.gz: 3704aa416a05fa18fef020923b1748e38ef379980b2c35539d9fa3b9d14103f73446d44f28eb30cc0061b21e6e048c84db0621ac4451efe29780c357544eca04
7
- data.tar.gz: 56df27f3f6a3bb46d8fc09ed9a07fe424c1900056b6fd0e5052b1644820ecbf92eaf1ad90fdac123f8b15ca6854447768f4410343e65936aa0b5b91a25d1acd8
6
+ metadata.gz: 7cc454f5707a6fbf1cc1b70b23c559c19bc286e51790ba7c4c570a46c1d1d6fb64d90a1844ca0257027d8562c5c5c4f62591dfb54efca978ad45ea329d2bc6fe
7
+ data.tar.gz: d93d3d15d61f1ee20ca11bbcb57a303957bb976786ee6248d99d59ff0f15cc5d55bf68263b7cce1d90936de8ded54690b6c18a29cd511578e4b966518eeb916d
@@ -1,6 +1,8 @@
1
1
  ---
2
- language: ruby
2
+ before_install:
3
+ - gem install bundler
4
+ bundler_args: --without production
3
5
  cache: bundler
4
- rvm:
5
- - 2.6.6
6
- before_install: gem install bundler -v 2.1.4
6
+ install: bundle install --jobs=3
7
+ language: ruby
8
+ rvm: 2.7.2
@@ -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
- gem "pry"
7
- gem "rake", "~> 13"
8
- gem "rspec", "~> 3"
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
@@ -1,13 +1,21 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- moscow_metro (0.1.6)
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 (~> 13)
37
- rspec (~> 3)
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
- Возможно, выводя название станций на страницу (например, в `<select>` или в блоке адреса), вам захочется писать название линии рядом с теми станциями, которые называются одинаково, и не указывать для станций с уникальным именем. Например, «Белорусская кольцевая», но «Новокузнецкая».
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 для линий, мы берём его, а не придумываем свои ID. Для большинства линий это Integer, но встречаются линии с UID, состоящим из Integer и строки, как `11A`, поэтому все UID мы храним как String.
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
- Предполагается 2 варианта использования этого джема:
74
+ Предполагается варианта использования этого джема:
75
+
76
+ ### 1. Использовать данные напрямую из gem
52
77
 
53
- 1. Использовать gem в качестве базы данных, не создавая таблиц в своей БД. Если gem отстанет от жизни, можно форкнуть или прислать PR.
54
- 1. Хранить станции и линии в БД, а gem использовать для валидаций.
78
+ Использовать gem в качестве источника данных, не создавая таблиц в своей БД.
55
79
 
80
+ Для данных о станциях и линиях есть ActiveModel-подобные классы с методами поиска:
56
81
 
57
- ### 1. Использовать gem в качестве базы данных
82
+ ```ruby
83
+ MoscowMetro::Station.all #=> Array of stations
58
84
 
59
- Для данных о станциях и линиях есть ActiveModel-подобные классы с методами поиска:
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::Station.all #=> Array
63
- MoscowMetro::Line.all #=> Array
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. Использовать gem для валидаций
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
+ Жалко только, в названиях они не ставят букву «ё».
@@ -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__)
@@ -1,19 +1,41 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MoscowMetro
4
- class Line < RecordFromYaml
4
+ class Line < RecordFromYaml
5
5
 
6
- COLUMNS = [:color, :name, :open_year, :uid]
7
- RECORDS = YAML.load_file(DB_DIR.join("lines.yml"))
8
- Record = Struct.new(*COLUMNS)
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
- def self.all
11
- RECORDS.map { |record_data| Record.new(*hash_values(COLUMNS, record_data)) }
12
- end
16
+ def self.all
17
+ RECORDS.map { |record_data| Record.new(*hash_values(COLUMNS, record_data)) }
18
+ end
13
19
 
14
- def self.find_by_uid(uid)
15
- all.find { |line| line.uid == uid }
16
- end
20
+ def self.find_by_uid(uid)
21
+ all.find { |line| line.uid == uid }
22
+ end
17
23
 
18
- end
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
@@ -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
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module MoscowMetro
2
- VERSION = "0.1.7"
4
+ VERSION = "0.1.8"
3
5
  end
@@ -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.name = "moscow_metro"
5
- spec.version = MoscowMetro::VERSION
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.authors = ["Sergey Pedan"]
10
- spec.email = ["sergey.pedan@gmail.com"]
11
-
12
- spec.summary = %q{Database of lines and stations of Moscow metro.}
13
- spec.description = %q{Database of lines and stations of Moscow metro.}
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.7
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-13 00:00:00.000000000 Z
11
+ date: 2020-12-14 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: Database of lines and stations of Moscow metro.
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 metro.
68
+ summary: Database of lines and stations metro & metro-like train transport of Moscow
65
69
  test_files: []