in_or_out 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,86 @@
1
+ require 'spec_helper'
2
+ require 'ostruct'
3
+ require 'nokogiri'
4
+
5
+ describe InOrOut::Match do
6
+
7
+ let(:round) { 2 }
8
+ let(:team_name) { 'Essendon' }
9
+ let(:subject) { InOrOut::Match.new(team_name, round)}
10
+
11
+ describe 'initialize' do
12
+
13
+ before do
14
+ extracted_players = [ OpenStruct.new(name: 'Gary Ablett', team: 'Gold Coast') ]
15
+ InOrOut::PlayerExtractor.any_instance.should_receive(:extract).at_least(1).times.and_return(extracted_players)
16
+ end
17
+
18
+ let(:scraper_response) { File.open("#{InOrOut.root}/spec/data/finialised_teams.html").read }
19
+
20
+ it 'takes a team name a match round and populates the match' do
21
+ InOrOut::Scraper.any_instance.should_receive(:scrape).and_return(scraper_response)
22
+ subject.players.size.should == 1
23
+ end
24
+
25
+ end
26
+
27
+ describe 'find' do
28
+
29
+ let(:afl_schedule_response) { OpenStruct.new(home_team: 'Essendon',
30
+ away_team: 'Melbourne',
31
+ venue: 'MCG',
32
+ time: Time.new(2013, 04, 6, 19, 40, 0, '+10:00'),
33
+ round: 2) }
34
+ let(:player_extractor_response) { [] }
35
+ let(:subject) { InOrOut::Match.find(team: team_name)}
36
+
37
+ it 'returns the next match for the given team name' do
38
+ AFL::Schedule.any_instance.should_receive(:next_match).with('').and_return(afl_schedule_response)
39
+ #InOrOut::PlayerExtractor.any_instance.should_receive(:extract).and_return(player_extractor_response)
40
+ subject.class.should == InOrOut::Match
41
+ end
42
+
43
+ let(:team_name) { '' }
44
+
45
+ it 'returns "nil" if no match was found' do
46
+ AFL::Schedule.any_instance.should_receive(:next_match).with('').and_return(nil)
47
+ subject.should == nil
48
+ end
49
+
50
+ end
51
+
52
+ describe 'finding a player' do
53
+
54
+ context 'player does not exit' do
55
+
56
+ before do
57
+ extracted_players = [ OpenStruct.new(name: 'Gary Ablett', team: 'Gold Coast') ]
58
+ InOrOut::PlayerExtractor.any_instance.should_receive(:extract).at_least(1).times.and_return(extracted_players)
59
+ end
60
+
61
+ it "returns 'nil' if the player can't be found" do
62
+ InOrOut::Scraper.any_instance.should_receive(:scrape).and_return('')
63
+ subject.find_player('Jobe Watson', 'Essendon').should == nil
64
+ end
65
+
66
+ end
67
+
68
+ context 'player exists' do
69
+
70
+ before do
71
+ extracted_players = [ OpenStruct.new(name: 'Gary Ablett', team: 'Gold Coast') ]
72
+ InOrOut::PlayerExtractor.any_instance.should_receive(:extract).at_least(1).times.and_return(extracted_players)
73
+ end
74
+
75
+ it 'returns the player' do
76
+ scraper_response = File.open("#{InOrOut.root}/spec/data/finialised_teams.html").read
77
+ InOrOut::Scraper.any_instance.should_receive(:scrape).and_return(scraper_response)
78
+ player = subject.find_player('Gary Ablett', 'Gold Coast')
79
+ player.name.should == 'Gary Ablett'
80
+ player.team.should == 'Gold Coast'
81
+ end
82
+
83
+ end
84
+ end
85
+
86
+ end
@@ -0,0 +1,135 @@
1
+ require 'spec_helper'
2
+ require 'nokogiri'
3
+
4
+ describe InOrOut::PlayerExtractor do
5
+
6
+ describe 'match readyness' do
7
+
8
+ let(:subject) { InOrOut::PlayerExtractor.new(match_data).send(:ready?) }
9
+
10
+ context 'match data not complete' do
11
+
12
+ let(:match_data) { Nokogiri::HTML("<html></html>") }
13
+
14
+ it "match as 'not ready'" do
15
+ subject.should == false
16
+ end
17
+
18
+ end
19
+
20
+ context 'match data complete' do
21
+
22
+ let(:match_data) { Nokogiri::HTML(File.open("#{InOrOut.root}/spec/data/finialised_teams.html").read) }
23
+
24
+ it "match is 'ready'" do
25
+ subject.should == true
26
+ end
27
+
28
+ end
29
+
30
+ end
31
+
32
+
33
+ let(:match_data) { Nokogiri::HTML(File.open("#{InOrOut.root}/spec/data/finialised_teams.html").read) }
34
+ let(:subject) { InOrOut::PlayerExtractor.new(match_data).extract }
35
+
36
+ describe 'extraction process' do
37
+
38
+ it 'takes match data and returns a collection of players' do
39
+ subject.size.should == 50
40
+ subject.first.class.should == InOrOut::Player
41
+ end
42
+
43
+ it 'only extracts data if match is ready' do
44
+ InOrOut::PlayerExtractor.any_instance.should_receive(:ready?).and_return(false)
45
+ subject.empty?.should == true
46
+ end
47
+
48
+ end
49
+
50
+ describe 'attributes extracted' do
51
+
52
+ before do
53
+ InOrOut::ShortcodeConverter.should_receive(:convert).at_least(1).times.with('stk').and_return('St Kilda')
54
+ InOrOut::ShortcodeConverter.should_receive(:convert).at_least(1).times.with('gcfc').and_return('Gold Coast')
55
+ end
56
+
57
+ %i(name team position number).each do |extracted_attribute|
58
+ it "extracts a #{extracted_attribute}" do
59
+ subject.first.send(extracted_attribute).should_not be nil
60
+ end
61
+ end
62
+
63
+ describe 'position' do
64
+
65
+ let(:subject) { InOrOut::PlayerExtractor.new(match_data).extract }
66
+
67
+ describe 'Followers' do
68
+
69
+ it 'can be found' do
70
+ subject.detect { |player| player.position == 'Follower'}.should_not == nil
71
+ end
72
+
73
+ end
74
+
75
+ describe 'Full Backs' do
76
+
77
+ it 'can be found' do
78
+ subject.detect { |player| player.position == 'Full Back'}.should_not == nil
79
+ end
80
+
81
+ end
82
+
83
+ describe 'Full Forwards' do
84
+
85
+ it 'can be found' do
86
+ subject.detect { |player| player.position == 'Full Forward'}.should_not == nil
87
+ end
88
+
89
+ end
90
+
91
+ describe 'Half Forwards' do
92
+
93
+ it 'can be found' do
94
+ subject.detect { |player| player.position == 'Half Forward'}.should_not == nil
95
+ end
96
+
97
+ end
98
+
99
+ describe 'Half backs' do
100
+
101
+ it 'can be found' do
102
+ subject.detect { |player| player.position == 'Half Back'}.should_not == nil
103
+ end
104
+
105
+ end
106
+
107
+ describe 'Centre' do
108
+
109
+ it 'can be found' do
110
+ subject.detect { |player| player.position == 'Centre'}.should_not == nil
111
+ end
112
+
113
+ end
114
+
115
+ describe 'Interchange' do
116
+
117
+ it 'can be found' do
118
+ subject.detect { |player| player.position == 'Interchange'}.should_not == nil
119
+ end
120
+
121
+ end
122
+
123
+ describe 'Emergencies' do
124
+
125
+ it 'can be found' do
126
+ subject.detect { |player| player.position == 'Emergency'}.should_not == nil
127
+ end
128
+
129
+ end
130
+
131
+ end
132
+
133
+ end
134
+
135
+ end
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+ require 'ostruct'
3
+
4
+ describe InOrOut::Player do
5
+
6
+ let(:player_name) { 'Jobe Watson' }
7
+ let(:team_name) { 'Essendon' }
8
+ let(:analyser_response) { OpenStruct.new(position: 'Centre', status: 'In') }
9
+
10
+ describe 'initialize' do
11
+
12
+ let(:subject) { InOrOut::Player }
13
+
14
+ it 'requires a player and team name' do
15
+ subject.new(player_name, team_name).class.should == InOrOut::Player
16
+ end
17
+
18
+ %w(number position).each do |attr|
19
+ it "accepts '#{attr}' as an optional attribute" do
20
+ subject.new(player_name, team_name, attr.to_sym => 'attribute value').send(attr.to_sym).should == 'attribute value'
21
+ end
22
+
23
+ end
24
+
25
+ it 'sets a status' do
26
+ subject.new(player_name, team_name, :position => 'Follower').status.should == 'On'
27
+ end
28
+
29
+ end
30
+
31
+ describe 'analyse' do
32
+
33
+ let(:subject) { InOrOut::Player.new(player_name, team_name) }
34
+
35
+ context 'next match not found' do
36
+
37
+ before do
38
+ InOrOut::Match.should_receive(:find).and_return(nil)
39
+ end
40
+
41
+ it "returns itself with the a status of 'Unknown'" do
42
+ subject.send(:analyse).status.should == 'Unknown'
43
+ end
44
+
45
+ end
46
+
47
+ context 'next match found' do
48
+
49
+ let(:match_double) { double('Match') }
50
+ let(:player_double) { double('Player') }
51
+
52
+ context 'player is playing' do
53
+
54
+ before do
55
+ InOrOut::Match.should_receive(:find).with(team: team_name).and_return(match_double)
56
+ match_double.should_receive(:find_player).with(player_name,team_name).and_return(player_double)
57
+ player_double.should_receive(:status).and_return('On')
58
+ player_double.should_receive(:position).and_return('Centre')
59
+ player_double.should_receive(:number).and_return(4)
60
+ end
61
+
62
+ it 'returns itself with status set to "On"' do
63
+ subject.send(:analyse).status.should == 'On'
64
+ end
65
+
66
+ it 'has a "position" and a "number"' do
67
+ player = subject.send(:analyse)
68
+ player.position.should == 'Centre'
69
+ player.number.should == 4
70
+ end
71
+
72
+ end
73
+
74
+ end
75
+
76
+ end
77
+
78
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe InOrOut::Scraper do
4
+
5
+ describe 'scrape' do
6
+
7
+ context 'found url' do
8
+
9
+ it 'returns the urls html as a string' do
10
+ subject.scrape('http://www.google.com').class.should == String
11
+ end
12
+
13
+ end
14
+
15
+ end
16
+
17
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe InOrOut::ShortcodeConverter do
4
+
5
+ let(:subject) { InOrOut::ShortcodeConverter }
6
+
7
+ %i(fre ess nmfc syd melb wce
8
+ gws stk gcfc bl geel carl
9
+ rich wb coll haw port adel).each do |shortcode|
10
+ it "returns the full team name for #{shortcode}" do
11
+ subject.convert(shortcode).should_not == nil
12
+ end
13
+ end
14
+
15
+ it 'returns a shortcode when a full name is given' do
16
+ subject.find_shortcode('Essendon').should == 'ess'
17
+ end
18
+
19
+ end
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ describe InOrOut::Team do
4
+ end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ describe InOrOut do
4
+
5
+ describe 'Player' do
6
+
7
+ context 'match is ready' do
8
+
9
+ let(:data) { File.open("#{InOrOut.root}/spec/data/finialised_teams.html") }
10
+ let(:team_name) { 'Gold Coast' }
11
+ let(:player_name) { 'Gary Ablett' }
12
+ let(:subject) { InOrOut::Player.new(player_name, team_name) }
13
+ before do
14
+ InOrOut::Scraper.any_instance.should_receive(:scrape).and_return(data)
15
+ end
16
+
17
+ context 'player is playing' do
18
+
19
+ it 'has a full set of player attributes ' do
20
+ subject.name.should == 'Gary Ablett'
21
+ subject.team.should == 'Gold Coast'
22
+ subject.position.should == 'Centre'
23
+ subject.status.should == 'On'
24
+ subject.number.should == 9
25
+ end
26
+
27
+ end
28
+
29
+ end
30
+
31
+ context 'match is not ready/found' do
32
+
33
+ let(:team_name) { 'Essendon' }
34
+ let(:player_name) { 'Jobe Watson' }
35
+ let(:subject) { InOrOut::Player.new(player_name, team_name) }
36
+
37
+ before do
38
+ InOrOut::Match.should_receive(:find).at_least(1).times.and_return(nil)
39
+ end
40
+
41
+ it 'status is set to "unknown"' do
42
+ subject.status.should == 'Unknown'
43
+ end
44
+
45
+ end
46
+
47
+ end
48
+
49
+ end
@@ -0,0 +1,7 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'rspec/radar'
4
+ require 'in_or_out'
5
+
6
+ RSpec.configure do |config|
7
+ end
metadata ADDED
@@ -0,0 +1,196 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: in_or_out
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Sebastian Glazebrook
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-04-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: afl_schedule
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 0.1.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 0.1.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: active_support
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: nokogiri
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: mechanize
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: bundler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '1.3'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '1.3'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
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: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '='
102
+ - !ruby/object:Gem::Version
103
+ version: 2.13.0
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '='
109
+ - !ruby/object:Gem::Version
110
+ version: 2.13.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: rspec-radar
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
+ description: This gem will help you check whether you AFL fantasy football players
126
+ are playing this week or not
127
+ email:
128
+ - me@sebglazebrook.com
129
+ executables: []
130
+ extensions: []
131
+ extra_rdoc_files: []
132
+ files:
133
+ - .gitignore
134
+ - .rspec
135
+ - .rvmrc
136
+ - Gemfile
137
+ - LICENSE.txt
138
+ - README.md
139
+ - Rakefile
140
+ - config/analyser.yml
141
+ - data/team_shortcode_data.yml
142
+ - in_or_out.gemspec
143
+ - lib/in_or_out.rb
144
+ - lib/in_or_out/models/match.rb
145
+ - lib/in_or_out/models/player.rb
146
+ - lib/in_or_out/models/player_extractor.rb
147
+ - lib/in_or_out/models/scraper.rb
148
+ - lib/in_or_out/models/shortcode_converter.rb
149
+ - lib/in_or_out/models/team.rb
150
+ - lib/in_or_out/version.rb
151
+ - spec/data/finialised_teams.html
152
+ - spec/data/unfinialised_interchange.html
153
+ - spec/in_and_out/models/match_spec.rb
154
+ - spec/in_and_out/models/player_extractor_spec.rb
155
+ - spec/in_and_out/models/player_spec.rb
156
+ - spec/in_and_out/models/scraper_spec.rb
157
+ - spec/in_and_out/models/shortcode_converter_spec.rb
158
+ - spec/in_and_out/models/team_spec.rb
159
+ - spec/in_and_out_spec.rb
160
+ - spec/spec_helper.rb
161
+ homepage: ''
162
+ licenses:
163
+ - MIT
164
+ metadata: {}
165
+ post_install_message:
166
+ rdoc_options: []
167
+ require_paths:
168
+ - lib
169
+ required_ruby_version: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ required_rubygems_version: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - '>='
177
+ - !ruby/object:Gem::Version
178
+ version: '0'
179
+ requirements: []
180
+ rubyforge_project:
181
+ rubygems_version: 2.0.0
182
+ signing_key:
183
+ specification_version: 4
184
+ summary: Hopefully this can help you with your AFL fantasy football. It's an easy
185
+ gem. Let me know if you find any issues.
186
+ test_files:
187
+ - spec/data/finialised_teams.html
188
+ - spec/data/unfinialised_interchange.html
189
+ - spec/in_and_out/models/match_spec.rb
190
+ - spec/in_and_out/models/player_extractor_spec.rb
191
+ - spec/in_and_out/models/player_spec.rb
192
+ - spec/in_and_out/models/scraper_spec.rb
193
+ - spec/in_and_out/models/shortcode_converter_spec.rb
194
+ - spec/in_and_out/models/team_spec.rb
195
+ - spec/in_and_out_spec.rb
196
+ - spec/spec_helper.rb