admiral_stats_parser 1.5.0 → 1.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +4 -1
- data/README.md +21 -18
- data/lib/admiral_stats_parser.rb +43 -16
- data/lib/admiral_stats_parser/model/area_capture_info.rb +17 -46
- data/lib/admiral_stats_parser/model/blueprint_list_info.rb +40 -0
- data/lib/admiral_stats_parser/model/character_list_info.rb +3 -0
- data/lib/admiral_stats_parser/model/equip_list_info.rb +8 -17
- data/lib/admiral_stats_parser/model/event_info.rb +10 -48
- data/lib/admiral_stats_parser/model/personal_basic_info.rb +2 -21
- data/lib/admiral_stats_parser/parser/area_capture_info_parser.rb +99 -30
- data/lib/admiral_stats_parser/parser/blueprint_list_info_parser.rb +88 -0
- data/lib/admiral_stats_parser/parser/character_list_info_parser.rb +24 -1
- data/lib/admiral_stats_parser/parser/event_info_parser.rb +48 -17
- data/lib/admiral_stats_parser/parser/personal_basic_info_parser.rb +19 -1
- data/lib/admiral_stats_parser/version.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: da1d3ff4a8d20f013e58c619f48d3f7953d407d1
|
4
|
+
data.tar.gz: 84a8217dc2bfc9519209eebd3d3e37c0278e5f95
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0a0e5cbddb030c82d41c7de3ed21eba8d6249baecb26bdf26fdfd756564b7069283feeaaa47e47656a8ed33ae767ca9bb03b8e124fd67e87b54b081bd4295b9e
|
7
|
+
data.tar.gz: 507d3df27ff2b4f30a8403a2890f9fc5fbcc1d9510351b3f925d9ea7fc1b221b9f969a5b30e572f192f7d1b21559bd9276ccc6a9f472e36ca4847e71cb402850
|
data/.travis.yml
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
sudo: false
|
2
2
|
language: ruby
|
3
3
|
rvm:
|
4
|
-
|
4
|
+
- 2.3.1
|
5
5
|
before_install: gem install bundler -v 1.12.5
|
6
|
+
notifications:
|
7
|
+
slack:
|
8
|
+
secure: VPzFgTybKgKLS3VLsVMJuNppYGao6F1ku7lb7XY/RXcVwKTcgQC32suO3dnoqbtUpijRwlLj0rtTD1gdJ4Dceq+g9OEj3bVr07ifDFkOSQfs0/ckh2bCBN8NWVJJzHSKJuzKz7KhGPYYNvdDV8DumqxotL6fPHojoK8lQjmv+qp0ySZnkDr7S0mhzTuRtqb0NQ/uGKnaLtCiS2EGECghNK1eijLuNVc+eJ1IhpalCYS5I0tOTVftj3/e7GbQW8p26XgtcgB9QMhXLJjRGHsLNkBFDrOmSnG0mzvIXFARbklfvd8ZmeuwcxN1hy9dfcLwlCkgII/6CMVd7O4g9tsrRB02WaGoLzbZfcjFJqD3kEhUza7AdNtBAtAv1OSqxc+KHEmWJqMQUd5crLwd4wHZZw82ouWd0HGlZw/Ueqyl1m0Xi7Otj9UeAxz6PQQQAn3Xuxt6mNQhFjKHHVZT63kosPKuzFjZ+f7y/37k8vxTadzf3Fjjcz1NmvG2tR02xs0vj+WskIYpOw9KELwlyiQAf71dSGBaNExGULKVusI0EIXvqTff46ZxoeFwR6gg3Jxh50mqjpux9Azc52pULzkExib0Cx/+O6vDBiPvVT4DKOCA87WmxN2ecXE3uasit5ZEZgGUsFjMmP8NbqIRp60jn8GCstR1f866YkWVPbvcIvs=
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# admiral_stats_parser
|
2
2
|
|
3
|
-
[![Join the chat at https://gitter.im/muziyoshiz/admiral_stats](https://badges.gitter.im/muziyoshiz/admiral_stats.svg)](https://gitter.im/muziyoshiz/admiral_stats?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
3
|
+
[![Build Status](https://travis-ci.org/muziyoshiz/admiral_stats_parser.svg?branch=master)](https://travis-ci.org/muziyoshiz/admiral_stats_parser) [![Join the chat at https://gitter.im/muziyoshiz/admiral_stats](https://badges.gitter.im/muziyoshiz/admiral_stats.svg)](https://gitter.im/muziyoshiz/admiral_stats?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
4
4
|
|
5
5
|
Parser for admiral stats JSON data exported from kancolle-arcade.net
|
6
6
|
|
@@ -43,6 +43,9 @@ AdmiralStatsParser.parse_equip_list_info(json, api_version)
|
|
43
43
|
|
44
44
|
# イベント海域情報
|
45
45
|
AdmiralStatsParser.parse_event_info(json, api_version)
|
46
|
+
|
47
|
+
# 改装設計図一覧
|
48
|
+
AdmiralStatsParser.parse_blueprint_list_info(json, api_version)
|
46
49
|
```
|
47
50
|
|
48
51
|
## Specification
|
@@ -57,26 +60,26 @@ AdmiralStatsParser は、以下の API version をサポートしています。
|
|
57
60
|
| 2 | 2016-06-30(REVISION 2 のリリース日)〜 2016-09-14 |
|
58
61
|
| 3 | 2016-09-15 〜 2016-10-26 |
|
59
62
|
| 4 | 2016-10-27 〜 2016-12-20 |
|
60
|
-
| 5 | 2016-12-21 〜 |
|
63
|
+
| 5 | 2016-12-21 〜 2017-02-13 |
|
64
|
+
| 6 | 2017-02-14 〜 2017-04-25 |
|
65
|
+
| 7 | 2017-04-26 〜 |
|
61
66
|
|
62
67
|
各 API version でパースできる JSON の種類は以下の通りです。また、同じ情報でも、API version によって、含まれる情報量が異なる場合があります。その場合は Supported (1), Supported (2) のように記載して区別しています。
|
63
68
|
|
64
|
-
|
|
65
|
-
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
77
|
-
|
|
78
|
-
|:----------------|:----|:--------------|
|
79
|
-
| イベント海域情報 | Event/info | Supported (1) |
|
69
|
+
| API version | 基本情報 | 海域情報 | 艦娘図鑑 | 装備図鑑 |
|
70
|
+
|------------:|:-----|:-----|:-----|:-----|
|
71
|
+
| 1 | Supported (1) | Supported (1) | Supported (1) | Supported |
|
72
|
+
| 2 〜 6 | Supported (2) | Supported (2) | Supported (2) | Supported |
|
73
|
+
| 7 | Supported (3) | Supported (3) | Supported (2) | Supported |
|
74
|
+
|
75
|
+
| API version | 艦娘一覧 | 装備一覧 | イベント海域情報 |
|
76
|
+
|------------:|:-----|:-----|:-----|
|
77
|
+
| 1 | Unsupported | Unsupported | Unsupported |
|
78
|
+
| 2 | Supported (1) | Supported | Unsupported |
|
79
|
+
| 3 | Supported (2) | Supported | Unsupported |
|
80
|
+
| 4 | Supported (2) | Supported | Supported (1) |
|
81
|
+
| 5 〜 6 | Supported (3) | Supported | Supported (1) |
|
82
|
+
| 7 | Supported (4) | Supported | Supported (2) |
|
80
83
|
|
81
84
|
## Development
|
82
85
|
|
data/lib/admiral_stats_parser.rb
CHANGED
@@ -7,11 +7,12 @@ require 'admiral_stats_parser/parser/equip_book_info_parser'
|
|
7
7
|
require 'admiral_stats_parser/parser/character_list_info_parser'
|
8
8
|
require 'admiral_stats_parser/parser/equip_list_info_parser'
|
9
9
|
require 'admiral_stats_parser/parser/event_info_parser'
|
10
|
+
require 'admiral_stats_parser/parser/blueprint_list_info_parser'
|
10
11
|
|
11
12
|
module AdmiralStatsParser
|
12
13
|
# 最新の API バージョンを返します。
|
13
14
|
def self.get_latest_api_version
|
14
|
-
return
|
15
|
+
return 7
|
15
16
|
end
|
16
17
|
|
17
18
|
# エクスポート時刻を元に、API バージョンを推測して返します。
|
@@ -28,6 +29,12 @@ module AdmiralStatsParser
|
|
28
29
|
# version 5 の開始日
|
29
30
|
return 4 if exported_at < Time.parse('2016-12-21T07:00:00+0900')
|
30
31
|
|
32
|
+
# version 6 の開始日
|
33
|
+
return 5 if exported_at < Time.parse('2017-02-14T07:00:00+0900')
|
34
|
+
|
35
|
+
# version 7 の開始日
|
36
|
+
return 6 if exported_at < Time.parse('2017-04-26T07:00:00+0900')
|
37
|
+
|
31
38
|
return self.get_latest_api_version
|
32
39
|
end
|
33
40
|
|
@@ -36,8 +43,10 @@ module AdmiralStatsParser
|
|
36
43
|
case api_version
|
37
44
|
when 1
|
38
45
|
PersonalBasicInfoParser.parse(json, 1)
|
39
|
-
when 2..
|
46
|
+
when 2..6
|
40
47
|
PersonalBasicInfoParser.parse(json, 2)
|
48
|
+
when 7
|
49
|
+
PersonalBasicInfoParser.parse(json, 3)
|
41
50
|
else
|
42
51
|
raise 'unsupported API version'
|
43
52
|
end
|
@@ -48,8 +57,10 @@ module AdmiralStatsParser
|
|
48
57
|
case api_version
|
49
58
|
when 1
|
50
59
|
AreaCaptureInfoParser.parse(json, 1)
|
51
|
-
when 2..
|
60
|
+
when 2..6
|
52
61
|
AreaCaptureInfoParser.parse(json, 2)
|
62
|
+
when 7
|
63
|
+
AreaCaptureInfoParser.parse(json, 3)
|
53
64
|
else
|
54
65
|
raise 'unsupported API version'
|
55
66
|
end
|
@@ -60,7 +71,7 @@ module AdmiralStatsParser
|
|
60
71
|
case api_version
|
61
72
|
when 1
|
62
73
|
TcBookInfoParser.parse(json, 1)
|
63
|
-
when 2..
|
74
|
+
when 2..7
|
64
75
|
TcBookInfoParser.parse(json, 2)
|
65
76
|
else
|
66
77
|
raise 'unsupported API version'
|
@@ -70,7 +81,7 @@ module AdmiralStatsParser
|
|
70
81
|
# 装備図鑑をパースします。
|
71
82
|
def self.parse_equip_book_info(json, api_version)
|
72
83
|
case api_version
|
73
|
-
when 1..
|
84
|
+
when 1..7
|
74
85
|
EquipBookInfoParser.parse(json)
|
75
86
|
else
|
76
87
|
raise 'unsupported API version'
|
@@ -86,8 +97,10 @@ module AdmiralStatsParser
|
|
86
97
|
CharacterListInfoParser.parse(json, 1)
|
87
98
|
when 3..4
|
88
99
|
CharacterListInfoParser.parse(json, 2)
|
89
|
-
when 5
|
100
|
+
when 5..6
|
90
101
|
CharacterListInfoParser.parse(json, 3)
|
102
|
+
when 7
|
103
|
+
CharacterListInfoParser.parse(json, 4)
|
91
104
|
else
|
92
105
|
raise 'unsupported API version'
|
93
106
|
end
|
@@ -98,7 +111,7 @@ module AdmiralStatsParser
|
|
98
111
|
case api_version
|
99
112
|
when 1
|
100
113
|
raise 'API version 1 does not support equip list info'
|
101
|
-
when 2..
|
114
|
+
when 2..7
|
102
115
|
EquipListInfoParser.parse(json)
|
103
116
|
else
|
104
117
|
raise 'unsupported API version'
|
@@ -110,29 +123,43 @@ module AdmiralStatsParser
|
|
110
123
|
case api_version
|
111
124
|
when 1..3
|
112
125
|
raise "API version #{api_version} does not support event info"
|
113
|
-
when 4..
|
126
|
+
when 4..6
|
114
127
|
EventInfoParser.parse(json, 1)
|
128
|
+
when 7
|
129
|
+
EventInfoParser.parse(json, 2)
|
115
130
|
else
|
116
131
|
raise 'unsupported API version'
|
117
132
|
end
|
118
133
|
end
|
119
134
|
|
120
135
|
# イベント海域情報のサマリを作成します。
|
121
|
-
def self.summarize_event_info(event_info_list, level, api_version)
|
136
|
+
def self.summarize_event_info(event_info_list, level, period, api_version)
|
122
137
|
case api_version
|
123
138
|
when 1..3
|
124
139
|
raise "API version #{api_version} does not support event info"
|
125
|
-
when 4..
|
140
|
+
when 4..7
|
126
141
|
{
|
127
|
-
opened: EventInfoParser.opened?(event_info_list, level),
|
128
|
-
all_cleared: EventInfoParser.all_cleared?(event_info_list, level),
|
129
|
-
current_loop_counts: EventInfoParser.current_loop_counts(event_info_list, level),
|
130
|
-
cleared_loop_counts: EventInfoParser.cleared_loop_counts(event_info_list, level),
|
131
|
-
cleared_stage_no: EventInfoParser.cleared_stage_no(event_info_list, level),
|
132
|
-
current_military_gauge_left: EventInfoParser.current_military_gauge_left(event_info_list, level)
|
142
|
+
opened: EventInfoParser.opened?(event_info_list, level, period),
|
143
|
+
all_cleared: EventInfoParser.all_cleared?(event_info_list, level, period),
|
144
|
+
current_loop_counts: EventInfoParser.current_loop_counts(event_info_list, level, period),
|
145
|
+
cleared_loop_counts: EventInfoParser.cleared_loop_counts(event_info_list, level, period),
|
146
|
+
cleared_stage_no: EventInfoParser.cleared_stage_no(event_info_list, level, period),
|
147
|
+
current_military_gauge_left: EventInfoParser.current_military_gauge_left(event_info_list, level, period)
|
133
148
|
}
|
134
149
|
else
|
135
150
|
raise 'unsupported API version'
|
136
151
|
end
|
137
152
|
end
|
153
|
+
|
154
|
+
# 改装設計図一覧をパースします。
|
155
|
+
def self.parse_blueprint_list_info(json, api_version)
|
156
|
+
case api_version
|
157
|
+
when 1..6
|
158
|
+
raise "API version #{api_version} does not support blueprint list info"
|
159
|
+
when 7
|
160
|
+
BlueprintListInfoParser.parse(json, 1)
|
161
|
+
else
|
162
|
+
raise 'unsupported API version'
|
163
|
+
end
|
164
|
+
end
|
138
165
|
end
|
@@ -1,39 +1,5 @@
|
|
1
1
|
# 海域情報
|
2
2
|
class AreaCaptureInfo
|
3
|
-
# 海域番号と海域名の対応関係
|
4
|
-
AREA_NAMES = {
|
5
|
-
1 => '鎮守府海域',
|
6
|
-
2 => '南西諸島海域',
|
7
|
-
3 => '北方海域',
|
8
|
-
4 => '西方海域',
|
9
|
-
}
|
10
|
-
|
11
|
-
# サブ海域番号と海域名の対応関係
|
12
|
-
AREA_SUB_NAMES = {
|
13
|
-
1 => {
|
14
|
-
1 => '鎮守府正面海域',
|
15
|
-
2 => '南西諸島沖',
|
16
|
-
3 => '製油所地帯沿岸',
|
17
|
-
4 => '南西諸島防衛戦',
|
18
|
-
},
|
19
|
-
2 => {
|
20
|
-
1 => 'カムラン半島',
|
21
|
-
2 => 'バシー島沖',
|
22
|
-
3 => '東部オリョール海',
|
23
|
-
4 => '沖ノ島海域',
|
24
|
-
},
|
25
|
-
3 => {
|
26
|
-
1 => 'モーレイ海哨戒',
|
27
|
-
2 => 'キス島撤退作戦',
|
28
|
-
3 => 'アルフォンシーノ方面進出',
|
29
|
-
4 => '北方海域艦隊決戦',
|
30
|
-
},
|
31
|
-
4 => {
|
32
|
-
1 => 'ジャム島攻略作戦',
|
33
|
-
2 => 'カレー洋制圧戦',
|
34
|
-
},
|
35
|
-
}
|
36
|
-
|
37
3
|
# 海域番号
|
38
4
|
attr_accessor :area_id
|
39
5
|
|
@@ -88,19 +54,24 @@ class AreaCaptureInfo
|
|
88
54
|
# NOOPEN: 出撃不可
|
89
55
|
attr_accessor :area_clear_state
|
90
56
|
|
91
|
-
#
|
92
|
-
|
93
|
-
|
94
|
-
|
57
|
+
# 海域ボスの情報(ボスが存在する場合のみ) (From API version 7?)
|
58
|
+
attr_accessor :boss_info
|
59
|
+
|
60
|
+
# 海域ボスの情報
|
61
|
+
class BossInfo
|
62
|
+
# 海域ゲージの状態
|
63
|
+
# "NORMAL": 攻略中
|
64
|
+
# "BREAK": 攻略後
|
65
|
+
attr_accessor :military_gauge_status
|
66
|
+
|
67
|
+
# 海域ゲージの最大値
|
68
|
+
attr_accessor :ene_military_gauge_val
|
95
69
|
|
96
|
-
|
97
|
-
|
98
|
-
return "#{@area_id}-#{@area_sub_id}" unless AREA_SUB_NAMES.include?(@area_id)
|
70
|
+
# 海域ゲージの現在値
|
71
|
+
attr_accessor :military_gauge_left
|
99
72
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
"#{@area_id}-#{@area_sub_id}"
|
104
|
-
end
|
73
|
+
# ボスの状態を表す文字列
|
74
|
+
# FORM_1: 第1形態?
|
75
|
+
attr_accessor :boss_status
|
105
76
|
end
|
106
77
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# 改装設計図一覧
|
2
|
+
class BlueprintListInfo
|
3
|
+
# 艦型を表す数値
|
4
|
+
# 艦娘図鑑では shipClass に文字列として入っているが、
|
5
|
+
# 改装設計図一覧では数値として格納されており、仕様が変わっている。
|
6
|
+
attr_accessor :ship_class_id
|
7
|
+
|
8
|
+
# 艦番号(1〜)
|
9
|
+
attr_accessor :ship_class_index
|
10
|
+
|
11
|
+
# 艦種順でソートする際に使うキー
|
12
|
+
attr_accessor :ship_sort_no
|
13
|
+
|
14
|
+
# 艦種
|
15
|
+
attr_accessor :ship_type
|
16
|
+
|
17
|
+
# 艦名
|
18
|
+
attr_accessor :ship_name
|
19
|
+
|
20
|
+
# 艦娘のステータス画像(横長の画像)のファイル名
|
21
|
+
attr_accessor :status_img
|
22
|
+
|
23
|
+
# 改装設計図の総数
|
24
|
+
attr_accessor :blueprint_total_num
|
25
|
+
|
26
|
+
# 有効期限の詳細
|
27
|
+
attr_accessor :expiration_date_list
|
28
|
+
|
29
|
+
class ExpirationDate
|
30
|
+
# 有効期限を表す UNIX タイムスタンプ(ミリ秒含む)
|
31
|
+
# 4月に入手した改装設計図の有効期限は 1505141999000 だった。
|
32
|
+
# これは 2017-09-11 23:59:59 を表すタイムスタンプである。
|
33
|
+
# しかし、SEGA 公式サイト上では「2017年9月末まで」と表示されていた。
|
34
|
+
# この値は、月の単位までしか使われていない?
|
35
|
+
attr_accessor :expiration_date
|
36
|
+
|
37
|
+
# 上記の有効期限を持つ改装設計図の枚数
|
38
|
+
attr_accessor :blueprint_num
|
39
|
+
end
|
40
|
+
end
|
@@ -1,20 +1,16 @@
|
|
1
1
|
# 装備一覧
|
2
2
|
class EquipListInfo
|
3
|
-
# 種別の文字列表記
|
4
|
-
TYPE_NAMES = {
|
5
|
-
1 => '主砲',
|
6
|
-
2 => '副砲・高角',
|
7
|
-
3 => '魚雷',
|
8
|
-
4 => '艦戦',
|
9
|
-
5 => '艦爆・艦攻',
|
10
|
-
6 => '偵察機',
|
11
|
-
7 => 'ソナー・爆雷',
|
12
|
-
8 => 'その他',
|
13
|
-
}
|
14
|
-
|
15
3
|
# 種別を表す数値
|
16
4
|
# 装備図鑑の種別のほうが細かいので、こちらを使うメリットはほとんどない。
|
17
5
|
# 強いて言えば、提督情報のページと同じ表現に揃えたい場合か。
|
6
|
+
# 1: 主砲
|
7
|
+
# 2: 副砲・高角
|
8
|
+
# 3: 魚雷
|
9
|
+
# 4: 艦戦
|
10
|
+
# 5: 艦爆・艦攻
|
11
|
+
# 6: 偵察機
|
12
|
+
# 7: ソナー・爆雷
|
13
|
+
# 8: その他
|
18
14
|
attr_accessor :type
|
19
15
|
|
20
16
|
# 図鑑No.
|
@@ -28,9 +24,4 @@ class EquipListInfo
|
|
28
24
|
|
29
25
|
# アイコン画像のファイル名
|
30
26
|
attr_accessor :img
|
31
|
-
|
32
|
-
# 装備の種別を表す文字列を返します。
|
33
|
-
def type_to_s
|
34
|
-
TYPE_NAMES.include?(@type) ? TYPE_NAMES[@type] : @type.to_s
|
35
|
-
end
|
36
27
|
end
|
@@ -1,31 +1,5 @@
|
|
1
1
|
# 限定海域情報
|
2
2
|
class EventInfo
|
3
|
-
# イベント回数
|
4
|
-
EVENT_NUMBERS = {
|
5
|
-
1000 => 1,
|
6
|
-
}
|
7
|
-
|
8
|
-
# 海域番号と海域名の対応関係
|
9
|
-
EVENT_AREA_NAMES = {
|
10
|
-
1000 => '敵艦隊前線泊地殴り込み',
|
11
|
-
}
|
12
|
-
|
13
|
-
# サブ海域番号と海域名の対応関係
|
14
|
-
EVENT_AREA_SUB_NAMES = {
|
15
|
-
1000 => {
|
16
|
-
1 => '前哨戦',
|
17
|
-
2 => '警戒線突破',
|
18
|
-
3 => '湾内突入!',
|
19
|
-
4 => '敵泊地強襲!',
|
20
|
-
5 => '掃討戦',
|
21
|
-
6 => '前哨戦',
|
22
|
-
7 => '警戒線突破',
|
23
|
-
8 => '湾内突入!',
|
24
|
-
9 => '敵泊地強襲!',
|
25
|
-
10 => '掃討戦',
|
26
|
-
},
|
27
|
-
}
|
28
|
-
|
29
3
|
# 海域番号
|
30
4
|
# 期間限定海域「敵艦隊前線泊地殴り込み」では、共通して 1000
|
31
5
|
attr_accessor :area_id
|
@@ -37,11 +11,13 @@ class EventInfo
|
|
37
11
|
# 難易度
|
38
12
|
# "HEI": 丙
|
39
13
|
# "OTU": 乙
|
14
|
+
# "KOU": 甲
|
40
15
|
attr_accessor :level
|
41
16
|
|
42
17
|
# 海域の種類
|
43
18
|
# ボス戦は "BOSS"
|
44
19
|
# 掃討戦は "SWEEP"
|
20
|
+
# 前段作戦の最終海域は "PERIOD_LAST"
|
45
21
|
# それ以外は "NORMAL"
|
46
22
|
attr_accessor :area_kind
|
47
23
|
|
@@ -93,37 +69,23 @@ class EventInfo
|
|
93
69
|
# E-1 攻略開始前は 1000、攻略後は 0
|
94
70
|
attr_accessor :military_gauge_left
|
95
71
|
|
96
|
-
# ボスのランク
|
72
|
+
# ボスのランク (API version 7 で廃止)
|
97
73
|
# 泊地棲鬼は "ONI"
|
98
74
|
# ゲージ半減して泊地棲姫になると "HIME"
|
99
75
|
# それ以外は "NONE"
|
100
76
|
attr_accessor :boss_status
|
101
77
|
|
78
|
+
# 海域ゲージに表示されるボスアイコンの種類? (From API version 7)
|
79
|
+
attr_accessor :ene_military_gauge2d
|
80
|
+
|
102
81
|
# 周回数
|
103
82
|
# E-1 攻略開始前は 1、攻略後も 1
|
104
83
|
attr_accessor :loop_count
|
105
84
|
|
106
|
-
#
|
107
|
-
#
|
108
|
-
|
109
|
-
|
110
|
-
end
|
111
|
-
|
112
|
-
# 海域を表す数値を、海域名に変換して返します。
|
113
|
-
def area_id_to_s
|
114
|
-
EVENT_AREA_NAMES.include?(@area_id) ? EVENT_AREA_NAMES[@area_id] : @area_id.to_s
|
115
|
-
end
|
116
|
-
|
117
|
-
# サブ海域を表す数値を、海域名に変換して返します。
|
118
|
-
def area_sub_id_to_s
|
119
|
-
return "#{@area_id}-#{@area_sub_id}" unless EVENT_AREA_SUB_NAMES.include?(@area_id)
|
120
|
-
|
121
|
-
if EVENT_AREA_SUB_NAMES[@area_id].include?(@area_sub_id)
|
122
|
-
EVENT_AREA_SUB_NAMES[@area_id][@area_sub_id]
|
123
|
-
else
|
124
|
-
"#{@area_id}-#{@area_sub_id}"
|
125
|
-
end
|
126
|
-
end
|
85
|
+
# 前段作戦か後段作戦か (From API version 7)
|
86
|
+
# 0: 前段作戦
|
87
|
+
# 1: 後段作戦
|
88
|
+
attr_accessor :period
|
127
89
|
|
128
90
|
# 海域撃破ボーナス
|
129
91
|
class EventInfoReward
|
@@ -1,21 +1,5 @@
|
|
1
1
|
# 基本情報
|
2
2
|
class PersonalBasicInfo
|
3
|
-
# 階級を表す数値と、階級名の対応関係
|
4
|
-
# 新米少佐
|
5
|
-
# 中堅少佐
|
6
|
-
# 少佐
|
7
|
-
# 新米中佐
|
8
|
-
# 中佐
|
9
|
-
# 大佐
|
10
|
-
# 少将
|
11
|
-
# 7: 中将
|
12
|
-
# 大将
|
13
|
-
# 元帥
|
14
|
-
# 集計中
|
15
|
-
TITLES = {
|
16
|
-
7 => '中将',
|
17
|
-
}
|
18
|
-
|
19
3
|
# 提督名
|
20
4
|
attr_accessor :admiral_name
|
21
5
|
|
@@ -57,9 +41,6 @@ class PersonalBasicInfo
|
|
57
41
|
# 戦略ポイント (From API version 2)
|
58
42
|
attr_accessor :strategy_point
|
59
43
|
|
60
|
-
#
|
61
|
-
|
62
|
-
def title_id_to_s
|
63
|
-
TITLES.include?(@title_id) ? TITLES[@title_id] : @title_id.to_s
|
64
|
-
end
|
44
|
+
# 甲種勲章の数 (From API version 7)
|
45
|
+
attr_accessor :kou_medal
|
65
46
|
end
|
@@ -3,36 +3,64 @@ require 'admiral_stats_parser/model/area_capture_info'
|
|
3
3
|
|
4
4
|
class AreaCaptureInfoParser
|
5
5
|
MANDATORY_KEYS = {
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
6
|
+
1 => {
|
7
|
+
area_id: Integer,
|
8
|
+
area_sub_id: Integer,
|
9
|
+
limit_sec: Integer,
|
10
|
+
pursuit_map: :boolean,
|
11
|
+
pursuit_map_open: :boolean,
|
12
|
+
stage_image_name: String,
|
13
|
+
stage_mission_name: String,
|
14
|
+
stage_mission_info: String,
|
15
|
+
stage_clear_item_info: String,
|
16
|
+
stage_drop_item_info: Array,
|
17
|
+
area_clear_state: String,
|
18
|
+
},
|
19
|
+
2 => {
|
20
|
+
area_id: Integer,
|
21
|
+
area_sub_id: Integer,
|
22
|
+
limit_sec: Integer,
|
23
|
+
require_gp: Integer,
|
24
|
+
pursuit_map: :boolean,
|
25
|
+
pursuit_map_open: :boolean,
|
26
|
+
sortie_limit: :boolean,
|
27
|
+
stage_image_name: String,
|
28
|
+
stage_mission_name: String,
|
29
|
+
stage_mission_info: String,
|
30
|
+
stage_clear_item_info: String,
|
31
|
+
stage_drop_item_info: Array,
|
32
|
+
area_clear_state: String,
|
33
|
+
},
|
34
|
+
3 => {
|
35
|
+
area_id: Integer,
|
36
|
+
area_sub_id: Integer,
|
37
|
+
limit_sec: Integer,
|
38
|
+
require_gp: Integer,
|
39
|
+
pursuit_map: :boolean,
|
40
|
+
pursuit_map_open: :boolean,
|
41
|
+
sortie_limit: :boolean,
|
42
|
+
stage_image_name: String,
|
43
|
+
stage_mission_name: String,
|
44
|
+
stage_mission_info: String,
|
45
|
+
stage_clear_item_info: String,
|
46
|
+
stage_drop_item_info: Array,
|
47
|
+
area_clear_state: String,
|
48
|
+
},
|
49
|
+
}
|
50
|
+
|
51
|
+
OPTIONAL_KEYS = {
|
52
|
+
1 => {},
|
53
|
+
2 => {},
|
54
|
+
3 => {
|
55
|
+
boss_info: :boss_info,
|
56
|
+
},
|
57
|
+
}
|
58
|
+
|
59
|
+
BOSS_INFO_MANDATORY_KEYS = {
|
60
|
+
military_gauge_status: String,
|
61
|
+
ene_military_gauge_val: Integer,
|
62
|
+
military_gauge_left: Integer,
|
63
|
+
boss_status: String,
|
36
64
|
}
|
37
65
|
|
38
66
|
def self.parse(json, api_version)
|
@@ -68,9 +96,50 @@ class AreaCaptureInfoParser
|
|
68
96
|
result.instance_variable_set("@#{key.to_s}", items[camel_case_key])
|
69
97
|
end
|
70
98
|
|
99
|
+
OPTIONAL_KEYS[api_version].each do |key, key_class|
|
100
|
+
# キーが含まれなければ、処理をスキップ
|
101
|
+
camel_case_key = key.to_s.split('_').inject([]){ |buffer,e| buffer.push(buffer.empty? ? e : e.capitalize) }.join
|
102
|
+
next unless items.include?(camel_case_key)
|
103
|
+
|
104
|
+
# 結果のクラスが合わなければエラー
|
105
|
+
# 海域ボスの情報を格納するために、特別な処理を追加
|
106
|
+
if key_class == :boss_info
|
107
|
+
result.instance_variable_set(
|
108
|
+
"@#{key.to_s}", AreaCaptureInfoParser.parse_boss_info(items[camel_case_key]))
|
109
|
+
next
|
110
|
+
end
|
111
|
+
|
112
|
+
unless items[camel_case_key].is_a?(key_class)
|
113
|
+
raise "Optional key #{key} is not class #{key_class}"
|
114
|
+
end
|
115
|
+
|
116
|
+
result.instance_variable_set("@#{key.to_s}", items[camel_case_key])
|
117
|
+
end
|
118
|
+
|
71
119
|
results << result
|
72
120
|
end
|
73
121
|
|
74
122
|
results
|
75
123
|
end
|
124
|
+
|
125
|
+
def self.parse_boss_info(boss_info)
|
126
|
+
result = AreaCaptureInfo::BossInfo.new
|
127
|
+
|
128
|
+
BOSS_INFO_MANDATORY_KEYS.each do |key, key_class|
|
129
|
+
# 必須のキーが含まれなければエラー
|
130
|
+
camel_case_key = key.to_s.split('_').inject([]){ |buffer,e| buffer.push(buffer.empty? ? e : e.capitalize) }.join
|
131
|
+
unless boss_info.include?(camel_case_key)
|
132
|
+
raise "Mandatory key #{key} does not exist"
|
133
|
+
end
|
134
|
+
|
135
|
+
# 結果のクラスが合わなければエラー
|
136
|
+
unless boss_info[camel_case_key].is_a?(key_class)
|
137
|
+
raise "Mandatory key #{key} is not class #{key_class}"
|
138
|
+
end
|
139
|
+
|
140
|
+
result.instance_variable_set("@#{key.to_s}", boss_info[camel_case_key])
|
141
|
+
end
|
142
|
+
|
143
|
+
result
|
144
|
+
end
|
76
145
|
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'admiral_stats_parser/model/blueprint_list_info'
|
3
|
+
|
4
|
+
class BlueprintListInfoParser
|
5
|
+
MANDATORY_KEYS = {
|
6
|
+
1 => {
|
7
|
+
ship_class_id: Integer,
|
8
|
+
ship_class_index: Integer,
|
9
|
+
ship_sort_no: Integer,
|
10
|
+
ship_type: String,
|
11
|
+
ship_name: String,
|
12
|
+
status_img: String,
|
13
|
+
blueprint_total_num: Integer,
|
14
|
+
expiration_date_list: :expiration_date_list,
|
15
|
+
},
|
16
|
+
}
|
17
|
+
|
18
|
+
EXPIRATION_DATE_MANDATORY_KEYS = {
|
19
|
+
expiration_date: Integer,
|
20
|
+
blueprint_num: Integer,
|
21
|
+
}
|
22
|
+
|
23
|
+
def self.parse(json, api_version)
|
24
|
+
items_array = JSON.parse(json)
|
25
|
+
|
26
|
+
unless items_array.is_a?(Array)
|
27
|
+
raise 'json is not an Array'
|
28
|
+
end
|
29
|
+
|
30
|
+
results = []
|
31
|
+
items_array.each do |items|
|
32
|
+
result = BlueprintListInfo.new
|
33
|
+
|
34
|
+
MANDATORY_KEYS[api_version].each do |key, key_class|
|
35
|
+
# 必須のキーが含まれなければエラー
|
36
|
+
camel_case_key = key.to_s.split('_').inject([]){ |buffer,e| buffer.push(buffer.empty? ? e : e.capitalize) }.join
|
37
|
+
unless items.include?(camel_case_key)
|
38
|
+
raise "Mandatory key #{key} does not exist"
|
39
|
+
end
|
40
|
+
|
41
|
+
# 有効期限の情報を格納するために、特別な処理を追加
|
42
|
+
if key_class == :expiration_date_list
|
43
|
+
result.instance_variable_set(
|
44
|
+
"@#{key.to_s}", BlueprintListInfoParser.parse_expiration_date_list(items[camel_case_key]))
|
45
|
+
next
|
46
|
+
end
|
47
|
+
|
48
|
+
# 結果のクラスが合わなければエラー
|
49
|
+
unless items[camel_case_key].is_a?(key_class)
|
50
|
+
raise "Mandatory key #{key} is not class #{key_class}"
|
51
|
+
end
|
52
|
+
|
53
|
+
result.instance_variable_set("@#{key.to_s}", items[camel_case_key])
|
54
|
+
end
|
55
|
+
|
56
|
+
results << result
|
57
|
+
end
|
58
|
+
|
59
|
+
results
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.parse_expiration_date_list(expiration_date_list)
|
63
|
+
results = []
|
64
|
+
|
65
|
+
expiration_date_list.each do |ed|
|
66
|
+
result = BlueprintListInfo::ExpirationDate.new
|
67
|
+
|
68
|
+
EXPIRATION_DATE_MANDATORY_KEYS.each do |key, key_class|
|
69
|
+
# 必須のキーが含まれなければエラー
|
70
|
+
camel_case_key = key.to_s.split('_').inject([]){ |buffer,e| buffer.push(buffer.empty? ? e : e.capitalize) }.join
|
71
|
+
unless ed.include?(camel_case_key)
|
72
|
+
raise "Mandatory key #{key} does not exist"
|
73
|
+
end
|
74
|
+
|
75
|
+
# 結果のクラスが合わなければエラー
|
76
|
+
unless ed[camel_case_key].is_a?(key_class)
|
77
|
+
raise "Mandatory key #{key} is not class #{key_class}"
|
78
|
+
end
|
79
|
+
|
80
|
+
result.instance_variable_set("@#{key.to_s}", ed[camel_case_key])
|
81
|
+
end
|
82
|
+
|
83
|
+
results << result
|
84
|
+
end
|
85
|
+
|
86
|
+
results
|
87
|
+
end
|
88
|
+
end
|
@@ -43,7 +43,30 @@ class CharacterListInfoParser
|
|
43
43
|
slot_amount: Array,
|
44
44
|
slot_disp: Array,
|
45
45
|
slot_img: Array,
|
46
|
-
}
|
46
|
+
},
|
47
|
+
4 => {
|
48
|
+
book_no: Integer,
|
49
|
+
lv: Integer,
|
50
|
+
ship_type: String,
|
51
|
+
ship_sort_no: Integer,
|
52
|
+
remodel_lv: Integer,
|
53
|
+
ship_name: String,
|
54
|
+
status_img: String,
|
55
|
+
star_num: Integer,
|
56
|
+
ship_class: String,
|
57
|
+
ship_class_index: Integer,
|
58
|
+
tc_img: String,
|
59
|
+
exp_percent: Integer,
|
60
|
+
max_hp: Integer,
|
61
|
+
real_hp: Integer,
|
62
|
+
damage_status: String,
|
63
|
+
slot_num: Integer,
|
64
|
+
slot_equip_name: Array,
|
65
|
+
slot_amount: Array,
|
66
|
+
slot_disp: Array,
|
67
|
+
slot_img: Array,
|
68
|
+
blueprint_total_num: Integer,
|
69
|
+
},
|
47
70
|
}
|
48
71
|
|
49
72
|
def self.parse(json, api_version)
|
@@ -22,7 +22,28 @@ class EventInfoParser
|
|
22
22
|
military_gauge_left: Integer,
|
23
23
|
boss_status: String,
|
24
24
|
loop_count: Integer,
|
25
|
-
}
|
25
|
+
},
|
26
|
+
2 => {
|
27
|
+
area_id: Integer,
|
28
|
+
area_sub_id: Integer,
|
29
|
+
level: String,
|
30
|
+
area_kind: String,
|
31
|
+
limit_sec: Integer,
|
32
|
+
require_gp: Integer,
|
33
|
+
sortie_limit: :boolean,
|
34
|
+
stage_image_name: String,
|
35
|
+
stage_mission_name: String,
|
36
|
+
stage_mission_info: String,
|
37
|
+
reward_list: :reward_list,
|
38
|
+
stage_drop_item_info: Array,
|
39
|
+
area_clear_state: String,
|
40
|
+
military_gauge_status: String,
|
41
|
+
ene_military_gauge_val: Integer,
|
42
|
+
military_gauge_left: Integer,
|
43
|
+
ene_military_gauge2d: String,
|
44
|
+
loop_count: Integer,
|
45
|
+
period: Integer,
|
46
|
+
},
|
26
47
|
}
|
27
48
|
|
28
49
|
REWARD_LIST_MANDATORY_KEYS = {
|
@@ -122,21 +143,29 @@ class EventInfoParser
|
|
122
143
|
end
|
123
144
|
|
124
145
|
# 与えられたリストから、現在の周回数を返します。
|
125
|
-
|
146
|
+
# その作戦が未開放の場合は nil を返します。
|
147
|
+
def self.current_loop_counts(event_info_list, level, period = nil)
|
126
148
|
# 指定されたレベルの情報のみ取り出し
|
127
|
-
list = event_info_list.select{|info| info.level == level }
|
149
|
+
list = event_info_list.select{|info| info.level == level and info.period == period }
|
150
|
+
|
151
|
+
# その難易度および作戦のデータがない場合は nil
|
152
|
+
return nil if list.empty?
|
128
153
|
|
129
154
|
# 現在の周回数
|
130
155
|
list.map{|i| i.loop_count }.max
|
131
156
|
end
|
132
157
|
|
133
158
|
# 与えられたリストから、クリア済みの周回数を返します。
|
134
|
-
|
159
|
+
# その作戦が未開放の場合は nil を返します。
|
160
|
+
def self.cleared_loop_counts(event_info_list, level, period = nil)
|
135
161
|
# 指定されたレベルの情報のみ取り出し
|
136
|
-
list = event_info_list.select{|info| info.level == level }
|
162
|
+
list = event_info_list.select{|info| info.level == level and info.period == period }
|
163
|
+
|
164
|
+
# その難易度および作戦のデータがない場合は nil
|
165
|
+
return nil if list.empty?
|
137
166
|
|
138
167
|
# その周回をクリア済みかどうか
|
139
|
-
cleared = EventInfoParser.all_cleared?(event_info_list, level)
|
168
|
+
cleared = EventInfoParser.all_cleared?(event_info_list, level, period)
|
140
169
|
|
141
170
|
# 現在の周回数
|
142
171
|
loop_count = list.map{|i| i.loop_count }.max
|
@@ -147,12 +176,13 @@ class EventInfoParser
|
|
147
176
|
# 与えられたリストから、現在の周回でクリア済みのステージ No. を返します。
|
148
177
|
# 丙 E-1 クリア済みの場合も、乙 E-1 クリア済みの場合も 1 を返します。
|
149
178
|
# E-1 未クリアの場合は 0 を返します。
|
150
|
-
|
179
|
+
# その難易度または作戦が未開放の場合は 0 を返します。
|
180
|
+
def self.cleared_stage_no(event_info_list, level, period = nil)
|
151
181
|
# その難易度が未開放の場合は、0 を返す
|
152
|
-
return 0 unless EventInfoParser.opened?(event_info_list, level)
|
182
|
+
return 0 unless EventInfoParser.opened?(event_info_list, level, period)
|
153
183
|
|
154
184
|
# 指定されたレベルの情報を、サブ海域番号の小さい順に取り出し
|
155
|
-
list = event_info_list.select{|info| info.level == level}.sort_by {|info| info.area_sub_id }
|
185
|
+
list = event_info_list.select{|info| info.level == level and info.period == period }.sort_by {|info| info.area_sub_id }
|
156
186
|
|
157
187
|
list.each_with_index do |info, prev_stage_no|
|
158
188
|
return prev_stage_no if info.area_clear_state == 'NOTCLEAR'
|
@@ -164,12 +194,13 @@ class EventInfoParser
|
|
164
194
|
|
165
195
|
# 与えられたリストから、攻略中のステージの海域ゲージの現在値を返します。
|
166
196
|
# 全ステージクリア後、および掃討戦の場合は 0 を返します。
|
167
|
-
|
197
|
+
# その難易度または作戦が未開放の場合は 0 を返します。
|
198
|
+
def self.current_military_gauge_left(event_info_list, level, period = nil)
|
168
199
|
# 全ステージクリア後は 0 を返す
|
169
|
-
return 0 if EventInfoParser.all_cleared?(event_info_list, level)
|
200
|
+
return 0 if EventInfoParser.all_cleared?(event_info_list, level, period)
|
170
201
|
|
171
202
|
# 指定されたレベルの情報を、サブ海域番号の小さい順に取り出し
|
172
|
-
list = event_info_list.select{|info| info.level == level}.sort_by {|info| info.area_sub_id }
|
203
|
+
list = event_info_list.select{|info| info.level == level and info.period == period }.sort_by {|info| info.area_sub_id }
|
173
204
|
|
174
205
|
list.each do |info|
|
175
206
|
if info.area_clear_state == 'NOTCLEAR' or info.area_clear_state == 'NOOPEN'
|
@@ -182,9 +213,9 @@ class EventInfoParser
|
|
182
213
|
end
|
183
214
|
|
184
215
|
# 与えられた難易度が解放済みの場合に true を返します。
|
185
|
-
def self.opened?(event_info_list, level)
|
216
|
+
def self.opened?(event_info_list, level, period = nil)
|
186
217
|
# 指定されたレベルの情報を、サブ海域番号の小さい順に取り出し
|
187
|
-
list = event_info_list.select{|info| info.level == level}.sort_by {|info| info.area_sub_id }
|
218
|
+
list = event_info_list.select{|info| info.level == level and info.period == period }.sort_by {|info| info.area_sub_id }
|
188
219
|
|
189
220
|
# その難易度のデータがなければ、未開放と見なす(通常は発生しない)
|
190
221
|
return false if list.size == 0
|
@@ -197,11 +228,11 @@ class EventInfoParser
|
|
197
228
|
|
198
229
|
# 与えられた難易度の全海域をクリア済みの場合に true を返します。
|
199
230
|
# その難易度が解放済みで、かつ 'NOTCLEAR' の海域が存在しない場合はクリア済みとみなします。
|
200
|
-
def self.all_cleared?(event_info_list, level)
|
201
|
-
return false unless EventInfoParser.opened?(event_info_list, level)
|
231
|
+
def self.all_cleared?(event_info_list, level, period = nil)
|
232
|
+
return false unless EventInfoParser.opened?(event_info_list, level, period)
|
202
233
|
|
203
234
|
# 指定されたレベルの情報を、サブ海域番号の小さい順に取り出し
|
204
|
-
list = event_info_list.select{|info| info.level == level}.sort_by {|info| info.area_sub_id }
|
235
|
+
list = event_info_list.select{|info| info.level == level and info.period == period }.sort_by {|info| info.area_sub_id }
|
205
236
|
list.select{|i| i.area_clear_state == 'NOTCLEAR' }.size == 0
|
206
237
|
end
|
207
238
|
end
|
@@ -25,7 +25,22 @@ class PersonalBasicInfoParser
|
|
25
25
|
title_id: Integer,
|
26
26
|
material_max: Integer,
|
27
27
|
strategy_point: Integer,
|
28
|
-
}
|
28
|
+
},
|
29
|
+
3 => {
|
30
|
+
fuel: Integer,
|
31
|
+
ammo: Integer,
|
32
|
+
steel: Integer,
|
33
|
+
bauxite: Integer,
|
34
|
+
bucket: Integer,
|
35
|
+
level: Integer,
|
36
|
+
room_item_coin: Integer,
|
37
|
+
result_point: String,
|
38
|
+
rank: String,
|
39
|
+
title_id: Integer,
|
40
|
+
material_max: Integer,
|
41
|
+
strategy_point: Integer,
|
42
|
+
kou_medal: Integer,
|
43
|
+
},
|
29
44
|
}
|
30
45
|
|
31
46
|
OPTIONAL_KEYS = {
|
@@ -35,6 +50,9 @@ class PersonalBasicInfoParser
|
|
35
50
|
},
|
36
51
|
2 => {
|
37
52
|
admiral_name: String,
|
53
|
+
},
|
54
|
+
3 => {
|
55
|
+
admiral_name: String,
|
38
56
|
}
|
39
57
|
}
|
40
58
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: admiral_stats_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Masahiro Yoshizawa
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-04-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -72,6 +72,7 @@ files:
|
|
72
72
|
- bin/setup
|
73
73
|
- lib/admiral_stats_parser.rb
|
74
74
|
- lib/admiral_stats_parser/model/area_capture_info.rb
|
75
|
+
- lib/admiral_stats_parser/model/blueprint_list_info.rb
|
75
76
|
- lib/admiral_stats_parser/model/character_list_info.rb
|
76
77
|
- lib/admiral_stats_parser/model/equip_book_info.rb
|
77
78
|
- lib/admiral_stats_parser/model/equip_list_info.rb
|
@@ -79,6 +80,7 @@ files:
|
|
79
80
|
- lib/admiral_stats_parser/model/personal_basic_info.rb
|
80
81
|
- lib/admiral_stats_parser/model/tc_book_info.rb
|
81
82
|
- lib/admiral_stats_parser/parser/area_capture_info_parser.rb
|
83
|
+
- lib/admiral_stats_parser/parser/blueprint_list_info_parser.rb
|
82
84
|
- lib/admiral_stats_parser/parser/character_list_info_parser.rb
|
83
85
|
- lib/admiral_stats_parser/parser/equip_book_info_parser.rb
|
84
86
|
- lib/admiral_stats_parser/parser/equip_list_info_parser.rb
|
@@ -106,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
106
108
|
version: '0'
|
107
109
|
requirements: []
|
108
110
|
rubyforge_project:
|
109
|
-
rubygems_version: 2.
|
111
|
+
rubygems_version: 2.6.11
|
110
112
|
signing_key:
|
111
113
|
specification_version: 4
|
112
114
|
summary: JSON data parser for kancolle-arcade.net
|