sportdb-models 2.0.3 → 2.1.0

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.
@@ -1,27 +1,26 @@
1
- module SportDb
2
- module Module
3
- module Models
4
- MAJOR = 2
5
- MINOR = 0
6
- PATCH = 3
7
- VERSION = [MAJOR,MINOR,PATCH].join('.')
8
-
9
- def self.version
10
- VERSION
11
- end
12
-
13
- def self.banner
14
- "sportdb-models/#{VERSION} on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
15
- end
16
-
17
- def self.root
18
- "#{File.expand_path( File.dirname(File.dirname(File.dirname(File.dirname(__FILE__)))) )}"
19
- end
20
-
21
- end # module Models
22
- end # module Module
23
-
24
- #################
25
- ## add convenience shortcuts
26
- VERSION = Module::Models::VERSION
27
- end # module SportDb
1
+ module SportDb
2
+ module Module
3
+ module Models
4
+ MAJOR = 2
5
+ MINOR = 1
6
+ PATCH = 0
7
+ VERSION = [MAJOR,MINOR,PATCH].join('.')
8
+
9
+ def self.version
10
+ VERSION
11
+ end
12
+
13
+ def self.banner
14
+ "sportdb-models/#{VERSION} on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}] in (#{root})"
15
+ end
16
+
17
+ def self.root
18
+ File.expand_path( File.dirname(File.dirname(File.dirname(File.dirname(__FILE__)))) )
19
+ end
20
+ end # module Models
21
+ end # module Module
22
+
23
+ #################
24
+ ## add convenience shortcuts
25
+ VERSION = Module::Models::VERSION
26
+ end # module SportDb
@@ -1,212 +1,240 @@
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
-
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
+ require_relative 'models/version' # let version always go first
8
+
9
+ require_relative 'models/formats'
10
+ require_relative 'models/models/forward'
11
+
12
+ require_relative 'models/models/world/city'
13
+ require_relative 'models/models/world/country'
14
+ require_relative 'models/models/world/continent'
15
+ require_relative 'models/models/world/state'
16
+
17
+ require_relative 'models/models/assoc'
18
+ require_relative 'models/models/badge'
19
+ require_relative 'models/models/event'
20
+ require_relative 'models/models/goal'
21
+ require_relative 'models/models/ground'
22
+ require_relative 'models/models/group'
23
+ require_relative 'models/models/league'
24
+ require_relative 'models/models/lineup'
25
+ require_relative 'models/models/match'
26
+ require_relative 'models/models/person'
27
+ require_relative 'models/models/round'
28
+ require_relative 'models/models/season'
29
+ require_relative 'models/models/stage'
30
+ require_relative 'models/models/team'
31
+
32
+ require_relative 'models/models/stats/alltime_standing'
33
+ require_relative 'models/models/stats/event_standing'
34
+ require_relative 'models/models/stats/group_standing'
35
+
36
+ require_relative 'models/schema' # note: requires sportdb/models (include SportDB::Models)
37
+
38
+ require_relative 'models/utils' # e.g. MatchCursor
39
+
40
+ require_relative 'models/deleter'
41
+ require_relative 'models/stats'
42
+
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
+ ### use/change to **config - to allow "inline" conif with keywords
107
+ ## (without enclosing {}) - why? why not?
108
+ def self.connect!( config={} ) # convenience shortcut w/ automigrate
109
+ connect( config )
110
+ auto_migrate!
111
+ end
112
+
113
+ def self.connect( config={} )
114
+ if config.empty?
115
+ puts "ENV['DATBASE_URL'] - >#{ENV['DATABASE_URL']}<"
116
+
117
+ ### change default to ./sport.db ?? why? why not?
118
+ db = URI.parse( ENV['DATABASE_URL'] || 'sqlite3:///sport.db' )
119
+
120
+ config = if db.scheme == 'postgres'
121
+ { adapter: 'postgresql',
122
+ host: db.host,
123
+ port: db.port,
124
+ username: db.user,
125
+ password: db.password,
126
+ database: db.path[1..-1],
127
+ encoding: 'utf8'
128
+ }
129
+ else # assume sqlite3
130
+ { adapter: db.scheme, # sqlite3
131
+ database: db.path[1..-1] # sport.db (NB: cut off leading /, thus 1..-1)
132
+ }
133
+ end
134
+ else
135
+ ## note: for compatibility lets you also pass-in/use string keys
136
+ ## e.g. YAML.load uses/returns always string keys - always auto-convert to symbols
137
+ config = config.symbolize_keys
138
+ end
139
+
140
+
141
+ ## todo/check/fix: move jruby "hack" to attic - why? why not?
142
+ ## todo/check: use if defined?( JRUBY_VERSION ) instead ??
143
+ ## if RUBY_PLATFORM =~ /java/ && config[:adapter] == 'sqlite3'
144
+ # quick hack for JRuby sqlite3 support via jdbc
145
+ ## puts "jruby quick hack - adding jdbc libs for jruby sqlite3 database support"
146
+ ## require 'jdbc/sqlite3'
147
+ ## require 'active_record/connection_adapters/jdbc_adapter'
148
+ ## require 'active_record/connection_adapters/jdbcsqlite3_adapter'
149
+ ## end
150
+
151
+ puts "Connecting to db using settings: "
152
+ pp config
153
+ ActiveRecord::Base.establish_connection( config )
154
+ # ActiveRecord::Base.logger = Logger.new( STDOUT )
155
+
156
+ ## if sqlite3 add (use) some pragmas for speedups
157
+ if config[:adapter] == 'sqlite3' &&
158
+ config[:database] != ':memory:'
159
+ ## note: if in memory database e.g. ':memory:' no pragma needed!!
160
+ ## try to speed up sqlite
161
+ ## see http://www.sqlite.org/pragma.html
162
+ con = ActiveRecord::Base.connection
163
+ con.execute( 'PRAGMA synchronous=OFF;' )
164
+ con.execute( 'PRAGMA journal_mode=OFF;' )
165
+ con.execute( 'PRAGMA temp_store=MEMORY;' )
166
+ end
167
+ end
168
+
169
+
170
+
171
+ def self.open( path ) ## shortcut for sqlite only
172
+ config = {
173
+ adapter: 'sqlite3',
174
+ database: path # e.g. ':memory', './sport.db'
175
+ }
176
+ connect!( config )
177
+ end
178
+
179
+ def self.setup_in_memory_db
180
+ # Database Setup & Config
181
+ ## add logger as option - why? why not?
182
+ ## e.g. open_mem( logger: true ) or
183
+ ## always possible to add logger "manually" before
184
+ ## thus, no need for option/flag really ??
185
+ ## ActiveRecord::Base.logger = Logger.new( STDOUT )
186
+ ## ActiveRecord::Base.colorize_logging = false - no longer exists - check new api/config setting?
187
+
188
+ config = {
189
+ adapter: 'sqlite3',
190
+ database: ':memory:'
191
+ }
192
+ connect( config )
193
+
194
+ ## build schema
195
+ create_all
196
+ end # setup_in_memory_db (using SQLite :memory:)
197
+
198
+
199
+ ###########
200
+ # add more aliases/alt names for in memory db - why? why not?
201
+ ## rename to open_mem for canonical name - why? why not?
202
+ class << self
203
+ alias_method :open_mem, :setup_in_memory_db
204
+ alias_method :open_memory, :setup_in_memory_db
205
+ alias_method :open_in_memory, :setup_in_memory_db
206
+ end
207
+ end # module SportDb
208
+
209
+
210
+
211
+ module SportDb
212
+ module Model
213
+ ##################
214
+ # add alias why? why not?
215
+ #
216
+ # more aliases to consider:
217
+ # - Roster for Squad/Lineup?
218
+ # - Stadium / Venue for Ground? - why? why not?
219
+ #
220
+ # use Competition/Tournament for League/Cup alias
221
+ #
222
+ # Event => LeagueSeason (League+Season) - use LeagueSeason alias - why? why not?
223
+
224
+
225
+ ### fix - use Squad for (all) LeagueSeason players
226
+ ## use Lineup for players for one match!!!!
227
+
228
+ LineUp = Lineup
229
+ Squad = Lineup #### fix - do NOT use squad and lineup as alias (see above)!!!!
230
+
231
+ Game = Match ## add (old) alias - why? why not?
232
+ end # module Model
233
+ end # module SportDb
234
+
235
+
236
+
237
+ ## say hello
238
+ puts SportDb::Module::Models.banner
239
+
240
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sportdb-models
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.3
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-17 00:00:00.000000000 Z
11
+ date: 2024-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: worlddb-models
@@ -64,14 +64,14 @@ dependencies:
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: '3.22'
67
+ version: '4.1'
68
68
  type: :development
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: '3.22'
74
+ version: '4.1'
75
75
  description: sportdb-models - sport.db schema 'n' models for easy (re)use
