sportdb 2.1.0 → 2.3.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 462f64e48cea18e67436574ea602fb33b00c233f
4
- data.tar.gz: 547a07bb677135cbc245e317ddc2c30d619e5346
3
+ metadata.gz: 0abc35fb1d3dbb732804349eeec3c26a6dc63d99
4
+ data.tar.gz: 6e7338d3c6d9b8765e42dcbbac64b418d1761d6c
5
5
  SHA512:
6
- metadata.gz: 2640177ec4c7f3c9ff4743f365755adddaf915cb4b05772b2885e5c878c3a2fc70e375ba328226581c664efa0ee26cfcd4c4df05ada239a2608166337da8c440
7
- data.tar.gz: 4874fa7df01d41799af5ac192ba362f3136712e5ff594b2c0601fbf68d5bb4348f49e79c7842972d7d3f90d667b071f9eb554f32b433d148e5ef8b57b3582a20
6
+ metadata.gz: 458d9011e99e6abbe78ae1d9448f9175c2057a4cf7869ce66f50aeb8572157ff64721f21d318ddcee64d6917bf5dfeac4ec045b50d4e5ec95fb0abe74aebcefb
7
+ data.tar.gz: edfbbb41911d7ad3687381a8d5471ce3c7f289cdf03ed95ea7098519253b3c3ee0b493c920874165a601df272d60f9ae3ff57dc89dce8bf5cbb5474ed64b3c56
@@ -8,3 +8,5 @@ lib/sportdb/cli/main.rb
8
8
  lib/sportdb/cli/opts.rb
9
9
  lib/sportdb/cli/version.rb
10
10
  lib/sportdb/console.rb
11
+ test/helper.rb
12
+ test/test_commands.rb
data/Rakefile CHANGED
@@ -20,21 +20,18 @@ Hoe.spec 'sportdb' do
20
20
  self.history_file = 'CHANGELOG.md'
21
21
 
