radiant-race_results-extension 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. data/README.md +8 -0
  2. data/Rakefile +137 -0
  3. data/app/controllers/admin/race_clubs_controller.rb +15 -0
  4. data/app/controllers/admin/race_competitors_controller.rb +15 -0
  5. data/app/controllers/admin/race_instances_controller.rb +17 -0
  6. data/app/controllers/admin/races_controller.rb +35 -0
  7. data/app/controllers/race_instances_controller.rb +23 -0
  8. data/app/controllers/race_performances_controller.rb +16 -0
  9. data/app/controllers/races_controller.rb +13 -0
  10. data/app/helpers/races_helper.rb +38 -0
  11. data/app/models/race.rb +64 -0
  12. data/app/models/race_category.rb +114 -0
  13. data/app/models/race_checkpoint.rb +31 -0
  14. data/app/models/race_checkpoint_time.rb +64 -0
  15. data/app/models/race_club.rb +48 -0
  16. data/app/models/race_club_alias.rb +9 -0
  17. data/app/models/race_competitor.rb +20 -0
  18. data/app/models/race_instance.rb +178 -0
  19. data/app/models/race_page.rb +69 -0
  20. data/app/models/race_performance.rb +175 -0
  21. data/app/models/race_performance_status.rb +58 -0
  22. data/app/models/race_record.rb +27 -0
  23. data/app/views/admin/race_checkpoints/_checkpoint.html.haml +19 -0
  24. data/app/views/admin/race_club_aliases/_race_club_alias.html.haml +10 -0
  25. data/app/views/admin/race_clubs/_club.html.haml +19 -0
  26. data/app/views/admin/race_clubs/_form.html.haml +21 -0
  27. data/app/views/admin/race_clubs/edit.html.haml +20 -0
  28. data/app/views/admin/race_clubs/index.html.haml +27 -0
  29. data/app/views/admin/race_competitors/_competitor.html.haml +14 -0
  30. data/app/views/admin/race_competitors/_form.html.haml +21 -0
  31. data/app/views/admin/race_competitors/edit.html.haml +20 -0
  32. data/app/views/admin/race_competitors/index.html.haml +27 -0
  33. data/app/views/admin/race_instances/_form.html.haml +98 -0
  34. data/app/views/admin/race_instances/edit.html.haml +17 -0
  35. data/app/views/admin/race_instances/new.html.haml +18 -0
  36. data/app/views/admin/race_records/_record.html.haml +20 -0
  37. data/app/views/admin/races/_form.html.haml +82 -0
  38. data/app/views/admin/races/_race.html.haml +36 -0
  39. data/app/views/admin/races/edit.html.haml +19 -0
  40. data/app/views/admin/races/index.html.haml +26 -0
  41. data/app/views/admin/races/new.html.haml +19 -0
  42. data/app/views/race_categories/show.html.haml +36 -0
  43. data/app/views/race_clubs/show.html.haml +25 -0
  44. data/app/views/race_instances/index.html.haml +14 -0
  45. data/app/views/race_instances/show.html.haml +52 -0
  46. data/app/views/race_performances/_headings.html.haml +4 -0
  47. data/app/views/race_performances/_performance.html.haml +21 -0
  48. data/app/views/races/index.html.haml +38 -0
  49. data/app/views/races/show.html.haml +81 -0
  50. data/cucumber.yml +1 -0
  51. data/db/migrate/20091116130836_race_data.rb +128 -0
  52. data/db/migrate/20091124095157_competitor_details.rb +9 -0
  53. data/db/migrate/20091126110634_club_aliases.rb +17 -0
  54. data/db/migrate/20091223094002_instance_details.rb +11 -0
  55. data/db/migrate/20091224100524_race_distance.rb +11 -0
  56. data/db/migrate/20091224100734_race_records.rb +19 -0
  57. data/db/migrate/20091224105637_category_details.rb +13 -0
  58. data/db/migrate/20091224115909_filters.rb +11 -0
  59. data/db/migrate/20091228122837_record_holder.rb +11 -0
  60. data/db/migrate/20100106104850_remember_calculations.rb +9 -0
  61. data/db/migrate/20100426104801_race_attachments.rb +11 -0
  62. data/features/support/env.rb +16 -0
  63. data/features/support/paths.rb +14 -0
  64. data/lib/duration_extensions.rb +61 -0
  65. data/lib/race_results/admin_ui.rb +76 -0
  66. data/lib/race_results/race_tags.rb +722 -0
  67. data/lib/tasks/race_results_extension_tasks.rake +28 -0
  68. data/public/images/admin/calendar_down.png +0 -0
  69. data/public/images/admin/new-race.png +0 -0
  70. data/public/javascripts/admin/races.js +29 -0
  71. data/public/stylesheets/sass/admin/races.sass +131 -0
  72. data/race_results_extension.rb +38 -0
  73. data/spec/datasets/competitors_dataset.rb +81 -0
  74. data/spec/datasets/race_sites_dataset.rb +8 -0
  75. data/spec/datasets/races_dataset.rb +179 -0
  76. data/spec/files/dunnerdale_2009.csv +277 -0
  77. data/spec/files/long_duddon_2008.csv +230 -0
  78. data/spec/lib/duration_spec.rb +50 -0
  79. data/spec/models/race_category_spec.rb +65 -0
  80. data/spec/models/race_club_spec.rb +32 -0
  81. data/spec/models/race_instance_spec.rb +104 -0
  82. data/spec/models/race_performance_spec.rb +7 -0
  83. data/spec/models/race_performance_status_spec.rb +31 -0
  84. data/spec/models/race_spec.rb +39 -0
  85. data/spec/spec.opts +6 -0
  86. data/spec/spec_helper.rb +36 -0
  87. data/vendor/plugins/acts_as_list/README +23 -0
  88. data/vendor/plugins/acts_as_list/init.rb +3 -0
  89. data/vendor/plugins/acts_as_list/lib/active_record/acts/list.rb +256 -0
  90. data/vendor/plugins/acts_as_list/test/list_test.rb +332 -0
  91. metadata +195 -0
