md2key 0.1.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 03c093137f38b66d60bfe02ec6766822479cb4a5
4
+ data.tar.gz: 8b5eea09a394b24dc08afc3073472f0ac583a79c
5
+ SHA512:
6
+ metadata.gz: 7393fbd9bfd79b9f23d148607e3bcaa941dc6119b3098e04a9b5d5a83b3cba6ba0a640550d1c91129ca531044f4fbe37cef464fd685af39f28c94c4ec99b9eb2
7
+ data.tar.gz: 9f25a59dfd8ad606d288988e2b72ec988de7251ff548802736500f541bbc39c83e9b2556b0f2df25804d560fa752a02d00f55a385b2d4997c6d4cc25d7f7c43c
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.2
4
+ before_install: gem install bundler -v 1.10.6
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in md2key.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,16 @@
1
+ # Md2key
2
+
3
+ Convert your markdown to keynote.
4
+
5
+ ## Usage
6
+
7
+ - 1. Create a keynote document
8
+ - 2. Create a first slide as master slide
9
+ - 3. Create a second slide as template slide and activate it
10
+ - 4. Then execute `md2key markdown.md`
11
+
12
+ ![](https://i.gyazo.com/9d4d00164683f516d44b3e536b3dd3e9.gif)
13
+
14
+ ## License
15
+
16
+ MIT License
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/bin/md2key ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift File.expand_path('./lib', __dir__)
4
+ require 'md2key'
5
+
6
+ Md2key::CLI.start(ARGV)
data/lib/md2key/cli.rb ADDED
@@ -0,0 +1,22 @@
1
+ require 'thor'
2
+
3
+ module Md2key
4
+ class CLI < Thor
5
+ desc 'convert MARKDOWN', 'Convert markdown to keynote'
6
+ def convert(path)
7
+ Converter.convert_markdown(path)
8
+ end
9
+
10
+ private
11
+
12
+ # Shorthand for `md2key convert`
13
+ def method_missing(*args)
14
+ return super(*args) if args.length > 1
15
+ default_task(args.first.to_s)
16
+ end
17
+
18
+ def default_task(arg)
19
+ convert(arg)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,25 @@
1
+ module Md2key
2
+ class Converter
3
+ def self.convert_markdown(path)
4
+ abort "md2key: `#{path}` does not exist" unless File.exist?(path)
5
+
6
+ self.new(path).generate_keynote!
7
+ end
8
+
9
+ def initialize(path)
10
+ @markdown = Markdown.new(path)
11
+ end
12
+
13
+ def generate_keynote!
14
+ Keynote.activate
15
+ @markdown.slides.each_with_index do |slide, index|
16
+ if index == 0
17
+ Keynote.create_master(slide.title, slide.lines.join("\n"))
18
+ next
19
+ end
20
+ Keynote.create_slide(slide.title, slide.lines.join("\n"))
21
+ end
22
+ Keynote.delete_template_slide
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,68 @@
1
+ require 'unindent'
2
+
3
+ module Md2key
4
+ class Keynote
5
+ class << self
6
+ def activate
7
+ tell_keynote(<<-APPLE.unindent)
8
+ activate
9
+ APPLE
10
+ end
11
+
12
+ # You must provide a first slide as a master slide.
13
+ def create_master(title, sub)
14
+ tell_keynote(<<-APPLE.unindent)
15
+ tell document 1
16
+ tell slide 1
17
+ set object text of default title item to "#{title}"
18
+ set object text of default body item to "#{sub}"
19
+ end tell
20
+ end tell
21
+ APPLE
22
+ end
23
+
24
+ # You must provide a second slide as a template slide.
25
+ # It will be deleted.
26
+ def delete_template_slide
27
+ tell_keynote(<<-APPLE.unindent)
28
+ tell document 1
29
+ delete slide 2
30
+ end tell
31
+ APPLE
32
+ end
33
+
34
+ def create_slide(title, content)
35
+ tell_keynote(<<-APPLE.unindent)
36
+ tell document 1
37
+ set newSlide to make new slide
38
+
39
+ tell newSlide
40
+ set object text of default title item to "#{title}"
41
+ set object text of default body item to "#{content}"
42
+ end tell
43
+ end tell
44
+ APPLE
45
+ end
46
+
47
+ private
48
+
49
+ def tell_keynote(script)
50
+ lines = [
51
+ 'tell application "Keynote"',
52
+ *script.split("\n").map { |l| l.prepend(' ') },
53
+ 'end tell',
54
+ ]
55
+ execute_applescript(lines.join("\n"))
56
+ end
57
+
58
+ def execute_applescript(script)
59
+ file = Tempfile.new('applescript')
60
+ file.write(script)
61
+ file.close
62
+ system('osascript', file.path)
63
+ ensure
64
+ file.delete
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,34 @@
1
+ module Md2key
2
+ class Markdown
3
+ def initialize(path)
4
+ @markdown = File.read(path)
5
+ end
6
+
7
+ def slides
8
+ @slides ||= parse_markdown
9
+ end
10
+
11
+ private
12
+
13
+ def parse_markdown
14
+ slides = []
15
+ slide = Slide.new
16
+
17
+ @markdown.each_line do |line|
18
+ line = line.strip
19
+ case line
20
+ when /^--+$/
21
+ slides << slide
22
+ slide = Slide.new
23
+ when /^# *(.+)$/
24
+ slide.title = $1
25
+ when /^- *(.+)$/
26
+ slide.lines << $1
27
+ else
28
+ slide.lines << line unless line.empty?
29
+ end
30
+ end
31
+ slides << slide
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,8 @@
1
+ module Md2key
2
+ class Slide < Struct.new(:title, :lines)
3
+ def initialize(*)
4
+ super
5
+ self.lines ||= []
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ module Md2key
2
+ VERSION = "0.1.0"
3
+ end
data/lib/md2key.rb ADDED
@@ -0,0 +1,5 @@
1
+ require 'md2key/slide'
2
+ require 'md2key/markdown'
3
+ require 'md2key/keynote'
4
+ require 'md2key/converter'
5
+ require 'md2key/cli'
data/md2key.gemspec ADDED
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'md2key/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "md2key"
8
+ spec.version = Md2key::VERSION
9
+ spec.authors = ["Takashi Kokubun"]
10
+ spec.email = ["takashi-kokubun@cookpad.com"]
11
+
12
+ spec.summary = %q{Convert markdown to keynote}
13
+ spec.description = %q{Convert markdown to keynote}
14
+ spec.homepage = "https://github.com/k0kubun/md2key"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_dependency "thor", "~> 0.19"
21
+ spec.add_dependency "unindent", "~> 1.0"
22
+ spec.add_development_dependency "bundler", "~> 1.10"
23
+ spec.add_development_dependency "rake", "~> 10.0"
24
+ spec.add_development_dependency "pry"
25
+ end
metadata ADDED
@@ -0,0 +1,129 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: md2key
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Takashi Kokubun
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-08-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: thor
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.19'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.19'
27
+ - !ruby/object:Gem::Dependency
28
+ name: unindent
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.10'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.10'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '10.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '10.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: Convert markdown to keynote
84
+ email:
85
+ - takashi-kokubun@cookpad.com
86
+ executables:
87
+ - md2key
88
+ extensions: []
89
+ extra_rdoc_files: []
90
+ files:
91
+ - ".gitignore"
92
+ - ".travis.yml"
93
+ - Gemfile
94
+ - README.md
95
+ - Rakefile
96
+ - bin/md2key
97
+ - lib/md2key.rb
98
+ - lib/md2key/cli.rb
99
+ - lib/md2key/converter.rb
100
+ - lib/md2key/keynote.rb
101
+ - lib/md2key/markdown.rb
102
+ - lib/md2key/slide.rb
103
+ - lib/md2key/version.rb
104
+ - md2key.gemspec
105
+ homepage: https://github.com/k0kubun/md2key
106
+ licenses: []
107
+ metadata: {}
108
+ post_install_message:
109
+ rdoc_options: []
110
+ require_paths:
111
+ - lib
112
+ required_ruby_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ required_rubygems_version: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ requirements: []
123
+ rubyforge_project:
124
+ rubygems_version: 2.4.5
125
+ signing_key:
126
+ specification_version: 4
127
+ summary: Convert markdown to keynote
128
+ test_files: []
129
+ has_rdoc: