football-timezones 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: f628a9691af73e5ab5f28f1be1cd09bae28ecf6e064e7efc4cb91867c182bf0a
4
+ data.tar.gz: 6273d92f3482d84bf785b6c161e4b71cf84172802c3ad40ffe3119f45c7f5fdf
5
+ SHA512:
6
+ metadata.gz: 6424048a8a71b877fe32a3ed0278b79391f04cfea1836e09750a64aadc246f6a2df5e57560e0ff3e502b78b26a286843636b18520f346c7add1afe85bfe6e9fe
7
+ data.tar.gz: 9091b37b0f6ef280c1927b32299886318f401fbaa0c9c90da2a70d0542351ab67190e2bc9ea5f946de7557c03d279cf2983eb9cd8a75ba2e70ab0062e4c4ba68
data/CHANGELOG.md ADDED
@@ -0,0 +1,4 @@
1
+ ### 0.0.1 / 2024-09-11
2
+
3
+ * Everything is new. First release.
4
+
data/Manifest.txt ADDED
@@ -0,0 +1,12 @@
1
+ CHANGELOG.md
2
+ Manifest.txt
3
+ README.md
4
+ Rakefile
5
+ config/timezones_africa.csv
6
+ config/timezones_america.csv
7
+ config/timezones_asia.csv
8
+ config/timezones_europe.csv
9
+ config/timezones_world.csv
10
+ lib/football-timezones.rb
11
+ lib/football-timezones/version.rb
12
+ lib/football/timezones.rb
data/README.md ADDED
@@ -0,0 +1,25 @@
1
+ # football-timezones - time & timezone helpers for football (league) data
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/football-timezones](https://rubygems.org/gems/football-timezones)
7
+ * rdoc :: [rubydoc.info/gems/football-timezones](http://rubydoc.info/gems/football-timezones)
8
+
9
+
10
+
11
+ ## Usage
12
+
13
+ ...
14
+
15
+
16
+ ## License
17
+
18
+ The `football-timezones` scripts are dedicated to the public domain.
19
+ Use it as you please with no restrictions whatsoever.
20
+
21
+
22
+ ## Questions? Comments?
23
+
24
+ Yes, you can. More than welcome.
25
+ See [Help & Support »](https://github.com/openfootball/help)
data/Rakefile ADDED
@@ -0,0 +1,32 @@
1
+ require 'hoe'
2
+ require './lib/football-timezones/version.rb'
3
+
4
+ Hoe.spec 'football-timezones' do
5
+
6
+ self.version = SportDb::Module::Timezones::VERSION
7
+
8
+ self.summary = "football-timezones - time & timezone helpers for football (league) data"
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.extra_deps = [
21
+ ['tzinfo'],
22
+ ['season-formats'],
23
+ ['cocos'],
24
+ ]
25
+
26
+ self.licenses = ['Public Domain']
27
+
28
+ self.spec_extras = {
29
+ required_ruby_version: '>= 3.1.0'
30
+ }
31
+
32
+ end
@@ -0,0 +1,4 @@
1
+ key, zone
2
+
3
+ eg, Africa/Cairo # +3 (gmt+3)
4
+
@@ -0,0 +1,29 @@
1
+ key, zone
2
+
3
+
4
+ us, America/New_York # (gmt-5) new york
5
+ ca, America/Toronto
6
+
7
+ mx, America/Mexico_City
8
+
9
+
10
+ cr, America/Costa_Rica # gmt-6
11
+ gt, America/Guatemala # gmt-6
12
+ hn, America/Tegucigalpa # gmt-6
13
+ sv, America/El_Salvador # gmt-6
14
+ ni, America/Managua # gmt-6
15
+
16
+ uy, America/Montevideo # gmt-3
17
+ pe, America/Lima # gmt-5
18
+ ec, America/Guayaquil # gmt-5
19
+ co, America/Bogota
20
+ bo, America/La_Paz # gmt-4
21
+ cl, America/Santiago # gmt-4
22
+
23
+ br, America/Sao_Paulo # gmt-3 - change to -3?
24
+ ar, America/Argentina/Buenos_Aires # gmt-3 - change to -3?
25
+
26
+
27
+ concacaf.cl, America/Mexico_City ### use mx time
28
+ copa.l, America/Sao_Paulo ### use brazil time
29
+
@@ -0,0 +1,9 @@
1
+ key, zone
2
+
3
+ jp, Asia/Tokyo # +9 (gmt+9)
4
+ kr, Asia/Seoul
5
+ cn, Asia/Shanghai # +7 (gmt+7)
6
+
7
+
8
+
9
+
@@ -0,0 +1,47 @@
1
+ key, zone
2
+
3
+ eng, Europe/London
4
+ sco, Europe/London ## check if entry or Edingburgh or such exits
5
+ ie, Europe/Dublin
6
+
7
+ es, Europe/Madrid
8
+ de, Europe/Berlin
9
+ fr, Europe/Paris
10
+ it, Europe/Rome
11
+
12
+ pt, Europe/Lisbon
13
+
14
+
15
+
16
+
17
+ fi, Europe/Helsinki # +2
18
+ gr, Europe/Athens
19
+ ro, Europe/Bucharest
20
+ ua, Europe/Kyiv
21
+
22
+
23
+ ru, Europe/Moscow
24
+ tr, Europe/Istanbul # +3 turkey time/moscow time
25
+
26
+ at, Europe/Vienna
27
+ ch, Europe/Zurich
28
+ hu, Europe/Budapest
29
+ cz, Europe/Prague
30
+ sk, Europe/Bratislava # link to Prague !!!
31
+ pl, Europe/Warsaw
32
+ be, Europe/Brussels
33
+ lu, Europe/Luxembourg # link to Brussels !!!
34
+ nl, Europe/Amsterdam # link to Brussels !!!
35
+
36
+
37
+ dk, Europe/Berlin ## check if country-specific available
38
+ se, Europe/Berlin ## check if country-specific available
39
+ hr, Europe/Belgrade ## check if country-specific available
40
+
41
+
42
+
43
+ ## for champs default for not to cet (central european time) - why? why not?
44
+ uefa.cl, Europe/Paris
45
+ uefa.el, Europe/Paris
46
+ euro, Europe/Paris
47
+
@@ -0,0 +1,4 @@
1
+ key, zone
2
+
3
+
4
+ ## world+2022, add quatar here
@@ -0,0 +1,6 @@
1
+ # note: allow require 'football/timezones' too
2
+ # (in addition to require 'football-timezones')
3
+
4
+ require_relative '../football-timezones'
5
+
6
+
@@ -0,0 +1,24 @@
1
+
2
+ module SportDb
3
+ module Module
4
+ module Timezones
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
+ "football-timezones/#{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 Timezones
23
+ end # module Module
24
+ end # module SportDb
@@ -0,0 +1,167 @@
1
+ require 'cocos'
2
+ require 'season/formats' ## add season support
3
+
4
+
5
+ require 'tzinfo'
6
+
7
+
8
+ ## our own code
9
+ require_relative 'football-timezones/version'
10
+
11
+
12
+ ####
13
+ ### check - nest CET class inside UTC e.g. UTC::CET - why? why not?
14
+ ## make UTC and CET into a module (not class) - why? why not?
15
+
16
+ module CET ## central european time helpers
17
+ def self.now() zone.now; end
18
+ def self.today() now.to_date; end
19
+ def self.strptime( str, format )
20
+
21
+ ### fix - change to Time.strptime - why? why not?
22
+ ## (simply) ignore offset; double check that hours, minutes
23
+ ## get parsed as is (without applying offset)
24
+
25
+ d = DateTime.strptime( str, format )
26
+ ## remove assert check - why? why not?
27
+ if d.zone != '+00:00' ### use d.offset != Ration(0,1) - why? why not?
28
+ puts "!! ASSERT - CET parse date; DateTime returns offset != +0:00"
29
+ pp d.zone
30
+ pp d
31
+ exit 1
32
+ end
33
+ zone.local_time( d.year, d.month, d.day, d.hour, d.min, d.sec )
34
+ end
35
+ def self.zone() @zone ||= UTC.find_zone( 'Europe/Vienna' ); end
36
+ end # class CET
37
+
38
+
39
+
40
+ module UTC
41
+ def self.now() Time.now.utc; end
42
+ def self.today() now.to_date; end
43
+
44
+ ## -- todo - make sure / assert it's always utc - how???
45
+ ## utc = ## tz_utc.strptime( m['utcDate'], '%Y-%m-%dT%H:%M:%SZ' )
46
+ ## note: DateTime.strptime is supposed to be unaware of timezones!!!
47
+ ## use to parse utc
48
+ ## quick hack -
49
+ ## use to_time.getutc instead of utc ???
50
+ def self.strptime( str, format )
51
+ d = DateTime.strptime( str, format )
52
+ ## remove assert check - why? why not?
53
+ if d.zone != '+00:00' ### use d.offset != Ration(0,1) - why? why not?
54
+ puts "!! ASSERT - UTC parse date; DateTime returns offset != +0:00"
55
+ pp d.zone
56
+ pp d
57
+ exit 1
58
+ end
59
+ ## note - ignores offset if any !!!!
60
+ ## todo/check - report warn if offset different from 0:00 (0/1) - why? why not?
61
+ Time.utc( d.year, d.month, d.day, d.hour, d.min, d.sec )
62
+ end
63
+
64
+ def self.find_zone( name )
65
+ zone = TZInfo::Timezone.get( name )
66
+ ## wrap tzinfo timezone in our own - for adding more (auto)checks etc.
67
+ zone ? Timezone.new( zone ) : nil
68
+ end
69
+
70
+ class Timezone ## nested inside UTC
71
+ ## todo/fix
72
+ ## cache timezone - why? why not?
73
+ def initialize( zone )
74
+ @zone = zone
75
+ end
76
+
77
+ def to_local( time )
78
+ ## assert time is Time (not Date or DateTIme)
79
+ ## and assert utc!!!
80
+ assert( time.is_a?( Time ), "time #{time} is NOT of class Time; got #{time.class.name}" )
81
+ assert( time.utc?, "time #{time} is NOT utc; utc? returns #{time.utc?}" )
82
+ local = @zone.to_local( time )
83
+ local
84
+ end
85
+
86
+ def local_time( year, month=1, mday=1, hour=0, min=0, sec=0 )
87
+ @zone.local_time( year, month, mday, hour, min, sec )
88
+ end
89
+
90
+ def now() @zone.now; end
91
+
92
+
93
+
94
+ def assert( cond, msg )
95
+ if cond
96
+ # do nothing
97
+ else
98
+ puts "!!! assert failed - #{msg}"
99
+ exit 1
100
+ end
101
+ end
102
+ end # class Timezone
103
+ end # module UTC
104
+
105
+
106
+
107
+
108
+ module TimezoneHelper
109
+ def find_zone!( league:, season: )
110
+ @zones ||= begin
111
+ zones = {}
112
+ ['timezones_america',
113
+ 'timezones_asia',
114
+ 'timezones_europe',
115
+ 'timezones_world',].each do |name|
116
+ recs = read_csv( "#{SportDb::Module::Timezones.root}/config/#{name}.csv" )
117
+ recs.each do |rec|
118
+ zone = UTC.find_zone( rec['zone'] )
119
+ if zone.nil?
120
+ ## raise ArgumentError - invalid zone
121
+ puts "!! ERROR - cannot find timezone in timezone db:"
122
+ pp rec
123
+ exit 1
124
+ end
125
+ zones[ rec['key']] = zone
126
+ end
127
+ end
128
+ zones
129
+ end
130
+
131
+ ## lookup first try by league+season
132
+ league_code = league.to_s.downcase
133
+ season = Season( season )
134
+
135
+ ## e.g. world+2022, etc.
136
+ key = "#{league_code}+#{season}"
137
+ zone = @zones[key]
138
+
139
+ ## try league e.g. eng.1 etc.
140
+ zone = @zones[league_code] if zone.nil?
141
+
142
+ ## try first code only (country code )
143
+ if zone.nil?
144
+ code, _ = league_code.split( '.', 2 )
145
+ zone = @zones[code]
146
+ end
147
+
148
+ if zone.nil? ## still not found; report error
149
+ puts "!! ERROR: no timezone found for #{league} #{season}"
150
+ exit 1
151
+ end
152
+
153
+ zone
154
+ end
155
+ end # module TimezoneHelper
156
+
157
+
158
+
159
+
160
+ ####
161
+ ### note - make find_zone! public/global by default - why? why not?
162
+ module Kernel
163
+ include TimezoneHelper
164
+ end
165
+
166
+
167
+ puts SportDb::Module::Timezones.banner ## say hello
metadata ADDED
@@ -0,0 +1,135 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: football-timezones
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-09-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: tzinfo
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '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'
27
+ - !ruby/object:Gem::Dependency
28
+ name: season-formats
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: cocos
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rdoc
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '4.0'
62
+ - - "<"
63
+ - !ruby/object:Gem::Version
64
+ version: '7'
65
+ type: :development
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: '4.0'
72
+ - - "<"
73
+ - !ruby/object:Gem::Version
74
+ version: '7'
75
+ - !ruby/object:Gem::Dependency
76
+ name: hoe
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '4.1'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '4.1'
89
+ description: football-timezones - time & timezone helpers for football (league) data
90
+ email: gerald.bauer@gmail.com
91
+ executables: []
92
+ extensions: []
93
+ extra_rdoc_files:
94
+ - CHANGELOG.md
95
+ - Manifest.txt
96
+ - README.md
97
+ files:
98
+ - CHANGELOG.md
99
+ - Manifest.txt
100
+ - README.md
101
+ - Rakefile
102
+ - config/timezones_africa.csv
103
+ - config/timezones_america.csv
104
+ - config/timezones_asia.csv
105
+ - config/timezones_europe.csv
106
+ - config/timezones_world.csv
107
+ - lib/football-timezones.rb
108
+ - lib/football-timezones/version.rb
109
+ - lib/football/timezones.rb
110
+ homepage: https://github.com/sportdb/sport.db
111
+ licenses:
112
+ - Public Domain
113
+ metadata: {}
114
+ post_install_message:
115
+ rdoc_options:
116
+ - "--main"
117
+ - README.md
118
+ require_paths:
119
+ - lib
120
+ required_ruby_version: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: 3.1.0
125
+ required_rubygems_version: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ requirements: []
131
+ rubygems_version: 3.4.10
132
+ signing_key:
133
+ specification_version: 4
134
+ summary: football-timezones - time & timezone helpers for football (league) data
135
+ test_files: []