greenmonster 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/CHANGELOG.markdown +6 -0
- data/README.markdown +37 -2
- data/doc/Athlete.html +254 -0
- data/doc/Gemfile.html +20 -0
- data/doc/Greenmonster/Generators/InstallGenerator.html +253 -0
- data/doc/Greenmonster/Generators.html +147 -0
- data/doc/Greenmonster/Parser.html +263 -0
- data/doc/Greenmonster/Player.html +236 -0
- data/doc/Greenmonster/Spider.html +169 -21
- data/doc/Greenmonster.html +139 -2
- data/doc/GreenmonsterPlayerTest.html +199 -0
- data/doc/GreenmonsterSpiderTest.html +57 -4
- data/doc/GreenmonsterTest.html +20 -0
- data/doc/GreenmonsterTraversalTest.html +376 -0
- data/doc/InstallGreenmonster.html +260 -0
- data/doc/Rakefile.html +20 -0
- data/doc/TestCreatePlayersFromGamedayXMLGame.html +266 -0
- data/doc/TestParsePlayersFromGamedayXMLFiles.html +307 -0
- data/doc/created.rid +18 -9
- data/doc/index.html +20 -0
- data/doc/js/search_index.js +1 -1
- data/doc/table_of_contents.html +93 -1
- data/greenmonster.gemspec +4 -2
- data/lib/generators/greenmonster/install_mlb_games_generator.rb +20 -0
- data/lib/generators/greenmonster/install_players_generator.rb +20 -0
- data/lib/generators/templates/install_greenmonster_mlb_games_migration.rb +54 -0
- data/lib/generators/templates/install_greenmonster_players_migration.rb +37 -0
- data/lib/greenmonster/model_extensions/mlb_game.rb +106 -0
- data/lib/greenmonster/model_extensions/mlb_probable_pitcher.rb +11 -0
- data/lib/greenmonster/model_extensions/player.rb +16 -0
- data/lib/greenmonster/parser.rb +27 -0
- data/lib/greenmonster/spider.rb +7 -6
- data/lib/greenmonster/version.rb +1 -1
- data/lib/greenmonster.rb +46 -0
- data/test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/boxscore.xml +5 -0
- data/test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/eventLog.xml +1 -0
- data/test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/inning/inning_all.xml +1 -0
- data/test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/inning/inning_hit.xml +1 -0
- data/test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/linescore.xml +117 -0
- data/test/games/mlb/year_2011/month_07/day_04/gid_2011_07_04_tormlb_bosmlb_1/players.xml +56 -0
- data/test/games/mlb/year_2012/month_03/day_27/gid_2012_03_27_aaamlb_aabmlb_1/blank.txt +0 -0
- data/test/games/tst/year_2012/month_03/day_27/gid_2012_03_27_aaamlb_aabmlb_1/blank.txt +0 -0
- data/test/test_create_mlb_game_from_gameday_xml_game.rb +12 -0
- data/test/test_create_players_from_gameday_xml_game.rb +8 -0
- data/test/test_greenmonster.rb +3 -6
- data/test/test_greenmonster_player.rb +7 -0
- data/test/test_greenmonster_spider.rb +24 -18
- data/test/test_greenmonster_traversal.rb +31 -0
- data/test/test_helper.rb +78 -0
- data/test/test_line_score.rb +12 -0
- data/test/test_parse_mlb_probable_pitchers_from_linescore_data.rb +14 -0
- data/test/test_parse_players_from_gameday_xml_files.rb +21 -0
- data/test/test_update_mlb_game_with_linescore_data.rb +23 -0
- metadata +103 -7
data/doc/js/search_index.js
CHANGED
@@ -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>>> Greenmonster.set_games_folder("/Users/geoff/game_data") ...</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\">></span> <span class=\"ruby-constant\">Greenmonster</span>.<span class=\"ruby-identifier\">set_games_folder</span>(<span class=\"ruby-string\">"/Users/geoff/game_data"</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 << '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>>> Greenmonster.set_games_folder("/Users/geoff/game_data") ...</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\">></span> <span class=\"ruby-constant\">Greenmonster</span>.<span class=\"ruby-identifier\">set_games_folder</span>(<span class=\"ruby-string\">"/Users/geoff/game_data"</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 << 'test'</pre>\n"]]}}
|
data/doc/table_of_contents.html
CHANGED
@@ -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 — Greenmonster::Spider</a>
|
88
|
+
|
89
|
+
<li class="method"><a href="Greenmonster/Parser.html#method-c-date_from_game_id">::date_from_game_id — Greenmonster::Parser</a>
|
90
|
+
|
91
|
+
<li class="method"><a href="InstallGreenmonster.html#method-c-down">::down — InstallGreenmonster</a>
|
92
|
+
|
93
|
+
<li class="method"><a href="Greenmonster/Parser.html#method-c-extract_players_from_game">::extract_players_from_game — Greenmonster::Parser</a>
|
94
|
+
|
95
|
+
<li class="method"><a href="Athlete.html#method-c-find_or_initialize_by_id">::find_or_initialize_by_id — Athlete</a>
|
96
|
+
|
97
|
+
<li class="method"><a href="Greenmonster/Spider.html#method-c-format_date_as_folder">::format_date_as_folder — Greenmonster::Spider</a>
|
98
|
+
|
99
|
+
<li class="method"><a href="Greenmonster.html#method-c-format_date_as_folder">::format_date_as_folder — Greenmonster</a>
|
100
|
+
|
101
|
+
<li class="method"><a href="Greenmonster/Parser.html#method-c-game_path">::game_path — Greenmonster::Parser</a>
|
102
|
+
|
57
103
|
<li class="method"><a href="Greenmonster.html#method-c-games_folder">::games_folder — Greenmonster</a>
|
58
104
|
|
105
|
+
<li class="method"><a href="Greenmonster/Player.html#method-c-included">::included — Greenmonster::Player</a>
|
106
|
+
|
107
|
+
<li class="method"><a href="Greenmonster/Generators/InstallGenerator.html#method-c-next_migration_number">::next_migration_number — Greenmonster::Generators::InstallGenerator</a>
|
108
|
+
|
109
|
+
<li class="method"><a href="Greenmonster/Spider.html#method-c-pull">::pull — Greenmonster::Spider</a>
|
110
|
+
|
59
111
|
<li class="method"><a href="Greenmonster/Spider.html#method-c-pull_day">::pull_day — Greenmonster::Spider</a>
|
60
112
|
|
61
113
|
<li class="method"><a href="Greenmonster/Spider.html#method-c-pull_days">::pull_days — 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 — Greenmonster</a>
|
66
118
|
|
67
|
-
<li class="method"><a href="
|
119
|
+
<li class="method"><a href="Greenmonster.html#method-c-traverse_dates">::traverse_dates — Greenmonster</a>
|
120
|
+
|
121
|
+
<li class="method"><a href="Greenmonster.html#method-c-traverse_folders_for_date">::traverse_folders_for_date — Greenmonster</a>
|
122
|
+
|
123
|
+
<li class="method"><a href="InstallGreenmonster.html#method-c-up">::up — InstallGreenmonster</a>
|
124
|
+
|
125
|
+
<li class="method"><a href="Greenmonster/Generators/InstallGenerator.html#method-i-create_migration_file">#create_migration_file — Greenmonster::Generators::InstallGenerator</a>
|
126
|
+
|
127
|
+
<li class="method"><a href="TestParsePlayersFromGamedayXMLFiles.html#method-i-setup">#setup — TestParsePlayersFromGamedayXMLFiles</a>
|
68
128
|
|
69
129
|
<li class="method"><a href="GreenmonsterTest.html#method-i-setup">#setup — GreenmonsterTest</a>
|
70
130
|
|
131
|
+
<li class="method"><a href="TestCreatePlayersFromGamedayXMLGame.html#method-i-setup">#setup — TestCreatePlayersFromGamedayXMLGame</a>
|
132
|
+
|
133
|
+
<li class="method"><a href="GreenmonsterSpiderTest.html#method-i-setup">#setup — GreenmonsterSpiderTest</a>
|
134
|
+
|
135
|
+
<li class="method"><a href="GreenmonsterTraversalTest.html#method-i-setup">#setup — GreenmonsterTraversalTest</a>
|
136
|
+
|
71
137
|
<li class="method"><a href="GreenmonsterSpiderTest.html#method-i-teardown">#teardown — GreenmonsterSpiderTest</a>
|
72
138
|
|
73
139
|
<li class="method"><a href="GreenmonsterTest.html#method-i-teardown">#teardown — GreenmonsterTest</a>
|
74
140
|
|
141
|
+
<li class="method"><a href="TestParsePlayersFromGamedayXMLFiles.html#method-i-teardown">#teardown — TestParsePlayersFromGamedayXMLFiles</a>
|
142
|
+
|
143
|
+
<li class="method"><a href="GreenmonsterTraversalTest.html#method-i-teardown">#teardown — GreenmonsterTraversalTest</a>
|
144
|
+
|
145
|
+
<li class="method"><a href="TestCreatePlayersFromGamedayXMLGame.html#method-i-teardown">#teardown — TestCreatePlayersFromGamedayXMLGame</a>
|
146
|
+
|
75
147
|
<li class="method"><a href="GreenmonsterSpiderTest.html#method-i-test_copy_gameday_xml">#test_copy_gameday_xml — 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 — TestCreatePlayersFromGamedayXMLGame</a>
|
150
|
+
|
77
151
|
<li class="method"><a href="GreenmonsterSpiderTest.html#method-i-test_format_date_as_folder">#test_format_date_as_folder — 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 — 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 — GreenmonsterSpiderTest</a>
|
82
156
|
|
157
|
+
<li class="method"><a href="TestParsePlayersFromGamedayXMLFiles.html#method-i-test_parse_players_from_game">#test_parse_players_from_game — 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 — 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 — GreenmonsterSpiderTest</a>
|
84
162
|
|
85
163
|
<li class="method"><a href="GreenmonsterSpiderTest.html#method-i-test_pull_day">#test_pull_day — 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 — 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 — GreenmonsterSpiderTest</a>
|
178
|
+
|
179
|
+
<li class="method"><a href="GreenmonsterPlayerTest.html#method-i-test_to_s">#test_to_s — GreenmonsterPlayerTest</a>
|
180
|
+
|
181
|
+
<li class="method"><a href="GreenmonsterTraversalTest.html#method-i-test_traverse_dates_across_range">#test_traverse_dates_across_range — 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 — GreenmonsterTraversalTest</a>
|
184
|
+
|
185
|
+
<li class="method"><a href="GreenmonsterTraversalTest.html#method-i-test_traverse_folders_for_date">#test_traverse_folders_for_date — 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 — GreenmonsterTraversalTest</a>
|
188
|
+
|
189
|
+
<li class="method"><a href="Greenmonster/Player.html#method-i-to_s">#to_s — 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,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
|
data/lib/greenmonster/spider.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# The Gameday XML Spider utility
|
2
|
-
|
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
|
-
|
42
|
-
|
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
|
-
|
173
|
+
Greenmonster.format_date_as_folder(date)
|
173
174
|
end
|
174
|
-
end
|
175
|
+
end
|
data/lib/greenmonster/version.rb
CHANGED
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'
|