penguin 0.0.1.beta1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +18 -0
- data/Gemfile +3 -0
- data/LICENSE +22 -0
- data/README.md +28 -0
- data/Rakefile +11 -0
- data/assets/css/penguin.sass +45 -0
- data/assets/css/penguin/reset.sass +70 -0
- data/assets/js/penguin.coffee +27 -0
- data/assets/template/deck.coffee +3 -0
- data/assets/template/deck.haml +36 -0
- data/assets/template/deck.rb +7 -0
- data/assets/template/deck.sass +3 -0
- data/assets/template/favicon.ico +0 -0
- data/assets/template/layout.haml +12 -0
- data/bin/penguin +5 -0
- data/lib/penguin.rb +12 -0
- data/lib/penguin/application.rb +30 -0
- data/lib/penguin/cli.rb +30 -0
- data/lib/penguin/sprockets.rb +25 -0
- data/lib/penguin/version.rb +10 -0
- data/penguin.gemspec +29 -0
- data/spec/penguin/application_spec.rb +18 -0
- data/spec/penguin/cli_spec.rb +52 -0
- data/spec/spec_helper.rb +31 -0
- metadata +235 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2012 Jimmy Cuadra
|
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,28 @@
|
|
1
|
+
# Penguin
|
2
|
+
|
3
|
+
Penguin is a tool for creating web-based presentations using your preferred preprocessors.
|
4
|
+
|
5
|
+
## Command line interface
|
6
|
+
|
7
|
+
`penguin new NAME` to generate a new project.
|
8
|
+
`penguin` from inside a project directory to start the server.
|
9
|
+
|
10
|
+
## Configuration
|
11
|
+
|
12
|
+
All the files you will work with in creating your presentation use the basename "deck." Defaults are set for you when generating a new project with `penguin new`. For the HTML, CSS, and JS files, the file extensions should match whichever preprocessors you're using for the given type. The generator uses Haml, Sass, and CoffeeScript by default, but you can use any libraries you like.
|
13
|
+
|
14
|
+
* `deck.rb` is the configuration file. Require any HTML template engine and CSS/JS preprocessors you want here. Call `set :template_engine, :engine_name_here` to tell Penguin which library to use for generating your HTML.
|
15
|
+
|
16
|
+
* `deck.haml` is your presentation HTML.
|
17
|
+
|
18
|
+
* `deck.sass` is your presentation stylesheet.
|
19
|
+
|
20
|
+
* `deck.coffee` is your presentation JavaScript.
|
21
|
+
|
22
|
+
## Presentation format
|
23
|
+
|
24
|
+
Your presentation deck is plain HTML. Each slide is denoted by a top-level element with a class of `slide`.
|
25
|
+
|
26
|
+
## License
|
27
|
+
|
28
|
+
Penguin is available under the included MIT license. See `LICENSE` for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
@import penguin/reset
|
2
|
+
|
3
|
+
$lineHeight: 36px
|
4
|
+
|
5
|
+
body
|
6
|
+
background: steelblue
|
7
|
+
font-family: Arial, sans-serif
|
8
|
+
font-size: 28px
|
9
|
+
line-height: $lineHeight
|
10
|
+
|
11
|
+
h1, h2, h3, h4, h5, h6
|
12
|
+
text-align: center
|
13
|
+
|
14
|
+
h1
|
15
|
+
font-size: 48px
|
16
|
+
line-height: $lineHeight * 2
|
17
|
+
|
18
|
+
h2
|
19
|
+
font-size: 36px
|
20
|
+
line-height: $lineHeight * 2
|
21
|
+
|
22
|
+
h3
|
23
|
+
font-size: 30px
|
24
|
+
line-height: $lineHeight * 1.5
|
25
|
+
|
26
|
+
h4
|
27
|
+
font-size: 24px
|
28
|
+
|
29
|
+
h5
|
30
|
+
font-size: 20px
|
31
|
+
|
32
|
+
h6
|
33
|
+
font-size: 16px
|
34
|
+
|
35
|
+
.container
|
36
|
+
margin: 40px auto
|
37
|
+
width: 960px
|
38
|
+
|
39
|
+
.slide
|
40
|
+
display: none
|
41
|
+
&.current
|
42
|
+
display: block
|
43
|
+
|
44
|
+
.centered
|
45
|
+
text-align: center
|
@@ -0,0 +1,70 @@
|
|
1
|
+
html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, abbr, address, cite, code, del, dfn, em, img, ins, kbd, q, samp, small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary, time, mark, audio, video
|
2
|
+
background: transparent
|
3
|
+
border: 0
|
4
|
+
font-size: 100%
|
5
|
+
margin: 0
|
6
|
+
outline: 0
|
7
|
+
padding: 0
|
8
|
+
vertical-align: baseline
|
9
|
+
|
10
|
+
body
|
11
|
+
line-height: 1
|
12
|
+
|
13
|
+
article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section
|
14
|
+
display: block
|
15
|
+
|
16
|
+
nav ul
|
17
|
+
list-style: none
|
18
|
+
|
19
|
+
blockquote, q
|
20
|
+
quotes: none
|
21
|
+
|
22
|
+
blockquote
|
23
|
+
&:before, &:after
|
24
|
+
content: ''
|
25
|
+
content: none
|
26
|
+
|
27
|
+
q
|
28
|
+
&:before, &:after
|
29
|
+
content: ''
|
30
|
+
content: none
|
31
|
+
|
32
|
+
a
|
33
|
+
background: transparent
|
34
|
+
font-size: 100%
|
35
|
+
margin: 0
|
36
|
+
padding: 0
|
37
|
+
vertical-align: baseline
|
38
|
+
|
39
|
+
ins
|
40
|
+
background-color: #ff9
|
41
|
+
color: #000
|
42
|
+
text-decoration: none
|
43
|
+
|
44
|
+
mark
|
45
|
+
background-color: #ff9
|
46
|
+
color: #000
|
47
|
+
font-style: italic
|
48
|
+
font-weight: bold
|
49
|
+
|
50
|
+
del
|
51
|
+
text-decoration: line-through
|
52
|
+
|
53
|
+
abbr[title], dfn[title]
|
54
|
+
border-bottom: 1px dotted
|
55
|
+
cursor: help
|
56
|
+
|
57
|
+
table
|
58
|
+
border-collapse: collapse
|
59
|
+
border-spacing: 0
|
60
|
+
|
61
|
+
hr
|
62
|
+
border: 0
|
63
|
+
border-top: 1px solid #cccccc
|
64
|
+
display: block
|
65
|
+
height: 1px
|
66
|
+
margin: 1em 0
|
67
|
+
padding: 0
|
68
|
+
|
69
|
+
input, select
|
70
|
+
vertical-align: middle
|
@@ -0,0 +1,27 @@
|
|
1
|
+
$ ->
|
2
|
+
window.Penguin =
|
3
|
+
init: ->
|
4
|
+
@deck.show(@deck.currentSlide)
|
5
|
+
$(document).on("keyup", @deck.changeSlide.bind(@deck))
|
6
|
+
|
7
|
+
deck:
|
8
|
+
slides: $(".slide")
|
9
|
+
|
10
|
+
currentSlide: 0
|
11
|
+
|
12
|
+
show: (index) ->
|
13
|
+
@slides.removeClass("current")
|
14
|
+
@slides.eq(index).addClass("current")
|
15
|
+
|
16
|
+
changeSlide: (event) ->
|
17
|
+
switch event.keyCode
|
18
|
+
when 37
|
19
|
+
return if @currentSlide is 0
|
20
|
+
@currentSlide -= 1
|
21
|
+
@show(@currentSlide)
|
22
|
+
when 39
|
23
|
+
return if @currentSlide is @slides.length - 1
|
24
|
+
@currentSlide += 1
|
25
|
+
@show(@currentSlide)
|
26
|
+
|
27
|
+
Penguin.init()
|
@@ -0,0 +1,36 @@
|
|
1
|
+
.slide.centered
|
2
|
+
%h1 Penguin
|
3
|
+
|
4
|
+
%h2 A tool for making presentations.
|
5
|
+
|
6
|
+
%p Press the right arrow to continue.
|
7
|
+
|
8
|
+
.slide
|
9
|
+
%p Penguin is:
|
10
|
+
|
11
|
+
%ol
|
12
|
+
%li Simple
|
13
|
+
%li Flexible
|
14
|
+
%li Attractive
|
15
|
+
|
16
|
+
.slide
|
17
|
+
%p Source code looks great!
|
18
|
+
|
19
|
+
%pre
|
20
|
+
%code
|
21
|
+
:preserve
|
22
|
+
(function () {
|
23
|
+
var awesome = function (thing) {
|
24
|
+
console.log(thing + "is awesome!");
|
25
|
+
};
|
26
|
+
|
27
|
+
awesome("Penguin");
|
28
|
+
})();
|
29
|
+
|
30
|
+
.slide
|
31
|
+
%p Make a presentation with:
|
32
|
+
|
33
|
+
%ul
|
34
|
+
%li.step Haml
|
35
|
+
%li.step Sass
|
36
|
+
%li.step CoffeeScript
|
Binary file
|
@@ -0,0 +1,12 @@
|
|
1
|
+
-# You shouldn't need to edit this file.
|
2
|
+
!!! 5
|
3
|
+
%html{ lang: "en" }
|
4
|
+
%head
|
5
|
+
%meta{ charset: "utf-8" }
|
6
|
+
%title Penguin
|
7
|
+
%link{ rel: "stylesheet", href: "/assets/deck.css" }
|
8
|
+
%body
|
9
|
+
.container
|
10
|
+
= yield
|
11
|
+
%script{ src: "https://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"}
|
12
|
+
%script{ src: "/assets/deck.js" }
|
data/bin/penguin
ADDED
data/lib/penguin.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require "thor/shell"
|
2
|
+
|
3
|
+
module Penguin
|
4
|
+
autoload :Application, "penguin/application"
|
5
|
+
autoload :CLI, "penguin/cli"
|
6
|
+
autoload :Sprockets, "penguin/sprockets"
|
7
|
+
autoload :VERSION, "penguin/version"
|
8
|
+
|
9
|
+
def self.ui
|
10
|
+
@ui ||= Thor::Base.shell.new
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require "sinatra/base"
|
2
|
+
|
3
|
+
module Penguin
|
4
|
+
class Application < Sinatra::Base
|
5
|
+
set :root, Dir.pwd
|
6
|
+
set :public_folder, root
|
7
|
+
set :views, root
|
8
|
+
set :static, true
|
9
|
+
|
10
|
+
configure do
|
11
|
+
begin
|
12
|
+
eval File.read(File.expand_path("deck.rb", root))
|
13
|
+
rescue LoadError => e
|
14
|
+
gem_name = e.message.match(/\s(\S+)$/) && $1
|
15
|
+
Penguin.ui.say "A required gem was not found. Please run `gem install #{gem_name}` and try again.", :red
|
16
|
+
abort
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
use Sprockets do |env|
|
21
|
+
env.append_path root
|
22
|
+
env.append_path File.expand_path("../../../assets/css", __FILE__)
|
23
|
+
env.append_path File.expand_path("../../../assets/js", __FILE__)
|
24
|
+
end
|
25
|
+
|
26
|
+
get "/" do
|
27
|
+
send(settings.template_engine, :deck)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/penguin/cli.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
require "thor"
|
2
|
+
require "pathname"
|
3
|
+
|
4
|
+
module Penguin
|
5
|
+
class CLI < Thor
|
6
|
+
include Thor::Actions
|
7
|
+
|
8
|
+
def self.source_root
|
9
|
+
File.expand_path("../../../assets", __FILE__)
|
10
|
+
end
|
11
|
+
|
12
|
+
default_task :start
|
13
|
+
|
14
|
+
desc "start", "Start your presentation"
|
15
|
+
def start
|
16
|
+
if Pathname.new("deck.rb").exist?
|
17
|
+
say "Starting Penguin... Press control-C to stop.", :green
|
18
|
+
Application.run!
|
19
|
+
else
|
20
|
+
say "You must be inside a project. Run `penguin new NAME` to create one.", :red
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
desc "new NAME", "Create a new Penguin project called NAME"
|
25
|
+
def new(name)
|
26
|
+
directory "template", name
|
27
|
+
say "You're ready to slide with Penguin!", :green
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require "sprockets"
|
2
|
+
|
3
|
+
module Penguin
|
4
|
+
class Sprockets
|
5
|
+
PREFIX = %r{/assets}
|
6
|
+
|
7
|
+
def initialize(app)
|
8
|
+
@app = app
|
9
|
+
@sprockets = ::Sprockets::Environment.new
|
10
|
+
yield @sprockets if block_given?
|
11
|
+
end
|
12
|
+
|
13
|
+
def call(env)
|
14
|
+
path_info = env["PATH_INFO"]
|
15
|
+
if path_info =~ PREFIX
|
16
|
+
env["PATH_INFO"].sub!(PREFIX, "")
|
17
|
+
@sprockets.call(env)
|
18
|
+
else
|
19
|
+
@app.call(env)
|
20
|
+
end
|
21
|
+
ensure
|
22
|
+
env["PATH_INFO"] = path_info
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/penguin.gemspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/penguin/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Jimmy Cuadra"]
|
6
|
+
gem.email = ["jimmy@jimmycuadra.com"]
|
7
|
+
gem.description = %q{Penguin is a tool for creating presentations.}
|
8
|
+
gem.summary = %q{Penguin is a tool for creating web-based presentations using your preferred preprocessors.}
|
9
|
+
gem.homepage = "https://github.com/jimmycuadra/penguin"
|
10
|
+
|
11
|
+
gem.files = `git ls-files`.split($\)
|
12
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
13
|
+
gem.test_files = gem.files.grep(%r{^(spec)/})
|
14
|
+
gem.name = "penguin"
|
15
|
+
gem.require_paths = ["lib"]
|
16
|
+
gem.version = Penguin::VERSION::STRING
|
17
|
+
|
18
|
+
gem.add_runtime_dependency("sinatra", ">= 1.3")
|
19
|
+
gem.add_runtime_dependency("sprockets", ">= 2.4")
|
20
|
+
gem.add_runtime_dependency("thor", ">= 0.15")
|
21
|
+
|
22
|
+
gem.add_development_dependency("rspec", ">= 2.10")
|
23
|
+
gem.add_development_dependency("capybara", ">= 1.1")
|
24
|
+
gem.add_development_dependency("pry", ">= 0.9")
|
25
|
+
gem.add_development_dependency("pry-nav", ">= 0.2")
|
26
|
+
gem.add_development_dependency("haml", ">= 3.1")
|
27
|
+
gem.add_development_dependency("sass", ">= 3.1")
|
28
|
+
gem.add_development_dependency("coffee-script", ">= 2.2")
|
29
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Penguin::Application, type: :request do
|
4
|
+
it "makes slides available at the root path" do
|
5
|
+
visit "/"
|
6
|
+
page.should have_content("Penguin")
|
7
|
+
end
|
8
|
+
|
9
|
+
it "makes CSS accessible via Sprockets" do
|
10
|
+
visit "/assets/deck.css"
|
11
|
+
page.status_code.should == 200
|
12
|
+
end
|
13
|
+
|
14
|
+
it "makes JS accessible via Sprockets" do
|
15
|
+
visit "/assets/deck.js"
|
16
|
+
page.status_code.should == 200
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Penguin::CLI do
|
4
|
+
before do
|
5
|
+
Pathname.new("tmp").mkpath
|
6
|
+
Dir.chdir("tmp")
|
7
|
+
end
|
8
|
+
|
9
|
+
after do
|
10
|
+
Dir.chdir("..")
|
11
|
+
Pathname.new("tmp").rmtree
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "#start" do
|
15
|
+
context "inside a project" do
|
16
|
+
before do
|
17
|
+
silence(:stdout) { described_class.start(["new", "foo"]) }
|
18
|
+
Dir.chdir("foo")
|
19
|
+
end
|
20
|
+
|
21
|
+
after do
|
22
|
+
Dir.chdir("..")
|
23
|
+
end
|
24
|
+
|
25
|
+
it "starts up the server" do
|
26
|
+
Penguin::Application.should_receive(:run!)
|
27
|
+
silence(:stdout) { described_class.start(["start"]) }
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context "outside a project" do
|
32
|
+
it "outputs a message telling the user to create a project first" do
|
33
|
+
output = capture(:stdout) { described_class.start(["start"]) }
|
34
|
+
output.should include("must be inside a project")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "#new" do
|
40
|
+
it "creates a new directory with the given name" do
|
41
|
+
silence(:stdout) { described_class.start(["new", "foo"]) }
|
42
|
+
Pathname.new("foo").should be_a_directory
|
43
|
+
end
|
44
|
+
|
45
|
+
it "copies the presentation templates into the new directory" do
|
46
|
+
silence(:stdout) { described_class.start(["new", "foo"]) }
|
47
|
+
["rb", "haml", "sass", "coffee"].each do |ext|
|
48
|
+
Pathname.new("foo/deck.#{ext}").should be_a_file
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
ENV["RACK_ENV"] = "test"
|
2
|
+
|
3
|
+
require "penguin"
|
4
|
+
|
5
|
+
# Make the App (and Sprockets) think spec/dummy is the root
|
6
|
+
Dir.chdir("spec/dummy")
|
7
|
+
require "penguin/application"
|
8
|
+
Dir.chdir("../..")
|
9
|
+
|
10
|
+
require "pathname"
|
11
|
+
require "pry"
|
12
|
+
require "capybara/rspec"
|
13
|
+
|
14
|
+
RSpec.configure do |config|
|
15
|
+
Capybara.app = Penguin::Application
|
16
|
+
|
17
|
+
def capture(stream)
|
18
|
+
begin
|
19
|
+
stream = stream.to_s
|
20
|
+
eval "$#{stream} = StringIO.new"
|
21
|
+
yield
|
22
|
+
result = eval("$#{stream}").string
|
23
|
+
ensure
|
24
|
+
eval("$#{stream} = #{stream.upcase}")
|
25
|
+
end
|
26
|
+
|
27
|
+
result
|
28
|
+
end
|
29
|
+
|
30
|
+
alias :silence :capture
|
31
|
+
end
|
metadata
ADDED
@@ -0,0 +1,235 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: penguin
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1.beta1
|
5
|
+
prerelease: 6
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Jimmy Cuadra
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-06-16 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: sinatra
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.3'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.3'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: sprockets
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '2.4'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '2.4'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: thor
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0.15'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.15'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rspec
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '2.10'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '2.10'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: capybara
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '1.1'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '1.1'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: pry
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0.9'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0.9'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: pry-nav
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0.2'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0.2'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: haml
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '3.1'
|
134
|
+
type: :development
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '3.1'
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: sass
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ! '>='
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '3.1'
|
150
|
+
type: :development
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '3.1'
|
158
|
+
- !ruby/object:Gem::Dependency
|
159
|
+
name: coffee-script
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
161
|
+
none: false
|
162
|
+
requirements:
|
163
|
+
- - ! '>='
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '2.2'
|
166
|
+
type: :development
|
167
|
+
prerelease: false
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ! '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '2.2'
|
174
|
+
description: Penguin is a tool for creating presentations.
|
175
|
+
email:
|
176
|
+
- jimmy@jimmycuadra.com
|
177
|
+
executables:
|
178
|
+
- penguin
|
179
|
+
extensions: []
|
180
|
+
extra_rdoc_files: []
|
181
|
+
files:
|
182
|
+
- .gitignore
|
183
|
+
- Gemfile
|
184
|
+
- LICENSE
|
185
|
+
- README.md
|
186
|
+
- Rakefile
|
187
|
+
- assets/css/penguin.sass
|
188
|
+
- assets/css/penguin/reset.sass
|
189
|
+
- assets/js/penguin.coffee
|
190
|
+
- assets/template/deck.coffee
|
191
|
+
- assets/template/deck.haml
|
192
|
+
- assets/template/deck.rb
|
193
|
+
- assets/template/deck.sass
|
194
|
+
- assets/template/favicon.ico
|
195
|
+
- assets/template/layout.haml
|
196
|
+
- bin/penguin
|
197
|
+
- lib/penguin.rb
|
198
|
+
- lib/penguin/application.rb
|
199
|
+
- lib/penguin/cli.rb
|
200
|
+
- lib/penguin/sprockets.rb
|
201
|
+
- lib/penguin/version.rb
|
202
|
+
- penguin.gemspec
|
203
|
+
- spec/penguin/application_spec.rb
|
204
|
+
- spec/penguin/cli_spec.rb
|
205
|
+
- spec/spec_helper.rb
|
206
|
+
homepage: https://github.com/jimmycuadra/penguin
|
207
|
+
licenses: []
|
208
|
+
post_install_message:
|
209
|
+
rdoc_options: []
|
210
|
+
require_paths:
|
211
|
+
- lib
|
212
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
213
|
+
none: false
|
214
|
+
requirements:
|
215
|
+
- - ! '>='
|
216
|
+
- !ruby/object:Gem::Version
|
217
|
+
version: '0'
|
218
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
219
|
+
none: false
|
220
|
+
requirements:
|
221
|
+
- - ! '>'
|
222
|
+
- !ruby/object:Gem::Version
|
223
|
+
version: 1.3.1
|
224
|
+
requirements: []
|
225
|
+
rubyforge_project:
|
226
|
+
rubygems_version: 1.8.24
|
227
|
+
signing_key:
|
228
|
+
specification_version: 3
|
229
|
+
summary: Penguin is a tool for creating web-based presentations using your preferred
|
230
|
+
preprocessors.
|
231
|
+
test_files:
|
232
|
+
- spec/penguin/application_spec.rb
|
233
|
+
- spec/penguin/cli_spec.rb
|
234
|
+
- spec/spec_helper.rb
|
235
|
+
has_rdoc:
|