greenmonster 0.4.0.dev → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. data/.rspec +2 -0
  2. data/README.markdown +19 -52
  3. data/Rakefile +3 -0
  4. data/greenmonster.gemspec +12 -13
  5. data/lib/greenmonster.rb +47 -43
  6. data/lib/greenmonster/spider.rb +107 -142
  7. data/lib/greenmonster/version.rb +2 -2
  8. data/{test/games/mlb → spec/games/tst}/year_2012/month_03/day_27/gid_2012_03_27_aaamlb_aabmlb_1/blank.txt +0 -0
  9. data/{test/games/tst/year_2012/month_03/day_27/gid_2012_03_27_aaamlb_aabmlb_1 → spec/games/tst/year_2012/month_03/day_27/gid_2012_03_27_aaamlb_aabmlb_1_bak}/blank.txt +0 -0
  10. data/spec/games/tst/year_2012/month_03/day_27/not_2012_03_27_aaamlb_aabmlb_1/blank.txt +0 -0
  11. data/spec/greenmonster/spider_spec.rb +85 -0
  12. data/spec/greenmonster_spec.rb +45 -0
  13. data/spec/spec_helper.rb +25 -0
  14. metadata +52 -71
  15. data/lib/generators/greenmonster/install_mlb_games_generator.rb +0 -20
  16. data/lib/generators/greenmonster/install_players_generator.rb +0 -20
  17. data/lib/generators/templates/install_greenmonster_mlb_games_migration.rb +0 -54
  18. data/lib/generators/templates/install_greenmonster_players_migration.rb +0 -37
  19. data/lib/greenmonster/model_extensions/mlb_game.rb +0 -106
  20. data/lib/greenmonster/model_extensions/mlb_probable_pitcher.rb +0 -11
  21. data/lib/greenmonster/model_extensions/player.rb +0 -16
  22. data/lib/greenmonster/parser.rb +0 -27
  23. data/test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/boxscore.xml +0 -5
  24. data/test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/eventLog.xml +0 -1
  25. data/test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/inning/inning_all.xml +0 -1
  26. data/test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/inning/inning_hit.xml +0 -1
  27. data/test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/linescore.xml +0 -117
  28. data/test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/players.xml +0 -56
  29. data/test/test_create_mlb_game_from_gameday_xml_game.rb +0 -12
  30. data/test/test_create_players_from_gameday_xml_game.rb +0 -8
  31. data/test/test_greenmonster.rb +0 -12
  32. data/test/test_greenmonster_player.rb +0 -7
  33. data/test/test_greenmonster_spider.rb +0 -107
  34. data/test/test_greenmonster_traversal.rb +0 -31
  35. data/test/test_helper.rb +0 -78
  36. data/test/test_line_score.rb +0 -12
  37. data/test/test_parse_mlb_probable_pitchers_from_linescore_data.rb +0 -14
  38. data/test/test_parse_players_from_gameday_xml_files.rb +0 -21
  39. data/test/test_update_mlb_game_with_linescore_data.rb +0 -23
@@ -1,3 +1,3 @@
1
1
  module Greenmonster
