sports_db 0.0.1 → 0.0.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.
@@ -0,0 +1,33 @@
1
+ require 'digest/md5'
2
+
3
+ class Article < ActiveRecord::Base
4
+ belongs_to :player
5
+ belongs_to :game
6
+ has_and_belongs_to_many :news_filters, :join_table => "articles_news_filters"
7
+
8
+ def self.find_by_category(category)
9
+ Article.find(:all, :conditions => ['category = ?', category], :order => 'published_at DESC')
10
+ end
11
+
12
+ def set_digest
13
+ str = (self["published_at"].nil?) ? self["title"] : (self["title"] + self["published_at"].to_s)
14
+ self["digest"] = Digest::SHA1.hexdigest(str)
15
+ end
16
+
17
+ def is_article?
18
+ true
19
+ end
20
+
21
+ def is_video?
22
+ false
23
+ end
24
+
25
+ def is_twitter?
26
+ false
27
+ end
28
+
29
+ def sn_url
30
+ self["link"]
31
+ end
32
+ end
33
+
@@ -0,0 +1,11 @@
1
+ class Conference < ActiveRecord::Base
2
+ has_many :teams
3
+
4
+ def self.div_1a
5
+ self.find(:all, :conditions => { :league => "NCAA Men's Football Division 1A" }, :order => "name")
6
+ end
7
+
8
+ def self.div_1aa
9
+ self.find(:all, :conditions => { :league => "NCAA Men's Football Division 1AA" }, :order => "name")
10
+ end
11
+ end
@@ -0,0 +1,4 @@
1
+ class ExternalFeed < ActiveRecord::Base
2
+ belongs_to :team
3
+ end
4
+
@@ -0,0 +1,4 @@
1
+ class GameStartingPlayer < ActiveRecord::Base
2
+ belongs_to :game
3
+
4
+ end
@@ -0,0 +1,2 @@
1
+ class GameStat < ActiveRecord::Base
2
+ end
@@ -0,0 +1,3 @@
1
+ class InjuryReport < ActiveRecord::Base
2
+ belongs_to :player
3
+ end
@@ -0,0 +1,3 @@
1
+ class Leaderboard < ActiveRecord::Base
2
+ belongs_to :player
3
+ end
@@ -0,0 +1,7 @@
1
+ class NewsFilter < ActiveRecord::Base
2
+
3
+ # Having additional attributes on the join table of a has_and_belongs_to_many association is deprecated and will be removed in Rails 3.1. Please use a has_many :through association instead
4
+ has_and_belongs_to_many :articles, :join_table => "articles_news_filters", :order => 'published_at DESC'
5
+
6
+ end
7
+
@@ -0,0 +1,4 @@
1
+ class Notification < ActiveRecord::Base
2
+
3
+
4
+ end
@@ -0,0 +1,7 @@
1
+ class Participant < ActiveRecord::Base
2
+ belongs_to :game
3
+ belongs_to :team
4
+
5
+ scope :home, :conditions => ['home_team = ?', true]
6
+
7
+ end
@@ -0,0 +1,3 @@
1
+ class Period < ActiveRecord::Base
2
+ belongs_to :game
3
+ end
@@ -0,0 +1,6 @@
1
+ # The migration for a play in the plugin creates a useless play. Subclass play and create a migration
2
+ # appropriate to your sub-type, and use single-table inheritance to fill out the play.
3
+ class Play < ActiveRecord::Base
4
+ belongs_to :game
5
+ belongs_to :team
6
+ end
@@ -0,0 +1,26 @@
1
+ class Player < ActiveRecord::Base
2
+ has_one :article
3
+ has_many :player_stats
4
+ belongs_to :team
5
+ has_one :injury_report
6
+
7
+ def self.find_by_last_comma_first(full_name)
8
+ tokens = full_name.split(',')
9
+ Player.all(:conditions => ['last_name = ? and first_name = ?', tokens[0].strip, tokens[1].strip])
10
+ end
11
+
12
+ def year_abbreviation()
13
+ if self.eligibility.nil?
14
+ ""
15
+ elsif self.eligibility == "Freshman"
16
+ "Fr"
17
+ elsif self.eligibility == "Sophomore"
18
+ "So"
19
+ elsif self.eligibility == "Junior"
20
+ "Jr"
21
+ elsif self.eligibility == "Senior"
22
+ "Sr"
23
+ end
24
+ end
25
+
26
+ end
@@ -0,0 +1,4 @@
1
+ class PlayerStat < ActiveRecord::Base
2
+ belongs_to :player
3
+ belongs_to :game
4
+ end
@@ -0,0 +1,3 @@
1
+ class PollRanking < ActiveRecord::Base
2
+ belongs_to :team
3
+ end
@@ -0,0 +1,2 @@
1
+ class Score < ActiveRecord::Base
2
+ end
@@ -0,0 +1,60 @@
1
+ module SportsDb
2
+ class ExternalFeedBuilder
3
+
4
+ def self.update_external_feeds
5
+ Rails.logger.info('updating team external feeds')
6
+
7
+ count = 0
8
+
9
+ open( SimpleConfig.for(:feeds).team_feeds_xml ) do |file|
10
+ doc = Nokogiri::XML(file.read)
11
+ doc.xpath('//team').each do |team_node|
12
+ team_obj = Team.find_by_key(team_node.xpath("key").first.text)
13
+
14
+ if !team_obj.blank?
15
+ external_twitter_url = team_node.xpath("sn_twitter_feed").first.text
16
+ woven_twitter_url = team_node.xpath("woven_twitter_feed").first.text
17
+ store_feed(external_twitter_url, woven_twitter_url, "twitter", "Sporting News", team_obj.id)
18
+
19
+ external_news_url = team_node.xpath("sn_news_feed").first.text
20
+ woven_news_url = team_node.xpath("woven_news_feed").first.text
21
+ store_feed(external_news_url, woven_news_url, "news", "Sporting News", team_obj.id)
22
+
23
+ count += 1
24
+ end
25
+ end
26
+ p "Processed #{count} teams"
27
+ end
28
+
29
+ rescue Exception => e
30
+ Zumobi::ExceptionHandler.error e
31
+ end
32
+
33
+
34
+ def self.store_feed(external_url, woven_url, content_type, source, team_id)
35
+ if !external_url.blank? && !woven_url.blank?
36
+
37
+ feed = ExternalFeed.find(:first, :conditions => ["team_id = ? and content_type = ? and provider = ?", team_id, content_type, source])
38
+ if feed.blank?
39
+ ExternalFeed.create({
40
+ :team_id => team_id,
41
+ :feed_source_url => external_url,
42
+ :woven_feed_url => woven_url,
43
+ :provider => source,
44
+ :content_type => content_type
45
+ })
46
+ else
47
+ feed.update_attributes({
48
+ :team_id => team_id,
49
+ :feed_source_url => external_url,
50
+ :woven_feed_url => woven_url,
51
+ :provider => source,
52
+ :content_type => content_type
53
+ })
54
+ end
55
+ end
56
+ end
57
+
58
+
59
+ end
60
+ end
@@ -0,0 +1,84 @@
1
+ module SportsDb
2
+ class NewsFilterBuilder
3
+
4
+ def self.update_news_filters(league=nil)
5
+ p "updating news filters, league=#{league}"
6
+
7
+ add_static_filters
8
+
9
+ if league == 'mlb'
10
+ add_team_filters
11
+ add_mlb_league_filters
12
+ elsif league == 'nba'
13
+ add_team_filters
14
+ add_nba_league_filters
15
+ elsif league == 'nfl'
16
+ add_team_filters
17
+ add_nfl_league_filters
18
+ elsif league == 'ncaabb'
19
+ add_team_filters
20
+ add_ncaa_conferences_filters
21
+ elsif league == 'ncaafb'
22
+ add_fbs_only_team_filters
23
+ add_ncaa_conferences_filters
24
+ end
25
+ rescue Exception => e
26
+ Zumobi::ExceptionHandler.error e
27
+ end
28
+
29
+
30
+ def self.add_static_filters
31
+ update_create_news_filter('All', 'all')
32
+ update_create_news_filter(CONFIG.affiliation_name, CONFIG.affiliation_key)
33
+ end
34
+
35
+ def self.add_mlb_league_filters
36
+ update_create_news_filter('American League', 'American')
37
+ update_create_news_filter('National League', 'National')
38
+ update_create_news_filter('Fantasy', 'fantasy')
39
+ end
40
+
41
+ def self.add_nba_league_filters
42
+ update_create_news_filter('Eastern', 'Eastern')
43
+ update_create_news_filter('Western', 'Western')
44
+ end
45
+
46
+ def self.add_nfl_league_filters
47
+ update_create_news_filter('American', 'American')
48
+ update_create_news_filter('National', 'National')
49
+ end
50
+
51
+ def self.add_team_filters
52
+ teams = Team.find(:all)
53
+ teams.each do |team|
54
+ update_create_news_filter(team.city_name, team.key)
55
+ end
56
+ end
57
+
58
+ def self.add_fbs_only_team_filters
59
+ teams = Team.find(:all)
60
+ teams.each do |team|
61
+ if team.is_FBS?
62
+ update_create_news_filter(team.city_name, team.key)
63
+ end
64
+ end
65
+ end
66
+
67
+ def self.add_ncaa_conferences_filters
68
+ conferences = Conference.find(:all)
69
+ conferences.each do |conf|
70
+ update_create_news_filter(conf.abbreviation, conf.key)
71
+ end
72
+ end
73
+
74
+ def self.update_create_news_filter(filter_name, filter_key)
75
+ if NewsFilter.find(:first, :conditions => ['news_filter_key = ?', filter_key]).nil?
76
+ NewsFilter.create(
77
+ :name => filter_name,
78
+ :news_filter_key => filter_key
79
+ )
80
+ end
81
+ end
82
+
83
+ end
84
+ end
@@ -1,3 +1,3 @@
1
1
  module SportsDb
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/sports_db.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  require "sports_db/engine"
2
- require "sports_db/twitter_builder"
2
+ require "sports_db/external_feed_builder"
3
3
  require "sports_db/media_builder"
