simple2ch 0.1.8 → 1.1.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.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +25 -0
  4. data/.travis.yml +8 -0
  5. data/README.md +24 -31
  6. data/UPDATES.md +46 -9
  7. data/lib/simple2ch.rb +67 -83
  8. data/lib/simple2ch/bbs.rb +54 -0
  9. data/lib/simple2ch/board.rb +26 -50
  10. data/lib/simple2ch/dat.rb +22 -20
  11. data/lib/simple2ch/regex.rb +16 -0
  12. data/lib/simple2ch/{res.rb → response.rb} +58 -57
  13. data/lib/simple2ch/simple2ch_error.rb +9 -0
  14. data/lib/simple2ch/thread.rb +113 -0
  15. data/lib/simple2ch/version.rb +1 -1
  16. data/simple2ch.gemspec +8 -0
  17. data/spec/bbs_spec.rb +30 -0
  18. data/spec/board_spec.rb +89 -54
  19. data/spec/dat_spec.rb +20 -19
  20. data/spec/response_spec.rb +131 -0
  21. data/spec/simple2ch_spec.rb +19 -50
  22. data/spec/spec_helper.rb +65 -37
  23. data/spec/thread_spec.rb +76 -0
  24. data/spec/vcr/Simple2ch_BBS/_boards/use_cache/behaves_like_boards/from_2ch_sc/1_1_1_1_1_2.yml +1117 -0
  25. data/spec/vcr/Simple2ch_BBS/_boards/use_cache/behaves_like_boards/from_open2ch_net/1_1_1_1_2_2.yml +1136 -0
  26. data/spec/vcr/Simple2ch_BBS/_boards/use_force_reload/behaves_like_boards/from_2ch_sc/1_1_2_1_1_2.yml +1117 -0
  27. data/spec/vcr/Simple2ch_BBS/_boards/use_force_reload/behaves_like_boards/from_2ch_sc/1_1_2_1_1_3.yml +1117 -0
  28. data/spec/vcr/Simple2ch_BBS/_boards/use_force_reload/behaves_like_boards/from_open2ch_net/1_1_2_1_2_2.yml +1136 -0
  29. data/spec/vcr/Simple2ch_BBS/_boards/use_force_reload/behaves_like_boards/from_open2ch_net/1_1_2_1_2_3.yml +1136 -0
  30. data/spec/vcr/Simple2ch_Board/_threads/1_4_1.yml +1238 -0
  31. data/spec/vcr/Simple2ch_Board/_threads/1_4_2.yml +1238 -0
  32. data/spec/vcr/Simple2ch_Board/_threads/1_4_3.yml +1238 -0
  33. data/spec/vcr/Simple2ch_Board/_threads/1_4_7.yml +1238 -0
  34. data/spec/vcr/Simple2ch_Board/_threads/1_4_8.yml +1238 -0
  35. data/spec/vcr/Simple2ch_Board/_threads/1_4_9.yml +1238 -0
  36. data/spec/vcr/Simple2ch_Dat/should_have_responses/1_2_1.yml +953 -0
  37. data/spec/vcr/Simple2ch_Dat/should_have_responses/1_2_3.yml +953 -0
  38. data/spec/vcr/Simple2ch_Dat/should_have_responses/1_2_4.yml +953 -0
  39. data/spec/vcr/Simple2ch_Dat/should_have_responses/size/1_2_2_1.yml +953 -0
  40. data/spec/vcr/Simple2ch_Response/_anchors/when_a_thre_have_both_id_and_non-id_responses/1_2_7_1.yml +5321 -0
  41. data/spec/vcr/Simple2ch_Response/_parse/when_real_data/when_2ch_sc/1_1_2_1_1.yml +1599 -0
  42. data/spec/vcr/Simple2ch_Response/_parse/when_real_data/when_open2ch_net/1_1_2_2_1.yml +1465 -0
  43. data/spec/vcr/Simple2ch_Thread/_new/2ch_sc/1_1_1_1.yml +1410 -0
  44. data/spec/vcr/Simple2ch_Thread/_new/2ch_sc/1_1_1_2.yml +1692 -0
  45. data/spec/vcr/Simple2ch_Thread/_new/open2ch_net/1_1_2_1.yml +1410 -0
  46. data/spec/vcr/Simple2ch_Thread/_new/open2ch_net/1_1_2_2.yml +1999 -0
  47. data/spec/vcr/Simple2ch_Thread/_responses/1_2_1.yml +1599 -0
  48. data/spec/vcr/Simple2ch_Thread/_responses/first/1_2_2_1.yml +1599 -0
  49. data/spec/vcr/Simple2ch_Thread/_responses/first/1_2_3_1.yml +1599 -0
  50. data/spec/vcr/Simple2ch_Thread/_title/1_3_1.yml +1599 -0
  51. data/spec/vcr/Simple2ch_Thread/_title/size/1_3_2_1.yml +1599 -0
  52. metadata +185 -11
  53. data/lib/simple2ch/simple2ch_exception.rb +0 -7
  54. data/lib/simple2ch/thre.rb +0 -140
  55. data/spec/res_spec.rb +0 -123
  56. 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: 0.1.8
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: 2015-03-09 00:00:00.000000000 Z
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/res.rb
114
- - lib/simple2ch/simple2ch_exception.rb
115
- - lib/simple2ch/thre.rb
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/res_spec.rb
238
+ - spec/response_spec.rb
121
239
  - spec/simple2ch_spec.rb
122
240
  - spec/spec_helper.rb
123
- - spec/thre_spec.rb
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.2.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/res_spec.rb
298
+ - spec/response_spec.rb
152
299
  - spec/simple2ch_spec.rb
153
300
  - spec/spec_helper.rb
154
- - spec/thre_spec.rb
155
- has_rdoc:
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
@@ -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{&gt;&gt;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{&gt;&gt;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{&gt;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{&gt;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{&gt;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