Class: GitPresenter::Presentation

Inherits:
Object
  • Object
show all
Defined in:
lib/git_presenter/presentation.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(presentation, shell = GitPresenter::Shell.new) ⇒ Presentation

Returns a new instance of Presentation.



4
5
6
7
8
9
# File 'lib/git_presenter/presentation.rb', line 4

def initialize(presentation, shell=GitPresenter::Shell.new)
  @branch = presentation["branch"]
  @slides = presentation["slides"].map{|slide| GitPresenter::Slide.new(slide["slide"])}
  @shell = shell
  @current_slide = find_current_slide
end

Instance Attribute Details

#current_slideObject (readonly)

Returns the value of attribute current_slide.



2
3
4
# File 'lib/git_presenter/presentation.rb', line 2

def current_slide
  @current_slide
end

#slidesObject (readonly)

Returns the value of attribute slides.



2
3
4
# File 'lib/git_presenter/presentation.rb', line 2

def slides
  @slides
end

Instance Method Details

#bash_command(user_command) ⇒ Object



40
41
42
# File 'lib/git_presenter/presentation.rb', line 40

def bash_command(user_command)
  puts `#{user_command[1..-1]}`
end

#command_for(command) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/git_presenter/presentation.rb', line 16

def command_for(command)
  return :commit if command =~ /^[0-9]+$/
  return :command if command[0] == "!"
  {"n" => :next, "next" => :next,
   "back" => :previous, "b" => :previous,
   "start" => :start, "s" => :start,
   "end" => :end, "e" => :end,
   "list" => :list, "l" => :list,
   "help" => :help, "h" => :help,
   "exit" => :exit
  }[command]
end

#commit(slide_number) ⇒ Object



86
87
88
89
# File 'lib/git_presenter/presentation.rb', line 86

def commit(slide_number)
  @current_slide = slides[slide_number - 1]
  @current_slide.execute
end

#endObject



81
82
83
84
# File 'lib/git_presenter/presentation.rb', line 81

def end
  @current_slide = slides.last
  @current_slide.execute
end

#execute(user_command) ⇒ Object



29
30
31
32
33
34
35
36
37
38
# File 'lib/git_presenter/presentation.rb', line 29

def execute(user_command)
  command = command_for(user_command)
  if command.nil?
    puts "I canny understand ye, gonna try again"
    return
  end
  return commit(user_command.to_i) if command == :commit
  return bash_command(user_command) if command == :command
  self.send(command)
end

#exitObject



48
49
50
51
# File 'lib/git_presenter/presentation.rb', line 48

def exit
  `git checkout -q #{@branch}`
  :exit
end

#find_current_slideObject



11
12
13
14
# File 'lib/git_presenter/presentation.rb', line 11

def find_current_slide
  sha = @shell.run("git rev-parse HEAD").strip
  @slides.detect{|s| s.commit == sha}
end

#helpObject



66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/git_presenter/presentation.rb', line 66

def help
  "Git Presenter Reference\n\nnext/n: move to next slide\nback/b: move back a slide\nend/e:  move to end of presentation\nstart/s: move to start of presentation\nlist/l : list slides in presentation\nhelp/h: display this message\n!(exclimation mark): execute following in terminal\nexit: exit from the presentation\n"
end

#listObject



103
104
105
106
107
108
109
110
111
# File 'lib/git_presenter/presentation.rb', line 103

def list
  @slides.map do |slide|
    if slide == @current_slide
      "*#{slide}"
    else
      slide
    end
  end.join("\n")
end

#nextObject



91
92
93
94
95
# File 'lib/git_presenter/presentation.rb', line 91

def next
  return if position.nil?
  @current_slide = slides[position + 1] || @current_slide
  @current_slide.execute
end

#positionObject



53
54
55
# File 'lib/git_presenter/presentation.rb', line 53

def position
  @slides.index(@current_slide)
end

#previousObject



97
98
99
100
101
# File 'lib/git_presenter/presentation.rb', line 97

def previous
  return @current_slide if position == 0
  @current_slide = slides[position - 1]
  @current_slide.execute
end

#startObject



61
62
63
64
# File 'lib/git_presenter/presentation.rb', line 61

def start
  @current_slide = slides.first
  @current_slide.execute
end

#status_lineObject



44
45
46
# File 'lib/git_presenter/presentation.rb', line 44

def status_line
  "#{position+1}/#{total_slides} >"
end

#total_slidesObject



57
58
59
# File 'lib/git_presenter/presentation.rb', line 57

def total_slides
  @slides.length
end