libtad 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +7 -0
  2. data/lib/libtad.rb +123 -0
  3. data/lib/services/astronomy.rb +102 -0
  4. data/lib/services/date_calculator.rb +155 -0
  5. data/lib/services/holidays.rb +34 -0
  6. data/lib/services/onthisday.rb +42 -0
  7. data/lib/services/places.rb +26 -0
  8. data/lib/services/time.rb +143 -0
  9. data/lib/types/astronomy/astronomy_current.rb +58 -0
  10. data/lib/types/astronomy/astronomy_day.rb +32 -0
  11. data/lib/types/astronomy/astronomy_day_event.rb +76 -0
  12. data/lib/types/astronomy/astronomy_event.rb +24 -0
  13. data/lib/types/astronomy/astronomy_event_class.rb +37 -0
  14. data/lib/types/astronomy/astronomy_location.rb +31 -0
  15. data/lib/types/astronomy/astronomy_object.rb +27 -0
  16. data/lib/types/astronomy/astronomy_object_details.rb +32 -0
  17. data/lib/types/astronomy/astronomy_object_type.rb +36 -0
  18. data/lib/types/astronomy/moonphase.rb +37 -0
  19. data/lib/types/date_calculator/business_days_filter.rb +39 -0
  20. data/lib/types/date_calculator/business_holiday.rb +26 -0
  21. data/lib/types/date_calculator/period.rb +44 -0
  22. data/lib/types/date_calculator/weekdays.rb +54 -0
  23. data/lib/types/holidays/holiday.rb +93 -0
  24. data/lib/types/holidays/holiday_state.rb +35 -0
  25. data/lib/types/holidays/holiday_type.rb +107 -0
  26. data/lib/types/onthisday/event.rb +51 -0
  27. data/lib/types/onthisday/event_type.rb +15 -0
  28. data/lib/types/onthisday/name.rb +24 -0
  29. data/lib/types/onthisday/person.rb +39 -0
  30. data/lib/types/places/country.rb +20 -0
  31. data/lib/types/places/geo.rb +34 -0
  32. data/lib/types/places/location.rb +43 -0
  33. data/lib/types/places/location_ref.rb +24 -0
  34. data/lib/types/places/place.rb +24 -0
  35. data/lib/types/places/region.rb +35 -0
  36. data/lib/types/time/datetime.rb +93 -0
  37. data/lib/types/time/dst_entry.rb +48 -0
  38. data/lib/types/time/time.rb +30 -0
  39. data/lib/types/time/time_change.rb +49 -0
  40. data/lib/types/time/timezone.rb +51 -0
  41. metadata +137 -0
