rabbit 2.0.5 → 2.0.6

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.
Files changed (110) hide show
  1. data/Rakefile +46 -12
  2. data/data/locale/en/LC_MESSAGES/rabbit.mo +0 -0
  3. data/data/locale/fr/LC_MESSAGES/rabbit.mo +0 -0
  4. data/data/locale/ja/LC_MESSAGES/rabbit.mo +0 -0
  5. data/doc/_config.yml +3 -3
  6. data/doc/_layouts/en.html +10 -0
  7. data/doc/_layouts/ja.html +10 -0
  8. data/doc/css/rabbit.css +25 -4
  9. data/doc/en/index.rd +1 -1
  10. data/doc/en/news.rd +46 -0
  11. data/doc/images/rabbit-slide-show-logo.png +0 -0
  12. data/doc/images/rabbit-slide-show-logo.svg +597 -0
  13. data/doc/images/screenshots/en/blue-circle-raw.png +0 -0
  14. data/doc/images/screenshots/en/blue-circle.png +0 -0
  15. data/doc/images/screenshots/en/clear-blue-raw.png +0 -0
  16. data/doc/images/screenshots/en/clear-blue.png +0 -0
  17. data/doc/images/screenshots/en/cozmixng-raw.png +0 -0
  18. data/doc/images/screenshots/en/cozmixng.png +0 -0
  19. data/doc/images/screenshots/en/dark-gradation-raw.png +0 -0
  20. data/doc/images/screenshots/en/dark-gradation.png +0 -0
  21. data/doc/images/screenshots/en/day-white-raw.png +0 -0
  22. data/doc/images/screenshots/en/day-white.png +0 -0
  23. data/doc/images/screenshots/en/debian-raw.png +0 -0
  24. data/doc/images/screenshots/en/debian.png +0 -0
  25. data/doc/images/screenshots/en/green-circle-raw.png +0 -0
  26. data/doc/images/screenshots/en/green-circle.png +0 -0
  27. data/doc/images/screenshots/en/night-black-raw.png +0 -0
  28. data/doc/images/screenshots/en/night-black.png +0 -0
  29. data/doc/images/screenshots/en/rabbit-raw.png +0 -0
  30. data/doc/images/screenshots/en/rabbit.png +0 -0
  31. data/doc/images/screenshots/en/ranguba-raw.png +0 -0
  32. data/doc/images/screenshots/en/ranguba.png +0 -0
  33. data/doc/images/screenshots/en/red-frame-raw.png +0 -0
  34. data/doc/images/screenshots/en/red-frame.png +0 -0
  35. data/doc/images/screenshots/en/ruby-gnome2-raw.png +0 -0
  36. data/doc/images/screenshots/en/ruby-gnome2.png +0 -0
  37. data/doc/images/screenshots/en/rubykaigi2011-raw.png +0 -0
  38. data/doc/images/screenshots/en/rubykaigi2011.png +0 -0
  39. data/doc/images/screenshots/ja/blue-circle-raw.png +0 -0
  40. data/doc/images/screenshots/ja/blue-circle.png +0 -0
  41. data/doc/images/screenshots/ja/clear-blue-raw.png +0 -0
  42. data/doc/images/screenshots/ja/clear-blue.png +0 -0
  43. data/doc/images/screenshots/ja/cozmixng-raw.png +0 -0
  44. data/doc/images/screenshots/ja/cozmixng.png +0 -0
  45. data/doc/images/screenshots/ja/dark-gradation-raw.png +0 -0
  46. data/doc/images/screenshots/ja/dark-gradation.png +0 -0
  47. data/doc/images/screenshots/ja/day-white-raw.png +0 -0
  48. data/doc/images/screenshots/ja/day-white.png +0 -0
  49. data/doc/images/screenshots/ja/debian-raw.png +0 -0
  50. data/doc/images/screenshots/ja/debian.png +0 -0
  51. data/doc/images/screenshots/ja/green-circle-raw.png +0 -0
  52. data/doc/images/screenshots/ja/green-circle.png +0 -0
  53. data/doc/images/screenshots/ja/night-black-raw.png +0 -0
  54. data/doc/images/screenshots/ja/night-black.png +0 -0
  55. data/doc/images/screenshots/ja/rabbit-raw.png +0 -0
  56. data/doc/images/screenshots/ja/rabbit.png +0 -0
  57. data/doc/images/screenshots/ja/ranguba-raw.png +0 -0
  58. data/doc/images/screenshots/ja/ranguba.png +0 -0
  59. data/doc/images/screenshots/ja/red-frame-raw.png +0 -0
  60. data/doc/images/screenshots/ja/red-frame.png +0 -0
  61. data/doc/images/screenshots/ja/ruby-gnome2-raw.png +0 -0
  62. data/doc/images/screenshots/ja/ruby-gnome2.png +0 -0
  63. data/doc/images/screenshots/ja/rubykaigi2011-raw.png +0 -0
  64. data/doc/images/screenshots/ja/rubykaigi2011.png +0 -0
  65. data/doc/index.html.ja +2 -2
  66. data/doc/ja/how-to-make/rd.rd +30 -3
  67. data/doc/ja/index.rd +1 -1
  68. data/doc/ja/news.rd +46 -0
  69. data/doc/ja/slides.rd +1 -1
  70. data/doc/ja/usage/rabbit-theme.rd +1 -1
  71. data/doc/ja/users.rd +16 -2
  72. data/lib/rabbit/author-configuration.rb +6 -6
  73. data/lib/rabbit/command/rabbit-slide.rb +208 -161
  74. data/lib/rabbit/command/rabbit.rb +2 -2
  75. data/lib/rabbit/console.rb +1 -1
  76. data/lib/rabbit/element/text-renderer.rb +2 -2
  77. data/lib/rabbit/element/video.rb +167 -0
  78. data/lib/rabbit/image/pdf.rb +19 -10
  79. data/lib/rabbit/parser/ext/video.rb +18 -0
  80. data/lib/rabbit/parser/rd/ext/block-verbatim.rb +10 -0
  81. data/lib/rabbit/parser/rd/ext/video.rb +15 -0
  82. data/lib/rabbit/slide-configuration.rb +15 -8
  83. data/lib/rabbit/slideshare.rb +93 -13
  84. data/lib/rabbit/task/slide.rb +5 -4
  85. data/lib/rabbit/task/theme.rb +3 -1
  86. data/lib/rabbit/theme/applier.rb +1 -1
  87. data/lib/rabbit/theme/entry.rb +0 -29
  88. data/lib/rabbit/theme/title-shadow/title-shadow.rb +1 -1
  89. data/lib/rabbit/version.rb +1 -1
  90. data/lib/rabbit/video-window.rb +122 -0
  91. data/misc/github-post-receiver/config.ru +170 -0
  92. data/misc/github-post-receiver/config.yaml.sample +3 -0
  93. data/misc/github-post-receiver/tmp/restart.txt +0 -0
  94. data/po/en/rabbit.po~ +2567 -0
  95. data/po/fr/rabbit.po~ +2674 -0
  96. data/po/ja/rabbit.po~ +2695 -0
  97. data/po/rabbit.pot +1195 -1094
  98. data/rabbit.gemspec +1 -0
  99. data/test/test-author-configuration.rb +1 -0
  100. data/test/test-slide-configuration.rb +3 -0
  101. metadata +659 -640
  102. data/bin/rabbit-theme-manager +0 -133
  103. data/lib/rabbit/theme-browser.rb +0 -104
  104. data/lib/rabbit/theme-browser/default-tag.yaml +0 -89
  105. data/lib/rabbit/theme-browser/document.rb +0 -200
  106. data/lib/rabbit/theme-browser/ext/block-verbatim.rb +0 -39
  107. data/lib/rabbit/theme-browser/page.rb +0 -133
  108. data/lib/rabbit/theme-browser/rd2document-lib.rb +0 -181
  109. data/lib/rabbit/theme-browser/tag.rb +0 -67
  110. data/lib/rabbit/theme-browser/tree.rb +0 -91
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
data/doc/index.html.ja CHANGED
@@ -8,9 +8,9 @@ no_sidebar: true
8
8
  <p>{{ site.release_date }}にリリースされた<a href="/ja/news.html">{{ site.version }}</a>が最新リリースです。</p>
