ical2gcal 0.4.2 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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 'gcalapi', :git => 'https://github.com/wtnabe/gcalapi'
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 REE 1.8.7 and CRuby 1.9.3)
16
- * ri_cal http://ri-cal.rubyforge.org/
17
- * gcalapi http://gcalapi.rubyforge.org/
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. Setup Your Google account info using Pit
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
- == How to config pit
27
+ see https://developers.google.com/google-apps/calendar/firstapp
30
28
 
31
- 1. SET ENVIRONMENT VARIABLE *EDITOR*
32
- 2. type
29
+ == Incompatible Changes ( v0.5 )
33
30
 
34
- pit set google
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 'gcalapi'
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.4.2
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.4.2"
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 = "2013-12-13"
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.11"
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<gcalapi>, [">= 0"])
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<gcalapi>, [">= 0"])
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<gcalapi>, [">= 0"])
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<gcalapi>, [">= 0"])
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<gcalapi>, [">= 0"])
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<gcalapi>, [">= 0"])
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 'gcalapi'
4
- require 'simple-rss'
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
- def initialize( opts )
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
- # [return] GoogleCalendar::Service
14
+ # [param] String calendar_id
15
+ # [param] String store
22
16
  #
23
- def service
24
- if ( !@service and @opts )
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
- @service
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
- # [return] Array
30
+ # [param] String calendar_id
31
+ # [param] String dir
32
+ # [return] Object Calendar API
34
33
  #
35
- def calendars
36
- SimpleRSS.parse( service.calendars.body ).entries
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
- # [return] GoogleCalendar::Calendar
58
+ # [param] RiCal::Component::Event
59
+ # [return] String
41
60
  #
42
- def calendar
43
- if ( !@calendar )
44
- cal = calendars.find { |c|
45
- c.title == calendar_name
46
- }
47
- @calendar = GoogleCalendar::Calendar.new( @service, cal[:link] )
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
- @calendar
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
- # [return] String
86
+ # [param] Rical::Component::Event event
87
+ # [return] Boolean
55
88
  #
56
- def calendar_name
57
- @opts['calendar']['name']
89
+ def all_day?(event)
90
+ event.dtstart.class == Date
58
91
  end
59
92
 
60
- def create_event( event )
61
- e = calendar.create_event
62
- e.title = event.summary
63
- e.desc = event.description
64
- e.where = event.location
65
- e.st = Time.parse(event.start_time.to_s.sub(/\+.*/, ''))
66
- e.allday = e.st.hour == 0 and e.st.min == 0 and not event.respond_to? :end_time
67
- e.en = if event.respond_to? :end_time
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
- max_retry = 3
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
- # [param] Fixnum
95
- #
96
- def remove_one_event(evt, num_retry)
97
- begin
98
- evt.destroy!
99
- rescue => e
100
- case e
101
- when NoMethodError
102
- ;
103
- else
104
- num_retry -= 1
105
- if num_retry > 0
106
- sleep 1 and retry
107
- else
108
- raise e
109
- end
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 = nil
16
- @list = nil
17
- @calendars = nil
18
- @target = nil
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-name NAME' ) { |c|
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
@@ -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
@@ -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 be_false
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 be_true
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.2
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: 2013-12-13 00:00:00.000000000 Z
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: &13540240 !ruby/object:Gem::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: *13540240
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: simple-rss
38
- requirement: &13554660 !ruby/object:Gem::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: *13554660
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: &13550200 !ruby/object:Gem::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: *13550200
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: &13547860 !ruby/object:Gem::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: *13547860
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: &13547200 !ruby/object:Gem::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: *13547200
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: &13563460 !ruby/object:Gem::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: *13563460
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: &13562720 !ruby/object:Gem::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: *13562720
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: &13562020 !ruby/object:Gem::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: *13562020
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: simple-rss
137
- requirement: &13560740 !ruby/object:Gem::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: *13560740
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: -1734280500545708509
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.11
212
+ rubygems_version: 1.8.23
212
213
  signing_key:
213
214
  specification_version: 3
214
215
  summary: sync ics(es) to google calendar