groupdate2 4.1.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,92 @@
1
+ require 'json'
2
+
3
+ module Groupdate
4
+ module SqlServerGroupClause
5
+ def sql_server_group_clause(tzid)
6
+ time_zone = to_windows_tz(tzid)
7
+ raise Groupdate::Error, "unknown timezone: #{tzid}" if time_zone.nil?
8
+
9
+ datetime_column = "(CAST(#{column} AS DATETIME2(3)) AT TIME ZONE 'UTC')"
10
+ if day_start.to_i > 0
11
+ adjusted_column = "DATEADD(second, #{day_start.to_i * -1}, #{datetime_column})"
12
+ else
13
+ adjusted_column = datetime_column
14
+ end
15
+
16
+ # To work with Date column, cast it to DATETIME2 first
17
+ group_column = "#{adjusted_column} AT TIME ZONE '#{time_zone}'"
18
+ day_of_week = "(@@DATEFIRST + DATEPART(weekday, #{group_column}) - 1) %% 7"
19
+
20
+ if period == :day_of_week
21
+ # - SQL Server settings:
22
+ # - @@DATEFIRST : the start day setting of sql_server
23
+ # - @@DATEFIRST defaults to 7, Sunday
24
+ # - Monday..Sunday => 1..7
25
+ # - Specifying SET DATEFIRST has no effect on DATEDIFF. DATEDIFF always uses Sunday as the first day of the week to ensure the function operates in a deterministic way.
26
+ #
27
+ # - GroupDate day_of_week = "(@@DATEFIRST + DATEPART(weekday, #{group_column}) - 1) %% 7": Sunday = 0, Monday = 1, .. Sat = 6
28
+ return day_of_week
29
+ elsif %i(hour_of_day minute_of_hour day_of_month month_of_year day_of_year).include?(period)
30
+ case period
31
+ when :hour_of_day
32
+ dp = 'hour'
33
+ when :minute_of_hour
34
+ dp = 'minute'
35
+ when :day_of_month
36
+ dp = 'day'
37
+ when :month_of_year
38
+ dp = 'month'
39
+ when :day_of_year
40
+ dp = 'dayofyear'
41
+ end
42
+ return "DATEPART(#{dp}, #{group_column})"
43
+ else
44
+ case period
45
+ when :week
46
+ # --------------------------------------------------
47
+ # - GroupDate week_start: Monday..Sunday => 0..6, default to 6 (Sunday)
48
+ # [:mon, :tue, :wed, :thu, :fri, :sat, :sun].index
49
+ day_offset = "-(7 + (#{day_of_week}) - (#{(week_start + 1) % 7})) %% 7"
50
+ date_str = "CONVERT(varchar(30), DATEADD(DAY, #{day_offset}, #{group_column}), 102)"
51
+ when :quarter
52
+ date_str = "CONCAT(DATEPART(year, #{group_column}), '-', ((DATEPART(quarter, #{group_column}) - 1) * 3 + 1), '-01')"
53
+ when :year
54
+ date_str = "CONCAT(DATEPART(year, #{group_column}), '-01-01 00:00:00')"
55
+ when :month
56
+ date_str = "CONCAT(CONVERT(varchar(7), #{group_column}, 23), '-01')"
57
+ when :day
58
+ date_str = "CONVERT(varchar(30), #{group_column}, 23)"
59
+ when :second
60
+ date_str = "CONVERT(varchar(30), #{group_column}, 120)"
61
+ when :minute
62
+ date_str = "CONCAT(CONVERT(varchar(16), #{group_column}, 120), ':00')"
63
+ when :hour
64
+ date_str = "CONCAT(CONVERT(varchar(13), #{group_column}, 120), ':00:00')"
65
+ else
66
+ raise Groupdate::Error, "'#{period}' not supported for SQL Server"
67
+ end
68
+
69
+ converted_datetime_column = "CAST(#{date_str} AS DATETIME2(0)) AT TIME ZONE '#{time_zone}'"
70
+ if day_start.to_i > 0
71
+ return "DATEADD(second, #{day_start.to_i}, #{converted_datetime_column})"
72
+ else
73
+ return converted_datetime_column
74
+ end
75
+ end
76
+ end
77
+
78
+ private
79
+
80
+ WINDOWS_ZONES = JSON.parse(File.read(File.join(__dir__, 'windows_zones.json')))
81
+ def to_windows_tz(tzid)
82
+ WINDOWS_ZONES.fetch(tzid, nil)
83
+ end
84
+
85
+ def week_base(time_zone)
86
+ sun_base = Time.use_zone('UTC') { Time.zone.parse('1970-01-04 00:00:00') }
87
+ week_start_base = (sun_base + ((week_start + 1) % 7).to_i.days).strftime('%F %T')
88
+ return "CAST('#{sun_base.strftime('%F %T')}' AS DATETIME2(0)) AT TIME ZONE '#{time_zone}'",
89
+ "CAST('#{week_start_base}' AS DATETIME2(0)) AT TIME ZONE '#{time_zone}'"
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,3 @@
1
+ module Groupdate
2
+ VERSION = "4.1.5"
3
+ end
@@ -0,0 +1 @@
1
+ {"Asia/Kabul":"Afghanistan Standard Time","America/Anchorage":"Alaskan Standard Time","America/Juneau":"Alaskan Standard Time","America/Metlakatla":"Alaskan Standard Time","America/Nome":"Alaskan Standard Time","America/Sitka":"Alaskan Standard Time","America/Yakutat":"Alaskan Standard Time","America/Adak":"Aleutian Standard Time","Asia/Barnaul":"Altai Standard Time","Asia/Riyadh":"Arab Standard Time","Asia/Bahrain":"Arab Standard Time","Asia/Kuwait":"Arab Standard Time","Asia/Qatar":"Arab Standard Time","Asia/Aden":"Arab Standard Time","Asia/Dubai":"Arabian Standard Time","Asia/Muscat":"Arabian Standard Time","Etc/GMT-4":"Arabian Standard Time","Asia/Baghdad":"Arabic Standard Time","America/Buenos_Aires":"Argentina Standard Time","America/Argentina/La_Rioja":"Argentina Standard Time","America/Argentina/Rio_Gallegos":"Argentina Standard Time","America/Argentina/Salta":"Argentina Standard Time","America/Argentina/San_Juan":"Argentina Standard Time","America/Argentina/San_Luis":"Argentina Standard Time","America/Argentina/Tucuman":"Argentina Standard Time","America/Argentina/Ushuaia":"Argentina Standard Time","America/Catamarca":"Argentina Standard Time","America/Cordoba":"Argentina Standard Time","America/Jujuy":"Argentina Standard Time","America/Mendoza":"Argentina Standard Time","Europe/Astrakhan":"Astrakhan Standard Time","Europe/Ulyanovsk":"Astrakhan Standard Time","America/Halifax":"Atlantic Standard Time","Atlantic/Bermuda":"Atlantic Standard Time","America/Glace_Bay":"Atlantic Standard Time","America/Goose_Bay":"Atlantic Standard Time","America/Moncton":"Atlantic Standard Time","America/Thule":"Atlantic Standard Time","Australia/Darwin":"AUS Central Standard Time","Australia/Eucla":"Aus Central W. Standard Time","Australia/Sydney":"AUS Eastern Standard Time","Australia/Melbourne":"AUS Eastern Standard Time","Asia/Baku":"Azerbaijan Standard Time","Atlantic/Azores":"Azores Standard Time","America/Scoresbysund":"Azores Standard Time","America/Bahia":"Bahia Standard Time","Asia/Dhaka":"Bangladesh Standard Time","Asia/Thimphu":"Bangladesh Standard Time","Europe/Minsk":"Belarus Standard Time","Pacific/Bougainville":"Bougainville Standard Time","America/Regina":"Canada Central Standard Time","America/Swift_Current":"Canada Central Standard Time","Atlantic/Cape_Verde":"Cape Verde Standard Time","Etc/GMT+1":"Cape Verde Standard Time","Asia/Yerevan":"Caucasus Standard Time","Australia/Adelaide":"Cen. Australia Standard Time","Australia/Broken_Hill":"Cen. Australia Standard Time","America/Guatemala":"Central America Standard Time","America/Belize":"Central America Standard Time","America/Costa_Rica":"Central America Standard Time","Pacific/Galapagos":"Central America Standard Time","America/Tegucigalpa":"Central America Standard Time","America/Managua":"Central America Standard Time","America/El_Salvador":"Central America Standard Time","Etc/GMT+6":"Central America Standard Time","Asia/Almaty":"Central Asia Standard Time","Antarctica/Vostok":"Central Asia Standard Time","Asia/Urumqi":"Central Asia Standard Time","Indian/Chagos":"Central Asia Standard Time","Asia/Bishkek":"Central Asia Standard Time","Asia/Qostanay":"Central Asia Standard Time","Etc/GMT-6":"Central Asia Standard Time","America/Cuiaba":"Central Brazilian Standard Time","America/Campo_Grande":"Central Brazilian Standard Time","Europe/Budapest":"Central Europe Standard Time","Europe/Tirane":"Central Europe Standard Time","Europe/Prague":"Central Europe Standard Time","Europe/Podgorica":"Central Europe Standard Time","Europe/Belgrade":"Central Europe Standard Time","Europe/Ljubljana":"Central Europe Standard Time","Europe/Bratislava":"Central Europe Standard Time","Europe/Warsaw":"Central European Standard Time","Europe/Sarajevo":"Central European Standard Time","Europe/Zagreb":"Central European Standard Time","Europe/Skopje":"Central European Standard Time","Pacific/Guadalcanal":"Central Pacific Standard Time","Antarctica/Macquarie":"Central Pacific Standard Time","Pacific/Ponape":"Central Pacific Standard Time","Pacific/Kosrae":"Central Pacific Standard Time","Pacific/Noumea":"Central Pacific Standard Time","Pacific/Efate":"Central Pacific Standard Time","Etc/GMT-11":"Central Pacific Standard Time","America/Chicago":"Central Standard Time","America/Winnipeg":"Central Standard Time","America/Rainy_River":"Central Standard Time","America/Rankin_Inlet":"Central Standard Time","America/Resolute":"Central Standard Time","America/Matamoros":"Central Standard Time","America/Indiana/Knox":"Central Standard Time","America/Indiana/Tell_City":"Central Standard Time","America/Menominee":"Central Standard Time","America/North_Dakota/Beulah":"Central Standard Time","America/North_Dakota/Center":"Central Standard Time","America/North_Dakota/New_Salem":"Central Standard Time","CST6CDT":"Central Standard Time","America/Mexico_City":"Central Standard Time (Mexico)","America/Bahia_Banderas":"Central Standard Time (Mexico)","America/Merida":"Central Standard Time (Mexico)","America/Monterrey":"Central Standard Time (Mexico)","Pacific/Chatham":"Chatham Islands Standard Time","Asia/Shanghai":"China Standard Time","Asia/Hong_Kong":"China Standard Time","Asia/Macau":"China Standard Time","America/Havana":"Cuba Standard Time","Etc/GMT+12":"Dateline Standard Time","Africa/Nairobi":"E. Africa Standard Time","Antarctica/Syowa":"E. Africa Standard Time","Africa/Djibouti":"E. Africa Standard Time","Africa/Asmera":"E. Africa Standard Time","Africa/Addis_Ababa":"E. Africa Standard Time","Indian/Comoro":"E. Africa Standard Time","Indian/Antananarivo":"E. Africa Standard Time","Africa/Mogadishu":"E. Africa Standard Time","Africa/Juba":"E. Africa Standard Time","Africa/Dar_es_Salaam":"E. Africa Standard Time","Africa/Kampala":"E. Africa Standard Time","Indian/Mayotte":"E. Africa Standard Time","Etc/GMT-3":"E. Africa Standard Time","Australia/Brisbane":"E. Australia Standard Time","Australia/Lindeman":"E. Australia Standard Time","Europe/Chisinau":"E. Europe Standard Time","America/Sao_Paulo":"E. South America Standard Time","Pacific/Easter":"Easter Island Standard Time","America/New_York":"Eastern Standard Time","America/Nassau":"Eastern Standard Time","America/Toronto":"Eastern Standard Time","America/Iqaluit":"Eastern Standard Time","America/Montreal":"Eastern Standard Time","America/Nipigon":"Eastern Standard Time","America/Pangnirtung":"Eastern Standard Time","America/Thunder_Bay":"Eastern Standard Time","America/Detroit":"Eastern Standard Time","America/Indiana/Petersburg":"Eastern Standard Time","America/Indiana/Vincennes":"Eastern Standard Time","America/Indiana/Winamac":"Eastern Standard Time","America/Kentucky/Monticello":"Eastern Standard Time","America/Louisville":"Eastern Standard Time","EST5EDT":"Eastern Standard Time","America/Cancun":"Eastern Standard Time (Mexico)","Africa/Cairo":"Egypt Standard Time","Asia/Yekaterinburg":"Ekaterinburg Standard Time","Pacific/Fiji":"Fiji Standard Time","Europe/Kiev":"FLE Standard Time","Europe/Mariehamn":"FLE Standard Time","Europe/Sofia":"FLE Standard Time","Europe/Tallinn":"FLE Standard Time","Europe/Helsinki":"FLE Standard Time","Europe/Vilnius":"FLE Standard Time","Europe/Riga":"FLE Standard Time","Europe/Uzhgorod":"FLE Standard Time","Europe/Zaporozhye":"FLE Standard Time","Asia/Tbilisi":"Georgian Standard Time","Europe/London":"GMT Standard Time","Atlantic/Canary":"GMT Standard Time","Atlantic/Faeroe":"GMT Standard Time","Europe/Guernsey":"GMT Standard Time","Europe/Dublin":"GMT Standard Time","Europe/Isle_of_Man":"GMT Standard Time","Europe/Jersey":"GMT Standard Time","Europe/Lisbon":"GMT Standard Time","Atlantic/Madeira":"GMT Standard Time","America/Godthab":"Greenland Standard Time","Atlantic/Reykjavik":"Greenwich Standard Time","Africa/Ouagadougou":"Greenwich Standard Time","Africa/Abidjan":"Greenwich Standard Time","Africa/Accra":"Greenwich Standard Time","Africa/Banjul":"Greenwich Standard Time","Africa/Conakry":"Greenwich Standard Time","Africa/Bissau":"Greenwich Standard Time","Africa/Monrovia":"Greenwich Standard Time","Africa/Bamako":"Greenwich Standard Time","Africa/Nouakchott":"Greenwich Standard Time","Atlantic/St_Helena":"Greenwich Standard Time","Africa/Freetown":"Greenwich Standard Time","Africa/Dakar":"Greenwich Standard Time","Africa/Lome":"Greenwich Standard Time","Europe/Bucharest":"GTB Standard Time","Asia/Nicosia":"GTB Standard Time","Asia/Famagusta":"GTB Standard Time","Europe/Athens":"GTB Standard Time","America/Port-au-Prince":"Haiti Standard Time","Pacific/Honolulu":"Hawaiian Standard Time","Pacific/Rarotonga":"Hawaiian Standard Time","Pacific/Tahiti":"Hawaiian Standard Time","Pacific/Johnston":"Hawaiian Standard Time","Etc/GMT+10":"Hawaiian Standard Time","Asia/Calcutta":"India Standard Time","Asia/Tehran":"Iran Standard Time","Asia/Jerusalem":"Israel Standard Time","Asia/Amman":"Jordan Standard Time","Europe/Kaliningrad":"Kaliningrad Standard Time","Asia/Seoul":"Korea Standard Time","Africa/Tripoli":"Libya Standard Time","Pacific/Kiritimati":"Line Islands Standard Time","Etc/GMT-14":"Line Islands Standard Time","Australia/Lord_Howe":"Lord Howe Standard Time","Asia/Magadan":"Magadan Standard Time","America/Punta_Arenas":"Magallanes Standard Time","Pacific/Marquesas":"Marquesas Standard Time","Indian/Mauritius":"Mauritius Standard Time","Indian/Reunion":"Mauritius Standard Time","Indian/Mahe":"Mauritius Standard Time","Asia/Beirut":"Middle East Standard Time","America/Montevideo":"Montevideo Standard Time","Africa/Casablanca":"Morocco Standard Time","Africa/El_Aaiun":"Morocco Standard Time","America/Denver":"Mountain Standard Time","America/Edmonton":"Mountain Standard Time","America/Cambridge_Bay":"Mountain Standard Time","America/Inuvik":"Mountain Standard Time","America/Yellowknife":"Mountain Standard Time","America/Ojinaga":"Mountain Standard Time","America/Boise":"Mountain Standard Time","MST7MDT":"Mountain Standard Time","America/Chihuahua":"Mountain Standard Time (Mexico)","America/Mazatlan":"Mountain Standard Time (Mexico)","Asia/Rangoon":"Myanmar Standard Time","Indian/Cocos":"Myanmar Standard Time","Asia/Novosibirsk":"N. Central Asia Standard Time","Africa/Windhoek":"Namibia Standard Time","Asia/Katmandu":"Nepal Standard Time","Pacific/Auckland":"New Zealand Standard Time","Antarctica/McMurdo":"New Zealand Standard Time","America/St_Johns":"Newfoundland Standard Time","Pacific/Norfolk":"Norfolk Standard Time","Asia/Irkutsk":"North Asia East Standard Time","Asia/Krasnoyarsk":"North Asia Standard Time","Asia/Novokuznetsk":"North Asia Standard Time","Asia/Pyongyang":"North Korea Standard Time","Asia/Omsk":"Omsk Standard Time","America/Santiago":"Pacific SA Standard Time","America/Los_Angeles":"Pacific Standard Time","America/Vancouver":"Pacific Standard Time","America/Dawson":"Pacific Standard Time","America/Whitehorse":"Pacific Standard Time","PST8PDT":"Pacific Standard Time","America/Tijuana":"Pacific Standard Time (Mexico)","America/Santa_Isabel":"Pacific Standard Time (Mexico)","Asia/Karachi":"Pakistan Standard Time","America/Asuncion":"Paraguay Standard Time","Asia/Qyzylorda":"Qyzylorda Standard Time","Europe/Paris":"Romance Standard Time","Europe/Brussels":"Romance Standard Time","Europe/Copenhagen":"Romance Standard Time","Europe/Madrid":"Romance Standard Time","Africa/Ceuta":"Romance Standard Time","Europe/Samara":"Russia Time Zone 3","Asia/Srednekolymsk":"Russia Time Zone 10","Asia/Kamchatka":"Russia Time Zone 11","Asia/Anadyr":"Russia Time Zone 11","Europe/Moscow":"Russian Standard Time","Europe/Kirov":"Russian Standard Time","Europe/Simferopol":"Russian Standard Time","America/Cayenne":"SA Eastern Standard Time","Antarctica/Rothera":"SA Eastern Standard Time","Antarctica/Palmer":"SA Eastern Standard Time","America/Fortaleza":"SA Eastern Standard Time","America/Belem":"SA Eastern Standard Time","America/Maceio":"SA Eastern Standard Time","America/Recife":"SA Eastern Standard Time","America/Santarem":"SA Eastern Standard Time","Atlantic/Stanley":"SA Eastern Standard Time","America/Paramaribo":"SA Eastern Standard Time","Etc/GMT+3":"SA Eastern Standard Time","America/Bogota":"SA Pacific Standard Time","America/Rio_Branco":"SA Pacific Standard Time","America/Eirunepe":"SA Pacific Standard Time","America/Coral_Harbour":"SA Pacific Standard Time","America/Guayaquil":"SA Pacific Standard Time","America/Jamaica":"SA Pacific Standard Time","America/Cayman":"SA Pacific Standard Time","America/Panama":"SA Pacific Standard Time","America/Lima":"SA Pacific Standard Time","Etc/GMT+5":"SA Pacific Standard Time","America/La_Paz":"SA Western Standard Time","America/Antigua":"SA Western Standard Time","America/Anguilla":"SA Western Standard Time","America/Aruba":"SA Western Standard Time","America/Barbados":"SA Western Standard Time","America/St_Barthelemy":"SA Western Standard Time","America/Kralendijk":"SA Western Standard Time","America/Manaus":"SA Western Standard Time","America/Boa_Vista":"SA Western Standard Time","America/Porto_Velho":"SA Western Standard Time","America/Blanc-Sablon":"SA Western Standard Time","America/Curacao":"SA Western Standard Time","America/Dominica":"SA Western Standard Time","America/Santo_Domingo":"SA Western Standard Time","America/Grenada":"SA Western Standard Time","America/Guadeloupe":"SA Western Standard Time","America/Guyana":"SA Western Standard Time","America/St_Kitts":"SA Western Standard Time","America/St_Lucia":"SA Western Standard Time","America/Marigot":"SA Western Standard Time","America/Martinique":"SA Western Standard Time","America/Montserrat":"SA Western Standard Time","America/Puerto_Rico":"SA Western Standard Time","America/Lower_Princes":"SA Western Standard Time","America/Port_of_Spain":"SA Western Standard Time","America/St_Vincent":"SA Western Standard Time","America/Tortola":"SA Western Standard Time","America/St_Thomas":"SA Western Standard Time","Etc/GMT+4":"SA Western Standard Time","America/Miquelon":"Saint Pierre Standard Time","Asia/Sakhalin":"Sakhalin Standard Time","Pacific/Apia":"Samoa Standard Time","Africa/Sao_Tome":"Sao Tome Standard Time","Europe/Saratov":"Saratov Standard Time","Asia/Bangkok":"SE Asia Standard Time","Antarctica/Davis":"SE Asia Standard Time","Indian/Christmas":"SE Asia Standard Time","Asia/Jakarta":"SE Asia Standard Time","Asia/Pontianak":"SE Asia Standard Time","Asia/Phnom_Penh":"SE Asia Standard Time","Asia/Vientiane":"SE Asia Standard Time","Asia/Saigon":"SE Asia Standard Time","Etc/GMT-7":"SE Asia Standard Time","Asia/Singapore":"Singapore Standard Time","Antarctica/Casey":"Singapore Standard Time","Asia/Brunei":"Singapore Standard Time","Asia/Makassar":"Singapore Standard Time","Asia/Kuala_Lumpur":"Singapore Standard Time","Asia/Kuching":"Singapore Standard Time","Asia/Manila":"Singapore Standard Time","Etc/GMT-8":"Singapore Standard Time","Africa/Johannesburg":"South Africa Standard Time","Africa/Bujumbura":"South Africa Standard Time","Africa/Gaborone":"South Africa Standard Time","Africa/Lubumbashi":"South Africa Standard Time","Africa/Maseru":"South Africa Standard Time","Africa/Blantyre":"South Africa Standard Time","Africa/Maputo":"South Africa Standard Time","Africa/Kigali":"South Africa Standard Time","Africa/Mbabane":"South Africa Standard Time","Africa/Lusaka":"South Africa Standard Time","Africa/Harare":"South Africa Standard Time","Etc/GMT-2":"South Africa Standard Time","Asia/Colombo":"Sri Lanka Standard Time","Africa/Khartoum":"Sudan Standard Time","Asia/Damascus":"Syria Standard Time","Asia/Taipei":"Taipei Standard Time","Australia/Hobart":"Tasmania Standard Time","Australia/Currie":"Tasmania Standard Time","America/Araguaina":"Tocantins Standard Time","Asia/Tokyo":"Tokyo Standard Time","Asia/Jayapura":"Tokyo Standard Time","Pacific/Palau":"Tokyo Standard Time","Asia/Dili":"Tokyo Standard Time","Etc/GMT-9":"Tokyo Standard Time","Asia/Tomsk":"Tomsk Standard Time","Pacific/Tongatapu":"Tonga Standard Time","Asia/Chita":"Transbaikal Standard Time","Europe/Istanbul":"Turkey Standard Time","America/Grand_Turk":"Turks And Caicos Standard Time","Asia/Ulaanbaatar":"Ulaanbaatar Standard Time","Asia/Choibalsan":"Ulaanbaatar Standard Time","America/Indianapolis":"US Eastern Standard Time","America/Indiana/Marengo":"US Eastern Standard Time","America/Indiana/Vevay":"US Eastern Standard Time","America/Phoenix":"US Mountain Standard Time","America/Dawson_Creek":"US Mountain Standard Time","America/Creston":"US Mountain Standard Time","America/Fort_Nelson":"US Mountain Standard Time","America/Hermosillo":"US Mountain Standard Time","Etc/GMT+7":"US Mountain Standard Time","Etc/GMT":"UTC","America/Danmarkshavn":"UTC","Etc/UTC":"UTC","Etc/GMT+2":"UTC-02","America/Noronha":"UTC-02","Atlantic/South_Georgia":"UTC-02","Etc/GMT+8":"UTC-08","Pacific/Pitcairn":"UTC-08","Etc/GMT+9":"UTC-09","Pacific/Gambier":"UTC-09","Etc/GMT+11":"UTC-11","Pacific/Pago_Pago":"UTC-11","Pacific/Niue":"UTC-11","Pacific/Midway":"UTC-11","Etc/GMT-12":"UTC+12","Pacific/Tarawa":"UTC+12","Pacific/Majuro":"UTC+12","Pacific/Kwajalein":"UTC+12","Pacific/Nauru":"UTC+12","Pacific/Funafuti":"UTC+12","Pacific/Wake":"UTC+12","Pacific/Wallis":"UTC+12","Etc/GMT-13":"UTC+13","Pacific/Enderbury":"UTC+13","Pacific/Fakaofo":"UTC+13","America/Caracas":"Venezuela Standard Time","Asia/Vladivostok":"Vladivostok Standard Time","Asia/Ust-Nera":"Vladivostok Standard Time","Europe/Volgograd":"Volgograd Standard Time","Australia/Perth":"W. Australia Standard Time","Africa/Lagos":"W. Central Africa Standard Time","Africa/Luanda":"W. Central Africa Standard Time","Africa/Porto-Novo":"W. Central Africa Standard Time","Africa/Kinshasa":"W. Central Africa Standard Time","Africa/Bangui":"W. Central Africa Standard Time","Africa/Brazzaville":"W. Central Africa Standard Time","Africa/Douala":"W. Central Africa Standard Time","Africa/Algiers":"W. Central Africa Standard Time","Africa/Libreville":"W. Central Africa Standard Time","Africa/Malabo":"W. Central Africa Standard Time","Africa/Niamey":"W. Central Africa Standard Time","Africa/Ndjamena":"W. Central Africa Standard Time","Africa/Tunis":"W. Central Africa Standard Time","Etc/GMT-1":"W. Central Africa Standard Time","Europe/Berlin":"W. Europe Standard Time","Europe/Andorra":"W. Europe Standard Time","Europe/Vienna":"W. Europe Standard Time","Europe/Zurich":"W. Europe Standard Time","Europe/Busingen":"W. Europe Standard Time","Europe/Gibraltar":"W. Europe Standard Time","Europe/Rome":"W. Europe Standard Time","Europe/Vaduz":"W. Europe Standard Time","Europe/Luxembourg":"W. Europe Standard Time","Europe/Monaco":"W. Europe Standard Time","Europe/Malta":"W. Europe Standard Time","Europe/Amsterdam":"W. Europe Standard Time","Europe/Oslo":"W. Europe Standard Time","Europe/Stockholm":"W. Europe Standard Time","Arctic/Longyearbyen":"W. Europe Standard Time","Europe/San_Marino":"W. Europe Standard Time","Europe/Vatican":"W. Europe Standard Time","Asia/Hovd":"W. Mongolia Standard Time","Asia/Tashkent":"West Asia Standard Time","Antarctica/Mawson":"West Asia Standard Time","Asia/Oral":"West Asia Standard Time","Asia/Aqtau":"West Asia Standard Time","Asia/Aqtobe":"West Asia Standard Time","Asia/Atyrau":"West Asia Standard Time","Indian/Maldives":"West Asia Standard Time","Indian/Kerguelen":"West Asia Standard Time","Asia/Dushanbe":"West Asia Standard Time","Asia/Ashgabat":"West Asia Standard Time","Asia/Samarkand":"West Asia Standard Time","Etc/GMT-5":"West Asia Standard Time","Asia/Hebron":"West Bank Standard Time","Asia/Gaza":"West Bank Standard Time","Pacific/Port_Moresby":"West Pacific Standard Time","Antarctica/DumontDUrville":"West Pacific Standard Time","Pacific/Truk":"West Pacific Standard Time","Pacific/Guam":"West Pacific Standard Time","Pacific/Saipan":"West Pacific Standard Time","Etc/GMT-10":"West Pacific Standard Time","Asia/Yakutsk":"Yakutsk Standard Time","Asia/Khandyga":"Yakutsk Standard Time"}
@@ -0,0 +1,32 @@
1
+ require "active_support/core_ext/module/attribute_accessors"
2
+ require "active_support/time"
3
+ require "groupdate/version"
4
+ require "groupdate/relation_builder"
5
+ require "groupdate/series_builder"
6
+ require "groupdate/magic"
7
+
8
+ module Groupdate
9
+ class Error < RuntimeError; end
10
+
11
+ PERIODS = [:second, :minute, :hour, :day, :week, :month, :quarter, :year, :day_of_week, :hour_of_day, :minute_of_hour, :day_of_month, :month_of_year]
12
+ METHODS = PERIODS.map { |v| :"group_by_#{v}" } + [:group_by_period]
13
+
14
+ mattr_accessor :week_start, :day_start, :time_zone, :dates
15
+ self.week_start = :sun
16
+ self.day_start = 0
17
+ self.dates = true
18
+
19
+ # api for gems like ActiveMedian
20
+ def self.process_result(relation, result, **options)
21
+ if relation.groupdate_values
22
+ result = Groupdate::Magic::Relation.process_result(relation, result, **options)
23
+ end
24
+ result
25
+ end
26
+ end
27
+
28
+ require "groupdate/enumerable"
29
+
30
+ ActiveSupport.on_load(:active_record) do
31
+ require "groupdate/active_record"
32
+ end
metadata ADDED
@@ -0,0 +1,184 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: groupdate2
3
+ version: !ruby/object:Gem::Version
4
+ version: 4.1.5
5
+ platform: ruby
6
+ authors:
7
+ - Leo Li
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-06-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '4.2'
19
+ name: activesupport
20
+ prerelease: false
21
+ type: :runtime
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '4.2'
27
+ - !ruby/object:Gem::Dependency
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ name: bundler
34
+ prerelease: false
35
+ type: :development
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ name: rake
48
+ prerelease: false
49
+ type: :development
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ name: minitest
62
+ prerelease: false
63
+ type: :development
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ name: activerecord
76
+ prerelease: false
77
+ type: :development
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ name: activerecord-jdbcpostgresql-adapter
90
+ prerelease: false
91
+ type: :development
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ name: activerecord-jdbcmysql-adapter
104
+ prerelease: false
105
+ type: :development
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ name: activerecord-jdbcsqlite3-adapter
118
+ prerelease: false
119
+ type: :development
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ name: activerecord-sqlserver-adapter
132
+ prerelease: false
133
+ type: :development
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ description:
140
+ email: lxz.tty@gmail.com
141
+ executables: []
142
+ extensions: []
143
+ extra_rdoc_files: []
144
+ files:
145
+ - CHANGELOG.md
146
+ - CONTRIBUTING.md
147
+ - LICENSE.txt
148
+ - README.md
149
+ - lib/groupdate/active_record.rb
150
+ - lib/groupdate/enumerable.rb
151
+ - lib/groupdate/magic.rb
152
+ - lib/groupdate/query_methods.rb
153
+ - lib/groupdate/relation.rb
154
+ - lib/groupdate/relation_builder.rb
155
+ - lib/groupdate/series_builder.rb
156
+ - lib/groupdate/sql_server_group_clause.rb
157
+ - lib/groupdate/version.rb
158
+ - lib/groupdate/windows_zones.json
159
+ - lib/groupdate2.rb
160
+ homepage: https://github.com/xiuzhong/groupdate2
161
+ licenses:
162
+ - MIT
163
+ metadata: {}
164
+ post_install_message:
165
+ rdoc_options: []
166
+ require_paths:
167
+ - lib
168
+ required_ruby_version: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: '2.2'
173
+ required_rubygems_version: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - ">="
176
+ - !ruby/object:Gem::Version
177
+ version: '0'
178
+ requirements: []
179
+ rubyforge_project:
180
+ rubygems_version: 2.6.14.1
181
+ signing_key:
182
+ specification_version: 4
183
+ summary: groupdate with support of SQL Server 2016+
184
+ test_files: []