h13ronim-gcal4ruby 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,151 @@
1
+ require 'gcal4ruby/base'
2
+ require 'gcal4ruby/calendar'
3
+
4
+ module GCal4Ruby
5
+
6
+ #The service class is the main handler for all direct interactions with the
7
+ #Google Calendar API. A service represents a single user account. Each user
8
+ #account can have multiple calendars, so you'll need to find the calendar you
9
+ #want from the service, using the Calendar#find class method.
10
+ #=Usage
11
+ #
12
+ #1. Authenticate
13
+ # service = Service.new
14
+ # service.authenticate("user@gmail.com", "password")
15
+ #
16
+ #2. Get Calendar List
17
+ # calendars = service.calendars
18
+ #
19
+
20
+ class Service < Base
21
+ #Convenience attribute contains the currently authenticated account name
22
+ attr_reader :account
23
+
24
+ # The token returned by the Google servers, used to authorize all subsequent messages
25
+ attr_reader :auth_token
26
+
27
+ # Determines whether GCal4Ruby ensures a calendar is public. Setting this to false can increase speeds by
28
+ # 50% but can cause errors if you try to do something to a calendar that is not public and you don't have
29
+ # adequate permissions
30
+ attr_accessor :check_public
31
+
32
+ def initialize
33
+ super
34
+ @check_public = true
35
+ end
36
+
37
+ # The authenticate method passes the username and password to google servers.
38
+ # If authentication succeeds, returns true, otherwise raises the AuthenticationFailed error.
39
+ def authenticate(username, password)
40
+ ret = nil
41
+ ret = send_post(AUTH_URL, "Email=#{username}&Passwd=#{password}&source=GCal4Ruby&service=cl&accountType=HOSTED_OR_GOOGLE")
42
+ if ret.class == Net::HTTPOK
43
+ @auth_token = ret.read_body.to_a[2].gsub("Auth=", "").strip
44
+ @account = username
45
+ return true
46
+ else
47
+ raise AuthenticationFailed
48
+ end
49
+ end
50
+
51
+ #Returns an array of Calendar objects for each calendar associated with
52
+ #the authenticated account.
53
+ def calendars
54
+ if not @auth_token
55
+ raise NotAuthenticated
56
+ end
57
+ ret = send_get(CALENDAR_LIST_FEED)
58
+ cals = []
59
+ REXML::Document.new(ret.body).root.elements.each("entry"){}.map do |entry|
60
+ entry.attributes["xmlns:gCal"] = "http://schemas.google.com/gCal/2005"
61
+ entry.attributes["xmlns:gd"] = "http://schemas.google.com/g/2005"
62
+ entry.attributes["xmlns:app"] = "http://www.w3.org/2007/app"
63
+ entry.attributes["xmlns"] = "http://www.w3.org/2005/Atom"
64
+ cal = Calendar.new(self)
65
+ cal.load("<?xml version='1.0' encoding='UTF-8'?>#{entry.to_s}")
66
+ cals << cal
67
+ end
68
+ return cals
69
+ end
70
+
71
+ #Helper function to return a formatted iframe embedded google calendar. Parameters are:
72
+ #1. *cals*: either an array of calendar ids, or <em>:all</em> for all calendars, or <em>:first</em> for the first (usally default) calendar
73
+ #2. *params*: a hash of parameters that affect the display of the embedded calendar:
74
+ # height:: the height of the embedded calendar in pixels
75
+ # width:: the width of the embedded calendar in pixels
76
+ # title:: the title to display
77
+ # bgcolor:: the background color. Limited choices, see google docs for allowable values.
78
+ # color:: the color of the calendar elements. Limited choices, see google docs for allowable values.
79
+ # showTitle:: set to 'false' to hide the title
80
+ # showDate:: set to 'false' to hide the current date
81
+ # showNav:: set to 'false to hide the navigation tools
82
+ # showPrint:: set to 'false' to hide the print icon
83
+ # showTabs:: set to 'false' to hide the tabs
84
+ # showCalendars:: set to 'false' to hide the calendars selection drop down
85
+ # showTimezone:: set to 'false' to hide the timezone selection
86
+ # border:: the border width in pixels
87
+ # dates:: a range of dates to display in the format of 'yyyymmdd/yyyymmdd'. Example: 20090820/20091001
88
+ # privateKey:: use to display a private calendar. You can find this key under the calendar settings pane of the Google Calendar website.
89
+ # colors:: a hash of calendar ids as key and color values as associated hash values. Example: {'test@gmail.com' => '#7A367A'}
90
+ def to_iframe(cals, params = {})
91
+ params[:height] ||= "600"
92
+ params[:width] ||= "600"
93
+ params[:title] ||= (self.account ? self.account : '')
94
+ params[:bgcolor] ||= "#FFFFFF"
95
+ params[:color] ||= "#2952A3"
96
+ params[:showTitle] = params[:showTitle] == false ? "showTitle=0" : ''
97
+ params[:showNav] = params[:showNav] == false ? "showNav=0" : ''
98
+ params[:showDate] = params[:showDate] == false ? "showDate=0" : ''
99
+ params[:showPrint] = params[:showPrint] == false ? "showPrint=0" : ''
100
+ params[:showTabs] = params[:showTabs] == false ? "showTabs=0" : ''
101
+ params[:showCalendars] = params[:showCalendars] == false ? "showCalendars=0" : ''
102
+ params[:showTimezone] = params[:showTimezone] == false ? 'showTz=0' : ''
103
+ params[:border] ||= "0"
104
+ output = ''
105
+ puts "params = #{params.inspect}" if self.debug
106
+ params.each do |key, value|
107
+ puts "key = #{key} and value = #{value}" if self.debug
108
+ case key
109
+ when :height then output += "height=#{value}"
110
+ when :width then output += "width=#{value}"
111
+ when :title then output += "title=#{CGI.escape(value)}"
112
+ when :bgcolor then output += "bgcolor=#{CGI.escape(value)}"
113
+ when :color then output += "color=#{CGI.escape(value)}"
114
+ when :showTitle then output += value
115
+ when :showDate then output += value
116
+ when :showNav then output += value
117
+ when :showPrint then output += value
118
+ when :showTabs then output += value
119
+ when :showCalendars then output += value
120
+ when :showTimezone then output += value
121
+ when :viewMode then output += "mode=#{value}"
122
+ when :dates then output += "dates=#{CGI.escape(value)}"
123
+ when :privateKey then output += "pvttk=#{value}"
124
+ end
125
+ output += "&amp;"
126
+ end
127
+
128
+ puts "output = #{output}" if self.debug
129
+
130
+ if cals.is_a?(Array)
131
+ for c in cals
132
+ output += "src=#{c}&amp;"
133
+ if params[:colors] and params[:colors][c]
134
+ output += "color=#{CGI.escape(params[:colors][c])}&amp;"
135
+ end
136
+ end
137
+ elsif cals == :all
138
+ cal_list = calendars()
139
+ for c in cal_list
140
+ output += "src=#{c.id}&amp;"
141
+ end
142
+ elsif cals == :first
143
+ cal_list = calendars()
144
+ output += "src=#{cal_list[0].id}&amp;"
145
+ end
146
+
147
+ "<iframe src='http://www.google.com/calendar/embed?#{output}' style='#{params[:border]} px solid;' width='#{params[:width]}' height='#{params[:height]}' frameborder='#{params[:border]}' scrolling='no'></iframe>"
148
+ end
149
+ end
150
+
151
+ end
data/lib/gcal4ruby.rb ADDED
@@ -0,0 +1 @@
1
+ require "gcal4ruby/service"
data/test/unit.rb ADDED
@@ -0,0 +1,141 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'rubygems'
4
+ require 'gcal4ruby'
5
+ include GCal4Ruby
6
+
7
+ @service = Service.new
8
+ @username = nil
9
+ @password = nil
10
+
11
+ def tester
12
+ if ARGV.include?("-d")
13
+ @service.debug = true
14
+ end
15
+ ARGV.each do |ar|
16
+ if ar.match("username=")
17
+ @username = ar.gsub("username=", "")
18
+ end
19
+ if ar.match("password=")
20
+ @password = ar.gsub("password=", "")
21
+ end
22
+ end
23
+ service_test
24
+ calendar_test
25
+ event_test
26
+ end
27
+
28
+ def service_test
29
+ puts "---Starting Service Test---"
30
+ puts "1. Authenticate"
31
+ if @service.authenticate(@username, @password)
32
+ successful
33
+ else
34
+ failed
35
+ end
36
+
37
+ puts "2. Calendar List"
38
+ cals = @service.calendars
39
+ if cals
40
+ successful "Calendars for this Account:"
41
+ cals.each do |cal|
42
+ puts cal.title
43
+ end
44
+ else
45
+ failed
46
+ end
47
+ end
48
+
49
+ def calendar_test
50
+ puts "---Starting Calendar Test---"
51
+
52
+ puts "1. Create Calendar"
53
+ cal = Calendar.new(@service)
54
+ cal.title = "test calendar"+Time.now.to_s
55
+ puts "Calender exists = "+cal.exists?.to_s
56
+ if cal.save
57
+ successful cal.to_xml
58
+ else
59
+ failed
60
+ end
61
+
62
+ puts "2. Edit Calendar"
63
+ cal.title = "renamed title"
64
+ if cal.save
65
+ successful cal.to_xml
66
+ else
67
+ puts "Test 2 Failed"
68
+ end
69
+
70
+ puts "3. Find Calendar by ID"
71
+ c = Calendar.find(@service, cal.id)
72
+ if c.title == cal.title
73
+ successful
74
+ else
75
+ failed "#{c.title} not equal to #{cal.title}"
76
+ end
77
+
78
+ puts "4. Delete Calendar"
79
+ if cal.delete and not cal.title
80
+ successful
81
+ else
82
+ failed
83
+ end
84
+ end
85
+
86
+ def event_test
87
+ puts "---Starting Event Test---"
88
+
89
+ puts "1. Create Event"
90
+ event = Event.new(@service.calendars[0])
91
+ event.title = "Test Event"
92
+ event.content = "Test event content"
93
+ event.start = Time.now+1800
94
+ event.end = Time.now+5400
95
+ if event.save
96
+ successful event.to_xml
97
+ else
98
+ failed
99
+ end
100
+
101
+ puts "2. Edit Event"
102
+ event.title = "Edited title"
103
+ if event.save
104
+ successful event.to_xml
105
+ else
106
+ failed
107
+ end
108
+
109
+ puts "3. Reload Event"
110
+ if event.reload
111
+ successful
112
+ end
113
+
114
+ puts "4. Find Event by id"
115
+ e = Event.find(@service.calendars[0], event.id)
116
+ if e.title == event.title
117
+ successful
118
+ else
119
+ failed "Found event doesn't match existing event"
120
+ end
121
+
122
+ puts "5. Delete Event"
123
+ if event.delete
124
+ successful
125
+ else
126
+ failed
127
+ end
128
+ end
129
+
130
+ def failed(m = nil)
131
+ puts "Test Failed"
132
+ puts m if m
133
+ exit()
134
+ end
135
+
136
+ def successful(m = nil)
137
+ puts "Test Successful"
138
+ puts m if m
139
+ end
140
+
141
+ tester
metadata ADDED
@@ -0,0 +1,62 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: h13ronim-gcal4ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.6
5
+ platform: ruby
6
+ authors:
7
+ - Mike Reich
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-09-01 00:00:00 +02:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: A full featured wrapper for interacting with the Google Calendar API
17
+ email: mike@seabourneconsulting.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - README
26
+ - CHANGELOG
27
+ - lib/gcal4ruby.rb
28
+ - lib/gcal4ruby/base.rb
29
+ - lib/gcal4ruby/service.rb
30
+ - lib/gcal4ruby/calendar.rb
31
+ - lib/gcal4ruby/event.rb
32
+ - lib/gcal4ruby/recurrence.rb
33
+ has_rdoc: true
34
+ homepage: http://gcal4ruby.rubyforge.org/
35
+ licenses: []
36
+
37
+ post_install_message:
38
+ rdoc_options: []
39
+
40
+ require_paths:
41
+ - lib
42
+ required_ruby_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "0"
47
+ version:
48
+ required_rubygems_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: "0"
53
+ version:
54
+ requirements: []
55
+
56
+ rubyforge_project: gcal4ruby
57
+ rubygems_version: 1.3.5
58
+ signing_key:
59
+ specification_version: 3
60
+ summary: A full featured wrapper for interacting with the Google Calendar API
61
+ test_files:
62
+ - test/unit.rb