sportdb-models 1.19.0 → 2.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +20 -20
  3. data/Manifest.txt +27 -38
  4. data/README.md +31 -31
  5. data/Rakefile +32 -32
  6. data/lib/sportdb/models.rb +212 -159
  7. data/lib/sportdb/{deleter.rb → models/deleter.rb} +3 -9
  8. data/lib/sportdb/models/formats.rb +23 -0
  9. data/lib/sportdb/models/models/assoc.rb +38 -0
  10. data/lib/sportdb/models/{badge.rb → models/badge.rb} +14 -14
  11. data/lib/sportdb/models/models/event.rb +55 -0
  12. data/lib/sportdb/models/{forward.rb → models/forward.rb} +55 -55
  13. data/lib/sportdb/models/{goal.rb → models/goal.rb} +15 -15
  14. data/lib/sportdb/models/models/ground.rb +16 -0
  15. data/lib/sportdb/models/{group.rb → models/group.rb} +10 -7
  16. data/lib/sportdb/models/models/league.rb +20 -0
  17. data/lib/sportdb/models/{roster.rb → models/lineup.rb} +17 -18
  18. data/lib/sportdb/models/{game.rb → models/match.rb} +18 -61
  19. data/lib/sportdb/models/{person.rb → models/person.rb} +21 -21
  20. data/lib/sportdb/models/{round.rb → models/round.rb} +1 -6
  21. data/lib/sportdb/models/{season.rb → models/season.rb} +15 -14
  22. data/lib/sportdb/models/{stage.rb → models/stage.rb} +9 -5
  23. data/lib/sportdb/models/{stats/alltime_standing_entry.rb → models/stats/alltime_standing.rb} +9 -1
  24. data/lib/sportdb/models/{stats/event_standing_entry.rb → models/stats/event_standing.rb} +31 -21
  25. data/lib/sportdb/models/{stats/group_standing_entry.rb → models/stats/group_standing.rb} +10 -1
  26. data/lib/sportdb/models/models/team.rb +56 -0
  27. data/lib/sportdb/models/{world → models/world}/city.rb +2 -2
  28. data/lib/sportdb/models/{world → models/world}/continent.rb +20 -20
  29. data/lib/sportdb/models/{world → models/world}/country.rb +0 -0
  30. data/lib/sportdb/models/{world → models/world}/state.rb +19 -19
  31. data/lib/sportdb/models/schema.rb +466 -0
  32. data/lib/sportdb/models/stats.rb +23 -0
  33. data/lib/sportdb/models/utils.rb +24 -24
  34. data/lib/sportdb/{version.rb → models/version.rb} +27 -22
  35. data/test/helper.rb +46 -42
  36. data/test/test_changes.rb +38 -38
  37. data/test/test_cursor.rb +15 -15
  38. data/test/test_winner.rb +75 -70
  39. metadata +39 -44
  40. data/lib/sportdb/calc.rb +0 -279
  41. data/lib/sportdb/models/assoc.rb +0 -106
  42. data/lib/sportdb/models/assoc_assoc.rb +0 -15
  43. data/lib/sportdb/models/event.rb +0 -66
  44. data/lib/sportdb/models/event_ground.rb +0 -15
  45. data/lib/sportdb/models/event_team.rb +0 -16
  46. data/lib/sportdb/models/ground.rb +0 -100
  47. data/lib/sportdb/models/group_team.rb +0 -14
  48. data/lib/sportdb/models/league.rb +0 -83
  49. data/lib/sportdb/models/stage_team.rb +0 -14
  50. data/lib/sportdb/models/stats/alltime_standing.rb +0 -44
  51. data/lib/sportdb/models/stats/event_standing.rb +0 -55
  52. data/lib/sportdb/models/stats/group_standing.rb +0 -50
  53. data/lib/sportdb/models/team.rb +0 -119
  54. data/lib/sportdb/models/team_compat.rb +0 -64
  55. data/lib/sportdb/patterns.rb +0 -37
  56. data/lib/sportdb/schema.rb +0 -397
  57. data/lib/sportdb/standings.rb +0 -178
  58. data/lib/sportdb/stats.rb +0 -27
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b1524cb3a76b16ce80f8b2d484b11f8ab11002f6
4
- data.tar.gz: 209a229871e299fab7ac5ca8b90765052fc7da5f
3
+ metadata.gz: a2dca58496a25d977a305dabb59fb4068f6a27d0
4
+ data.tar.gz: 454d482974847f5fee5d025e03449f9058c0b48f
5
5
  SHA512:
