simple2ch 0.1.8 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,3 +1,3 @@
1
1
  module Simple2ch
2
- VERSION = "0.1.8"
2
+ VERSION = '1.1.0'
3
3
  end
data/simple2ch.gemspec CHANGED
@@ -24,9 +24,17 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency "rspec"
25
25
  spec.add_development_dependency "rspec-core"
26
26
  spec.add_development_dependency 'rspec-its'
27
+ spec.add_development_dependency 'pry'
28
+ spec.add_development_dependency 'pry-byebug'
29
+ spec.add_development_dependency 'pry-stack_explorer'
30
+ spec.add_development_dependency 'vcr', '~> 3.0'
31
+ spec.add_development_dependency 'webmock', '~> 2.1'
27
32
 
28
33
  spec.required_ruby_version = '~> 2.0'
29
34
  spec.add_dependency 'charwidth', '~> 0.1.3'
35
+ spec.add_dependency 'htmlentities', '~> 4.3.3'
36
+ spec.add_dependency 'retryable', '~> 2.0.1'
37
+ spec.add_dependency 'bbs_2ch_url_validator', '~>0.1'
30
38
 
31
39
  # spec.add_development_dependency 'spring'
32
40
  # spec.add_development_dependency 'zeus'
data/spec/bbs_spec.rb ADDED
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ VCR.use_cassette 'bbs' do
4
+ describe Simple2ch::BBS, vcr: true do
5
+ describe '#boards' do
6
+ shared_examples '#boards' do |force_reload|
7
+ shared_examples 'get board list from bbsmenu' do |bbs, type_of_2ch|
8
+ subject { bbs.boards(force_reload: force_reload) }
9
+ it { expect(bbs.type_of_2ch).to eq type_of_2ch }
10
+ it { is_expected.not_to be_empty }
11
+ it { is_expected.to have_news4vip }
12
+ end
13
+
14
+ context 'from 2ch.sc' do
15
+ include_examples 'get board list from bbsmenu', Simple2ch::BBS.new(:sc), :sc
16
+ end
17
+ context 'from open2ch.net' do
18
+ include_examples 'get board list from bbsmenu', Simple2ch::BBS.new(:open), :open
19
+ end
20
+ end
21
+
22
+ context 'use cache' do
23
+ it_behaves_like '#boards', false
24
+ end
25
+ context 'use force reload' do
26
+ it_behaves_like '#boards', true
27
+ end
28
+ end
29
+ end
30
+ end
data/spec/board_spec.rb CHANGED
@@ -1,68 +1,103 @@
1
1
  require 'rspec'
2
2
  require 'spec_helper'
3
3
 
4
- describe Simple2ch::Board do
5
- let(:title) { 'ニュー速VIP' }
6
- let(:url) do
7
- {
8
- sc: 'http://viper.2ch.sc/news4vip/',
9
- net: 'http://viper.2ch.net/news4vip/',
10
- open: 'http://viper.open2ch.net/news4vip/',
11
- not_a_2ch_format: 'http://test.example.com/hoge/',
12
- invalid_url: 'http://abc_def.com/foobar/' # under score in host is invalid
13
- }
14
- end
15
- let(:board) { Simple2ch::Board.new(title, url[:sc]) }
16
-
17
- describe 'have a type of 2ch' do
18
- subject{ Simple2ch::Board.new(title, given_url) }
19
- context 'when 2ch.net' do
20
- let(:given_url){ url[:net] }
21
- its(:type_of_2ch){ is_expected.to eq :net }
4
+ VCR.use_cassette 'board' do
5
+ describe Simple2ch::Board, vcr: true do
6
+ before(:all) do
7
+ @sc = Simple2ch::BBS.new(:sc)
8
+ @open = Simple2ch::BBS.new(:open)
22
9
  end
23
- context 'when 2ch.sc' do
24
- let(:given_url){ url[:sc] }
25
- its(:type_of_2ch){ is_expected.to eq :sc }
10
+
11
+ let(:title) { 'ニュー速VIP' }
12
+ let(:boards) do
13
+ {
14
+ sc: {
15
+ url: 'http://viper.2ch.sc/news4vip/',
16
+ title: 'ニュー速VIP'
17
+ },
18
+ open: {
19
+ url: 'http://viper.open2ch.net/news4vip/',
20
+ title: 'ニュー速VIP'
21
+ },
22
+ not_a_2ch_format: {
23
+ url: 'http://test.example.com/hoge/',
24
+ title: nil
25
+ },
26
+ invalid_url: {
27
+ url: 'http://^example.com', # carat in host is invalid
28
+ title: nil
29
+ }
30
+ }
26
31
  end
