tp 0.1.1 → 0.2.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.
data/Readme.md CHANGED
@@ -1,24 +1,56 @@
1
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
2
 
3
+ ![Screenshot](http://f.cl.ly/items/0P0V2l2q381S3m3J0p0U/Screen%20Shot%202012-08-14%20at%207.52.52%20AM.png)
4
+
5
+ ## Installation and Usage
6
+
7
+ ```sh
8
+ gem install tp
9
+ tp slides.md
10
+ ```
11
+
12
+ ## Slide Deck
13
+
14
+ ```md
15
+ # tp
16
+
17
+ # tp
18
+
3
19
  Terminal Presenter
4
20
 
5
- ## Installation
21
+ # tp
6
22
 
7
- Add this line to your application's Gemfile:
23
+ Presents Markdown in your terminal
8
24
 
9
- gem 'tp'
25
+ # Installation
10
26
 
11
- And then execute:
27
+ gem install tp
12
28
 
13
- $ bundle
29
+ # Usage
14
30
 
15
- Or install it yourself as:
31
+ tp slides.md
16
32
 
17
- $ gem install tp
33
+ # Navigation
18
34
 
19
- ## Usage
35
+ * Arrow keys
36
+ * Space/Enter/Backspace
37
+ * H,J,K,L (VIM)
38
+ * Q to quit
20
39
 
21
- ```sh
22
- tp presentation.md
40
+ # Paragraphs
41
+
42
+ Short paragraphs are centered
43
+
44
+ # Paragraphs
45
+
46
+ Sometimes paragraphs are really really long and might wrap a few lines. It does it's best to wrap them logically. Also, they stay left-aligned.
47
+
48
+ # Contribute
49
+
50
+ JustinCampbell/tp
51
+
52
+ # Thanks!
53
+
54
+ @JustinCampbell
23
55
  ```
24
56
 
data/lib/tp/presenter.rb CHANGED
@@ -11,18 +11,18 @@ module TP
11
11
  Keyboard.wait_for_return
12
12
 
13
13
  loop do
14
- Screen.clear!
15
-
16
- show_slide slide_deck.current or break
14
+ Renderer.new(slide_deck.current_slide).render
17
15
 
18
16
  case Keyboard.read
19
- when :right, :down, :space, :return, 'l', 'k'
17
+ when :right, :down, :space, :return, 'l', 'k', 'd', 's'
20
18
  slide_deck.next
21
- when :left, :up, :backspace, 'h', 'j'
19
+ when :left, :up, :backspace, 'h', 'j', 'a', 'w'
22
20
  slide_deck.previous
23
21
  when 'q'
24
22
  break
25
23
  end
24
+
25
+ break if slide_deck.ended?
26
26
  end
27
27
 
28
28
  Screen.clear!
@@ -39,33 +39,6 @@ module TP
39
39
  def slide_deck
40
40
  @slide_deck ||= SlideDeck.new slides
41
41
  end
42
-
43
- def show_slide(slide)
44
- return unless slide
45
-
46
- buffer = slide.header.center Screen.width
47
-
48
- if slide.body
49
- buffer << "\n\n"
50
-
51
- if slide.paragraph
52
- paragraph = slide.paragraph.wrap Screen.width
53
- paragraph = paragraph.center Screen.width if paragraph.lines.one?
54
-
55
- buffer << paragraph
56
- else
57
- slide.bullets.each { |string| buffer << "#{bullet}#{string}\n" }
58
- end
59
- end
60
-
61
- print buffer
62
-
63
- true
64
- end
65
-
66
- def bullet
67
- "\u2022 "
68
- end
69
42
  end
70
43
  end
71
44
 
@@ -0,0 +1,36 @@
1
+ module TP
2
+ class Renderer
3
+ BULLET = "\u2022 "
4
+
5
+ attr_accessor :slide
6
+
7
+ def initialize(slide)
8
+ self.slide = slide
9
+ end
10
+
11
+ def render
12
+ Screen.clear!
13
+
14
+ return unless slide
15
+
16
+ buffer = slide.header.center Screen.width
17
+
18
+ if slide.body
19
+ buffer << "\n\n"
20
+
21
+ if slide.paragraph
22
+ paragraph = slide.paragraph.wrap Screen.width
23
+ paragraph = paragraph.center Screen.width if paragraph.lines.one?
24
+
25
+ buffer << paragraph
26
+ else
27
+ slide.bullets.each { |string| buffer << "#{BULLET}#{string}\n" }
28
+ end
29
+ end
30
+
31
+ print buffer unless ENV['RUBY_ENV'] == 'test'
32
+
33
+ true
34
+ end
35
+ end
36
+ end
data/lib/tp/slide.rb CHANGED
@@ -7,15 +7,14 @@ module TP
7
7
  end
8
8
 
9
9
  def header
10
- match = markdown.match /^#\s*(.+)(?:\n)*/
11
-
12
- match[1] if match
10
+ line = lines.first
11
+ line[1, line.length - 1].to_s.strip
13
12
  end
14
13
 
15
14
  def body
16
- match = markdown.match /^#\s*.+\n\n(.*)/m
15
+ result = lines[2, lines.count - 2]
17
16
 
18
- match[1] if match
17
+ result.join "" if result
19
18
  end
20
19
 
21
20
  def bullets
@@ -29,5 +28,11 @@ module TP
29
28
  def paragraph
30
29
  body unless bullets
31
30
  end
31
+
32
+ private
33
+
34
+ def lines
35
+ markdown.lines.to_a
36
+ end
32
37
  end
33
38
  end
data/lib/tp/slide_deck.rb CHANGED
@@ -14,6 +14,11 @@ module TP
14
14
  def current
15
15
  slides[cursor]
16
16
  end
17
+ alias current_slide current
18
+
19
+ def ended?
20
+ not current
21
+ end
17
22
 
18
23
  def next
19
24
  self.cursor += 1
data/lib/tp/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module TP
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/tp.rb CHANGED
@@ -3,6 +3,7 @@ require 'screen'
3
3
  require 'string'
4
4
 
5
5
  require 'tp/presenter'
6
+ require 'tp/renderer'
6
7
  require 'tp/slide'
7
8
  require 'tp/slide_deck'
8
9
  require 'tp/version'
data/slides.md ADDED
@@ -0,0 +1,45 @@
1
+ # tp
2
+
3
+ # tp
4
+
5
+ Terminal Presenter
6
+
7
+ # tp
8
+
9
+ Presents Markdown in your terminal
10
+
11
+ # Installation
12
+
13
+ gem install tp
14
+
15
+ # Usage
16
+
17
+ tp slides.md
18
+
19
+ # Navigation
20
+
21
+ * Arrow keys
22
+ * Space/Enter/Backspace
23
+ * H,J,K,L
24
+ * W,A,S,D
25
+ * Q to quit
26
+
27
+ # Paragraphs
28
+
29
+ Short paragraphs are centered
30
+
31
+ # Paragraphs
32
+
33
+ Sometimes paragraphs are really really long and might wrap a few lines. It does it's best to wrap them logically. Also, they stay left-aligned.
34
+
35
+ #
36
+
37
+ Headers can also be blank
38
+
39
+ # Contribute
40
+
41
+ JustinCampbell/tp
42
+
43
+ # Thanks!
44
+
45
+ @JustinCampbell
@@ -26,9 +26,7 @@ describe TP::Presenter do
26
26
  describe "#present" do
27
27
  it "works" do
28
28
  Keyboard.should_receive(:wait_for_return).exactly(1).times
29
- Screen.should_receive(:clear!).exactly(5).times
30
-
31
- presenter.should_receive(:print).exactly(3).times
29
+ Screen.should_receive(:clear!).exactly(4).times
32
30
 
33
31
  presenter.present
34
32
  end
@@ -45,6 +45,18 @@ describe TP::Slide do
45
45
  its(:paragraph) { should be_nil }
46
46
  end
47
47
 
48
+ context "with a blank header" do
49
+ let(:markdown) {
50
+ "#\n\nFirst Slide"
51
+ }
52
+
53
+ its(:header) { should be_empty }
54
+ its(:body) { should == "First Slide" }
55
+
56
+ its(:bullets) { should be_nil }
57
+ its(:paragraph) { should == "First Slide" }
58
+ end
59
+
48
60
  context "with trailing newlines" do
49
61
  let(:markdown) {
50
62
  "# First Slide\n\n* Bullet 1\n* Bullet 2\n\n"
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,5 @@
1
+ ENV['RUBY_ENV'] ||= 'test'
2
+
1
3
  require 'support/klass'
2
4
 
3
5
  puts RUBY_DESCRIPTION
data/tp.gemspec CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |gem|
12
12
  gem.email = ["justin@justincampbell.me"]
13
13
  gem.description = "tp"
14
14
  gem.summary = "tp"
15
- gem.homepage = "http://github.com/JustinCampbell/tp"
15
+ gem.homepage = "http://github.com/justincampbell/tp"
16
16
 
17
17
  gem.files = `git ls-files`.split $/
18
18
  gem.executables = gem.files.grep(%r{^bin/}).map { |file| File.basename file }
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.1.1
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-12 00:00:00.000000000 Z
12
+ date: 2012-11-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: guard-rspec
@@ -97,9 +97,11 @@ files:
97
97
  - lib/string.rb
98
98
  - lib/tp.rb
99
99
  - lib/tp/presenter.rb
100
+ - lib/tp/renderer.rb
100
101
  - lib/tp/slide.rb
101
102
  - lib/tp/slide_deck.rb
102
103
  - lib/tp/version.rb
104
+ - slides.md
103
105
  - spec/lib/keyboard_spec.rb
104
106
  - spec/lib/screen_spec.rb
105
107
  - spec/lib/string_spec.rb
@@ -109,7 +111,7 @@ files:
109
111
  - spec/spec_helper.rb
110
112
  - spec/support/klass.rb
111
113
  - tp.gemspec
112
- homepage: http://github.com/JustinCampbell/tp
114
+ homepage: http://github.com/justincampbell/tp
113
115
  licenses: []
114
116
  post_install_message:
115
117
  rdoc_options: []