Sha256: ff75617f6c0010dbcdcc7d258f172ee4492daddfe1431aff9576a78636b1db4a

Contents?: true

Size: 1.92 KB

Versions: 39

Compression:

Stored size: 1.92 KB

Contents

# frozen_string_literal: true

module Decidim
  module Meetings
    module Calendar
      # This class serves as a base class to render calendars. Please, inherit
      # from it and overwrite the `events` with whatever logic you need to do
      # it. After that, modify the `Decidim::Meetings::Calendar.for` method to
      # include your new class.
      class BaseCalendar
        # Convenience method to shorten the calls. Converts the resource
        # meetings to the ICalendar format.
        #
        # resource - a resource that has meetings.
        #
        # Returns a String.
        def self.for(resource)
          new(resource).calendar
        end

        # Initializes the class.
        #
        # resource - a resource that has meetings.
        def initialize(resource)
          @resource = resource
        end

        # Converts the resource meetings to the ICalendar format.
        #
        # Returns a String.
        def calendar
          return if events.blank?

          <<~CALENDAR.gsub("\n\n", "\n")
            BEGIN:VCALENDAR\r
            VERSION:2.0\r
            PRODID:icalendar-ruby\r
            CALSCALE:GREGORIAN\r
            #{events}
            END:VCALENDAR\r
          CALENDAR
        end

        # Internal: this method is supposed to be overwritten by classes
        # inheriting from this one. It should find the relevant meetings that
        # will be exported, and convert them to ICalendar events. Please use the
        # `MeetingToEvent` class to do so. Since this method returns a String,
        # you can cache its contents. Check existing implementations for an
        # example of how to achieve it.
        #
        # Returns a String.
        def events
          raise "Please, overwrite this method. You can use the `MeetingToEvent` class to convert a meeting to the correct ICalendar format."
        end

        private

        attr_reader :resource
      end
    end
  end
end

Version data entries

39 entries across 39 versions & 1 rubygems

Version Path
decidim-meetings-0.26.10 app/services/decidim/meetings/calendar/base_calendar.rb
decidim-meetings-0.26.9 app/services/decidim/meetings/calendar/base_calendar.rb
decidim-meetings-0.26.8 app/services/decidim/meetings/calendar/base_calendar.rb
decidim-meetings-0.26.7 app/services/decidim/meetings/calendar/base_calendar.rb
decidim-meetings-0.26.5 app/services/decidim/meetings/calendar/base_calendar.rb
decidim-meetings-0.26.4 app/services/decidim/meetings/calendar/base_calendar.rb
decidim-meetings-0.26.3 app/services/decidim/meetings/calendar/base_calendar.rb
decidim-meetings-0.26.2 app/services/decidim/meetings/calendar/base_calendar.rb
decidim-meetings-0.26.1 app/services/decidim/meetings/calendar/base_calendar.rb
decidim-meetings-0.26.0 app/services/decidim/meetings/calendar/base_calendar.rb
decidim-meetings-0.26.0.rc2 app/services/decidim/meetings/calendar/base_calendar.rb
decidim-meetings-0.26.0.rc1 app/services/decidim/meetings/calendar/base_calendar.rb
decidim-meetings-0.25.2 app/services/decidim/meetings/calendar/base_calendar.rb
decidim-meetings-0.25.1 app/services/decidim/meetings/calendar/base_calendar.rb
decidim-meetings-0.25.0 app/services/decidim/meetings/calendar/base_calendar.rb
decidim-meetings-0.25.0.rc4 app/services/decidim/meetings/calendar/base_calendar.rb
decidim-meetings-0.25.0.rc3 app/services/decidim/meetings/calendar/base_calendar.rb
decidim-meetings-0.25.0.rc2 app/services/decidim/meetings/calendar/base_calendar.rb
decidim-meetings-0.25.0.rc1 app/services/decidim/meetings/calendar/base_calendar.rb
decidim-meetings-0.24.3 app/services/decidim/meetings/calendar/base_calendar.rb