class Calendav::Clients::EventsClient

Attributes

client[R]
credentials[R]
endpoint[R]

Public Class Methods

new(client, endpoint, credentials) click to toggle source
# File lib/calendav/clients/events_client.rb, line 10
def initialize(client, endpoint, credentials)
  @client = client
  @endpoint = endpoint
  @credentials = credentials
end

Public Instance Methods

create(calendar_url, event_identifier, ics) click to toggle source
# File lib/calendav/clients/events_client.rb, line 16
def create(calendar_url, event_identifier, ics)
  event_url = merged_url(calendar_url, event_identifier)
  result = endpoint.put(ics, url: event_url, content_type: :ics)

  result.headers["Location"] || event_url
end
delete(event_url, etag: nil) click to toggle source
# File lib/calendav/clients/events_client.rb, line 23
def delete(event_url, etag: nil)
  endpoint.delete(url: event_url, etag: etag)
rescue PreconditionError
  false
end
find(event_url) click to toggle source
# File lib/calendav/clients/events_client.rb, line 29
def find(event_url)
  response = endpoint.get(url: event_url)

  Event.new(
    url: event_url,
    calendar_data: response.body.to_s,
    etag: response.headers["ETag"]
  )
end
list(calendar_url, from: nil, to: nil) click to toggle source
# File lib/calendav/clients/events_client.rb, line 39
def list(calendar_url, from: nil, to: nil)
  request = Requests::ListEvents.call(from: from, to: to)

  endpoint
    .report(request.to_xml, url: calendar_url, depth: 1)
    .reject { |node| node.xpath(".//caldav:calendar-data").text.empty? }
    .collect { |node| Event.from_xml(calendar_url, node) }
end
update(event_url, ics, etag: nil) click to toggle source
# File lib/calendav/clients/events_client.rb, line 48
def update(event_url, ics, etag: nil)
  endpoint.put(
    ics, url: event_url, content_type: :ics, etag: etag
  )

  true
rescue PreconditionError
  false
end

Private Instance Methods

merged_url(calendar_url, event_identifier) click to toggle source
# File lib/calendav/clients/events_client.rb, line 62
def merged_url(calendar_url, event_identifier)
  "#{calendar_url.delete_suffix('/')}/#{event_identifier}"
end