6
- metadata.gz: a9c48d1be59422f7fb7726e6121e909aceb9dc3a2306caea036ea19a5a64ebd5f4f7ff828009bf23810f48884d26b970b0f63718fa46ff37e7649e78b3b20f98
7
- data.tar.gz: 3e77eb48eafbf666afc8a92e5f6ea7d9403e157745b8abb508367292910dc3a355324cacc8a236b434cc7936d90876ff3bff95f177686378c33c0a025cf058fe
6
+ metadata.gz: 2588e9757f5277b9f2088cd4b2222cb2712372a25b8ab01cb8346ae908c6c2c8ea8e3a7b9dd3e93d2a69117d30158dfc92a1d914dcb638826d34ecbf90619ecb
7
+ data.tar.gz: 517e715c5c132c1ae5e9c5794ec91f556a5b2bc56efe3b9429df1f4f50cdecc0bd3fcf48a3bae7c41e3407eeb2198a744a2aec1004ac6968d34e61aa3b36470a
@@ -1,21 +1,21 @@
1
- ### 0.4.0 / 2012-10-16
2
-
3
- * Add plain text fixture reader/loader
4
- * Add --generate/g option for generating fixtures from the DB using templates
5
-
6
- ### 0.3.1 / 2012-10-14
7
-
8
- * Move models into its own namespace, that is, SportDB::Models
9
- * Add ActiveRecord logging for --verbose option
10
-
11
- ### 0.3.0 / 2012-10-07
12
-
13
- * Add --delete option to delete all records
14
-
15
- ### 0.2.0 / 2012-10-06
16
-
17
- * Add --load option for builtin fixtures
18
-
19
- ### 0.1.0 / 2012-10-06
20
-
1
+ ### 0.4.0 / 2012-10-16
2
+
3
+ * Add plain text fixture reader/loader
4
+ * Add --generate/g option for generating fixtures from the DB using templates
5
+
6
+ ### 0.3.1 / 2012-10-14
7
+
8
+ * Move models into its own namespace, that is, SportDB::Models
9
+ * Add ActiveRecord logging for --verbose option
10
+
11
+ ### 0.3.0 / 2012-10-07
12
+
13
+ * Add --delete option to delete all records
14
+
15
+ ### 0.2.0 / 2012-10-06
16
+
17
+ * Add --load option for builtin fixtures
18
+
19
+ ### 0.1.0 / 2012-10-06
20
+
21
21
  * Everything is new. First release
@@ -2,46 +2,35 @@ CHANGELOG.md
2
2
  Manifest.txt
3
3
  README.md
4
4
  Rakefile
5
- lib/sportdb/calc.rb
6
- lib/sportdb/deleter.rb
7
5
  lib/sportdb/models.rb
