txtbook 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.
@@ -0,0 +1,23 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'autotest/restart'
4
+
5
+ # Autotest.add_hook :initialize do |at|
6
+ # at.extra_files << "../some/external/dependency.rb"
7
+ #
8
+ # at.libs << ":../some/external"
9
+ #
10
+ # at.add_exception 'vendor'
11
+ #
12
+ # at.add_mapping(/dependency.rb/) do |f, _|
13
+ # at.files_matching(/test_.*rb$/)
14
+ # end
15
+ #
16
+ # %w(TestA TestB).each do |klass|
17
+ # at.extra_class_map[klass] = "test/test_misc.rb"
18
+ # end
19
+ # end
20
+
21
+ # Autotest.add_hook :run_command do |at|
22
+ # system "rake build"
23
+ # end
@@ -0,0 +1 @@
1
+ pkg
@@ -0,0 +1,50 @@
1
+ = txtbook
2
+
3
+ http://github.com/bjrady/txtbook/tree/master
4
+
5
+ == DESCRIPTION:
6
+
7
+ A presentation and training class generation and packaging tool based on rake
8
+
9
+ == FEATURES/PROBLEMS:
10
+
11
+ * Basic templating of keynote '08 files is currently supported
12
+
13
+ == SYNOPSIS:
14
+
15
+ txtbook myNewPresentation
16
+ cd myNewPresentation
17
+ rake
18
+
19
+ == REQUIREMENTS:
20
+
21
+ * Ruby 1.8 or later
22
+
23
+ == INSTALL:
24
+
25
+ * sudo gem install txtbook
26
+
27
+ == LICENSE:
28
+
29
+ (The MIT License)
30
+
31
+ Copyright (c) 2009 Ben Rady
32
+
33
+ Permission is hereby granted, free of charge, to any person obtaining
34
+ a copy of this software and associated documentation files (the
35
+ 'Software'), to deal in the Software without restriction, including
36
+ without limitation the rights to use, copy, modify, merge, publish,
37
+ distribute, sublicense, and/or sell copies of the Software, and to
38
+ permit persons to whom the Software is furnished to do so, subject to
39
+ the following conditions:
40
+
41
+ The above copyright notice and this permission notice shall be
42
+ included in all copies or substantial portions of the Software.
43
+
44
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
45
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
46
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
47
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
48
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
49
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
50
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,21 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'rubygems'
4
+ require 'hoe'
5
+
6
+ begin
7
+ require 'jeweler'
8
+ Jeweler::Tasks.new do |gemspec|
9
+ gemspec.name = "txtbook"
10
+ gemspec.summary = "Code templating for Keynote"
11
+ gemspec.description = "Allows you to insert code snippets into keynote file to create training classes or technical presentations"
12
+ gemspec.email = "benrady@gmail.com"
13
+ gemspec.homepage = "http://github.com/bjrady/txtbook"
14
+ gemspec.authors = ["Ben Rady"]
15
+ end
16
+ Jeweler::GemcutterTasks.new
17
+ rescue LoadError
18
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
19
+ end
20
+
21
+ # vim: syntax=ruby
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib"))
3
+ require 'txtbook'
4
+
5
+ TxtBook::Factory.create(ARGV)
@@ -0,0 +1,51 @@
1
+ require 'fileutils'
2
+
3
+ module TxtBook
4
+ class Factory
5
+ def self.create(cmd_line_args)
6
+ textbook_root = cmd_line_args[0]
7
+ # DEBT Move to member var
8
+ template = File.join(File.dirname(__FILE__), 'txtbook', 'new_book_template')
9
+ FileUtils.cp_r(template, textbook_root)
10
+ end
11
+ end
12
+
13
+ class KeynoteBuilder
14
+ attr_accessor :snippets, :keynote_content, :work_dir
15
+
16
+ def initialize(book_dir)
17
+ @textbook = File.expand_path(book_dir)
18
+ @work_dir = File.join(@textbook, "work")
19
+ end
20
+
21
+ def unbind
22
+ FileUtils.mkdir_p @work_dir
23
+ Dir[File.join(@textbook, "slides/*.key")].each do |prez|
24
+ FileUtils.cp_r(prez, @work_dir)
25
+
26
+ # DEBT Untested
27
+ gunzip(File.join(@work_dir, File.basename(prez), "index.apxl.gz"))
28
+
29
+ @keynote_content = IO.read(File.join(@work_dir, File.basename(prez), "index.apxl"))
30
+ end
31
+ end
32
+
33
+ def press
34
+ @keynote_content.scan(/\$\{(.+?)\}/).each do |template|
35
+ @keynote_content.gsub!("${#{template}}", IO.read("snippets/#{template}"))
36
+ end
37
+ end
38
+
39
+ def rebind
40
+ Dir[File.join(@work_dir, "*.key")].each do |prez|
41
+ File.open(File.join(@work_dir, prez, "index.apxl"), "w+") do |file|
42
+ file.write @keynote_content
43
+ end
44
+ end
45
+ end
46
+
47
+ def gunzip(filename)
48
+ Kernel.system("gunzip --force #{filename}")
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,11 @@
1
+ require 'txtbook'
2
+ require 'rubygems'
3
+ require 'rake'
4
+
5
+ task :default do
6
+ builder = TxtBook::KeynoteBuilder.new(File.expand_path(File.dirname(__FILE__) + "/"))
7
+ builder.unbind
8
+ builder.press
9
+ builder.rebind
10
+ end
11
+
@@ -0,0 +1 @@
1
+ solutions to the exercises go here
@@ -0,0 +1 @@
1
+ exercises for instructors, students or audience members go here
@@ -0,0 +1,7 @@
1
+ public class Sample {
2
+ public int myVar;
3
+
4
+ public Sample() {
5
+ this.myVar = 1;
6
+ }
7
+ }
@@ -0,0 +1,85 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'spec_helper')
2
+ require 'ftools'
3
+ require 'fileutils'
4
+
5
+ #Inspiration:
6
+ # http://github.com/skippy/s3_rake_tasks/tree/master
7
+ # http://github.com/smtlaissezfaire/smt_rake_tasks/blob/a8137b860a6fa113a8ffcdb827012aaca9b62087/git.rb
8
+
9
+ module TxtBook
10
+ describe Factory do
11
+ it "can create a new TextBook" do
12
+ template = './spec/../lib/txtbook/new_book_template'
13
+ FileUtils.should_receive(:cp_r).with(template, 'new-book').ordered
14
+ Factory.create(['new-book'])
15
+ end
16
+ end
17
+
18
+ describe KeynoteBuilder do
19
+ before(:each) do
20
+ Factory.create(['temp-book'])
21
+ @builder = KeynoteBuilder.new('temp-book')
22
+ end
23
+
24
+ it "should copy the keynote08 template to a working directory" do
25
+ FileUtils.should_receive(:cp_r).with(full_path_to_textbook("slides/sample.key"),
26
+ full_path_to_textbook("work")).ordered
27
+ IO.should_receive(:read).ordered
28
+
29
+ @builder.unbind
30
+ end
31
+
32
+ it "should unbind keynote09 files"
33
+
34
+ it "should unbind keynote08 files" do
35
+ IO.stub!(:read).with(full_path_to_keynote("index.apxl")).and_return("${java/Sample.java}")
36
+ zipped_content = full_path_to_keynote("index.apxl.gz")
37
+ Kernel.should_receive(:system).with("gunzip --force #{zipped_content}")
38
+
39
+ @builder.unbind
40
+
41
+ @builder.keynote_content.should == "${java/Sample.java}"
42
+ end
43
+
44
+ it "should insert code snippets into keynote content" do
45
+ @builder.keynote_content = "${java/JavaSample.java}"
46
+ IO.stub!(:read).with("snippets/java/JavaSample.java").and_return("public class JavaSample")
47
+
48
+ @builder.press
49
+
50
+ @builder.keynote_content.should include("public class JavaSample")
51
+ end
52
+
53
+ it "should replace multiple code snippet templates in keynote content" do
54
+ @builder.keynote_content = "${java/Snippet1.java} other stuff ${java/Snippet2.java}"
55
+ IO.should_receive(:read).with("snippets/java/Snippet1.java").and_return("Snippet1")
56
+ IO.should_receive(:read).with("snippets/java/Snippet2.java").and_return("Snippet2")
57
+
58
+ @builder.press
59
+
60
+ @builder.keynote_content.should include("Snippet1 other stuff Snippet2")
61
+ end
62
+
63
+ it "should repack the new keynote content" do
64
+ @builder.keynote_content = "My Fake Java"
65
+ Dir.should_receive(:[]).with("#{@builder.work_dir}/*.key").and_return(['prez.key'])
66
+ file = mock(File)
67
+ file.should_receive(:write).with("My Fake Java")
68
+ File.should_receive(:open).with(full_path_to_textbook("work/prez.key/index.apxl"), "w+").and_yield(file)
69
+
70
+ @builder.rebind
71
+ end
72
+
73
+ def full_path_to_textbook(filepath)
74
+ File.expand_path(File.dirname(__FILE__) + "/../temp-book/#{filepath}")
75
+ end
76
+
77
+ def full_path_to_keynote(filename)
78
+ full_path_to_textbook("work/sample.key/#{filename}")
79
+ end
80
+
81
+ after(:each) do
82
+ FileUtils.rm_rf('temp-book')
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,4 @@
1
+ require 'rubygems'
2
+ gem 'rspec'
3
+ require 'spec'
4
+ require File.join(File.dirname(__FILE__), 'lib', "txtbook")
metadata ADDED
@@ -0,0 +1,74 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: txtbook
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Ben Rady
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-10-21 00:00:00 -05:00
13
+ default_executable: txtbook
14
+ dependencies: []
15
+
16
+ description: Allows you to insert code snippets into keynote file to create training classes or technical presentations
17
+ email: benrady@gmail.com
18
+ executables:
19
+ - txtbook
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README.txt
24
+ files:
25
+ - .autotest
26
+ - .gitignore
27
+ - README.txt
28
+ - Rakefile
29
+ - VERSION
30
+ - bin/txtbook
31
+ - lib/txtbook.rb
32
+ - lib/txtbook/new_book_template/Rakefile
33
+ - lib/txtbook/new_book_template/answers/README.txt
34
+ - lib/txtbook/new_book_template/exercises/README.txt
35
+ - lib/txtbook/new_book_template/slides/sample.key/Contents/PkgInfo
36
+ - lib/txtbook/new_book_template/slides/sample.key/QuickLook/Thumbnail.jpg
37
+ - lib/txtbook/new_book_template/slides/sample.key/index.apxl.gz
38
+ - lib/txtbook/new_book_template/slides/sample.key/thumbs/st0.tiff
39
+ - lib/txtbook/new_book_template/slides/sample.key/thumbs/st1.tiff
40
+ - lib/txtbook/new_book_template/slides/sample.key/thumbs/st2.tiff
41
+ - lib/txtbook/new_book_template/slides/sample.key/thumbs/st3.tiff
42
+ - lib/txtbook/new_book_template/snippets/java/Sample.java
43
+ - spec/txtbook_spec.rb
44
+ - spec_helper.rb
45
+ has_rdoc: true
46
+ homepage: http://github.com/bjrady/txtbook
47
+ licenses: []
48
+
49
+ post_install_message:
50
+ rdoc_options:
51
+ - --charset=UTF-8
52
+ require_paths:
53
+ - lib
54
+ required_ruby_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: "0"
59
+ version:
60
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: "0"
65
+ version:
66
+ requirements: []
67
+
68
+ rubyforge_project:
69
+ rubygems_version: 1.3.5
70
+ signing_key:
71
+ specification_version: 3
72
+ summary: Code templating for Keynote
73
+ test_files:
74
+ - spec/txtbook_spec.rb