when_exe 0.4.1 → 0.4.2

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 (96) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +36 -33
  3. data/bin/locales.rb +1 -1
  4. data/bin/make_ttl.rb.config +1 -1
  5. data/lib/when_exe.rb +27 -16
  6. data/lib/when_exe/basictypes.rb +772 -771
  7. data/lib/when_exe/calendartypes.rb +1485 -1453
  8. data/lib/when_exe/coordinates.rb +5 -0
  9. data/lib/when_exe/core/compatibility.rb +1 -1
  10. data/lib/when_exe/core/duration.rb +147 -116
  11. data/lib/when_exe/core/extension.rb +499 -497
  12. data/lib/when_exe/ephemeris.rb +1952 -1951
  13. data/lib/when_exe/ephemeris/eclipse.rb +5 -4
  14. data/lib/when_exe/ephemeris/notes.rb +457 -421
  15. data/lib/when_exe/ephemeris/planets.rb +585 -585
  16. data/lib/when_exe/ephemeris/sun.rb +214 -214
  17. data/lib/when_exe/google_api.rb +153 -0
  18. data/lib/when_exe/icalendar.rb +1640 -1632
  19. data/lib/when_exe/inspect.rb +42 -20
  20. data/lib/when_exe/linkeddata.rb +28 -7
  21. data/lib/when_exe/locales/autoload.rb +2 -1
  22. data/lib/when_exe/locales/locale.rb +35 -15
  23. data/lib/when_exe/locales/zh.rb +77 -0
  24. data/lib/when_exe/mini_application.rb +3 -1
  25. data/lib/when_exe/{googlecalendar.rb → obsolete/googlecalendar.rb} +144 -144
  26. data/lib/when_exe/parts/enumerator.rb +498 -486
  27. data/lib/when_exe/parts/geometric_complex.rb +397 -397
  28. data/lib/when_exe/parts/timezone.rb +246 -241
  29. data/lib/when_exe/region/armenian.rb +55 -56
  30. data/lib/when_exe/region/babylonian.rb +406 -405
  31. data/lib/when_exe/region/bahai.rb +107 -106
  32. data/lib/when_exe/region/balinese.rb +624 -622
  33. data/lib/when_exe/region/chinese.rb +1071 -1026
  34. data/lib/when_exe/region/chinese/epochs.rb +28 -28
  35. data/lib/when_exe/region/chinese/notes.rb +219 -0
  36. data/lib/when_exe/region/chinese/twins.rb +803 -803
  37. data/lib/when_exe/region/christian.rb +21 -15
  38. data/lib/when_exe/region/coptic.rb +107 -106
  39. data/lib/when_exe/region/discordian.rb +218 -218
  40. data/lib/when_exe/region/east_asian.rb +1 -1
  41. data/lib/when_exe/region/french.rb +126 -56
  42. data/lib/when_exe/region/geologicalage.rb +639 -639
  43. data/lib/when_exe/region/goddess.rb +60 -58
  44. data/lib/when_exe/region/hanke_henry.rb +2 -2
  45. data/lib/when_exe/region/indian.rb +1225 -1222
  46. data/lib/when_exe/region/international_fixed.rb +96 -97
  47. data/lib/when_exe/region/iranian.rb +206 -203
  48. data/lib/when_exe/region/islamic.rb +102 -102
  49. data/lib/when_exe/region/japanese.rb +126 -71
  50. data/lib/when_exe/region/japanese/epochs.rb +426 -426
  51. data/lib/when_exe/region/japanese/notes.rb +101 -81
  52. data/lib/when_exe/region/japanese/residues.rb +1345 -1311
  53. data/lib/when_exe/region/japanese/twins.rb +225 -225
  54. data/lib/when_exe/region/japanese/weeks.rb +112 -112
  55. data/lib/when_exe/region/javanese.rb +230 -230
  56. data/lib/when_exe/region/jewish.rb +130 -131
  57. data/lib/when_exe/region/m17n.rb +114 -114
  58. data/lib/when_exe/region/martian.rb +258 -258
  59. data/lib/when_exe/region/mayan.rb +11 -8
  60. data/lib/when_exe/region/pax.rb +4 -5
  61. data/lib/when_exe/region/pope.rb +1 -1
  62. data/lib/when_exe/region/positivist.rb +100 -100
  63. data/lib/when_exe/region/residue.rb +162 -162
  64. data/lib/when_exe/region/roman.rb +333 -333
  65. data/lib/when_exe/region/{soviet.rb → russian.rb} +221 -209
  66. data/lib/when_exe/region/shire.rb +222 -223
  67. data/lib/when_exe/region/symmetry.rb +50 -50
  68. data/lib/when_exe/region/thai.rb +336 -336
  69. data/lib/when_exe/region/tibetan.rb +315 -316
  70. data/lib/when_exe/region/tranquility.rb +207 -208
  71. data/lib/when_exe/region/vanishing_leprechaun.rb +3 -1
  72. data/lib/when_exe/region/vietnamese.rb +449 -440
  73. data/lib/when_exe/region/weekdate.rb +80 -80
  74. data/lib/when_exe/region/world.rb +170 -171
  75. data/lib/when_exe/region/world_season.rb +89 -89
  76. data/lib/when_exe/region/yerm.rb +3 -3
  77. data/lib/when_exe/region/zoroastrian.rb +205 -205
  78. data/lib/when_exe/timestandard.rb +708 -707
  79. data/lib/when_exe/tmduration.rb +338 -338
  80. data/lib/when_exe/tmobjects.rb +1356 -1356
  81. data/lib/when_exe/tmposition.rb +66 -31
  82. data/lib/when_exe/version.rb +16 -2
  83. data/test/examples/Residue.m17n +83 -83
  84. data/test/examples/Terms.m17n +2 -2
  85. data/test/test.rb +2 -2
  86. data/test/test/google_api.rb +65 -0
  87. data/test/test/linkeddata.rb +1 -1
  88. data/test/test/{googlecalendar.rb → obsolete/googlecalendar.rb} +194 -194
  89. data/test/test/region/indian.rb +90 -85
  90. data/test/test/region/m17n.rb +7 -7
  91. data/test/test/region/mayan.rb +195 -195
  92. data/test/test/region/residue.rb +153 -153
  93. data/test/test/tmposition.rb +11 -1
  94. data/when_exe.gemspec +2 -2
  95. metadata +95 -8
  96. data/test/test.rb.config +0 -1
