riboseinc/ruby-vobject

View on GitHub
lib/vobject/vcalendar/propertyparent.rb

Summary

Maintainability
C
1 day
Test Coverage
require "rsec"
require "set"
require "uri"
require "date"
require "tzinfo"
include Rsec::Helpers
require_relative "../../c"
require_relative "../../error"
require "vobject"

module Vobject::Vcalendar
  class Typegrammars
    class << self
      # Ensure each property belongs to a legal component
      def property_parent(strict, key, component, _value, ctx1)
        errors = []
        if key !~ /^x/i && registered_propname?(key.to_s)
          case component
          when :EVENT
            case key
            when :DTSTAMP, :UID, :DTSTART, :CLASS, :CREATED, :DESCRIPTION,
              :GEO, :LAST_MOD, :LOCATION, :ORGANIZER, :PRIORITY, :SEQUENCE, :STATUS,
              :SUMMARY, :TRANSP, :URL, :RECURRENCE_ID, :RRULE, :DTEND, :DURATION,
              :ATTACH, :ATTENDEE, :CATEGORIES, :COMMENT, :CONTACT, :EXDATE,
              :RSTATUS, :RELATED, :RESOURCES, :RDATE, :COLOR, :CONFERENCE, :IMAGE
            else
              parse_err(strict, errors, "Invalid property #{key} specified for #{component}", ctx1)
            end
          when :TODO
            case key
            when :DTSTAMP, :UID, :DTSTART, :CLASS, :CREATED, :DESCRIPTION,
              :GEO, :LAST_MOD, :LOCATION, :ORGANIZER, :PRIORITY, :PERCENT_COMPLETED, :SEQUENCE, :STATUS,
              :SUMMARY, :URL, :RECURRENCE_ID, :RRULE, :DUE, :DURATION,
              :ATTACH, :ATTENDEE, :CATEGORIES, :COMMENT, :CONTACT, :EXDATE,
              :RSTATUS, :RELATED, :RESOURCES, :RDATE, :COLOR, :CONFERENCE, :IMAGE
            else
              parse_err(strict, errors, "Invalid property #{key} specified for #{component}", ctx1)
            end
          when :JOURNAL
            case key
            when :DTSTAMP, :UID, :DTSTART, :CLASS, :CREATED, :DESCRIPTION,
              :LAST_MOD, :ORGANIZER, :RECURRENCE_ID, :SEQUENCE, :STATUS,
              :SUMMARY, :URL, :RRULE,
              :ATTACH, :ATTENDEE, :CATEGORIES, :COMMENT, :CONTACT, :EXDATE,
              :RSTATUS, :RELATED, :RDATE, :COLOR, :IMAGE
            else
              parse_err(strict, errors, "Invalid property #{key} specified for #{component}", ctx1)
            end
          when :FREEBUSY
            case key
            when :DTSTAMP, :UID, :CONTACT, :DTSTART, :DTEND, :ORGANIZER, :URL,
              :ATTENDEE, :COMMENT, :FREEBUSY, :RSTATUS
            else
              parse_err(strict, errors, "Invalid property #{key} specified for #{component}", ctx1)
            end
          when :TIMEZONE
            case key
            when :TZID, :LAST_MODIFIED, :TZURL
            else
              parse_err(strict, errors, "Invalid property #{key} specified for #{component}", ctx1)
            end
          when :DAYLIGHT, :STANDARD
            case key
            when :DTSTART, :TZOFFSETTO, :TZOFFSETFROM, :RRULE,
              :COMMENT, :RDATE, :TZNAME
            else
              parse_err(strict, errors, "Invalid property #{key} specified for #{component}", ctx1)
            end
          when :ALARM
            case key
            when :ACTION, :TRIGGER, :DURATION, :REPEAT, :ATTACH, :DESCRIPTION,
              :SUMMARY, :ATTENDEE
            else
              parse_err(strict, errors, "Invalid property #{key} specified for #{component}", ctx1)
            end
          when :VAVAILABILITY
            case key
            when :DTSTAMP, :UID, :BUSYTYPE, :CLASS, :CREATED, :DESCRIPTION,
              :DTSTART, :LAST_MODIFIED, :LOCATION, :ORGANIZER, :PRIORITY, :SEQUENCE,
              :SUMMARY, :URL, :DTEND, :DURATION, :CATEGORIES, :COMMENT, :CONTACT
            else
              parse_err(strict, errors, "Invalid property #{key} specified for #{component}", ctx1)
            end
          when :AVAILABLE
            case key
            when :DTSTAMP, :DTSTART, :UID, :DTEND, :DURATION, :CREATED,
              :DESCRIPTION, :LAST_MODIFIED, :LOCATION, :RECURRENCE_ID, :RRULE,
              :SUMMARY, :CATEGORIES, :COMMENT, :CONTACT, :EXDATE, :RDATE
            else
              parse_err(strict, errors, "Invalid property #{key} specified for #{component}", ctx1)
            end
          end
        end
        errors
      end
    end
  end
end