Class: Shellplay::Session

Inherits:
Object
  • Object
show all
Includes:
Cliprompt
Defined in:
lib/shellplay/session.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(input = STDIN, output = STDOUT) ⇒ Session



15
16
17
18
19
20
21
22
# File 'lib/shellplay/session.rb', line 15

def initialize(input = STDIN, output = STDOUT)
  @sequence = []
  @title = false
  @prompt = false
  @timeformat = false
  @config = Shellplay::Config.new(nil, input, output)
  @pointer = 0
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



13
14
15
# File 'lib/shellplay/session.rb', line 13

def config
  @config
end

#pointerObject (readonly)

Returns the value of attribute pointer.



13
14
15
# File 'lib/shellplay/session.rb', line 13

def pointer
  @pointer
end

#promptObject (readonly)

Returns the value of attribute prompt.



13
14
15
# File 'lib/shellplay/session.rb', line 13

def prompt
  @prompt
end

#sequenceObject (readonly)

Returns the value of attribute sequence.



13
14
15
# File 'lib/shellplay/session.rb', line 13

def sequence
  @sequence
end

#timeformatObject (readonly)

Returns the value of attribute timeformat.



13
14
15
# File 'lib/shellplay/session.rb', line 13

def timeformat
  @timeformat
end

#titleObject (readonly)

Returns the value of attribute title.



13
14
15
# File 'lib/shellplay/session.rb', line 13

def title
  @title
end

Instance Method Details

#add_screen(screenhash) ⇒ Object



42
43
44
45
46
# File 'lib/shellplay/session.rb', line 42

def add_screen(screenhash)
  s = Shellplay::Screen.new
  s.import(screenhash)
  @sequence << s
end

#add_screens(screenarray) ⇒ Object



48
49
50
# File 'lib/shellplay/session.rb', line 48

def add_screens(screenarray)
  @sequence += screenarray
end

#current_screenObject



70
71
72
# File 'lib/shellplay/session.rb', line 70

def current_screen
  @sequence[@pointer]
end

#drop_last_screenObject



52
53
54
55
# File 'lib/shellplay/session.rb', line 52

def drop_last_screen
  @sequence.pop
  previous
end

#import(name) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/shellplay/session.rb', line 24

def import(name)
  name ||= ask "What session do you want to load?",
    aslist: true,
    choices: Dir.glob(File.join(@config.basedir, '*.json')).map { |f| File.basename(f, '.json') }
  if /^https?:\/\//.match name
    infile = open(name) { |f| f.read }
  else
    infile = IO.read(File.join(@config.basedir, "#{name}.json"))
  end
  data = JSON.parse(infile)
  @title = data['title']
  @prompt = data['prompt']
  @timeformat = data['timeformat']
  data['sequence'].each do |screenhash|
    add_screen(screenhash)
  end
end

#nextObject



57
58
59
# File 'lib/shellplay/session.rb', line 57

def next
  @pointer += 1
end

#prepareObject



85
86
87
88
# File 'lib/shellplay/session.rb', line 85

def prepare
  set_title
  set_name
end

#previousObject



61
62
63
# File 'lib/shellplay/session.rb', line 61

def previous
  @pointer -= 1
end

#saveObject



74
75
76
77
78
79
80
81
82
83
# File 'lib/shellplay/session.rb', line 74

def save
  prepare
  h = {}
  h[:title] = @title
  h[:sequence] = @sequence.map(&:export)
  outfile = File.join(@config.basedir, "#{@name}.json")
  File.open(outfile, 'w') do |f|
    f.write JSON.pretty_generate(h)
  end
end

#show(index) ⇒ Object



65
66
67
68
# File 'lib/shellplay/session.rb', line 65

def show(index)
  @pointer = index.to_i
  current_screen
end