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