mhc 1.1.1 → 1.2.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -1
  3. data/bin/mhc +82 -3
  4. data/emacs/Cask +1 -1
  5. data/emacs/mhc-calendar.el +7 -5
  6. data/emacs/mhc-date.el +5 -12
  7. data/emacs/mhc-day.el +1 -1
  8. data/emacs/mhc-db.el +57 -38
  9. data/emacs/mhc-draft.el +36 -22
  10. data/emacs/mhc-face.el +1 -1
  11. data/emacs/mhc-header.el +20 -1
  12. data/emacs/mhc-minibuf.el +12 -7
  13. data/emacs/mhc-parse.el +1 -1
  14. data/emacs/mhc-process.el +26 -9
  15. data/emacs/mhc-ps.el +1 -1
  16. data/emacs/mhc-record.el +1 -1
  17. data/emacs/mhc-schedule.el +5 -2
  18. data/emacs/mhc-summary.el +36 -16
  19. data/emacs/mhc-vars.el +15 -2
  20. data/emacs/mhc.el +51 -25
  21. data/lib/mhc.rb +3 -1
  22. data/lib/mhc/builder.rb +5 -1
  23. data/lib/mhc/caldav.rb +1 -1
  24. data/lib/mhc/calendar.rb +5 -1
  25. data/lib/mhc/command/cache.rb +5 -4
  26. data/lib/mhc/command/completions.rb +1 -1
  27. data/lib/mhc/command/init.rb +2 -0
  28. data/lib/mhc/converter.rb +3 -2
  29. data/lib/mhc/datastore.rb +52 -13
  30. data/lib/mhc/date_enumerator.rb +2 -2
  31. data/lib/mhc/event.rb +42 -21
  32. data/lib/mhc/formatter.rb +17 -312
  33. data/lib/mhc/formatter/base.rb +125 -0
  34. data/lib/mhc/formatter/emacs.rb +47 -0
  35. data/lib/mhc/formatter/howm.rb +35 -0
  36. data/lib/mhc/formatter/icalendar.rb +17 -0
  37. data/lib/mhc/formatter/json.rb +27 -0
  38. data/lib/mhc/formatter/mail.rb +20 -0
  39. data/lib/mhc/formatter/org_table.rb +24 -0
  40. data/lib/mhc/formatter/symbolic_expression.rb +42 -0
  41. data/lib/mhc/formatter/text.rb +29 -0
  42. data/lib/mhc/modifier.rb +1 -0
  43. data/lib/mhc/occurrence.rb +27 -5
  44. data/lib/mhc/occurrence_enumerator.rb +1 -1
  45. data/lib/mhc/property_value.rb +6 -0
  46. data/lib/mhc/property_value/date.rb +23 -14
  47. data/lib/mhc/property_value/date_time.rb +19 -0
  48. data/lib/mhc/property_value/integer.rb +5 -1
  49. data/lib/mhc/property_value/list.rb +7 -6
  50. data/lib/mhc/property_value/period.rb +3 -1
  51. data/lib/mhc/property_value/range.rb +1 -1
  52. data/lib/mhc/property_value/time.rb +8 -1
  53. data/lib/mhc/version.rb +1 -1
  54. data/mhc.gemspec +0 -1
  55. data/samples/japanese-holidays.mhcc +36 -9
  56. data/spec/mhc_spec.rb +83 -0
  57. metadata +13 -18
@@ -71,7 +71,7 @@ module Mhc
71
71
  first_date = date_or_range
72
72
  last_date = date_or_range
73
73
  end
74
- if last_date < @date_range.first or @date_range.last < first_date
74
+ if last_date.to_date < @date_range.first or @date_range.last < first_date.to_date
75
75
  next
76
76
  end
77
77
  next if @exceptions.include?(first_date)
@@ -15,12 +15,18 @@ module Mhc
15
15
  return @value.to_s
16
16
  end
17
17
 
18
+ def empty?
19
+ return true if @value.nil? || (@value.respond_to?(:empty?) && @value.empty?)
20
+ return false
21
+ end
22
+
18
23
  alias_method :to_s, :to_mhc_string
19
24
  end
20
25
 
21
26
  dir = File.dirname(__FILE__) + "/property_value"
22
27
 
23
28
  autoload :Date, "#{dir}/date.rb"
29
+ autoload :DateTime, "#{dir}/date_time.rb"
24
30
  autoload :Integer, "#{dir}/integer.rb"
25
31
  autoload :List, "#{dir}/list.rb"
