icalendar 2.0.0.beta.1 → 2.0.0.beta.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: eb0a66f621c41416a3adc31d2b51de3f28b5f777
4
- data.tar.gz: b5ec14a510654033efffa5c75cac5fb7cba3227e
3
+ metadata.gz: 8a5e107e53784e1a46b2eea851f53da90b4c7a5d
4
+ data.tar.gz: fc7ab4fdf29eee625e3b34f0c2989611973cb12a
5
5
  SHA512:
6
- metadata.gz: 8a91a092682a21f37d46f70107ce223df05c6a3d906cf4cc8b87dfb5e4524429498979ec41dcac6319359b768a8e70f177ebcb5cf87ffd12b0eac757d874d607
7
- data.tar.gz: 70a6edaf55706b6bc500145967c75c1eb0d98d5ea5262aae745c89a1084ce8d019b4baf7cd9d763345258296883a53b78a4c7f26a707b1c5375d5ed7a397a359
6
+ metadata.gz: 8370c7815a1b841a87559805efe26cfe42762bfd6447a44206856fa30b347c6aedab88f6ff1690e44d3512d76506b7d5ca3c2438f9cc0bd53c360a6f84c426bc
7
+ data.tar.gz: 38d884b87d744f5224221577d3b0e525810823900c064a1c4c42097235db0fc3a3a16c5cc58e13728846047231753e5a4804bb41a6695874a3261157717d4e6a
data/History.txt CHANGED
@@ -1,3 +1,8 @@
1
+ === 2.0.0.beta.2 2014-04-11
2
+ * Add uid & acknowledged fields from valarm extensions
3
+ * Swallow NoMethodError on non-strict parsers
4
+ * Expose a parse_property method on Icalendar::Parser
5
+
1
6
  === 2.0.0.beta.1 2014-03-30
2
7
  * Rewrite for easier development going forward.
3
8
 
@@ -16,6 +16,10 @@ module Icalendar
16
16
 
17
17
  optional_property :attach, Icalendar::Values::Uri
18
18
 
19
+ # not part of base spec - need better abstraction for extensions
20
+ optional_single_property :uid
21
+ optional_single_property :acknowledged, Icalendar::Values::DateTime
22
+
19
23
  def initialize
20
24
  super 'alarm'
21
25
  end
@@ -32,4 +36,4 @@ module Icalendar
32
36
  super
33
37
  end
34
38
  end
35
- end
39
+ end
@@ -12,12 +12,13 @@ module Icalendar
12
12
  else
13
13
  raise ArgumentError, 'Icalendar::Parser.new must be called with a String or IO object'
14
14
  end
15
+ read_in_data
15
16
  @strict = strict
16
17
  end
17
18
 
18
19
  def parse
19
20
  source.rewind
20
- @data = source.gets and @data.chomp!
21
+ read_in_data
21
22
  calendars = []
22
23
  while (fields = next_fields)
23
24
  if fields[:name] == 'begin' && fields[:value].downcase == 'vcalendar'
@@ -27,6 +28,41 @@ module Icalendar
27
28
  calendars
28
29
  end
29
30
 
31
+ def parse_property(component, fields = nil)
32
+ fields = next_fields if fields.nil?
33
+ klass = component.class.default_property_types[fields[:name]]
34
+ if !fields[:params]['value'].nil?
35
+ klass_name = fields[:params].delete('value').first
36
+ unless klass_name.upcase == klass.value_type
37
+ klass_name = klass_name.downcase.gsub(/(?:\A|-)(.)/) { |m| m[-1].upcase }
38
+ klass = Icalendar::Values.const_get klass_name if Icalendar::Values.const_defined?(klass_name)
39
+ end
40
+ end
41
+ if klass.value_type != 'RECUR' && fields[:value] =~ /(?<!\\)([,;])/
42
+ delimiter = $1
43
+ prop_value = Icalendar::Values::Array.new fields[:value].split(/(?<!\\)[;,]/),
44
+ klass,
45
+ fields[:params],
46
+ delimiter: delimiter
47
+ else
48
+ prop_value = klass.new fields[:value], fields[:params]
49
+ end
50
+ prop_name = %w(class method).include?(fields[:name]) ? "ip_#{fields[:name]}" : fields[:name]
51
+ begin
52
+ if component.class.multiple_properties.include? prop_name
53
+ component.send "append_#{prop_name}", prop_value
54
+ else
55
+ component.send "#{prop_name}=", prop_value
56
+ end
57
+ rescue NoMethodError => nme
58
+ raise nme if strict?
59
+ end
60
+ end
61
+
62
+ def strict?
63
+ !!@strict
64
+ end
65
+
30
66
  private
31
67
 
32
68
  def parse_component(component)
@@ -44,38 +80,20 @@ module Icalendar
44
80
  end
45
81
  else
46
82
  # new property
47
- klass = component.class.default_property_types[fields[:name]]
48
- if !fields[:params]['value'].nil?
49
- klass_name = fields[:params].delete('value').first
50
- unless klass_name.upcase == klass.value_type
51
- klass_name = klass_name.downcase.gsub(/(?:\A|-)(.)/) { |m| m[-1].upcase }
52
- klass = Icalendar::Values.const_get klass_name if Icalendar::Values.const_defined?(klass_name)
53
- end
54
- end
55
- if klass.value_type != 'RECUR' && fields[:value] =~ /(?<!\\)([,;])/
56
- delimiter = $1
57
- prop_value = Icalendar::Values::Array.new fields[:value].split(/(?<!\\)[;,]/),
58
- klass,
59
- fields[:params],
60
- delimiter: delimiter
61
- else
62
- prop_value = klass.new fields[:value], fields[:params]
63
- end
64
- prop_name = %w(class method).include?(fields[:name]) ? "ip_#{fields[:name]}" : fields[:name]
65
- if component.class.multiple_properties.include? prop_name
66
- component.send "append_#{prop_name}", prop_value
67
- else
68
- component.send "#{prop_name}=", prop_value
69
- end
83
+ parse_property component, fields
70
84
  end
71
85
  end
72
86
  component
73
87
  end
74
88
 
89
+ def read_in_data
90
+ @data = source.gets and @data.chomp!
91
+ end
92
+
75
93
  def next_fields
76
94
  line = @data or return nil
77
95
  loop do
78
- @data = source.gets and @data.chomp!
96
+ read_in_data
79
97
  if @data =~ /\A[ \t].+\z/
80
98
  line << @data[1, @data.size]
81
99
  elsif @data !~ /\A\s*\z/
@@ -1,5 +1,5 @@
1
1
  module Icalendar
2
2
 
3
- VERSION = '2.0.0.beta.1'
3
+ VERSION = '2.0.0.beta.2'
4
4
 
5
- end
5
+ 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.0.0.beta.1
4
+ version: 2.0.0.beta.2
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-03-30 00:00:00.000000000 Z
11
+ date: 2014-04-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake