File: array.rb

package info (click to toggle)
ruby-icalendar 2.8.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 492 kB
  • sloc: ruby: 2,868; makefile: 5
file content (58 lines) | stat: -rw-r--r-- 1,450 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
module Icalendar
  module Values

    class Array < Value

      attr_reader :value_delimiter

      def initialize(value, klass, params = {}, options = {})
        @value_delimiter = options[:delimiter] || ','
        mapped = if value.is_a? ::Array
                   value.map do |v|
                     if v.is_a? Icalendar::Values::Array
                       Icalendar::Values::Array.new v.value, klass, v.ical_params, delimiter: v.value_delimiter
                     elsif v.is_a? ::Array
                       Icalendar::Values::Array.new v, klass, params, delimiter: value_delimiter
                     elsif v.is_a? Icalendar::Value
                       v
                     else
                       klass.new v, params
                     end
                   end
                 else
                   [klass.new(value, params)]
                 end
        super mapped
      end

      def params_ical
        value.each do |v|
          ical_params.merge! v.ical_params
        end
        super
      end

      def value_ical
        value.map do |v|
          v.value_ical
        end.join value_delimiter
      end

      def valid?
        klass = value.first.class
        !value.all? { |v| v.class == klass }
      end

      def value_type
        value.first.value_type
      end

      private

      def needs_value_type?(default_type)
        value.first.class != default_type
      end
    end

  end
end