8
- lib/sportdb/models/assoc.rb
9
- lib/sportdb/models/assoc_assoc.rb
10
- lib/sportdb/models/badge.rb
11
- lib/sportdb/models/event.rb
12
- lib/sportdb/models/event_ground.rb
13
- lib/sportdb/models/event_team.rb
14
- lib/sportdb/models/forward.rb
15
- lib/sportdb/models/game.rb
16
- lib/sportdb/models/goal.rb
17
- lib/sportdb/models/ground.rb
18
- lib/sportdb/models/group.rb
19
- lib/sportdb/models/group_team.rb
20
- lib/sportdb/models/league.rb
21
- lib/sportdb/models/person.rb
22
- lib/sportdb/models/roster.rb
23
- lib/sportdb/models/round.rb
24
- lib/sportdb/models/season.rb
25
- lib/sportdb/models/stage.rb
26
- lib/sportdb/models/stage_team.rb
27
- lib/sportdb/models/stats/alltime_standing.rb
28
- lib/sportdb/models/stats/alltime_standing_entry.rb
29
- lib/sportdb/models/stats/event_standing.rb
30
- lib/sportdb/models/stats/event_standing_entry.rb
31
- lib/sportdb/models/stats/group_standing.rb
32
- lib/sportdb/models/stats/group_standing_entry.rb
33
- lib/sportdb/models/team.rb
34
- lib/sportdb/models/team_compat.rb
6
+ lib/sportdb/models/deleter.rb
7
+ lib/sportdb/models/formats.rb
8
+ lib/sportdb/models/models/assoc.rb
9
+ lib/sportdb/models/models/badge.rb
10
+ lib/sportdb/models/models/event.rb
11
+ lib/sportdb/models/models/forward.rb
12
+ lib/sportdb/models/models/goal.rb
13
+ lib/sportdb/models/models/ground.rb
14
+ lib/sportdb/models/models/group.rb
15
+ lib/sportdb/models/models/league.rb
16
+ lib/sportdb/models/models/lineup.rb
17
+ lib/sportdb/models/models/match.rb
18
+ lib/sportdb/models/models/person.rb
19
+ lib/sportdb/models/models/round.rb
20
+ lib/sportdb/models/models/season.rb
21
+ lib/sportdb/models/models/stage.rb
22
+ lib/sportdb/models/models/stats/alltime_standing.rb
23
+ lib/sportdb/models/models/stats/event_standing.rb
24
+ lib/sportdb/models/models/stats/group_standing.rb
25
+ lib/sportdb/models/models/team.rb
26
+ lib/sportdb/models/models/world/city.rb
27
+ lib/sportdb/models/models/world/continent.rb
28
+ lib/sportdb/models/models/world/country.rb
29
+ lib/sportdb/models/models/world/state.rb
30
+ lib/sportdb/models/schema.rb
31
+ lib/sportdb/models/stats.rb
35
32
  lib/sportdb/models/utils.rb
36
- lib/sportdb/models/world/city.rb
37
- lib/sportdb/models/world/continent.rb
38
- lib/sportdb/models/world/country.rb
39
- lib/sportdb/models/world/state.rb
40
- lib/sportdb/patterns.rb
41
- lib/sportdb/schema.rb
42
- lib/sportdb/standings.rb
43
- lib/sportdb/stats.rb
44
- lib/sportdb/version.rb
33
+ lib/sportdb/models/version.rb
45
34
  test/helper.rb
46
35
  test/test_changes.rb
47
36
  test/test_cursor.rb