@@ -0,0 +1,51 @@
1
+ module LibTAD
2
+ module OnThisDay
3
+ # A historical event.
4
+ class Event
5
+ # @return [Integer]
6
+ # Identifier for the event.
7
+ attr_reader :id
8
+
9
+ # @return [Hash<String, String>]
10
+ # Hash of languages with corresponding event name.
11
+ attr_reader :name
12
+
13
+ # @return [::LibTAD::TADTime::TADTime]
14
+ # Date of the event.
15
+ attr_reader :date
16
+
17
+ # @return [String]
18
+ # Location of the event.
19
+ attr_reader :location
20
+
21
+ # @return [Array<String>]
22
+ # Event categories.
23
+ attr_reader :categories
24
+
25
+ # @return [Array<::LibTAD::Places::Country>]
26
+ # Related countries.
27
+ attr_reader :countries
28
+
29
+ # @return [Hash<String, String>]
30
+ # Languages with corresponding event description.
31
+ attr_reader :description
32
+
33
+ def initialize(hash)
34
+ @id = hash.fetch('id', nil)
35
+ @name = hash.fetch('name', nil)
36
+ &.map { |e| [ e['lang'], e['text'] ] }
37
+ .to_h
38
+
39
+ @date = ::LibTAD::TADTime::TADTime.new hash.fetch('date', nil)
40
+ @location = hash.fetch('location', nil)
41
+ @categories = hash.fetch('categories', nil)
42
+ @countries = hash.fetch('countries', nil)
43
+ &.map { |e| ::LibTAD::Places::Country.new(e) }
44
+
45
+ @description = hash.fetch('description', nil)
46
+ &.map { |e| [ e['lang'], e['text'] ] }
47
+ .to_h
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,15 @@
1
+ module LibTAD
2
+ module OnThisDay
3
+ # All valid event types.
4
+ EVENT_TYPE = [
5
+ # A historical event.
6
+ :events,
7
+
8
+ # Birth of a historical person.
9
+ :births,
10
+
11
+ # Death of a historical person.
12
+ :deaths
13
+ ].freeze
14
+ end
15
+ end
@@ -0,0 +1,24 @@
1
+ module LibTAD
2
+ module OnThisDay
3
+ # A full name.
4
+ class Name
5
+ # @return [String]
6
+ # First name.
7
+ attr_reader :first
8
+
9
+ # @return [String]
10
+ # Middle name.
11
+ attr_reader :middle
12
+
13
+ # @return [String]
14
+ # Last name.
15
+ attr_reader :last
16
+
17
+ def initialize(hash)
18
+ @first = hash.fetch('first', nil)
19
+ @middle = hash.fetch('middle', nil)
20
+ @last = hash.fetch('last', nil)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,39 @@
1
+ module LibTAD
2
+ module OnThisDay
3
+ # A historical person.
4
+ class Person
5
+ # @return [Integer]
6
+ # Identifier for the person.
7
+ attr_reader :id
8
+
9
+ # @return [::LibTAD::OnThisDay::Name]
10
+ # Full name.
11
+ attr_reader :name
12
+
13
+ # @return [::LibTAD::TADTime::TADTime]
14
+ # Date of birth.
15
+ attr_reader :birthdate
16
+
17
+ # @return [::LibTAD::TADTime::TADTime]
18
+ # Date of death, if applicable.
19
+ attr_reader :deathdate
20
+
21
+ # @return [Array<String>]
22
+ # Person categories.
23
+ attr_reader :categories
24
+
25
+ # @return [Array<String>]
26
+ # The nationalities of the person
27
+ attr_reader :nationalities
28
+
29
+ def initialize(hash)
30
+ @id = hash.fetch('id', nil)
31
+ @name = ::LibTAD::OnThisDay::Name.new hash.fetch('name', nil)
32
+ @birthdate = ::LibTAD::TADTime::TADTime.new hash['birthdate'] unless !hash.key?('birthdate')
33
+ @deathdate = ::LibTAD::TADTime::TADTime.new hash['deathdate'] unless !hash.key?('deathdate')
34
+ @categories = hash.fetch('categories', nil)
35
+ @nationalities = hash.fetch('nationalities', nil)
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,20 @@
1
+ module LibTAD
2
+ module Places
3
+ # Information about a country.
4
+ class Country
5
+ # @return [String]
6
+ # The ISO 3166-1-alpha-2 country code.
7
+ # @see https://dev-test.timeanddate.com/docs/external-references#ISO3166 ISO3166
8
+ attr_reader :id
9
+
10
+ # @return [String]
11
+ # Full name of the country.
12
+ attr_reader :name
13
+
14
+ def initialize(hash)
15
+ @id = hash.fetch('id', nil)
16
+ @name = hash.fetch('name', nil)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,34 @@
1
+ module LibTAD
2
+ module Places
3
+ # Geographical information about a location.
4
+ class Geo
5
+ # @return [String]
6
+ # The name of the location.
7
+ attr_reader :name
8
+
9
+ # @return [String]
10
+ # The state of the location within the country (only if applicable).
11
+ attr_reader :state
12
+
13
+ # @return [Country]
14
+ # Country of the location.
15
+ attr_reader :country
16
+
17
+ # @return [Float]
18
+ # Geographical latitude of the location.
19
+ attr_reader :latitude
20
+
21
+ # @return [Float]
22
+ # Geographical longitude of the location.
23
+ attr_reader :longitude
24
+
25
+ def initialize(hash)
26
+ @name = hash.fetch('name', nil)
27
+ @state = hash.fetch('state', nil)
28
+ @country = Country.new hash['country'] unless !hash.key?('country')
29
+ @latitude = hash.fetch('latitude', nil)
30
+ @longitude = hash.fetch('longitude', nil)
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,43 @@
1
+ module LibTAD
2
+ module Places
3
+ # Information about a location.
4
+ class Location
5
+ # @return [String]
6
+ # The id of the location.
7
+ attr_reader :id
8
+
9
+ # @return [String]
10
+ # The part of the queried placeid that this location matches.
11
+ attr_reader :matchparam
12
+
13
+ # @return [Geo]
14
+ # Geographical information about the location.
15
+ attr_reader :geo
16
+
17
+ # @return [::LibTAD::TADTime::TADTime]
18
+ # Time information. Only present if requested.
19
+ attr_reader :time
20
+
21
+ # @return [Array<::LibTAD::TADTime::TimeChange>]
22
+ # Time changes (daylight savings time). Only present if requested and information is available.
23
+ attr_reader :timechanges
24
+
25
+ # @return [Array<::LibTAD::Astronomy::AstronomyObject>]
26
+ # Astronomical information – sunrise and sunset times. Only for the timeservice and if requested.
27
+ attr_reader :objects
28
+
29
+ def initialize(hash)
30
+ @id = hash.fetch('id', nil)
31
+ @matchparam = hash.fetch('matchparam', nil)
32
+ @geo = Geo.new hash['geo'] unless !hash.key?('geo')
33
+ @time = ::LibTAD::TADTime::TADTime.new hash['time'] unless !hash.key?('time')
34
+ @timechanges = hash.fetch('timechanges', nil)
35
+ &.map { |e| ::LibTAD::TADTime::TimeChange.new(e) }
36
+
37
+ @objects = hash.fetch('astronomy', nil)
38
+ &.fetch('objects', nil)
39
+ &.map { |e| ::LibTAD::Astronomy::AstronomyObject.new(e) }
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,24 @@
1
+ module LibTAD
2
+ module Places
3
+ # Information about a location referenced by a region.
4
+ class LocationRef
5
+ # @return [String]
6
+ # The ID of the location.
7
+ attr_reader :id
8
+
9
+ # @return [String]
10
+ # The name of the location.
11
+ attr_reader :name
12
+
13
+ # @return [State]
14
+ # The state of the location within the country (only if applicable).
15
+ attr_reader :state
16
+
17
+ def initialize(hash)
18
+ @id = hash.fetch('id', nil)
19
+ @name = hash.fetch('name', nil)
20
+ @state = hash.fetch('state', nil)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ module LibTAD
2
+ module Places
3
+ # Information about a place.
4
+ class Place
5
+ # @return [String]
6
+ # Numerical ID of the referenced place.
7
+ attr_reader :id
8
+
9
+ # @return [String]
10
+ # Textual ID of the referenced place.
11
+ attr_reader :urlid
12
+
13
+ # @return [Geo]
14
+ # Geographical information about the location.
15
+ attr_reader :geo
16
+
17
+ def initialize(hash)
18
+ @id = hash.fetch('id', nil)
19
+ @urlid = hash.fetch('urlid', nil)
20
+ @geo = Geo.new hash['geo'] unless !hash.key?('geo')
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,35 @@
1
+ module LibTAD
2
+ module Places
3
+ # The geographical region. Contains country, a textual description of
4
+ # the region and the name of the biggest place.
5
+ class Region
6
+ # @return [Country]
7
+ # Country which the region belongs to.
8
+ attr_reader :country
9
+
10
+ # @return [String]
11
+ # Textual description of a region.
12
+ #
13
+ # Example: All locations
14
+ # Example: most of Newfoundland and Labrador
15
+ # Example: some regions of Nunavut Territory; small region of Ontario
16
+ attr_reader :desc
17
+
18
+ # @return [String]
19
+ # Name of the biggest city within the region.
20
+ attr_reader :biggestplace
21
+
22
+ # @return [Array<LocationRef>]
23
+ # A list of all locations referenced by this region. Only returned if requested by specifying the parameter listplaces.
24
+ attr_reader :locations
25
+
26
+ def initialize(hash)
27
+ @country = Country.new hash['country'] unless !hash.key?('country')
28
+ @desc = hash.fetch('desc', nil)
29
+ @biggestplace = hash.fetch('biggestplace', nil)
30
+ @locations = hash.fetch('locations', nil)
31
+ &.map { |e| LocationRef.new(e) }
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,93 @@
1
+ require 'date'
2
+
3
+ module LibTAD
4
+ module TADTime
5
+ # Date and time, split up into components.
6
+ class TADDateTime
7
+ # @return [Integer]
8
+ # The year component of the timestamp.
9
+ attr_reader :year
10
+
11
+ # @return [Integer]
12
+ # The month component of the timestamp.
13
+ attr_reader :month
14
+
15
+ # @return [Integer]
16
+ # The day component of the timestamp.
17
+ attr_reader :day
18
+
19
+ # @return [Integer]
20
+ # The hour component of the timestamp.
21
+ attr_reader :hour
22
+
23
+ # @return [Integer]
24
+ # The minute component of the timestamp.
25
+ attr_reader :minute
26
+
27
+ # @return [Integer]
28
+ # The second component of the timestamp.
29
+ attr_reader :second
30
+
31
+ def initialize(year: nil, month: nil, day: nil, hour: nil, minute: nil, second: nil)
32
+ @year = year
33
+ @month = month
34
+ @day = day
35
+ @hour = hour
36
+ @minute = minute
37
+ @second = second
38
+ end
39
+
40
+ # @return [Boolean]
41
+ # Compare equality to another instance.
42
+ def ==(other)
43
+ other.year == @year &&
44
+ other.month == @month &&
45
+ other.day == @day &&
46
+ other.minute == @minute &&
47
+ other.second == @second
48
+ end
49
+
50
+ # @return [::LibTAD::TADTime::TADDateTime]
51
+ # Helper function for initializing from json.
52
+ def from_json(hash)
53
+ @year = hash&.fetch('year', nil)
54
+ @month = hash&.fetch('month', nil)
55
+ @day = hash&.fetch('day', nil)
56
+ @hour = hash&.fetch('hour', nil)
57
+ @minute = hash&.fetch('minute', nil)
58
+ @second = hash&.fetch('second', nil)
59
+
60
+ self
61
+ end
62
+
63
+ # @return [String]
64
+ # Helper function for formatting as ISO 8601.
65
+ def to_iso8601
66
+ year = @year.to_s.rjust(4, '0')
67
+ month = @month.to_s.rjust(2, '0')
68
+ day = @day.to_s.rjust(2, '0')
69
+ "#{year}-#{month}-#{day}"
70
+ end
71
+
72
+ # @return [::LibTAD::TADTime::TADDateTime]
73
+ # Get the current time.
74
+ def now
75
+ dt = ::Time.now
76
+ @year = dt.year
77
+ @month = dt.month
78
+ @day = dt.day
79
+ @hour = dt.hour
80
+ @minute = dt.min
81
+ @second = dt.sec
82
+
83
+ self
84
+ end
85
+
86
+ # @return [::DateTime]
87
+ # Try converting to Time from the standard library.
88
+ def to_std!
89
+ ::Time.new(@year, @month, @day, @hour, @minute, @second)
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,48 @@
1
+ module LibTAD
2
+ module TADTime
3
+ # DST information about a region.
4
+ class DSTEntry
5
+ # @return [::LibTAD::Places::Region]
6
+ # The geographical region where this information is valid.
7
+ # Contains country, a textual description of the region and the name of the biggest place.
8
+ attr_reader :region
9
+
10
+ # @return [::LibTAD::TADTime::TADTimeZone]
11
+ # Information about the standard time zone. This element is always returned.
12
+ attr_reader :stdtimezone
13
+
14
+ # @return [::LibTAD::TADTime::TADTimeZone]
15
+ # Information about the daylight savings time zone. Suppressed, if there are no DST changes in the
16
+ # queried year. Please note that if the region is on daylight savings time for the whole year, this information will be returned
17
+ # the stdtimezone element. Additionally, the special element will be set to allyear.
18
+ attr_reader :dsttimezone
19
+
20
+ # @return [DstEntrySpecial]
21
+ # Indicates if the region does not observe DST at all, or is on DST all year long.
22
+ attr_reader :special
23
+
24
+ # @return [String]
25
+ # Starting date of daylight savings time. Suppressed, if there are no DST changes in the queried year.
26
+ attr_reader :dststart
27
+
28
+ # @return [String]
29
+ # Ending date of daylight savings time. Suppressed, if there are no DST changes in the queried year.
30
+ attr_reader :dstend
31
+
32
+ # @return [Array<::LibTAD::TADTime::TimeChange]
33
+ # Time changes (daylight savings time). Only present if requested and information is available.
34
+ attr_reader :timechanges
35
+
36
+ def initialize(hash)
37
+ @region = ::LibTAD::Places::Region.new hash['region'] unless !hash.key?('region')
38
+ @stdtimezone = ::LibTAD::TADTime::TADTimeZone.new hash['stdtimezone'] unless !hash.key?('stdtimezone')
39
+ @dsttimezone = ::LibTAD::TADTime::TADTimeZone.new hash['dsttimezone'] unless !hash.key?('dsttimezone')
40
+ @special = hash.dig('special', 'type')
41
+ @dststart = hash.fetch('dststart', nil)
42
+ @dstend = hash.fetch('dstend', nil)
43
+ @timechanges = hash.fetch('timechanges', nil)
44
+ &.map { |e| ::LibTAD::TADTime::TimeChange.new(e) }
45
+ end
46
+ end
47
+ end
48
+ end