greenmonster 0.3.1 → 0.3.2

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.
Files changed (55) hide show
  1. data/.gitignore +1 -0
  2. data/CHANGELOG.markdown +6 -0
  3. data/README.markdown +37 -2
  4. data/doc/Athlete.html +254 -0
  5. data/doc/Gemfile.html +20 -0
  6. data/doc/Greenmonster/Generators/InstallGenerator.html +253 -0
  7. data/doc/Greenmonster/Generators.html +147 -0
  8. data/doc/Greenmonster/Parser.html +263 -0
  9. data/doc/Greenmonster/Player.html +236 -0
  10. data/doc/Greenmonster/Spider.html +169 -21
  11. data/doc/Greenmonster.html +139 -2
  12. data/doc/GreenmonsterPlayerTest.html +199 -0
  13. data/doc/GreenmonsterSpiderTest.html +57 -4
  14. data/doc/GreenmonsterTest.html +20 -0
  15. data/doc/GreenmonsterTraversalTest.html +376 -0
  16. data/doc/InstallGreenmonster.html +260 -0
  17. data/doc/Rakefile.html +20 -0
  18. data/doc/TestCreatePlayersFromGamedayXMLGame.html +266 -0
  19. data/doc/TestParsePlayersFromGamedayXMLFiles.html +307 -0
  20. data/doc/created.rid +18 -9
  21. data/doc/index.html +20 -0
  22. data/doc/js/search_index.js +1 -1
  23. data/doc/table_of_contents.html +93 -1
  24. data/greenmonster.gemspec +4 -2
  25. data/lib/generators/greenmonster/install_mlb_games_generator.rb +20 -0
  26. data/lib/generators/greenmonster/install_players_generator.rb +20 -0
  27. data/lib/generators/templates/install_greenmonster_mlb_games_migration.rb +54 -0
  28. data/lib/generators/templates/install_greenmonster_players_migration.rb +37 -0
  29. data/lib/greenmonster/model_extensions/mlb_game.rb +106 -0
  30. data/lib/greenmonster/model_extensions/mlb_probable_pitcher.rb +11 -0
  31. data/lib/greenmonster/model_extensions/player.rb +16 -0
  32. data/lib/greenmonster/parser.rb +27 -0
  33. data/lib/greenmonster/spider.rb +7 -6
  34. data/lib/greenmonster/version.rb +1 -1
  35. data/lib/greenmonster.rb +46 -0
  36. data/test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/boxscore.xml +5 -0
  37. data/test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/eventLog.xml +1 -0
  38. data/test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/inning/inning_all.xml +1 -0
  39. data/test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/inning/inning_hit.xml +1 -0
  40. data/test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/linescore.xml +117 -0
  41. data/test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/players.xml +56 -0
  42. data/test/games/mlb/year_2012/month_03/day_27/gid_2012_03_27_aaamlb_aabmlb_1/blank.txt +0 -0
  43. data/test/games/tst/year_2012/month_03/day_27/gid_2012_03_27_aaamlb_aabmlb_1/blank.txt +0 -0
  44. data/test/test_create_mlb_game_from_gameday_xml_game.rb +12 -0
  45. data/test/test_create_players_from_gameday_xml_game.rb +8 -0
  46. data/test/test_greenmonster.rb +3 -6
  47. data/test/test_greenmonster_player.rb +7 -0
  48. data/test/test_greenmonster_spider.rb +24 -18
  49. data/test/test_greenmonster_traversal.rb +31 -0
  50. data/test/test_helper.rb +78 -0
  51. data/test/test_line_score.rb +12 -0
  52. data/test/test_parse_mlb_probable_pitchers_from_linescore_data.rb +14 -0
  53. data/test/test_parse_players_from_gameday_xml_files.rb +21 -0
  54. data/test/test_update_mlb_game_with_linescore_data.rb +23 -0
  55. metadata +103 -7
