Sha256: e6748cb23b664d3028c8a701431b4f716ff45d9ce1ecf3ea506548f8e95abc72

Contents?: true

Size: 1.22 KB

Versions: 4

Compression:

Stored size: 1.22 KB

Contents

#
# Icalendar wrapper.
#
# Allows injection of ics calender events from either a remote server or file.
# Meant to provide the backbone event source for local reminders.
#
module CAL
  # Calendar object.
  class C
    # Calendar +f+
    def initialize f
      @f = f
    end
    # each calendar event
    def each &b
      @f.events.each { |e| b.call(E.new(e)) }
      return nil
    end
    # map each calendar event
    def map &b
      a = []
      @f.events.each { |e| a << b.call(E.new(e)) }
      return a
    end
  end

  # Calendar Event object
  class E
    # Calendar Event +f+.
    def initialize f
      @f = f
    end
    # Calendar Event location
    def where
      @f.location
    end
    # Calendar Event focus
    def who
      @f.summary
    end
    # Calendar Event details
    def what
      @f.description
    end
    # Calendar Event scheduling
    def when
      { begin: @f.dtstart, end: @f.dtend }
    end
  end
  # Load Calendar Event Collection from file +f+.
  def self.from_file f
    x = File.read(f)
    C.new(Icalendar::Calendar.parse(x).first)
  end
  # Load Calendar Event Collection from url +u+.
  def self.from_url u
    x = Faraday.new().get(u).body
    C.new(Icalendar::Calendar.parse(x).first)
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
gnu-remind-0.2.5 lib/remind/calendar.rb
gnu-remind-0.2.3 lib/remind/calendar.rb
gnu-remind-0.2.2 lib/remind/calendar.rb
gnu-remind-0.2.1 lib/remind/calendar.rb