rsssf 0.2.0 → 0.3.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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +2 -0
  3. data/Manifest.txt +39 -2
  4. data/README.md +67 -62
  5. data/Rakefile +2 -2
  6. data/config/groups_en.txt +44 -0
  7. data/config/rounds_en.txt +283 -0
  8. data/config/rounds_es.txt +20 -0
  9. data/config/rounds_misc.txt +7 -0
  10. data/lib/_cocos_.rb +158 -0
  11. data/lib/rsssf/convert/convert.rb +71 -0
  12. data/lib/rsssf/convert/errata.rb +103 -0
  13. data/lib/rsssf/convert/html_entities.rb +150 -0
  14. data/lib/rsssf/convert/html_to_txt/beautify_anchors.rb +96 -0
  15. data/lib/rsssf/convert/html_to_txt/make_heading.rb +70 -0
  16. data/lib/rsssf/convert/html_to_txt/remove_emails.rb +43 -0
  17. data/lib/rsssf/convert/html_to_txt/replace_a_href.rb +85 -0
  18. data/lib/rsssf/convert/html_to_txt/replace_a_name.rb +87 -0
  19. data/lib/rsssf/convert/html_to_txt/replace_heading.rb +76 -0
  20. data/lib/rsssf/convert/html_to_txt/replace_hr.rb +25 -0
  21. data/lib/rsssf/convert/html_to_txt.rb +247 -0
  22. data/lib/rsssf/download.rb +4 -135
  23. data/lib/rsssf/fmtfix/dates.rb +541 -0
  24. data/lib/rsssf/fmtfix/dates_helpers.rb +63 -0
  25. data/lib/rsssf/fmtfix/errata.rb +44 -0
  26. data/lib/rsssf/fmtfix/fmtfix-base.rb +68 -0
  27. data/lib/rsssf/fmtfix/fmtfix.rb +101 -0
  28. data/lib/rsssf/fmtfix/goals.rb +173 -0
  29. data/lib/rsssf/fmtfix/headers.rb +326 -0
  30. data/lib/rsssf/fmtfix/outline.rb +228 -0
  31. data/lib/rsssf/fmtfix/patch_headings.rb +141 -0
  32. data/lib/rsssf/fmtfix/rounds.rb +74 -0
  33. data/lib/rsssf/fmtfix/score.rb +92 -0
  34. data/lib/rsssf/fmtfix/tables.rb +316 -0
  35. data/lib/rsssf/fmtfix/topscorers.rb +50 -0
  36. data/lib/rsssf/page-find_schedule.rb +127 -0
  37. data/lib/rsssf/page-meta.rb +68 -0
  38. data/lib/rsssf/page.rb +89 -227
  39. data/lib/rsssf/parse_schedules.rb +34 -0
  40. data/lib/rsssf/prepare/convert-links.rb +77 -0
  41. data/lib/rsssf/prepare/convert-meta.rb +111 -0
  42. data/lib/rsssf/prepare/convert-navlines.rb +154 -0
  43. data/lib/rsssf/prepare/convert-postproc.rb +141 -0
  44. data/lib/rsssf/prepare/convert.rb +100 -0
  45. data/lib/rsssf/prepare/download.rb +40 -0
  46. data/lib/rsssf/project.rb +154 -0
  47. data/lib/rsssf/reports/page.rb +40 -8
  48. data/lib/rsssf/reports/schedule.rb +18 -55
  49. data/lib/rsssf/utils.rb +28 -17
  50. data/lib/rsssf/version.rb +5 -2
  51. data/lib/rsssf.rb +53 -13
  52. metadata +50 -9
  53. data/lib/rsssf/convert.rb +0 -495
  54. data/lib/rsssf/repo.rb +0 -144
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Rsssf
4
4
 