22
22
  self.extra_deps = [
23
- ['sportdb-models', '>= 1.18.2'],
24
- ['sportdb-readers', '>= 0.3.6'],
25
- ['footballdb-leagues', '>= 2019.11.22' ], ## add minimum for datasets
26
- ['footballdb-clubs', '>= 2019.11.22' ],
23
+ ['sportdb-readers', '>= 1.1.2'],
27
24
 
28
- ['fetcher', '>= 0.4.5'], ## check if included already in datafil ??
29
- ['datafile', '>= 0.3.1'],
25
+ ['fetcher', '>= 0.4.5'], ## check if included already in datafil ??
26
+ ['datafile', '>= 0.3.1'],
27
+ ['webservice', '>= 0.7.0'],
30
28
 
31
- ### sportdb addons
29
+ ### incl. sportdb addons - why? why not?
32
30
  ## ['sportdb-keys'],
33
31
  ## ['sportdb-update'],
34
- ['sportdb-service'],
35
32
 
36
33
  ## 3rd party
37
- ['gli', '>= 2.12.2'],
34
+ ['gli', '>= 2.19.0'],
38
35
 
39
36
  ## ['activerecord'], # Note: will include activesupport,etc.
40
37
  ['sqlite3']
@@ -1,7 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
-
4
- require 'sportdb/models'
5
3
  require 'sportdb/readers'
6
4
 
7
5
  require 'logutils/activerecord' ## NOTE: check - add to/include in/move to sportdb/models
@@ -19,24 +17,81 @@ require 'sportdb/cli/opts'
19
17
  require 'sportdb/cli/main'
20
18
 
21
19
 
20
+
22
21
  module SportDb
23
22
 
24
- def self.main
25
- Tool.new.run(ARGV)
23
+ def self.main( args=ARGV )
24
+ Tool.new.run( args )
26
25
  end
27
26
 
28
27
  end # module SportDb
29
28
 
30
29
 
31
- #####
32
- # auto-load/require some addons
33
30
 
34
- ## puts 'before auto-load (require) sportdb addons'
35
- ## puts ' before sportdb/update'
36
- require 'sportdb/update'
37
- ## puts ' before sportdb/service'
38
- require 'sportdb/service'
39
- ## puts 'after auto-load (require) sportdb addons'
31
+ ##################
32
+ # add web service support / machinery
33
+
34
+ require 'webservice'
35
+
36
+ ####
37
+ ## used for server/service command
38
+ ## "preconfigured" base class for webservice
39
+ class SportDbService < Webservice::Base
40
+ include SportDb::Models # e.g. League, Season, Team, etc.
41
+
42
+ ## (auto-)add some (built-in) routes
43
+
44
+ get '/version(s)?' do
45
+ {
46
+ "sportdb": SportDbCli::VERSION, ## todo/fix: change to DbTool!!!
47
+ "sportdb/models": SportDb::VERSION,
48
+ ## todo/fix: add beerdb/note version - if present
49
+ ## todo/fix: add worlddb/models version
50
+ ## todo/fix: add some more libs - why? why not??
51
+ "activerecord": [ActiveRecord::VERSION::MAJOR,ActiveRecord::VERSION::MINOR,ActiveRecord::VERSION::TINY].join('.'),
52
+ "webservice": Webservice::VERSION,
53
+ "rack": "#{Rack::RELEASE} (#{Rack::VERSION.join('.')})", ## note: VERSION is the protocoll version as an array e.g.[1,2]
54
+ "ruby": "#{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]",
55
+ }
56
+ end
57
+
58
+ get '/(stats|tables)' do
59
+ {
60
+ "teams": SportDb::Model::Team.count,
61
+ "games": SportDb::Model::Game.count,
62
+ "events": SportDb::Model::Event.count,
63
+ "leagues": SportDb::Model::League.count,
64
+ "seasons": SportDb::Model::Season.count,
65
+ "countries": WorldDb::Model::Country.count,
66
+ "system": {
67
+ "props": ConfDb::Models::Prop.count,
68
+ "logs": LogDb::Models::Log.count,
69
+ }
70
+ }
71
+ end
72
+
73
+ get '/props(.:format)?' do # note: add format - lets you use props.csv and props.html
74
+ ConfDb::Models::Prop.all
75
+ end
76
+
77
+ get '/logs(.:format)?' do
78
+ LogDb::Models::Log.all
79
+ end
80
+
81
+
82
+ ## add favicon support
83
+ # get '/favicon.ico' do
84
+ ## use 302 to redirect
85
+ ## note: use strg+F5 to refresh page (clear cache for favicon.ico)
86
+ # redirect '/webservice-sportdb-32x32.png'
87
+ # end
88
+
89
+ # get '/webservice-beerdb-32x32.png' do
90
+ # send_file "#{SportDbCli.root}/assets/webservice-sportdb-32x32.png"
91
+ # end
92
+
93
+ end # class SportDbService
94
+
40
95
 
41
96
 
42
97
  SportDb.main if __FILE__ == $0
@@ -60,6 +60,23 @@ arg_name 'NAME'
60
60
  default_value opts.db_name
61
61
  flag [:n, :dbname]
62
62
 
63
+ desc 'Datafile'
64
+ arg_name 'FILE'
65
+ default_value opts.datafile
66
+ flag [:f, :datafile]
67
+
68
+ desc 'Leagues dir'
69
+ arg_name 'PATH'
70
+ default_value nil
71
+ flag [:'leagues-dir', :leaguesdir]
72
+
73
+ desc 'Clubs dir'
74
+ arg_name 'PATH'
75
+ default_value nil
76
+ flag [:'clubs-dir', :clubsdir]
77
+
78
+
79
+
63
80
  desc '(Debug) Show debug messages'
64
81
  switch [:verbose], negatable: false ## todo: use -w for short form? check ruby interpreter if in use too?
65
82
 
@@ -87,8 +104,8 @@ command [:build,:b] do |c|
87
104
  c.action do |g,o,args|
88
105
 
89
106
  ## check if datafile exists, if NOT assume working dir (./) is a package
90
- if File.file?( './Datafile' ) ## note use file? (exist? will also check for directory/folder!!)
91
- datafile = Datafile::Datafile.load_file( './Datafile' )
107
+ if File.file?( opts.datafile ) ## note use file? (exist? will also check for directory/folder!!)
108
+ datafile = Datafile::Datafile.load_file( opts.datafile )
92
109
  datafile.download # datafile step 1 - download all datasets/zips
93
110
 
94
111
  connect_to_db( opts )
@@ -97,7 +114,7 @@ command [:build,:b] do |c|
97
114
 
98
115
  datafile.read # datafile step 2 - read all datasets
99
116
  else
100
- puts "no ./Datafile found; try local build in >#{Dir.pwd}<"
117
+ puts "no datafile >#{opts.datafile}< found; trying local build in >#{Dir.pwd}<"
101
118
 
102
119
  connect_to_db( opts )
103
120
 
@@ -117,13 +134,13 @@ command [:read,:r] do |c|
117
134
  c.action do |g,o,args|
118
135
 
119
136
  ## check if datafile exists, if NOT assume working dir (./) is a package
120
- if File.file?( './Datafile' ) ## note use file? (exist? will also check for directory/folder!!)
137
+ if File.file?( opts.datafile ) ## note use file? (exist? will also check for directory/folder!!)
121
138
  connect_to_db( opts )
122
139
 
123
- datafile = Datafile::Datafile.load_file( './Datafile' )
140
+ datafile = Datafile::Datafile.load_file( opts.datafile )
124
141
  datafile.read
125
142
  else
126
- puts "no ./Datafile found; try local read in >#{Dir.pwd}<"
143
+ puts "no datafile >#{opts.datafile}< found; trying local read in >#{Dir.pwd}<"
127
144
 
128
145
  connect_to_db( opts )
129
146
 
@@ -143,7 +160,7 @@ command [:download,:dl] do |c|
143
160
 
144
161
  # note: no database connection needed (check - needed for logs?? - not setup by default???)
145
162
 
146
- datafile = Datafile::Datafile.load_file( './Datafile' )
163
+ datafile = Datafile::Datafile.load_file( opts.datafile )
147
164
  datafile.download
148
165
 
149
166
  puts 'Done.'
@@ -163,6 +180,8 @@ command [:new,:n] do |c|
163
180
  worker = Fetcher::Worker.new
164
181
  worker.copy( "https://github.com/openfootball/datafile/raw/master/#{setup}.rb", './Datafile' )
165
182
 
183
+ ## todo/check: use custom datafile (opts.datafile) if present? why? why not?
184
+
166
185
  ## step 2: same as command build (todo - reuse code)
167
186
  datafile = Datafile::Datafile.load_file( './Datafile' )
168
187
  datafile.download # datafile step 1 - download all datasets/zips
@@ -178,38 +197,40 @@ command [:new,:n] do |c|
178
197
  end # command setup
179
198
 
180
199
 
181
-
182
200
  desc 'Start web service (HTTP JSON API)'
183
- command [:serve,:server] do |c|
201
+ arg_name 'NAME' # optional setup profile name
202
+ command [:serve,:server,:s] do |c|
184
203
 
185
204
  c.action do |g,o,args|
186
205
 
187
- connect_to_db( opts )
206
+ ## todo: document optional script arg (defaults to service)
207
+ script = args[0] || 'service'
208
+
209
+ ## todo/fix: add support for (default) Service (with no extension)
210
+
211
+ script_path = "#{script}.rb" ## auto-add .rb extension
188
212
 
189
- # note: server (HTTP service) not included in standard default require
190
- ## -- note - now included!!!
191
- ## require 'sportdb/service'
192
-
193
- # make sure connections get closed after every request e.g.
194
- #
195
- # after do
196
- # ActiveRecord::Base.connection.close
197
- # end
198
- #
199
-
200
- puts 'before add middleware ConnectionManagement'
201
- SportDb::Service::Server.use ActiveRecord::ConnectionAdapters::ConnectionManagement
202
- puts 'after add middleware ConnectionManagement'
203
- ## todo: check if we can check on/dump middleware stack
204
-
205
- ## rack middleware might not work with multi-threaded thin web server; close it ourselfs
206
- SportDb::Service::Server.after do
207
- puts " #{Thread.current.object_id} -- make sure db connections gets closed after request"
208
- # todo: check if connection is open - how?
209
- ActiveRecord::Base.connection.close
213
+ unless File.exist?( script_path ) ## if file doesn't exist try to fetch service script
214
+ script_path = "./#{script}.rb" ## use / save script in local (current) working dir/folder
215
+ worker = Fetcher::Worker.new
216
+ ## note: lets use http:// instead of https:// for now - lets us use person proxy (NOT working w/ https for now)
217
+ worker.copy( "http://github.com/sportdb/sport.db.service/raw/master/#{script}.rb", script_path )
210
218
  end
211
219
 
212
- SportDb::Service::Server.run!
220
+
221
+ code = File.open( script_path, 'r:utf-8' ) { |f| f.read }
222
+
223
+ connect_to_db( opts )
224
+
225
+ SportDb.tables ## print table stats
226
+
227
+ SportDbService.class_eval( code ) ## note: MUST use class_eval (do NOT use instance_eval) !!!
228
+
229
+ puts "dump routes:"
230
+ pp SportDbService.routes
231
+
232
+ puts "starting server..."
233
+ SportDbService.run!
213
234
 
214
235
  puts 'Done.'
215
236
  end
@@ -217,6 +238,7 @@ end # command serve
217
238
 
218
239
 
219
240
 
241
+
220
242
  desc 'Show logs'
221
243
  command :logs do |c|
222
244
  c.action do |g,o,args|
@@ -293,6 +315,18 @@ pre do |g,c,o,args|
293
315
  LogUtils::Logger.root.level = :debug
294
316
  end
295
317
 
318
+
319
+ if opts.clubs_dir?
320
+ puts " setting clubs_dir to >#{opts.clubs_dir}<"
321
+ SportDb::Import.config.clubs_dir = opts.clubs_dir
322
+ end
323
+
324
+ if opts.leagues_dir?
325
+ puts " setting leagues_dir to >#{opts.leagues_dir}<"
326
+ SportDb::Import.config.leagues_dir = opts.leagues_dir
327
+ end
328
+
329
+
296
330
  logger.debug "Executing #{c.name}"
297
331
  true
298
332
  end
@@ -5,10 +5,14 @@ module SportDb
5
5
  class Opts
6
6
 
7
7
  def merge_gli_options!( options = {} )
8
- @db_path = options[:dbpath] if options[:dbpath].present?
9
- @db_name = options[:dbname] if options[:dbname].present?
8
+ @db_path = options[:dbpath] if options[:dbpath].present?
9
+ @db_name = options[:dbname] if options[:dbname].present?
10
+ @datafile = options[:datafile] if options[:datafile].present?
10
11
 
11
12
  @verbose = true if options[:verbose] == true
13
+
14
+ @leagues_dir = options[:'leagues-dir'] if options[:'leagues-dir'].present?
15
+ @clubs_dir = options[:'clubs-dir'] if options[:'clubs-dir'].present?
12
16
  end
13
17
 
14
18
 
@@ -22,13 +26,18 @@ class Opts
22
26
  end
23
27
 
24
28
 
25
- def db_path
26
- @db_path || '.'
27
- end
29
+ def db_path() @db_path || '.'; end
30
+ def db_name() @db_name || 'sport.db'; end
28
31
 
29
- def db_name
30
- @db_name || 'sport.db'
31
- end
32
+ def datafile() @datafile || './Datafile'; end
33
+ def datafile?() @datafile; end ## note: let's you check if datafile is set (or "untouched")
34
+
35
+
36
+ def clubs_dir() @clubs_dir; end
37
+ def clubs_dir?() @clubs_dir.nil? == false; end ## note: let's you check if clubs_dir set (by default it's NOT set)
38
+
39
+ def leagues_dir() @leagues_dir; end
40
+ def leagues_dir?() @leagues_dir.nil? == false; end
32
41
  end # class Opts
33
42
 
34
43
  end # module SportDb
@@ -6,8 +6,8 @@
6
6
  module SportDbCli # todo/check - rename to SportDbTool or SportDbCommands or SportDbShell ??
7
7
 
8
8
  MAJOR = 2 ## todo: namespace inside version or something - why? why not??
9
- MINOR = 1
10
- PATCH = 0
9
+ MINOR = 3
10
+ PATCH = 1
11
11
  VERSION = [MAJOR,MINOR,PATCH].join('.')
12
12
 
13
13
  def self.version
@@ -0,0 +1,9 @@
1
+ ## $:.unshift(File.dirname(__FILE__))
2
+
3
+ ## minitest setup
4
+
5
+ require 'minitest/autorun'
6
+
7
+
8
+ ## our own code
9
+ require 'sportdb'
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+
3
+ ###
4
+ # to run use
5
+ # ruby -I ./lib -I ./test test/test_commands.rb
6
+
7
+
8
+ require 'helper'
9
+
10
+ class TestCommands < MiniTest::Test
11
+
12
+ def test_help
13
+ args = ['help']
14
+ SportDb.main( args )
15
+ end
16
+
17
+ end # class TestCommands
metadata CHANGED
@@ -1,71 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sportdb
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-11-24 00:00:00.000000000 Z
11
+ date: 2020-08-01 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: sportdb-models
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: 1.18.2
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: 1.18.2
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: sportdb-readers
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
17
  - - ">="
32
18
  - !ruby/object:Gem::Version
33
- version: 0.3.6
19
+ version: 1.1.2
34
20
  type: :runtime
35
21
  prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
24
  - - ">="
39
25
  - !ruby/object:Gem::Version
40
- version: 0.3.6
41
- - !ruby/object:Gem::Dependency
42
- name: footballdb-leagues
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: 2019.11.22
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: 2019.11.22
55
- - !ruby/object:Gem::Dependency
56
- name: footballdb-clubs
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: 2019.11.22
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: 2019.11.22
26
+ version: 1.1.2
69
27
  - !ruby/object:Gem::Dependency
70
28
  name: fetcher
71
29
  requirement: !ruby/object:Gem::Requirement
@@ -95,33 +53,33 @@ dependencies:
95
53
  - !ruby/object:Gem::Version
96
54
  version: 0.3.1
97
55
  - !ruby/object:Gem::Dependency
98
- name: sportdb-service
56
+ name: webservice
99
57
  requirement: !ruby/object:Gem::Requirement
100
58
  requirements:
101
59
  - - ">="
102
60
  - !ruby/object:Gem::Version
103
- version: '0'
61
+ version: 0.7.0
104
62
  type: :runtime
105
63
  prerelease: false
106
64
  version_requirements: !ruby/object:Gem::Requirement
107
65
  requirements:
108
66
  - - ">="
109
67
  - !ruby/object:Gem::Version
110
- version: '0'
68
+ version: 0.7.0
111
69
  - !ruby/object:Gem::Dependency
112
70
  name: gli
113
71
  requirement: !ruby/object:Gem::Requirement
114
72
  requirements:
115
73
  - - ">="
116
74
  - !ruby/object:Gem::Version
117
- version: 2.12.2
75
+ version: 2.19.0
118
76
  type: :runtime
119
77
  prerelease: false
120
78
  version_requirements: !ruby/object:Gem::Requirement
121
79
  requirements:
122
80
  - - ">="
123
81
  - !ruby/object:Gem::Version
124
- version: 2.12.2
82
+ version: 2.19.0
125
83
  - !ruby/object:Gem::Dependency
126
84
  name: sqlite3
127
85
  requirement: !ruby/object:Gem::Requirement
@@ -184,6 +142,8 @@ files:
184
142
  - lib/sportdb/cli/opts.rb
185
143
  - lib/sportdb/cli/version.rb
186
144
  - lib/sportdb/console.rb
145
+ - test/helper.rb
146
+ - test/test_commands.rb
187
147
  homepage: https://github.com/sportdb/sport.db
188
148
  licenses:
189
149
  - Public Domain