simple2ch 0.1.8 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +25 -0
- data/.travis.yml +8 -0
- data/README.md +24 -31
- data/UPDATES.md +46 -9
- data/lib/simple2ch.rb +67 -83
- data/lib/simple2ch/bbs.rb +54 -0
- data/lib/simple2ch/board.rb +26 -50
- data/lib/simple2ch/dat.rb +22 -20
- data/lib/simple2ch/regex.rb +16 -0
- data/lib/simple2ch/{res.rb → response.rb} +58 -57
- data/lib/simple2ch/simple2ch_error.rb +9 -0
- data/lib/simple2ch/thread.rb +113 -0
- data/lib/simple2ch/version.rb +1 -1
- data/simple2ch.gemspec +8 -0
- data/spec/bbs_spec.rb +30 -0
- data/spec/board_spec.rb +89 -54
- data/spec/dat_spec.rb +20 -19
- data/spec/response_spec.rb +131 -0
- data/spec/simple2ch_spec.rb +19 -50
- data/spec/spec_helper.rb +65 -37
- data/spec/thread_spec.rb +76 -0
- data/spec/vcr/Simple2ch_BBS/_boards/use_cache/behaves_like_boards/from_2ch_sc/1_1_1_1_1_2.yml +1117 -0
- data/spec/vcr/Simple2ch_BBS/_boards/use_cache/behaves_like_boards/from_open2ch_net/1_1_1_1_2_2.yml +1136 -0
- data/spec/vcr/Simple2ch_BBS/_boards/use_force_reload/behaves_like_boards/from_2ch_sc/1_1_2_1_1_2.yml +1117 -0
- data/spec/vcr/Simple2ch_BBS/_boards/use_force_reload/behaves_like_boards/from_2ch_sc/1_1_2_1_1_3.yml +1117 -0
- data/spec/vcr/Simple2ch_BBS/_boards/use_force_reload/behaves_like_boards/from_open2ch_net/1_1_2_1_2_2.yml +1136 -0
- data/spec/vcr/Simple2ch_BBS/_boards/use_force_reload/behaves_like_boards/from_open2ch_net/1_1_2_1_2_3.yml +1136 -0
- data/spec/vcr/Simple2ch_Board/_threads/1_4_1.yml +1238 -0
- data/spec/vcr/Simple2ch_Board/_threads/1_4_2.yml +1238 -0
- data/spec/vcr/Simple2ch_Board/_threads/1_4_3.yml +1238 -0
- data/spec/vcr/Simple2ch_Board/_threads/1_4_7.yml +1238 -0
- data/spec/vcr/Simple2ch_Board/_threads/1_4_8.yml +1238 -0
- data/spec/vcr/Simple2ch_Board/_threads/1_4_9.yml +1238 -0
- data/spec/vcr/Simple2ch_Dat/should_have_responses/1_2_1.yml +953 -0
- data/spec/vcr/Simple2ch_Dat/should_have_responses/1_2_3.yml +953 -0
- data/spec/vcr/Simple2ch_Dat/should_have_responses/1_2_4.yml +953 -0
- data/spec/vcr/Simple2ch_Dat/should_have_responses/size/1_2_2_1.yml +953 -0
- data/spec/vcr/Simple2ch_Response/_anchors/when_a_thre_have_both_id_and_non-id_responses/1_2_7_1.yml +5321 -0
- data/spec/vcr/Simple2ch_Response/_parse/when_real_data/when_2ch_sc/1_1_2_1_1.yml +1599 -0
- data/spec/vcr/Simple2ch_Response/_parse/when_real_data/when_open2ch_net/1_1_2_2_1.yml +1465 -0
- data/spec/vcr/Simple2ch_Thread/_new/2ch_sc/1_1_1_1.yml +1410 -0
- data/spec/vcr/Simple2ch_Thread/_new/2ch_sc/1_1_1_2.yml +1692 -0
- data/spec/vcr/Simple2ch_Thread/_new/open2ch_net/1_1_2_1.yml +1410 -0
- data/spec/vcr/Simple2ch_Thread/_new/open2ch_net/1_1_2_2.yml +1999 -0
- data/spec/vcr/Simple2ch_Thread/_responses/1_2_1.yml +1599 -0
- data/spec/vcr/Simple2ch_Thread/_responses/first/1_2_2_1.yml +1599 -0
- data/spec/vcr/Simple2ch_Thread/_responses/first/1_2_3_1.yml +1599 -0
- data/spec/vcr/Simple2ch_Thread/_title/1_3_1.yml +1599 -0
- data/spec/vcr/Simple2ch_Thread/_title/size/1_3_2_1.yml +1599 -0
- metadata +185 -11
- data/lib/simple2ch/simple2ch_exception.rb +0 -7
- data/lib/simple2ch/thre.rb +0 -140
- data/spec/res_spec.rb +0 -123
- data/spec/thre_spec.rb +0 -122
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple2ch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- dogwood008
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-09-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -80,6 +80,76 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: pry
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: pry-byebug
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: pry-stack_explorer
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: vcr
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '3.0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '3.0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: webmock
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '2.1'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '2.1'
|
83
153
|
- !ruby/object:Gem::Dependency
|
84
154
|
name: charwidth
|
85
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +164,48 @@ dependencies:
|
|
94
164
|
- - "~>"
|
95
165
|
- !ruby/object:Gem::Version
|
96
166
|
version: 0.1.3
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: htmlentities
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: 4.3.3
|
174
|
+
type: :runtime
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: 4.3.3
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: retryable
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - "~>"
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: 2.0.1
|
188
|
+
type: :runtime
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - "~>"
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: 2.0.1
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: bbs_2ch_url_validator
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - "~>"
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '0.1'
|
202
|
+
type: :runtime
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - "~>"
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '0.1'
|
97
209
|
description: 2ch Japanese BBS simple reader.
|
98
210
|
email:
|
99
211
|
- dogwood008+rubygems@gmail.com
|
@@ -102,25 +214,59 @@ extensions: []
|
|
102
214
|
extra_rdoc_files: []
|
103
215
|
files:
|
104
216
|
- ".gitignore"
|
217
|
+
- ".rspec"
|
218
|
+
- ".rubocop.yml"
|
219
|
+
- ".travis.yml"
|
105
220
|
- Gemfile
|
106
221
|
- LICENSE.txt
|
107
222
|
- README.md
|
108
223
|
- Rakefile
|
109
224
|
- UPDATES.md
|
110
225
|
- lib/simple2ch.rb
|
226
|
+
- lib/simple2ch/bbs.rb
|
111
227
|
- lib/simple2ch/board.rb
|
112
228
|
- lib/simple2ch/dat.rb
|
113
|
-
- lib/simple2ch/
|
114
|
-
- lib/simple2ch/
|
115
|
-
- lib/simple2ch/
|
229
|
+
- lib/simple2ch/regex.rb
|
230
|
+
- lib/simple2ch/response.rb
|
231
|
+
- lib/simple2ch/simple2ch_error.rb
|
232
|
+
- lib/simple2ch/thread.rb
|
116
233
|
- lib/simple2ch/version.rb
|
117
234
|
- simple2ch.gemspec
|
235
|
+
- spec/bbs_spec.rb
|
118
236
|
- spec/board_spec.rb
|
119
237
|
- spec/dat_spec.rb
|
120
|
-
- spec/
|
238
|
+
- spec/response_spec.rb
|
121
239
|
- spec/simple2ch_spec.rb
|
122
240
|
- spec/spec_helper.rb
|
123
|
-
- spec/
|
241
|
+
- spec/thread_spec.rb
|
242
|
+
- spec/vcr/Simple2ch_BBS/_boards/use_cache/behaves_like_boards/from_2ch_sc/1_1_1_1_1_2.yml
|
243
|
+
- spec/vcr/Simple2ch_BBS/_boards/use_cache/behaves_like_boards/from_open2ch_net/1_1_1_1_2_2.yml
|
244
|
+
- spec/vcr/Simple2ch_BBS/_boards/use_force_reload/behaves_like_boards/from_2ch_sc/1_1_2_1_1_2.yml
|
245
|
+
- spec/vcr/Simple2ch_BBS/_boards/use_force_reload/behaves_like_boards/from_2ch_sc/1_1_2_1_1_3.yml
|
246
|
+
- spec/vcr/Simple2ch_BBS/_boards/use_force_reload/behaves_like_boards/from_open2ch_net/1_1_2_1_2_2.yml
|
247
|
+
- spec/vcr/Simple2ch_BBS/_boards/use_force_reload/behaves_like_boards/from_open2ch_net/1_1_2_1_2_3.yml
|
248
|
+
- spec/vcr/Simple2ch_Board/_threads/1_4_1.yml
|
249
|
+
- spec/vcr/Simple2ch_Board/_threads/1_4_2.yml
|
250
|
+
- spec/vcr/Simple2ch_Board/_threads/1_4_3.yml
|
251
|
+
- spec/vcr/Simple2ch_Board/_threads/1_4_7.yml
|
252
|
+
- spec/vcr/Simple2ch_Board/_threads/1_4_8.yml
|
253
|
+
- spec/vcr/Simple2ch_Board/_threads/1_4_9.yml
|
254
|
+
- spec/vcr/Simple2ch_Dat/should_have_responses/1_2_1.yml
|
255
|
+
- spec/vcr/Simple2ch_Dat/should_have_responses/1_2_3.yml
|
256
|
+
- spec/vcr/Simple2ch_Dat/should_have_responses/1_2_4.yml
|
257
|
+
- spec/vcr/Simple2ch_Dat/should_have_responses/size/1_2_2_1.yml
|
258
|
+
- spec/vcr/Simple2ch_Response/_anchors/when_a_thre_have_both_id_and_non-id_responses/1_2_7_1.yml
|
259
|
+
- spec/vcr/Simple2ch_Response/_parse/when_real_data/when_2ch_sc/1_1_2_1_1.yml
|
260
|
+
- spec/vcr/Simple2ch_Response/_parse/when_real_data/when_open2ch_net/1_1_2_2_1.yml
|
261
|
+
- spec/vcr/Simple2ch_Thread/_new/2ch_sc/1_1_1_1.yml
|
262
|
+
- spec/vcr/Simple2ch_Thread/_new/2ch_sc/1_1_1_2.yml
|
263
|
+
- spec/vcr/Simple2ch_Thread/_new/open2ch_net/1_1_2_1.yml
|
264
|
+
- spec/vcr/Simple2ch_Thread/_new/open2ch_net/1_1_2_2.yml
|
265
|
+
- spec/vcr/Simple2ch_Thread/_responses/1_2_1.yml
|
266
|
+
- spec/vcr/Simple2ch_Thread/_responses/first/1_2_2_1.yml
|
267
|
+
- spec/vcr/Simple2ch_Thread/_responses/first/1_2_3_1.yml
|
268
|
+
- spec/vcr/Simple2ch_Thread/_title/1_3_1.yml
|
269
|
+
- spec/vcr/Simple2ch_Thread/_title/size/1_3_2_1.yml
|
124
270
|
homepage: https://github.com/dogwood008/simple2ch
|
125
271
|
licenses:
|
126
272
|
- MIT
|
@@ -141,15 +287,43 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
141
287
|
version: '0'
|
142
288
|
requirements: []
|
143
289
|
rubyforge_project:
|
144
|
-
rubygems_version: 2.
|
290
|
+
rubygems_version: 2.5.1
|
145
291
|
signing_key:
|
146
292
|
specification_version: 4
|
147
293
|
summary: 2ch Japanese BBS simple reader.
|
148
294
|
test_files:
|
295
|
+
- spec/bbs_spec.rb
|
149
296
|
- spec/board_spec.rb
|
150
297
|
- spec/dat_spec.rb
|
151
|
-
- spec/
|
298
|
+
- spec/response_spec.rb
|
152
299
|
- spec/simple2ch_spec.rb
|
153
300
|
- spec/spec_helper.rb
|
154
|
-
- spec/
|
155
|
-
|
301
|
+
- spec/thread_spec.rb
|
302
|
+
- spec/vcr/Simple2ch_BBS/_boards/use_cache/behaves_like_boards/from_2ch_sc/1_1_1_1_1_2.yml
|
303
|
+
- spec/vcr/Simple2ch_BBS/_boards/use_cache/behaves_like_boards/from_open2ch_net/1_1_1_1_2_2.yml
|
304
|
+
- spec/vcr/Simple2ch_BBS/_boards/use_force_reload/behaves_like_boards/from_2ch_sc/1_1_2_1_1_2.yml
|
305
|
+
- spec/vcr/Simple2ch_BBS/_boards/use_force_reload/behaves_like_boards/from_2ch_sc/1_1_2_1_1_3.yml
|
306
|
+
- spec/vcr/Simple2ch_BBS/_boards/use_force_reload/behaves_like_boards/from_open2ch_net/1_1_2_1_2_2.yml
|
307
|
+
- spec/vcr/Simple2ch_BBS/_boards/use_force_reload/behaves_like_boards/from_open2ch_net/1_1_2_1_2_3.yml
|
308
|
+
- spec/vcr/Simple2ch_Board/_threads/1_4_1.yml
|
309
|
+
- spec/vcr/Simple2ch_Board/_threads/1_4_2.yml
|
310
|
+
- spec/vcr/Simple2ch_Board/_threads/1_4_3.yml
|
311
|
+
- spec/vcr/Simple2ch_Board/_threads/1_4_7.yml
|
312
|
+
- spec/vcr/Simple2ch_Board/_threads/1_4_8.yml
|
313
|
+
- spec/vcr/Simple2ch_Board/_threads/1_4_9.yml
|
314
|
+
- spec/vcr/Simple2ch_Dat/should_have_responses/1_2_1.yml
|
315
|
+
- spec/vcr/Simple2ch_Dat/should_have_responses/1_2_3.yml
|
316
|
+
- spec/vcr/Simple2ch_Dat/should_have_responses/1_2_4.yml
|
317
|
+
- spec/vcr/Simple2ch_Dat/should_have_responses/size/1_2_2_1.yml
|
318
|
+
- spec/vcr/Simple2ch_Response/_anchors/when_a_thre_have_both_id_and_non-id_responses/1_2_7_1.yml
|
319
|
+
- spec/vcr/Simple2ch_Response/_parse/when_real_data/when_2ch_sc/1_1_2_1_1.yml
|
320
|
+
- spec/vcr/Simple2ch_Response/_parse/when_real_data/when_open2ch_net/1_1_2_2_1.yml
|
321
|
+
- spec/vcr/Simple2ch_Thread/_new/2ch_sc/1_1_1_1.yml
|
322
|
+
- spec/vcr/Simple2ch_Thread/_new/2ch_sc/1_1_1_2.yml
|
323
|
+
- spec/vcr/Simple2ch_Thread/_new/open2ch_net/1_1_2_1.yml
|
324
|
+
- spec/vcr/Simple2ch_Thread/_new/open2ch_net/1_1_2_2.yml
|
325
|
+
- spec/vcr/Simple2ch_Thread/_responses/1_2_1.yml
|
326
|
+
- spec/vcr/Simple2ch_Thread/_responses/first/1_2_2_1.yml
|
327
|
+
- spec/vcr/Simple2ch_Thread/_responses/first/1_2_3_1.yml
|
328
|
+
- spec/vcr/Simple2ch_Thread/_title/1_3_1.yml
|
329
|
+
- spec/vcr/Simple2ch_Thread/_title/size/1_3_2_1.yml
|
@@ -1,7 +0,0 @@
|
|
1
|
-
module Simple2ch
|
2
|
-
class Simple2chException < StandardError; end
|
3
|
-
class NotA2chUrlException < Simple2chException; end
|
4
|
-
class KakoLogException < Simple2chException; end
|
5
|
-
class DatParseException < Simple2chException; end
|
6
|
-
class NoThreGivenException < Simple2chException; end
|
7
|
-
end
|
data/lib/simple2ch/thre.rb
DELETED
@@ -1,140 +0,0 @@
|
|
1
|
-
module Simple2ch
|
2
|
-
class Thre
|
3
|
-
# @return [String] スレッドキー(Unix time)
|
4
|
-
attr_reader :thread_key
|
5
|
-
# @return [Fixnum] 返信の数
|
6
|
-
attr_reader :num_of_response
|
7
|
-
# @return [Board] 属する板
|
8
|
-
attr_reader :board
|
9
|
-
|
10
|
-
# @param [Board] board スレッドが属する板情報
|
11
|
-
# @param [String] thread_key スレッドキー
|
12
|
-
# @param [String] title スレッド名
|
13
|
-
# @param [Fixnum] num_of_response 総書き込み数
|
14
|
-
def initialize(board, thread_key, title: '', num_of_response: '')
|
15
|
-
@board = board
|
16
|
-
@thread_key = thread_key
|
17
|
-
@title = title
|
18
|
-
@num_of_response = num_of_response
|
19
|
-
@reses = nil
|
20
|
-
@f_kako_log = nil
|
21
|
-
@received_anchors = nil
|
22
|
-
end
|
23
|
-
|
24
|
-
# 板オブジェクトとsubject.txtの1行データを渡すとスレオブジェクトを返す
|
25
|
-
# @param [Board] board スレッドが属する板情報
|
26
|
-
# @param [String] thread_data 0000000000.dat<>スレッドタイトル (レス数)
|
27
|
-
# @return [Thre] スレ
|
28
|
-
def self.parse(board, thread_data)
|
29
|
-
thread_data =~ /(\d{10})\.dat<>(.+) \((\d+)\)/
|
30
|
-
hash = {}
|
31
|
-
thread_key = $1
|
32
|
-
hash[:title] = $2
|
33
|
-
hash[:num_of_response] = $3.to_i
|
34
|
-
self.new board, thread_key, hash
|
35
|
-
end
|
36
|
-
|
37
|
-
# スレのURLからスレオブジェクトを生成して返す
|
38
|
-
# @param [String] url URL
|
39
|
-
# @return [Thre] スレ
|
40
|
-
def self.create_from_url(url)
|
41
|
-
board = Simple2ch::Board.new('', url, fetch_title: true)
|
42
|
-
thread_key = Simple2ch.parse_url(url)[:thread_key]
|
43
|
-
thre = board.thres.find{|t| t.thread_key == thread_key}
|
44
|
-
unless thre
|
45
|
-
thre = Thre.new board, thread_key
|
46
|
-
thre.reses
|
47
|
-
end
|
48
|
-
thre
|
49
|
-
end
|
50
|
-
|
51
|
-
# Datを解析して、レスを返す
|
52
|
-
# @param [Array<Fixnum>,Fixnum] num_of_reses 取得したいレス番号
|
53
|
-
# @return [Array<Res>] レスの配列
|
54
|
-
def reses(num_of_reses=nil)
|
55
|
-
fetch_dat unless @reses
|
56
|
-
case num_of_reses
|
57
|
-
when Array
|
58
|
-
if num_of_reses.size > 0
|
59
|
-
@reses.find_all { |r|
|
60
|
-
num_of_reses.index(r.res_num)
|
61
|
-
}
|
62
|
-
else
|
63
|
-
raise 'Blank array was given.'
|
64
|
-
end
|
65
|
-
when Fixnum
|
66
|
-
@reses.find { |r| r.res_num == num_of_reses }
|
67
|
-
when NilClass
|
68
|
-
@reses
|
69
|
-
end
|
70
|
-
end
|
71
|
-
alias_method :res, :reses
|
72
|
-
|
73
|
-
# 過去ログかどうかを返す
|
74
|
-
# @return [Boolean] 過去ログか否か
|
75
|
-
def kako_log?
|
76
|
-
fetch_dat if @f_kako_log.nil?
|
77
|
-
@f_kako_log
|
78
|
-
end
|
79
|
-
|
80
|
-
# 全てのレスに対し、あるレスへのアンカーが書き込まれているレス番号のハッシュを返す
|
81
|
-
# @return [Hash]{ res_num<Fixnum> => res_nums<Array<Fixnum>> } レス番号のハッシュ
|
82
|
-
def received_anchors
|
83
|
-
@received_anchors ||= calc_received_anchors
|
84
|
-
end
|
85
|
-
|
86
|
-
# 2chタイプ名の取得
|
87
|
-
# @return [Symbol] 2chタイプ名(:net, :sc, :open)
|
88
|
-
def type_of_2ch
|
89
|
-
@board ? @board.type_of_2ch : nil
|
90
|
-
end
|
91
|
-
|
92
|
-
# スレのURLを返す
|
93
|
-
# @return [String] スレのURL
|
94
|
-
def url
|
95
|
-
tld = type_of_2ch == :sc ? :sc : :net
|
96
|
-
"http://#{@board.server_name}.#{type_of_2ch==:open ? 'open' : ''}2ch.#{tld}/test/read.cgi/#{@board.board_name}/#{@thread_key}/"
|
97
|
-
end
|
98
|
-
|
99
|
-
# スレのdatURLを返す
|
100
|
-
# @return [String] スレのdatURL
|
101
|
-
def dat_url
|
102
|
-
tld = type_of_2ch == :sc ? :sc : :net
|
103
|
-
"http://#{@board.server_name}.#{type_of_2ch==:open ? 'open' : ''}2ch.#{tld}/#{@board.board_name}/dat/#{@thread_key}.dat"
|
104
|
-
end
|
105
|
-
|
106
|
-
# タイトルを返す
|
107
|
-
# @return [String] スレッドの名前
|
108
|
-
def title
|
109
|
-
unless @title
|
110
|
-
fetch_dat
|
111
|
-
end
|
112
|
-
@title
|
113
|
-
end
|
114
|
-
|
115
|
-
private
|
116
|
-
# 全てのレスに対し、あるレスへのアンカーが書き込まれているレス番号のハッシュを返す
|
117
|
-
# @return [Hash]{ res_num<Fixnum> => res_nums<Array<Fixnum>> } レス番号のハッシュ
|
118
|
-
def calc_received_anchors
|
119
|
-
ret = {}
|
120
|
-
reses.each do |res|
|
121
|
-
res.anchors.each do |anchor|
|
122
|
-
ret.store(anchor, ret.fetch(anchor, []).push(res.res_num))
|
123
|
-
end
|
124
|
-
end
|
125
|
-
ret
|
126
|
-
end
|
127
|
-
|
128
|
-
# Datを取ってきてレスと過去ログかどうかを返す
|
129
|
-
# @return [Boolean] f_kako_log 過去ログか否か
|
130
|
-
def fetch_dat
|
131
|
-
dat = Dat.new(self)
|
132
|
-
@reses = dat.reses
|
133
|
-
@num_of_response = @reses.size
|
134
|
-
@f_kako_log = dat.kako_log?
|
135
|
-
@title = dat.title if !@title || @title.empty?
|
136
|
-
dat = nil
|
137
|
-
@f_kako_log
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
data/spec/res_spec.rb
DELETED
@@ -1,123 +0,0 @@
|
|
1
|
-
require 'rspec'
|
2
|
-
require 'spec_helper'
|
3
|
-
|
4
|
-
describe Simple2ch::Res do
|
5
|
-
let(:dat_data) { %q{以下、\(^o^)/でVIPがお送りします<><>2014/09/04(木) 18:46:36.03 ID:wBAvTswZ0.net<> http://livedoor.blogimg.jp/hatima/imgs/b/c/bccae87d.jpg <br> <br> <br> ※二次創作ではなく、公式です <>古参よ、これが今の東方projectだ
|
6
|
-
以下、\(^o^)/でVIPがお送りします<><>2014/09/04(木) 18:47:10.12 ID:X4fy/81O0.net<> うそつけ <>
|
7
|
-
以下、\(^o^)/でVIPがお送りします<><>2014/09/04(木) 18:47:14.08 ID:WDyAzc5v0.net<> 嘘乙 <>
|
8
|
-
以下、\(^o^)/でVIPがお送りします<><>2014/09/04(木) 18:47:19.71 ID:9QYJSuKn0.net<> 正直楽しみ <>
|
9
|
-
以下、\(^o^)/でVIPがお送りします<><>2014/09/04(木) 18:47:35.65 ID:rbjZvMWo0.net<> はてぃま <>
|
10
|
-
以下、\(^o^)/でVIPがお送りします<><>2014/09/04(木) 18:47:41.41 ID:bHgEtoQU0.net<> 思い切り二次創作じゃねえか <br> PS4でやるんだっけ <>} }
|
11
|
-
let(:res) { dat_data.split(/\n/).map.with_index(1) { |d, i| Simple2ch::Res.parse i, d } }
|
12
|
-
|
13
|
-
describe 'should have res number' do
|
14
|
-
subject { res[0].res_num }
|
15
|
-
it { is_expected.to be_a_kind_of(Numeric) }
|
16
|
-
it { is_expected.to be > 0 }
|
17
|
-
end
|
18
|
-
|
19
|
-
describe 'should have author' do
|
20
|
-
subject { res[0].author }
|
21
|
-
it { is_expected.to be_a_kind_of(String) }
|
22
|
-
it { is_expected.not_to be eq nil }
|
23
|
-
end
|
24
|
-
|
25
|
-
describe 'should have author_id' do
|
26
|
-
subject { res[0].author_id }
|
27
|
-
it { is_expected.to be_a_kind_of(String) }
|
28
|
-
it { is_expected.not_to be eq nil }
|
29
|
-
end
|
30
|
-
|
31
|
-
describe 'should have contents' do
|
32
|
-
subject { res[0].contents }
|
33
|
-
it { is_expected.to be_a_kind_of(String) }
|
34
|
-
it { is_expected.not_to be eq nil }
|
35
|
-
end
|
36
|
-
|
37
|
-
describe 'should have date' do
|
38
|
-
subject { res[0].date }
|
39
|
-
it { is_expected.to be_a_kind_of(Time) }
|
40
|
-
it { is_expected.not_to be eq nil }
|
41
|
-
end
|
42
|
-
|
43
|
-
describe '#anchors' do
|
44
|
-
shared_examples('have valid anchors') do
|
45
|
-
let(:res_num) { 100 }
|
46
|
-
subject { Res.new(res_num, contents: contents) }
|
47
|
-
|
48
|
-
describe 'that\'s anchored res is valid' do
|
49
|
-
its(:anchors) { is_expected.to be_a_kind_of Array }
|
50
|
-
its(:anchors) { is_expected.to be == anchor }
|
51
|
-
its('anchors.size') { is_expected.to be == anchor.size }
|
52
|
-
end
|
53
|
-
end
|
54
|
-
context 'when it have anchors separated commas' do
|
55
|
-
let(:contents) { %Q{>>1, 2, 3,12, 34\n9} }
|
56
|
-
let(:anchor) { [1, 2, 3, 12, 34] }
|
57
|
-
it_behaves_like 'have valid anchors'
|
58
|
-
end
|
59
|
-
context 'when it have anchors separated commas & spaces' do
|
60
|
-
let(:contents) { %Q{>>1, 2, 3 4 5 6, 12、 34\n9} }
|
61
|
-
let(:anchor) { [1, 2, 3, 4, 5, 6, 12, 34] }
|
62
|
-
it_behaves_like 'have valid anchors'
|
63
|
-
end
|
64
|
-
context 'when it have anchors range' do
|
65
|
-
let(:contents) { %Q{>1-5\n9} }
|
66
|
-
let(:anchor) { (1..5).to_a }
|
67
|
-
it_behaves_like 'have valid anchors'
|
68
|
-
end
|
69
|
-
context 'when it have range and separated anchors pattern#1' do
|
70
|
-
let(:contents) { %Q{>1-5,6,8} }
|
71
|
-
let(:anchor) { [1, 2, 3, 4, 5, 6, 8] }
|
72
|
-
it_behaves_like 'have valid anchors'
|
73
|
-
end
|
74
|
-
context 'when it have range and separated anchors pattern#2' do
|
75
|
-
let(:contents) { %Q{>1,3, 9−13\n25} }
|
76
|
-
let(:anchor) { [1, 3, 9, 10, 11, 12, 13] }
|
77
|
-
it_behaves_like 'have valid anchors'
|
78
|
-
end
|
79
|
-
context 'when it have ARASHI anchors' do
|
80
|
-
let(:contents) { %Q{>1,2,3,4,5,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,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,
|
81
|
-
>52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,
|
82
|
-
|
83
|
-
>>1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
|
84
|
-
∧_∧
|
85
|
-
(´・ω・`) n
|
86
|
-
 ̄ .. \ ( E)
|
87
|
-
フ ア.フ.ィ /ヽ ヽ_//
|
88
|
-
>>21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40
|
89
|
-
∧_∧
|
90
|
-
(´・ω・`) n
|
91
|
-
 ̄ .. \ ( E)
|
92
|
-
フ ア.フ.ィ /ヽ ヽ_//
|
93
|
-
>>41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60 } }
|
94
|
-
let(:anchor) { [] }
|
95
|
-
it_behaves_like 'have valid anchors'
|
96
|
-
end
|
97
|
-
context 'when a thre have both id and non-id reses', force: true do
|
98
|
-
let(:board_name) { 'プログラム技術' }
|
99
|
-
let(:url) { 'http://toro.2ch.sc/tech/' }
|
100
|
-
let(:thread_key) { '1382307475' }
|
101
|
-
let(:board) { Board.new(board_name, url) }
|
102
|
-
let(:thre) { Thre.new(board, thread_key) }
|
103
|
-
subject { thre.reses }
|
104
|
-
it { is_expected.to be_a_kind_of Array }
|
105
|
-
end
|
106
|
-
|
107
|
-
end
|
108
|
-
|
109
|
-
describe '#recepted_anchors' do
|
110
|
-
let(:board_name) { 'ニュー速VIP' }
|
111
|
-
let(:url) { 'http://viper.2ch.sc/news4vip/' }
|
112
|
-
let(:thread_key) { '1409796283' }
|
113
|
-
let(:board) { Board.new board_name, url }
|
114
|
-
let(:thre) { Thre.new board, thread_key }
|
115
|
-
let(:res) { thre.reses([40])[0] }
|
116
|
-
let(:input_thre) { res.thre = thre }
|
117
|
-
subject { input_thre; res.received_anchors }
|
118
|
-
it { is_expected.to be_a_kind_of Array }
|
119
|
-
its(:size) { is_expected.to be == 4 }
|
120
|
-
it { is_expected.to be == [43, 44, 45, 54] }
|
121
|
-
end
|
122
|
-
|
123
|
-
end
|