@@ -1 +1 @@
1
- var search_data = {"index":{"searchIndex":["greenmonster","spider","greenmonsterspidertest","greenmonstertest","games_folder()","pull_day()","pull_days()","pull_game()","set_games_folder()","setup()","setup()","teardown()","teardown()","test_copy_gameday_xml()","test_format_date_as_folder()","test_local_file_not_created_if_remote_file_does_not_exist()","test_no_exception_raised_if_game_data_not_available()","test_pull_all_sport_codes_for_day()","test_pull_day()","test_pull_day_with_default_folder_location()","test_pull_days()","test_pull_games_prior_to_2008()","test_pull_non_mlb_sport_code_games()","test_pull_single_game_by_game_id()","test_set_games_folder_location()","gemfile","rakefile"],"longSearchIndex":["greenmonster","greenmonster::spider","greenmonsterspidertest","greenmonstertest","greenmonster::games_folder()","greenmonster::spider::pull_day()","greenmonster::spider::pull_days()","greenmonster::spider::pull_game()","greenmonster::set_games_folder()","greenmonsterspidertest#setup()","greenmonstertest#setup()","greenmonsterspidertest#teardown()","greenmonstertest#teardown()","greenmonsterspidertest#test_copy_gameday_xml()","greenmonsterspidertest#test_format_date_as_folder()","greenmonsterspidertest#test_local_file_not_created_if_remote_file_does_not_exist()","greenmonsterspidertest#test_no_exception_raised_if_game_data_not_available()","greenmonsterspidertest#test_pull_all_sport_codes_for_day()","greenmonsterspidertest#test_pull_day()","greenmonsterspidertest#test_pull_day_with_default_folder_location()","greenmonsterspidertest#test_pull_days()","greenmonsterspidertest#test_pull_games_prior_to_2008()","greenmonsterspidertest#test_pull_non_mlb_sport_code_games()","greenmonsterspidertest#test_pull_single_game_by_game_id()","greenmonstertest#test_set_games_folder_location()","",""],"info":[["Greenmonster","","Greenmonster.html","",""],["Greenmonster::Spider","","Greenmonster/Spider.html","","<p>The Gameday XML Spider utility\n"],["GreenmonsterSpiderTest","","GreenmonsterSpiderTest.html","",""],["GreenmonsterTest","","GreenmonsterTest.html","",""],["games_folder","Greenmonster","Greenmonster.html#method-c-games_folder","()","<p>Return the default games folder location\n<p>Example:\n\n<pre>&gt;&gt; Greenmonster.set_games_folder(&quot;/Users/geoff/game_data&quot;) ...</pre>\n"],["pull_day","Greenmonster::Spider","Greenmonster/Spider.html#method-c-pull_day","(args = {})","<p>Pull Gameday XML files for a given date. Default options for the spider\nare to pull games with sport_code …\n"],["pull_days","Greenmonster::Spider","Greenmonster/Spider.html#method-c-pull_days","(range,args = {})","<p>Pull Gameday XML files for a range of dates. The args hash passes arguments\nlike games_folder location …\n"],["pull_game","Greenmonster::Spider","Greenmonster/Spider.html#method-c-pull_game","(game_id,args = {})","<p>Pull Gameday XML files for a given game, specified by the game ID. If date\nand sport code are not specified …\n"],["set_games_folder","Greenmonster","Greenmonster.html#method-c-set_games_folder","(location)","<p>Set the default folder to which games are saved after being downloaded from\nthe server.\n<p>Example:\n\n<pre class=\"ruby\">=<span class=\"ruby-operator\">&gt;</span> <span class=\"ruby-constant\">Greenmonster</span>.<span class=\"ruby-identifier\">set_games_folder</span>(<span class=\"ruby-string\">&quot;/Users/geoff/game_data&quot;</span>)\n</pre>\n"],["setup","GreenmonsterSpiderTest","GreenmonsterSpiderTest.html#method-i-setup","()",""],["setup","GreenmonsterTest","GreenmonsterTest.html#method-i-setup","()",""],["teardown","GreenmonsterSpiderTest","GreenmonsterSpiderTest.html#method-i-teardown","()",""],["teardown","GreenmonsterTest","GreenmonsterTest.html#method-i-teardown","()",""],["test_copy_gameday_xml","GreenmonsterSpiderTest","GreenmonsterSpiderTest.html#method-i-test_copy_gameday_xml","()",""],["test_format_date_as_folder","GreenmonsterSpiderTest","GreenmonsterSpiderTest.html#method-i-test_format_date_as_folder","()",""],["test_local_file_not_created_if_remote_file_does_not_exist","GreenmonsterSpiderTest","GreenmonsterSpiderTest.html#method-i-test_local_file_not_created_if_remote_file_does_not_exist","()",""],["test_no_exception_raised_if_game_data_not_available","GreenmonsterSpiderTest","GreenmonsterSpiderTest.html#method-i-test_no_exception_raised_if_game_data_not_available","()",""],["test_pull_all_sport_codes_for_day","GreenmonsterSpiderTest","GreenmonsterSpiderTest.html#method-i-test_pull_all_sport_codes_for_day","()",""],["test_pull_day","GreenmonsterSpiderTest","GreenmonsterSpiderTest.html#method-i-test_pull_day","()",""],["test_pull_day_with_default_folder_location","GreenmonsterSpiderTest","GreenmonsterSpiderTest.html#method-i-test_pull_day_with_default_folder_location","()",""],["test_pull_days","GreenmonsterSpiderTest","GreenmonsterSpiderTest.html#method-i-test_pull_days","()",""],["test_pull_games_prior_to_2008","GreenmonsterSpiderTest","GreenmonsterSpiderTest.html#method-i-test_pull_games_prior_to_2008","()",""],["test_pull_non_mlb_sport_code_games","GreenmonsterSpiderTest","GreenmonsterSpiderTest.html#method-i-test_pull_non_mlb_sport_code_games","()",""],["test_pull_single_game_by_game_id","GreenmonsterSpiderTest","GreenmonsterSpiderTest.html#method-i-test_pull_single_game_by_game_id","()",""],["test_set_games_folder_location","GreenmonsterTest","GreenmonsterTest.html#method-i-test_set_games_folder_location","()",""],["Gemfile","","Gemfile.html","","<p>source “rubygems.org”\n<p># Specify your gem’s dependencies in greenmonster.gemspec gemspec\n"],["Rakefile","","Rakefile.html","","<p>require “bundler/gem_tasks” require ‘rake/testtask’\n<p>Rake::TestTask.new do |t|\n\n<pre>t.libs &lt;&lt; 'test'</pre>\n"]]}}
1
+ var search_data = {"index":{"searchIndex":["athlete","greenmonster","generators","installgenerator","parser","player","spider","greenmonsterplayertest","greenmonsterspidertest","greenmonstertest","greenmonstertraversaltest","installgreenmonster","testcreateplayersfromgamedayxmlgame","testparseplayersfromgamedayxmlfiles","copygamedayxml()","create_migration_file()","date_from_game_id()","down()","extract_players_from_game()","find_or_initialize_by_id()","format_date_as_folder()","format_date_as_folder()","game_path()","games_folder()","included()","next_migration_number()","pull()","pull_day()","pull_days()","pull_game()","set_games_folder()","setup()","setup()","setup()","setup()","setup()","teardown()","teardown()","teardown()","teardown()","teardown()","test_copy_gameday_xml()","test_create_players_from_gameday_xml_game()","test_format_date_as_folder()","test_local_file_not_created_if_remote_file_does_not_exist()","test_no_exception_raised_if_game_data_not_available()","test_parse_players_from_game()","test_player_ids_stored_as_integers()","test_pull_all_sport_codes_for_day()","test_pull_day()","test_pull_day_with_default_folder_location()","test_pull_days()","test_pull_games_prior_to_2008()","test_pull_non_mlb_sport_code_games()","test_pull_single_game_by_game_id()","test_set_games_folder_location()","test_sport_code_argument_as_array()","test_to_s()","test_traverse_dates_across_range()","test_traverse_dates_with_no_range()","test_traverse_folders_for_date()","test_traverse_folders_for_non_mlb_sport_code()","to_s()","traverse_dates()","traverse_folders_for_date()","up()","gemfile","rakefile"],"longSearchIndex":["athlete","greenmonster","greenmonster::generators","greenmonster::generators::installgenerator","greenmonster::parser","greenmonster::player","greenmonster::spider","greenmonsterplayertest","greenmonsterspidertest","greenmonstertest","greenmonstertraversaltest","installgreenmonster","testcreateplayersfromgamedayxmlgame","testparseplayersfromgamedayxmlfiles","greenmonster::spider::copygamedayxml()","greenmonster::generators::installgenerator#create_migration_file()","greenmonster::parser::date_from_game_id()","installgreenmonster::down()","greenmonster::parser::extract_players_from_game()","athlete::find_or_initialize_by_id()","greenmonster::format_date_as_folder()","greenmonster::spider::format_date_as_folder()","greenmonster::parser::game_path()","greenmonster::games_folder()","greenmonster::player::included()","greenmonster::generators::installgenerator::next_migration_number()","greenmonster::spider::pull()","greenmonster::spider::pull_day()","greenmonster::spider::pull_days()","greenmonster::spider::pull_game()","greenmonster::set_games_folder()","greenmonsterspidertest#setup()","greenmonstertest#setup()","greenmonstertraversaltest#setup()","testcreateplayersfromgamedayxmlgame#setup()","testparseplayersfromgamedayxmlfiles#setup()","greenmonsterspidertest#teardown()","greenmonstertest#teardown()","greenmonstertraversaltest#teardown()","testcreateplayersfromgamedayxmlgame#teardown()","testparseplayersfromgamedayxmlfiles#teardown()","greenmonsterspidertest#test_copy_gameday_xml()","testcreateplayersfromgamedayxmlgame#test_create_players_from_gameday_xml_game()","greenmonsterspidertest#test_format_date_as_folder()","greenmonsterspidertest#test_local_file_not_created_if_remote_file_does_not_exist()","greenmonsterspidertest#test_no_exception_raised_if_game_data_not_available()","testparseplayersfromgamedayxmlfiles#test_parse_players_from_game()","testparseplayersfromgamedayxmlfiles#test_player_ids_stored_as_integers()","greenmonsterspidertest#test_pull_all_sport_codes_for_day()","greenmonsterspidertest#test_pull_day()","greenmonsterspidertest#test_pull_day_with_default_folder_location()","greenmonsterspidertest#test_pull_days()","greenmonsterspidertest#test_pull_games_prior_to_2008()","greenmonsterspidertest#test_pull_non_mlb_sport_code_games()","greenmonsterspidertest#test_pull_single_game_by_game_id()","greenmonstertest#test_set_games_folder_location()","greenmonsterspidertest#test_sport_code_argument_as_array()","greenmonsterplayertest#test_to_s()","greenmonstertraversaltest#test_traverse_dates_across_range()","greenmonstertraversaltest#test_traverse_dates_with_no_range()","greenmonstertraversaltest#test_traverse_folders_for_date()","greenmonstertraversaltest#test_traverse_folders_for_non_mlb_sport_code()","greenmonster::player#to_s()","greenmonster::traverse_dates()","greenmonster::traverse_folders_for_date()","installgreenmonster::up()","",""],"info":[["Athlete","","Athlete.html","",""],["Greenmonster","","Greenmonster.html","",""],["Greenmonster::Generators","","Greenmonster/Generators.html","",""],["Greenmonster::Generators::InstallGenerator","","Greenmonster/Generators/InstallGenerator.html","",""],["Greenmonster::Parser","","Greenmonster/Parser.html","",""],["Greenmonster::Player","","Greenmonster/Player.html","",""],["Greenmonster::Spider","","Greenmonster/Spider.html","","<p>The Gameday XML Spider utility\n"],["GreenmonsterPlayerTest","","GreenmonsterPlayerTest.html","",""],["GreenmonsterSpiderTest","","GreenmonsterSpiderTest.html","",""],["GreenmonsterTest","","GreenmonsterTest.html","",""],["GreenmonsterTraversalTest","","GreenmonsterTraversalTest.html","",""],["InstallGreenmonster","","InstallGreenmonster.html","",""],["TestCreatePlayersFromGamedayXMLGame","","TestCreatePlayersFromGamedayXMLGame.html","",""],["TestParsePlayersFromGamedayXMLFiles","","TestParsePlayersFromGamedayXMLFiles.html","",""],["copyGameDayXML","Greenmonster::Spider","Greenmonster/Spider.html#method-c-copyGameDayXML","(file_name,location,paths)",""],["create_migration_file","Greenmonster::Generators::InstallGenerator","Greenmonster/Generators/InstallGenerator.html#method-i-create_migration_file","()",""],["date_from_game_id","Greenmonster::Parser","Greenmonster/Parser.html#method-c-date_from_game_id","(gid)",""],["down","InstallGreenmonster","InstallGreenmonster.html#method-c-down","()",""],["extract_players_from_game","Greenmonster::Parser","Greenmonster/Parser.html#method-c-extract_players_from_game","(gid, args = {})",""],["find_or_initialize_by_id","Athlete","Athlete.html#method-c-find_or_initialize_by_id","(id_number)",""],["format_date_as_folder","Greenmonster","Greenmonster.html#method-c-format_date_as_folder","(date)",""],["format_date_as_folder","Greenmonster::Spider","Greenmonster/Spider.html#method-c-format_date_as_folder","(date)",""],["game_path","Greenmonster::Parser","Greenmonster/Parser.html#method-c-game_path","(gid,args)",""],["games_folder","Greenmonster","Greenmonster.html#method-c-games_folder","()","<p>Return the default games folder location\n<p>Example:\n\n<pre>&gt;&gt; Greenmonster.set_games_folder(&quot;/Users/geoff/game_data&quot;) ...</pre>\n"],["included","Greenmonster::Player","Greenmonster/Player.html#method-c-included","(k)",""],["next_migration_number","Greenmonster::Generators::InstallGenerator","Greenmonster/Generators/InstallGenerator.html#method-c-next_migration_number","(dirname)",""],["pull","Greenmonster::Spider","Greenmonster/Spider.html#method-c-pull","(date = Date.today,args = {})",""],["pull_day","Greenmonster::Spider","Greenmonster/Spider.html#method-c-pull_day","(args = {})","<p>Pull Gameday XML files for a given date. Default options for the spider\nare to pull games with sport_code …\n"],["pull_days","Greenmonster::Spider","Greenmonster/Spider.html#method-c-pull_days","(range = [Date.today],args = {})",""],["pull_game","Greenmonster::Spider","Greenmonster/Spider.html#method-c-pull_game","(game_id,args = {})","<p>Pull Gameday XML files for a given game, specified by the game ID. If date\nand sport code are not specified …\n"],["set_games_folder","Greenmonster","Greenmonster.html#method-c-set_games_folder","(location)","<p>Set the default folder to which games are saved after being downloaded from\nthe server.\n<p>Example:\n\n<pre class=\"ruby\">=<span class=\"ruby-operator\">&gt;</span> <span class=\"ruby-constant\">Greenmonster</span>.<span class=\"ruby-identifier\">set_games_folder</span>(<span class=\"ruby-string\">&quot;/Users/geoff/game_data&quot;</span>)\n</pre>\n"],["setup","GreenmonsterSpiderTest","GreenmonsterSpiderTest.html#method-i-setup","()",""],["setup","GreenmonsterTest","GreenmonsterTest.html#method-i-setup","()",""],["setup","GreenmonsterTraversalTest","GreenmonsterTraversalTest.html#method-i-setup","()",""],["setup","TestCreatePlayersFromGamedayXMLGame","TestCreatePlayersFromGamedayXMLGame.html#method-i-setup","()",""],["setup","TestParsePlayersFromGamedayXMLFiles","TestParsePlayersFromGamedayXMLFiles.html#method-i-setup","()",""],["teardown","GreenmonsterSpiderTest","GreenmonsterSpiderTest.html#method-i-teardown","()",""],["teardown","GreenmonsterTest","GreenmonsterTest.html#method-i-teardown","()",""],["teardown","GreenmonsterTraversalTest","GreenmonsterTraversalTest.html#method-i-teardown","()",""],["teardown","TestCreatePlayersFromGamedayXMLGame","TestCreatePlayersFromGamedayXMLGame.html#method-i-teardown","()",""],["teardown","TestParsePlayersFromGamedayXMLFiles","TestParsePlayersFromGamedayXMLFiles.html#method-i-teardown","()",""],["test_copy_gameday_xml","GreenmonsterSpiderTest","GreenmonsterSpiderTest.html#method-i-test_copy_gameday_xml","()",""],["test_create_players_from_gameday_xml_game","TestCreatePlayersFromGamedayXMLGame","TestCreatePlayersFromGamedayXMLGame.html#method-i-test_create_players_from_gameday_xml_game","()",""],["test_format_date_as_folder","GreenmonsterSpiderTest","GreenmonsterSpiderTest.html#method-i-test_format_date_as_folder","()",""],["test_local_file_not_created_if_remote_file_does_not_exist","GreenmonsterSpiderTest","GreenmonsterSpiderTest.html#method-i-test_local_file_not_created_if_remote_file_does_not_exist","()",""],["test_no_exception_raised_if_game_data_not_available","GreenmonsterSpiderTest","GreenmonsterSpiderTest.html#method-i-test_no_exception_raised_if_game_data_not_available","()",""],["test_parse_players_from_game","TestParsePlayersFromGamedayXMLFiles","TestParsePlayersFromGamedayXMLFiles.html#method-i-test_parse_players_from_game","()",""],["test_player_ids_stored_as_integers","TestParsePlayersFromGamedayXMLFiles","TestParsePlayersFromGamedayXMLFiles.html#method-i-test_player_ids_stored_as_integers","()",""],["test_pull_all_sport_codes_for_day","GreenmonsterSpiderTest","GreenmonsterSpiderTest.html#method-i-test_pull_all_sport_codes_for_day","()",""],["test_pull_day","GreenmonsterSpiderTest","GreenmonsterSpiderTest.html#method-i-test_pull_day","()",""],["test_pull_day_with_default_folder_location","GreenmonsterSpiderTest","GreenmonsterSpiderTest.html#method-i-test_pull_day_with_default_folder_location","()",""],["test_pull_days","GreenmonsterSpiderTest","GreenmonsterSpiderTest.html#method-i-test_pull_days","()",""],["test_pull_games_prior_to_2008","GreenmonsterSpiderTest","GreenmonsterSpiderTest.html#method-i-test_pull_games_prior_to_2008","()",""],["test_pull_non_mlb_sport_code_games","GreenmonsterSpiderTest","GreenmonsterSpiderTest.html#method-i-test_pull_non_mlb_sport_code_games","()",""],["test_pull_single_game_by_game_id","GreenmonsterSpiderTest","GreenmonsterSpiderTest.html#method-i-test_pull_single_game_by_game_id","()",""],["test_set_games_folder_location","GreenmonsterTest","GreenmonsterTest.html#method-i-test_set_games_folder_location","()",""],["test_sport_code_argument_as_array","GreenmonsterSpiderTest","GreenmonsterSpiderTest.html#method-i-test_sport_code_argument_as_array","()",""],["test_to_s","GreenmonsterPlayerTest","GreenmonsterPlayerTest.html#method-i-test_to_s","()",""],["test_traverse_dates_across_range","GreenmonsterTraversalTest","GreenmonsterTraversalTest.html#method-i-test_traverse_dates_across_range","()",""],["test_traverse_dates_with_no_range","GreenmonsterTraversalTest","GreenmonsterTraversalTest.html#method-i-test_traverse_dates_with_no_range","()",""],["test_traverse_folders_for_date","GreenmonsterTraversalTest","GreenmonsterTraversalTest.html#method-i-test_traverse_folders_for_date","()",""],["test_traverse_folders_for_non_mlb_sport_code","GreenmonsterTraversalTest","GreenmonsterTraversalTest.html#method-i-test_traverse_folders_for_non_mlb_sport_code","()",""],["to_s","Greenmonster::Player","Greenmonster/Player.html#method-i-to_s","()",""],["traverse_dates","Greenmonster","Greenmonster.html#method-c-traverse_dates","(range = (Date.today..Date.today), args = {})","<p>Walk the dates in a range of dates, and execute whatever methods on the\ndate and argument set specified. …\n"],["traverse_folders_for_date","Greenmonster","Greenmonster.html#method-c-traverse_folders_for_date","(day,args = {})","<p>Walk the game folders in a range of dates, and execute whatever methods on\nthe game folder and argument …\n"],["up","InstallGreenmonster","InstallGreenmonster.html#method-c-up","()",""],["Gemfile","","Gemfile.html","","<p>source “rubygems.org”\n<p># Specify your gem’s dependencies in greenmonster.gemspec gemspec\n"],["Rakefile","","Rakefile.html","","<p>require “bundler/gem_tasks” require ‘rake/testtask’\n<p>Rake::TestTask.new do |t|\n\n<pre>t.libs &lt;&lt; 'test'</pre>\n"]]}}
@@ -38,9 +38,27 @@
38
38
  <ul>
