ical_importer 0.2.0 → 0.3.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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- OTZiMWQ4NmU4NWI1NzkwNmQxNGY3OWVlZDk3MzYwN2JhYjFmMmYxNA==
4
+ YzgyNDVmMDk4MjIxZDE5ZjgxYWZlZjBmN2EwMmVmMGEwOTkwNmZmNQ==
5
5
  data.tar.gz: !binary |-
6
- YTdhNTFiZTRkMzRmOTAwYTA4NDUzNDIzYWQ2MDZjYzY1MTk0NmUzNg==
6
+ NWE0MzY0YTNlZjk2YjA2MDA5YmJmOTZiZGM3MTY2ZTJhOTM4Y2M1YQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- Mzc5MjUyMTM0ZTQ4NWFmMjBmYjQ2NDBhOTMyYjNmY2U0ZDgwYzU1OWFlY2Rk
10
- MWY3NjQwZWM4MGZkZjMyN2ZiOWYzYWUxYWUxNTE5YmM3YTRlY2ZjMDRhYzM4
11
- NmIyMGYxZTJhZTVhNzJjMzJlOGUzOGYxNTE4MDRmMGZkNDI4OWQ=
9
+ Yzk4YWUyMjdjMjZkOWM5MGRkMjZiMzZjODI5YTU3NjMyNjVmYzliNTQ4MzQ4
10
+ NDZiNjc4ZjdlOTNlMzE5OGYyMTUyOWI0OTEwYzk0YzViNWIzNmQwNGRhMTIz
11
+ ZjMwNWEwNWZkODdmMDJmOWY4Mjg1NzE1ZWJlYjhlZjMxZDdhMTc=
12
12
  data.tar.gz: !binary |-
13
- NDU0MTViOGQxMzk5ZTU1NTcyN2Q1Njk4M2MzODM0MGJhOTQ0YWFlYjY3Yjk5
14
- NDgzNmQxN2QwMGYwMGIxYjQyZTU0Nzc2ZmEwOThjZTI4NDJiNGQ4YTA2MWI4
15
- MTI3MjAyYzNhNTcyN2MyMWQ4NjNiNTYyZDc1MDNkODhiMmRjMTU=
13
+ MzczNzEwMWQ2ODNhNTczZmE0YTVkZTMxMjRmMWJkYzM4YjUwMGE2NDk5NDYz
14
+ MTdiNmNjY2M0ZTliNjUwZDMwNWYzNGVmMTU5YWFiZTkyMDAwNmIwODEwZmFi
15
+ YTI3ZDUxMTZhYTY2Mzc1OGE2YzlkNGZhYTk1ZjY0YTg0MmM1MDA=
@@ -1,3 +1,8 @@
1
+ #### v0.3.0
2
+ * SITE-1812-Replace-rical-with-icalendar
3
+
4
+ > Jake Waletzko: Zheng Jia: https://github.com/sportngin/ical_importer/pull/11
5
+
1
6
  #### v0.2.0
2
7
  * Modernize and Prepare Prep
3
8
 
data/README.md CHANGED
@@ -68,6 +68,13 @@ parser.single_events
68
68
 
69
69
  * Recurrence events are not the same as recurring events
70
70
 