@@ -0,0 +1,332 @@
1
+ require 'test/unit'
2
+
3
+ require 'rubygems'
4
+ gem 'activerecord', '>= 1.15.4.7794'
5
+ require 'active_record'
6
+
7
+ require "#{File.dirname(__FILE__)}/../init"
8
+
9
+ ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :dbfile => ":memory:")
10
+
11
+ def setup_db
12
+ ActiveRecord::Schema.define(:version => 1) do
13
+ create_table :mixins do |t|
14
+ t.column :pos, :integer
15
+ t.column :parent_id, :integer
16
+ t.column :created_at, :datetime
17
+ t.column :updated_at, :datetime
18
+ end
19
+ end
20
+ end
21
+
22
+ def teardown_db
23
+ ActiveRecord::Base.connection.tables.each do |table|
24
+ ActiveRecord::Base.connection.drop_table(table)
25
+ end
26
+ end
27
+
28
+ class Mixin < ActiveRecord::Base
29
+ end
30
+
31
+ class ListMixin < Mixin
32
+ acts_as_list :column => "pos", :scope => :parent
33
+
34
+ def self.table_name() "mixins" end
35
+ end
36
+
37
+ class ListMixinSub1 < ListMixin
38
+ end
39
+
40
+ class ListMixinSub2 < ListMixin
41
+ end
42
+
43
+ class ListWithStringScopeMixin < ActiveRecord::Base
44
+ acts_as_list :column => "pos", :scope => 'parent_id = #{parent_id}'
45
+
46
+ def self.table_name() "mixins" end
47
+ end
48
+
49
+
50
+ class ListTest < Test::Unit::TestCase
51
+
52
+ def setup
53
+ setup_db
54
+ (1..4).each { |counter| ListMixin.create! :pos => counter, :parent_id => 5 }
55
+ end
56
+
57
+ def teardown
58
+ teardown_db
59
+ end
60
+
61
+ def test_reordering
62
+ assert_equal [1, 2, 3, 4], ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos').map(&:id)
63
+
64
+ ListMixin.find(2).move_lower
65
+ assert_equal [1, 3, 2, 4], ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos').map(&:id)
66
+
67
+ ListMixin.find(2).move_higher
68
+ assert_equal [1, 2, 3, 4], ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos').map(&:id)
69
+
70
+ ListMixin.find(1).move_to_bottom
71
+ assert_equal [2, 3, 4, 1], ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos').map(&:id)
72
+
73
+ ListMixin.find(1).move_to_top
74
+ assert_equal [1, 2, 3, 4], ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos').map(&:id)
75
+
76
+ ListMixin.find(2).move_to_bottom
77
+ assert_equal [1, 3, 4, 2], ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos').map(&:id)
78
+
79
+ ListMixin.find(4).move_to_top
80
+ assert_equal [4, 1, 3, 2], ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos').map(&:id)
81
+ end
82
+
83
+ def test_move_to_bottom_with_next_to_last_item
84
+ assert_equal [1, 2, 3, 4], ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos').map(&:id)
85
+ ListMixin.find(3).move_to_bottom
86
+ assert_equal [1, 2, 4, 3], ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos').map(&:id)
87
+ end
88
+
89
+ def test_next_prev
90
+ assert_equal ListMixin.find(2), ListMixin.find(1).lower_item
91
+ assert_nil ListMixin.find(1).higher_item
92
+ assert_equal ListMixin.find(3), ListMixin.find(4).higher_item
93
+ assert_nil ListMixin.find(4).lower_item
94
+ end
95
+
96
+ def test_injection
97
+ item = ListMixin.new(:parent_id => 1)
98
+ assert_equal "parent_id = 1", item.scope_condition
99
+ assert_equal "pos", item.position_column
100
+ end
101
+
102
+ def test_insert
103
+ new = ListMixin.create(:parent_id => 20)
104
+ assert_equal 1, new.pos
105
+ assert new.first?
106
+ assert new.last?
107
+
108
+ new = ListMixin.create(:parent_id => 20)
109
+ assert_equal 2, new.pos
110
+ assert !new.first?
111
+ assert new.last?
112
+
113
+ new = ListMixin.create(:parent_id => 20)
114
+ assert_equal 3, new.pos
115
+ assert !new.first?
116
+ assert new.last?
117
+
118
+ new = ListMixin.create(:parent_id => 0)
119
+ assert_equal 1, new.pos
120
+ assert new.first?
121
+ assert new.last?
122
+ end
123
+
124
+ def test_insert_at
125
+ new = ListMixin.create(:parent_id => 20)
126
+ assert_equal 1, new.pos
127
+
128
+ new = ListMixin.create(:parent_id => 20)
129
+ assert_equal 2, new.pos
130
+
131
+ new = ListMixin.create(:parent_id => 20)
132
+ assert_equal 3, new.pos
133
+
134
+ new4 = ListMixin.create(:parent_id => 20)
135
+ assert_equal 4, new4.pos
136
+
137
+ new4.insert_at(3)
138
+ assert_equal 3, new4.pos
139
+
140
+ new.reload
141
+ assert_equal 4, new.pos
142
+
143
+ new.insert_at(2)
144
+ assert_equal 2, new.pos
145
+
146
+ new4.reload
147
+ assert_equal 4, new4.pos
148
+
149
+ new5 = ListMixin.create(:parent_id => 20)
150
+ assert_equal 5, new5.pos
151
+
152
+ new5.insert_at(1)
153
+ assert_equal 1, new5.pos
154
+
155
+ new4.reload
156
+ assert_equal 5, new4.pos
157
+ end
158
+
159
+ def test_delete_middle
160
+ assert_equal [1, 2, 3, 4], ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos').map(&:id)
161
+
162
+ ListMixin.find(2).destroy
163
+
164
+ assert_equal [1, 3, 4], ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos').map(&:id)
165
+
166
+ assert_equal 1, ListMixin.find(1).pos
167
+ assert_equal 2, ListMixin.find(3).pos
168
+ assert_equal 3, ListMixin.find(4).pos
169
+
170
+ ListMixin.find(1).destroy
171
+
172
+ assert_equal [3, 4], ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos').map(&:id)
173
+
174
+ assert_equal 1, ListMixin.find(3).pos
175
+ assert_equal 2, ListMixin.find(4).pos
176
+ end
177
+
178
+ def test_with_string_based_scope
179
+ new = ListWithStringScopeMixin.create(:parent_id => 500)
180
+ assert_equal 1, new.pos
181
+ assert new.first?
182
+ assert new.last?
183
+ end
184
+
185
+ def test_nil_scope
186
+ new1, new2, new3 = ListMixin.create, ListMixin.create, ListMixin.create
187
+ new2.move_higher
188
+ assert_equal [new2, new1, new3], ListMixin.find(:all, :conditions => 'parent_id IS NULL', :order => 'pos')
189
+ end
190
+
191
+
192
+ def test_remove_from_list_should_then_fail_in_list?
193
+ assert_equal true, ListMixin.find(1).in_list?
194
+ ListMixin.find(1).remove_from_list
195
+ assert_equal false, ListMixin.find(1).in_list?
196
+ end
197
+
198
+ def test_remove_from_list_should_set_position_to_nil
199
+ assert_equal [1, 2, 3, 4], ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos').map(&:id)
200
+
201
+ ListMixin.find(2).remove_from_list
202
+
203
+ assert_equal [2, 1, 3, 4], ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos').map(&:id)
204
+
205
+ assert_equal 1, ListMixin.find(1).pos
206
+ assert_equal nil, ListMixin.find(2).pos
207
+ assert_equal 2, ListMixin.find(3).pos
208
+ assert_equal 3, ListMixin.find(4).pos
209
+ end
210
+
211
+ def test_remove_before_destroy_does_not_shift_lower_items_twice
212
+ assert_equal [1, 2, 3, 4], ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos').map(&:id)
213
+
214
+ ListMixin.find(2).remove_from_list
215
+ ListMixin.find(2).destroy
216
+
217
+ assert_equal [1, 3, 4], ListMixin.find(:all, :conditions => 'parent_id = 5', :order => 'pos').map(&:id)
218
+
219
+ assert_equal 1, ListMixin.find(1).pos
220
+ assert_equal 2, ListMixin.find(3).pos
221
+ assert_equal 3, ListMixin.find(4).pos
222
+ end
223
+
224
+ end
225
+
226
+ class ListSubTest < Test::Unit::TestCase
227
+
228
+ def setup
229
+ setup_db
230
+ (1..4).each { |i| ((i % 2 == 1) ? ListMixinSub1 : ListMixinSub2).create! :pos => i, :parent_id => 5000 }
231
+ end
232
+
233
+ def teardown
234
+ teardown_db
235
+ end
236
+
237
+ def test_reordering
238
+ assert_equal [1, 2, 3, 4], ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos').map(&:id)
239
+
240
+ ListMixin.find(2).move_lower
241
+ assert_equal [1, 3, 2, 4], ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos').map(&:id)
242
+
243
+ ListMixin.find(2).move_higher
244
+ assert_equal [1, 2, 3, 4], ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos').map(&:id)
245
+
246
+ ListMixin.find(1).move_to_bottom
247
+ assert_equal [2, 3, 4, 1], ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos').map(&:id)
248
+
249
+ ListMixin.find(1).move_to_top
250
+ assert_equal [1, 2, 3, 4], ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos').map(&:id)
251
+
252
+ ListMixin.find(2).move_to_bottom
253
+ assert_equal [1, 3, 4, 2], ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos').map(&:id)
254
+
255
+ ListMixin.find(4).move_to_top
256
+ assert_equal [4, 1, 3, 2], ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos').map(&:id)
257
+ end
258
+
259
+ def test_move_to_bottom_with_next_to_last_item
260
+ assert_equal [1, 2, 3, 4], ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos').map(&:id)
261
+ ListMixin.find(3).move_to_bottom
262
+ assert_equal [1, 2, 4, 3], ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos').map(&:id)
263
+ end
264
+
265
+ def test_next_prev
266
+ assert_equal ListMixin.find(2), ListMixin.find(1).lower_item
267
+ assert_nil ListMixin.find(1).higher_item
268
+ assert_equal ListMixin.find(3), ListMixin.find(4).higher_item
269
+ assert_nil ListMixin.find(4).lower_item
270
+ end
271
+
272
+ def test_injection
273
+ item = ListMixin.new("parent_id"=>1)
274
+ assert_equal "parent_id = 1", item.scope_condition
275
+ assert_equal "pos", item.position_column
276
+ end
277
+
278
+ def test_insert_at
279
+ new = ListMixin.create("parent_id" => 20)
280
+ assert_equal 1, new.pos
281
+
282
+ new = ListMixinSub1.create("parent_id" => 20)
283
+ assert_equal 2, new.pos
284
+
285
+ new = ListMixinSub2.create("parent_id" => 20)
286
+ assert_equal 3, new.pos
287
+
288
+ new4 = ListMixin.create("parent_id" => 20)
289
+ assert_equal 4, new4.pos
290
+
291
+ new4.insert_at(3)
292
+ assert_equal 3, new4.pos
293
+
294
+ new.reload
295
+ assert_equal 4, new.pos
296
+
297
+ new.insert_at(2)
298
+ assert_equal 2, new.pos
299
+
300
+ new4.reload
301
+ assert_equal 4, new4.pos
302
+
303
+ new5 = ListMixinSub1.create("parent_id" => 20)
304
+ assert_equal 5, new5.pos
305
+
306
+ new5.insert_at(1)
307
+ assert_equal 1, new5.pos
308
+
309
+ new4.reload
310
+ assert_equal 5, new4.pos
311
+ end
312
+
313
+ def test_delete_middle
314
+ assert_equal [1, 2, 3, 4], ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos').map(&:id)
315
+
316
+ ListMixin.find(2).destroy
317
+
318
+ assert_equal [1, 3, 4], ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos').map(&:id)
319
+
320
+ assert_equal 1, ListMixin.find(1).pos
321
+ assert_equal 2, ListMixin.find(3).pos
322
+ assert_equal 3, ListMixin.find(4).pos
323
+
324
+ ListMixin.find(1).destroy
325
+
326
+ assert_equal [3, 4], ListMixin.find(:all, :conditions => 'parent_id = 5000', :order => 'pos').map(&:id)
327
+
328
+ assert_equal 1, ListMixin.find(3).pos
329
+ assert_equal 2, ListMixin.find(4).pos
330
+ end
331
+
332
+ end
metadata ADDED
@@ -0,0 +1,195 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: radiant-race_results-extension
3
+ version: !ruby/object:Gem::Version
4
+ hash: 21
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 1
10
+ version: 1.0.1
11
+ platform: ruby
12
+ authors:
13
+ - spanner
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-09-21 00:00:00 +01:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: radiant
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 59
30
+ segments:
31
+ - 0
32
+ - 9
33
+ - 0
34
+ version: 0.9.0
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: radiant-layouts-extension
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 3
46
+ segments:
47
+ - 0
48
+ version: "0"
49
+ type: :runtime
50
+ version_requirements: *id002
51
+ description: Makes easy the uploading, analysis and display of race results. Built for fell races but should work for most timed or score events including those with checkpoints.
52
+ email: will@spanner.org
53
+ executables: []
54
+
55
+ extensions: []
56
+
57
+ extra_rdoc_files:
58
+ - README.md
59
+ files:
60
+ - README.md
61
+ - Rakefile
62
+ - app/controllers/admin/race_clubs_controller.rb
63
+ - app/controllers/admin/race_competitors_controller.rb
64
+ - app/controllers/admin/race_instances_controller.rb
65
+ - app/controllers/admin/races_controller.rb
66
+ - app/controllers/race_instances_controller.rb
67
+ - app/controllers/race_performances_controller.rb
68
+ - app/controllers/races_controller.rb
69
+ - app/helpers/races_helper.rb
70
+ - app/models/race.rb
71
+ - app/models/race_category.rb
72
+ - app/models/race_checkpoint.rb
73
+ - app/models/race_checkpoint_time.rb
74
+ - app/models/race_club.rb
75
+ - app/models/race_club_alias.rb
76
+ - app/models/race_competitor.rb
77
+ - app/models/race_instance.rb
78
+ - app/models/race_page.rb
79
+ - app/models/race_performance.rb
80
+ - app/models/race_performance_status.rb
81
+ - app/models/race_record.rb
82
+ - app/views/admin/race_checkpoints/_checkpoint.html.haml
83
+ - app/views/admin/race_club_aliases/_race_club_alias.html.haml
84
+ - app/views/admin/race_clubs/_club.html.haml
85
+ - app/views/admin/race_clubs/_form.html.haml
86
+ - app/views/admin/race_clubs/edit.html.haml
87
+ - app/views/admin/race_clubs/index.html.haml
88
+ - app/views/admin/race_competitors/_competitor.html.haml
89
+ - app/views/admin/race_competitors/_form.html.haml
90
+ - app/views/admin/race_competitors/edit.html.haml
91
+ - app/views/admin/race_competitors/index.html.haml
92
+ - app/views/admin/race_instances/_form.html.haml
93
+ - app/views/admin/race_instances/edit.html.haml
94
+ - app/views/admin/race_instances/new.html.haml
95
+ - app/views/admin/race_records/_record.html.haml
96
+ - app/views/admin/races/_form.html.haml
97
+ - app/views/admin/races/_race.html.haml
98
+ - app/views/admin/races/edit.html.haml
99
+ - app/views/admin/races/index.html.haml
100
+ - app/views/admin/races/new.html.haml
101
+ - app/views/race_categories/show.html.haml
102
+ - app/views/race_clubs/show.html.haml
103
+ - app/views/race_instances/index.html.haml
104
+ - app/views/race_instances/show.html.haml
105
+ - app/views/race_performances/_headings.html.haml
106
+ - app/views/race_performances/_performance.html.haml
107
+ - app/views/races/index.html.haml
108
+ - app/views/races/show.html.haml
109
+ - cucumber.yml
110
+ - db/migrate/20091116130836_race_data.rb
111
+ - db/migrate/20091124095157_competitor_details.rb
112
+ - db/migrate/20091126110634_club_aliases.rb
113
+ - db/migrate/20091223094002_instance_details.rb
114
+ - db/migrate/20091224100524_race_distance.rb
115
+ - db/migrate/20091224100734_race_records.rb
116
+ - db/migrate/20091224105637_category_details.rb
117
+ - db/migrate/20091224115909_filters.rb
118
+ - db/migrate/20091228122837_record_holder.rb
119
+ - db/migrate/20100106104850_remember_calculations.rb
120
+ - db/migrate/20100426104801_race_attachments.rb
121
+ - features/support/env.rb
122
+ - features/support/paths.rb
123
+ - lib/duration_extensions.rb
124
+ - lib/race_results/admin_ui.rb
125
+ - lib/race_results/race_tags.rb
126
+ - lib/tasks/race_results_extension_tasks.rake
127
+ - public/images/admin/calendar_down.png
128
+ - public/images/admin/new-race.png
129
+ - public/javascripts/admin/races.js
130
+ - public/stylesheets/sass/admin/races.sass
131
+ - race_results_extension.rb
132
+ - spec/datasets/competitors_dataset.rb
133
+ - spec/datasets/race_sites_dataset.rb
134
+ - spec/datasets/races_dataset.rb
135
+ - spec/files/dunnerdale_2009.csv
136
+ - spec/files/long_duddon_2008.csv
137
+ - spec/lib/duration_spec.rb
138
+ - spec/models/race_category_spec.rb
139
+ - spec/models/race_club_spec.rb
140
+ - spec/models/race_instance_spec.rb
141
+ - spec/models/race_performance_spec.rb
142
+ - spec/models/race_performance_status_spec.rb
143
+ - spec/models/race_spec.rb
144
+ - spec/spec.opts
145
+ - spec/spec_helper.rb
146
+ - vendor/plugins/acts_as_list/README
147
+ - vendor/plugins/acts_as_list/init.rb
148
+ - vendor/plugins/acts_as_list/lib/active_record/acts/list.rb
149
+ - vendor/plugins/acts_as_list/test/list_test.rb
150
+ has_rdoc: true
151
+ homepage: http://github.com/radiant/radiant-race_results-extension
152
+ licenses: []
153
+
154
+ post_install_message:
155
+ rdoc_options:
156
+ - --charset=UTF-8
157
+ require_paths:
158
+ - lib
159
+ required_ruby_version: !ruby/object:Gem::Requirement
160
+ none: false
161
+ requirements:
162
+ - - ">="
163
+ - !ruby/object:Gem::Version
164
+ hash: 3
165
+ segments:
166
+ - 0
167
+ version: "0"
168
+ required_rubygems_version: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ hash: 3
174
+ segments:
175
+ - 0
176
+ version: "0"
177
+ requirements: []
178
+
179
+ rubyforge_project:
180
+ rubygems_version: 1.3.7
181
+ signing_key:
182
+ specification_version: 3
183
+ summary: Race results analysis and presentation for the Radiant CMS
184
+ test_files:
185
+ - spec/datasets/competitors_dataset.rb
186
+ - spec/datasets/race_sites_dataset.rb
187
+ - spec/datasets/races_dataset.rb
188
+ - spec/lib/duration_spec.rb
189
+ - spec/models/race_category_spec.rb
190
+ - spec/models/race_club_spec.rb
191
+ - spec/models/race_instance_spec.rb
192
+ - spec/models/race_performance_spec.rb
193
+ - spec/models/race_performance_status_spec.rb
194
+ - spec/models/race_spec.rb
195
+ - spec/spec_helper.rb