google_calendar 0.3.0 → 0.3.1
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.
- data/.travis.yml +0 -1
- data/Gemfile.lock +11 -12
- data/README.rdoc +1 -1
- data/VERSION +1 -1
- data/google_calendar.gemspec +2 -2
- data/lib/google/calendar.rb +16 -3
- data/lib/google/event.rb +15 -3
- data/test/test_google_calendar.rb +17 -1
- metadata +2 -2
data/.travis.yml
CHANGED
data/Gemfile.lock
CHANGED
@@ -4,26 +4,25 @@ GEM
|
|
4
4
|
activesupport (3.2.13)
|
5
5
|
i18n (= 0.6.1)
|
6
6
|
multi_json (~> 1.0)
|
7
|
-
addressable (2.3.
|
8
|
-
bourne (1.4.0)
|
9
|
-
mocha (~> 0.13.2)
|
7
|
+
addressable (2.3.4)
|
10
8
|
i18n (0.6.1)
|
11
|
-
json (1.
|
9
|
+
json (1.8.0)
|
12
10
|
metaclass (0.0.1)
|
13
|
-
|
11
|
+
mini_portile (0.5.0)
|
12
|
+
mocha (0.14.0)
|
14
13
|
metaclass (~> 0.0.1)
|
15
|
-
multi_json (1.7.
|
16
|
-
nokogiri (1.
|
14
|
+
multi_json (1.7.7)
|
15
|
+
nokogiri (1.6.0)
|
16
|
+
mini_portile (~> 0.5.0)
|
17
17
|
rake (10.0.4)
|
18
18
|
rdoc (4.0.1)
|
19
19
|
json (~> 1.4)
|
20
|
-
shoulda (3.
|
20
|
+
shoulda (3.5.0)
|
21
21
|
shoulda-context (~> 1.0, >= 1.0.1)
|
22
|
-
shoulda-matchers (
|
23
|
-
shoulda-context (1.1.
|
24
|
-
shoulda-matchers (
|
22
|
+
shoulda-matchers (>= 1.4.1, < 3.0)
|
23
|
+
shoulda-context (1.1.2)
|
24
|
+
shoulda-matchers (2.2.0)
|
25
25
|
activesupport (>= 3.0.0)
|
26
|
-
bourne (~> 1.3)
|
27
26
|
|
28
27
|
PLATFORMS
|
29
28
|
ruby
|
data/README.rdoc
CHANGED
@@ -40,7 +40,7 @@ Note: Google requests that you set the name of your application so they can bett
|
|
40
40
|
puts cal.find_events('my search string')
|
41
41
|
|
42
42
|
|
43
|
-
Note: This is not a complete implementation of the calendar api, it just includes the features
|
43
|
+
Note: This is not a complete implementation of the calendar api, it just includes the features we needed to support our internal calendar integration.
|
44
44
|
|
45
45
|
== Contributing to google_calendar
|
46
46
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.1
|
data/google_calendar.gemspec
CHANGED
@@ -2,8 +2,8 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "google_calendar"
|
5
|
-
s.version = "0.3.
|
6
|
-
s.date = "2013-
|
5
|
+
s.version = "0.3.1"
|
6
|
+
s.date = "2013-08-23"
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
9
9
|
|
data/lib/google/calendar.rb
CHANGED
@@ -77,11 +77,19 @@ module Google
|
|
77
77
|
# an array of events if many found.
|
78
78
|
#
|
79
79
|
def find_events_in_range(start_min, start_max,options = {})
|
80
|
-
|
80
|
+
options[:max_results] ||= 25
|
81
|
+
options[:order_by] ||= 'lastmodified' # other option is 'starttime'
|
81
82
|
formatted_start_min = start_min.strftime("%Y-%m-%dT%H:%M:%S")
|
82
83
|
formatted_start_max = start_max.strftime("%Y-%m-%dT%H:%M:%S")
|
83
84
|
query = "?start-min=#{formatted_start_min}&start-max=#{formatted_start_max}&recurrence-expansion-start=#{formatted_start_min}&recurrence-expansion-end=#{formatted_start_max}"
|
84
|
-
|
85
|
+
query = "#{query}&orderby=#{options[:order_by]}&max-results=#{options[:max_results]}"
|
86
|
+
event_lookup(query)
|
87
|
+
end
|
88
|
+
|
89
|
+
def find_future_events(options={})
|
90
|
+
options[:max_results] ||= 25
|
91
|
+
options[:order_by] ||= 'lastmodified' # other option is 'starttime'
|
92
|
+
query = "?futureevents=true&orderby=#{options[:order_by]}&max-results=#{options[:max_results]}"
|
85
93
|
event_lookup(query)
|
86
94
|
end
|
87
95
|
|
@@ -213,7 +221,12 @@ module Google
|
|
213
221
|
|
214
222
|
def setup_event(event) #:nodoc:
|
215
223
|
event.calendar = self
|
216
|
-
|
224
|
+
if block_given?
|
225
|
+
yield(event)
|
226
|
+
event.title = event.title.encode(:xml => :text) if event.title
|
227
|
+
event.content = event.content.encode(:xml => :text) if event.content
|
228
|
+
event.where = event.where.encode(:xml => :text) if event.where
|
229
|
+
end
|
217
230
|
event.save
|
218
231
|
event
|
219
232
|
end
|
data/lib/google/event.rb
CHANGED
@@ -165,14 +165,26 @@ module Google
|
|
165
165
|
# Create a new event from a google 'entry' xml block.
|
166
166
|
#
|
167
167
|
def self.new_from_xml(xml, calendar) #:nodoc:
|
168
|
-
|
168
|
+
id = xml.at_xpath("gCal:uid")['value'].split('@').first
|
169
|
+
|
170
|
+
# Check if this event came from an apple program (ios, iCal, Calendar, etc)
|
171
|
+
# Id format ex: E52411E2-8DB9-4A26-AD5A-8B6104320D3C
|
172
|
+
if id.match( /[0-9A-Z]{8}-([0-9A-Z]{4}-){3}[0-9A-Z]{12}/ )
|
173
|
+
# Use the ID field instead of the UID which apple overwrites for its own purposes.
|
174
|
+
# TODO With proper testing, this should be way to parse all event id's
|
175
|
+
id = xml.at_xpath("xmlns:id").content.split('/').last
|
176
|
+
end
|
177
|
+
|
178
|
+
event_time_data = xml.at_xpath("gd:when")
|
179
|
+
|
180
|
+
Event.new(:id => id,
|
169
181
|
:calendar => calendar,
|
170
182
|
:raw_xml => xml,
|
171
183
|
:title => xml.at_xpath("xmlns:title").content,
|
172
184
|
:content => xml.at_xpath("xmlns:content").content,
|
173
185
|
:where => xml.at_xpath("gd:where")['valueString'],
|
174
|
-
:start_time => xml.at_xpath("gd:when")['startTime'],
|
175
|
-
:end_time => xml.at_xpath("gd:when")['endTime'],
|
186
|
+
:start_time => (event_time_data.nil? ? nil : xml.at_xpath("gd:when")['startTime']),
|
187
|
+
:end_time => (event_time_data.nil? ? nil : xml.at_xpath("gd:when")['endTime']),
|
176
188
|
:transparency => xml.at_xpath("gd:transparency")['value'].split('.').last,
|
177
189
|
:quickadd => (xml.at_xpath("gCal:quickadd") ? (xml.at_xpath("gCal:quickadd")['quickadd']) : nil),
|
178
190
|
:html_link => xml.at_xpath('//xmlns:link[@title="alternate" and @rel="alternate" and @type="text/html"]')['href'],
|
@@ -128,7 +128,7 @@ class TestGoogleCalendar < Test::Unit::TestCase
|
|
128
128
|
should "find events in range" do
|
129
129
|
start_min = DateTime.new(2011, 2, 1, 11, 1, 1)
|
130
130
|
start_max = DateTime.new(2011, 2, 28, 23, 59, 59)
|
131
|
-
@calendar.expects(:event_lookup).with('?start-min=2011-02-01T11:01:01&start-max=2011-02-28T23:59:59&recurrence-expansion-start=2011-02-01T11:01:01&recurrence-expansion-end=2011-02-28T23:59:59&max-results=25')
|
131
|
+
@calendar.expects(:event_lookup).with('?start-min=2011-02-01T11:01:01&start-max=2011-02-28T23:59:59&recurrence-expansion-start=2011-02-01T11:01:01&recurrence-expansion-end=2011-02-28T23:59:59&orderby=lastmodified&max-results=25')
|
132
132
|
events = @calendar.find_events_in_range(start_min, start_max)
|
133
133
|
end
|
134
134
|
|
@@ -168,6 +168,22 @@ class TestGoogleCalendar < Test::Unit::TestCase
|
|
168
168
|
assert_equal event.content, "movie tomorrow 23:00 at AMC Van Ness"
|
169
169
|
end
|
170
170
|
|
171
|
+
should "format create event with ampersand correctly" do
|
172
|
+
@http_mock.stubs(:body).returns( get_mock_body("create_event.xml") )
|
173
|
+
|
174
|
+
event = @calendar.create_event do |e|
|
175
|
+
e.title = 'New Event with &'
|
176
|
+
e.start_time = Time.now + (60 * 60)
|
177
|
+
e.end_time = Time.now + (60 * 60 * 2)
|
178
|
+
e.content = "A new event with &"
|
179
|
+
e.where = "Joe's House & Backyard"
|
180
|
+
end
|
181
|
+
|
182
|
+
assert_equal event.title, 'New Event with &'
|
183
|
+
assert_equal event.content, 'A new event with &'
|
184
|
+
assert_equal event.where, "Joe's House & Backyard"
|
185
|
+
end
|
186
|
+
|
171
187
|
should "format to_s properly" do
|
172
188
|
@http_mock.stubs(:body).returns( get_mock_body("query_events.xml") )
|
173
189
|
event = @calendar.find_events('Test')
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google_calendar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-08-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|