data/README.md CHANGED
@@ -1,31 +1,31 @@
1
- # sportdb-models gem - sport.db schema 'n' models for easy (re)use
2
-
3
- <!--
4
- [![Build Status](https://secure.travis-ci.org/geraldb/sport.db.ruby.png?branch=master)](http://travis-ci.org/geraldb/sport.db.ruby)
5
- -->
6
-
7
- * home :: [github.com/sportdb/sport.db](https://github.com/sportdb/sport.db)
8
- * bugs :: [github.com/sportdb/sport.db/issues](https://github.com/sportdb/sport.db/issues)
9
- * gem :: [rubygems.org/gems/sportdb-models](https://rubygems.org/gems/sportdb-models)
10
- * rdoc :: [rubydoc.info/gems/sportdb-models](http://rubydoc.info/gems/sportdb-models)
11
- * forum :: [groups.google.com/group/opensport](https://groups.google.com/group/opensport)
12
-
13
-
14
- ## Usage Models
15
-
16
- ![](sportdb-models.png)
17
-
18
-
19
- ## License
20
-
21
- ![](https://publicdomainworks.github.io/buttons/zero88x31.png)
22
-
23
- The `sportdb-models` scripts are dedicated to the public domain.
24
- Use it as you please with no restrictions whatsoever.
25
-
26
-
27
- ## Questions? Comments?
28
-
29
- Send them along to the
30
- [Open Sports & Friends Forum/Mailing List](http://groups.google.com/group/opensport).
31
- Thanks!
1
+ # sportdb-models gem - sport.db schema 'n' models for easy (re)use
2
+
3
+ <!--
4
+ [![Build Status](https://secure.travis-ci.org/geraldb/sport.db.ruby.png?branch=master)](http://travis-ci.org/geraldb/sport.db.ruby)
5
+ -->
6
+
7
+ * home :: [github.com/sportdb/sport.db](https://github.com/sportdb/sport.db)
8
+ * bugs :: [github.com/sportdb/sport.db/issues](https://github.com/sportdb/sport.db/issues)
9
+ * gem :: [rubygems.org/gems/sportdb-models](https://rubygems.org/gems/sportdb-models)
10
+ * rdoc :: [rubydoc.info/gems/sportdb-models](http://rubydoc.info/gems/sportdb-models)
11
+ * forum :: [groups.google.com/group/opensport](https://groups.google.com/group/opensport)
12
+
13
+
14
+ ## Usage Models
15
+
16
+ ![](sportdb-models.png)
17
+
18
+
19
+ ## License
20
+
21
+ ![](https://publicdomainworks.github.io/buttons/zero88x31.png)
22
+
23
+ The `sportdb-models` scripts are dedicated to the public domain.
24
+ Use it as you please with no restrictions whatsoever.
25
+
26
+
27
+ ## Questions? Comments?
28
+
29
+ Send them along to the
30
+ [Open Sports & Friends Forum/Mailing List](http://groups.google.com/group/opensport).
31
+ Thanks!
data/Rakefile CHANGED
@@ -1,32 +1,32 @@
1
- require 'hoe'
2
- require './lib/sportdb/version.rb'
3
-
4
-
5
- Hoe.spec 'sportdb-models' do
6
-
7
- self.version = SportDb::VERSION
8
-
9
- self.summary = "sportdb-models - sport.db schema 'n' models for easy (re)use"
10
- self.description = summary
11
-
12
- self.urls = ['https://github.com/sportdb/sport.db']
13
-
14
- self.author = 'Gerald Bauer'
15
- self.email = 'opensport@googlegroups.com'
16
-
17
- # switch extension to .markdown for gihub formatting
18
- # -- NB: auto-changed when included in manifest
19
- self.readme_file = 'README.md'
20
- self.history_file = 'CHANGELOG.md'
21
-
22
- self.extra_deps = [
23
- ['worlddb-models', '>= 2.4.0'], # Note: pull in all (extra) dependencies va worlddb-models
24
- ['persondb-models', '>= 0.5.0'], # persons (people) table
25
- ]
26
-
27
- self.licenses = ['Public Domain']
28
-
29
- self.spec_extras = {
30
- required_ruby_version: '>= 2.2.2'
31
- }
32
- end
1
+ require 'hoe'
2
+ require './lib/sportdb/models/version.rb'
3
+
4
+
5
+ Hoe.spec 'sportdb-models' do
6
+
7
+ self.version = SportDb::Module::Models::VERSION
8
+
9
+ self.summary = "sportdb-models - sport.db schema 'n' models for easy (re)use"
10
+ self.description = summary
11
+
12
+ self.urls = { home: 'https://github.com/sportdb/sport.db' }
13
+
14
+ self.author = 'Gerald Bauer'
15
+ self.email = 'opensport@googlegroups.com'
16
+
17
+ # switch extension to .markdown for gihub formatting
18
+ # -- NB: auto-changed when included in manifest
19
+ self.readme_file = 'README.md'
20
+ self.history_file = 'CHANGELOG.md'
21
+
22
+ self.extra_deps = [
23
+ ['worlddb-models', '>= 2.4.0'], # Note: pull in all (extra) dependencies va worlddb-models
24
+ ['persondb-models', '>= 0.5.0'], # persons (people) table
25
+ ]
26
+
27
+ self.licenses = ['Public Domain']
28
+
29
+ self.spec_extras = {
30
+ required_ruby_version: '>= 2.2.2'
31
+ }
32
+ end
@@ -1,159 +1,212 @@
1
- # encoding: utf-8
2
-
3
-
4
- # core and stlibs (note: get included via worlddb-models gem; see worlddb-models gem/lib)
5
- require 'worlddb/models' # NOTE: include worlddb-models gem (not cli tools gem, that is, worlddb)
6
- require 'persondb/models'
7
-
8
-
9
- # our own code
10
-
11
- require 'sportdb/version' # let version always go first
12
-
13
- require 'sportdb/patterns'
14
- require 'sportdb/models/forward'
15
- require 'sportdb/models/world/city'
16
- require 'sportdb/models/world/country'
17
- require 'sportdb/models/world/continent'
18
- require 'sportdb/models/world/state'
19
- require 'sportdb/models/assoc'
20
- require 'sportdb/models/assoc_assoc'
21
- require 'sportdb/models/badge'
22
- require 'sportdb/models/event'
23
- require 'sportdb/models/event_ground'
24
- require 'sportdb/models/event_team'
25
- require 'sportdb/models/game'
26
- require 'sportdb/models/goal'
27
- require 'sportdb/models/ground'
28
- require 'sportdb/models/group'
29
- require 'sportdb/models/group_team'
30
- require 'sportdb/models/league'
31
- require 'sportdb/models/person'
32
- require 'sportdb/models/roster'
33
- require 'sportdb/models/round'
34
- require 'sportdb/models/season'
35
- require 'sportdb/models/stage'
36
- require 'sportdb/models/stage_team'
37
- require 'sportdb/models/team'
38
- require 'sportdb/models/team_compat' ### fix/todo: move to compat gem !!!!!
39
-
40
-
41
- require 'sportdb/models/stats/alltime_standing'
42
- require 'sportdb/models/stats/alltime_standing_entry'
43
- require 'sportdb/models/stats/event_standing'
44
- require 'sportdb/models/stats/event_standing_entry'
45
- require 'sportdb/models/stats/group_standing'
46
- require 'sportdb/models/stats/group_standing_entry'
47
-
48
- require 'sportdb/models/utils' # e.g. GameCursor
49
-
50
-
51
- require 'sportdb/schema' # NB: requires sportdb/models (include SportDB::Models)
52
-
53
-
54
- require 'sportdb/calc' # fix/todo: obsolete - replace w/ standings
55
- require 'sportdb/standings'
56
-
57
- require 'sportdb/deleter'
58
- require 'sportdb/stats'
59
-
60
-
61
- module SportDb
62
-
63
- def self.create
64
- CreateDb.new.up
65
- ConfDb::Model::Prop.create!( key: 'db.schema.sport.version', value: VERSION )
66
- end
67
-
68
- def self.create_all
69
- ## build schema - convenience helper
70
- LogDb.create
71
- ConfDb.create
72
- TagDb.create
73
- WorldDb.create
74
- PersonDb.create
75
- SportDb.create
76
- end
77
-
78
- # delete ALL records (use with care!)
79
- def self.delete!
80
- puts '*** deleting sport table records/data...'
81
- Deleter.new.run
82
- end # method delete!
83
-
84
-
85
- def self.tables
86
- Stats.new.tables
87
- end
88
-
89
-
90
- def self.connect( config={} )
91
-
92
- if config.empty?
93
- puts "ENV['DATBASE_URL'] - >#{ENV['DATABASE_URL']}<"
94
-
95
- ### change default to ./sport.db ?? why? why not?
96
- db = URI.parse( ENV['DATABASE_URL'] || 'sqlite3:///sport.db' )
97
-
98
- if db.scheme == 'postgres'
99
- config = {
100
- adapter: 'postgresql',
101
- host: db.host,
102
- port: db.port,
103
- username: db.user,
104
- password: db.password,
105
- database: db.path[1..-1],
106
- encoding: 'utf8'
107
- }
108
- else # assume sqlite3
109
- config = {
110
- adapter: db.scheme, # sqlite3
111
- database: db.path[1..-1] # sport.db (NB: cut off leading /, thus 1..-1)
112
- }
113
- end
114
- end
115
-
116
- ## todo/check: use if defined?( JRUBY_VERSION ) instead ??
117
- if RUBY_PLATFORM =~ /java/ && config[:adapter] == 'sqlite3'
118
- # quick hack for JRuby sqlite3 support via jdbc
119
- puts "jruby quick hack - adding jdbc libs for jruby sqlite3 database support"
120
- require 'jdbc/sqlite3'
121
- require 'active_record/connection_adapters/jdbc_adapter'
122
- require 'active_record/connection_adapters/jdbcsqlite3_adapter'
123
- end
124
-
125
- puts "Connecting to db using settings: "
126
- pp config
127
- ActiveRecord::Base.establish_connection( config )
128
- # ActiveRecord::Base.logger = Logger.new( STDOUT )
129
-
130
- ## if sqlite3 add (use) some pragmas for speedups
131
- if config[:adapter] == 'sqlite3'
132
- ## check/todo: if in memory e.g. ':memory:' no pragma needed!!
133
- con = ActiveRecord::Base.connection
134
- con.execute( 'PRAGMA synchronous=OFF;' )
135
- con.execute( 'PRAGMA journal_mode=OFF;' )
136
- con.execute( 'PRAGMA temp_store=MEMORY;' )
137
- end
138
- end
139
-
140
-
141
- def self.setup_in_memory_db
142
-
143
- # Database Setup & Config
144
- ActiveRecord::Base.logger = Logger.new( STDOUT )
145
- ## ActiveRecord::Base.colorize_logging = false - no longer exists - check new api/config setting?
146
-
147
- connect( adapter: 'sqlite3',
148
- database: ':memory:' )
149
-
150
- ## build schema
151
- create_all
152
- end # setup_in_memory_db (using SQLite :memory:)
153
-
154
-
155
- end # module SportDb
156
-
157
-
158
- ## say hello
159
- puts SportDb.banner if defined?($RUBYLIBS_DEBUG) && $RUBYLIBS_DEBUG
1
+ # core and stlibs (note: get included via worlddb-models gem; see worlddb-models gem/lib)
2
+ require 'worlddb/models' # NOTE: include worlddb-models gem (not cli tools gem, that is, worlddb)
3
+ require 'persondb/models'
4
+
5
+
6
+ # our own code
7
+
8
+ require 'sportdb/models/version' # let version always go first
9
+
10
+ require 'sportdb/models/formats'
11
+ require 'sportdb/models/models/forward'
12
+
13
+ require 'sportdb/models/models/world/city'
14
+ require 'sportdb/models/models/world/country'
15
+ require 'sportdb/models/models/world/continent'
16
+ require 'sportdb/models/models/world/state'
17
+
18
+ require 'sportdb/models/models/assoc'
19
+ require 'sportdb/models/models/badge'
20
+ require 'sportdb/models/models/event'
21
+ require 'sportdb/models/models/goal'
22
+ require 'sportdb/models/models/ground'
23
+ require 'sportdb/models/models/group'
24
+ require 'sportdb/models/models/league'
25
+ require 'sportdb/models/models/lineup'
26
+ require 'sportdb/models/models/match'
27
+ require 'sportdb/models/models/person'
28
+ require 'sportdb/models/models/round'
29
+ require 'sportdb/models/models/season'
30
+ require 'sportdb/models/models/stage'
31
+ require 'sportdb/models/models/team'
32
+
33
+ require 'sportdb/models/models/stats/alltime_standing'
34
+ require 'sportdb/models/models/stats/event_standing'
35
+ require 'sportdb/models/models/stats/group_standing'
36
+
37
+ require 'sportdb/models/schema' # note: requires sportdb/models (include SportDB::Models)
38
+
39
+ require 'sportdb/models/utils' # e.g. MatchCursor
40
+
41
+ require 'sportdb/models/deleter'
42
+ require 'sportdb/models/stats'
43
+
44
+
45
+ module SportDb
46
+
47
+ def self.create
48
+ CreateDb.new.up
49
+ ConfDb::Model::Prop.create!( key: 'db.schema.sport.version', value: VERSION )
50
+ end
51
+
52
+ def self.create_all
53
+ ## build schema - convenience helper
54
+ LogDb.create
55
+ ConfDb.create
56
+ TagDb.create
57
+ WorldDb.create
58
+ PersonDb.create
59
+ SportDb.create
60
+ end
61
+
62
+ def self.auto_migrate!
63
+ ### todo/fix:
64
+ ## check props table and versions!!!!!
65
+
66
+ # first time? - auto-run db migratation, that is, create db tables
67
+ unless LogDb::Model::Log.table_exists?
68
+ LogDb.create # add logs table
69
+ end
70
+
71
+ unless ConfDb::Model::Prop.table_exists?
72
+ ConfDb.create # add props table
73
+ end
74
+
75
+
76
+ unless TagDb::Model::Tag.table_exists?
77
+ TagDb.create # add tags & taggings tables
78
+ end
79
+
80
+ unless WorldDb::Model::Place.table_exists?
81
+ WorldDb.create # add places, & co. tables
82
+ end
83
+
84
+ unless PersonDb::Model::Person.table_exists?
85
+ PersonDb.create # add persons table
86
+ end
87
+
88
+ unless SportDb::Model::League.table_exists?
89
+ SportDb.create
90
+ end
91
+ end # method auto_migrate!
92
+
93
+
94
+ # delete ALL records (use with care!)
95
+ def self.delete!
96
+ puts '*** deleting sport table records/data...'
97
+ Deleter.new.run
98
+ end # method delete!
99
+
100
+
101
+ def self.tables
102
+ Stats.new.tables
103
+ end
104
+
105
+
106
+ def self.connect!( config={} ) # convenience shortcut w/ automigrate
107
+ connect( config )
108
+ auto_migrate!
109
+ end
110
+
111
+ def self.connect( config={} )
112
+ if config.empty?
113
+ puts "ENV['DATBASE_URL'] - >#{ENV['DATABASE_URL']}<"
114
+
115
+ ### change default to ./sport.db ?? why? why not?
116
+ db = URI.parse( ENV['DATABASE_URL'] || 'sqlite3:///sport.db' )
117
+
118
+ config = if db.scheme == 'postgres'
119
+ { adapter: 'postgresql',
120
+ host: db.host,
121
+ port: db.port,
122
+ username: db.user,
123
+ password: db.password,
124
+ database: db.path[1..-1],
125
+ encoding: 'utf8'
126
+ }
127
+ else # assume sqlite3
128
+ { adapter: db.scheme, # sqlite3
129
+ database: db.path[1..-1] # sport.db (NB: cut off leading /, thus 1..-1)
130
+ }
131
+ end
132
+ else
133
+ ## note: for compatibility lets you also pass-in/use string keys
134
+ ## e.g. YAML.load uses/returns always string keys - always auto-convert to symbols
135
+ config = config.symbolize_keys
136
+ end
137
+
138
+
139
+ ## todo/check/fix: move jruby "hack" to attic - why? why not?
140
+ ## todo/check: use if defined?( JRUBY_VERSION ) instead ??
141
+ ## if RUBY_PLATFORM =~ /java/ && config[:adapter] == 'sqlite3'
142
+ # quick hack for JRuby sqlite3 support via jdbc
143
+ ## puts "jruby quick hack - adding jdbc libs for jruby sqlite3 database support"
144
+ ## require 'jdbc/sqlite3'
145
+ ## require 'active_record/connection_adapters/jdbc_adapter'
146
+ ## require 'active_record/connection_adapters/jdbcsqlite3_adapter'
147
+ ## end
148
+
149
+ puts "Connecting to db using settings: "
150
+ pp config
151
+ ActiveRecord::Base.establish_connection( config )
152
+ # ActiveRecord::Base.logger = Logger.new( STDOUT )
153
+
154
+ ## if sqlite3 add (use) some pragmas for speedups
155
+ if config[:adapter] == 'sqlite3' &&
156
+ config[:database] != ':memory:'
157
+ ## note: if in memory database e.g. ':memory:' no pragma needed!!
158
+ ## try to speed up sqlite
159
+ ## see http://www.sqlite.org/pragma.html
160
+ con = ActiveRecord::Base.connection
161
+ con.execute( 'PRAGMA synchronous=OFF;' )
162
+ con.execute( 'PRAGMA journal_mode=OFF;' )
163
+ con.execute( 'PRAGMA temp_store=MEMORY;' )
164
+ end
165
+ end
166
+
167
+
168
+ def self.setup_in_memory_db
169
+ # Database Setup & Config
170
+ ActiveRecord::Base.logger = Logger.new( STDOUT )
171
+ ## ActiveRecord::Base.colorize_logging = false - no longer exists - check new api/config setting?
172
+
173
+ connect( adapter: 'sqlite3',
174
+ database: ':memory:' )
175
+
176
+ ## build schema
177
+ create_all
178
+ end # setup_in_memory_db (using SQLite :memory:)
179
+
180
+
181
+ end # module SportDb
182
+
183
+
184
+
185
+ module SportDb
186
+ module Model
187
+ ##################
188
+ # add alias why? why not?
189
+ #
190
+ # more aliases to consider:
191
+ # - Tournament for Event?
192
+ # - Cup for League?
193
+ # - Roster for Lineup?
194
+ # - Stadium for Ground? - why? why not?
195
+
196
+
197
+ Competition = Event
198
+ Comp = Event
199
+
200
+ LineUp = Lineup
201
+ Squad = Lineup
202
+
203
+ Game = Match ## add (old) alias - why? why not?
204
+ end # module Model
205
+ end # module SportDb
206
+
207
+
208
+
209
+ ## say hello
210
+ puts SportDb::Module::Models.banner
211
+
212
+