27
- context 'when open2ch.net' do
28
- let(:given_url){ url[:open] }
29
- its(:type_of_2ch){ is_expected.to eq :open }
32
+ let(:threads) do
33
+ {
34
+ sc: {
35
+ url: 'http://viper.2ch.sc/test/read.cgi/news4vip/9990000001/',
36
+ title: '★★★ 2ちゃんねる(sc)のご案内 ★★★'.force_encoding('utf-8')
37
+ },
38
+ open: open2ch_thread_data_example
39
+ }
30
40
  end
31
- end
32
41
 
33
- context 'should get board title' do
34
- subject { board.title }
35
- it { is_expected.to be_a_kind_of(String) }
36
- it { is_expected.to eq title }
37
- end
42
+ let(:board) { Simple2ch::Board.new(url, title: title) }
38
43
 
39
- context 'should get board url' do
40
- subject { board.url }
41
- it { is_expected.to be_a_kind_of(URI) }
42
- it { is_expected.to eq URI.parse(url[:sc]) }
43
- end
44
+ describe '#new' do
45
+ context 'should raise NotA2chUrlException if URL is not a 2ch format' do
46
+ subject { -> { Simple2ch::Board.new(boards[:not_a_2ch_format][:url], title: title) } }
47
+ it { is_expected.to raise_error Simple2ch::NotA2chUrlError }
48
+ end
44
49
 
45
- context 'should get all of thread' do
46
- subject { board.thres }
47
- it { is_expected.to be_a_kind_of(Array) }
48
- it { subject.each{ |t| expect(t).to be_a_kind_of(Simple2ch::Thre) } }
49
- its(:size) { is_expected.to be > 0 }
50
- end
50
+ context 'should raise URI::InvalidURL if URL is invalid format' do
51
+ subject { -> { Simple2ch::Board.new(boards[:invalid_url][:url], title: title) } }
52
+ it { is_expected.to raise_error Simple2ch::NotA2chUrlError }
53
+ end
54
+ end
51
55
 
52
- context 'should be a valid Simple2ch::Board object' do
53
- subject { Simple2ch::Board.new(title, url[:open]) }
54
- its(:title) { is_expected.to be_a_kind_of String }
55
- its(:title) { is_expected.to be == title }
56
- its('url.to_s') { is_expected.to be == url[:open] }
57
- end
56
+ describe '#title' do
57
+ shared_examples '#title' do
58
+ subject { board.title }
59
+ it { is_expected.to be_a_kind_of(String) }
60
+ it { is_expected.to eq title }
61
+ end
62
+ include_examples '#title' do
63
+ let(:url) { boards[:sc][:url] }
64
+ end
65
+ include_examples '#title' do
66
+ let(:url) { boards[:open][:url] }
67
+ end
68
+ end
58
69
 
59
- context 'should raise NotA2chUrlException if URL is not a 2ch format' do
60
- subject { lambda{ Simple2ch::Board.new(title, url[:not_a_2ch_format]) } }
61
- it { is_expected.to raise_error Simple2ch::NotA2chUrlException }
62
- end
70
+ describe '#url' do
71
+ shared_examples '#url' do
72
+ subject { board.url.to_s }
73
+ it { is_expected.to be_a_kind_of(String) }
74
+ it { is_expected.to eq url }
75
+ end
76
+ include_examples '#url' do
77
+ let(:url) { boards[:sc][:url] }
78
+ end
79
+ include_examples '#url' do
80
+ let(:url) { boards[:open][:url] }
81
+ end
82
+ end
63
83
 
