ical_importer 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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