fbup 0.0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: d55ede42bbe3e933365193d25054464d9226d1a5743dc9b4919ce47760faa68d
4
+ data.tar.gz: 2c759f0719ceed561a02d25818141cb57625ef60ca99f1f294c5e80e0b185d05
5
+ SHA512:
6
+ metadata.gz: ea4c01a1e01290360ebe48028225745c6b33d6ad2196af66846f6287a1a0bd2c6713c7026127a281caade87d8b2488c27c09e0c61d54a7992322d0b334b33d12
7
+ data.tar.gz: 5b6afe253dcabb81e23918dbb257104dcb3c25446f3a5ffdcd3e12553fd5dcf69995018f4476903c3ae5844fc00e3969afb84c0634d390063b743011553d7419
data/CHANGELOG.md ADDED
@@ -0,0 +1,3 @@
1
+ ### 0.0.1 / 2024-12-29
2
+
3
+ * Everything is new. First release.
data/Manifest.txt ADDED
@@ -0,0 +1,11 @@
1
+ CHANGELOG.md
2
+ Manifest.txt
3
+ README.md
4
+ Rakefile
5
+ bin/fbup
6
+ config/openfootball.csv
7
+ lib/fbup.rb
8
+ lib/fbup/github.rb
9
+ lib/fbup/github_config.rb
10
+ lib/fbup/main.rb
11
+ lib/fbup/version.rb
data/README.md ADDED
@@ -0,0 +1,37 @@
1
+ # fbup - (auto-)update machinery for footbal match schedules & more in football.txt; incl. (auto-sync & commit) support for github openfootball repos & more
2
+
3
+
4
+ * home :: [github.com/sportdb/sport.db](https://github.com/sportdb/sport.db)
5
+ * bugs :: [github.com/sportdb/sport.db/issues](https://github.com/sportdb/sport.db/issues)
6
+ * gem :: [rubygems.org/gems/fbup](https://rubygems.org/gems/fbup)
7
+ * rdoc :: [rubydoc.info/gems/fbup](http://rubydoc.info/gems/fbup)
8
+
9
+
10
+ ## Step 0 - Installation Via Gems
11
+
12
+ To install the command-line tool via gems (ruby's package manager) use:
13
+
14
+ ```
15
+ $ gem install fbup
16
+ ```
17
+
18
+
19
+ ## Usage
20
+
21
+ Try in your shell / terminal:
22
+
23
+ ```
24
+ $ fbup -h
25
+ ```
26
+
27
+ resulting in:
28
+
29
+
30
+ ...
31
+
32
+
33
+
34
+ ## Questions? Comments?
35
+
36
+ Yes, you can. More than welcome.
37
+ See [Help & Support »](https://github.com/openfootball/help)
data/Rakefile ADDED
@@ -0,0 +1,30 @@
1
+ require 'hoe'
2
+ require './lib/fbup/version.rb'
3
+
4
+
5
+ Hoe.spec 'fbup' do
6
+ self.version = SportDb::Module::Fbup::VERSION
7
+
8
+ self.summary = "fbup - (auto-)update machinery for footbal match schedules & more in football.txt; incl. (auto-sync & commit) support for github openfootball repos & more"
9
+ self.description = summary
10
+
11
+ self.urls = { home: 'https://github.com/sportdb/sport.db' }
12
+
13
+ self.author = 'Gerald Bauer'
14
+ self.email = 'gerald.bauer@gmail.com'
15
+
16
+ # switch extension to .markdown for gihub formatting
17
+ self.readme_file = 'README.md'
18
+ self.history_file = 'CHANGELOG.md'
19
+
20
+ self.licenses = ['Public Domain']
21
+
22
+ self.extra_deps = [
23
+ ['sportdb-writers', '>= 0.4.0'],
24
+ ['gitti', '>= 0.6.1'],
25
+ ]
26
+
27
+ self.spec_extras = {
28
+ required_ruby_version: '>= 3.1.0'
29
+ }
30
+ end
data/bin/fbup ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ ## tip: to test run:
4
+ ## ruby -I ./lib bin/fbup
5
+ ## or
6
+ ## ruby -I fbup/lib fbup/bin/fbup
7
+
8
+
9
+
10
+ require 'fbup'
11
+
12
+
13
+ Fbup.main( ARGV )
14
+
15
+
16
+ puts "bye"
@@ -0,0 +1,117 @@
1
+ key, path
2
+
3
+ at, austria
4
+
5
+ de, deutschland
6
+ eng, england
7
+ es, espana
8
+ it, italy
9
+
10
+ fr, europe/france
11
+
12
+ hu, europe/hungary
13
+ gr, europe/greece
14
+ pt, europe/portugal
15
+
16
+ ch, europe/switzerland
17
+
18
+ tr, europe/turkey
19
+
20
+ is, europe/iceland
21
+ sco, europe/scotland
22
+ ie, europe/ireland
23
+
24
+ fi, europe/finland
25
+ se, europe/sweden
26
+ no, europe/norway
27
+ dk, europe/denmark
28
+
29
+ lu, europe/luxembourg
30
+ be, europe/belgium
31
+ nl, europe/netherlands
32
+ cz, europe/czech-republic
33
+
34
+ sk, europe/slovakia
35
+ hr, europe/croatia
36
+ pl, europe/poland
37
+
38
+ ro, europe/romania
39
+
40
+ ua, europe/ukraine
41
+
42
+ ru, europe/russia
43
+
44
+
45
+ al, europe/albania
46
+ ad, europe/andorra
47
+ by, europe/belarus
48
+ ba, europe/bosnia-herzegovina ## use bosnia-n-herzegovina ??
49
+ bg, europe/bulgaria
50
+ cy, europe/cyprus
51
+ ee, europe/estonia
52
+ lv, europe/latvia
53
+ li, europe/liechtenstein
54
+ lt, europe/lithuania
55
+ mk, europe/north-macedonia
56
+ mt, europe/malta
57
+ md, europe/moldova
58
+ me, europe/montenegro
59
+
60
+ sm, europe/san-marino
61
+ rs, europe/serbia
62
+ si, europe/slovenia
63
+
64
+ xk, europe/kosovo
65
+ kos, europe/kosovo
66
+
67
+ am, europe/armenia
68
+ az, europe/azerbaijan
69
+ ge, europe/georgia
70
+ fo, europe/faroe-islands
71
+ gi, europe/gibraltar
72
+
73
+ wal, europe/wales
74
+ nir, europe/northern-ireland
75
+
76
+
77
+
78
+ uefa.cl, champions-league
79
+ uefa.champs, champions-league
80
+ uefa.el, champions-league
81
+ uefa.europa, champions-league
82
+ uefa.conf, champions-league
83
+ uefa.con, champions-league
84
+
85
+ euro, euro
86
+
87
+
88
+
89
+ mx, mexico
90
+
91
+
92
+ ar, south-america/argentina
93
+ br, south-america/brazil
94
+ co, south-america/colombia
95
+
96
+ copa.l, south-america/copa-libertadores
97
+ copa.s, south-america/copa-libertadores
98
+
99
+
100
+ eg, africa/egypt
101
+ ma, africa/morocco
102
+ dz, africa/algeria
103
+ afl, africa/african-football-league
104
+ caf.cl, africa/champions-league
105
+ caf.champs, africa/champions-league
106
+
107
+
108
+ cn, world/asia/china
109
+ jp, world/asia/japan
110
+
111
+ kz, world/asia/kazakhstan
112
+
113
+ il, world/middle-east/israel
114
+
115
+
116
+
117
+ world, worldcup
@@ -0,0 +1,115 @@
1
+
2
+ module Fbup
3
+
4
+ ###
5
+ ## todo/fix:
6
+ ## add -i/--interactive flag
7
+ ## will prompt yes/no before git operations (with consequences)!!!
8
+
9
+
10
+
11
+ class GitHubSync
12
+
13
+ ########
14
+ ## (auto)default to Writer.config.out_dir - why? why not?
15
+ ##
16
+ ## note - is monotree (that is, requires openfootball/england etc.
17
+ ## for repo pathspecs)
18
+ def self.root() @root || "/sports"; end
19
+ def self.root=( dir ) @root = dir; end
20
+ ## use root_dir (or add alias) - why? why not?
21
+
22
+
23
+ REPOS = GitHubConfig.new
24
+ recs = read_csv( "#{SportDb::Module::Fbup.root}/config/openfootball.csv" )
25
+ REPOS.add( recs )
26
+
27
+ ## note: datasets of format
28
+ ##
29
+ ## DATASETS = [
30
+ ## ['it.1', %w[2020/21 2019/20]],
31
+ ## ['it.2', %w[2019/20]],
32
+ ## ['es.1', %w[2019/20]],
33
+ ## ['es.2', %w[2019/20]],
34
+ ## ]
35
+
36
+ def self.find_repos( datasets )
37
+ repos = []
38
+ datasets.each do |league_key, seasons|
39
+ repo = REPOS[ league_key ]
40
+ ## pp repo
41
+ if repo.nil?
42
+ puts "!! ERROR - no repo config/path found for league >#{league_key}<; sorry"
43
+ exit 1
44
+ end
45
+
46
+ repos << "#{repo['owner']}/#{repo['name']}"
47
+ end
48
+
49
+ pp repos
50
+ repos.uniq ## note: remove duplicates (e.g. europe or world or such)
51
+ end
52
+
53
+
54
+
55
+ def initialize( repos )
56
+ @repos = repos
57
+ end
58
+
59
+
60
+ def git_push_if_changes
61
+ message = "auto-update week #{Date.today.cweek}" ## add /#{Date.today.cday - why? why not?
62
+ puts message
63
+
64
+ @repos.each do |pathspec|
65
+ _git_push_if_changes( pathspec, message: message )
66
+ end
67
+ end
68
+
69
+ def git_fast_forward_if_clean
70
+ @repos.each do |pathspec|
71
+ _git_fast_forward_if_clean( pathspec )
72
+ end
73
+ end
74
+
75
+
76
+
77
+ ## todo/fix: rename to something like
78
+ ## git_(auto_)commit_and_push_if_changes/if_dirty()
79
+
80
+ def _git_push_if_changes( pathspec, message: )
81
+ path = "#{self.class.root}/#{pathspec}"
82
+
83
+ Gitti::GitProject.open( path ) do |proj|
84
+ puts ''
85
+ puts "###########################################"
86
+ puts "## trying to commit & push repo in path >#{path}<"
87
+ puts "Dir.getwd: #{Dir.getwd}"
88
+ output = proj.changes
89
+ if output.empty?
90
+ puts "no changes found; skipping commit & push"
91
+ else
92
+ proj.add( '.' )
93
+ proj.commit( message )
94
+ proj.push
95
+ end
96
+ end
97
+ end
98
+
99
+
100
+ def _git_fast_forward_if_clean( pathspec )
101
+ path = "#{self.class.root}/#{pathspec}"
102
+
103
+ Gitti::GitProject.open( path ) do |proj|
104
+ output = proj.changes
105
+ unless output.empty?
106
+ puts "FAIL - cannot git pull (fast-forward) - working tree has changes:"
107
+ puts output
108
+ exit 1
109
+ end
110
+
111
+ proj.fast_forward
112
+ end
113
+ end
114
+ end # class GitHub
115
+ end # module Fbup
@@ -0,0 +1,97 @@
1
+
2
+ module Fbup
3
+ class GitHubConfig
4
+
5
+ ## map leagues to repo+path
6
+ ## e.g. fr.1 => europe/france
7
+ ## eng..1 => england
8
+ ##
9
+ ## for other than openfootball (default)
10
+ ## use @
11
+ ## e.g. myorg@austria
12
+ ## austria@myorg ??
13
+ ##
14
+ ## myorg@europe/france
15
+ ## europe/france@myorg
16
+
17
+
18
+ def self.read( path )
19
+ recs = read_csv( path )
20
+ new( recs )
21
+ end
22
+
23
+ def initialize( recs=nil )
24
+ @table = {}
25
+ add( recs ) if recs
26
+ end
27
+
28
+
29
+ def add( recs )
30
+ recs.each do |rec|
31
+ path = rec['path'] ## use pathspec - why? why not?
32
+ ## or repospec or such
33
+
34
+ ## auto-expand to openfootball as default org if no @ specified
35
+ owner, path = if path.index( '@')
36
+ path.split( '@', 2 )
37
+ else
38
+ ['openfootball', path ]
39
+ end
40
+ name, path = path.split( '/', 2 )
41
+
42
+
43
+ ## openfootball@europe/france
44
+ ## =>
45
+ ## owner: openfootball
46
+ ## name: europe
47
+ ## path: france
48
+ ##
49
+ ## openfootball@austria
50
+ ## =>
51
+ ## owner: openfootball
52
+ ## name: austria
53
+ ## path: nil
54
+ @table[ rec['key'] ] = { 'owner' => owner, ## (required)
55
+ 'name' => name, ## (required)
56
+ 'path' => path ## extra/inner/inside/local path (optional)
57
+ }
58
+ end
59
+ end
60
+
61
+
62
+ ##
63
+ ## todo/fix:
64
+ ## make key lookup more flexible
65
+ ## auto-add more variants!!!
66
+ ## e.g. at.1 AT1, AT or such
67
+ ##
68
+
69
+ ## find (full) record by key
70
+ def find( key )
71
+ key = key.to_s.downcase
72
+
73
+ ## first check for 1:1 match
74
+ rec = @table[key]
75
+ if rec.nil?
76
+ ## try match by (country / first) code
77
+ ## split by .
78
+ key, _ = key.split( '.' )
79
+ rec = @table[key]
80
+ end
81
+
82
+ rec
83
+ end
84
+ alias_method :[], :find ## keep alias - why? why not?
85
+
86
+
87
+ def find_repo( key )
88
+ rec = _find( key )
89
+
90
+ rec ? "#{rec['owner']}/#{rec['name']}" : nil
91
+ end
92
+
93
+ end # class GitHubConfig
94
+ end # module Fbup
95
+
96
+
97
+
data/lib/fbup/main.rb ADDED
@@ -0,0 +1,165 @@
1
+
2
+ module Fbup
3
+ def self.main( args=ARGV )
4
+
5
+ opts = {
6
+ source_path: [],
7
+ push: false,
8
+ ffwd: false,
9
+ dry: false, ## dry run (no write)
10
+ test: true, ## sets push & ffwd to false
11
+ debug: true,
12
+ file: nil,
13
+ test_dir: './o',
14
+ }
15
+
16
+
17
+ parser = OptionParser.new do |parser|
18
+ parser.banner = "Usage: #{$PROGRAM_NAME} [options] [args]"
19
+
20
+ parser.on( "-p", "--[no-]push",
21
+ "fast forward sync and commit & push changes to git repo - default is (#{opts[:push]})" ) do |push|
22
+ opts[:push] = push
23
+ if opts[:push] ## note: autoset ffwd too if push == true
24
+ opts[:ffwd] = true
25
+ opts[:test] = false
26
+ end
27
+ end
28
+ ## todo/check - add a --ffwd flag too - why? why not?
29
+
30
+ parser.on( "-t", "--test",
31
+ "test run; writing output to #{opts[:test_dir]} - default is #{opts[:test]}" ) do |test|
32
+ opts[:test] = true
33
+ opts[:push] = false
34
+ opts[:ffwd] = false
35
+ end
36
+
37
+ parser.on( "--dry",
38
+ "dry run; do NOT write - default is (#{opts[:dry]})" ) do |dry|
39
+ opts[:dry] = dry
40
+ opts[:test] = false
41
+ opts[:push] = false ### autoset push & ffwd - why? why not?
42
+ opts[:ffwd] = false
43
+ end
44
+
45
+ parser.on( "-q", "--quiet",
46
+ "less debug output/messages - default is (#{!opts[:debug]})" ) do |debug|
47
+ opts[:debug] = false
48
+ end
49
+
50
+ parser.on( "-I DIR", "--include DIR",
51
+ "add directory to (source) search path - default is (#{opts[:source_path].join(',')})") do |dir|
52
+ opts[:source_path] += path
53
+ end
54
+
55
+ parser.on( "-f FILE", "--file FILE",
56
+ "read leagues (and seasons) via .csv file") do |file|
57
+ opts[:file] = file
58
+ end
59
+ end
60
+ parser.parse!( args )
61
+
62
+
63
+ if opts[:source_path].empty? &&
64
+ File.exist?( '/sports/cache.api.fbdat') &&
65
+ File.exist?( '/sports/cache.wfb' )
66
+ opts[:source_path] << '/sports/cache.api.fbdat'
67
+ opts[:source_path] << '/sports/cache.wfb'
68
+ end
69
+
70
+ if opts[:source_path].empty?
71
+ opts[:source_path] = ['.'] ## use ./ as default
72
+ end
73
+
74
+
75
+
76
+ puts "OPTS:"
77
+ p opts
78
+ puts "ARGV:"
79
+ p args
80
+
81
+
82
+ datasets = if opts[:file]
83
+ read_leagueset( opts[:file] )
84
+ else
85
+ parse_leagueset_args( args )
86
+ end
87
+
88
+ puts "datasets:"
89
+ pp datasets
90
+
91
+
92
+ source_path = opts[:source_path]
93
+
94
+ root_dir = if opts[:test]
95
+ opts[:test_dir]
96
+ else
97
+ GitHubSync.root # e.g. "/sports"
98
+ end
99
+
100
+ puts " (output) root_dir: >#{root_dir}<"
101
+
102
+ repos = GitHubSync.find_repos( datasets )
103
+ puts " #{repos.size} repo(s):"
104
+ pp repos
105
+ sync = GitHubSync.new( repos )
106
+
107
+ puts " sync:"
108
+ pp sync
109
+
110
+
111
+
112
+ sync.git_fast_forward_if_clean if opts[:ffwd]
113
+
114
+ ### step 0 - validate and fill-in seasons etc.
115
+ datasets.validate!( source_path: source_path )
116
+
117
+
118
+
119
+ datasets.each do |league_key, seasons|
120
+ puts "==> gen #{league_key} - #{seasons.size} seasons(s)..."
121
+
122
+ league_info = find_league_info( league_key )
123
+ pp league_info
124
+
125
+ seasons.each do |season|
126
+ filename = "#{season.to_path}/#{league_key}.csv"
127
+ path = find_file( filename, path: source_path )
128
+
129
+ ### get matches
130
+ puts " ---> reading matches in #{path} ..."
131
+ matches = SportDb::CsvMatchParser.read( path )
132
+ puts " #{matches.size} matches"
133
+
134
+ ## build
135
+ txt = SportDb::TxtMatchWriter.build( matches )
136
+ puts txt if opts[:debug]
137
+
138
+ league_name = league_info[ :name ] # e.g. Brasileiro Série A
139
+ basename = league_info[ :basename] #.e.g 1-seriea
140
+
141
+ league_name = league_name.call( season ) if league_name.is_a?( Proc ) ## is proc/func - name depends on season
142
+ basename = basename.call( season ) if basename.is_a?( Proc ) ## is proc/func - name depends on season
143
+
144
+ buf = String.new
145
+ buf << "= #{league_name} #{season}\n\n"
146
+ buf << txt
147
+
148
+ repo = GitHubSync::REPOS[ league_key ]
149
+ repo_path = "#{repo['owner']}/#{repo['name']}"
150
+ repo_path << "/#{repo['path']}" if repo['path'] ## note: do NOT forget to add optional extra path!!!
151
+
152
+ outpath = "#{root_dir}/#{repo_path}/#{season.to_path}/#{basename}.txt"
153
+
154
+ if opts[:dry]
155
+ puts " (dry) writing to >#{outpath}<..."
156
+ else
157
+ write_text( outpath, buf )
158
+ end
159
+ end
160
+ end
161
+
162
+ sync.git_push_if_changes if opts[:push]
163
+
164
+ end # method self.main
165
+ end # module Fbup
@@ -0,0 +1,24 @@
1
+
2
+ module SportDb
3
+ module Module
4
+ module Fbup
5
+ MAJOR = 0 ## todo: namespace inside version or something - why? why not??
6
+ MINOR = 0
7
+ PATCH = 1
8
+ VERSION = [MAJOR,MINOR,PATCH].join('.')
9
+
10
+ def self.version
11
+ VERSION
12
+ end
13
+
14
+ def self.banner
15
+ "fbup/#{VERSION} on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}] in (#{root})"
16
+ end
17
+
18
+ def self.root
19
+ File.expand_path( File.dirname(File.dirname(File.dirname(__FILE__))) )
20
+ end
21
+
22
+ end # module Fbup
23
+ end # module Module
24
+ end # module SportDb
data/lib/fbup.rb ADDED
@@ -0,0 +1,27 @@
1
+
2
+ require 'sportdb/writers'
3
+
4
+
5
+ require 'optparse' ## command-line processing; check if included updstream?
6
+
7
+ ########################
8
+ # push & pull github scripts
9
+ require 'gitti' ## note - requires git machinery
10
+
11
+
12
+
13
+ ###
14
+ # our own code
15
+ require_relative 'fbup/version'
16
+
17
+ require_relative 'fbup/github_config'
18
+ require_relative 'fbup/github' ## github helpers/update machinery
19
+
20
+
21
+ require_relative 'fbup/main'
22
+
23
+
24
+
25
+
26
+
27
+ puts SportDb::Module::Fbup.banner # say hello
metadata ADDED
@@ -0,0 +1,124 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fbup
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Gerald Bauer
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-12-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sportdb-writers
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.4.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 0.4.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: gitti
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 0.6.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 0.6.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: rdoc
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '4.0'
48
+ - - "<"
49
+ - !ruby/object:Gem::Version
50
+ version: '7'
51
+ type: :development
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: '4.0'
58
+ - - "<"
59
+ - !ruby/object:Gem::Version
60
+ version: '7'
61
+ - !ruby/object:Gem::Dependency
62
+ name: hoe
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '4.2'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '4.2'
75
+ description: fbup - (auto-)update machinery for footbal match schedules & more in
76
+ football.txt; incl. (auto-sync & commit) support for github openfootball repos &
77
+ more
78
+ email: gerald.bauer@gmail.com
79
+ executables:
80
+ - fbup
81
+ extensions: []
82
+ extra_rdoc_files:
83
+ - CHANGELOG.md
84
+ - Manifest.txt
85
+ - README.md
86
+ files:
87
+ - CHANGELOG.md
88
+ - Manifest.txt
89
+ - README.md
90
+ - Rakefile
91
+ - bin/fbup
92
+ - config/openfootball.csv
93
+ - lib/fbup.rb
94
+ - lib/fbup/github.rb
95
+ - lib/fbup/github_config.rb
96
+ - lib/fbup/main.rb
97
+ - lib/fbup/version.rb
98
+ homepage: https://github.com/sportdb/sport.db
99
+ licenses:
100
+ - Public Domain
101
+ metadata: {}
102
+ post_install_message:
103
+ rdoc_options:
104
+ - "--main"
105
+ - README.md
106
+ require_paths:
107
+ - lib
108
+ required_ruby_version: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: 3.1.0
113
+ required_rubygems_version: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ requirements: []
119
+ rubygems_version: 3.5.22
120
+ signing_key:
121
+ specification_version: 4
122
+ summary: fbup - (auto-)update machinery for footbal match schedules & more in football.txt;
123
+ incl. (auto-sync & commit) support for github openfootball repos & more
124
+ test_files: []