tp 0.0.1 → 0.0.2

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/.travis.yml ADDED
@@ -0,0 +1,9 @@
1
+ rvm:
2
+ - 1.9.2
3
+ - 1.9.3
4
+ - ruby-head
5
+ matrix:
6
+ allow_failures:
7
+ - rvm: 1.9.2
8
+ - rvm: ruby-head
9
+
data/Readme.md ADDED
@@ -0,0 +1,24 @@
1
+ # tp [![Build Status](https://secure.travis-ci.org/JustinCampbell/tp.png)](https://secure.travis-ci.org/JustinCampbell/tp) [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/JustinCampbell/tp)
2
+
3
+ Terminal Presenter
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'tp'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install tp
18
+
19
+ ## Usage
20
+
21
+ ```sh
22
+ tp presentation.md
23
+ ```
24
+
data/bin/tp CHANGED
@@ -4,4 +4,4 @@ $: << File.expand_path(File.join(File.dirname(__FILE__), "..", "lib"))
4
4
 
5
5
  require "tp"
6
6
 
7
- TP::Presenter.present File.read(ARGV[0])
7
+ TP::Presenter.new(File.read(ARGV[0])).present
data/lib/keyboard.rb ADDED
@@ -0,0 +1,7 @@
1
+ module Keyboard
2
+ extend self
3
+
4
+ def wait_for_enter
5
+ $stdin.gets
6
+ end
7
+ end
data/lib/screen.rb ADDED
@@ -0,0 +1,15 @@
1
+ module Screen
2
+ extend self
3
+
4
+ def clear!
5
+ print "\e[2J\e[f"
6
+ end
7
+
8
+ def height
9
+ `tput lines`.to_i
10
+ end
11
+
12
+ def width
13
+ `tput cols`.to_i
14
+ end
15
+ end
@@ -0,0 +1,48 @@
1
+ module TP
2
+ class Presenter
3
+ attr_accessor :markdown
4
+
5
+ def initialize(markdown)
6
+ self.markdown = markdown
7
+ end
8
+
9
+ def present
10
+ slides.each do |slide|
11
+ Screen.clear!
12
+ show_slide slide
13
+ Keyboard.wait_for_enter
14
+ end
15
+
16
+ Screen.clear!
17
+ end
18
+
19
+ def slides
20
+ result = markdown.split /^# /
21
+ result.reject! &:empty?
22
+ result.map! { |string| string.prepend "#" }
23
+
24
+ result.map { |string| Slide.new string }
25
+ end
26
+
27
+ def show_slide(slide)
28
+ buffer = slide.header.center Screen.width
29
+
30
+ if slide.body
31
+ buffer << "\n\n"
32
+
33
+ if slide.paragraph
34
+ buffer << slide.paragraph.center(Screen.width)
35
+ else
36
+ slide.bullets.each { |string| buffer << "#{bullet}#{string}\n" }
37
+ end
38
+ end
39
+
40
+ print buffer
41
+ end
42
+
43
+ def bullet
44
+ "\u2022 "
45
+ end
46
+ end
47
+ end
48
+
data/lib/tp/slide.rb ADDED
@@ -0,0 +1,33 @@
1
+ module TP
2
+ class Slide
3
+ attr_accessor :markdown
4
+
5
+ def initialize(markdown)
6
+ self.markdown = markdown.strip
7
+ end
8
+
9
+ def header
10
+ match = markdown.match /^#\s*(.+)(?:\n)*/
11
+
12
+ match[1] if match
13
+ end
14
+
15
+ def body
16
+ match = markdown.match /^#\s*.+\n\n(.*)/m
17
+
18
+ match[1] if match
19
+ end
20
+
21
+ def bullets
22
+ return unless body
23
+
24
+ result = body.scan(/^\*\s+(.+)/).flatten
25
+
26
+ result if result.any?
27
+ end
28
+
29
+ def paragraph
30
+ body unless bullets
31
+ end
32
+ end
33
+ end
data/lib/tp/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module TP
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/tp.rb CHANGED
@@ -1,15 +1,7 @@
1
- require "tp/version"
1
+ require 'keyboard'
2
+ require 'screen'
2
3
 