64
- context 'should raise URI::InvalidURL if URL is invalid format' do
65
- subject { lambda{ Simple2ch::Board.new(title, url[:invalid_url]) } }
66
- it { is_expected.to raise_error URI::InvalidURIError }
84
+ describe '#threads' do
85
+ shared_examples '#threads' do
86
+ let(:board) { Simple2ch::Board.new(url, title: title) }
87
+ subject { board.threads }
88
+ it { is_expected.to be_a_kind_of(Array) }
89
+ it { subject.each { |t| expect(t).to be_a_kind_of(Simple2ch::Thread) } }
90
+ it { expect(board.threads.size).to be > 0 }
91
+ it { expect(board.title).to be_a_kind_of String }
92
+ it { expect(board.title).to eq title }
93
+ it { expect(board.url.built_url).to eq url }
94
+ end
95
+ include_examples '#threads' do
96
+ let(:url) { boards[:sc][:url] }
97
+ end
98
+ include_examples '#threads' do
99
+ let(:url) { boards[:open][:url] }
100
+ end
101
+ end
67
102
  end
68
103
  end
data/spec/dat_spec.rb CHANGED
@@ -1,27 +1,28 @@
1
1
  require 'rspec'
2
2
  require 'spec_helper'
3
3
 
4
- describe Simple2ch::Dat do
5
- let(:board) { Simple2ch::Board.new 'ニュース速報(VIP)', 'http://viper.2ch.sc/news4vip/' }
6
- let(:dat_data) { '1409796283.dat<>C言語の勉強始めたんだがな (144)' }
7
- let(:thre) { Simple2ch::Thre.parse(board, dat_data) }
8
- let(:thread_key) { '1409796283' }
9
- let(:dat) { Simple2ch::Dat.new thre }
4
+ VCR.use_cassette 'dat' do
5
+ describe Simple2ch::Dat, vcr: true do
6
+ #let(:dat_data) { '1409796283.dat<>C言語の勉強始めたんだがな (144)' }
7
+ let(:thre) { Simple2ch::Thread.new('http://viper.2ch.sc/test/read.cgi/news4vip/1409796283/') }
8
+ let(:thread_key) { '1409796283' }
9
+ let(:dat) { Simple2ch::Dat.new thre }
10
10
 
11
- context 'should have thread key' do
12
- subject { dat.thread_key }
13
- it { is_expected.to be_a_kind_of(String) }
14
- it { is_expected.to match /\d{10}/ }
15
- end
11
+ context 'should have thread key' do
12
+ subject { dat.url.thread_key }
13
+ it { is_expected.to be_a_kind_of(String) }
14
+ it { is_expected.to match /\d{10}/ }
15
+ end
16
16
 
17
- context 'should have reses' do
18
- subject { dat.reses }
19
- it { is_expected.to be_a_kind_of(Array) }
20
- its(:size) { is_expected.to be == 144 }
21
- it { expect(dat.kako_log?).to be == true }
22
- it do
23
- subject.each do |r|
24
- expect(r).to be_a_kind_of(Simple2ch::Res)
17
+ context 'should have responses' do
18
+ subject { dat.responses }
19
+ it { is_expected.to be_a_kind_of(Array) }
20
+ its(:size) { is_expected.to be == 144 }
21
+ it { expect(dat.kako_log?).to be == true }
22
+ it do
23
+ subject.each do |r|
24
+ expect(r).to be_a_kind_of(Simple2ch::Response)
25
+ end
25
26
  end
26
27
  end
27
28
  end
