ical2gcal 0.4.2 → 0.5.0
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/Gemfile +1 -3
- data/README.rdoc +9 -18
- data/Rakefile +1 -3
- data/VERSION +1 -1
- data/ical2gcal.gemspec +9 -21
- data/lib/google.rb +105 -75
- data/lib/ical2gcal.rb +30 -26
- data/spec/ical2gcal_spec.rb +0 -23
- data/spec/ics/list_spec.rb +2 -2
- metadata +49 -48
data/Gemfile
CHANGED
@@ -8,9 +8,7 @@ source "http://rubygems.org"
|
|
8
8
|
# Add dependencies to develop your gem here.
|
9
9
|
# Include everything needed to run rake, tests, features, etc.
|
10
10
|
gem 'ri_cal'
|
11
|
-
gem '
|
12
|
-
gem 'simple-rss'
|
13
|
-
gem 'pit'
|
11
|
+
gem 'google-api-client'
|
14
12
|
|
15
13
|
group :development do
|
16
14
|
gem "rspec"
|
data/README.rdoc
CHANGED
@@ -12,33 +12,24 @@ sync ics(es) to google calendar
|
|
12
12
|
== Requirements
|
13
13
|
|
14
14
|
* PC :-)
|
15
|
-
* Ruby ( tested with
|
16
|
-
* ri_cal
|
17
|
-
*
|
18
|
-
* simple-rss http://simple-rss.rubyforge.org/
|
19
|
-
* pit http://coderepos.org/share/browser/lang/ruby/pit
|
15
|
+
* Ruby ( tested with CRuby 1.9.3)
|
16
|
+
* ri_cal http://ri-cal.rubyforge.org/
|
17
|
+
* google-api-ruby-client https://github.com/google/google-api-ruby-client
|
20
18
|
|
21
19
|
== How to use
|
22
20
|
|
23
21
|
1. Install Ruby
|
24
22
|
2. `gem install ical2gcal`
|
25
|
-
3.
|
26
|
-
4. Prepare calendar that you like to import to
|
23
|
+
3. open Your Google API Console and setup your App and Credential, and download JSON and put as 'client_secrets.json' ( defined in ruby-client )
|
24
|
+
4. Prepare calendar that you like to import to, and note that id
|
27
25
|
5. type `ical2gcal --help`
|
28
26
|
|
29
|
-
|
27
|
+
see https://developers.google.com/google-apps/calendar/firstapp
|
30
28
|
|
31
|
-
|
32
|
-
2. type
|
29
|
+
== Incompatible Changes ( v0.5 )
|
33
30
|
|
34
|
-
|
35
|
-
|
36
|
-
ex)
|
37
|
-
|
38
|
-
username: `google account'
|
39
|
-
password: PASSWORD
|
40
|
-
calendar: ( optional below )
|
41
|
-
name: `calendar name above'
|
31
|
+
* How to specify calendar is changed to ID from name
|
32
|
+
* How to save the authentication information is changed to Credential from Pit
|
42
33
|
|
43
34
|
== Contributing to ical2gcal
|
44
35
|
|
data/Rakefile
CHANGED
@@ -26,9 +26,7 @@ Jeweler::Tasks.new do |gem|
|
|
26
26
|
# and development dependencies are only needed for development (ie running rake tasks, tests, etc)
|
27
27
|
|
28
28
|
gem.add_runtime_dependency 'ri_cal'
|
29
|
-
gem.add_runtime_dependency '
|
30
|
-
gem.add_runtime_dependency 'simple-rss'
|
31
|
-
gem.add_runtime_dependency 'pit'
|
29
|
+
gem.add_runtime_dependency 'google-api-client'
|
32
30
|
|
33
31
|
# gem.add_development_dependency 'rspec', '> 1.2.3'
|
34
32
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.5.0
|
data/ical2gcal.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "ical2gcal"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.5.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["wtnabe"]
|
12
|
-
s.date = "
|
12
|
+
s.date = "2014-12-07"
|
13
13
|
s.description = "You can sync local and remote ics file(s) to google calendar"
|
14
14
|
s.email = "wtnabe@gmail.com"
|
15
15
|
s.executables = ["ical2gcal"]
|
@@ -43,7 +43,7 @@ Gem::Specification.new do |s|
|
|
43
43
|
s.homepage = "http://github.com/wtnabe/ical2gcal"
|
44
44
|
s.licenses = ["two-clause BSD"]
|
45
45
|
s.require_paths = ["lib"]
|
46
|
-
s.rubygems_version = "1.8.
|
46
|
+
s.rubygems_version = "1.8.23"
|
47
47
|
s.summary = "sync ics(es) to google calendar"
|
48
48
|
|
49
49
|
if s.respond_to? :specification_version then
|
@@ -51,47 +51,35 @@ Gem::Specification.new do |s|
|
|
51
51
|
|
52
52
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
53
53
|
s.add_runtime_dependency(%q<ri_cal>, [">= 0"])
|
54
|
-
s.add_runtime_dependency(%q<
|
55
|
-
s.add_runtime_dependency(%q<simple-rss>, [">= 0"])
|
56
|
-
s.add_runtime_dependency(%q<pit>, [">= 0"])
|
54
|
+
s.add_runtime_dependency(%q<google-api-client>, [">= 0"])
|
57
55
|
s.add_development_dependency(%q<rspec>, [">= 0"])
|
58
56
|
s.add_development_dependency(%q<bundler>, [">= 0"])
|
59
57
|
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
60
58
|
s.add_development_dependency(%q<debugger>, [">= 0"])
|
61
59
|
s.add_development_dependency(%q<simplecov>, [">= 0"])
|
62
60
|
s.add_runtime_dependency(%q<ri_cal>, [">= 0"])
|
63
|
-
s.add_runtime_dependency(%q<
|
64
|
-
s.add_runtime_dependency(%q<simple-rss>, [">= 0"])
|
65
|
-
s.add_runtime_dependency(%q<pit>, [">= 0"])
|
61
|
+
s.add_runtime_dependency(%q<google-api-client>, [">= 0"])
|
66
62
|
else
|
67
63
|
s.add_dependency(%q<ri_cal>, [">= 0"])
|
68
|
-
s.add_dependency(%q<
|
69
|
-
s.add_dependency(%q<simple-rss>, [">= 0"])
|
70
|
-
s.add_dependency(%q<pit>, [">= 0"])
|
64
|
+
s.add_dependency(%q<google-api-client>, [">= 0"])
|
71
65
|
s.add_dependency(%q<rspec>, [">= 0"])
|
72
66
|
s.add_dependency(%q<bundler>, [">= 0"])
|
73
67
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
74
68
|
s.add_dependency(%q<debugger>, [">= 0"])
|
75
69
|
s.add_dependency(%q<simplecov>, [">= 0"])
|
76
70
|
s.add_dependency(%q<ri_cal>, [">= 0"])
|
77
|
-
s.add_dependency(%q<
|
78
|
-
s.add_dependency(%q<simple-rss>, [">= 0"])
|
79
|
-
s.add_dependency(%q<pit>, [">= 0"])
|
71
|
+
s.add_dependency(%q<google-api-client>, [">= 0"])
|
80
72
|
end
|
81
73
|
else
|
82
74
|
s.add_dependency(%q<ri_cal>, [">= 0"])
|
83
|
-
s.add_dependency(%q<
|
84
|
-
s.add_dependency(%q<simple-rss>, [">= 0"])
|
85
|
-
s.add_dependency(%q<pit>, [">= 0"])
|
75
|
+
s.add_dependency(%q<google-api-client>, [">= 0"])
|
86
76
|
s.add_dependency(%q<rspec>, [">= 0"])
|
87
77
|
s.add_dependency(%q<bundler>, [">= 0"])
|
88
78
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
89
79
|
s.add_dependency(%q<debugger>, [">= 0"])
|
90
80
|
s.add_dependency(%q<simplecov>, [">= 0"])
|
91
81
|
s.add_dependency(%q<ri_cal>, [">= 0"])
|
92
|
-
s.add_dependency(%q<
|
93
|
-
s.add_dependency(%q<simple-rss>, [">= 0"])
|
94
|
-
s.add_dependency(%q<pit>, [">= 0"])
|
82
|
+
s.add_dependency(%q<google-api-client>, [">= 0"])
|
95
83
|
end
|
96
84
|
end
|
97
85
|
|
data/lib/google.rb
CHANGED
@@ -1,115 +1,145 @@
|
|
1
1
|
# -*- mode: ruby; coding: utf-8 -*-
|
2
2
|
|
3
|
-
require '
|
4
|
-
require '
|
3
|
+
require 'google/api_client'
|
4
|
+
require 'google/api_client/client_secrets'
|
5
|
+
require 'google/api_client/auth/installed_app'
|
6
|
+
require 'google/api_client/auth/file_storage'
|
5
7
|
|
6
8
|
module Ical2gcal
|
7
9
|
class Google
|
8
10
|
|
9
|
-
|
10
|
-
@service = nil
|
11
|
-
@opts = {
|
12
|
-
'username' => nil,
|
13
|
-
'password' => nil,
|
14
|
-
'calendar' => nil
|
15
|
-
}.merge( opts )
|
16
|
-
@calendar = nil
|
17
|
-
@events = nil
|
18
|
-
end
|
11
|
+
class CalendarIdNotDefined < StandardError; end
|
19
12
|
|
20
13
|
#
|
21
|
-
# [
|
14
|
+
# [param] String calendar_id
|
15
|
+
# [param] String store
|
22
16
|
#
|
23
|
-
def
|
24
|
-
|
25
|
-
@service = GoogleCalendar::Service.new( @opts['username'],
|
26
|
-
@opts['password'] )
|
27
|
-
end
|
17
|
+
def initialize(calendar_id, store = nil)
|
18
|
+
raise CalendarIdNotDefined.new unless calendar_id
|
28
19
|
|
29
|
-
@
|
20
|
+
@calendar_id = nil
|
21
|
+
@calendar = nil # Calendar API
|
22
|
+
@client = nil # Google API Client
|
23
|
+
@events = nil
|
24
|
+
|
25
|
+
init_and_auth_calendar(calendar_id, store)
|
30
26
|
end
|
27
|
+
attr_reader :client, :calendar, :calendar_id
|
31
28
|
|
32
29
|
#
|
33
|
-
# [
|
30
|
+
# [param] String calendar_id
|
31
|
+
# [param] String dir
|
32
|
+
# [return] Object Calendar API
|
34
33
|
#
|
35
|
-
def
|
36
|
-
|
34
|
+
def init_and_auth_calendar(calendar_id, store)
|
35
|
+
@client = ::Google::APIClient.new(
|
36
|
+
:application_name => :ical2gcal,
|
37
|
+
:application_version => Version)
|
38
|
+
|
39
|
+
credential = ::Google::APIClient::FileStorage.new(store)
|
40
|
+
secrets = ::Google::APIClient::ClientSecrets.load(File.dirname(store))
|
41
|
+
|
42
|
+
if credential.authorization.nil?
|
43
|
+
flow = ::Google::APIClient::InstalledAppFlow.new(
|
44
|
+
:client_id => secrets.client_id,
|
45
|
+
:client_secret => secrets.client_secret,
|
46
|
+
:scope => 'https://www.googleapis.com/auth/calendar')
|
47
|
+
client.authorization = flow.authorize
|
48
|
+
credential.write_credentials(client.authorization)
|
49
|
+
else
|
50
|
+
client.authorization = credential.authorization
|
51
|
+
end
|
52
|
+
|
53
|
+
@calendar_id = calendar_id
|
54
|
+
@calendar = client.discovered_api('calendar', 'v3')
|
37
55
|
end
|
38
56
|
|
39
57
|
#
|
40
|
-
# [
|
58
|
+
# [param] RiCal::Component::Event
|
59
|
+
# [return] String
|
41
60
|
#
|
42
|
-
def
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
61
|
+
def create_event( event )
|
62
|
+
body = {
|
63
|
+
:summary => event.summary,
|
64
|
+
:description => event.description,
|
65
|
+
:location => event.location
|
66
|
+
}
|
67
|
+
|
68
|
+
if all_day?(event)
|
69
|
+
body.merge!(
|
70
|
+
:start => {:date => event.dtstart.to_s},
|
71
|
+
:end => {:date => event.dtend.to_s})
|
72
|
+
else
|
73
|
+
body.merge!(
|
74
|
+
:start => {:dateTime => localtime(event.start_time)},
|
75
|
+
:end => {:dateTime => localtime((event.respond_to? :end_time) ? event.end_time : event.start_time)})
|
48
76
|
end
|
49
77
|
|
50
|
-
|
78
|
+
client.execute(
|
79
|
+
:api_method => calendar.events.insert,
|
80
|
+
:parameters => {:calendarId => calendar_id},
|
81
|
+
:headers => {'Content-Type' => 'application/json'},
|
82
|
+
:body => JSON.dump(body)).response.body
|
51
83
|
end
|
52
84
|
|
53
85
|
#
|
54
|
-
# [
|
86
|
+
# [param] Rical::Component::Event event
|
87
|
+
# [return] Boolean
|
55
88
|
#
|
56
|
-
def
|
57
|
-
|
89
|
+
def all_day?(event)
|
90
|
+
event.dtstart.class == Date
|
58
91
|
end
|
59
92
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
Time.parse(event.end_time.to_s.sub(/\+.*/, ''))
|
69
|
-
else
|
70
|
-
Time.parse(event.start_time.to_s.sub(/\+.*/, ''))
|
71
|
-
end
|
72
|
-
e.save!
|
93
|
+
#
|
94
|
+
# create Time object with local timezone
|
95
|
+
#
|
96
|
+
# [param] String datetime
|
97
|
+
# [return] String
|
98
|
+
#
|
99
|
+
def localtime(datetime)
|
100
|
+
Time.parse(datetime.iso8601.sub(/(\+.*)\z/, '')).iso8601
|
73
101
|
end
|
74
102
|
|
75
103
|
def remove_all_events
|
76
|
-
|
77
|
-
|
78
|
-
omni_retry = max_retry
|
79
|
-
|
80
|
-
while calendar.events.size > 0 and omni_retry > 0
|
81
|
-
calendar.events.each { |e|
|
82
|
-
remove_one_event(e, max_retry)
|
83
|
-
}
|
84
|
-
omni_retry -= 1
|
85
|
-
|
86
|
-
sleep 1
|
87
|
-
end
|
104
|
+
all_events.each {|e| remove_one_event(e)}
|
88
105
|
end
|
89
106
|
|
90
107
|
#
|
91
108
|
# remove one event with retry
|
92
109
|
#
|
93
110
|
# [param] GoogleCalendar::Event
|
94
|
-
#
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
end
|
111
|
+
#
|
112
|
+
def remove_one_event(event)
|
113
|
+
client.execute(
|
114
|
+
:api_method => calendar.events.delete,
|
115
|
+
:parameters => {:calendarId => calendar_id, :eventId => event['id']})
|
116
|
+
end
|
117
|
+
|
118
|
+
#
|
119
|
+
# [return] Array
|
120
|
+
#
|
121
|
+
def all_events
|
122
|
+
result = events_request
|
123
|
+
events = result['items']
|
124
|
+
while ( result['nextPageToken'] )
|
125
|
+
result = events_request(result['nextPageToken'])
|
126
|
+
events += result['items']
|
111
127
|
end
|
128
|
+
|
129
|
+
events
|
112
130
|
end
|
113
131
|
|
132
|
+
#
|
133
|
+
# [param] String next_page_token
|
134
|
+
# [return] Hash
|
135
|
+
#
|
136
|
+
def events_request(next_page_token = nil)
|
137
|
+
params = {:calendarId => calendar_id}
|
138
|
+
params.merge!(:pageToken => next_page_token) if next_page_token
|
139
|
+
|
140
|
+
JSON.parse(client.execute(
|
141
|
+
:api_method => calendar.events.list,
|
142
|
+
:parameters => params).response.body)
|
143
|
+
end
|
114
144
|
end
|
115
145
|
end
|
data/lib/ical2gcal.rb
CHANGED
@@ -3,28 +3,40 @@ require File.dirname( __FILE__ ) + '/ics'
|
|
3
3
|
require File.dirname( __FILE__ ) + '/google'
|
4
4
|
|
5
5
|
require 'optparse'
|
6
|
-
require 'pit'
|
7
6
|
|
8
7
|
Version = open(File.dirname(__FILE__) + '/../VERSION').read
|
9
8
|
|
10
9
|
module Ical2gcal
|
11
|
-
class MissingPitConfigOfGoogleAccount < StandardError; end
|
12
|
-
|
13
10
|
class App
|
14
11
|
def initialize
|
15
|
-
@ics
|
16
|
-
@list
|
17
|
-
@calendars
|
18
|
-
@target
|
12
|
+
@ics = nil
|
13
|
+
@list = nil
|
14
|
+
@calendars = nil
|
15
|
+
@target = nil
|
16
|
+
@credential = nil
|
17
|
+
|
18
|
+
set_credential(Dir.pwd)
|
19
|
+
end
|
20
|
+
|
21
|
+
#
|
22
|
+
# [param] String path
|
23
|
+
# [return] String
|
24
|
+
#
|
25
|
+
def set_credential(path)
|
26
|
+
@credential = if File.directory?(path)
|
27
|
+
File.join(path, '.ical2gcal_credential')
|
28
|
+
else
|
29
|
+
path
|
30
|
+
end
|
19
31
|
end
|
20
32
|
|
21
33
|
def run
|
22
34
|
opts.parse( ARGV )
|
35
|
+
unless @target
|
36
|
+
puts opts.help
|
37
|
+
exit
|
38
|
+
end
|
23
39
|
|
24
|
-
conf = pit_get_google
|
25
|
-
conf.merge!( {'calendar' => {'name' => @target}} ) if @target
|
26
|
-
g = Ical2gcal::Google.new( conf )
|
27
|
-
g.remove_all_events
|
28
40
|
if calendars
|
29
41
|
cals = case calendars
|
30
42
|
when Array
|
@@ -32,6 +44,8 @@ module Ical2gcal
|
|
32
44
|
else
|
33
45
|
[calendars]
|
34
46
|
end
|
47
|
+
g = Ical2gcal::Google.new(@target, @credential)
|
48
|
+
g.remove_all_events
|
35
49
|
cals.each { |c|
|
36
50
|
Ical2gcal::Ics::Events.new( c ).each { |e|
|
37
51
|
g.create_event( e )
|
@@ -42,19 +56,6 @@ module Ical2gcal
|
|
42
56
|
end
|
43
57
|
end
|
44
58
|
|
45
|
-
#
|
46
|
-
# [return] Hash
|
47
|
-
#
|
48
|
-
def pit_get_google
|
49
|
-
info = ::Pit.get('google')
|
50
|
-
|
51
|
-
if info.size > 0
|
52
|
-
info
|
53
|
-
else
|
54
|
-
raise MissingPitConfigOfGoogleAccount, 'execute "pit set google"'
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
59
|
#
|
59
60
|
# [return] Array
|
60
61
|
#
|
@@ -75,15 +76,18 @@ module Ical2gcal
|
|
75
76
|
#
|
76
77
|
def opts
|
77
78
|
OptionParser.new do |opt|
|
78
|
-
opt.on( '-c', '--calendar-
|
79
|
+
opt.on( '-c', '--calendar-id ID' ) { |c|
|
79
80
|
@target = c
|
80
81
|
}
|
81
82
|
opt.on( '-i', '--ics URI' ) { |i|
|
82
83
|
@ics = i
|
83
84
|
}
|
84
|
-
opt.on( '-l', '--calendar-list' ) { |l|
|
85
|
+
opt.on( '-l', '--calendar-list LIST' ) { |l|
|
85
86
|
@list = l
|
86
87
|
}
|
88
|
+
opt.on( '-s', '--credential-store STORE' ) { |s|
|
89
|
+
set_credential(s)
|
90
|
+
}
|
87
91
|
end
|
88
92
|
end
|
89
93
|
end
|
data/spec/ical2gcal_spec.rb
CHANGED
@@ -1,27 +1,4 @@
|
|
1
1
|
require File.dirname(__FILE__) + "/spec_helper"
|
2
2
|
|
3
3
|
describe Ical2gcal::App do
|
4
|
-
describe '#pit_get_google' do
|
5
|
-
context 'has google conf' do
|
6
|
-
before {
|
7
|
-
Pit.stub(:get) { {'username' => 'foo'} }
|
8
|
-
}
|
9
|
-
subject {
|
10
|
-
Ical2gcal::App.new.pit_get_google.class
|
11
|
-
}
|
12
|
-
it {
|
13
|
-
should == Hash
|
14
|
-
}
|
15
|
-
end
|
16
|
-
context 'doen\'t have google conf' do
|
17
|
-
before {
|
18
|
-
Pit.stub(:get) { {} }
|
19
|
-
}
|
20
|
-
it {
|
21
|
-
expect{
|
22
|
-
Ical2gcal::App.new.pit_get_google.class
|
23
|
-
}.to raise_error(Ical2gcal::MissingPitConfigOfGoogleAccount)
|
24
|
-
}
|
25
|
-
end
|
26
|
-
end
|
27
4
|
end
|
data/spec/ics/list_spec.rb
CHANGED
@@ -48,12 +48,12 @@ describe Ical2gcal::Ics::List do
|
|
48
48
|
describe 'with_scheme?' do
|
49
49
|
context 'localfile' do
|
50
50
|
it {
|
51
|
-
Ical2gcal::Ics::List.new( ICS_FILE ).with_scheme?.should
|
51
|
+
Ical2gcal::Ics::List.new( ICS_FILE ).with_scheme?.should == false
|
52
52
|
}
|
53
53
|
end
|
54
54
|
context 'uri' do
|
55
55
|
it {
|
56
|
-
Ical2gcal::Ics::List.new( JAPANESE_HOLIDAYS ).with_scheme?.should
|
56
|
+
Ical2gcal::Ics::List.new( JAPANESE_HOLIDAYS ).with_scheme?.should == true
|
57
57
|
}
|
58
58
|
end
|
59
59
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ical2gcal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-12-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ri_cal
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,21 +21,15 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
25
|
-
- !ruby/object:Gem::Dependency
|
26
|
-
name: gcalapi
|
27
|
-
requirement: &13537920 !ruby/object:Gem::Requirement
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
28
25
|
none: false
|
29
26
|
requirements:
|
30
27
|
- - ! '>='
|
31
28
|
- !ruby/object:Gem::Version
|
32
29
|
version: '0'
|
33
|
-
type: :runtime
|
34
|
-
prerelease: false
|
35
|
-
version_requirements: *13537920
|
36
30
|
- !ruby/object:Gem::Dependency
|
37
|
-
name:
|
38
|
-
requirement:
|
31
|
+
name: google-api-client
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
39
33
|
none: false
|
40
34
|
requirements:
|
41
35
|
- - ! '>='
|
@@ -43,21 +37,15 @@ dependencies:
|
|
43
37
|
version: '0'
|
44
38
|
type: :runtime
|
45
39
|
prerelease: false
|
46
|
-
version_requirements:
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: pit
|
49
|
-
requirement: &13553160 !ruby/object:Gem::Requirement
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
41
|
none: false
|
51
42
|
requirements:
|
52
43
|
- - ! '>='
|
53
44
|
- !ruby/object:Gem::Version
|
54
45
|
version: '0'
|
55
|
-
type: :runtime
|
56
|
-
prerelease: false
|
57
|
-
version_requirements: *13553160
|
58
46
|
- !ruby/object:Gem::Dependency
|
59
47
|
name: rspec
|
60
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
61
49
|
none: false
|
62
50
|
requirements:
|
63
51
|
- - ! '>='
|
@@ -65,10 +53,15 @@ dependencies:
|
|
65
53
|
version: '0'
|
66
54
|
type: :development
|
67
55
|
prerelease: false
|
68
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
69
62
|
- !ruby/object:Gem::Dependency
|
70
63
|
name: bundler
|
71
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
72
65
|
none: false
|
73
66
|
requirements:
|
74
67
|
- - ! '>='
|
@@ -76,10 +69,15 @@ dependencies:
|
|
76
69
|
version: '0'
|
77
70
|
type: :development
|
78
71
|
prerelease: false
|
79
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
80
78
|
- !ruby/object:Gem::Dependency
|
81
79
|
name: jeweler
|
82
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
83
81
|
none: false
|
84
82
|
requirements:
|
85
83
|
- - ! '>='
|
@@ -87,10 +85,15 @@ dependencies:
|
|
87
85
|
version: '0'
|
88
86
|
type: :development
|
89
87
|
prerelease: false
|
90
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
91
94
|
- !ruby/object:Gem::Dependency
|
92
95
|
name: debugger
|
93
|
-
requirement:
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
94
97
|
none: false
|
95
98
|
requirements:
|
96
99
|
- - ! '>='
|
@@ -98,10 +101,15 @@ dependencies:
|
|
98
101
|
version: '0'
|
99
102
|
type: :development
|
100
103
|
prerelease: false
|
101
|
-
version_requirements:
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
102
110
|
- !ruby/object:Gem::Dependency
|
103
111
|
name: simplecov
|
104
|
-
requirement:
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
105
113
|
none: false
|
106
114
|
requirements:
|
107
115
|
- - ! '>='
|
@@ -109,10 +117,15 @@ dependencies:
|
|
109
117
|
version: '0'
|
110
118
|
type: :development
|
111
119
|
prerelease: false
|
112
|
-
version_requirements:
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
113
126
|
- !ruby/object:Gem::Dependency
|
114
127
|
name: ri_cal
|
115
|
-
requirement:
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
116
129
|
none: false
|
117
130
|
requirements:
|
118
131
|
- - ! '>='
|
@@ -120,21 +133,15 @@ dependencies:
|
|
120
133
|
version: '0'
|
121
134
|
type: :runtime
|
122
135
|
prerelease: false
|
123
|
-
version_requirements:
|
124
|
-
- !ruby/object:Gem::Dependency
|
125
|
-
name: gcalapi
|
126
|
-
requirement: &13561320 !ruby/object:Gem::Requirement
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
127
137
|
none: false
|
128
138
|
requirements:
|
129
139
|
- - ! '>='
|
130
140
|
- !ruby/object:Gem::Version
|
131
141
|
version: '0'
|
132
|
-
type: :runtime
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: *13561320
|
135
142
|
- !ruby/object:Gem::Dependency
|
136
|
-
name:
|
137
|
-
requirement:
|
143
|
+
name: google-api-client
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
138
145
|
none: false
|
139
146
|
requirements:
|
140
147
|
- - ! '>='
|
@@ -142,18 +149,12 @@ dependencies:
|
|
142
149
|
version: '0'
|
143
150
|
type: :runtime
|
144
151
|
prerelease: false
|
145
|
-
version_requirements:
|
146
|
-
- !ruby/object:Gem::Dependency
|
147
|
-
name: pit
|
148
|
-
requirement: &13560160 !ruby/object:Gem::Requirement
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
153
|
none: false
|
150
154
|
requirements:
|
151
155
|
- - ! '>='
|
152
156
|
- !ruby/object:Gem::Version
|
153
157
|
version: '0'
|
154
|
-
type: :runtime
|
155
|
-
prerelease: false
|
156
|
-
version_requirements: *13560160
|
157
158
|
description: You can sync local and remote ics file(s) to google calendar
|
158
159
|
email: wtnabe@gmail.com
|
159
160
|
executables:
|
@@ -199,7 +200,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
199
200
|
version: '0'
|
200
201
|
segments:
|
201
202
|
- 0
|
202
|
-
hash:
|
203
|
+
hash: 3072721261050515473
|
203
204
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
204
205
|
none: false
|
205
206
|
requirements:
|
@@ -208,7 +209,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
208
209
|
version: '0'
|
209
210
|
requirements: []
|
210
211
|
rubyforge_project:
|
211
|
-
rubygems_version: 1.8.
|
212
|
+
rubygems_version: 1.8.23
|
212
213
|
signing_key:
|
213
214
|
specification_version: 3
|
214
215
|
summary: sync ics(es) to google calendar
|