@@ -1,5 +1,5 @@
1
1
  BEGIN:B:M17n
2
- # Copyright (C) 2011-2014 Takashi SUGA
2
+ # Copyright (C) 2011-2015 Takashi SUGA
3
3
  #
4
4
  # You may use and/or modify this file according to the license
5
5
  # described in the LICENSE.txt file included in this archive.
@@ -11,7 +11,7 @@ BEGIN:B:M17n
11
11
  [Calendars_and_Eras=, 暦法と紀元=]
12
12
 
13
13
  BEGIN:B:M17n
14
- NAMES:[Month, 月=ja:%E6%9C%88_(%E6%9A%A6)]
14
+ NAMES:[month name, 月の名前=ja:%E6%9C%88_(%E6%9A%A6), *Month=]
15
15
  B:M17N:[January, 1月]
16
16
  B:M17N:[February, 2月]
17
17
  B:M17N:[March, 3月]
data/test/test.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  # -*- coding: utf-8 -*-
3
3
  =begin
4
- Copyright (C) 2011-2014 Takashi SUGA
4
+ Copyright (C) 2011-2015 Takashi SUGA
5
5
 
6
6
  You may use and/or modify this file according to the license
7
7
  described in the LICENSE.txt file included in this archive.
@@ -48,7 +48,7 @@ require './test/calendartypes'
48
48
  require './test/calendarnote'
49
49
  require './test/inspect'
50
50
  require './test/linkeddata'
51
- require './test/googlecalendar'
51
+ require './test/google_api'
52
52
  require './test/region/m17n'
53
53
  require './test/region/residue'
54
54
  require './test/region/christian'