@@ -0,0 +1,131 @@
1
+ require 'rspec'
2
+ require 'spec_helper'
3
+
4
+ VCR.use_cassette 'response' do
5
+ describe Simple2ch::Response, vcr: true do
6
+ before(:all) do
7
+ @sc = Simple2ch::BBS.new(:sc)
8
+ @open = Simple2ch::BBS.new(:open)
9
+ end
10
+
11
+ let(:boards) do
12
+ {
13
+ sc: {
14
+ url: 'http://viper.2ch.sc/news4vip/',
15
+ title: 'ニュー速VIP'
16
+ },
17
+ open: {
18
+ url: 'http://viper.open2ch.net/news4vip/',
19
+ title: 'ニュー速VIP'
20
+ },
21
+ }
22
+ end
23
+
24
+ let(:threads) do
25
+ {
26
+ sc: {
27
+ url: 'http://viper.2ch.sc/test/read.cgi/news4vip/9990000001/',
28
+ title: '★★★ 2ちゃんねる(sc)のご案内 ★★★'.force_encoding('utf-8')
29
+ },
30
+ open: open2ch_thread_data_example
31
+ }
32
+ end
33
+
34
+ describe '#parse' do
35
+ context 'when prepared dat' do
36
+ 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だ
37
+ 以下、\(^o^)/でVIPがお送りします<><>2014/09/04(木) 18:47:10.12 ID:X4fy/81O0.net<> うそつけ <>
38
+ 以下、\(^o^)/でVIPがお送りします<><>2014/09/04(木) 18:47:14.08 ID:WDyAzc5v0.net<> 嘘乙 <>
39
+ 以下、\(^o^)/でVIPがお送りします<><>2014/09/04(木) 18:47:19.71 ID:9QYJSuKn0.net<> 正直楽しみ <>
40
+ 以下、\(^o^)/でVIPがお送りします<><>2014/09/04(木) 18:47:35.65 ID:rbjZvMWo0.net<> はてぃま <>
41
+ 以下、\(^o^)/でVIPがお送りします<><>2014/09/04(木) 18:47:41.41 ID:bHgEtoQU0.net<> 思い切り二次創作じゃねえか <br> PS4でやるんだっけ <>} }
42
+ let(:replies) { dat_data.split(/\n/).map.with_index(1) { |d, i| Simple2ch::Response.parse i, d } }
43
+ it { replies.each { |r| expect(r).to be_a_valid_response } }
44
+ end
45
+ context 'when real data' do
46
+ shared_examples '#parse' do
47
+ let(:thread_url) { threads[type_of_2ch][:url] }
48
+ let(:dat_url) { Simple2ch.generate_url(:dat, thread_url) }
49
+ let(:dat) { Simple2ch.fetch(dat_url) }
50
+ let(:replies) { dat.each_line.map.with_index(1) { |d, i| Simple2ch::Response.parse(i, d) } }
51
+ it { replies.each { |r| expect(r).to be_a_valid_response } }
52
+ end
53
+ context 'when 2ch.sc' do
54
+ include_examples '#parse' do
55
+ let(:type_of_2ch) { :sc }
56
+ end
57
+ end
58
+ context 'when open2ch.net' do
59
+ include_examples '#parse' do
60
+ let(:type_of_2ch) { :open }
61
+ end
62
+ end
63
+ end
64
+
65
+ end
66
+
67
+ describe '#anchors' do
68
+ shared_examples('have valid anchors') do
69
+ let(:res_num) { 100 }
70
+ subject { Simple2ch::Response.new(res_num, contents: contents) }
71
+
72
+ describe 'that\'s anchored res is valid' do
73
+ its(:anchors) { is_expected.to be_a_kind_of Array }
74
+ its(:anchors) { is_expected.to be == anchor }
75
+ its('anchors.size') { is_expected.to be == anchor.size }
76
+ end
77
+ end
78
+ context 'when it have anchors separated commas' do
79
+ let(:contents) { %Q{&gt;&gt;1, 2, 3,12, 34\n9} }
80
+ let(:anchor) { [1, 2, 3, 12, 34] }
81
+ it_behaves_like 'have valid anchors'
82
+ end
83
+ context 'when it have anchors separated commas & spaces' do
84
+ let(:contents) { %Q{&gt;&gt;1, 2, 3 4 5 6, 12、 34\n9} }
85
+ let(:anchor) { [1, 2, 3, 4, 5, 6, 12, 34] }
86
+ it_behaves_like 'have valid anchors'
87
+ end
88
+ context 'when it have anchors range' do
89
+ let(:contents) { %Q{&gt;1-5\n9} }
90
+ let(:anchor) { (1..5).to_a }
91
+ it_behaves_like 'have valid anchors'
92
+ end
93
+ context 'when it have range and separated anchors pattern#1' do
94
+ let(:contents) { %Q{&gt;1-5,6,8} }
95
+ let(:anchor) { [1, 2, 3, 4, 5, 6, 8] }
96
+ it_behaves_like 'have valid anchors'
97
+ end
98
+ context 'when it have range and separated anchors pattern#2' do
99
+ let(:contents) { %Q{&gt;1,3, 9−13\n25} }
100
+ let(:anchor) { [1, 3, 9, 10, 11, 12, 13] }
101
+ it_behaves_like 'have valid anchors'
102
+ end
103
+ context 'when it have ARASHI anchors' do
104
+ 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,
105
+ >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,
106
+
107
+ >>1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
108
+   ∧_∧
109
+   (´・ω・`)     n
110
+  ̄ ..    \    ( E)
111
+ フ ア.フ.ィ /ヽ ヽ_//
112
+ >>21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40
113
+   ∧_∧
114
+   (´・ω・`)     n
115
+  ̄   ..  \    ( E)
116
+ フ ア.フ.ィ /ヽ ヽ_//
117
+ >>41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60 } }
118
+ let(:anchor) { [] }
119
+ it_behaves_like 'have valid anchors'
120
+ end
121
+ context 'when a thre have both id and non-id responses', force: true do
122
+ let(:board_name) { 'プログラム技術' }
123
+ let(:url) { 'http://toro.2ch.sc/tech/' }
124
+ let(:thread_key) { '1382307475' }
125
+ let(:thre) { Simple2ch::Thread.new(Simple2ch.generate_url(:thread, url, thread_key: thread_key)) }
126
+ subject { thre.responses }
127
+ it { is_expected.to be_a_kind_of Array }
128
+ end
129
+ end
130
+ end
131
+ end
@@ -1,61 +1,30 @@
1
1
  require 'rspec'