26
32
  autoload :Period, "#{dir}/period.rb"
@@ -8,12 +8,25 @@ module Mhc
8
8
 
9
9
  DAYS_OF_MONTH = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
10
10
 
11
- def self.parse(string)
12
- if /^(\d{4})(\d{2})(\d{2})$/ =~ string
13
- # don't use super(string) because it's slow.
14
- new($1.to_i, $2.to_i, $3.to_i)
15
- else
16
- return nil # raise ParseError
11
+ def self.parse(string, default = nil)
12
+ begin
13
+ # YYYYMMDD/HH:MM => DateTime
14
+ if /^(\d{4})(\d{2})(\d{2})\/(\d{2}):(\d{2})$/ =~ string
15
+ DateTime.new($1.to_i, $2.to_i, $3.to_i, $4.to_i, $5.to_i, 0)
16
+
17
+ # YYYYMMDD => Date
18
+ elsif /^(\d{4})(\d{2})(\d{2})$/ =~ string
19
+ Date.new($1.to_i, $2.to_i, $3.to_i)
20
+
21
+ # YYYYMMDD/hh:mm-HH:MM => DateTime taking YYYYMMDD, HH:MM
22
+ elsif /^(\d+):(\d+)$/ =~ string && default
23
+ DateTime.new(default.year, default.month, default.day, $1.to_i, $2.to_i, 0)
24
+
25
+ else
26
+ fail ParseError
27
+ end
28
+ rescue
29
+ raise ParseError, "invalid date string \"#{string}\""
17
30
  end
18
31
  end
19
32
 
@@ -38,7 +51,7 @@ module Mhc
38
51
  return self.today.first_day_of_month.next_month
39
52
 
40
53
  else
41
- raise ParseError, "invalid date string '#{date_string}'"
54
+ raise ParseError, "invalid date string \"#{date_string}\""
42
55
  end
43
56
  end
44
57
 
@@ -65,7 +78,7 @@ module Mhc
65
78
  date = parse_relative($1)
66
79
  return date..date
67
80
  else
68
- raise ParseError, "invalid date range string '#{range_string}'"
81
+ raise ParseError, "invalid date range string \"#{range_string}\""
69
82
  end
70
83
  end
71
84
 
@@ -80,12 +93,8 @@ module Mhc
80
93
  end
81
94
  end
82
95
 
83
- def parse(string)
84
- if /^\d{8}$/ =~ string
85
- self.class.parse(string)
86
- else
87
- return nil # raise ParseError
88
- end
96
+ def parse(string, default = nil)
97
+ self.class.parse(string, default)
89
98
  end
90
99
 
91
100
  def add_time(time = nil)
@@ -0,0 +1,19 @@
1
+ require "date"
2
+
3
+ module Mhc
4
+ module PropertyValue
5
+ class DateTime < ::DateTime
6
+
7
+ def to_mhc_string
8
+ return strftime("%Y%m%d/%H:%M")
9
+ end
10
+
11
+ def absolute_from_epoch
12
+ return (self - Date.new(1970, 1, 1)).to_i
13
+ end
14
+
15
+ alias_method :to_s, :to_mhc_string
16
+
17
+ end # class DateTime
18
+ end # module PropertyValue
19
+ end # module Mhc
@@ -2,7 +2,11 @@ module Mhc
2
2
  module PropertyValue
3
3
  class Integer < Base
4
4
  def parse(string)
5
- @value = string.to_i if /^\d+$/ =~ string
5
+ if /^\d+$/ =~ string
6
+ @value = string.to_i
7
+ else
8
+ raise ParseError, "invalid integer format \"#{string}\""
9
+ end
6
10
  return self
7
11
  end
8
12
 
@@ -6,35 +6,36 @@ module Mhc
6
6
  ITEM_SEPARATOR = " "
7
7
 
8
8
  def initialize(item_class)
9
- @list = []
9
+ @value = []
10
10
  @item_class = item_class
11
11
  end
12
12
 
13
13
  def each
14
- @list.each do |value|
14
+ @value.each do |value|
15
15
  yield value
16
16
  end
17
17
  end
18
18
 
19
19
  def include?(o)
20
- @list.include?(o)
20
+ @value.include?(o)
21
21
  end
22
22
 
23
23
  def empty?
24
- @list.empty?
24
+ @value.empty?
25
25
  end
26
26
 
27
27
  def parse(string)
28
28
  string.strip.split(ITEM_SEPARATOR).each do |str|
29
29
  item = @item_class.parse(str)