71
+ # Known Issues
72
+
73
+ * ICal feeds with `,`'s
74
+ - This gem uses icalendar version `2.3.0`. There is an issue(https://github.com/icalendar/icalendar/issues/121) when importing events with fields that do not escape `,`'s.
75
+ - The issue is fixed with https://github.com/icalendar/icalendar/commit/9a00cae834f78c265fdccecaf37bf3e77f91416f
76
+ - Add `gem 'icalendar', :git => 'https://github.com/icalendar/icalendar', :ref => '108b5278a6d4cdc150e49cdcb641e40440c8c278'` to your project's gemfile to fix this issue.
77
+
71
78
  # TODO
72
79
 
73
80
  * Current implementation based on an extraction from another app
@@ -17,7 +17,8 @@ Gem::Specification.new do |gem|
17
17
  gem.version = IcalImporter::VERSION
18
18
 
19
19
  gem.add_dependency 'activesupport', ['> 3.0.0', '< 4.0.0']
20
- gem.add_dependency 'ri_cal', '~> 0.8'
20
+ gem.add_dependency 'tzinfo', '~> 0.3.29'
21
+ gem.add_dependency 'icalendar', '~> 2.3.0'
21
22
  gem.add_dependency 'i18n', '~> 0.6'
22
23
 
23
24
  gem.add_development_dependency 'rake'
@@ -1,5 +1,6 @@
1
1
  require 'active_support/all'
2
- require 'ri_cal'
2
+ require 'tzinfo'
3
+ require 'icalendar'
3
4
 
4
5
  require 'open-uri'
5
6
  require 'timeout'
@@ -17,7 +17,7 @@ module IcalImporter
17
17
  if should_parse?
18
18
  @bare_feed.pos = 0
19
19
  begin
20
- @feed = RiCal.parse @bare_feed
20
+ @feed = Icalendar.parse @bare_feed
21
21
  rescue Exception => e
22
22
  # I know, I'm dirty, fix this to log to a config'd log
23
23
  end
@@ -58,14 +58,14 @@ module IcalImporter
58
58
  private
59
59
 
60
60
  def get_timezone
61
- if feed.present? && feed.first.x_properties["X-WR-TIMEZONE"].present?
62
- feed.first.x_properties["X-WR-TIMEZONE"].first.value
61
+ if feed.present? && feed.first.custom_properties["x_wr_timezone"].present?
62
+ feed.first.custom_properties["x_wr_timezone"].first.value
63
63
  end
64
64
  end
65
65
 
66
66
  def get_name
67
- if feed.present? && feed.first.x_properties["X-WR-CALNAME"].present?
68
- feed.first.x_properties["X-WR-CALNAME"].first.value
67
+ if feed.present? && feed.first.custom_properties["x_wr_calname"].present?
68
+ feed.first.custom_properties["x_wr_calname"].first.value
69
69
  end
70
70
  end
71
71
 
@@ -7,7 +7,7 @@ module IcalImporter
7
7
  end
8
8
 
9
9
  def <<(event)
10
- raise ArgumentError, "Must be a RiCal Event" unless event.is_a? RiCal::Component::Event
10
+ raise ArgumentError, "Must be an Icalendar Event" unless event.is_a? Icalendar::Event
11
11
  @events_to_build << event
12
12
  end
13
13
 
@@ -24,10 +24,10 @@ module IcalImporter
24
24
  def build_new_local_event(remote_event)
25
25
  remote_event = RemoteEvent.new remote_event
26
26
  LocalEvent.new({
27
- :uid => remote_event.uid,
28
- :title => remote_event.summary,
29
- :description => remote_event.description,
30
- :location => remote_event.location || '',
27
+ :uid => remote_event.uid.to_s,
28
+ :title => remote_event.summary.to_s,
29
+ :description => remote_event.description.to_s,
30
+ :location => remote_event.location.to_s,
31
31
  :start_date_time => remote_event.start_date_time,
32
32
  :end_date_time => remote_event.end_date_time,
33
33
  :date_exclusions => [DateExclusion.new(remote_event.recurrence_id)],
@@ -2,12 +2,12 @@ module IcalImporter
2
2
  class RemoteEvent
3
3
  attr_accessor :event, :utc
4
4
  alias :utc? :utc
5
- delegate :uid, :summary, :location, :recurrence_id, :description, :recurs?, :rrule_property, :exdate, :to => :event
5
+ delegate :uid, :summary, :location, :description, :rrule, :exdate, :to => :event
6
6
 
7
7
  def initialize(event)
8
8
  @event = event
9
9
  begin
10
- @utc = @event.dtstart.try(:tzid) != :floating
10
+ @utc = @event.dtstart.tz_utc
11
11
  rescue
12
12
  @utc = true
13
13
  end
@@ -21,6 +21,10 @@ module IcalImporter
21
21
  get_date_time_for :dtend
22
22
  end
23
23
 
24
+ def recurrence_id
25
+ event.recurrence_id ? event.recurrence_id.to_datetime : nil
26
+ end
27
+
24
28
  def all_day_event?
25
29
  begin
26
30
  (Time.parse(end_date_time.to_s) - Time.parse(start_date_time.to_s)) >= 1.day
@@ -31,11 +35,11 @@ module IcalImporter
31
35
 
32
36
  def event_attributes
33
37
  {
34
- :uid => uid,
35
- :title => summary,
38
+ :uid => uid.to_s,
39
+ :title => summary.to_s,
36
40
  :utc => utc?,
37
- :description => description,
38
- :location => location || '',
41
+ :description => description.to_s,
42
+ :location => location.to_s,
39
43
  :start_date_time => start_date_time,
40
44
  :end_date_time => end_date_time,
41
45
  :all_day_event => all_day_event?
@@ -48,8 +52,8 @@ module IcalImporter
48
52
  event_method = event_method.to_sym
49
53
  raise ArgumentError, "Should be dtend or dtstart" unless [:dtstart, :dtend].include? event_method
50
54
  event_time = event.send event_method
51
- if event_time.is_a? DateTime
52
- (event_time.tzid == :floating) ? event_time : event_time.utc
55
+ if event_time.respond_to?(:tz_utc)
56
+ (event_time.tz_utc) ? event_time.utc : event_time.to_datetime
53
57
  else
54
58
  begin
55
59
  event_time.to_datetime
@@ -12,8 +12,8 @@ module IcalImporter
12
12
  def build
13
13
  # handle recuring events
14
14
  @local_event.tap do |le|
15
- if @event.recurs?
16
- @rrule = @event.rrule_property.first # only support recurrence on one schedule
15
+ if @event.rrule.present?
16
+ @rrule = @event.rrule.first # only support recurrence on one schedule
17
17
  # set out new event's basic rucurring properties
18
18
  le.attributes = recurrence_attributes
19
19
 
@@ -49,27 +49,28 @@ module IcalImporter
49
49
 
50
50
  def recurrence_attributes
51
51
  {
52
- :recur_interval => recur_map[@rrule.freq],
53
- :recur_interval_value => @rrule.interval,
52
+ :recur_interval => recur_map[@rrule.frequency],
53
+ :recur_interval_value => @rrule.interval || 1,
54
54
  :recur_end_date => @rrule.until.try(:to_datetime)
55
55
  }
56
56
  end
57
57
 
58
58
  def set_date_exclusion
59
59
  # set any date exclusions
60
- @local_event.date_exclusions = @event.exdate.flatten.map{|d| DateExclusion.new(d)}
60
+ @local_event.date_exclusions = @event.exdate.flatten.map{|d| DateExclusion.new(d.to_datetime)}
61
61
  end
62
62
 
63
63
  def frequency_set
64
- # if .bounded? is an integer that's googles "recur X times"
64
+ # if bounded is an integer that's googles "recur X times"
65
65
  # if that's the case we try to figure out the date it should be by
66
- # multiplying thise "X" times by the frequency that the event recurrs
67
- case @rrule.freq
66
+ # multiplying this "X" times by the frequency that the event recurrs
67
+ interval = @rrule.interval || 1
68
+ case @rrule.frequency
68
69
  when "DAILY"
69
- @local_event.recur_end_date = @local_event.start_date_time + (@rrule.bounded? * @rrule.interval - 1).days if @rrule.bounded?.is_a? Fixnum # convert X times to a date
70
+ @local_event.recur_end_date = @local_event.start_date_time + (@rrule.count * interval - 1).days if @rrule.count.is_a? Fixnum # convert X times to a date
70
71
  when "WEEKLY"
71
- if @rrule.to_ical.include?("BYDAY=")
72
- remote_days = @rrule.to_ical.split("BYDAY=").last.split(";WKST=").first.split(',')
72
+ if @rrule.value_ical.include?("BYDAY=")
73
+ remote_days = @rrule.value_ical.split("BYDAY=").last.split(";WKST=").first.split(',')
73
74
  day_map.each do |abbr, day|
74
75
  @local_event.send "recur_week_#{day}=", remote_days.include?(abbr)
75
76
  end
@@ -80,12 +81,12 @@ module IcalImporter
80
81
  end
81
82
  end
82
83
  # recurrence X times is probably broken - we can select multiple times in a week
83
- @local_event.recur_end_date = @local_event.start_date_time + ((@rrule.bounded? * @rrule.interval - 1) / remote_days.length).weeks if @rrule.bounded?.is_a?(Fixnum)
84
+ @local_event.recur_end_date = @local_event.start_date_time + ((@rrule.count * interval - 1) / remote_days.length).weeks if @rrule.count.is_a? Fixnum
84
85
  when "MONTHLY"
85
- @local_event.recur_month_repeat_by = (@rrule.to_ical =~ /BYDAY/) ? "day_of_week" : "day_of_month"
86
- @local_event.recur_end_date = @local_event.start_date_time + (@rrule.bounded? * @rrule.interval - 1).months if @rrule.bounded?.is_a? Fixnum # convert X times to a date
86
+ @local_event.recur_month_repeat_by = (@rrule.value_ical =~ /BYDAY/) ? "day_of_week" : "day_of_month"
87
+ @local_event.recur_end_date = @local_event.start_date_time + (@rrule.count * interval - 1).months if @rrule.count.is_a? Fixnum # convert X times to a date
87
88
  when "YEARLY"
88
- @local_event.recur_end_date = @local_event.start_date_time + (@rrule.bounded? * @rrule.interval - 1).years if @rrule.bounded?.is_a? Fixnum # convert X times to a date
89
+ @local_event.recur_end_date = @local_event.start_date_time + (@rrule.count * interval - 1).years if @rrule.count.is_a? Fixnum # convert X times to a date
89
90
  end
90
91
  end
91
92
 
@@ -1,3 +1,3 @@
1
1
  module IcalImporter
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -13,7 +13,7 @@ module IcalImporter
13
13
  describe '#initialize' do
14
14
  it "parses with rical" do
15
15
  Parser.any_instance.stub(:open_ical).and_return bare_stuff
16
- RiCal.should_receive(:parse).with bare_stuff
16
+ Icalendar.should_receive(:parse).with bare_stuff
17
17
  Parser.new(url)
18
18
  end
19
19
 
@@ -102,7 +102,7 @@ module IcalImporter
102
102
  it "finds the feed's timezone out of the x properties" do
103
103
  @value = stub
104
104
  @value.should_receive(:value)
105
- subject.stub :feed => [stub(x_properties: { "X-WR-TIMEZONE" => [@value] })]
105
+ subject.stub :feed => [stub(custom_properties: { "x_wr_timezone" => [@value] })]
106
106
  subject.send(:get_timezone)
107
107
  end
108
108
 
@@ -111,7 +111,7 @@ module IcalImporter
111
111
  end
112
112
 
113
113
  it "returns nil if no timezone x property exists" do
114
- subject.stub :feed => [stub(x_properties: { "X-WR-DERPHERP" => [@value] })]
114
+ subject.stub :feed => [stub(custom_properties: { "x_wr_derpherp" => [@value] })]
115
115
  subject.send(:get_timezone).should be_nil
116
116
  end
117
117
  end
@@ -120,7 +120,7 @@ module IcalImporter
120
120
  it "finds the feed's name out of the x properties" do
121
121
  @value = stub
122
122
  @value.should_receive(:value)
123
- subject.stub :feed => [stub(x_properties: { "X-WR-CALNAME" => [@value] })]
123
+ subject.stub :feed => [stub(custom_properties: { "x_wr_calname" => [@value] })]
124
124
  subject.send(:get_name)
125
125
  end
126
126
 
@@ -129,7 +129,7 @@ module IcalImporter
129
129
  end
130
130
 
131
131
  it "returns nil if no name x property exists" do
132
- subject.stub :feed => [stub(x_properties: { "X-WR-DERPHERP" => [@value] })]
132
+ subject.stub :feed => [stub(custom_properties: { "x_wr_derpherp" => [@value] })]
133
133
  subject.send(:get_name).should be_nil
134
134
  end
135
135
  end
@@ -17,7 +17,7 @@ module IcalImporter
17
17
 
18
18
  it "fails with incorrect event type" do
19
19
  new_event = stub(:is_a? => false)
20
- expect { subject.<<(new_event) }.to raise_error(ArgumentError, "Must be a RiCal Event")
20
+ expect { subject.<<(new_event) }.to raise_error(ArgumentError, "Must be an Icalendar Event")
21
21
  end
22
22
  end
23
23
 
@@ -34,13 +34,13 @@ module IcalImporter
34
34
  end
35
35
 
36
36
  describe "#build_new_local_event" do
37
- let(:remote_event) { stub :summary => "birthdayy",
38
- :uid => 1,
39
- :description => "do stuff",
40
- :location => "here",
37
+ let(:remote_event) { stub :summary => stub(:to_s => "birthdayy"),
38
+ :uid => stub(:to_s => 1),
39
+ :description => stub(:to_s => "do stuff"),
40
+ :location => stub(:to_s => "here"),
41
41
  :start_date_time => "today",
42
42
  :end_date_time => "tomorrow",
43
- :recurrence_id => 1
43
+ :recurrence_id => "20120715".to_datetime
44
44
  }
45
45
  it "creates a new event" do
46
46
  RemoteEvent.stub(:new => remote_event)
@@ -2,10 +2,9 @@ require 'spec_helper'
2
2
  module IcalImporter
3
3
  describe RemoteEvent do
4
4
  subject { RemoteEvent.new(event) }
5
- let(:event) { stub :dtstart => stub(:tzid => nil) }
5
+ let(:event) { stub :dtstart => stub(:tz_utc => true) }
6
6
  it { should respond_to :description }
7
- it { should respond_to :recurs? }
8
- it { should respond_to :rrule_property }
7
+ it { should respond_to :rrule }
9
8
  it { should respond_to :exdate }
10
9
  describe "#initialize" do
11
10
  describe "dtstart tzid nil" do
@@ -16,7 +15,7 @@ module IcalImporter
16
15
  end
17
16
 
18
17
  describe "dtstart tzid == :floating" do
19
- let(:event) { stub :dtstart => stub(:tzid => :floating) }
18
+ let(:event) { stub :dtstart => stub(:tz_utc => false) }
20
19
  it "sets utc and event" do
21
20
  subject.event.should == event
22
21
  subject.utc?.should == false
@@ -42,7 +41,8 @@ module IcalImporter
42
41
  describe "without a floating tzid" do
43
42
  let(:event) { stub :dtstart => stub(
44
43
  :is_a? => true,
45
- :tzid => nil,
44
+ :utc? => true,
45
+ :tz_utc => true,
46
46
  :time => "20120715".to_datetime,
47
47
  :utc => "20120715".to_datetime.utc) }
48
48
  it "uses the utc time of the datetime" do
@@ -52,13 +52,13 @@ module IcalImporter
52
52
  end
53
53
 
54
54
  describe "#event_attributes" do
55
- let(:event) { RiCal.parse(sample_ics).first.events.first }
55
+ let(:event) { Icalendar.parse(sample_ics).first.events.first }
56
56
  it "fills in some attributes" do
57
57
  subject.event_attributes.should == {
58
58
  :uid => "1629F7A5-5A69-43CB-899E-4CE9BD5F069F",
59
59
  :title => "Recurring Event",
60
60
  :utc => true,
61
- :description => nil,
61
+ :description => "",
62
62
  :location => "",
63
63
  :start_date_time => "Wed, 14 Sep 2016 00:00:00 +0000".to_datetime,
64
64
  :end_date_time => "Thu, 15 Sep 2016 00:00:00 +0000".to_datetime,
@@ -2,13 +2,13 @@ require 'spec_helper'
2
2
  module IcalImporter
3
3
  describe SingleEventBuilder do
4
4
  subject { SingleEventBuilder.new(event) }
5
- let(:event) { RiCal.parse(sample_ics('mn_twins')).first.events.first }
5
+ let(:event) { Icalendar.parse(sample_ics('mn_twins')).first.events.first }
6
6
  describe "#build" do
7
7
  it "builds an event" do
8
8
  new_event = subject.build
9
9
  new_event.should be_a LocalEvent
10
10
  new_event.title.should == "Spring Training: Tampa Bay 3 - Minnesota 7"
11
- new_event.utc?.should == true
11
+ new_event.utc?.should == false
12
12
  new_event.description.should == "Spring Training: Tampa Bay 3 - Minnesota 7\n\nClick below for game previews, wraps and boxscores plus video, tickets, stats, gameday and more!\nhttp://mlb.mlb.com/mlb/gameday/index.jsp?gid=2012_03_03_tbamlb_minmlb_1\n\nWatch or Listen with MLB.TV: http://mlb.mlb.com/schedule/index.jsp?c_id=min&m=03&y=2012\n\nLocal Radio: 1500 ESPN"
13
13
  new_event.location.should == "Lee County Sports Complex, Hammond County Stadium, Lee County"
14
14
  new_event.all_day_event.should == false
@@ -29,9 +29,9 @@ DTEND;TZID=America/New_York:20120303T160500
29
29
  DTSTAMP:20120806T221604Z
30
30
  UID:332106@mlb.com
31
31
  CREATED:20111130T212813Z
32
- DESCRIPTION:Spring Training: Tampa Bay 3 - Minnesota 7\n\nClick below for game previews, wraps and boxscores plus video, tickets, stats, gameday and more!\nhttp://mlb.mlb.com/mlb/gameday/index.jsp?gid=2012_03_03_tbamlb_minmlb_1\n\nWatch or Listen with MLB.TV: http://mlb.mlb.com/schedule/index.jsp?c_id=min&m=03&y=2012\n\nLocal Radio: 1500 ESPN
32
+ DESCRIPTION:Spring Training: Tampa Bay 3 - Minnesota 7\n\nClick below for game previews\, wraps and boxscores plus video\, tickets\, stats\, gameday and more!\nhttp://mlb.mlb.com/mlb/gameday/index.jsp?gid=2012_03_03_tbamlb_minmlb_1\n\nWatch or Listen with MLB.TV: http://mlb.mlb.com/schedule/index.jsp?c_id=min&m=03&y=2012\n\nLocal Radio: 1500 ESPN
33
33
  LAST-MODIFIED:20120307T194443Z
34
- LOCATION:Lee County Sports Complex, Hammond County Stadium, Lee County
34
+ LOCATION:Lee County Sports Complex\, Hammond County Stadium\, Lee County
35
35
  SUMMARY:Spring Training: Tampa Bay 3 - Minnesota 7
36
36
  TRANSP:TRANSPARENT
37
37
  SEQUENCE:2
@@ -43,9 +43,9 @@ DTEND;TZID=America/New_York:20120305T220500
43
43
  DTSTAMP:20120806T221604Z
44
44
  UID:332124@mlb.com
45
45
  CREATED:20111130T212816Z
46
- DESCRIPTION:Spring Training: Boston 10 - Minnesota 2\n\nClick below for game previews, wraps and boxscores plus video, tickets, stats, gameday and more!\nhttp://mlb.mlb.com/mlb/gameday/index.jsp?gid=2012_03_05_bosmlb_minmlb_1\n\nWatch or Listen with MLB.TV: http://mlb.mlb.com/schedule/index.jsp?c_id=min&m=03&y=2012\n\nLocal TV: MLBN (delay), FS-N+, MLB.TV\nLocal Radio: 1500 ESPN
46
+ DESCRIPTION:Spring Training: Boston 10 - Minnesota 2\n\nClick below for game previews\, wraps and boxscores plus video\, tickets\, stats\, gameday and more!\nhttp://mlb.mlb.com/mlb/gameday/index.jsp?gid=2012_03_05_bosmlb_minmlb_1\n\nWatch or Listen with MLB.TV: http://mlb.mlb.com/schedule/index.jsp?c_id=min&m=03&y=2012\n\nLocal TV: MLBN (delay)\, FS-N+\, MLB.TV\nLocal Radio: 1500 ESPN
47
47
  LAST-MODIFIED:20120307T200743Z
48
- LOCATION:Lee County Sports Complex, Hammond County Stadium, Lee County
48
+ LOCATION:Lee County Sports Complex\, Hammond County Stadium\, Lee County
49
49
  SUMMARY:Spring Training: Boston 10 - Minnesota 2
50
50
  TRANSP:TRANSPARENT
51
51
  SEQUENCE:2
@@ -1409,4 +1409,4 @@ TRANSP:TRANSPARENT
1409
1409
  SEQUENCE:0
1410
1410
  URL:http://mlb.mlb.com/mlb/gameday/index.jsp?gid=2012_09_30_detmlb_minmlb_1
1411
1411
  END:VEVENT
1412
- END:VCALENDAR
1412
+ END:VCALENDAR
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ical_importer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Phenow
@@ -31,19 +31,33 @@ dependencies:
31
31
  - !ruby/object:Gem::Version
32
32
  version: 4.0.0
33
33
  - !ruby/object:Gem::Dependency
34
- name: ri_cal
34
+ name: tzinfo
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - ~>
38
38
  - !ruby/object:Gem::Version
39
- version: '0.8'
39
+ version: 0.3.29
40
40
  type: :runtime
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - ~>
45
45
  - !ruby/object:Gem::Version
46
- version: '0.8'
46
+ version: 0.3.29
47
+ - !ruby/object:Gem::Dependency
48
+ name: icalendar
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 2.3.0
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ~>
59
+ - !ruby/object:Gem::Version
60
+ version: 2.3.0
47
61
  - !ruby/object:Gem::Dependency
48
62
  name: i18n
49
63
  requirement: !ruby/object:Gem::Requirement