2
2
  require 'spec_helper'
3
3
 
4
- RSpec::Matchers.define :have_news4vip do
5
- match do |boards|
6
- (news4vip = boards.find{|b| b.title == 'ニュー速VIP'}) && news4vip.url.to_s.index('news4vip')
7
- end
8
- end
9
4
 
10
5
  describe Simple2ch do
11
- describe 'should get board from board list' do
12
- let(:board_list_url) { {net: 'http://menu.2ch.net/bbsmenu.html', sc: 'http://2ch.sc/bbsmenu.html', open: 'http://open2ch.net/menu/pc_menu.html' } }
13
- shared_examples 'get board list from bbsmenu' do
14
- subject{ Simple2ch.boards(bbsmenu_url) }
15
- it{ is_expected.not_to be_empty }
16
- it{ is_expected.to have_news4vip}
17
- end
18
-
19
- context 'from 2ch.net' do
20
- let(:bbsmenu_url) { board_list_url[:net] }
21
- include_examples 'get board list from bbsmenu'
22
- end
23
- context 'from 2ch.sc' do
24
- let(:bbsmenu_url) { board_list_url[:sc] }
25
- include_examples 'get board list from bbsmenu'
26
- end
27
- context 'from open2ch.net' do
28
- let(:bbsmenu_url) { board_list_url[:open] }
29
- include_examples 'get board list from bbsmenu'
30
- end
6
+ before(:all) do
7
+ @sc = Simple2ch::BBS.new(:sc)
8
+ @open = Simple2ch::BBS.new(:open)
31
9
  end
32
10
 
33
- context 'should get reses from board url' do
34
- before(:all) do
35
- board_name = 'ニュー速VIP'
36
- board_url = 'http://viper.2ch.sc/news4vip/'
37
- @board = Board.new board_name, board_url
38
- @threads= @board.thres
39
- @res = @threads[0].reses[0]
11
+ describe '#new' do
12
+ shared_examples '#new' do
13
+ subject { s2 }
14
+ it { should be_a_kind_of Simple2ch::BBS }
40
15
  end
41
- it{ expect(@board.thres).to be_a_kind_of Array }
42
- it do
43
- #@threads = board.threads
44
- expect(@board.thres.size).to be > 0
45
- end
46
-
47
- it { expect(@threads[0]).to be_a_kind_of Thre }
48
- it { expect(@threads[0].reses).to be_a_kind_of Array }
49
16
 
50
- it do
51
- #@res = @threads[0].reses[0]
52
- expect(@res).to be_a_kind_of Res
17
+ context '2ch.sc' do
18
+ include_examples '#new' do
19
+ let(:s2) { @sc }
20
+ let(:type_of_2ch) { :sc }
21
+ end
22
+ end
23
+ context 'open2ch.net' do
24
+ include_examples '#new' do
25
+ let(:s2) { @open }
26
+ let(:type_of_2ch) { :open }
27
+ end
53
28
  end
54
- it { expect(@res.date).to be < Time.now }
55
- it { expect(@res.author_id.size).to be > 0 }
56
-
57
29
  end
58
-
59
-
60
- #its(:reses){ is_expected.to be a_kind_of Array}
61
- end
30
+ end