30
- @list << item if item
30
+ @value << item if item
31
31
  end
32
32
  return self
33
33
  end
34
34
 
35
35
  def to_mhc_string
36
- @list.map{|item| item.to_mhc_string}.join(ITEM_SEPARATOR)
36
+ @value.map{|item| item.to_mhc_string}.join(ITEM_SEPARATOR)
37
37
  end
38
+ alias_method :to_s, :to_mhc_string
38
39
 
39
40
  end # class List
40
41
  end # module PropertyValue
@@ -4,7 +4,7 @@ module Mhc
4
4
 
5
5
  UNIT2MIN = {'minute' => 1, 'hour' => 60, 'day' => 60*24}
6
6
  UNITS = UNIT2MIN.keys
7
- REGEXP = /(\d+)\s*(#{UNITS.join("|")})s?/
7
+ REGEXP = /(\d+)\s*(#{UNITS.join("|")})s?$/
8
8
 
9
9
  def self.parse(string)
10
10
  return new.parse(string)
@@ -13,6 +13,8 @@ module Mhc
13
13
  def parse(string)
14
14
  if REGEXP =~ string
15
15
  @minutes = (UNIT2MIN[$2] * $1.to_i)
16
+ else
17
+ raise ParseError, "invalid period string \"#{string}\""
16
18
  end
17
19
  return self
18
20
  end
@@ -25,7 +25,7 @@ module Mhc
25
25
  last = first if last.nil? # single "A" means "A-A"
26
26
 
27
27
  @first = @item_class.parse(first) unless first.to_s == ""
28
- @last = @item_class.parse(last) unless last.to_s == ""
28
+ @last = @item_class.parse(last, @first) unless last.to_s == ""
29
29
  return self.class.new(@item_class, @prefix, @first, @last)
30
30
  end
31
31
 
@@ -7,13 +7,20 @@ module Mhc
7
7
  class Time < Base
8
8
  include Comparable
9
9
 
10
- def parse(string)
10
+ def parse(string, default = nil)
11
+ # default is dummy for matching interface
11
12
  if /^(\d+):(\d+)$/ =~ string
12
13
  @sec = ($1.to_i) * 3600 + ($2.to_i) * 60
14
+ else
15
+ raise ParseError, "invalid time format \"#{string}\""
13
16
  end
14
17
  return self
15
18
  end
16
19
 
20
+ def self.parse(string, default = nil)
21
+ new.parse(string, default)
22
+ end
23
+
17
24
  def days; (@sec ) / 86400 ;end
18
25
  def hour; (@sec % 86400) / 3600 ;end
19
26
  def minute; (@sec % 3600) / 60 ;end
@@ -1,4 +1,4 @@
1
1
  module Mhc
2
- VERSION = "1.1.1"
2
+ VERSION = "1.2.4"
3
3
  PRODID = "-//Quickhack.net//MHC #{Mhc::VERSION}//EN"
4
4
  end
@@ -28,7 +28,6 @@ Gem::Specification.new do |spec|
28
28
  spec.add_runtime_dependency "tzinfo", ">= 1.2.2"
29
29
  spec.add_runtime_dependency "tzinfo-data", ">= 1.2015.4"
30
30
 
31
- spec.add_development_dependency "bundler", "~> 1.5"
32
31
  spec.add_development_dependency "rake"
33
32
  spec.add_development_dependency "rspec"
34
33
  end
@@ -72,12 +72,14 @@ X-SC-Record-Id: 5E03776A-4280-4337-85C0-F1322A3AAE6E
72
72
 
73
73
  X-SC-Subject: 海の日
74
74
  X-SC-Category: Holiday Japanese
75
+ X-SC-Day: !20200720 20200723 !20210719 20210722
75
76
  X-SC-Cond: 3rd Mon Jul
76
77
  X-SC-Duration: 20030701-
77
78
  X-SC-Record-Id: BD4156C2-5546-4146-8297-09CF4210A346
78
79
 
79
80
  X-SC-Subject: 山の日
80
81
  X-SC-Category: Holiday Japanese
82
+ X-SC-Day: 20200810 !20200811 20210808 !20210811
81
83
  X-SC-Cond: 11 Aug
82
84
  X-SC-Duration: 20160811-
83
85
  X-SC-Record-Id: FC7C481B-7BF5-4639-B700-3B60CB99E05D
@@ -103,9 +105,16 @@ X-SC-Record-Id: AFABC42C-2E9D-4093-A4AF-DA12D4D4B9D7
103
105
  X-SC-Subject: 体育の日
104
106
  X-SC-Category: Holiday Japanese
105
107
  X-SC-Cond: 2nd Mon Oct
106
- X-SC-Duration: 20001009-
108
+ X-SC-Duration: 20001009-20191231
107
109
  X-SC-Record-Id: C17D9CA5-28AF-4826-AD33-8B75473E5B52
108
110
 
111
+ X-SC-Subject: スポーツの日
112
+ X-SC-Category: Holiday Japanese
113
+ X-SC-Day: 20200724 !20201012 20210723 !20211011
114
+ X-SC-Cond: 2nd Mon Oct
115
+ X-SC-Duration: 20200101-
116
+ X-SC-Record-Id: F10B2B18-B0FB-477E-A7D3-A067B31F4736
117
+
109
118
  X-SC-Subject: 文化の日
110
119
  X-SC-Category: Holiday Japanese
111
120
  X-SC-Cond: 3 Nov
@@ -121,11 +130,27 @@ X-SC-Record-Id: 97E6F125-2625-44A9-8D43-A6FCA9670D8D
121
130
  X-SC-Subject: 天皇誕生日
122
131
  X-SC-Category: Holiday Japanese
123
132
  X-SC-Cond: 23 Dec
124
- X-SC-Duration: 19891223-
133
+ X-SC-Duration: 19891223-20190430
125
134
  X-SC-Record-Id: 51D42B0D-EF46-4D65-B62A-6ED2F0D1F0B5
126
135
 
136
+ X-SC-Subject: 天皇誕生日
137
+ X-SC-Category: Holiday Japanese
138
+ X-SC-Cond: 23 Feb
139
+ X-SC-Duration: 20190501-
140
+ X-SC-Record-Id: 59B83B1E-6161-45F5-9DEC-95E3C1CCA4EE
141
+
127
142
  ## 毎年変わる祝日と振替休日
128
143
 
144
+ X-SC-Subject: 即位の日
145
+ X-SC-Day: 20190501
146
+ X-SC-Category: Holiday Japanese
147
+ X-SC-Record-Id: 25C73788-1104-42BE-85F6-570861B0020B
148
+
149
+ X-SC-Subject: 即位礼正殿の儀
150
+ X-SC-Category: Holiday Japanese
151
+ X-SC-Day: 20191022
152
+ X-SC-Record-Id: 76F9756D-C00F-47D0-9592-67E21909C39D
153
+
129
154
  X-SC-Subject: 春分の日
130
155
  X-SC-Day: 19960320 19970320 19980321 19990321 20000320 20010320 20020321
131
156
  20030321 20040320 20050320 20060321 20070321 20080320 20090320
@@ -158,14 +183,15 @@ X-SC-Day: 19730430 19730924 19740506 19740916 19741104 19751124
158
183
  20050321 20060102 20070212 20070430 20070924 20071224 20080506
159
184
  20081124 20090506 20100322 20120102 20120430 20121224 20130506
160
185
  20131104 20140506 20141124 20150506 20160321 20170102 20180212
161
- 20180430 20180924 20181224 20190506 20190812 20191104 20200506
162
- 20230102 20240212 20240506 20240812 20240923 20241104 20250506
186
+ 20180430 20180924 20181224 20190506 20190812 20191104 20200224 20200506
187
+ 20210809
188
+ 20230102 20240212 20240506 20240812 20240923 20241104 20250224 20250506
163
189
  20251124 20260506 20270322 20290212 20290430 20290924 20291224
164
- 20300506 20300812 20301104 20310506 20311124 20330321 20340102
190
+ 20300506 20300812 20301104 20310224 20310506 20311124 20330321 20340102
165
191
  20350212 20350430 20350924 20351224 20360506 20361124 20370506
166
- 20400102 20400430 20401224 20410506 20410812 20411104 20420506
192
+ 20400102 20400430 20401224 20410506 20410812 20411104 20420224 20420506
167
193
  20421124 20430506 20440321 20450102 20460212 20460430 20460924
168
- 20461224 20470506 20470812 20471104 20480506 20500321
194
+ 20461224 20470506 20470812 20471104 20480224 20480506 20500321
169
195
  X-SC-Category: Holiday Japanese
170
196
  X-SC-Record-Id: E2D696DF-EB49-44D7-B06C-812B10BD99A2
171
197
 
@@ -173,8 +199,9 @@ X-SC-Subject: 国民の休日
173
199
  X-SC-Category: Holiday Japanese
174
200
  X-SC-Day: 19880504 19890504 19900504 19910504 19930504 19940504 19950504
175
201
  19960504 19990504 20000504 20010504 20020504 20040504 20050504 20060504
176
- 20090922 20150922 20260922 20320921 20370922 20430922 20490921 20540922
177
- 20600921 20650922 20710922 20770921 20880921 20940921 20990922
202
+ 20090922 20150922 20190430 20190502 20260922 20320921 20370922 20430922
203
+ 20490921 20540922 20600921 20650922 20710922 20770921 20880921 20940921
204
+ 20990922
178
205
  X-SC-Record-Id: 46953810-BD72-45DE-BC11-104CBE970CFF
179
206
 
180
207
  ## Make sure you have at least one blank line for each entry (改行で終わる)
@@ -125,6 +125,20 @@ describe Mhc::Event do
125
125
  end
126
126
 
127
127
 
128
+ it "should emit an error on parsing invalid time format." do
129
+ str = <<-EOF.strip_heredoc
130
+ X-SC-Subject: Invalid Date format
131
+ X-SC-Location: Room1
132
+ X-SC-Day: 19960930
133
+ X-SC-Duration: 19960930-
134
+ X-SC-Time: 19:30-2030
135
+ X-SC-Record-Id: 54A339AD-F7FD-4E56-9B70-2D09F840E94D
136
+ X-SC-Sequence: 0
137
+ EOF
138
+ errors = Mhc::Event.validate(str)
139
+ expect(errors.length).to eq 1
140
+ expect(errors.first.first.message).to match /invalid time format/
141
+ end
128
142
 
129
143
  it "should occur weekly on Monday and Thursday from 2014-04-01 to 2014-04-30 with exception of 2014-04-10 (Thu)" do
130
144
  ev = Mhc::Event.parse <<-EOF.strip_heredoc
@@ -204,6 +218,53 @@ describe Mhc::Event do
204
218
  ["20140203 10:00-12:00 TEST", "20140509 10:00-12:00 TEST", "20140831 10:00-12:00 TEST"]
205
219
  end
206
220
 
221
+ it "should produce a list of occurrences, and one occurrence has different Time" do
222
+ ev = Mhc::Event.parse <<-EOF.strip_heredoc
223
+ X-SC-Subject: X-Project
224
+ X-SC-Location: 101
225
+ X-SC-Day: 20160601 20160602/16:00-18:00 20160616 20160617 20160623 20160624
226
+ X-SC-Time: 09:00-11:00
227
+ X-SC-Category: Conference
228
+ X-SC-Record-Id: FEDA4C97-21C2-46AA-A395-075856FBD5C3
229
+ EOF
230
+ expect(ev.occurrences.take(30).map{|o| "#{o.dtstart.strftime("%Y%m%d/%H:%M")}-#{o.dtend.strftime("%Y%m%d/%H:%M")} #{o.subject}"}).to eq \
231
+ ["20160601/09:00-20160601/11:00 X-Project",
232
+ "20160602/16:00-20160602/18:00 X-Project",
233
+ "20160616/09:00-20160616/11:00 X-Project",
234
+ "20160617/09:00-20160617/11:00 X-Project",
235
+ "20160623/09:00-20160623/11:00 X-Project",
236
+ "20160624/09:00-20160624/11:00 X-Project"]
237
+ end
238
+
239
+ it "should produce a list of occurrences, and one occurrence has different Time crossing days" do
240
+ ev = Mhc::Event.parse <<-EOF.strip_heredoc
241
+ X-SC-Subject: TEST
242
+ X-SC-Time: 10:00-12:00
243
+ X-SC-Day: 20150203/10:30-20150205/12:30 20150509 20150831
244
+ X-SC-Record-Id: FEDA4C97-21C2-46AA-A395-075856FBD5C3
245
+ EOF
246
+
247
+ expect(ev.occurrences.take(30).map{|o| "#{o.dtstart.strftime("%Y%m%d/%H:%M")}-#{o.dtend.strftime("%Y%m%d/%H:%M")} #{o.subject}"}).to eq \
248
+ ["20150203/10:30-20150205/12:30 TEST",
249
+ "20150509/10:00-20150509/12:00 TEST",
250
+ "20150831/10:00-20150831/12:00 TEST"]
251
+
252
+ expect(ev.to_ics).to eq <<-'EOF'.strip_heredoc
253
+ BEGIN:VEVENT
254
+ RDATE;VALUE=PERIOD:20150509T100000Z/20150509T120000Z,20150831T100000Z/20150831T120000Z
255
+ CREATED;VALUE=DATE-TIME:20140101T000000Z
256
+ DTEND;VALUE=DATE-TIME:20150205T123000Z
257
+ DTSTART;VALUE=DATE-TIME:20150203T103000Z
258
+ DTSTAMP;VALUE=DATE-TIME:20140101T000000Z
259
+ LAST-MODIFIED;VALUE=DATE-TIME:20140101T000000Z
260
+ UID:FEDA4C97-21C2-46AA-A395-075856FBD5C3
261
+ DESCRIPTION:
262
+ SUMMARY:TEST
263
+ SEQUENCE:0
264
+ END:VEVENT
265
+ EOF
266
+ end
267
+
207
268
  it "should return true when #allday? is called if X-SC-Time: is blank" do
208
269
  ev = Mhc::Event.parse <<-EOF.strip_heredoc
209
270
  X-SC-Subject: TEST
@@ -397,6 +458,28 @@ describe Mhc::Event do
397
458
  EOF
398
459
  end
399
460
 
461
+ it "should return icalendar VEVENT over 24h event" do
462
+ ev = Mhc::Event.parse <<-EOF.strip_heredoc
463
+ X-SC-Subject: CS1
464
+ X-SC-Time: 12:00-13:00
465
+ X-SC-Day: 20140508/12:00-20140509/10:10
466
+ X-SC-Record-Id: 69CFD0DF-4058-425B-8C2B-40D81E6A2392
467
+ EOF
468
+ expect(ev.to_ics).to eq <<-'EOF'.strip_heredoc
469
+ BEGIN:VEVENT
470
+ CREATED;VALUE=DATE-TIME:20140101T000000Z
471
+ DTEND;VALUE=DATE-TIME:20140509T101000Z
472
+ DTSTART;VALUE=DATE-TIME:20140508T120000Z
473
+ DTSTAMP;VALUE=DATE-TIME:20140101T000000Z
474
+ LAST-MODIFIED;VALUE=DATE-TIME:20140101T000000Z
475
+ UID:69CFD0DF-4058-425B-8C2B-40D81E6A2392
476
+ DESCRIPTION:
477
+ SUMMARY:CS1
478
+ SEQUENCE:0
479
+ END:VEVENT
480
+ EOF
481
+ end
482
+
400
483
  it "should return icalendar VEVENT two day's allday event" do
401
484
  ev = Mhc::Event.parse <<-EOF.strip_heredoc
402
485
  X-SC-Subject: CS1
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mhc
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yoshinari Nomura
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-26 00:00:00.000000000 Z
11
+ date: 2020-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -66,20 +66,6 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: 1.2015.4
69
- - !ruby/object:Gem::Dependency
70
- name: bundler
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '1.5'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '1.5'
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: rake
85
71
  requirement: !ruby/object:Gem::Requirement
@@ -198,12 +184,22 @@ files:
198
184
  - lib/mhc/etag.rb
199
185
  - lib/mhc/event.rb
200
186
  - lib/mhc/formatter.rb
187
+ - lib/mhc/formatter/base.rb
188
+ - lib/mhc/formatter/emacs.rb
189
+ - lib/mhc/formatter/howm.rb
190
+ - lib/mhc/formatter/icalendar.rb
191
+ - lib/mhc/formatter/json.rb
192
+ - lib/mhc/formatter/mail.rb
193
+ - lib/mhc/formatter/org_table.rb
194
+ - lib/mhc/formatter/symbolic_expression.rb
195
+ - lib/mhc/formatter/text.rb
201
196
  - lib/mhc/logger.rb
202
197
  - lib/mhc/modifier.rb
203
198
  - lib/mhc/occurrence.rb
204
199
  - lib/mhc/occurrence_enumerator.rb
205
200
  - lib/mhc/property_value.rb
206
201
  - lib/mhc/property_value/date.rb
202
+ - lib/mhc/property_value/date_time.rb
207
203
  - lib/mhc/property_value/integer.rb
208
204
  - lib/mhc/property_value/list.rb
209
205
  - lib/mhc/property_value/period.rb
@@ -259,8 +255,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
259
255
  - !ruby/object:Gem::Version
260
256
  version: '0'
261
257
  requirements: []
262
- rubyforge_project:
263
- rubygems_version: 2.4.5
258
+ rubygems_version: 3.1.4
264
259
  signing_key:
265
260
  specification_version: 4
266
261
  summary: Message Harmonized Calendaring