9
9
  </div>
10
10
 
11
- <section class="screenshots">
11
+ <section id="screenshots">
12
12
  <h2>スクリーンショット</h2>
13
- <ul id="screenshots">
13
+ <ul>
14
14
  <li><img src="images/screenshots/ja/blue-circle.png"
15
15
  alt="青い円テーマ" /></li>
16
16
  <li><img src="images/screenshots/ja/clear-blue.png"
@@ -50,10 +50,37 @@ TODO: 他にもメタデータが増えているはず。
50
50
 
51
51
  === 画像
52
52
 
53
- verbatim blockとして記述します。詳しくはsample/rabbit.rdを見
54
- てください。
53
+ verbatim blockとして記述します。
55
54
 
56
- TODO: ここに書き方を入れる。
55
+ 最初の行は「(({# image}))」からはじめます。「(({src = 画像のパス}))」は
56
+ 必ず指定しなければいけません。以下はスライドと同じディレクトリにある
57
+ (({lavie.png}))を表示する例です。
58
+
59
+ # image
60
+ # src = lavie.png
61
+
62
+ 「(({caption = キャプション}))」でキャプションも指定できます。
63
+
64
+ # image
65
+ # src = lavie.png
66
+ # caption = Lavie
67
+
68
+ 「(({relative_width = 90}))」を指定するとスライドの横幅ほとんどを使って
69
+ 大きく画像を表示します。横長の画像を大きく表示するときはこの指定をする
70
+ とよいでしょう。
71
+
72
+ # image
73
+ # src = lavie.png
74
+ # relative_width = 90
75
+
76
+ 縦長の画像は「(({relative_height = 90}))」を指定してください。スライド
77
+ の縦幅ほとんどを使って大きく画像を表示します。
78
+
79
+ # image
80
+ # src = lavie.png
81
+ # relative_height = 90
82
+
83
+ TODO: 指定できるオプションのリストを書く
57
84
 
58
85
  === 実体参照
59
86
 
data/doc/ja/index.rd CHANGED
@@ -175,7 +175,7 @@ Framework|URL:http://prototype.conio.net/>))を見てください。
175
175
  data/rabbit/image/rubykaigi2011-images/rubykaigi2011-background-white.jpg
176
176
 
177
177
  data/rabbit/image/rubykaigi2011-images/rubykaigi2011-background-black.jpg
178
- の作者はnorioさんでラインセンスはCC-by-3.0です。
178
+ の作者はnorioさんでラインセンスはCC-BY-3.0です。
179
179
 
180
180
  == メーリングリスト
181
181
 
data/doc/ja/news.rd CHANGED
@@ -3,6 +3,52 @@ layout: ja
3
3
  title: お知らせ
4
4
  apply_data: false
5
5
  ---
6
+ == 2.0.6: 2012-12-29
7
+
8
+ ビデオサポートリリース!2012年最後のリリース!
9
+
10
+ === 改良
11
+
12
+ ==== rabbit-slide
13
+
14
+ * Ustreamに対応。
15
+ * Vimeoに対応。
16
+ * SlideShareでのURLにはタイトルではなくIDを使うようにした。
17
+ [Masafumi Yokoyamaさんがパッチ提供]
18
+ * changeコマンドで設定を変更できるようにした。
19
+
20
+ ==== ドキュメント
21
+
22
+ * RDを使った時の画像の使い方を追加。 [ほっかいさんが追加]
23
+
24
+ ==== rabbit
25
+
26
+ * ファイルの拡張子もチェックしてPDFを認識するようにした。
27
+ * [非互換] 画像としてPDFを使うときに指定するページ番号を0スタートでは
28
+ なく1スタートにした。これは、PDFが1ページからカウントするので、それ
29
+ にあわせるためである。
30
+ * [実験的] スライドにビデオを埋め込めるようにした。
31
+ [Narihiro Nakamuraさんがパッチ提供]
32
+ * テキストの影を元のテキストから離れ過ぎないようにした。
33
+
34
+ ==== rabbit-theme-manager
35
+
36
+ * 必要がないので削除。
37
+
38
+ === 修正
39
+
40
+ ==== rabbit
41
+
42
+ * .rabbitディレクトリを起動オプションを指定したファイルとはみなさない
43
+ ようにした。 [Koichi Akabeさんが報告]
44
+
45
+ === 感謝
46
+
47
+ * Masafumi Yokoyamaさん
48
+ * Koichi Akabeさん
49
+ * ほっかいさん
50
+ * Narihiro Nakamuraさん
51
+
6
52
  == 2.0.5: 2012-09-14
7
53
 
8
54
  バグフィックスリリース。
data/doc/ja/slides.rd CHANGED
@@ -7,7 +7,7 @@ title: スライド
7
7
  Rabbitで作ったスライドがたくさん公開されています。Rabbitで作っ
8
8
  たスライドを公開したら自由に追加してください。
9
9
 
10
- * ((<kou|URL:http://pub.cozmixng.org/~kou/archives/TokyoRubyKaigi01/>))
10
+ * ((<kou|URL:http://slide.rabbit-shocker.org/authors/kou/>))
11
11
  * ((<zunda|URL:http://zunda.freeshell.org/d/?year=2004;month=3Q;category=rabbit>))さん
12
12
  * ((<oxy|URL:http://mono.kmc.gr.jp/~oxy/d/?date=20041019#p02>))さん
13
13
  * かずひこさん
@@ -29,7 +29,7 @@ TODO: RubyGems.orgに公開したスライドは
29
29
 
30
30
  以下は札幌Ruby会議2012用のテーマの雛形を生成するコマンドです。
31
31
 
32
- % rabbit-slide new \
32
+ % rabbit-theme new \
33
33
  --id sprk2012 \
34
34
  --name "Kouhei Sutou" \
35
35
  --email kou@cozmixng.org \
data/doc/ja/users.rd CHANGED
@@ -8,8 +8,22 @@ Rabbitユーザのコミュニティとして「Rabbitショッカー」があ
8
8
 
9
9
  == 活動の場
10
10
 
11
- Rabbitショッカーの活動場所はプレゼンテーションの場以外にもいくつか
12
- あります。
11
+ Rabbitショッカーの主な活動場所はプレゼンテーションの場です。ただし、プ
12
+ レゼンテーションの場に限らずいくつか活動場所があります。
13
+
14
+ === slide.rabbit-shocker.org
15
+
16
+ RabbitショッカーのみなさんはRabbitを使ってプレゼンテーションした後は使っ
17
+ たスライドを
18
+ ((<slide.rabbit-shocker.org|URL:http://slide.rabbit-shocker.org/>))へアッ
19
+ プロードしています。slide.rabbit-shocker.orgへ行けばRabbitでどんなスラ
20
+ イドを作れるかを確認することができます。
21
+
22
+ あなたもRabbitショッカーとしてプレゼンテーションしたらスライドを
23
+ slide.rabbit-shocker.orgへアップロードしましょう。
24
+
25
+ アップロード方法については((<"usage/rabbit-slide.rb"|rabbit-slideコマン
26
+ ドの使い方>))に書かれています。
13
27
 
14
28
  === メーリングリスト
15
29
 
@@ -63,12 +63,12 @@ module Rabbit
63
63
  end
64
64
 
65
65
  def merge!(conf)
66
- @markup_language ||= conf["markup_language"]
67
- @name ||= conf["name"]
68
- @email ||= conf["email"]
69
- @rubygems_user ||= conf["rubygems_user"]
70
- @slideshare_user ||= conf["slideshare_user"]
71
- @speaker_deck_user ||= conf["speaker_deck_user"]
66
+ @markup_language = conf["markup_language"] || @markup_language
67
+ @name = conf["name"] || @name
68
+ @email = conf["email"] || @email
69
+ @rubygems_user = conf["rubygems_user"] || @rubygems_user
70
+ @slideshare_user = conf["slideshare_user"] || @slideshare_user
71
+ @speaker_deck_user = conf["speaker_deck_user"] || @spearker_deck_user
72
72
  end
73
73
 
74
74
  def to_hash
@@ -43,7 +43,7 @@ module Rabbit
43
43
  end
44
44
 
45
45
  def run(arguments)
46
- @options, @logger = parse_command_line_arguments(arguments)
46
+ parse_command_line_arguments(arguments)
47
47
 
48
48
  validate
49
49
  unless @validation_errors.empty?
@@ -52,7 +52,7 @@ module Rabbit
52
52
  return false
53
53
  end
54
54
 
55
- generate
55
+ run_command
56
56
  @author_conf.save
57
57
  true
58
58
  end
@@ -60,164 +60,186 @@ module Rabbit
60
60
  private
61
61
  def parse_command_line_arguments(arguments)
62
62
  Rabbit::Console.parse!(ARGV) do |parser, options|
63
- @logger = options.default_logger
64
- @author_conf = AuthorConfiguration.new(@logger)
65
- @author_conf.load
66
- @slide_conf = SlideConfiguration.new(@logger)
67
- @slide_conf.author = @author_conf
68
-
69
- format = _("Usage: %s new [options]\n" \
70
- " e.g.: %s new \\\n" \
71
- " --id rubykaigi2012 \\\n" \
72
- " --base-name rabbit-introduction \\\n" \
73
- " --markup-language rd \\\n" \
74
- " --name \"Kouhei Sutou\" \\\n" \
75
- " --email kou@cozmixng.org \\\n" \
76
- " --rubygems-user kou \\\n" \
77
- " --slideshare-user kou \\\n" \
78
- " --speaker-deck-user kou")
79
-
80
- program = File.basename($0, ".*")
81
- parser.banner = format % [program, program]
82
-
83
- parser.separator("")
84
-
85
- parser.separator(_("Slide information"))
86
-
87
- parser.on("--id=ID",
88
- _("Slide ID"),
89
- _("(e.g.: %s)") % "--id=rubykaigi2012",
90
- _("(must)")) do |id|
91
- @slide_conf.id = id
92
- end
63
+ setup_options(parser, options)
64
+ end
65
+ @command = @options.rest.first || default_command
66
+ end
93
67
 
94
- messages = [
95
- _("Base name for the slide source file and generated PDF file"),
96
- _("(e.g.: %s)") % "--base-name=rabbit-introduction",
97
- _("(must)"),
98
- ]
99
- parser.on("--base-name=NAME",
100
- *messages) do |base_name|
101
- @slide_conf.base_name = base_name
102
- end
68
+ def setup_options(parser, options)
69
+ @options = options
70
+ @logger = @options.default_logger
71
+ @author_conf = AuthorConfiguration.new(@logger)
72
+ @author_conf.load
73
+ @slide_conf = SlideConfiguration.new(@logger)
74
+ @slide_conf.author = @author_conf
75
+
76
+ format = _("Usage: %s COMMAND [OPTIONS]\n" \
77
+ " e.g.: %s new \\\n" \
78
+ " --id rubykaigi2012 \\\n" \
79
+ " --base-name rabbit-introduction \\\n" \
80
+ " --markup-language rd \\\n" \
81
+ " --name \"Kouhei Sutou\" \\\n" \
82
+ " --email kou@cozmixng.org \\\n" \
83
+ " --rubygems-user kou \\\n" \
84
+ " --slideshare-user kou \\\n" \
85
+ " --speaker-deck-user kou")
86
+
87
+ program = File.basename($0, ".*")
88
+ parser.banner = format % [program, program]
89
+
90
+ parser.separator("")
91
+ parser.separator(_("COMMAND"))
92
+ parser.separator(_(" new: create a new slide"))
93
+ parser.separator(_(" change: change an existing slide"))
94
+
95
+ parser.separator("")
96
+ parser.separator(_("Slide information"))
97
+
98
+ parser.on("--id=ID",
99
+ _("Slide ID"),
100
+ _("(e.g.: %s)") % "--id=rubykaigi2012",
101
+ _("(must)")) do |id|
102
+ @slide_conf.id = id
103
+ end
103
104
 
104
- available_markup_languages = [:rd, :hiki, :markdown]
105
- label = "[" + available_markup_languages.join(", ") + "]"
106
- messages = [
107
- _("Markup language for the new slide"),
108
- _("(e.g.: %s)") % "--markup-language=rd",
109
- _("(available markup languages: %s)") % label,
110
- ]
111
- if @author_conf.markup_language
112
- messages << _("(default: %s)") % @author_conf.markup_language
113
- end
114
- messages << _("(optional)")
115
- parser.on("--markup-language=LANGUAGE", available_markup_languages,
116
- *messages) do |language|
117
- @author_conf.markup_language = language
118
- end
105
+ messages = [
106
+ _("Base name for the slide source file and generated PDF file"),
107
+ _("(e.g.: %s)") % "--base-name=rabbit-introduction",
108
+ _("(must)"),
109
+ ]
110
+ parser.on("--base-name=NAME",
111
+ *messages) do |base_name|
112
+ @slide_conf.base_name = base_name
113
+ end
119
114
 
120
- parser.on("--title=TITLE",
121
- _("Title of the new slide"),
122
- _("(e.g.: %s)") % _("--title=\"Rabbit Introduction\""),
123
- _("(optional)")) do |title|
124
- @title = title
125
- end
115
+ available_markup_languages = [:rd, :hiki, :markdown]
116
+ label = "[" + available_markup_languages.join(", ") + "]"
117
+ messages = [
118
+ _("Markup language for the new slide"),
119
+ _("(e.g.: %s)") % "--markup-language=rd",
120
+ _("(available markup languages: %s)") % label,
121
+ ]
122
+ if @author_conf.markup_language
123
+ messages << _("(default: %s)") % @author_conf.markup_language
124
+ end
125
+ messages << _("(optional)")
126
+ parser.on("--markup-language=LANGUAGE", available_markup_languages,
127
+ *messages) do |language|
128
+ @author_conf.markup_language = language
129
+ end
126
130
 
127
- parser.on("--tags=TAG,TAG,...",
128
- Array,
129
- _("Tags of the new slide"),
130
- _("(e.g.: %s)") % "--tags=rabbit,presentation,ruby",
131
- _("(optional)")) do |tags|
132
- @slide_conf.tags.concat(tags)
133
- end
131
+ parser.on("--title=TITLE",
132
+ _("Title of the new slide"),
133
+ _("(e.g.: %s)") % _("--title=\"Rabbit Introduction\""),
134
+ _("(optional)")) do |title|
135
+ @title = title
136
+ end
134
137
 
135
- parser.on("--allotted-time=TIME",
136
- _("Allotted time in presentaion"),
137
- _("(e.g.: %s)") % "--allotted-time=5m",
138
- _("(optional)")) do |allotted_time|
139
- @allotted_time = allotted_time
140
- end
138
+ parser.on("--tags=TAG,TAG,...",
139
+ Array,
140
+ _("Tags of the new slide"),
141
+ _("(e.g.: %s)") % "--tags=rabbit,presentation,ruby",
142
+ _("(optional)")) do |tags|
143
+ @slide_conf.tags.concat(tags)
144
+ end
141
145
 
142
- parser.on("--presentation-date=DATE",
143
- _("Presentation date with the new slide"),
144
- _("(e.g.: %s)") % "--presentation-date=2012/06/29",
145
- _("(optional)")) do |date|
146
- @slide_conf.presentation_date = date
147
- end
146
+ parser.on("--allotted-time=TIME",
147
+ _("Allotted time in presentaion"),
148
+ _("(e.g.: %s)") % "--allotted-time=5m",
149
+ _("(optional)")) do |allotted_time|
150
+ @allotted_time = allotted_time
151
+ end
148
152
 
149
- parser.separator(_("Your information"))
153
+ parser.on("--presentation-date=DATE",
154
+ _("Presentation date with the new slide"),
155
+ _("(e.g.: %s)") % "--presentation-date=2012/06/29",
156
+ _("(optional)")) do |date|
157
+ @slide_conf.presentation_date = date
158
+ end
150
159
 
151
- messages = [
152
- _("Author name of the new slide"),
153
- _("(e.g.: %s)") % "--name=\"Kouhei Sutou\"",
154
- ]
155
- if @author_conf.name
156
- messages << _("(default: %s)") % @author_conf.name
157
- end
158
- messages << _("(optional)")
159
- parser.on("--name=NAME",
160
- *messages) do |name|
161
- @author_conf.name = name
162
- end
160
+ parser.separator(_("Your information"))
163
161
 
164
- messages = [
165
- _("Author e-mail of the new slide"),
166
- _("(e.g.: %s)") % "--email=kou@cozmixng.org",
167
- ]
168
- if @author_conf.email
169
- messages << _("(default: %s)") % @author_conf.email
170
- end
171
- messages << _("(optional)")
172
- parser.on("--email=EMAIL",
173
- *messages) do |email|
174
- @author_conf.email = email
175
- end
162
+ messages = [
163
+ _("Author name of the new slide"),
164
+ _("(e.g.: %s)") % "--name=\"Kouhei Sutou\"",
165
+ ]
166
+ if @author_conf.name
167
+ messages << _("(default: %s)") % @author_conf.name
168
+ end
169
+ messages << _("(optional)")
170
+ parser.on("--name=NAME",
171
+ *messages) do |name|
172
+ @author_conf.name = name
173
+ end
176
174
 
177
- messages = [
178
- _("Account for %s") % "RubyGems.org",
179
- _("It is used to publish your slide to %s") % "RubyGems.org",
180
- _("(e.g.: %s)") % "--rubygems-user=kou",
181
- ]
182
- if @author_conf.rubygems_user
183
- messages << _("(default: %s)") % @author_conf.rubygems_user
184
- end
185
- messages << _("(optional)")
186
- parser.on("--rubygems-user=USER",
187
- *messages) do |user|
188
- @author_conf.rubygems_user = user
189
- end
175
+ messages = [
176
+ _("Author e-mail of the new slide"),
177
+ _("(e.g.: %s)") % "--email=kou@cozmixng.org",
178
+ ]
179
+ if @author_conf.email
180
+ messages << _("(default: %s)") % @author_conf.email
181
+ end
182
+ messages << _("(optional)")
183
+ parser.on("--email=EMAIL",
184
+ *messages) do |email|
185
+ @author_conf.email = email
186
+ end
190
187
 
191
- messages = [
192
- _("Account for %s") % "SlideShare",
193
- _("It is used to publish your slide to %s") % "SlideShare",
194
- _("(e.g.: %s)") % "--slideshare-user=kou",
195
- ]
196
- if @author_conf.slideshare_user
197
- messages << _("(default: %s)") % @author_conf.slideshare_user
198
- end
199
- messages << _("(optional)")
200
- parser.on("--slideshare-user=USER",
201
- *messages) do |user|
202
- @author_conf.slideshare_user = user
203
- end
188
+ messages = [
189
+ _("Account for %s") % "RubyGems.org",
190
+ _("It is used to publish your slide to %s") % "RubyGems.org",
191
+ _("(e.g.: %s)") % "--rubygems-user=kou",
192
+ ]
193
+ if @author_conf.rubygems_user
194
+ messages << _("(default: %s)") % @author_conf.rubygems_user
195
+ end
196
+ messages << _("(optional)")
197
+ parser.on("--rubygems-user=USER",
198
+ *messages) do |user|
199
+ @author_conf.rubygems_user = user
200
+ end
204
201
 
205
- messages = [
206
- _("Account for %s") % "Speaker Deck",
207
- _("It is used to publish your slide to %s") % "Speaker Deck",
208
- _("(e.g.: %s)") % "--speaker-deck-user=kou",
209
- ]
210
- if @author_conf.speaker_deck_user
211
- messages << _("(default: %s)") % @author_conf.speaker_deck_user
212
- end
213
- messages << _("(optional)")
214
- parser.on("--speaker-deck-user=USER",
215
- *messages) do |user|
216
- @author_conf.speaker_deck_user = user
217
- end
202
+ messages = [
203
+ _("Account for %s") % "SlideShare",
204
+ _("It is used to publish your slide to %s") % "SlideShare",
205
+ _("(e.g.: %s)") % "--slideshare-user=kou",
206
+ ]
207
+ if @author_conf.slideshare_user
208
+ messages << _("(default: %s)") % @author_conf.slideshare_user
209
+ end
210
+ messages << _("(optional)")
211
+ parser.on("--slideshare-user=USER",
212
+ *messages) do |user|
213
+ @author_conf.slideshare_user = user
214
+ end
215
+
216
+ messages = [
217
+ _("Account for %s") % "Speaker Deck",
218
+ _("It is used to publish your slide to %s") % "Speaker Deck",
219
+ _("(e.g.: %s)") % "--speaker-deck-user=kou",
220
+ ]
221
+ if @author_conf.speaker_deck_user
222
+ messages << _("(default: %s)") % @author_conf.speaker_deck_user
223
+ end
224
+ messages << _("(optional)")
225
+ parser.on("--speaker-deck-user=USER",
226
+ *messages) do |user|
227
+ @author_conf.speaker_deck_user = user
218
228
  end
219
229
  end
220
230
 
231
+ def default_command
232
+ if File.file("config.yaml")
233
+ "change"
234
+ else
235
+ "new"
236
+ end
237
+ end
238
+
239
+ def available_commands
240
+ ["new", "change"]
241
+ end
242
+
221
243
  def validate
222
244
  @validation_errors = []
223
245
  validate_command
@@ -226,17 +248,13 @@ module Rabbit
226
248
  end
227
249
 
228
250
  def validate_command
229
- if @options.rest.empty?
230
- @options.rest << "new"
231
- end
232
- if @options.rest.size != 1
251
+ if @options.rest.size > 1
233
252
  message = _("too many commands: %s") % @options.rest.inspect
234
253
  @validation_errors << message
235
254
  end
236
- @command = @options.rest[0]
237
- if @command != "new"
255
+ unless available_commands.include?(@command)
238
256
  format = _("invalid command: <%s>: available commands: %s")
239
- message = format % [@command, "[new]"]
257
+ message = format % [@command, "[#{available_commands.join(', ')}]"]
240
258
  @validation_errors << message
241
259
  end
242
260
  end
@@ -253,8 +271,33 @@ module Rabbit
253
271
  end
254
272
  end
255
273
 
256
- def generate
274
+ def run_command
275
+ __send__("run_command_#{@command}")
276
+ end
277
+
278
+ def run_command_new
257
279
  generate_directory
280
+ generate_template
281
+ end
282
+
283
+ def run_command_change
284
+ merge_config_yaml
285
+ generate_template
286
+ end
287
+
288
+ def merge_config_yaml
289
+ existing_slide_conf = SlideConfiguration.new(@logger)
290
+ existing_slide_conf.load
291
+ existing_slide_conf.merge!(@slide_conf.to_hash)
292
+ @slide_conf = existing_slide_conf
293
+ @author_conf = @slide_conf.author
294
+ end
295
+
296
+ def generate_directory
297
+ create_directory(base_directory)
298
+ end
299
+
300
+ def generate_template
258
301
  generate_dot_gitignore
259
302
  generate_dot_rabbit
260
303
  generate_slide_configuration
@@ -263,10 +306,6 @@ module Rabbit
263
306
  generate_slide
264
307
  end
265
308
 
266
- def generate_directory
267
- create_directory(@slide_conf.id)
268
- end
269
-
270
309
  def generate_dot_gitignore
271
310
  create_file(".gitignore") do |dot_gitignore|
272
311
  dot_gitignore.puts(<<-EOD)
@@ -289,7 +328,7 @@ EOD
289
328
  end
290
329
 
291
330
  def generate_slide_configuration
292
- @slide_conf.save(@slide_conf.id)
331
+ @slide_conf.save(base_directory)
293
332
  end
294
333
 
295
334
  def generate_readme
@@ -342,7 +381,6 @@ require "rabbit/task/slide"
342
381
  # Edit ./config.yaml to customize meta data
343
382
 
344
383
  Rabbit::Task::Slide.new do |task|
345
- # task.spec.licenses = ["CC BY-SA 3.0"]
346
384
  # task.spec.files += Dir.glob("doc/**/*.*")
347
385
  # task.spec.files -= Dir.glob("private/**/*.*")
348
386
  # task.spec.add_runtime_dependency("YOUR THEME")
@@ -429,7 +467,7 @@ EOR
429
467
  end
430
468
  end
431
469
  end
432
- source << "\n\n"
470
+ source << "\n"
433
471
  end
434
472
 
435
473
  def slide_source_items(source, generator)
@@ -449,8 +487,17 @@ EOR
449
487
  source << "\n"
450
488
  end
451
489
 
490
+ def base_directory
491
+ case @command
492
+ when "change"
493
+ "."
494
+ else
495
+ @slide_conf.id
496
+ end
497
+ end
498
+
452
499
  def create_file(path, &block)
453
- super(File.join(@slide_conf.id, path), &block)
500
+ super(File.join(base_directory, path), &block)
454
501
  end
455
502
  end
456
503
  end