miguelbaldi-grit 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/LICENSE +0 -0
- data/README +11 -0
- data/VERSION.yml +0 -0
- data/gcalcliapp +56 -0
- data/lib/gcalcore.rb +119 -0
- metadata +89 -0
data/LICENSE
ADDED
File without changes
|
data/README
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
Para utilizar o cliente google calendar, primeiro você deve instalar suas depend�ncias:
|
2
|
+
SimpleConsole, execute isso no terminal
|
3
|
+
sudo gem install -p http://192.168.160.3:8080 simpleconsole --remote
|
4
|
+
RiCal
|
5
|
+
sudo gem install -p http://192.168.160.3:8080 ri_cal --remote
|
6
|
+
TzInfo
|
7
|
+
sudo gem install -p http://192.168.160.3:8080 tzinfo --remote
|
8
|
+
|
9
|
+
Depois de instalar as dependencias, basta rodar o programa desta forma:
|
10
|
+
ruby gcalcliapp
|
11
|
+
Desta forma ele deve mostra a mensagem de help
|
data/VERSION.yml
ADDED
File without changes
|
data/gcalcliapp
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
#!/usr/bin/ruby -W0
|
2
|
+
#!/usr/bin/env ruby -W0
|
3
|
+
require "rubygems"
|
4
|
+
require "simpleconsole"
|
5
|
+
#require File.dirname(__FILE__) + "/../"
|
6
|
+
require "lib/gcalcore"
|
7
|
+
include GCalendarReader
|
8
|
+
class Controller < SimpleConsole::Controller
|
9
|
+
params :text => {:c => :calendar_url},
|
10
|
+
:string => {:h => :proxy_host, :p => :proxy_port, :u => :proxy_user, :w => :proxy_pass},
|
11
|
+
:int => {:n => :number_days}
|
12
|
+
def default
|
13
|
+
@return_text = "gcalcliapp Usage: ruby gcalcliapp [action] [--options]\n"
|
14
|
+
@return_text = @return_text + "Available actions\n"
|
15
|
+
@return_text = @return_text + " query Search given calendar forward -n number_days\n"
|
16
|
+
@return_text = @return_text + "Available options\n"
|
17
|
+
@return_text = @return_text + " -c, --calendar_url Google calendar URL\n"
|
18
|
+
@return_text = @return_text + " -h, --proxy_host Proxy host\n"
|
19
|
+
@return_text = @return_text + " -p, --proxy_port Proxy port\n"
|
20
|
+
@return_text = @return_text + " -u, --proxy_user Proxy username\n"
|
21
|
+
@return_text = @return_text + " -w, --proxy_pass Proxy password\n"
|
22
|
+
@return_text = @return_text + " -n, --number_days Number of days forward\n"
|
23
|
+
@return_text = @return_text + " calendar_url paramter is mandatory!\n"
|
24
|
+
end
|
25
|
+
def query
|
26
|
+
@return_text = ""
|
27
|
+
@calendar_url = params[:calendar_url]
|
28
|
+
@proxy_host = params[:proxy_host]
|
29
|
+
@proxy_port = params[:proxy_port]
|
30
|
+
@proxy_user = params[:proxy_user]
|
31
|
+
@proxy_pass = params[:proxy_pass]
|
32
|
+
@number_days = params[:number_days]
|
33
|
+
unless @calendar_url.nil? || @number_days.nil?
|
34
|
+
nrb_days_in_sec = @number_days * (60 * 60 * 24)
|
35
|
+
cal = Core.new(@calendar_url,@proxy_host,@proxy_port,@proxy_user,@proxy_pass,nrb_days_in_sec)
|
36
|
+
events = cal.events_in_range(DateTime.now, DateTime.now + nrb_days_in_sec)
|
37
|
+
events.collect do |event|
|
38
|
+
@return_text = @return_text + "#{event.start_time.strftime("%b %d %Y %H:%M") } - #{event.summary}\n"
|
39
|
+
end
|
40
|
+
else
|
41
|
+
@return_text = "--calendar_url and --number_days parameters must not be empty!"
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
class View < SimpleConsole::View
|
48
|
+
def default
|
49
|
+
puts @return_text
|
50
|
+
end
|
51
|
+
def query
|
52
|
+
puts @return_text
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
SimpleConsole::Application.run(ARGV, Controller, View)
|
data/lib/gcalcore.rb
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'net/http'
|
3
|
+
require 'uri'
|
4
|
+
require 'time'
|
5
|
+
require 'ri_cal'
|
6
|
+
require "tzinfo"
|
7
|
+
|
8
|
+
# include CalendarReader
|
9
|
+
# g = Calendar.new('http://www.google.com/calendar/ical/example%40gmail.com/public/basic.ics')
|
10
|
+
module GCalendarReader
|
11
|
+
class Core
|
12
|
+
attr_accessor :url, :ical, :xml, :product_id, :version, :scale, :method, :time_zone_name, :time_zone_offset, :events,
|
13
|
+
:proxy_host, :proxy_port, :proxy_user, :proxy_pass, :limit_date
|
14
|
+
|
15
|
+
def initialize(cal_url, proxy_host, proxy_port, proxy_user, proxy_pass, nro_dias)
|
16
|
+
self.events = []
|
17
|
+
unless cal_url.empty?
|
18
|
+
self.url = cal_url
|
19
|
+
self.proxy_host=proxy_host
|
20
|
+
self.proxy_port=proxy_port
|
21
|
+
self.proxy_user=proxy_user
|
22
|
+
self.proxy_pass=proxy_pass
|
23
|
+
self.limit_date=Time.now + nro_dias
|
24
|
+
self.parse!
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def add_event(event, sortit=true)
|
29
|
+
self.events = [] unless self.events.is_a?(Array)
|
30
|
+
self.events << event
|
31
|
+
@events.sort! {|a,b| a.start_time <=> b.start_time } if sortit
|
32
|
+
event
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.parse(cal_url)
|
36
|
+
self.new(cal_url)
|
37
|
+
end
|
38
|
+
|
39
|
+
def parse!
|
40
|
+
self.url =~ /\.ics(?:\?.+)?$/ ? self.parse_from_ical! : self.parse_from_xml!
|
41
|
+
end
|
42
|
+
def parse
|
43
|
+
self.dup.parse!
|
44
|
+
end
|
45
|
+
|
46
|
+
def parse_from_xml!
|
47
|
+
return false # THIS IS NOT IMPLEMENTED YET!!
|
48
|
+
end
|
49
|
+
def parse_from_xml
|
50
|
+
self.dup.parse_from_xml!
|
51
|
+
end
|
52
|
+
|
53
|
+
def parse_from_ical!
|
54
|
+
rawdata = self.calendar_raw_data
|
55
|
+
cals = RiCal.parse_string(rawdata)
|
56
|
+
cal = cals.first
|
57
|
+
cal.events.each do |event|
|
58
|
+
unless event.occurrences({:before => self.limit_date}).size > 1
|
59
|
+
self.add_event(event, false) # (disable sorting until done)
|
60
|
+
else
|
61
|
+
event.occurrences({:before => self.limit_date}).each do |ev|
|
62
|
+
self.add_event(ev, false) # (disable sorting until done)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
@events.reject! {|e| e.start_time.nil?}
|
67
|
+
@events.sort! {|a,b| a.start_time <=> b.start_time }
|
68
|
+
end
|
69
|
+
def parse_from_ical
|
70
|
+
self.dup.parse_from_ical
|
71
|
+
end
|
72
|
+
|
73
|
+
def source_format
|
74
|
+
self.ical ? 'ical' : (self.xml ? 'xml' : nil)
|
75
|
+
end
|
76
|
+
|
77
|
+
def future_events
|
78
|
+
t = DateTime.now
|
79
|
+
events.inject([]) {|future,e| e.start_time > t ? future.push(e) : future}
|
80
|
+
end
|
81
|
+
|
82
|
+
def past_events
|
83
|
+
t = DateTime.now
|
84
|
+
events.inject([]) {|past,e| e.start_time < t ? past.push(e) : past}
|
85
|
+
end
|
86
|
+
|
87
|
+
def events_in_range(start_time, end_time)
|
88
|
+
events.inject([]) {|in_range,e| e.start_time < end_time && e.finish_time > start_time ? in_range.push(e) : in_range}
|
89
|
+
end
|
90
|
+
|
91
|
+
def calendar_raw_data
|
92
|
+
# If you need to use a proxy:
|
93
|
+
unless self.proxy_host.nil?
|
94
|
+
response = Net::HTTP::Proxy(self.proxy_host, self.proxy_port,
|
95
|
+
self.proxy_user, self.proxy_pass).get_response(URI.parse(self.url))
|
96
|
+
case response
|
97
|
+
when Net::HTTPSuccess, Net::HTTPRedirection
|
98
|
+
#puts "Data #{data}"
|
99
|
+
return response.body
|
100
|
+
else
|
101
|
+
response.error!
|
102
|
+
return nil
|
103
|
+
end
|
104
|
+
else
|
105
|
+
response = Net::HTTP.get_response(URI.parse(self.url))
|
106
|
+
case response
|
107
|
+
when Net::HTTPSuccess, Net::HTTPRedirection
|
108
|
+
#puts "Data #{data}"
|
109
|
+
return response.body
|
110
|
+
else
|
111
|
+
response.error!
|
112
|
+
return nil
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
metadata
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: miguelbaldi-grit
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: "1"
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Miguel Baldi
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-09-23 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: simpleconsole
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.1.1
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: ri_cal
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.8.4
|
34
|
+
version:
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: tzinfo
|
37
|
+
type: :runtime
|
38
|
+
version_requirement:
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 0.3.13
|
44
|
+
version:
|
45
|
+
description: GCalCli is a client for Google Calendar service.
|
46
|
+
email: miguel.horlle@gmailcom
|
47
|
+
executables: []
|
48
|
+
|
49
|
+
extensions: []
|
50
|
+
|
51
|
+
extra_rdoc_files:
|
52
|
+
- README
|
53
|
+
- LICENSE
|
54
|
+
files:
|
55
|
+
- README
|
56
|
+
- VERSION.yml
|
57
|
+
- gcalcliapp
|
58
|
+
- lib/gcalcore.rb
|
59
|
+
- LICENSE
|
60
|
+
has_rdoc: false
|
61
|
+
homepage: http://github.com/miguelbaldi/ruby-gcalendar-client
|
62
|
+
licenses:
|
63
|
+
post_install_message:
|
64
|
+
rdoc_options:
|
65
|
+
- --inline-source
|
66
|
+
- --charset=UTF-8
|
67
|
+
require_paths:
|
68
|
+
- lib
|
69
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: "0"
|
74
|
+
version:
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: "0"
|
80
|
+
version:
|
81
|
+
requirements: []
|
82
|
+
|
83
|
+
rubyforge_project:
|
84
|
+
rubygems_version: 1.3.5
|
85
|
+
signing_key:
|
86
|
+
specification_version: 2
|
87
|
+
summary: GCalCli is a client for Google Calendar service.
|
88
|
+
test_files: []
|
89
|
+
|