39
39
  <li class="module">
40
40
  <a href="Greenmonster.html">Greenmonster</a>
41
+ </li>
42
+ <li class="module">
43
+ <a href="Greenmonster/Generators.html">Greenmonster::Generators</a>
44
+ </li>
45
+ <li class="class">
46
+ <a href="Greenmonster/Generators/InstallGenerator.html">Greenmonster::Generators::InstallGenerator</a>
47
+ </li>
48
+ <li class="module">
49
+ <a href="Greenmonster/Parser.html">Greenmonster::Parser</a>
50
+ </li>
51
+ <li class="module">
52
+ <a href="Greenmonster/Player.html">Greenmonster::Player</a>
41
53
  </li>
42
54
  <li class="class">
43
55
  <a href="Greenmonster/Spider.html">Greenmonster::Spider</a>
56
+ </li>
57
+ <li class="class">
58
+ <a href="Athlete.html">Athlete</a>
59
+ </li>
60
+ <li class="class">
61
+ <a href="GreenmonsterPlayerTest.html">GreenmonsterPlayerTest</a>
44
62
  </li>
45
63
  <li class="class">
46
64
  <a href="GreenmonsterSpiderTest.html">GreenmonsterSpiderTest</a>
@@ -48,14 +66,48 @@
48
66
  <li class="class">