76
76
  email: opensport@googlegroups.com
77
77
  executables: []
@@ -114,15 +114,11 @@ files:
114
114
  - lib/sportdb/models/stats.rb
115
115
  - lib/sportdb/models/utils.rb
116
116
  - lib/sportdb/models/version.rb
117
- - test/helper.rb
118
- - test/test_changes.rb
119
- - test/test_cursor.rb
120
- - test/test_winner.rb
121
117
  homepage: https://github.com/sportdb/sport.db
122
118
  licenses:
123
119
  - Public Domain
124
120
  metadata: {}
125
- post_install_message:
121
+ post_install_message:
126
122
  rdoc_options:
127
123
  - "--main"
128
124
  - README.md
@@ -139,9 +135,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
139
135
  - !ruby/object:Gem::Version
140
136
  version: '0'
141
137
  requirements: []
142
- rubyforge_project:
143
- rubygems_version: 2.5.2
144
- signing_key:
138
+ rubygems_version: 3.4.10
139
+ signing_key:
145
140
  specification_version: 4
146
141
  summary: sportdb-models - sport.db schema 'n' models for easy (re)use
147
142
  test_files: []
data/test/helper.rb DELETED
@@ -1,46 +0,0 @@
1
- ## minitest setup
2
- require 'minitest/autorun'
3
-
4
-
5
- ## our own code
6
- require 'sportdb/models'
7
-
8
-
9
- #####################
10
- # Models shortcuts
11
-
12
- Country = WorldDb::Model::Country
13
-
14
- Person = PersonDb::Model::Person
15
-
16
- League = SportDb::Model::League
17
- Season = SportDb::Model::Season
18
- Event = SportDb::Model::Event
19
- Team = SportDb::Model::Team
20
- Lineup = SportDb::Model::Lineup
21
- Assoc = SportDb::Model::Assoc
22
- AssocAssoc = SportDb::Model::AssocAssoc
23
-
24
- Round = SportDb::Model::Round
25
- Group = SportDb::Model::Group
26
- Stage = SportDb::Model::Stage
27
- Match = SportDb::Model::Match
28
- MatchCursor = SportDb::Model::MatchCursor
29
-
30
-
31
- EventStanding = SportDb::Model::EventStanding
32
- EventStandingEntry = SportDb::Model::EventStandingEntry
33
- GroupStanding = SportDb::Model::GroupStanding
34
- GroupStandingEntry = SportDb::Model::GroupStandingEntry
35
- AlltimeStanding = SportDb::Model::AlltimeStanding
36
- AlltimeStandingEntry = SportDb::Model::AlltimeStandingEntry
37
-
38
-
39
- #################################
40
- # setup db -> schema / tables
41
-
42
- SportDb.setup_in_memory_db
43
-
44
- ## test helpers here
45
- SportDb.delete!
46
- SportDb.tables