icalendar 2.0.0.beta.1 → 2.0.0.beta.2

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