49
67
  <a href="GreenmonsterTest.html">GreenmonsterTest</a>
50
68
  </li>
69
+ <li class="class">
70
+ <a href="GreenmonsterTraversalTest.html">GreenmonsterTraversalTest</a>
71
+ </li>
72
+ <li class="class">
73
+ <a href="InstallGreenmonster.html">InstallGreenmonster</a>
74
+ </li>
75
+ <li class="class">
76
+ <a href="TestCreatePlayersFromGamedayXMLGame.html">TestCreatePlayersFromGamedayXMLGame</a>
77
+ </li>
78
+ <li class="class">
79
+ <a href="TestParsePlayersFromGamedayXMLFiles.html">TestParsePlayersFromGamedayXMLFiles</a>
80
+ </li>
51
81
 
52
82
  </ul>
53
83
 
54
84
  <h2 id="methods">Methods</h2>
55
85
  <ul>
56
86
 
87
+ <li class="method"><a href="Greenmonster/Spider.html#method-c-copyGameDayXML">::copyGameDayXML &mdash; Greenmonster::Spider</a>
88
+
89
+ <li class="method"><a href="Greenmonster/Parser.html#method-c-date_from_game_id">::date_from_game_id &mdash; Greenmonster::Parser</a>
90
+
91
+ <li class="method"><a href="InstallGreenmonster.html#method-c-down">::down &mdash; InstallGreenmonster</a>
92
+
93
+ <li class="method"><a href="Greenmonster/Parser.html#method-c-extract_players_from_game">::extract_players_from_game &mdash; Greenmonster::Parser</a>
94
+
95
+ <li class="method"><a href="Athlete.html#method-c-find_or_initialize_by_id">::find_or_initialize_by_id &mdash; Athlete</a>
96
+
97
+ <li class="method"><a href="Greenmonster/Spider.html#method-c-format_date_as_folder">::format_date_as_folder &mdash; Greenmonster::Spider</a>
98
+
99
+ <li class="method"><a href="Greenmonster.html#method-c-format_date_as_folder">::format_date_as_folder &mdash; Greenmonster</a>
100
+
101
+ <li class="method"><a href="Greenmonster/Parser.html#method-c-game_path">::game_path &mdash; Greenmonster::Parser</a>
102
+
57
103
  <li class="method"><a href="Greenmonster.html#method-c-games_folder">::games_folder &mdash; Greenmonster</a>
58
104
 
105
+ <li class="method"><a href="Greenmonster/Player.html#method-c-included">::included &mdash; Greenmonster::Player</a>
106
+
107
+ <li class="method"><a href="Greenmonster/Generators/InstallGenerator.html#method-c-next_migration_number">::next_migration_number &mdash; Greenmonster::Generators::InstallGenerator</a>
108
+
109
+ <li class="method"><a href="Greenmonster/Spider.html#method-c-pull">::pull &mdash; Greenmonster::Spider</a>
110
+
59
111
  <li class="method"><a href="Greenmonster/Spider.html#method-c-pull_day">::pull_day &mdash; Greenmonster::Spider</a>
60
112
 
61
113
  <li class="method"><a href="Greenmonster/Spider.html#method-c-pull_days">::pull_days &mdash; Greenmonster::Spider</a>
@@ -64,22 +116,48 @@
64
116
 
65
117
  <li class="method"><a href="Greenmonster.html#method-c-set_games_folder">::set_games_folder &mdash; Greenmonster</a>
66
118
 
67
- <li class="method"><a href="GreenmonsterSpiderTest.html#method-i-setup">#setup &mdash; GreenmonsterSpiderTest</a>
119
+ <li class="method"><a href="Greenmonster.html#method-c-traverse_dates">::traverse_dates &mdash; Greenmonster</a>
120
+
121
+ <li class="method"><a href="Greenmonster.html#method-c-traverse_folders_for_date">::traverse_folders_for_date &mdash; Greenmonster</a>
122
+
123
+ <li class="method"><a href="InstallGreenmonster.html#method-c-up">::up &mdash; InstallGreenmonster</a>
124
+
125
+ <li class="method"><a href="Greenmonster/Generators/InstallGenerator.html#method-i-create_migration_file">#create_migration_file &mdash; Greenmonster::Generators::InstallGenerator</a>
126
+
127
+ <li class="method"><a href="TestParsePlayersFromGamedayXMLFiles.html#method-i-setup">#setup &mdash; TestParsePlayersFromGamedayXMLFiles</a>
68
128
 
69
129
  <li class="method"><a href="GreenmonsterTest.html#method-i-setup">#setup &mdash; GreenmonsterTest</a>
70
130
 