5
-
5
+
6
6
  ScheduleStat = Struct.new(
7
7
  :path, ## path to .txt file
8
8
  :errors ## array or nil
@@ -17,32 +17,21 @@ class ScheduleReport
17
17
  ##
18
18
  ## quick hack? pass along (optional) patch
19
19
 
20
- def self.build( files, title:,
20
+
21
+ def self.build( files, title:,
21
22
  patch: nil )
22
- linter = Parser::Linter.new
23
23
 
24
24
  stats = []
25
25
  files.each_with_index do |file,i|
26
26
 
27
- puts "==> [#{i+1}/#{files.size}] reading >#{file}<..."
27
+ puts "==> [#{i+1}/#{files.size}] reading >#{file}<..."
28
28
 
29
29
  txt = read_text( file )
30
30
 
31
- if patch && patch.respond_to?(:on_parse)
32
- season_dir = File.basename(File.dirname(file))
33
- season = Season( season_dir )
34
- basename = File.basename(file, File.extname(file))
35
- puts " [debug] before patch.on_parse #{basename}, #{season}"
36
- txt = patch.on_parse( txt, basename, season )
37
- end
38
-
39
- linter.parse( txt, parse: true,
40
- path: file ) ## todo/fix - change path to file/filename - why? why not?
41
-
42
31
  stat = ScheduleStat.new
43
32
  stat.path = file
44
- stat.errors = linter.errors
45
-
33
+ stat.errors = []
34
+
46
35
  stats << stat
47
36
  end
48
37
 
@@ -53,7 +42,7 @@ end
53
42
  attr_reader :title
54
43
 
55
44
  def initialize( stats, title: )
56
- @stats = stats
45
+ @stats = stats
57
46
  @title = title
58
47
  end
59
48
 
@@ -62,7 +51,7 @@ def save( path ) write_text( path, build_summary ); end
62
51
 
63
52
 
64
53
  def build_summary
65
- ## sort start 1) by season (latest first) than
54
+ ## sort start 1) by season (latest first) than
66
55
  ## 2) by name (e.g. 1-bundesliga, cup, etc.)
67
56
  stats = @stats.sort do |l,r|
68
57
  v = File.basename(File.dirname(r.path)) <=> File.basename(File.dirname(l.path))
@@ -70,63 +59,48 @@ def build_summary
70
59
  v
71
60
  end
72
61
 
73
- header =<<EOS
62
+ header =<<TXT
74
63
 
75
64
  # #{title}
76
65
 
77
66
  football.db RSSSF (Rec.Sport.Soccer Statistics Foundation) Archive Data for
78
67
  #{title}
79
68
 
80
- EOS
81
-
82
- ## no longer add last update
83
- ## _Last Update: #{Time.now}_
84
- ##
69
+ TXT
85
70
 
86
71
 
87
- =begin
88
- footer =<<EOS
89
-
90
- ## Questions? Comments?
91
-
92
- Send them along to the
93
- [Open Sports & Friends Forum](http://groups.google.com/group/opensport).
94
- Thanks!
95
- EOS
96
- =end
97
-
98
72
 
99
73
  errors = []
100
74
 
101
75
 
102
76
  txt = String.new
103
77
  txt << header
104
-
78
+
105
79
  txt << "| Season | League, Cup | Errors |\n"
106
80
  txt << "| :----- | :---------- | -----: |\n"
107
81
 
108
-
82
+
109
83
  stats.each_with_index do |stat,i|
110
-
84
+
111
85
  path = stat.path
112
86
  season_dir = File.basename(File.dirname( path ))
113
87
  filename = File.basename( path ) ## incl. extension !!
114
88
 
115
89
  season = Season( season_dir )
116
90
  ## note - use archive_dir_for_season for archive path
117
-
91
+
118
92
 
119
93
  txt << "| #{season_dir} "
120
94
  txt << "| [#{filename}](#{archive_dir_for_season(season)}/#{filename}) "
121
-
95
+
122
96
  txt << if stat.errors.size > 0
123
97
  "| **!! #{stat.errors.size}** "
124
98
  else
125
99
  "| OK "
126
100
  end
127
101
  txt << "|\n"
128
-
129
- errors += stat.errors if stat.errors.size > 0
102
+
103
+ errors += stat.errors if stat.errors.size > 0
130
104
  end
131
105
 
132
106
  if errors.size > 0
@@ -137,27 +111,16 @@ EOS
137
111
  errors.each do |path, msg, line|
138
112
  season_dir = File.basename(File.dirname( path ))
139
113
  filename = File.basename( path ) ## incl. extension !!
140
-
114
+
141
115
  txt <<"#{season_dir}/#{filename} -- #{msg}\n"
142
116
  txt << " in line >#{line}<\n" unless line.empty?
143
117
  end
144
118
  txt << "```\n"
145
119
  end
146
120
 
147
- =begin
148
- stats.each do |stat|
149
- txt << "| #{stat.season} "
150
- txt << "| [#{stat.filename}](#{stat.path}/#{stat.filename}) "
151
- txt << "| #{stat.rounds} "
152
- txt << "|\n"
153
- end
154
- =end
155
121
 
156
-
157
- ## txt << footer
158
122
  txt
159
123
  end # method build_summary
160
124
 
161
125
  end ## class ScheduleReport
162
126
  end ## module Rsssf
163
-
data/lib/rsssf/utils.rb CHANGED
@@ -6,30 +6,42 @@ module Utils
6
6
  ## move to Page - why? why not?
7
7
 
8
8
  def year_from_file( path )
9
- extname = File.extname( path )
10
- basename = File.basename( path, extname ) ## e.g. duit92.txt or duit92.html => duit92
9
+ ## e.g. duit92.txt or duit92.html => duit92
10
+ basename = File.basename( path, File.extname( path ))
11
11
  year_from_name( basename )
12
12
  end
13
13
 
14
14
 
15
+
16
+
17
+ ## note - add lookbehind and lookahead for boundary NOT A NUMBER!!
18
+ ## other will match 4 digits in 5 digits number etc.
19
+ ## or 2 digits in 3 digits number etc.
20
+
21
+ YEAR_FROM_NAME_RE = %r{ (?<! \d) ## note - no digit before allowed
22
+ (?: \d{4}
23
+ | \d{2} )
24
+ (?! \d) ## no digit after allowed
25
+ }x
26
+
15
27
  def year_from_name( name )
16
- if name =~ /(\d+)/
17
- digits = $1.to_s
18
- num = digits.to_i
28
+ ## note - make sure it works for special case like:
29
+ ## mex2-2010 !!!
30
+ ## only match two digits (YY) or four digits (YYYY)
31
+
32
+ if m=YEAR_FROM_NAME_RE.match( name )
33
+ digits = m[0].to_s
34
+ num = digits.to_i(10)
19
35
 
20
36
  if digits.size == 4 ## e.g. 1980 or 2011 etc.
21
- num
22
- elsif digits.size == 2 ## e.g. 00, 20 or 99 etc.
23
- if num <= 16 ## assume 20xx for now from 00..16
24
- 2000+num
25
- else ## assume 19xx for now
26
- 1900+num
27
- end
28
- else
29
- fail( "no year found in name #{name}; expected two or four digits")
37
+ num
38
+ else ## digits.size == 2 ## e.g. 00, 20 or 99 etc.
39
+ ## assume 20xx for now from 00..09
40
+ ## assume 19xx for 10..99
41
+ num <= 9 ? 2000+num : 1900+num
30
42
  end
31
43
  else
32
- fail( "no year found in name #{name}")
44
+ fail( "no year found in name #{name}; expected two or four digits")
33
45
  end
34
46
  end # method year_from_name
35
47
 
@@ -38,7 +50,7 @@ end # method year_from_name
38
50
  def archive_dir_for_season( season )
39
51
  season = Season( season )
40
52
 
41
- if season < Season('2010') # e.g. season 2009-10
53
+ if season < Season('2010') # e.g. season 2009-10
42
54
  ## use archive folder (w/ 1980s etc)
43
55
  ## get decade folder
44
56
  decade = season.start_year ## 1999/2000 2000
@@ -53,4 +65,3 @@ end
53
65
 
54
66
  end # module Utils
55
67
  end # module Rsssf
56
-
data/lib/rsssf/version.rb CHANGED
@@ -2,7 +2,7 @@
2
2
  module Rsssf
3
3
 
4
4
  MAJOR = 0
5
- MINOR = 2
5
+ MINOR = 3
6
6
  PATCH = 0
7
7
  VERSION = [MAJOR,MINOR,PATCH].join('.')
8
8
 
@@ -18,5 +18,8 @@ module Rsssf
18
18
  File.expand_path( File.dirname(File.dirname(File.dirname(__FILE__))) )
19
19
  end
20
20
 
21
- end # module Rsssf
21
+ def self.config_dir
22
+ "#{root}/config"
23
+ end
22
24
 
25
+ end # module Rsssf
data/lib/rsssf.rb CHANGED
@@ -1,38 +1,79 @@
1
+ $LOAD_PATH.unshift( '/sports/rubycocos/webclient/webclient/lib' )
2
+ $LOAD_PATH.unshift( '/sports/rubycocos/webclient/webget/lib' )
3
+
1
4
 
2
5
  ## 3rd party (our own)
3
6
  require 'season/formats' ## add season support
4
7
  require 'webget' ## incl. webget, webcache, webclient, etc.
5
8
 
6
9
  require 'cocos'
10
+ require_relative '_cocos_' ## move/add to upstream!!!
7
11
 
8
12
 
9
- ## (old) 3rd party libs
10
- ## require 'textutils' ## used for File.read_utf8 etc.
11
- ## require 'fetcher' ## used for Fetcher::Worker.new.fetch etc.
12
13
 
14
+ ## our own code
15
+ require_relative 'rsssf/version' # note: let version always go first
13
16
 
14
- #######
15
- ## add RsssfParser too
16
- require 'rsssf/parser' ## from rsssf-parser gem
17
+ require_relative 'rsssf/utils' # include Utils - goes first
17
18
 
19
+ require_relative 'rsssf/download'
18
20
 
21
+ require_relative 'rsssf/convert/convert'
22
+ require_relative 'rsssf/convert/html_entities'
23
+ require_relative 'rsssf/convert/html_to_txt'
24
+ require_relative 'rsssf/convert/errata'
25
+ require_relative 'rsssf/convert/html_to_txt/replace_heading'
26
+ require_relative 'rsssf/convert/html_to_txt/replace_a_name'
27
+ require_relative 'rsssf/convert/html_to_txt/replace_a_href'
28
+ require_relative 'rsssf/convert/html_to_txt/replace_hr'
29
+ require_relative 'rsssf/convert/html_to_txt/remove_emails'
30
+ require_relative 'rsssf/convert/html_to_txt/beautify_anchors'
31
+ require_relative 'rsssf/convert/html_to_txt/make_heading'
19
32
 
20
33
 
21
- ## our own code
22
- require_relative 'rsssf/version' # note: let version always go first
34
+ require_relative 'rsssf/prepare/download'
35
+ require_relative 'rsssf/prepare/convert'
36
+ require_relative 'rsssf/prepare/convert-meta'
37
+ require_relative 'rsssf/prepare/convert-links'
38
+ require_relative 'rsssf/prepare/convert-postproc'
39
+ require_relative 'rsssf/prepare/convert-navlines'
23
40
 
24
- require_relative 'rsssf/utils' # include Utils - goes first
25
41
 
26
- require_relative 'rsssf/download'
27
42
 
28
- require_relative 'rsssf/convert'
29
43
  require_relative 'rsssf/page'
44
+ require_relative 'rsssf/page-meta' # e.g. Page.parse_meta( txt )
45
+ require_relative 'rsssf/page-find_schedule.rb'
46
+
30
47
  require_relative 'rsssf/schedule'
31
48
 
32
49
  require_relative 'rsssf/reports/schedule'
33
50
  require_relative 'rsssf/reports/page'
34
51
 
35
- require_relative 'rsssf/repo'
52
+ require_relative 'rsssf/project' ### replace with projct
53
+
54
+ require_relative 'rsssf/parse_schedules'
55
+
56
+
57
+
58
+ ###
59
+ # fmtfix machinery
60
+
61
+
62
+ require_relative 'rsssf/fmtfix/rounds'
63
+ require_relative 'rsssf/fmtfix/dates_helpers'
64
+ require_relative 'rsssf/fmtfix/dates'
65
+ require_relative 'rsssf/fmtfix/headers'
66
+
67
+ require_relative 'rsssf/fmtfix/fmtfix-base'
68
+ require_relative 'rsssf/fmtfix/fmtfix'
69
+ require_relative 'rsssf/fmtfix/errata'
70
+ require_relative 'rsssf/fmtfix/score'
71
+ require_relative 'rsssf/fmtfix/goals'
72
+ require_relative 'rsssf/fmtfix/topscorers'
73
+ require_relative 'rsssf/fmtfix/tables'
74
+ require_relative 'rsssf/fmtfix/outline'
75
+ require_relative 'rsssf/fmtfix/patch_headings' ## or use outline_patch or such - why? why not?
76
+
36
77
 
37
78
 
38
79
 
@@ -48,7 +89,6 @@ RsssfSchedule = Rsssf::Schedule
48
89
  RsssfScheduleStat = Rsssf::ScheduleStat
49
90
  RsssfScheduleReport = Rsssf::ScheduleReport
50
91
 
51
- RsssfRepo = Rsssf::Repo
52
92
  RsssfUtils = Rsssf::Utils
53
93
 
54
94
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rsssf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-07-22 00:00:00.000000000 Z
11
+ date: 2026-05-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cocos
@@ -39,7 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rsssf-parser
42
+ name: webget
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
@@ -78,14 +78,14 @@ dependencies:
78
78
  requirements:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: '4.1'
81
+ version: '4.2'
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: '4.1'
88
+ version: '4.2'
89
89
  description: rsssf - tools 'n' scripts for RSSSF (Rec.Sport.Soccer Statistics Foundation)
90
90
  archive data
91
91
  email: gerald.bauer@gmail.com
@@ -95,22 +95,63 @@ extra_rdoc_files:
95
95
  - CHANGELOG.md
96
96
  - Manifest.txt
97
97
  - README.md
98
+ - config/groups_en.txt
99
+ - config/rounds_en.txt
100
+ - config/rounds_es.txt
101
+ - config/rounds_misc.txt
98
102
  files:
99
103
  - CHANGELOG.md
100
104
  - Manifest.txt
101
105
  - README.md
102
106
  - Rakefile
107
+ - config/groups_en.txt
108
+ - config/rounds_en.txt
109
+ - config/rounds_es.txt
110
+ - config/rounds_misc.txt
111
+ - lib/_cocos_.rb
103
112
  - lib/rsssf.rb
104
- - lib/rsssf/convert.rb
113
+ - lib/rsssf/convert/convert.rb
114
+ - lib/rsssf/convert/errata.rb
115
+ - lib/rsssf/convert/html_entities.rb
116
+ - lib/rsssf/convert/html_to_txt.rb
117
+ - lib/rsssf/convert/html_to_txt/beautify_anchors.rb
118
+ - lib/rsssf/convert/html_to_txt/make_heading.rb
119
+ - lib/rsssf/convert/html_to_txt/remove_emails.rb
120
+ - lib/rsssf/convert/html_to_txt/replace_a_href.rb
121
+ - lib/rsssf/convert/html_to_txt/replace_a_name.rb
122
+ - lib/rsssf/convert/html_to_txt/replace_heading.rb
123
+ - lib/rsssf/convert/html_to_txt/replace_hr.rb
105
124
  - lib/rsssf/download.rb
125
+ - lib/rsssf/fmtfix/dates.rb
126
+ - lib/rsssf/fmtfix/dates_helpers.rb
127
+ - lib/rsssf/fmtfix/errata.rb
128
+ - lib/rsssf/fmtfix/fmtfix-base.rb
129
+ - lib/rsssf/fmtfix/fmtfix.rb
130
+ - lib/rsssf/fmtfix/goals.rb
131
+ - lib/rsssf/fmtfix/headers.rb
132
+ - lib/rsssf/fmtfix/outline.rb
133
+ - lib/rsssf/fmtfix/patch_headings.rb
134
+ - lib/rsssf/fmtfix/rounds.rb
135
+ - lib/rsssf/fmtfix/score.rb
136
+ - lib/rsssf/fmtfix/tables.rb
137
+ - lib/rsssf/fmtfix/topscorers.rb
138
+ - lib/rsssf/page-find_schedule.rb
139
+ - lib/rsssf/page-meta.rb
106
140
  - lib/rsssf/page.rb
107
- - lib/rsssf/repo.rb
141
+ - lib/rsssf/parse_schedules.rb
142
+ - lib/rsssf/prepare/convert-links.rb
143
+ - lib/rsssf/prepare/convert-meta.rb
144
+ - lib/rsssf/prepare/convert-navlines.rb
145
+ - lib/rsssf/prepare/convert-postproc.rb
146
+ - lib/rsssf/prepare/convert.rb
147
+ - lib/rsssf/prepare/download.rb
148
+ - lib/rsssf/project.rb
108
149
  - lib/rsssf/reports/page.rb
109
150
  - lib/rsssf/reports/schedule.rb
110
151
  - lib/rsssf/schedule.rb
111
152
  - lib/rsssf/utils.rb
112
153
  - lib/rsssf/version.rb
113
- homepage: https://github.com/sportdb/sport.db.sources
154
+ homepage: https://github.com/rsssf/scripts
114
155
  licenses:
115
156
  - Public Domain
116
157
  metadata: {}
@@ -131,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
131
172
  - !ruby/object:Gem::Version
132
173
  version: '0'
133
174
  requirements: []
134
- rubygems_version: 3.4.10
175
+ rubygems_version: 3.5.22
135
176
  signing_key:
136
177
  specification_version: 4
137
178
  summary: rsssf - tools 'n' scripts for RSSSF (Rec.Sport.Soccer Statistics Foundation)