f1results 0.1 → 0.1.1

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.
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: []