131
+ <li class="method"><a href="TestCreatePlayersFromGamedayXMLGame.html#method-i-setup">#setup &mdash; TestCreatePlayersFromGamedayXMLGame</a>
132
+
133
+ <li class="method"><a href="GreenmonsterSpiderTest.html#method-i-setup">#setup &mdash; GreenmonsterSpiderTest</a>
134
+
135
+ <li class="method"><a href="GreenmonsterTraversalTest.html#method-i-setup">#setup &mdash; GreenmonsterTraversalTest</a>
136
+
71
137
  <li class="method"><a href="GreenmonsterSpiderTest.html#method-i-teardown">#teardown &mdash; GreenmonsterSpiderTest</a>
72
138
 
73
139
  <li class="method"><a href="GreenmonsterTest.html#method-i-teardown">#teardown &mdash; GreenmonsterTest</a>
74
140
 
141
+ <li class="method"><a href="TestParsePlayersFromGamedayXMLFiles.html#method-i-teardown">#teardown &mdash; TestParsePlayersFromGamedayXMLFiles</a>
142
+
143
+ <li class="method"><a href="GreenmonsterTraversalTest.html#method-i-teardown">#teardown &mdash; GreenmonsterTraversalTest</a>
144
+
145
+ <li class="method"><a href="TestCreatePlayersFromGamedayXMLGame.html#method-i-teardown">#teardown &mdash; TestCreatePlayersFromGamedayXMLGame</a>
146
+
75
147
  <li class="method"><a href="GreenmonsterSpiderTest.html#method-i-test_copy_gameday_xml">#test_copy_gameday_xml &mdash; GreenmonsterSpiderTest</a>
76
148
 
149
+ <li class="method"><a href="TestCreatePlayersFromGamedayXMLGame.html#method-i-test_create_players_from_gameday_xml_game">#test_create_players_from_gameday_xml_game &mdash; TestCreatePlayersFromGamedayXMLGame</a>
150
+
77
151
  <li class="method"><a href="GreenmonsterSpiderTest.html#method-i-test_format_date_as_folder">#test_format_date_as_folder &mdash; GreenmonsterSpiderTest</a>
78
152
 
79
153
  <li class="method"><a href="GreenmonsterSpiderTest.html#method-i-test_local_file_not_created_if_remote_file_does_not_exist">#test_local_file_not_created_if_remote_file_does_not_exist &mdash; GreenmonsterSpiderTest</a>
80
154
 
81
155
  <li class="method"><a href="GreenmonsterSpiderTest.html#method-i-test_no_exception_raised_if_game_data_not_available">#test_no_exception_raised_if_game_data_not_available &mdash; GreenmonsterSpiderTest</a>
82
156
 
157
+ <li class="method"><a href="TestParsePlayersFromGamedayXMLFiles.html#method-i-test_parse_players_from_game">#test_parse_players_from_game &mdash; TestParsePlayersFromGamedayXMLFiles</a>
158
+
159
+ <li class="method"><a href="TestParsePlayersFromGamedayXMLFiles.html#method-i-test_player_ids_stored_as_integers">#test_player_ids_stored_as_integers &mdash; TestParsePlayersFromGamedayXMLFiles</a>
160
+
83
161
  <li class="method"><a href="GreenmonsterSpiderTest.html#method-i-test_pull_all_sport_codes_for_day">#test_pull_all_sport_codes_for_day &mdash; GreenmonsterSpiderTest</a>
84
162
 
85
163
  <li class="method"><a href="GreenmonsterSpiderTest.html#method-i-test_pull_day">#test_pull_day &mdash; GreenmonsterSpiderTest</a>
@@ -96,6 +174,20 @@
96
174
 
97
175
  <li class="method"><a href="GreenmonsterTest.html#method-i-test_set_games_folder_location">#test_set_games_folder_location &mdash; GreenmonsterTest</a>
98
176
 
177
+ <li class="method"><a href="GreenmonsterSpiderTest.html#method-i-test_sport_code_argument_as_array">#test_sport_code_argument_as_array &mdash; GreenmonsterSpiderTest</a>
178
+
179
+ <li class="method"><a href="GreenmonsterPlayerTest.html#method-i-test_to_s">#test_to_s &mdash; GreenmonsterPlayerTest</a>
180
+
181
+ <li class="method"><a href="GreenmonsterTraversalTest.html#method-i-test_traverse_dates_across_range">#test_traverse_dates_across_range &mdash; GreenmonsterTraversalTest</a>
182
+
183
+ <li class="method"><a href="GreenmonsterTraversalTest.html#method-i-test_traverse_dates_with_no_range">#test_traverse_dates_with_no_range &mdash; GreenmonsterTraversalTest</a>
184
+
185
+ <li class="method"><a href="GreenmonsterTraversalTest.html#method-i-test_traverse_folders_for_date">#test_traverse_folders_for_date &mdash; GreenmonsterTraversalTest</a>
186
+
187
+ <li class="method"><a href="GreenmonsterTraversalTest.html#method-i-test_traverse_folders_for_non_mlb_sport_code">#test_traverse_folders_for_non_mlb_sport_code &mdash; GreenmonsterTraversalTest</a>
188
+
189
+ <li class="method"><a href="Greenmonster/Player.html#method-i-to_s">#to_s &mdash; Greenmonster::Player</a>
190
+
99
191
  </ul>
100
192
 
101
193
 
data/greenmonster.gemspec CHANGED
@@ -11,8 +11,6 @@ Gem::Specification.new do |s|
11
11
  s.summary = %q{A utility for working with MLB Gameday XML data.}
12
12
  s.description = %q{A utility for working with MLB Gameday XML data.}
13
13
 
14
- s.rubyforge_project = "greenmonster"
15
-
16
14
  s.files = `git ls-files`.split("\n")
17
15
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
16
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
@@ -20,4 +18,8 @@ Gem::Specification.new do |s|
20
18
 
21
19
  s.add_dependency "nokogiri"
22
20
  s.add_dependency "httparty"
21
+ s.add_dependency "activerecord"
22
+ s.add_development_dependency "minitest", "~> 2.12"
23
+ s.add_development_dependency "supermodel"
24
+ s.add_development_dependency "sqlite3-ruby"
23
25
  end