2
- VERSION = "0.4.0.dev"
3
- end
2
+ VERSION = "0.5.0"
3
+ end
@@ -0,0 +1,85 @@
1
+ require 'spec_helper'
2
+
3
+ describe Greenmonster::Spider do
4
+ before(:all) do
5
+ FileUtils.rm_r('spec/games/mlb')
6
+ Greenmonster.set_games_folder('spec/games')
7
+ @spider = Greenmonster::Spider.new
8
+ end
9
+
10
+ describe "#pull_days" do
11
+ it "calls #pull_day for each date in the supplied range" do
12
+ @spider.stubs(pull_day: nil)
13
+
14
+ @spider.pull_days(Date.new(2012,1,1)..Date.new(2012,1,3), {arg: 123})
15
+
16
+ @spider.should have_received(:pull_day).with(Date.new(2012,1,1), {arg: 123})
17
+ @spider.should have_received(:pull_day).with(Date.new(2012,1,2), {arg: 123})
18
+ @spider.should have_received(:pull_day).with(Date.new(2012,1,3), {arg: 123})
19
+ end
20
+ end
21
+
22
+ describe "#pull_day" do
23
+ before(:each) do
24
+ @spider.stubs(
25
+ game_links_on_gameday_date_page: ['gid_2012_03_27_aaamlb_aabmlb_1', 'gid_2012_03_27_bbbmlb_bbcmlb_1'],
26
+ pull_game: true
27
+ )
28
+ end
29
+
30
+ it "calls #game_links_on_gameday_date_page with the date and sport code" do
31
+ @spider.pull_day(Date.new(2012,3,27), 'mlb')
32
+
33
+ @spider.should have_received(:game_links_on_gameday_date_page).with(
34
+ Date.new(2012,3,27),
35
+ 'mlb'
36
+ )
37
+ end
38
+
39
+ it "calls #pull_game for each game link on the page" do
40
+ @spider.pull_day(Date.new(2012,3,27), 'mlb')
41
+
42
+ @spider.should have_received(:pull_game).with(
43
+ 'gid_2012_03_27_aaamlb_aabmlb_1',
44
+ Date.new(2012,3,27)
45
+ )
46
+
47
+ @spider.should have_received(:pull_game).with(
48
+ 'gid_2012_03_27_bbbmlb_bbcmlb_1',
49
+ Date.new(2012,3,27)
50
+ )
51
+ end
52
+ end
53
+
54
+ describe "#pull_game" do
55
+ context "when all files are present on mlb.com server" do
56
+ before(:all) do
57
+ @spider.pull_game('gid_2012_09_10_atlmlb_milmlb_1', Date.new(2012,9,10))
58
+ @local_path = Pathname.new(
59
+ './spec/games/mlb/year_2012/month_09/day_10/gid_2012_09_10_atlmlb_milmlb_1'
60
+ )
61
+ end
62
+
63
+ it "downloads boxscore.xml for the game" do
64
+ (@local_path + 'boxscore.xml').exist?.should be_true
65
+ end
66
+
67
+ it "downloads game_events.xml for the game" do
68
+ (@local_path + 'game_events.xml').exist?.should be_true
69
+ end
70
+
71
+ it "downloads linescore.xml for the game" do
72
+ (@local_path + 'linescore.xml').exist?.should be_true
73
+ end
74
+
75
+ it "downloads players.xml for the game" do
76
+ (@local_path + 'players.xml').exist?.should be_true
77
+ end
78
+
79
+ it "downloads the inning files for the games in 2007 or later" do
80
+ (@local_path + 'inning' + 'inning_all.xml').exist?.should be_true
81
+ end
82
+ end
83
+ end
84
+
85
+ end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ describe Greenmonster do
4
+
5
+ before(:all) do
6
+ Greenmonster.set_games_folder("spec/games")
7
+ end
8
+
9
+ describe ".traverse_dates" do
10
+
11
+ it "yields each date in the range with the argument hash" do
12
+ expect { |m|
13
+ Greenmonster.traverse_dates((Date.new(2012)..Date.new(2012,1,3)), {test: true}, &m)
14
+ }.to yield_successive_args(
15
+ [Date.new(2012,1,1), {test: true}],
16
+ [Date.new(2012,1,2), {test: true}],
17
+ [Date.new(2012,1,3), {test: true}]
18
+ )
19
+ end
20
+ end
21
+
22
+ describe ".traverse_folders_for_date" do
23
+
24
+ it "yields each valid game folder (gid-format, not a backup) and the argument hash" do
25
+ expect { |m|
26
+ Greenmonster.traverse_folders_for_date(
27
+ Date.new(2012,3,27), {sport_code: 'tst', other_arg: 1}, &m
28
+ )
29
+ }.to yield_successive_args(
30
+ ["gid_2012_03_27_aaamlb_aabmlb_1", {sport_code: "tst", other_arg: 1}],
31
+ ["gid_2012_03_27_bbbmlb_bbcmlb_1", {sport_code: "tst", other_arg: 1}]
32
+ )
33
+ end
34
+
35
+ it "does not throw an exception if no folder exists for the specified date" do
36
+ expect {
37
+ Greenmonster.traverse_folders_for_date(
38
+ Date.new(1700,1,1), {sport_code: 'mlb'}
39
+ )
40
+ }.to_not raise_error
41
+ end
42
+
43
+ end
44
+
45
+ end
@@ -0,0 +1,25 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper"` to ensure that it is only
4
+ # loaded once.
5
+ #
6
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+ require 'rspec'
8
+ require 'rspec/autorun'
9
+ require 'greenmonster'
10
+ require 'mocha/api'
11
+ require 'bourne'
12
+
13
+ RSpec.configure do |config|
14
+ config.treat_symbols_as_metadata_keys_with_true_values = true
15
+ config.run_all_when_everything_filtered = true
16
+ config.filter_run :focus
17
+
18
+ # Run specs in random order to surface order dependencies. If you find an
19
+ # order dependency and want to debug it, you can fix the order by providing
20
+ # the seed, which is printed after each run.
21
+ # --seed 1234
22
+ config.order = 'random'
23
+
24
+ config.mock_with :mocha
25
+ end
metadata CHANGED
@@ -1,19 +1,19 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: greenmonster
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0.dev
5
- prerelease: 6
4
+ version: 0.5.0
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Geoff Harcourt
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-15 00:00:00.000000000 Z
12
+ date: 2013-01-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
16
- requirement: &70241678952940 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70241678952940
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: httparty
27
- requirement: &70241678952520 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,21 +37,15 @@ dependencies:
32
37
  version: '0'
