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.
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-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
+