cal_exporter 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,27 @@
1
+ .idea/
2
+ *.gem
3
+ *.rbc
4
+ .bundle
5
+ .config
6
+ .yardoc
7
+ Gemfile.lock
8
+ InstalledFiles
9
+ _yardoc
10
+ coverage
11
+ doc/
12
+ lib/bundler/man
13
+ pkg
14
+ rdoc
15
+ spec/reports
16
+ test/tmp
17
+ test/version_tmp
18
+ tmp
19
+ *.bundle
20
+ *.so
21
+ *.o
22
+ *.a
23
+ mkmf.log
24
+
25
+
26
+ # TODO: Delete it below before publishing
27
+ meetups/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ cache: bundler
3
+ rvm:
4
+ - 1.9.3
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in cal_exporter.gemspec
4
+ gemspec
5
+ gem 'rspec'
6
+ gem 'coveralls', require: false
7
+ gem "codeclimate-test-reporter", group: :test, require: nil
8
+
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 sota0805
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,70 @@
1
+ # CalExporter
2
+
3
+ [![Build Status](https://travis-ci.org/sota0805/cal_exporter.svg)](https://travis-ci.org/sota0805/cal_exporter)
4
+ [![Code Climate](https://codeclimate.com/github/sota0805/cal_exporter.png)](https://codeclimate.com/github/sota0805/cal_exporter)
5
+ [![Coverage Status](https://coveralls.io/repos/sota0805/cal_exporter/badge.png)](https://coveralls.io/r/sota0805/cal_exporter)
6
+
7
+
8
+ TODO: Write a gem description
9
+
10
+ ## Installation
11
+
12
+ Add this line to your application's Gemfile:
13
+
14
+ gem 'cal_exporter'
15
+
16
+ And then execute:
17
+
18
+ $ bundle
19
+
20
+ Or install it yourself as:
21
+
22
+ $ gem install cal_exporter
23
+
24
+ ## Usage
25
+
26
+ ### 1 Copy Calender ID : Select calender > Calender setting
27
+
28
+ ![](https://dl.dropboxusercontent.com/u/74344418/github-image/cal_expoter.png)
29
+
30
+ ### 2 Type code below:
31
+
32
+ ```
33
+ $ cal_exporter calender CALENDER_ID FILE_FORMAT SAVE_LOCATION
34
+ ```
35
+
36
+ Example code below :
37
+
38
+ ```
39
+ $ cal_exporter calender engineyard.com_f0a3jqaqooc9r7kmk2hiblojgs@group.calendar.google.com jekyll ~/Desktop
40
+
41
+ $ tree
42
+ .
43
+ ├── 2013-04-08-qaias4p.md
44
+ ├── 2013-04-15-boenj2u.md
45
+ ├── 2013-04-17-8m2aphs.md
46
+ ├── 2013-04-20-fqmab6r.md
47
+ ├── 2013-04-22-5itqrg3.md
48
+ ├── 2013-04-23-eml2lv5.md
49
+ ├── 2013-04-24-9jck6ib.md
50
+ ├── 2013-04-26-go72sbm.md
51
+ ...
52
+
53
+ ```
54
+
55
+
56
+
57
+
58
+ ## TODO
59
+
60
+ - Export as CSV
61
+ - Export as JSON
62
+ - Decide export one file or each event file
63
+
64
+ ## Contributing
65
+
66
+ 1. Fork it ( https://github.com/[my-github-username]/cal_exporter/fork )
67
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
68
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
69
+ 4. Push to the branch (`git push origin my-new-feature`)
70
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,7 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
7
+
data/bin/cal_exporter ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'cal_exporter'
4
+
5
+ CalExporter::CLI.start(ARGV)
@@ -0,0 +1,36 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'cal_exporter/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "cal_exporter"
8
+ spec.version = CalExporter::VERSION
9
+ spec.authors = ["sota0805"]
10
+ spec.email = ["sota.yamashita@gmail.com"]
11
+ spec.summary = %q{Calander Exporter}
12
+ spec.description = %q{Export calendar data}
13
+ spec.homepage = "https://github.com/sota0805/cal_exporter/"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_runtime_dependency 'icalendar', '~> 1.5', '>= 1.5.1'
22
+ spec.add_runtime_dependency 'thor', '~> 0.18', '>= 0.18.1'
23
+
24
+ spec.add_development_dependency "bundler"
25
+ spec.add_development_dependency "rake"
26
+ spec.add_development_dependency "rspec", '~> 2.14.1'
27
+
28
+ spec.add_development_dependency "rspec"
29
+ spec.add_development_dependency "rspec-nc"
30
+ spec.add_development_dependency "guard"
31
+ spec.add_development_dependency "guard-rspec"
32
+ spec.add_development_dependency "pry"
33
+ spec.add_development_dependency "pry-remote"
34
+ spec.add_development_dependency "pry-nav"
35
+ spec.add_development_dependency "pry-debugger"
36
+ end
@@ -0,0 +1,33 @@
1
+ require "cal_exporter/version"
2
+ require "icalendar"
3
+ require "open-uri"
4
+ require "thor"
5
+ require "date"
6
+ require "pry"
7
+
8
+
9
+ module CalExporter
10
+ class CLI < Thor
11
+
12
+ desc "calender CALENDER_ID FORMAT SAVE_LOCATION", "Export calender with specified file format"
13
+ def calender(calendar_id, format, save_location)
14
+ import = Importer.new(calendar_id)
15
+ calendars = import.fetch
16
+ export = Exporter.new(format, save_location)
17
+
18
+ calendars.each do |calendar|
19
+ calendar.events.each do |event|
20
+ say export.save_as_jekyll(event)
21
+ end
22
+ end
23
+ say "Successfully created Files under #{save_location}.", :green
24
+ end
25
+ end
26
+
27
+ require 'cal_exporter/importer'
28
+ require 'cal_exporter/exporter'
29
+
30
+ end
31
+
32
+
33
+
@@ -0,0 +1,47 @@
1
+ require "yaml"
2
+
3
+ module CalExporter
4
+ class Exporter
5
+
6
+
7
+ def initialize(format, save_location)
8
+ @format = format
9
+ @save_location = save_location
10
+ end
11
+
12
+
13
+ def to_jekyll(event)
14
+ output_list = {
15
+ "title" => event.summary.gsub(/[|]|:/, '[' => '(', ']' => ')', ':' => '&#58;'),
16
+ "location" => event.location.chomp,
17
+ "date" => event.dtstart.strftime('%Y-%m-%d'),
18
+ "friendly_date" => event.dtstart.strftime('%A %d %b %Y'),
19
+ "link" => url_list(event.description)[0],
20
+ "layout" => "post",
21
+ "categories" => "meetups"
22
+ }
23
+
24
+ output_list.to_yaml + "---\n#{event.description}"
25
+ end
26
+
27
+
28
+ def save_as_jekyll(event)
29
+ file_name = "#{@save_location}/#{event.dtstart.strftime('%Y-%m-%d')}-#{event.uid[0, 7]}.md"
30
+
31
+ Dir.mkdir(@save_location) unless Dir.exist?(@save_location)
32
+
33
+ f = File.open("#{file_name}", "w")
34
+ f.write(to_jekyll(event))
35
+ f.close
36
+
37
+ file_name
38
+ end
39
+
40
+
41
+ def url_list(description)
42
+ URI.extract(description, %w[http https])
43
+ end
44
+
45
+
46
+ end
47
+ end
@@ -0,0 +1,15 @@
1
+ module CalExporter
2
+ class Importer
3
+
4
+ def initialize(calendar_id)
5
+ @calendar_id = calendar_id
6
+ end
7
+
8
+
9
+ def fetch
10
+ calender_url = "https://www.google.com/calendar/ical/#{@calendar_id}/public/basic.ics"
11
+ calendars = open (calender_url) { |cal| Icalendar.parse(cal) }
12
+ end
13
+
14
+ end
15
+ end
@@ -0,0 +1,3 @@
1
+ module CalExporter
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe CalExporter::Exporter do
6
+
7
+ before do
8
+ @format = "jekyll"
9
+ @save_location = "~/Desktop/meetups"
10
+ end
11
+
12
+ it "should create file for jeykyll" do
13
+
14
+ end
15
+
16
+
17
+ it "should create file specified its name" do
18
+
19
+ end
20
+
21
+
22
+ it "should return url array" do
23
+ CalExporter::Exporter.new(@format, @save_location).url_list("お申込み:http://phpstudy.doorkeeper.jp/\n開催場所:株式会社 Engine Yard\n会場までの動画:http://www.youtube.com/watch?v=Yspc7MMb9d4").class.should eq(Array)
24
+ end
25
+
26
+
27
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe CalExporter::Importer do
4
+
5
+ context "value required" do
6
+ subject(:subject) { CalExporter::Importer.new("engineyard.com_f0a3jqaqooc9r7kmk2hiblojgs@group.calendar.google.com") }
7
+
8
+ it "should return calender data" do
9
+ subject.fetch[0].class.should equal(Icalendar::Calendar)
10
+ end
11
+
12
+ end
13
+
14
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe CalExporter::CLI do
4
+
5
+
6
+ end
7
+
8
+
9
+
@@ -0,0 +1,8 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+ require 'cal_exporter'
3
+ require 'cal_exporter/exporter'
4
+ require 'cal_exporter/importer'
5
+ require 'coveralls'
6
+ Coveralls.wear!
7
+ require "codeclimate-test-reporter"
8
+ CodeClimate::TestReporter.start
metadata ADDED
@@ -0,0 +1,288 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cal_exporter
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - sota0805
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-04-10 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: icalendar
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.5'
22
+ - - ! '>='
23
+ - !ruby/object:Gem::Version
24
+ version: 1.5.1
25
+ type: :runtime
26
+ prerelease: false
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: '1.5'
33
+ - - ! '>='
34
+ - !ruby/object:Gem::Version
35
+ version: 1.5.1
36
+ - !ruby/object:Gem::Dependency
37
+ name: thor
38
+ requirement: !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: '0.18'
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: 0.18.1
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '0.18'
55
+ - - ! '>='
56
+ - !ruby/object:Gem::Version
57
+ version: 0.18.1
58
+ - !ruby/object:Gem::Dependency
59
+ name: bundler
60
+ requirement: !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ! '>='
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ - !ruby/object:Gem::Dependency
75
+ name: rake
76
+ requirement: !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ! '>='
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ - !ruby/object:Gem::Dependency
91
+ name: rspec
92
+ requirement: !ruby/object:Gem::Requirement
93
+ none: false
94
+ requirements:
95
+ - - ~>
96
+ - !ruby/object:Gem::Version
97
+ version: 2.14.1
98
+ type: :development
99
+ prerelease: false
100
+ version_requirements: !ruby/object:Gem::Requirement
101
+ none: false
102
+ requirements:
103
+ - - ~>
104
+ - !ruby/object:Gem::Version
105
+ version: 2.14.1
106
+ - !ruby/object:Gem::Dependency
107
+ name: rspec
108
+ requirement: !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ! '>='
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ type: :development
115
+ prerelease: false
116
+ version_requirements: !ruby/object:Gem::Requirement
117
+ none: false
118
+ requirements:
119
+ - - ! '>='
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ - !ruby/object:Gem::Dependency
123
+ name: rspec-nc
124
+ requirement: !ruby/object:Gem::Requirement
125
+ none: false
126
+ requirements:
127
+ - - ! '>='
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ type: :development
131
+ prerelease: false
132
+ version_requirements: !ruby/object:Gem::Requirement
133
+ none: false
134
+ requirements:
135
+ - - ! '>='
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ - !ruby/object:Gem::Dependency
139
+ name: guard
140
+ requirement: !ruby/object:Gem::Requirement
141
+ none: false
142
+ requirements:
143
+ - - ! '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ none: false
150
+ requirements:
151
+ - - ! '>='
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ - !ruby/object:Gem::Dependency
155
+ name: guard-rspec
156
+ requirement: !ruby/object:Gem::Requirement
157
+ none: false
158
+ requirements:
159
+ - - ! '>='
160
+ - !ruby/object:Gem::Version
161
+ version: '0'
162
+ type: :development
163
+ prerelease: false
164
+ version_requirements: !ruby/object:Gem::Requirement
165
+ none: false
166
+ requirements:
167
+ - - ! '>='
168
+ - !ruby/object:Gem::Version
169
+ version: '0'
170
+ - !ruby/object:Gem::Dependency
171
+ name: pry
172
+ requirement: !ruby/object:Gem::Requirement
173
+ none: false
174
+ requirements:
175
+ - - ! '>='
176
+ - !ruby/object:Gem::Version
177
+ version: '0'
178
+ type: :development
179
+ prerelease: false
180
+ version_requirements: !ruby/object:Gem::Requirement
181
+ none: false
182
+ requirements:
183
+ - - ! '>='
184
+ - !ruby/object:Gem::Version
185
+ version: '0'
186
+ - !ruby/object:Gem::Dependency
187
+ name: pry-remote
188
+ requirement: !ruby/object:Gem::Requirement
189
+ none: false
190
+ requirements:
191
+ - - ! '>='
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ type: :development
195
+ prerelease: false
196
+ version_requirements: !ruby/object:Gem::Requirement
197
+ none: false
198
+ requirements:
199
+ - - ! '>='
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ - !ruby/object:Gem::Dependency
203
+ name: pry-nav
204
+ requirement: !ruby/object:Gem::Requirement
205
+ none: false
206
+ requirements:
207
+ - - ! '>='
208
+ - !ruby/object:Gem::Version
209
+ version: '0'
210
+ type: :development
211
+ prerelease: false
212
+ version_requirements: !ruby/object:Gem::Requirement
213
+ none: false
214
+ requirements:
215
+ - - ! '>='
216
+ - !ruby/object:Gem::Version
217
+ version: '0'
218
+ - !ruby/object:Gem::Dependency
219
+ name: pry-debugger
220
+ requirement: !ruby/object:Gem::Requirement
221
+ none: false
222
+ requirements:
223
+ - - ! '>='
224
+ - !ruby/object:Gem::Version
225
+ version: '0'
226
+ type: :development
227
+ prerelease: false
228
+ version_requirements: !ruby/object:Gem::Requirement
229
+ none: false
230
+ requirements:
231
+ - - ! '>='
232
+ - !ruby/object:Gem::Version
233
+ version: '0'
234
+ description: Export calendar data
235
+ email:
236
+ - sota.yamashita@gmail.com
237
+ executables:
238
+ - cal_exporter
239
+ extensions: []
240
+ extra_rdoc_files: []
241
+ files:
242
+ - .gitignore
243
+ - .rspec
244
+ - .travis.yml
245
+ - Gemfile
246
+ - LICENSE.txt
247
+ - README.md
248
+ - Rakefile
249
+ - bin/cal_exporter
250
+ - cal_exporter.gemspec
251
+ - lib/cal_exporter.rb
252
+ - lib/cal_exporter/exporter.rb
253
+ - lib/cal_exporter/importer.rb
254
+ - lib/cal_exporter/version.rb
255
+ - spec/cal_exporter/exporter_spec.rb
256
+ - spec/cal_exporter/importer_spec.rb
257
+ - spec/cal_exporter_spec.rb
258
+ - spec/spec_helper.rb
259
+ homepage: https://github.com/sota0805/cal_exporter/
260
+ licenses:
261
+ - MIT
262
+ post_install_message:
263
+ rdoc_options: []
264
+ require_paths:
265
+ - lib
266
+ required_ruby_version: !ruby/object:Gem::Requirement
267
+ none: false
268
+ requirements:
269
+ - - ! '>='
270
+ - !ruby/object:Gem::Version
271
+ version: '0'
272
+ required_rubygems_version: !ruby/object:Gem::Requirement
273
+ none: false
274
+ requirements:
275
+ - - ! '>='
276
+ - !ruby/object:Gem::Version
277
+ version: '0'
278
+ requirements: []
279
+ rubyforge_project:
280
+ rubygems_version: 1.8.23
281
+ signing_key:
282
+ specification_version: 3
283
+ summary: Calander Exporter
284
+ test_files:
285
+ - spec/cal_exporter/exporter_spec.rb
286
+ - spec/cal_exporter/importer_spec.rb
287
+ - spec/cal_exporter_spec.rb
288
+ - spec/spec_helper.rb