@@ -0,0 +1,20 @@
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
@@ -0,0 +1,20 @@
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
@@ -0,0 +1,54 @@
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
@@ -0,0 +1,37 @@
1
+ class InstallGreenmonsterPlayers < ActiveRecord::Migration
2
+ def self.up
3
+ create_table "players", :force => true do |t|
4
+ t.string "first"
5
+ t.string "last"
6
+ t.integer "bis_id"
7
+ t.string "retrosheet_id"
8
+ t.integer "baseball_db_id"
9
+ t.string "baseball_prospectus_id"
10
+ t.string "baseball_reference_id"
11
+ t.string "lahman_id"
12
+ t.integer "westbay_id"
13
+ t.integer "korea_kbo_id"
14
+ t.integer "japan_npb_id"
15
+ t.string "uuid", :limit => 150
16
+ t.boolean "current"
17
+ t.boolean "duplicate"
18
+ t.datetime "created_at"
19
+ t.datetime "updated_at"
20
+ end
21
+
22
+ add_index "players", ["baseball_db_id"], :name => "players-baseball_db_id"
23
+ add_index "players", ["baseball_prospectus_id"], :name => "players-baseball_prospectus_id"
24
+ add_index "players", ["baseball_reference_id"], :name => "players-baseball_reference_id"
25
+ add_index "players", ["bis_id"], :name => "players-bis_id"
26
+ add_index "players", ["japan_npb_id"], :name => "players-japan_npb_id"
27
+ add_index "players", ["korea_kbo_id"], :name => "players-korea_kbo_id"
28
+ add_index "players", ["lahman_id"], :name => "players-lahman_id"
29
+ add_index "players", ["retrosheet_id"], :name => "players-retrosheet_id"
30
+ add_index "players", ["uuid"], :name => "players-uuid"
31
+ add_index "players", ["westbay_id"], :name => "players-westbay_id"
32
+ end
33
+
34
+ def self.down
35
+ drop_table :players
36
+ end
37
+ end
@@ -0,0 +1,106 @@
1
+ module Greenmonster
2
+ module MlbGame
3
+ def to_s
4
+ "Game #{self.game_pk}: #{self.game_id[15,6]} @ #{self.game_id[22,6]}"
5
+ rescue
6
+ "Game #{self.game_pk}: (Game ID not valid.)"
7
+ end
8
+
9
+ def update_with_line_score_data(line_score)
10
+ # Set Game Primary Key
11
+ self.game_pk = line_score.attributes['game_pk'].value.to_i
12
+ self.game_id = if line_score.has_attribute?('gameday_link')
13
+ line_score.attribute('gameday_link').value.gsub('_','')
14
+ elsif line_score.has_attribute?('id')
15
+ line_score.attribute('id').value.gsub('/','').gsub('-','')
16
+ else
17
+ raise "Unknown game_id, need new method for game."
18
+ end
19
+
20
+ self.game_num = self.game_id[20].to_i
21
+
22
+ # Set date
23
+ self.date = case
24
+ when line_score.attributes['id']
25
+ Date.new(
26
+ line_score.attributes['id'].value[0,4].to_i,
27
+ line_score.attributes['id'].value[5,2].to_i,
28
+ line_score.attributes['id'].value[8,2].to_i
29
+ )
30
+ when line_score.attributes['gameday_link']
31
+ Date.new(
32
+ line_score.attributes['gameday_link'].value[0,4].to_i,
33
+ line_score.attributes['gameday_link'].value[5,2].to_i,
34
+ line_score.attributes['gameday_link'].value[8,2].to_i
35
+ )
36
+ else
37
+ Date.new(0000,00,00)
38
+ end
39
+
40
+ # Set start time
41
+ if line_score.attributes['time'] and line_score.attributes['time'].value.include?(':')
42
+ self.game_time = Time.parse("#{self.date} #{line_score.attributes['time'].value} #{line_score.attributes['ampm']}")
43
+ else
44
+ self.game_time = Time.new(self.date.year,self.date.month,self.date.day,19,30)
45
+ end
46
+
47
+ # Set game status and type
48
+ self.game_status = line_score.attributes['ind'].value if line_score.attributes['ind']
49
+ self.game_type = line_score.attributes['game_type'].value if line_score.attributes['game_type']
50
+
51
+ # Set venue information
52
+ if line_score and line_score.attributes["venue"] and line_score.attributes["venue"].value and line_score.attributes['venue_id']
53
+ self.venue_id = line_score.attributes['venue_id'].value.to_i
54
+ self.game_venue = line_score.attributes['venue'].value
55
+ end
56
+
57
+ # Set leagues
58
+ self.home_league_id = line_score.attributes["home_league_id"].value.to_i if line_score.attributes["home_league_id"]
59
+ self.away_league_id = line_score.attributes["away_league_id"].value.to_i if line_score.attributes["away_league_id"]
60
+
61
+ # Set divisions
62
+ self.home_division = line_score.attributes["home_division"].value if line_score.attributes["home_division"]
63
+ self.away_division = line_score.attributes["away_division"].value if line_score.attributes["away_division"]
64
+
65
+ # Set sport codes
66
+ self.home_sport_code = line_score.attributes["home_sport_code"].value if line_score.attributes["home_sport_code"]
67
+ self.away_sport_code = line_score.attributes["away_sport_code"].value if line_score.attributes["away_sport_code"]
68
+ self.sport_code = self.home_sport_code
69
+
70
+ # Set teams
71
+ self.home_team_id = line_score.attributes["home_team_id"].value.to_i if line_score.attributes["home_team_id"]
72
+ self.away_team_id = line_score.attributes["away_team_id"].value.to_i if line_score.attributes["away_team_id"]
73
+
74
+ possible_duplicate = self.class.where(:id => self.game_pk, :game_status => ["F","FR"]).where("date <= '#{self.date}'").first
75
+
76
+ raise "Gotcha" if possible_duplicate
77
+
78
+ begin
79
+ puts "PD: #{possible_duplicate}"
80
+ puts "PD_id: #{self.game_id}"
81
+ rescue
82
+ puts "rescued"
83
+ end
84
+
85
+ return false if possible_duplicate and possible_duplicate.game_id != self.game_id
86
+
87
+ return self.save
88
+ end
89
+
90
+
91
+ def self.included(k)
92
+ def k.create_from_gameday_xml_game(gid, args = {})
93
+ line_score = Greenmonster::Parser.load_line_score(gid, args)
94
+
95
+ if line_score
96
+ game = self.find_or_initialize_by_id(line_score.attributes["game_pk"].value.to_i)
97
+
98
+ game.save!
99
+ return game
100
+ else
101
+ return false
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,11 @@
1
+ module Greenmonster
2
+ module MlbProbablePitcher
3
+
4
+ def self.included(k)
5
+ def k.create_from_gameday_xml(node)
6
+
7
+
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,16 @@
1
+ module Greenmonster
2
+ module Player
3
+ def to_s
4
+ "#{self.first} #{self.last}"
5
+ end
6
+
7
+ def self.included(k)
8
+ def k.create_from_gameday_xml_game(gid, args = {})
9
+ Greenmonster::Parser.extract_players_from_game(gid, args = {}) do |p|
10
+ player = self.find_or_initialize_by_id(p[:id])
11
+ player.update_attributes!(p) if player.new_record?
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,27 @@
1
+ module Greenmonster
2
+ module Parser
3
+ def self.load_line_score(gid, args = {})
4
+ Nokogiri::XML(File.open(game_path(gid, args) + 'linescore.xml')).search("game").first
5
+ rescue
6
+ false
7
+ end
8
+
9
+ def self.extract_players_from_game(gid, args = {})
10
+ Nokogiri::XML(open(game_path(gid,args) + 'players.xml')).search('player').each do |p|
11
+ hash = {:id => p.attribute('id').value.to_i, :first => p.attribute('first').value, :last => p.attribute('last').value}
12
+ yield hash
13
+ end
14
+ end
15
+
16
+ def self.game_path(gid,args)
17
+ game_path = Pathname.new(args[:games_folder] || Greenmonster.games_folder)
18
+ game_path += args[:sport_code] || gid[25,3]
19
+ game_path += Greenmonster.format_date_as_folder(date_from_game_id(gid))
20
+ game_path += gid
21
+ end
22
+
23
+ def self.date_from_game_id(gid)
24
+ Date.new(gid[4,4].to_i, gid[9,2].to_i, gid[12,2].to_i)
25
+ end
26
+ end
27
+ end
@@ -1,5 +1,5 @@
1
1
  # The Gameday XML Spider utility