@@ -0,0 +1,65 @@
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2015 Takashi SUGA
4
+
5
+ You may use and/or modify this file according to the license
6
+ described in the LICENSE.txt file included in this archive.
7
+ =end
8
+
9
+ require 'fileutils'
10
+ require 'yaml'
11
+ require 'google/api_client' if FileTest.exist?('google-api.yaml')
12
+
13
+ module MiniTest
14
+
15
+ class GoogleAPI < MiniTest::TestCase
16
+
17
+ HOLIDAYS = [
18
+ ["2015-01-01", "New Year's Day" ],
19
+ ["2015-01-12", "Coming of Age Day" ],
20
+ ["2015-02-11", "National Foundation Day" ],
21
+ ["2015-03-21", "Spring Equinox" ],
22
+ ["2015-04-29", "Shōwa Day" ],
23
+ ["2015-05-03", "Constitution Memorial Day" ],
24
+ ["2015-05-04", "Greenery Day" ],
25
+ ["2015-05-05", "Children's Day" ],
26
+ ["2015-05-06", "Constitution Memorial Day observed"],
27
+ ["2015-07-20", "Sea Day" ],
28
+ ["2015-09-21", "Respect for the Aged Day" ],
29
+ ["2015-09-22", "Bridge Public holiday" ],
30
+ ["2015-09-23", "Autumn Equinox" ],
31
+ ["2015-10-12", "Sports Day" ],
32
+ ["2015-11-03", "Culture Day" ],
33
+ ["2015-11-23", "Labor Thanksgiving Day" ],
34
+ ["2015-12-23", "Emperor's Birthday" ]
35
+ ]
36
+
37
+ if FileTest.exist?('google-api.yaml')
38
+
39
+ def test__enum_for
40
+ oauth_yaml = YAML.load_file('google-api.yaml')
41
+ client = Google::APIClient.new(:application_name => "when_exe",
42
+ :application_version => When::VERSION)
43
+ client.authorization.client_id = oauth_yaml["client_id"]
44
+ client.authorization.client_secret = oauth_yaml["client_secret"]
45
+ client.authorization.scope = oauth_yaml["scope"]
46
+ client.authorization.refresh_token = oauth_yaml["refresh_token"]
47
+ client.authorization.access_token = oauth_yaml["access_token"]
48
+ service = client.discovered_api('calendar', 'v3')
49
+ calendar = When::GoogleAPI::Calendar.list(client, service,
50
+ 'en.japanese#holiday@group.v.calendar.google.com')
51
+ assert_equal(calendar.calendar_id, 'en.japanese#holiday@group.v.calendar.google.com')
52
+ holidays = HOLIDAYS.dup
53
+ calendar.enum_for(When.when?('20150101/1231')).each do |date|
54
+ assert_equal(holidays.shift, [date.to_s, date.events[0].summary])
55
+ end
56
+ assert_equal([], holidays)
57
+ end
58
+ else
59
+ def test__enum_for
60
+ end
61
+ puts "Tests for GoogleCalendar have been skipped at line #{__LINE__} of #{__FILE__.split(/\//)[-1]}."
62
+ end
63
+ end
64
+ end
65
+
@@ -59,7 +59,7 @@ module MiniTest::LinkedData
59
59
  "@reverse"=>
60
60
  {"rdfs:member"=>
61
61
  {"@id"=>"http://hosi.org/tp/2015-01%5E%5ECivil?note=Ephemeris"}},