33
38
  type: :runtime
34
39
  prerelease: false
35
- version_requirements: *70241678952520
36
- - !ruby/object:Gem::Dependency
37
- name: activerecord
38
- requirement: &70241678952100 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
39
41
  none: false
40
42
  requirements:
41
43
  - - ! '>='
42
44
  - !ruby/object:Gem::Version
43
45
  version: '0'
44
- type: :runtime
45
- prerelease: false
46
- version_requirements: *70241678952100
47
46
  - !ruby/object:Gem::Dependency
48
- name: minitest
49
- requirement: &70241678951680 !ruby/object:Gem::Requirement
47
+ name: rspec
48
+ requirement: !ruby/object:Gem::Requirement
50
49
  none: false
51
50
  requirements:
52
51
  - - ! '>='
@@ -54,10 +53,15 @@ dependencies:
54
53
  version: '0'
55
54
  type: :development
56
55
  prerelease: false
57
- version_requirements: *70241678951680
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
58
62
  - !ruby/object:Gem::Dependency
59
- name: supermodel
60
- requirement: &70241678951260 !ruby/object:Gem::Requirement
63
+ name: bourne
64
+ requirement: !ruby/object:Gem::Requirement
61
65
  none: false
62
66
  requirements:
63
67
  - - ! '>='
@@ -65,10 +69,15 @@ dependencies:
65
69
  version: '0'
66
70
  type: :development
67
71
  prerelease: false
68
- version_requirements: *70241678951260
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
69
78
  - !ruby/object:Gem::Dependency
70
- name: sqlite3-ruby
71
- requirement: &70241678950840 !ruby/object:Gem::Requirement
79
+ name: rake
80
+ requirement: !ruby/object:Gem::Requirement
72
81
  none: false
73
82
  requirements:
74
83
  - - ! '>='
@@ -76,7 +85,12 @@ dependencies:
76
85
  version: '0'
77
86
  type: :development
78
87
  prerelease: false
79
- version_requirements: *70241678950840
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
80
94
  description: A utility for working with MLB Gameday XML data.
81
95
  email:
82
96
  - geoff.harcourt@gmail.com
@@ -85,6 +99,7 @@ extensions: []
85
99
  extra_rdoc_files: []
86
100
  files:
87
101
  - .gitignore
102
+ - .rspec
88
103
  - CHANGELOG.markdown
89
104
  - Gemfile
90
105
  - README.markdown
@@ -140,36 +155,15 @@ files:
140
155
  - doc/rdoc.css
141
156
  - doc/table_of_contents.html
142
157
  - greenmonster.gemspec
143
- - lib/generators/greenmonster/install_mlb_games_generator.rb
144
- - lib/generators/greenmonster/install_players_generator.rb
145
- - lib/generators/templates/install_greenmonster_mlb_games_migration.rb
146
- - lib/generators/templates/install_greenmonster_players_migration.rb
147
158
  - lib/greenmonster.rb