2
- class Greenmonster::Spider
2
+ module Greenmonster::Spider
3
3
  include HTTParty
4
4
 
5
5
  ##
@@ -38,8 +38,9 @@ class Greenmonster::Spider
38
38
  copy_gameday_xml('linescore.xml',paths)
39
39
 
40
40
  if args[:date].year > 2007
41
- copy_gameday_xml('inning_all.xml',paths)
42
- copy_gameday_xml('inning_hit.xml',paths)
41
+ ['inning_all.xml', 'inning_hit.xml'].each do |file|
42
+ copy_gameday_xml(file,paths)
43
+ end
43
44
  else
44
45
  # Iterate through the inning files, but skip inning
45
46
  # files numbered 0 (some bad spring training data).
@@ -150,7 +151,7 @@ class Greenmonster::Spider
150
151
  # paths: (Hash)
151
152
 
152
153
  def self.copy_gameday_xml (file_name,paths)
153
- download = self.get(paths[:mlbGameFolder] + "#{file_name =~ /inning/ ? 'inning/' : ''}" + file_name).body
154
+ download = self.get(paths[:mlbGameFolder] + "#{file_name =~ /inning/ ? 'inning/' : ''}" + file_name).body.force_encoding("ISO-8859-1").encode("UTF-8")
154
155
  unless download.include?('404 Not Found')
155
156
  open(paths[:localGameFolder] + (file_name =~ /inning/ ? 'inning/' : '') + file_name, 'w') do |file|
156
157
  file.write(download)
@@ -169,6 +170,6 @@ class Greenmonster::Spider
169
170
  # date: (Date)
170
171
 
171
172
  def self.format_date_as_folder(date)
172
- date.strftime("year_%Y/month_%m/day_%d")
173
+ Greenmonster.format_date_as_folder(date)
173
174
  end
174
- end
175
+ end
@@ -1,3 +1,3 @@
1
1
  module Greenmonster
2
- VERSION = "0.3.1"
2
+ VERSION = "0.3.2"
3
3
  end
data/lib/greenmonster.rb CHANGED
@@ -5,6 +5,8 @@ require 'httparty'
5
5
  require 'nokogiri'
6
6
  require 'pathname'
7
7
  require 'fileutils'
8
+ require 'active_record'
9
+ require 'date'
8
10
 
9
11
  module Greenmonster
10
12
  @@games_folder = nil
@@ -36,6 +38,50 @@ module Greenmonster
36
38
  def self.games_folder
37
39
  @@games_folder
38
40
  end
41
+
42
+ def self.format_date_as_folder(date)
43
+ date.strftime("year_%Y/month_%m/day_%d")
44
+ end
45
+
46
+ ##
47
+ # Walk the dates in a range of dates, and execute whatever
48
+ # methods on the date and argument set specified. Used when
49
+ # processing games and players.
50
+ #
51
+ #
52
+
53
+ def self.traverse_dates(range = (Date.today..Date.today), args = {})
54
+ range.each do |day|
55
+ yield day,args
56
+ end
57
+ end
58
+
59
+ ##
60
+ # Walk the game folders in a range of dates, and execute whatever
61
+ # methods on the game folder and argument set specified. Used when
62
+ # processing games and players.
63
+ #
64
+ #
65
+
66
+ def self.traverse_folders_for_date(day,args = {})
67
+ begin
68
+ folders = Dir.entries(Pathname.new(args[:games_folder] || @@games_folder) + (args[:sport_code] || 'mlb') + self.format_date_as_folder(day))
69
+ rescue StandardError => boom
70
+ puts "No files for #{day.to_s}."
71
+ end
72
+
73
+ unless folders.nil?
74
+ folders.sort.each do |gdir|
75
+ if gdir[0,3] == 'gid' and gdir[-4,4] != "_bak"
76
+ yield gdir, args
77
+ end
78
+ end
79
+ end
80
+ end
39
81
  end
40
82
 
41
83
  require 'greenmonster/spider'
84
+ require 'greenmonster/model_extensions/player'
85
+ require 'greenmonster/model_extensions/mlb_game'
86
+ require 'greenmonster/model_extensions/mlb_probable_pitcher'
87
+ require 'greenmonster/parser'