62
- "day:Moon_Age"=>"Moon_Age(25.4)"}]},
62
+ "day:Moon_Age"=>"Moon_Age(24.4)"}]},
63
63
  '明治5-12-' => {"@context"=>
64
64
  {"xsd"=>"http://www.w3.org/2001/XMLSchema",
65
65
  "rdf"=>"http://www.w3.org/1999/02/22-rdf-syntax-ns#",
@@ -1,194 +1,194 @@
1
- # -*- coding: utf-8 -*-
2
- =begin
3
- Copyright (C) 2012-2014 Takashi SUGA
4
-
5
- You may use and/or modify this file according to the license
6
- described in the LICENSE.txt file included in this archive.
7
- =end
8
-
9
- module MiniTest
10
-
11
- class GoogleCalendar < MiniTest::TestCase
12
-
13
- config = ::When.config
14
- ACCOUNT, PASSWORD = config['@'] if config.key?('@')
15
-
16
- PUBLIC_FEED = "http://www.google.com/calendar/feeds/%s__%s%%40holiday.calendar.google.com/public/full"
17
- PRIVATE_FEED = "http://www.google.com/calendar/feeds/%s%%40gmail.com/private/full"
18
- YEAR = "1949"
19
- RULE0 = <<RULE0
20
- DTSTART;VALUE=DATE:19490101
21
- DTEND;VALUE=DATE:19490102
22
- RRULE:FREQ=YEARLY
23
- RULE0
24
- RULE1 = <<RULE1
25
- RRULE:FREQ=YEARLY
26
- DTSTART;TZID=America/New_York:#{YEAR}0321T120000
27
- DTEND;TZID=America/New_York:#{YEAR}0322T130000
28
- RULE1
29
- RECURRENCE = <<RECURRENCE
30
- DTSTART;TZID=America/New_York:#{YEAR}0321T120000
31
- DTEND;TZID=America/New_York:#{YEAR}0322T130000
32
- RRULE:FREQ=YEARLY
33
- BEGIN:VTIMEZONE
34
- TZID:America/New_York
35
- X-LIC-LOCATION:America/New_York
36
- BEGIN:DAYLIGHT
37
- TZOFFSETFROM:-0500
38
- TZOFFSETTO:-0400
39
- TZNAME:EDT
40
- DTSTART:19700308T020000
41
- RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
42
- END:DAYLIGHT
43
- BEGIN:STANDARD
44
- TZOFFSETFROM:-0400
45
- TZOFFSETTO:-0500
46
- TZNAME:EST
47
- DTSTART:19701101T020000
48
- RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
49
- END:STANDARD
50
- END:VTIMEZONE
51
- RECURRENCE
52
-
53
- HOLIDAYS1 = [ # Public Feed
54
- ["元日", "2013-01-01T00:00:00.00+09:00", "2013-01-02T00:00:00.00+09:00"],
55
- ["銀行休業日", "2013-01-02T00:00:00.00+09:00", "2013-01-03T00:00:00.00+09:00"],
56
- ["銀行休業日", "2013-01-03T00:00:00.00+09:00", "2013-01-04T00:00:00.00+09:00"],
57
- ["成人の日", "2013-01-14T00:00:00.00+09:00", "2013-01-15T00:00:00.00+09:00"],
58
- ["建国記念の日", "2013-02-11T00:00:00.00+09:00", "2013-02-12T00:00:00.00+09:00"],
59
- ["春分の日", "2013-03-20T00:00:00.00+09:00", "2013-03-21T00:00:00.00+09:00"],
60
- ["昭和の日", "2013-04-29T00:00:00.00+09:00", "2013-04-30T00:00:00.00+09:00"],
61
- ["憲法記念日", "2013-05-03T00:00:00.00+09:00", "2013-05-04T00:00:00.00+09:00"],
62
- ["みどりの日", "2013-05-04T00:00:00.00+09:00", "2013-05-05T00:00:00.00+09:00"],
63
- ["こどもの日", "2013-05-05T00:00:00.00+09:00", "2013-05-06T00:00:00.00+09:00"],
64
- ["こどもの日 振替休日", "2013-05-06T00:00:00.00+09:00", "2013-05-07T00:00:00.00+09:00"],
65
- ["海の日", "2013-07-15T00:00:00.00+09:00", "2013-07-16T00:00:00.00+09:00"],
66
- ["敬老の日", "2013-09-16T00:00:00.00+09:00", "2013-09-17T00:00:00.00+09:00"],
67
- ["秋分の日", "2013-09-23T00:00:00.00+09:00", "2013-09-24T00:00:00.00+09:00"],
68
- ["体育の日", "2013-10-14T00:00:00.00+09:00", "2013-10-15T00:00:00.00+09:00"],
69
- ["文化の日", "2013-11-03T00:00:00.00+09:00", "2013-11-04T00:00:00.00+09:00"],
70
- ["文化の日 振替休日", "2013-11-04T00:00:00.00+09:00", "2013-11-05T00:00:00.00+09:00"],
71
- ["勤労感謝の日", "2013-11-23T00:00:00.00+09:00", "2013-11-24T00:00:00.00+09:00"],
72
- ["天皇誕生日", "2013-12-23T00:00:00.00+09:00", "2013-12-24T00:00:00.00+09:00"],
73
- ["クリスマス", "2013-12-25T00:00:00.00+09:00", "2013-12-26T00:00:00.00+09:00"],
74
- ["大晦日", "2013-12-31T00:00:00.00+09:00", "2014-01-01T00:00:00.00+09:00"]
75
- ]
76
-
77
- HOLIDAYS2 = [ # Private Feed
78
- ["元日", "2013-01-01T00:00:00.00+09:00", "2013-01-02T00:00:00.00+09:00"],
79
- ["元日 振替休日", "2013-01-02T00:00:00.00+09:00", "2013-01-03T00:00:00.00+09:00"],
80
- ["銀行休業日", "2013-01-03T00:00:00.00+09:00", "2013-01-04T00:00:00.00+09:00"],
81
- ["成人の日", "2013-01-14T00:00:00.00+09:00", "2013-01-15T00:00:00.00+09:00"],
82
- ["建国記念の日", "2013-02-11T00:00:00.00+09:00", "2013-02-12T00:00:00.00+09:00"],
83
- ["春分の日", "2013-03-20T00:00:00.00+09:00", "2013-03-21T00:00:00.00+09:00"],
84
- ["昭和の日", "2013-04-29T00:00:00.00+09:00", "2013-04-30T00:00:00.00+09:00"],
85
- ["憲法記念日", "2013-05-03T00:00:00.00+09:00", "2013-05-04T00:00:00.00+09:00"],
86
- ["みどりの日", "2013-05-04T00:00:00.00+09:00", "2013-05-05T00:00:00.00+09:00"],
87
- ["こどもの日", "2013-05-05T00:00:00.00+09:00", "2013-05-06T00:00:00.00+09:00"],
88
- ["みどりの日 振替休日", "2013-05-06T00:00:00.00+09:00", "2013-05-07T00:00:00.00+09:00"],
89
- ["海の日", "2013-07-15T00:00:00.00+09:00", "2013-07-16T00:00:00.00+09:00"],
90
- ["敬老の日", "2013-09-16T00:00:00.00+09:00", "2013-09-17T00:00:00.00+09:00"],
91
- ["秋分の日", "2013-09-23T00:00:00.00+09:00", "2013-09-24T00:00:00.00+09:00"],
92
- ["体育の日", "2013-10-14T00:00:00.00+09:00", "2013-10-15T00:00:00.00+09:00"],
93
- ["文化の日", "2013-11-03T00:00:00.00+09:00", "2013-11-04T00:00:00.00+09:00"],
94
- ["文化の日 振替休日", "2013-11-04T00:00:00.00+09:00", "2013-11-05T00:00:00.00+09:00"],
95
- ["勤労感謝の日", "2013-11-23T00:00:00.00+09:00", "2013-11-24T00:00:00.00+09:00"],
96
- ["天皇誕生日", "2013-12-23T00:00:00.00+09:00", "2013-12-24T00:00:00.00+09:00"],
97
- ["クリスマス", "2013-12-25T00:00:00.00+09:00", "2013-12-26T00:00:00.00+09:00"],
98
- ["大晦日", "2013-12-31T00:00:00.00+09:00", "2014-01-01T00:00:00.00+09:00"]
99
- ]
100
-
101
- WEEKLY_EVENTS = [
102
- "2014-07-17T08:30:00+09:00...2014-07-17T09:30:00+09:00",
103
- "2014-07-31T08:30:00+09:00...2014-07-31T09:30:00+09:00"
104
- ]
105
-
106
- def get_cal(feed)
107
- ::GoogleCalendar::Calendar::new(::GoogleCalendar::Service.new("#{ACCOUNT}@gmail.com", PASSWORD), feed)
108
- end
109
-
110
- def test_nothing
111
- end
112
-
113
- if const_defined?(:PASSWORD) && Object.const_defined?(:GoogleCalendar)
114
-
115
- def test__to_vevent
116
- holidays = HOLIDAYS1.dup
117
- gcal = get_cal(PUBLIC_FEED % ['japanese', 'ja'])
118
- gcal.events({'start-min'=>'2013-01-01', 'start-max'=>'2014-01-01',
119
- 'orderby'=>'starttime', 'sortorder'=>'a' # a:asend, d:desend
120
- }).each do |event|
121
- vevent = event.to_vevent
122
- assert_equal(holidays.shift, [vevent.summary, vevent.dtstart.to_s, vevent.dtend.to_s])
123
- # puts event.xml
124
- end
125
- assert_equal(0, holidays.size)
126
- end
127
-
128
- def test__to_gcalevent
129
- gcal = get_cal(PRIVATE_FEED % ACCOUNT)
130
- period = {'start-min'=>'2001-01-01', 'start-max'=>'2001-01-31'}
131
- gcal.events(period).each do |event|
132
- event.destroy
133
- end
134
- event = When.Resource("examples/JapanHolidays.ics::Ganjitsu").to_gcalevent(gcal)
135
- event.save!
136
- holidays = [RULE0]
137
- gcal.events(period).each do |event|
138
- assert_equal(holidays.shift, event.recurrence)
139
- end
140
- assert_equal(0, holidays.size)
141
- end
142
-
143
- def test__enum_for
144
- holidays = HOLIDAYS2.dup
145
- gcal = get_cal(PUBLIC_FEED % ['japanese', 'ja'])
146
- gcal.enum_for({'start-min'=>'2013-01-01', 'start-max'=>'2014-01-01'}).each do |date|
147
- sample = holidays.shift
148
- assert_equal(sample[1] + '...' + sample[2], date.to_s)
149
- end
150
- assert_equal(0, holidays.size)
151
- end
152
- =begin
153
- def test__private_events_1
154
- weekly_events = WEEKLY_EVENTS.dup
155
- gcal = get_cal(PRIVATE_FEED % ACCOUNT)
156
- period = {'start-min'=>'2014-07-01', 'start-max'=>'2014-08-01'}
157
-
158
- assert_equal(["canceled","confirmed"], gcal.events(period).map {|event| event.event_status})
159
- gcal.enum_for(period).each do |date|
160
- assert_equal(weekly_events.shift, date.to_s)
161
- end
162
- assert_equal(0, weekly_events.size)
163
- end
164
-
165
- def test__private_events_2
166
- gcal = get_cal(PRIVATE_FEED % ACCOUNT)
167
- period = {'start-min'=>YEAR + '-03-01', 'start-max'=>YEAR + '-03-31'}
168
-
169
- gcal.events(period).each do |event|
170
- event.destroy
171
- end
172
-
173
- new_event = gcal.create_event
174
- new_event.title = "MiniTest Event"
175
- new_event.desc = "MiniTest Event Description"
176
- new_event.where = "America/New_York"
177
- #new_event.st = Time.mktime(YEAR.to_i, 3, 21, 12, 0, 0)
178
- #new_event.en = Time.mktime(YEAR.to_i, 3, 22, 13, 0, 0)
179
- new_event.recurrence = RULE1
180
- new_event.save!
181
-
182
- gcal.events(period).each do |event|
183
- assert_equal([new_event.title, new_event.desc, new_event.where, RECURRENCE],
184
- [event.title, event.desc, event.where, event.recurrence])
185
- end
186
- new_event.destroy
187
- end
188
- =end
189
- else
190
- puts "Tests for GoogleCalendar have been skipped at line #{__LINE__} of #{__FILE__.split(/\//)[-1]}."
191
- end
192
- end
193
- end
194
-
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2012-2014 Takashi SUGA
4
+
5
+ You may use and/or modify this file according to the license
6
+ described in the LICENSE.txt file included in this archive.
7
+ =end
8
+
9
+ module MiniTest
10
+
11
+ class GoogleCalendar < MiniTest::TestCase
12
+
13
+ config = ::When.config
14
+ ACCOUNT, PASSWORD = config['@'] if config.key?('@')
15
+
16
+ PUBLIC_FEED = "http://www.google.com/calendar/feeds/%s__%s%%40holiday.calendar.google.com/public/full"
17
+ PRIVATE_FEED = "http://www.google.com/calendar/feeds/%s%%40gmail.com/private/full"
18
+ YEAR = "1949"
19
+ RULE0 = <<RULE0
20
+ DTSTART;VALUE=DATE:19490101
21
+ DTEND;VALUE=DATE:19490102
22
+ RRULE:FREQ=YEARLY
23
+ RULE0
24
+ RULE1 = <<RULE1
25
+ RRULE:FREQ=YEARLY
26
+ DTSTART;TZID=America/New_York:#{YEAR}0321T120000
27
+ DTEND;TZID=America/New_York:#{YEAR}0322T130000
28
+ RULE1
29
+ RECURRENCE = <<RECURRENCE
30
+ DTSTART;TZID=America/New_York:#{YEAR}0321T120000
31
+ DTEND;TZID=America/New_York:#{YEAR}0322T130000
32
+ RRULE:FREQ=YEARLY
33
+ BEGIN:VTIMEZONE
34
+ TZID:America/New_York
35
+ X-LIC-LOCATION:America/New_York
36
+ BEGIN:DAYLIGHT
37
+ TZOFFSETFROM:-0500
38
+ TZOFFSETTO:-0400
39
+ TZNAME:EDT
40
+ DTSTART:19700308T020000
41
+ RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
42
+ END:DAYLIGHT
43
+ BEGIN:STANDARD
44
+ TZOFFSETFROM:-0400
45
+ TZOFFSETTO:-0500
46
+ TZNAME:EST
47
+ DTSTART:19701101T020000
48
+ RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
49
+ END:STANDARD
50
+ END:VTIMEZONE
51
+ RECURRENCE
52
+
53
+ HOLIDAYS1 = [ # Public Feed
54
+ ["元日", "2013-01-01T00:00:00.00+09:00", "2013-01-02T00:00:00.00+09:00"],
55
+ ["銀行休業日", "2013-01-02T00:00:00.00+09:00", "2013-01-03T00:00:00.00+09:00"],
56
+ ["銀行休業日", "2013-01-03T00:00:00.00+09:00", "2013-01-04T00:00:00.00+09:00"],
57
+ ["成人の日", "2013-01-14T00:00:00.00+09:00", "2013-01-15T00:00:00.00+09:00"],
58
+ ["建国記念の日", "2013-02-11T00:00:00.00+09:00", "2013-02-12T00:00:00.00+09:00"],
59
+ ["春分の日", "2013-03-20T00:00:00.00+09:00", "2013-03-21T00:00:00.00+09:00"],
60
+ ["昭和の日", "2013-04-29T00:00:00.00+09:00", "2013-04-30T00:00:00.00+09:00"],
61
+ ["憲法記念日", "2013-05-03T00:00:00.00+09:00", "2013-05-04T00:00:00.00+09:00"],
62
+ ["みどりの日", "2013-05-04T00:00:00.00+09:00", "2013-05-05T00:00:00.00+09:00"],
63
+ ["こどもの日", "2013-05-05T00:00:00.00+09:00", "2013-05-06T00:00:00.00+09:00"],
64
+ ["こどもの日 振替休日", "2013-05-06T00:00:00.00+09:00", "2013-05-07T00:00:00.00+09:00"],
65
+ ["海の日", "2013-07-15T00:00:00.00+09:00", "2013-07-16T00:00:00.00+09:00"],
66
+ ["敬老の日", "2013-09-16T00:00:00.00+09:00", "2013-09-17T00:00:00.00+09:00"],
67
+ ["秋分の日", "2013-09-23T00:00:00.00+09:00", "2013-09-24T00:00:00.00+09:00"],
68
+ ["体育の日", "2013-10-14T00:00:00.00+09:00", "2013-10-15T00:00:00.00+09:00"],
69
+ ["文化の日", "2013-11-03T00:00:00.00+09:00", "2013-11-04T00:00:00.00+09:00"],
70
+ ["文化の日 振替休日", "2013-11-04T00:00:00.00+09:00", "2013-11-05T00:00:00.00+09:00"],
71
+ ["勤労感謝の日", "2013-11-23T00:00:00.00+09:00", "2013-11-24T00:00:00.00+09:00"],
72
+ ["天皇誕生日", "2013-12-23T00:00:00.00+09:00", "2013-12-24T00:00:00.00+09:00"],
73
+ ["クリスマス", "2013-12-25T00:00:00.00+09:00", "2013-12-26T00:00:00.00+09:00"],
74
+ ["大晦日", "2013-12-31T00:00:00.00+09:00", "2014-01-01T00:00:00.00+09:00"]
75
+ ]
76
+
77
+ HOLIDAYS2 = [ # Private Feed
78
+ ["元日", "2013-01-01T00:00:00.00+09:00", "2013-01-02T00:00:00.00+09:00"],
79
+ ["元日 振替休日", "2013-01-02T00:00:00.00+09:00", "2013-01-03T00:00:00.00+09:00"],
80
+ ["銀行休業日", "2013-01-03T00:00:00.00+09:00", "2013-01-04T00:00:00.00+09:00"],
81
+ ["成人の日", "2013-01-14T00:00:00.00+09:00", "2013-01-15T00:00:00.00+09:00"],
82
+ ["建国記念の日", "2013-02-11T00:00:00.00+09:00", "2013-02-12T00:00:00.00+09:00"],
83
+ ["春分の日", "2013-03-20T00:00:00.00+09:00", "2013-03-21T00:00:00.00+09:00"],
84
+ ["昭和の日", "2013-04-29T00:00:00.00+09:00", "2013-04-30T00:00:00.00+09:00"],
85
+ ["憲法記念日", "2013-05-03T00:00:00.00+09:00", "2013-05-04T00:00:00.00+09:00"],
86
+ ["みどりの日", "2013-05-04T00:00:00.00+09:00", "2013-05-05T00:00:00.00+09:00"],
87
+ ["こどもの日", "2013-05-05T00:00:00.00+09:00", "2013-05-06T00:00:00.00+09:00"],
88
+ ["みどりの日 振替休日", "2013-05-06T00:00:00.00+09:00", "2013-05-07T00:00:00.00+09:00"],
89
+ ["海の日", "2013-07-15T00:00:00.00+09:00", "2013-07-16T00:00:00.00+09:00"],
90
+ ["敬老の日", "2013-09-16T00:00:00.00+09:00", "2013-09-17T00:00:00.00+09:00"],
91
+ ["秋分の日", "2013-09-23T00:00:00.00+09:00", "2013-09-24T00:00:00.00+09:00"],
92
+ ["体育の日", "2013-10-14T00:00:00.00+09:00", "2013-10-15T00:00:00.00+09:00"],
93
+ ["文化の日", "2013-11-03T00:00:00.00+09:00", "2013-11-04T00:00:00.00+09:00"],
94
+ ["文化の日 振替休日", "2013-11-04T00:00:00.00+09:00", "2013-11-05T00:00:00.00+09:00"],
95
+ ["勤労感謝の日", "2013-11-23T00:00:00.00+09:00", "2013-11-24T00:00:00.00+09:00"],
96
+ ["天皇誕生日", "2013-12-23T00:00:00.00+09:00", "2013-12-24T00:00:00.00+09:00"],
97
+ ["クリスマス", "2013-12-25T00:00:00.00+09:00", "2013-12-26T00:00:00.00+09:00"],
98
+ ["大晦日", "2013-12-31T00:00:00.00+09:00", "2014-01-01T00:00:00.00+09:00"]
99
+ ]
100
+
101
+ WEEKLY_EVENTS = [
102
+ "2014-07-17T08:30:00+09:00...2014-07-17T09:30:00+09:00",
103
+ "2014-07-31T08:30:00+09:00...2014-07-31T09:30:00+09:00"
104
+ ]
105
+
106
+ def get_cal(feed)
107
+ ::GoogleCalendar::Calendar::new(::GoogleCalendar::Service.new("#{ACCOUNT}@gmail.com", PASSWORD), feed)
108
+ end
109
+
110
+ def test_nothing
111
+ end
112
+
113
+ if const_defined?(:PASSWORD) && Object.const_defined?(:GoogleCalendar)
114
+
115
+ def test__to_vevent
116
+ holidays = HOLIDAYS1.dup
117
+ gcal = get_cal(PUBLIC_FEED % ['japanese', 'ja'])
118
+ gcal.events({'start-min'=>'2013-01-01', 'start-max'=>'2014-01-01',
119
+ 'orderby'=>'starttime', 'sortorder'=>'a' # a:asend, d:desend
120
+ }).each do |event|
121
+ vevent = event.to_vevent
122
+ assert_equal(holidays.shift, [vevent.summary, vevent.dtstart.to_s, vevent.dtend.to_s])
123
+ # puts event.xml
124
+ end
125
+ assert_equal(0, holidays.size)
126
+ end
127
+
128
+ def test__to_gcalevent
129
+ gcal = get_cal(PRIVATE_FEED % ACCOUNT)
130
+ period = {'start-min'=>'2001-01-01', 'start-max'=>'2001-01-31'}
131
+ gcal.events(period).each do |event|
132
+ event.destroy
133
+ end
134
+ event = When.Resource("examples/JapanHolidays.ics::Ganjitsu").to_gcalevent(gcal)
135
+ event.save!
136
+ holidays = [RULE0]
137
+ gcal.events(period).each do |event|
138
+ assert_equal(holidays.shift, event.recurrence)
139
+ end
140
+ assert_equal(0, holidays.size)
141
+ end
142
+
143
+ def test__enum_for
144
+ holidays = HOLIDAYS2.dup
145
+ gcal = get_cal(PUBLIC_FEED % ['japanese', 'ja'])
146
+ gcal.enum_for({'start-min'=>'2013-01-01', 'start-max'=>'2014-01-01'}).each do |date|
147
+ sample = holidays.shift
148
+ assert_equal(sample[1] + '...' + sample[2], date.to_s)
149
+ end
150
+ assert_equal(0, holidays.size)
151
+ end
152
+ =begin
153
+ def test__private_events_1
154
+ weekly_events = WEEKLY_EVENTS.dup
155
+ gcal = get_cal(PRIVATE_FEED % ACCOUNT)
156
+ period = {'start-min'=>'2014-07-01', 'start-max'=>'2014-08-01'}
157
+
158
+ assert_equal(["canceled","confirmed"], gcal.events(period).map {|event| event.event_status})
159
+ gcal.enum_for(period).each do |date|
160
+ assert_equal(weekly_events.shift, date.to_s)
161
+ end
162
+ assert_equal(0, weekly_events.size)
163
+ end
164
+
165
+ def test__private_events_2
166
+ gcal = get_cal(PRIVATE_FEED % ACCOUNT)
167
+ period = {'start-min'=>YEAR + '-03-01', 'start-max'=>YEAR + '-03-31'}
168
+
169
+ gcal.events(period).each do |event|
170
+ event.destroy
171
+ end
172
+
173
+ new_event = gcal.create_event
174
+ new_event.title = "MiniTest Event"
175
+ new_event.desc = "MiniTest Event Description"
176
+ new_event.where = "America/New_York"
177
+ #new_event.st = Time.mktime(YEAR.to_i, 3, 21, 12, 0, 0)
178
+ #new_event.en = Time.mktime(YEAR.to_i, 3, 22, 13, 0, 0)
179
+ new_event.recurrence = RULE1
180
+ new_event.save!
181
+
182
+ gcal.events(period).each do |event|
183
+ assert_equal([new_event.title, new_event.desc, new_event.where, RECURRENCE],
184
+ [event.title, event.desc, event.where, event.recurrence])
185
+ end
186
+ new_event.destroy
187
+ end
188
+ =end
189
+ else
190
+ puts "Tests for GoogleCalendar have been skipped at line #{__LINE__} of #{__FILE__.split(/\//)[-1]}."
191
+ end
192
+ end
193
+ end
194
+