148
- - lib/greenmonster/model_extensions/mlb_game.rb
149
- - lib/greenmonster/model_extensions/mlb_probable_pitcher.rb
150
- - lib/greenmonster/model_extensions/player.rb
151
- - lib/greenmonster/parser.rb
152
159
  - lib/greenmonster/spider.rb
153
160
  - lib/greenmonster/version.rb
154
- - test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/boxscore.xml
155
- - test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/eventLog.xml
156
- - test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/inning/inning_all.xml
157
- - test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/inning/inning_hit.xml
158
- - test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/linescore.xml
159
- - test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/players.xml
160
- - test/games/mlb/year_2012/month_03/day_27/gid_2012_03_27_aaamlb_aabmlb_1/blank.txt
161
- - test/games/tst/year_2012/month_03/day_27/gid_2012_03_27_aaamlb_aabmlb_1/blank.txt
162
- - test/test_create_mlb_game_from_gameday_xml_game.rb
163
- - test/test_create_players_from_gameday_xml_game.rb
164
- - test/test_greenmonster.rb
165
- - test/test_greenmonster_player.rb
166
- - test/test_greenmonster_spider.rb
167
- - test/test_greenmonster_traversal.rb
168
- - test/test_helper.rb
169
- - test/test_line_score.rb
170
- - test/test_parse_mlb_probable_pitchers_from_linescore_data.rb
171
- - test/test_parse_players_from_gameday_xml_files.rb
172
- - test/test_update_mlb_game_with_linescore_data.rb
161
+ - spec/games/tst/year_2012/month_03/day_27/gid_2012_03_27_aaamlb_aabmlb_1/blank.txt
162
+ - spec/games/tst/year_2012/month_03/day_27/gid_2012_03_27_aaamlb_aabmlb_1_bak/blank.txt
163
+ - spec/games/tst/year_2012/month_03/day_27/not_2012_03_27_aaamlb_aabmlb_1/blank.txt
164
+ - spec/greenmonster/spider_spec.rb
165
+ - spec/greenmonster_spec.rb
166
+ - spec/spec_helper.rb
173
167
  homepage: http://github.com/geoffharcourt/greenmonster
174
168
  licenses: []
175
169
  post_install_message:
@@ -185,32 +179,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
185
179
  required_rubygems_version: !ruby/object:Gem::Requirement
186
180
  none: false
187
181
  requirements:
188
- - - ! '>'
182
+ - - ! '>='
189
183
  - !ruby/object:Gem::Version
190
- version: 1.3.1
184
+ version: '0'
191
185
  requirements: []
192
186
  rubyforge_project:
193
- rubygems_version: 1.8.11
187
+ rubygems_version: 1.8.24
194
188
  signing_key:
195
189
  specification_version: 3
196
190
  summary: A utility for working with MLB Gameday XML data.
197
191
  test_files:
