Ruby CalDAV library named "agcaldav"
agcaldav is a CalDAV library based on martinpovolny/ruby-caldav and 4fthawaiian/ruby-caldav and collectiveidea/caldav
Please keep in mind, agcaldav ist still under heavy development and still not finished...
Usage Events
First, you've to install the gem
gem install agcaldav
and require it
require "agcaldav"
Next you have to obtain the URI, username and password to a CalDAV-Server. If you don't have one try RADICALE (https://github.com/agilastic/Radicale). It's small, simple and written in python. In the following steps I'm using the default params of Radical.
Now you can e.g. create a new AgCalDAV-Client:
cal = AgCalDAV::Client.new(:uri => "http://localhost:5232/user/calendar", :user => "user" , :password => "")
Alternatively, the proxy parameters can be specified:
cal = AgCalDAV::Client.new(:uri => "http://localhost:5232/user/calendar",:user => "user" , :password => "password", :proxy_uri => "http://my-proxy.com:8080")
Create an Event
result = cal.create_event(:start => "2012-12-29 10:00", :end => "2012-12-30 12:00", :title => "12345", :description => "12345 12345")
Analyze result:
>> result
=> #<Icalendar::Event:0x007ff653b47520 @name="VEVENT", @components={}, @properties={"sequence"=>0, "dtstamp"=>#<DateTime: 2012-12-30T19:59:04+00:00 (26527957193/10800,0/1,2299161)>, "description"=>"sdkvjsdf sdkf sdkfj sdkf dsfj", "dtend"=>#<DateTime: 2012-12-30T12:00:00+00:00 (2456292/1,0/1,2299161)>, "dtstart"=>#<DateTime: 2012-12-29T10:00:00+00:00 (29475491/12,0/1,2299161)>, "summary"=>"12345", "uid"=>"e795c480-34e0-0130-7d1d-109add70606c", "x-radicale_name"=>"e795c480-34e0-0130-7d1d-109add70606c.ics"}>
>> result.class
=> Icalendar::Event
get UID of this Event:
>> result.uid
=> "e795c480-34e0-0130-7d1d-109add70606c"
Find an Event (via UUID)
result = cal.find_event("e795c480-34e0-0130-7d1d-109add70606c")
>> result.class
=> Icalendar::Event
Find Events within time interval
result = cal.find_events(:start => "2012-10-01 08:00", :end => "2013-01-01")
>> result
=> [#<Icalendar::Event:0x007f8ad11cfdf0 @name="VEVENT", @components={}, @properties={"sequence"=>0, "dtstamp"=>#<DateTime: 2012-12-31T13:44:10+00:00 (4244474429/1728,0/1,2299161)>, "description"=>"sdkvjsdf sdkf sdkfj sdkf dsfj", "dtend"=>#<DateTime: 2012-12-30T12:00:00+00:00 (2456292/1,0/1,2299161)>, "dtstart"=>#<DateTime: 2012-12-29T10:00:00+00:00 (29475491/12,0/1,2299161)>, "summary"=>"12345", "uid"=>"b2c45e20-3575-0130-7d2e-109add70606c", "x-radicale_name"=>"b2c45e20-3575-0130-7d2e-109add70606c.ics"}>, #<Icalendar::Event:0x007f8ad10d7dd0 @name="VEVENT", @components={}, @properties={"sequence"=>0, "dtstamp"=>#<DateTime: 2012-12-31T13:44:10+00:00 (4244474429/1728,0/1,2299161)>, "uid"=>"b2c45e20-3575-0130-7d2e-109add70606c", "x-radicale_name"=>"b2c45e20-3575-0130-7d2e-109add70606c.ics"}>]
>> result.class
=> Array
>> result.count
=> 2
Update Event
event = {:start => "2012-12-29 10:00", :end => "2012-12-30 12:00", :title => "12345", :description => "sdkvjsdf sdkf sdkfj sdkf dsfj"}
# set UUID
event[:uid] => "e795c480-34e0-0130-7d1d-109add70606c"
c = cal.update_event(event)
Delete Event
cal.delete_event("e795c480-34e0-0130-7d1d-109add70606c")
Usage ToDo
not finished ATM
Have a look tomorrow...
Work to be done ...
- find and notify if overlapping events
- code cleanup -> more ActiveRecord style
Testing
agcaldav will use RSpec for its test coverage. Inside the gem directory, you can run the specs for RoR 3.x with:
rake spec (will be implemented in > v0.2.5)
Licence
MIT
Contributors
- Fork it.
- Create a branch (
git checkout -b my_feature_branch
) - Commit your changes (
git commit -am "bugfixed abc..."
) - Push to the branch (
git push origin my_feature_branch
) - Open a Pull Request
- Enjoy a refreshing Club Mate and wait