3
- module TP
4
- class Presenter
5
- def self.present(markdown)
6
- slides = markdown.split(/^# /).keep_if { |string| string != "" }.map { |string| "# " + string }
4
+ require 'tp/presenter'
5
+ require 'tp/slide'
6
+ require 'tp/version'
7
7
 
8
- slides.each do |slide|
9
- print "\e[2J\e[f"
10
- puts slide
11
- $stdin.gets
12
- end
13
- end
14
- end
15
- end
@@ -0,0 +1,15 @@
1
+ require 'keyboard'
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Keyboard do
6
+ describe ".wait_for_enter" do
7
+ subject(:wait_for_enter) { klass.wait_for_enter }
8
+
9
+ it "waits for enter" do
10
+ $stdin.should_receive :gets
11
+
12
+ wait_for_enter
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,31 @@
1
+ require 'screen'
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Screen do
6
+ describe ".clear!" do
7
+ subject(:clear!) { klass.clear! }
8
+
9
+ it "clears the screen" do
10
+ Screen.should_receive(:print).with("\e[2J\e[f")
11
+
12
+ clear!
13
+ end
14
+ end
15
+
16
+ describe ".height" do
17
+ subject(:height) { klass.height }
18
+
19
+ it "returns the height" do
20
+ height.should be_nonzero
21
+ end
22
+ end
23
+
24
+ describe ".width" do
25
+ subject(:width) { klass.width }
26
+
27
+ it "returns the width" do
28
+ width.should be_nonzero
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+
3
+ describe TP::Presenter do
4
+ subject(:presenter) { klass.new markdown }
5
+
6
+ let(:markdown) {
7
+ <<-MD.gsub(/^ {6}/, '')
8
+ # Header by itself
9
+
10
+ # Bullets
11
+
12
+ * Bullet 1
13
+ * Bullet 2
14
+
15
+ # Paragraph
16
+
17
+ This is a really long paragraph. Kinda.
18
+ MD
19
+ }
20
+
21
+ before :each do
22
+ Screen.stub width: 20, height: 20
23
+ end
24
+
25
+ describe "#present" do
26
+ it "works" do
27
+ Keyboard.should_receive(:wait_for_enter).exactly(3).times
28
+ Screen.should_receive(:clear!).exactly(4).times
29
+
30
+ presenter.should_receive(:print).exactly(3).times
31
+
32
+ presenter.present
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,57 @@
1
+ require 'spec_helper'
2
+
3
+ describe TP::Slide do
4
+ subject(:slide) { klass.new markdown }
5
+
6
+ let(:markdown) {
7
+ "# First Slide\n\n* Bullet 1\n* Bullet 2"
8
+ }
9
+
10
+ its(:markdown) { should == markdown }
11
+
12
+ context "with bullets" do
13
+ let(:markdown) {
14
+ "# First Slide\n\n* Bullet 1\n* Bullet 2"
15
+ }
16
+
17
+ its(:header) { should == "First Slide" }
18
+ its(:body) { should == "* Bullet 1\n* Bullet 2" }
19
+
20
+ its(:bullets) { should =~ ["Bullet 1", "Bullet 2"] }
21
+ its(:paragraph) { should be_nil }
22
+ end
23
+
24
+ context "with a paragraph" do
25
+ let(:markdown) {
26
+ "# First Slide\n\nThis is a paragraph of text"
27
+ }
28
+
29
+ its(:header) { should == "First Slide" }
30
+ its(:body) { should == "This is a paragraph of text" }
31
+
32
+ its(:bullets) { should be_nil }
33
+ its(:paragraph) { should == "This is a paragraph of text" }
34
+ end
35
+
36
+ context "with just a header" do
37
+ let(:markdown) {
38
+ "# First Slide"
39
+ }
40
+
41
+ its(:header) { should == "First Slide" }
42
+ its(:body) { should be_nil }
43
+
44
+ its(:bullets) { should be_nil }
45
+ its(:paragraph) { should be_nil }
46
+ end
47
+
48
+ context "with trailing newlines" do
49
+ let(:markdown) {
50
+ "# First Slide\n\n* Bullet 1\n* Bullet 2\n\n"
51
+ }
52
+
53
+ it "strips whitespace" do
54
+ slide.markdown.should == "# First Slide\n\n* Bullet 1\n* Bullet 2"
55
+ end
56
+ end
57
+ end
data/spec/lib/tp_spec.rb CHANGED
@@ -1,18 +1,5 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe TP::Presenter do
4
- describe ".present" do
5
- subject(:present) { klass.present markdown }
6
- let(:markdown) {
7
- "# First Slide\n\n* Bullet 1\n* Bullet 2\n\n# Second Slide"
8
- }
9
-
10
- it "works" do
11
- klass.should_receive(:print).twice
12
- klass.should_receive(:puts).twice
13
- $stdin.should_receive(:gets).twice
14
-
15
- present
16
- end
17
- end
3
+ describe TP do
4
+ it { klass.should be_a Module }
18
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -85,14 +85,23 @@ extra_rdoc_files: []
85
85
  files:
86
86
  - .gitignore
87
87
  - .rspec
88
+ - .travis.yml
88
89
  - Gemfile
89
90
  - Guardfile
90
91
  - LICENSE.txt
91
- - README.md
92
92
  - Rakefile
93
+ - Readme.md
93
94
  - bin/tp
95
+ - lib/keyboard.rb
96
+ - lib/screen.rb
94
97
  - lib/tp.rb
98
+ - lib/tp/presenter.rb
99
+ - lib/tp/slide.rb
95
100
  - lib/tp/version.rb
101
+ - spec/lib/keyboard_spec.rb
102
+ - spec/lib/screen_spec.rb
103
+ - spec/lib/tp/presenter_spec.rb
104
+ - spec/lib/tp/slide_spec.rb
96
105
  - spec/lib/tp_spec.rb
97
106
  - spec/spec_helper.rb
98
107
  - spec/support/klass.rb
@@ -122,6 +131,10 @@ signing_key:
122
131
  specification_version: 3
123
132
  summary: tp
124
133
  test_files:
134
+ - spec/lib/keyboard_spec.rb
135
+ - spec/lib/screen_spec.rb
136
+ - spec/lib/tp/presenter_spec.rb
137
+ - spec/lib/tp/slide_spec.rb
125
138
  - spec/lib/tp_spec.rb
126
139
  - spec/spec_helper.rb
127
140
  - spec/support/klass.rb
data/README.md DELETED
@@ -1,29 +0,0 @@
1
- # Tp
2
-
3
- TODO: Write a gem description
4
-
5
- ## Installation
6
-
7
- Add this line to your application's Gemfile:
8
-
9
- gem 'tp'
10
-
11
- And then execute:
12
-
13
- $ bundle
14
-
15
- Or install it yourself as:
16
-
17
- $ gem install tp
18
-
19
- ## Usage
20
-
21
- TODO: Write usage instructions here
22
-
23
- ## Contributing
24
-
25
- 1. Fork it
26
- 2. Create your feature branch (`git checkout -b my-new-feature`)
27
- 3. Commit your changes (`git commit -am 'Add some feature'`)
28
- 4. Push to the branch (`git push origin my-new-feature`)
29
- 5. Create new Pull Request