198
- - test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/boxscore.xml
199
- - test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/eventLog.xml
200
- - test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/inning/inning_all.xml
201
- - test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/inning/inning_hit.xml
202
- - test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/linescore.xml
203
- - test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/players.xml
204
- - test/games/mlb/year_2012/month_03/day_27/gid_2012_03_27_aaamlb_aabmlb_1/blank.txt
205
- - test/games/tst/year_2012/month_03/day_27/gid_2012_03_27_aaamlb_aabmlb_1/blank.txt
206
- - test/test_create_mlb_game_from_gameday_xml_game.rb
207
- - test/test_create_players_from_gameday_xml_game.rb
208
- - test/test_greenmonster.rb
209
- - test/test_greenmonster_player.rb
210
- - test/test_greenmonster_spider.rb
211
- - test/test_greenmonster_traversal.rb
212
- - test/test_helper.rb
213
- - test/test_line_score.rb
214
- - test/test_parse_mlb_probable_pitchers_from_linescore_data.rb
215
- - test/test_parse_players_from_gameday_xml_files.rb
216
- - test/test_update_mlb_game_with_linescore_data.rb
192
+ - spec/games/tst/year_2012/month_03/day_27/gid_2012_03_27_aaamlb_aabmlb_1/blank.txt
193
+ - spec/games/tst/year_2012/month_03/day_27/gid_2012_03_27_aaamlb_aabmlb_1_bak/blank.txt
194
+ - spec/games/tst/year_2012/month_03/day_27/not_2012_03_27_aaamlb_aabmlb_1/blank.txt
195
+ - spec/greenmonster/spider_spec.rb
196
+ - spec/greenmonster_spec.rb
197
+ - spec/spec_helper.rb
@@ -1,20 +0,0 @@
1
- module Greenmonster
2
- module Generators
3
- class InstallMlbGamesGenerator < Rails::Generators::Base
4
- include Rails::Generators::Migration
5
- source_root File.expand_path('../../templates', __FILE__)
6
-
7
- def self.next_migration_number(dirname)
8
- if ActiveRecord::Base.timestamped_migrations
9
- Time.new.utc.strftime("%Y%m%d%H%M%S")
10
- else
11
- "%.3d" % (current_migration_number(dirname) + 1)
12
- end
13
- end
14
-
15
- def create_migration_file
16
- migration_template 'install_greenmonster_mlb_games_migration.rb', 'db/migrate/install_greenmonster_mlb_games.rb'
17
- end
18
- end
19
- end
20
- end
@@ -1,20 +0,0 @@
1
- module Greenmonster
2
- module Generators
3
- class InstallPlayersGenerator < Rails::Generators::Base
4
- include Rails::Generators::Migration
5
- source_root File.expand_path('../../templates', __FILE__)
6
-
7
- def self.next_migration_number(dirname)
8
- if ActiveRecord::Base.timestamped_migrations
9
- Time.new.utc.strftime("%Y%m%d%H%M%S")
10
- else
11
- "%.3d" % (current_migration_number(dirname) + 1)
12
- end
13
- end
14
-
15
- def create_migration_file
16
- migration_template 'install_greenmonster_players_migration.rb', 'db/migrate/install_greenmonster_players.rb'
17
- end
18
- end
19
- end
20
- end
@@ -1,54 +0,0 @@
1
- class InstallGreenmonsterMlbGames < ActiveRecord::Migration
2
- def self.up
3
- create_table "mlb_games", :force => true do |t|
4
- t.date "date"
5
- t.datetime "created_at"
6
- t.datetime "updated_at"
7
- t.string "away_division"
8
- t.string "home_division"
9
- t.string "game_id"
10
- t.string "game_location"
11
- t.integer "game_num"
12
- t.integer "game_pk"
13
- t.string "game_status", :limit => 2
14
- t.datetime "game_time"
15
- t.boolean "game_time_is_tbd"
16
- t.integer "game_time_offset_eastern"
17
- t.integer "game_time_offset_local"
18
- t.string "game_type", :limit => 1
19
- t.string "game_venue"
20
- t.boolean "is_suspension_resumption"
21
- t.boolean "mlbtv"
22
- t.string "preview"
23
- t.integer "resumptionTime", :limit => 8
24
- t.datetime "scheduledTime"
25
- t.string "sport_code", :limit => 3
26
- t.integer "venue_id"
27
- t.string "video_uri"
28
- t.string "wrapup"
29
- t.boolean "game_dh"
30
- t.integer "away_team_id"
31
- t.integer "home_team_id"
32
- t.integer "away_league_id"
33
- t.integer "home_league_id"
34
- t.string "away_sport_code"
35
- t.string "home_sport_code"
36
- t.integer "last_event_processed"
37
- end
38
-
39
- add_index "mlb_games", ["away_league_id"], :name => "mlb_games-away_league_id"
40
- add_index "mlb_games", ["away_team_id"], :name => "mlb_games-away_team_id"
41
- add_index "mlb_games", ["date"], :name => "mlb_games-date"
42
- add_index "mlb_games", ["game_id", "game_type"], :name => "mlb_games-game_id-game_type"
43
- add_index "mlb_games", ["game_id"], :name => "mlb_games-game_id"
44
- add_index "mlb_games", ["game_pk"], :name => "mlb_games-game_pk", :unique => true
45
- add_index "mlb_games", ["home_division"], :name => "mlb_games-division_id"
46
- add_index "mlb_games", ["home_league_id"], :name => "mlb_games-home_league_id"
47
- add_index "mlb_games", ["home_team_id"], :name => "mlb_games-home_team_id"
48
- add_index "mlb_games", ["venue_id"], :name => "mlb_games-venue_id"
49
- end
50
-
51
- def self.down
52
- drop_table :mlb_games
53
- end
54
- end