icalendar 2.2.0 → 2.2.1

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,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1247afeb6249a4562ed23fdf9a01345f10513d8e
4
- data.tar.gz: edb231f0a00055c53bafec1e92a4006b741d14fb
3
+ metadata.gz: 64b02f2d89672803b2833812e128816a6fe5aba3
4
+ data.tar.gz: 38d46d3ef98ed6cf283f25e4724134947327b648
5
5
  SHA512:
6
- metadata.gz: 3c93f4624d028b364b42ed6054df4b7bffe2296bdd392985aff5d929be4fff0ebea3ff15ae93799277935497385d28f0f210ff7928309dac9488b42d1c25bc0c
7
- data.tar.gz: 59a6178deb2fc347b0487306aff201d64360ed52aae18fe3e905082988f827f7c6f509fdde39d15461cfb38a1b34b506c6caaa821fe3ede4af0eda7259121570
6
+ metadata.gz: 8fcbf5dfced73f2e73751f153af8a9daf8c8f78e439e01ee14edb3bdc29ea053f02613d8ba56773a0fac6fc2f173f002cf65cb0ef00340a162774540343aca55
7
+ data.tar.gz: 6ddcb714caeed08fe016cd9b30e07f34c112ed1f7573435af1994537f64a7ad29e0c6cfc843789b8d2a28ed60710107570f0a996a6215ae1633d982f27308a61
data/History.txt CHANGED
@@ -1,7 +1,12 @@
1
+ === 2.2.1 2014-12-03
2
+ * Prevent crashes when using ActiveSupport::TimeWithZone in multi-property DateTime fields - Danny (tdg5)
3
+ * Ensure TimeWithZone is loaded before using, not just ActiveSupport - Jeremy Evans
4
+ * Improve error message on unparseable DateTimes - Garry Shutler
5
+
1
6
  === 2.2.0 2014-09-23
2
7
  * Default to non-strict parsing
3
8
  * Enable sorting events by dtstart - Mark Rickert
4
- * Better tolerate malformed lines in parser - Gary Shutler
9
+ * Better tolerate malformed lines in parser - Garry Shutler
5
10
  * Deduplicate timezone code - Jan Vlnas
6
11
  * Eliminate warnings - rochefort
7
12
 
@@ -0,0 +1,12 @@
1
+ module Icalendar
2
+ module Values
3
+ class ActiveSupportTimeWithZoneAdapter < ActiveSupport::TimeWithZone
4
+ # ActiveSupport::TimeWithZone implements a #to_a method that will cause
5
+ # unexpected behavior in components with multi_property DateTime
6
+ # properties when the setters for those properties are invoked with an
7
+ # Icalendar::Values::DateTime that is delegating for an
8
+ # ActiveSupport::TimeWithZone. To avoid this behavior, undefine #to_a.
9
+ undef_method :to_a
10
+ end
11
+ end
12
+ end
@@ -12,7 +12,14 @@ module Icalendar
12
12
  def initialize(value, params = {})
13
13
  if value.is_a? String
14
14
  params['tzid'] = 'UTC' if value.end_with? 'Z'
15
- super ::DateTime.strptime(value, FORMAT), params
15
+
16
+ begin
17
+ parsed_date = ::DateTime.strptime(value, FORMAT)
18
+ rescue ArgumentError => e
19
+ raise ArgumentError.new("Failed to parse \"#{value}\" - #{e.message}")
20
+ end
21
+
22
+ super parsed_date, params
16
23
  elsif value.respond_to? :to_datetime
17
24
  super value.to_datetime, params
18
25
  else
@@ -1,5 +1,9 @@
1
1
  begin
2
2
  require 'active_support/time'
3
+
4
+ if defined?(ActiveSupport::TimeWithZone)
5
+ require 'icalendar/values/active_support_time_with_zone_adapter'
6
+ end
3
7
  rescue LoadError
4
8
  # tis ok, just a bit less fancy
5
9
  end
@@ -12,10 +16,10 @@ module Icalendar
12
16
  def initialize(value, params = {})
13
17
  @tz_utc = params['tzid'] == 'UTC'
14
18
 
15
- if defined?(ActiveSupport) && !params['tzid'].nil?
19
+ if defined?(ActiveSupport::TimeZone) && defined?(ActiveSupportTimeWithZoneAdapter) && !params['tzid'].nil?
16
20
  tzid = params['tzid'].is_a?(::Array) ? params['tzid'].first : params['tzid']
17
21
  zone = ActiveSupport::TimeZone[tzid]
18
- value = ActiveSupport::TimeWithZone.new nil, zone, value unless zone.nil?
22
+ value = ActiveSupportTimeWithZoneAdapter.new nil, zone, value unless zone.nil?
19
23
  super value, params
20
24
  else
21
25
  super
@@ -1,5 +1,5 @@
1
1
  module Icalendar
2
2
 
3
- VERSION = '2.2.0'
3
+ VERSION = '2.2.1'
4
4
 
5
5
  end
data/spec/event_spec.rb CHANGED
@@ -82,6 +82,18 @@ describe Icalendar::Event do
82
82
  expect(subject.comment).to eq ['a comment']
83
83
  end
84
84
  end
85
+
86
+ if defined? ActiveSupport
87
+ describe '#rdate' do
88
+ it 'does not convert a DateTime delegating for an ActiveSupport::TimeWithZone into an Array' do
89
+ timestamp = '20140130T230000Z'
90
+ expected = [Icalendar::Values::DateTime.new(timestamp)]
91
+
92
+ subject.rdate = timestamp
93
+ expect(subject.rdate).to eq(expected)
94
+ end
95
+ end
96
+ end
85
97
  end
86
98
 
87
99
  describe '#find_alarm' do
@@ -76,5 +76,13 @@ describe Icalendar::Values::DateTime do
76
76
  expect(subject.to_ical described_class).to eq ":#{value}"
77
77
  end
78
78
  end
79
+
80
+ context 'unparseable time' do
81
+ let(:value) { 'unparseable_time' }
82
+
83
+ it 'raises an error including the unparseable time' do
84
+ expect { subject }.to raise_error(ArgumentError, %r{Failed to parse \"#{value}\"})
85
+ end
86
+ end
79
87
  end
80
- end
88
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: icalendar
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Ahearn
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-24 00:00:00.000000000 Z
11
+ date: 2014-12-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -156,6 +156,7 @@ files:
156
156
  - lib/icalendar/todo.rb
157
157
  - lib/icalendar/tzinfo.rb
158
158
  - lib/icalendar/value.rb
159
+ - lib/icalendar/values/active_support_time_with_zone_adapter.rb
159
160
  - lib/icalendar/values/array.rb
160
161
  - lib/icalendar/values/binary.rb
161
162
  - lib/icalendar/values/boolean.rb