libtad 0.1.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.
- checksums.yaml +7 -0
- data/lib/libtad.rb +123 -0
- data/lib/services/astronomy.rb +102 -0
- data/lib/services/date_calculator.rb +155 -0
- data/lib/services/holidays.rb +34 -0
- data/lib/services/onthisday.rb +42 -0
- data/lib/services/places.rb +26 -0
- data/lib/services/time.rb +143 -0
- data/lib/types/astronomy/astronomy_current.rb +58 -0
- data/lib/types/astronomy/astronomy_day.rb +32 -0
- data/lib/types/astronomy/astronomy_day_event.rb +76 -0
- data/lib/types/astronomy/astronomy_event.rb +24 -0
- data/lib/types/astronomy/astronomy_event_class.rb +37 -0
- data/lib/types/astronomy/astronomy_location.rb +31 -0
- data/lib/types/astronomy/astronomy_object.rb +27 -0
- data/lib/types/astronomy/astronomy_object_details.rb +32 -0
- data/lib/types/astronomy/astronomy_object_type.rb +36 -0
- data/lib/types/astronomy/moonphase.rb +37 -0
- data/lib/types/date_calculator/business_days_filter.rb +39 -0
- data/lib/types/date_calculator/business_holiday.rb +26 -0
- data/lib/types/date_calculator/period.rb +44 -0
- data/lib/types/date_calculator/weekdays.rb +54 -0
- data/lib/types/holidays/holiday.rb +93 -0
- data/lib/types/holidays/holiday_state.rb +35 -0
- data/lib/types/holidays/holiday_type.rb +107 -0
- data/lib/types/onthisday/event.rb +51 -0
- data/lib/types/onthisday/event_type.rb +15 -0
- data/lib/types/onthisday/name.rb +24 -0
- data/lib/types/onthisday/person.rb +39 -0
- data/lib/types/places/country.rb +20 -0
- data/lib/types/places/geo.rb +34 -0
- data/lib/types/places/location.rb +43 -0
- data/lib/types/places/location_ref.rb +24 -0
- data/lib/types/places/place.rb +24 -0
- data/lib/types/places/region.rb +35 -0
- data/lib/types/time/datetime.rb +93 -0
- data/lib/types/time/dst_entry.rb +48 -0
- data/lib/types/time/time.rb +30 -0
- data/lib/types/time/time_change.rb +49 -0
- data/lib/types/time/timezone.rb +51 -0
- metadata +137 -0
@@ -0,0 +1,32 @@
|
|
1
|
+
module LibTAD
|
2
|
+
module Astronomy
|
3
|
+
# Information about an astronomy object.
|
4
|
+
class AstronomyObjectDetails
|
5
|
+
# @return [String]
|
6
|
+
# Object name.
|
7
|
+
attr_reader :name
|
8
|
+
|
9
|
+
# @return [Array<AstronomyDay>]
|
10
|
+
# Lists and wraps all requested days where events are happening.
|
11
|
+
attr_reader :days
|
12
|
+
|
13
|
+
# @return [AstronomyCurrent]
|
14
|
+
# The current data for the object. Only if requested.
|
15
|
+
attr_reader :current
|
16
|
+
|
17
|
+
# @return [Array<AstronomyCurrent>]
|
18
|
+
# The specific data for the object at isotime/utctime.
|
19
|
+
attr_reader :results
|
20
|
+
|
21
|
+
def initialize(hash)
|
22
|
+
@name = hash.fetch('name', nil)
|
23
|
+
@days = hash.fetch('days', nil)
|
24
|
+
&.map { |e| AstronomyDay.new(e) }
|
25
|
+
|
26
|
+
@current = AstronomyCurrent.new hash['current'] unless !hash.key?('current')
|
27
|
+
@results = hash.fetch('results', nil)
|
28
|
+
&.map { |e| AstronomyCurrent.new(e) }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module LibTAD
|
2
|
+
module Astronomy
|
3
|
+
# All valid astronomy object types.
|
4
|
+
ASTRONOMY_OBJECT_TYPE = [
|
5
|
+
# The sun.
|
6
|
+
:sun,
|
7
|
+
|
8
|
+
# The moon.
|
9
|
+
:moon,
|
10
|
+
|
11
|
+
# Mercury.
|
12
|
+
:mercury,
|
13
|
+
|
14
|
+
# Venus.
|
15
|
+
:venus,
|
16
|
+
|
17
|
+
# Mars.
|
18
|
+
:mars,
|
19
|
+
|
20
|
+
# Jupiter.
|
21
|
+
:jupiter,
|
22
|
+
|
23
|
+
# Saturn.
|
24
|
+
:saturn,
|
25
|
+
|
26
|
+
# Uranus.
|
27
|
+
:uranus,
|
28
|
+
|
29
|
+
# Neptune.
|
30
|
+
:neptune,
|
31
|
+
|
32
|
+
# Pluto.
|
33
|
+
:pluto
|
34
|
+
].freeze
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module LibTAD
|
2
|
+
module Astronomy
|
3
|
+
# Moon phase.
|
4
|
+
class MoonPhase
|
5
|
+
# @return [String]
|
6
|
+
# Moonphase id.
|
7
|
+
attr_reader :id
|
8
|
+
|
9
|
+
# @return [String]
|
10
|
+
# Moonphase description.
|
11
|
+
def description
|
12
|
+
case @id
|
13
|
+
when 'newmoon'
|
14
|
+
'New moon'
|
15
|
+
when 'waxingcrescent'
|
16
|
+
'Waxing crescent'
|
17
|
+
when 'firstquarter'
|
18
|
+
'Moon in first quarter'
|
19
|
+
when 'waxinggibbous'
|
20
|
+
'Waxing gibbous moon'
|
21
|
+
when 'fullmoon'
|
22
|
+
'Full moon'
|
23
|
+
when 'waninggibbous'
|
24
|
+
'Waning gibbous moon'
|
25
|
+
when 'thirdquarter'
|
26
|
+
'Moon in third quarter'
|
27
|
+
when 'waningcrescent'
|
28
|
+
'Waning crescent moon'
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def initialize(id)
|
33
|
+
@id = id
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module LibTAD
|
2
|
+
module DateCalculator
|
3
|
+
# All valid business days filters.
|
4
|
+
BUSINESS_DAYS_FILTER = [
|
5
|
+
# Include or exclude Mondays.
|
6
|
+
:mon,
|
7
|
+
|
8
|
+
# Include or exclude Tuesdays.
|
9
|
+
:tue,
|
10
|
+
|
11
|
+
# Include or exclude Wednesdays.
|
12
|
+
:wed,
|
13
|
+
|
14
|
+
# Include or exclude Thursdays.
|
15
|
+
:thu,
|
16
|
+
|
17
|
+
# Include or exclude Fridays.
|
18
|
+
:fri,
|
19
|
+
|
20
|
+
# Include or exclude Saturdays.
|
21
|
+
:sat,
|
22
|
+
|
23
|
+
# Include or exclude Sundays.
|
24
|
+
:sun,
|
25
|
+
|
26
|
+
# Include or exclude weekends.
|
27
|
+
:weekend,
|
28
|
+
|
29
|
+
# Include or exclude holidays.
|
30
|
+
:holidays,
|
31
|
+
|
32
|
+
# Include or exclude weekends and holidays combined.
|
33
|
+
:weekendholidays,
|
34
|
+
|
35
|
+
# Include or exclude nothing.
|
36
|
+
:none
|
37
|
+
].freeze
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module LibTAD
|
2
|
+
module DateCalculator
|
3
|
+
# A holiday event which occurs in a requested period.
|
4
|
+
class BusinessHoliday
|
5
|
+
# @return [String]
|
6
|
+
# Either included or excluded, specifying whether or not the holidays
|
7
|
+
# in the result array were included or excluded when queried.
|
8
|
+
attr_reader :type
|
9
|
+
|
10
|
+
# @return [Integer]
|
11
|
+
# The number of holidays in the results.
|
12
|
+
attr_reader :count
|
13
|
+
|
14
|
+
# @return [Array<::LibTAD::Holiday::Holiday>]
|
15
|
+
# Holidays which occur in the requested period.
|
16
|
+
attr_reader :list
|
17
|
+
|
18
|
+
def initialize(hash)
|
19
|
+
@type = hash.fetch('type', nil)
|
20
|
+
@count = hash.fetch('count', nil)
|
21
|
+
@list = hash.fetch('list', nil)
|
22
|
+
&.map { |e| ::LibTAD::Holidays::Holiday.new(e) }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module LibTAD
|
2
|
+
module DateCalculator
|
3
|
+
# Calculated results for a requested period.
|
4
|
+
class Period
|
5
|
+
# @return [Integer]
|
6
|
+
# Number of days calculated.
|
7
|
+
attr_reader :includeddays
|
8
|
+
|
9
|
+
# @return [Integer]
|
10
|
+
# Number of calendar days in calculated period.
|
11
|
+
attr_reader :calendardays
|
12
|
+
|
13
|
+
# @return [Integer]
|
14
|
+
# Number of days which was skipped in the calculated period.
|
15
|
+
attr_reader :skippeddays
|
16
|
+
|
17
|
+
# @return [::LibTAD::TADTime::TADTime]
|
18
|
+
# The date the calculation started from.
|
19
|
+
attr_reader :startdate
|
20
|
+
|
21
|
+
# @return [::LibTAD::TADTime::TADTime]
|
22
|
+
# The date the calculation ended on.
|
23
|
+
attr_reader :enddate
|
24
|
+
|
25
|
+
# @return [::LibTAD::DateCalculator::Weekdays]
|
26
|
+
# The spread of excluded or included weekdays in includeddays.
|
27
|
+
attr_reader :weekdays
|
28
|
+
|
29
|
+
# @return [::LibTAD::DateCalculator::BusinessHoliday]
|
30
|
+
# Holidays which occur in the requested period.
|
31
|
+
attr_reader :holidays
|
32
|
+
|
33
|
+
def initialize(hash)
|
34
|
+
@includeddays = hash.fetch('includeddays', nil)
|
35
|
+
@calendardays = hash.fetch('calendardays', nil)
|
36
|
+
@skippeddays = hash.fetch('skippeddays', nil)
|
37
|
+
@startdate = ::LibTAD::TADTime::TADTime.new hash['startdate'] unless !hash.key?('startdate')
|
38
|
+
@enddate = ::LibTAD::TADTime::TADTime.new hash['enddate'] unless !hash.key?('enddate')
|
39
|
+
@weekdays = ::LibTAD::DateCalculator::Weekdays.new hash['weekdays'] unless !hash.key?('weekdays')
|
40
|
+
@holidays = ::LibTAD::DateCalculator::BusinessHoliday.new hash['holidays'] unless !hash.key?('holidays')
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module LibTAD
|
2
|
+
module DateCalculator
|
3
|
+
# The spread of excluded or included weekdays.
|
4
|
+
class Weekdays
|
5
|
+
# @return [String]
|
6
|
+
# Specifies whether or not the weekdays counted were part of an included or excluded filter.
|
7
|
+
attr_reader :type
|
8
|
+
|
9
|
+
# @return [Integer]
|
10
|
+
# How many days in total have been counted.
|
11
|
+
attr_reader :count
|
12
|
+
|
13
|
+
# @return [Integer]
|
14
|
+
# Count for Mondays.
|
15
|
+
attr_reader :mon
|
16
|
+
|
17
|
+
# @return [Integer]
|
18
|
+
# Count for Tuesdays.
|
19
|
+
attr_reader :tue
|
20
|
+
|
21
|
+
# @return [Integer]
|
22
|
+
# Count for Wednesdays.
|
23
|
+
attr_reader :wed
|
24
|
+
|
25
|
+
# @return [Integer]
|
26
|
+
# Count for Thursdays.
|
27
|
+
attr_reader :thu
|
28
|
+
|
29
|
+
# @return [Integer]
|
30
|
+
# Count for Fridays.
|
31
|
+
attr_reader :fri
|
32
|
+
|
33
|
+
# @return [Integer]
|
34
|
+
# Count for Saturdays.
|
35
|
+
attr_reader :sat
|
36
|
+
|
37
|
+
# @return [Integer]
|
38
|
+
# Count for Sundays.
|
39
|
+
attr_reader :sun
|
40
|
+
|
41
|
+
def initialize(hash)
|
42
|
+
@type = hash.fetch('type', nil)
|
43
|
+
@count = hash.fetch('count', nil)
|
44
|
+
@mon = hash.fetch('mon', nil)
|
45
|
+
@tue = hash.fetch('tue', nil)
|
46
|
+
@wed = hash.fetch('wed', nil)
|
47
|
+
@thu = hash.fetch('thu', nil)
|
48
|
+
@fri = hash.fetch('fri', nil)
|
49
|
+
@sat = hash.fetch('sat', nil)
|
50
|
+
@sun = hash.fetch('sun', nil)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
module LibTAD
|
2
|
+
module Holidays
|
3
|
+
# A holiday event.
|
4
|
+
class Holiday
|
5
|
+
# @return [Integer]
|
6
|
+
# Identifier for the holiday definition. Please note that this id
|
7
|
+
# is not unique, not even with a single year – the same holiday
|
8
|
+
# event may be returned multiple time because it is observed on a
|
9
|
+
# different day, or because it is scheduled in a different calendar
|
10
|
+
# (Hebrew or Muslim calendar) and happens multiple times within a
|
11
|
+
# Gregorian year. Use the uid attribute for purposes where you need a
|
12
|
+
# unique identifier.
|
13
|
+
attr_reader :id
|
14
|
+
|
15
|
+
# @return [String]
|
16
|
+
# Id for the shown holiday instance. The id is designed to be unique
|
17
|
+
# across all holiday instances generated by the timeanddate.com API
|
18
|
+
# services and respects different calendars and other reasons that
|
19
|
+
# may cause events to occurs multiple times within one Gregorian year.
|
20
|
+
#
|
21
|
+
# Example: 0007d600000007db
|
22
|
+
attr_reader :uid
|
23
|
+
|
24
|
+
# @return [Hash<String, String>]
|
25
|
+
# Hash of languages with corresponding holiday/observance name.
|
26
|
+
attr_reader :name
|
27
|
+
|
28
|
+
# @return [::LibTAD::TADTime::TADTime]
|
29
|
+
# Date/time of the holiday instance. Most holidays do have a specific
|
30
|
+
# time – in this case the time components will be skipped. Some
|
31
|
+
# special events like equinoxes and solstices include the exact time
|
32
|
+
# of the event as well, in this case the timestamp will be in local
|
33
|
+
# time zone (including time zone data) (countries with multiple
|
34
|
+
# timezones: local time in capital city).
|
35
|
+
attr_reader :date
|
36
|
+
|
37
|
+
# @return [String]
|
38
|
+
# Further information about the specific holiday. The URL points to
|
39
|
+
# the timeanddate.com web page.
|
40
|
+
#
|
41
|
+
# Example: http://www.timeanddate.com/holidays/us/new-year-day
|
42
|
+
attr_reader :url
|
43
|
+
|
44
|
+
# @return [::LibTAD::Models::Country]
|
45
|
+
# Country of the holiday instance.
|
46
|
+
attr_reader :country
|
47
|
+
|
48
|
+
# @return [String]
|
49
|
+
# Summary of locations where this holiday instance is valid. Element is
|
50
|
+
# only present if the holiday instance does not affect the whole country.
|
51
|
+
attr_reader :locations
|
52
|
+
|
53
|
+
# @return [Array<HolidayState>]
|
54
|
+
# States/subdivisions that are affected by this holiday instance. This
|
55
|
+
# element is only present if the holiday instance is not valid in the
|
56
|
+
# whole country.
|
57
|
+
attr_reader :states
|
58
|
+
|
59
|
+
# @return [Hash<String, String>]
|
60
|
+
# Languages with corresponding holiday description.
|
61
|
+
attr_reader :oneliner
|
62
|
+
|
63
|
+
# @return [Array<String>]
|
64
|
+
# Classification of the holiday. Most days have only one classification,
|
65
|
+
# but some have multiple types associated. This happens e.g. in
|
66
|
+
# conjunction with religious days that also are flag days.
|
67
|
+
#
|
68
|
+
# Example: National Holiday
|
69
|
+
attr_reader :types
|
70
|
+
|
71
|
+
def initialize(hash)
|
72
|
+
@id = hash.fetch('id', nil)
|
73
|
+
@uid = hash.fetch('uid', nil)
|
74
|
+
@name = hash.fetch('name', nil)
|
75
|
+
&.map { |e| [ e['lang'], e['text'] ] }
|
76
|
+
.to_h
|
77
|
+
|
78
|
+
@date = ::LibTAD::TADTime::TADTime.new hash.fetch('date', nil)
|
79
|
+
@url = hash.fetch('url', nil)
|
80
|
+
@country = ::LibTAD::Places::Country.new hash['country'] unless !hash.key?('country')
|
81
|
+
@locations = hash.fetch('locations', nil)
|
82
|
+
@states = hash.fetch('states', nil)
|
83
|
+
&.map { |e| HolidayState.new(e) }
|
84
|
+
|
85
|
+
@oneliner = hash.fetch('oneliner', nil)
|
86
|
+
&.map { |e| [ e['lang'], e['text'] ] }
|
87
|
+
.to_h
|
88
|
+
|
89
|
+
@types = hash.fetch('types', nil)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module LibTAD
|
2
|
+
module Holidays
|
3
|
+
# A holiday event in a specific state.
|
4
|
+
class HolidayState
|
5
|
+
# @return [String]
|
6
|
+
# An ISO 3166-1 country or ISO 3166-2 country state code.
|
7
|
+
# @see https://dev-test.timeanddate.com/docs/external-references#ISO3166 ISO3166
|
8
|
+
attr_reader :iso
|
9
|
+
|
10
|
+
# @return [Integer]
|
11
|
+
# Unique id of the state/subdivision.
|
12
|
+
attr_reader :id
|
13
|
+
|
14
|
+
# @return [String]
|
15
|
+
# Abbreviation of the state/subdivision.
|
16
|
+
attr_reader :abbrev
|
17
|
+
|
18
|
+
# @return [String]
|
19
|
+
# Common name of the state/subdivision.
|
20
|
+
attr_reader :name
|
21
|
+
|
22
|
+
# @return [String]
|
23
|
+
# Eventual exception if the holiday does not affect the whole state/subdivision.
|
24
|
+
attr_reader :exception
|
25
|
+
|
26
|
+
def initialize(hash)
|
27
|
+
@iso = hash.fetch('iso', nil)
|
28
|
+
@id = hash.fetch('id', nil)
|
29
|
+
@abbrev = hash.fetch('abbrev', nil)
|
30
|
+
@name = hash.fetch('name', nil)
|
31
|
+
@exception = hash.fetch('exception', nil)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
module LibTAD
|
2
|
+
module Holidays
|
3
|
+
# All valid holiday types
|
4
|
+
HOLIDAY_TYPE = [
|
5
|
+
# Combinations of all known types (except fun).
|
6
|
+
:all,
|
7
|
+
|
8
|
+
# Default holiday set: federal, federallocal, obs1, weekday.
|
9
|
+
:default,
|
10
|
+
|
11
|
+
# Default set depending on country.
|
12
|
+
# For most countries, this is the same as default. However,
|
13
|
+
# for some countries it makes sense to add further types – this type
|
14
|
+
# accounts for this case. Currently this only affects the UK:
|
15
|
+
# local holidays are added as well. This is to include days that
|
16
|
+
# are only valid in one of countries – e.g. Jan 2 is a holiday only for Scotland.
|
17
|
+
:countrydefault,
|
18
|
+
|
19
|
+
# Important (obs1), common (obs2) and other observances (obs3).
|
20
|
+
:obs,
|
21
|
+
|
22
|
+
# All religious holidays: buddhism, christian, hebrew, hinduism, muslim, orthodox.
|
23
|
+
:religious,
|
24
|
+
|
25
|
+
# Some countries (e.g. Sweden) have days which are de facto treted as official holidays, even if there's no legal regulation.
|
26
|
+
:defacto,
|
27
|
+
|
28
|
+
# Federal/national holidays.
|
29
|
+
:federal,
|
30
|
+
|
31
|
+
# Common local holidays.
|
32
|
+
:federallocal,
|
33
|
+
|
34
|
+
# Flag days.
|
35
|
+
:flagday,
|
36
|
+
|
37
|
+
# Half day holidays (only afternoon off). These days can be half day holidays either by law, or being de facto half day holidays (e.g. Sweden).
|
38
|
+
:halfday,
|
39
|
+
|
40
|
+
# Local holidays.
|
41
|
+
:local,
|
42
|
+
|
43
|
+
# Local observances.
|
44
|
+
:local2,
|
45
|
+
|
46
|
+
# Important observances.
|
47
|
+
:obs1,
|
48
|
+
|
49
|
+
# Common observances.
|
50
|
+
:obs2,
|
51
|
+
|
52
|
+
# Other observances
|
53
|
+
:obs3,
|
54
|
+
|
55
|
+
# Optional holiday.
|
56
|
+
# Employment and holiday laws in certain countries allow employees to choose a
|
57
|
+
# limited number of holidays from a list of holidays. Some employees may
|
58
|
+
# choose to take the day off on these day, however, most offices and businesses remain open.
|
59
|
+
:optional,
|
60
|
+
|
61
|
+
# Normal working days.
|
62
|
+
# In some cases, working days are declared non-working days
|
63
|
+
# in order to form a longer period of consecutive non-working days.
|
64
|
+
# In exchange, weekend days become normal working days.
|
65
|
+
:weekday,
|
66
|
+
|
67
|
+
# Buddhist holidays.
|
68
|
+
:buddhism,
|
69
|
+
|
70
|
+
# Christian holidays.
|
71
|
+
:christian,
|
72
|
+
|
73
|
+
# Hebrew holidays.
|
74
|
+
:hebrew,
|
75
|
+
|
76
|
+
# Hindu holidays.
|
77
|
+
:hinduism,
|
78
|
+
|
79
|
+
# Muslim holidays.
|
80
|
+
:muslim,
|
81
|
+
|
82
|
+
# Orthodox holidays.
|
83
|
+
:orthodox,
|
84
|
+
|
85
|
+
# Religious holidays, not covered by other types.
|
86
|
+
:otherreligion,
|
87
|
+
|
88
|
+
# Seasons (equinoxes and solstices).
|
89
|
+
:seasons,
|
90
|
+
|
91
|
+
# Sport events.
|
92
|
+
:sport,
|
93
|
+
|
94
|
+
# Time zone events – daylight savings time start and end.
|
95
|
+
:tz,
|
96
|
+
|
97
|
+
# United Nations days.
|
98
|
+
:un,
|
99
|
+
|
100
|
+
# Worldwide observances.
|
101
|
+
:world,
|
102
|
+
|
103
|
+
# Fun, Wacky and Trivial holidays.
|
104
|
+
:fun,
|
105
|
+
].freeze
|
106
|
+
end
|
107
|
+
end
|