miguelbaldi-gcalcliapp 0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. data/LICENSE +0 -0
  2. data/README +11 -0
  3. data/VERSION.yml +0 -0
  4. data/gcalcliapp +56 -0
  5. data/lib/gcalcore.rb +119 -0
  6. 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-gcalcliapp
3
+ version: !ruby/object:Gem::Version
4
+ version: "0.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
+