4
+ require "sports_db/news_filters_builder"
5
+ require "sports_db/twitter_builder"
4
6
 
5
7
  module SportsDb
6
8
 
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 1
9
- version: 0.0.1
8
+ - 2
9
+ version: 0.0.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Alx Dark
@@ -54,11 +54,29 @@ extra_rdoc_files: []
54
54
 
55
55
  files:
56
56
  - app/controllers/foo_controller.rb
57
+ - app/models/article.rb
58
+ - app/models/conference.rb
59
+ - app/models/external_feed.rb
60
+ - app/models/game_starting_player.rb
61
+ - app/models/game_stat.rb
62
+ - app/models/injury_report.rb
63
+ - app/models/leaderboard.rb
57
64
  - app/models/media.rb
65
+ - app/models/news_filter.rb
66
+ - app/models/notification.rb
67
+ - app/models/participant.rb
68
+ - app/models/period.rb
69
+ - app/models/play.rb
70
+ - app/models/player.rb
71
+ - app/models/player_stat.rb
72
+ - app/models/poll_ranking.rb
73
+ - app/models/score.rb
58
74
  - app/models/twitter.rb
59
75
  - config/routes.rb
60
76
  - lib/sports_db/engine.rb
77
+ - lib/sports_db/external_feed_builder.rb
61
78
  - lib/sports_db/media_builder.rb
79
+ - lib/sports_db/news_filters_builder.rb
62
80
  - lib/sports_db/twitter_builder.rb
63
81
  - lib/sports_db/version.rb
64
82
  - lib/sports_db.rb