cal_exporter 0.0.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.
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