f1results 0.1 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a1a55a64744c57fea1c16aee83239865fefd42ce
4
+ data.tar.gz: 16c7f5722e92ccdb9516b32b7f9e467a5fce57e7
5
+ SHA512:
6
+ metadata.gz: d0a20348047c8dfc441ddd5a17f3798a09ff7342d4c8840d0bb56e302341b8b89da6a61e3484d85a29b07221b833c2e1a9fd16bf6cc34131ce956a27b796c3a0
7
+ data.tar.gz: e379bf7efb5f8947de78a2440dbe7eb876ca9392156566d17de080d0012705245c8d9e87fcae9635ae84de5f6835cf9bdf0678ab5b3de098712ecc94e765b6cf
data/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  Get F1 results from formula1.com
4
4
 
5
+ ![F1Results](http://daz.github.com/f1results/screenshot.png)
6
+
5
7
  ## Installation
6
8
 
7
9
  Add this line to your application's Gemfile:
@@ -35,17 +35,17 @@ module F1Results
35
35
  click(season_country_link)
36
36
  event.grand_prix = page.parser.at_xpath('//h2').text
37
37
 
38
- if event.qualifying?
39
- grand_prix_link = page.link_with(:text => 'QUALIFYING') || page.link_with(:text => 'SUNDAY QUALIFYING')
40
- raise "No qualifying results for: #{season} #{country}" if grand_prix_link.nil?
41
- click(grand_prix_link)
38
+ results_link = if event.qualifying?
39
+ page.link_with(:text => 'QUALIFYING') || page.link_with(:text => 'SUNDAY QUALIFYING')
40
+ elsif event.race?
41
+ page.link_with(:text => 'RACE', :dom_class => 'L3Selected')
42
42
  end
43
43
 
44
+ raise "No #{event.type} results for: #{season} #{country}" if results_link.nil?
45
+ click(results_link) if event.qualifying?
44
46
  table = page.parser.xpath('//table[contains(@class, "raceResults")]')
45
- raise "No results for: #{season} #{country}" if table.empty?
46
47
 
47
48
  event.parse_results_table(table)
48
- event
49
49
  end
50
50
  end
51
51
  end
@@ -32,7 +32,7 @@ module F1Results
32
32
  end
33
33
 
34
34
  def parse_results_table(table)
35
- data = table.xpath('//tr')[1..-1].map do |row|
35
+ data = table.xpath('//tr[not(position()=1)]').map do |row|
36
36
  row.xpath('./td').map do |col|
37
37
  col.text.strip
38
38
  end
@@ -44,6 +44,8 @@ module F1Results
44
44
  result.index = i + 1
45
45
  @results << result unless result.position.nil?
46
46
  end
47
+
48
+ self
47
49
  end
48
50
  end
49
51
  end
@@ -1,6 +1,6 @@
1
1
  module F1Results
2
2
  class Result
3
- attr_accessor :index, :position, :driver, :driver_number, :team, :time, :retired, :laps
3
+ attr_accessor :index, :position, :driver, :driver_number, :team, :laps
4
4
 
5
5
  def initialize(row = nil)
6
6
  build(row) unless row.nil?
@@ -17,25 +17,18 @@ module F1Results
17
17
  end
18
18
  end
19
19
 
20
- def time_or_retired=(str)
21
- if /^[0-9]|\+/ =~ str
22
- @time = str
23
- else
24
- @retired = str
25
- end
26
- end
27
-
28
- def time_or_retired
29
- time || retired
30
- end
31
-
32
20
  private
33
21
 
34
22
  def build(row)
23
+ row.map! do |col|
24
+ col = col.strip.gsub(/\s+/, ' ')
25
+ col == '' ? nil : col
26
+ end
35
27
  self.position = row[0]
36
28
  @driver_number = row[1].to_i
37
29
  @driver = row[2]
38
30
  @team = row[3]
31
+ row
39
32
  end
40
33
  end
41
34
 
@@ -46,34 +39,50 @@ module F1Results
46
39
  [position, driver_number, driver, team, q1, q2, q3, laps]
47
40
  end
48
41
 
42
+ def time
43
+ q3 || q2 || q1
44
+ end
45
+
49
46
  private
50
47
 
51
48
  def build(row)
49
+ row = super
52
50
  @q1 = row[4]
53
51
  if row.length > 5
54
52
  @q2 = row[5]
55
53
  @q3 = row[6]
56
54
  @laps = row[7].to_i
57
55
  end
58
- super
59
56
  end
60
57
  end
61
58
 
62
59
  class RaceResult < Result
63
- attr_accessor :grid, :points
60
+ attr_accessor :time_or_retired, :time, :retired, :grid, :points
64
61
 
65
62
  def to_a
66
63
  [position, driver_number, driver, team, laps, time_or_retired, grid, points]
67
64
  end
68
65
 
66
+ def time_or_retired=(str)
67
+ if /^[0-9]|\+/ =~ str
68
+ @time = str
69
+ else
70
+ @retired = str
71
+ end
72
+ end
73
+
74
+ def time_or_retired
75
+ time || retired
76
+ end
77
+
69
78
  private
70
79
 
71
80
  def build(row)
81
+ row = super
72
82
  @laps = row[4].to_i
73
83
  self.time_or_retired = row[5]
74
84
  @grid = row[6].to_i
75
85
  @points = row[7].to_i
76
- super
77
86
  end
78
87
  end
79
88
  end
@@ -1,3 +1,3 @@
1
1
  module F1Results
2
- VERSION = "0.1"
2
+ VERSION = '0.1.1'
3
3
  end
data/test/result_test.rb CHANGED
@@ -22,6 +22,14 @@ class ResultTest < MiniTest::Unit::TestCase
22
22
  assert_equal 'Gear box', result.retired
23
23
  end
24
24
 
25
+ def test_qualifying_time
26
+ result = F1Results::QualifyingResult.new
27
+ result.q1 = '1:46.000'
28
+ result.q2 = '1:46.515'
29
+ result.q3 = nil
30
+ assert_equal '1:46.515', result.time
31
+ end
32
+
25
33
  def test_parse_race
26
34
  result = F1Results::RaceResult.new(['5', '9', 'Kimi Räikkönen', 'Lotus-Renault', '52', '+10.3 secs', '6', '10'])
27
35
  assert_equal 5, result.position
@@ -46,6 +54,20 @@ class ResultTest < MiniTest::Unit::TestCase
46
54
  assert_equal 25, result.laps
47
55
  end
48
56
 
57
+ def test_parse_qualifying_with_blank_values
58
+ result = F1Results::QualifyingResult.new(['1', '5', 'Fernando Alonso', 'Ferrari', '1:46.515', '', '', ''])
59
+ assert_equal '1:46.515', result.q1
60
+ assert_equal nil, result.q2
61
+ assert_equal nil, result.q3
62
+ assert_equal 0, result.laps
63
+ end
64
+
65
+ def test_parse_with_extra_whitespace
66
+ result = F1Results::RaceResult.new(['14', '17', 'Valtteri Bottas', " \n\nWilliams-Renault ", '57', '+1 Lap', '16', ''])
67
+ assert_equal 'Valtteri Bottas', result.driver
68
+ assert_equal 'Williams-Renault', result.team
69
+ end
70
+
49
71
  def test_race_to_a
50
72
  result = F1Results::RaceResult.new(['5', '9', 'Kimi Räikkönen', 'Lotus-Renault', '52', '+10.3 secs', '6', '10'])
51
73
  assert_equal [5, 9, 'Kimi Räikkönen', 'Lotus-Renault', 52, '+10.3 secs', 6, 10], result.to_a
metadata CHANGED
@@ -1,94 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: f1results
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
5
- prerelease:
4
+ version: 0.1.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Darren Jeacocke
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-01-07 00:00:00.000000000 Z
11
+ date: 2013-04-22 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: mechanize
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: terminal-table
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rake
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: minitest
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - '>='
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - '>='
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: webmock
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - '>='
84
74
  - !ruby/object:Gem::Version
85
75
  version: '0'
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - '>='
92
81
  - !ruby/object:Gem::Version
93
82
  version: '0'
94
83
  description: Get F1 results from formula1.com
@@ -111,26 +100,25 @@ files:
111
100
  - LICENSE
112
101
  homepage: https://github.com/daz/f1results
113
102
  licenses: []
103
+ metadata: {}
114
104
  post_install_message:
115
105
  rdoc_options: []
116
106
  require_paths:
117
107
  - lib
118
108
  required_ruby_version: !ruby/object:Gem::Requirement
119
- none: false
120
109
  requirements:
121
- - - ! '>='
110
+ - - '>='
122
111
  - !ruby/object:Gem::Version
123
112
  version: '0'
124
113
  required_rubygems_version: !ruby/object:Gem::Requirement
125
- none: false
126
114
  requirements:
127
- - - ! '>='
115
+ - - '>='
128
116
  - !ruby/object:Gem::Version
129
117
  version: '0'
130
118
  requirements: []
131
119
  rubyforge_project:
132
- rubygems_version: 1.8.23
120
+ rubygems_version: 2.0.2
133
121
  signing_key:
134
- specification_version: 3
122
+ specification_version: 4
135
123
  summary: F1 Results
136
124
  test_files: []