shellplay 0.1.6 → 0.1.7
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.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/.travis.yml +1 -1
- data/CHANGELOG.md +6 -0
- data/README.md +11 -1
- data/bin/shellplay +6 -0
- data/lib/shellplay/config.rb +6 -0
- data/lib/shellplay/screen.rb +3 -0
- data/lib/shellplay/session.rb +15 -0
- data/lib/shellplay.rb +0 -3
- data/shellplay.gemspec +7 -6
- data/spec/lib/shellplay/session_spec.rb +1 -1
- metadata +31 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a755f6552006186547d635756ba577cb2fadec3
|
4
|
+
data.tar.gz: bc83ab0769908a487e6750361c980116f65ce2dc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8dd6658f4a887d91164a6664368dd73df83d12a6734faebf51e7e158c629ffa208ac8f8bb935c1d7daefb103a3813a5e7d585f43c6abd3673f591efc0415d98
|
7
|
+
data.tar.gz: bedada485c7bf906584fe67c201c43c7b67aeb58d5ec7c01a68ad95b7552effe79203b10a1732a95f54a85f98efb67ba0bb3691e4662eeb4f1918cf85258bc31
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.2.3
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
Shellplay Changelog
|
2
2
|
=========================
|
3
3
|
|
4
|
+
v0.1.7 - 2015-11-23
|
5
|
+
-------------------
|
6
|
+
- create config dir if it does not exist (first time launch)
|
7
|
+
- add more code documentation
|
8
|
+
- update dependencies
|
9
|
+
|
4
10
|
v0.1.6 - 2014-08-19
|
5
11
|
-------------------
|
6
12
|
- fix display of session prompt
|
data/README.md
CHANGED
@@ -7,7 +7,7 @@ Shellplay
|
|
7
7
|
[](https://coveralls.io/r/mose/shellplay?branch=master)
|
8
8
|
[](https://gemnasium.com/mose/shellplay)
|
9
9
|
[](https://codeclimate.com/github/mose/shellplay)
|
10
|
-
|
10
|
+
[](https://inch-ci.org/github/mose/shellplay)
|
11
11
|
----
|
12
12
|
|
13
13
|
This is a CLI tool for recording and presenting step by step operations from the console. It is targeted at presentations that would simulate live coding, without the random murphy factor of it.
|
@@ -22,6 +22,16 @@ It can record a session and playback from it, so if internet fails in your confe
|
|
22
22
|
|
23
23
|
The first time you run it, some configuration variables will be asked, and stored in `$HOME/.shellplay/config.yml`. All the recorded sessions will be stored in that same directory.
|
24
24
|
|
25
|
+
### Development install
|
26
|
+
|
27
|
+
git clone git@github.com:mose/shellplay.git
|
28
|
+
cd shellplay
|
29
|
+
bundle install --path vendor
|
30
|
+
|
31
|
+
To launch shellrecord or shellplay from local repo:
|
32
|
+
|
33
|
+
bundle exec ./bin/shellrecord
|
34
|
+
|
25
35
|
## Recording a session
|
26
36
|
|
27
37
|
For recording a session
|
data/bin/shellplay
CHANGED
@@ -30,6 +30,8 @@ def usage
|
|
30
30
|
puts
|
31
31
|
end
|
32
32
|
|
33
|
+
# generic display method
|
34
|
+
#
|
33
35
|
def display(screen)
|
34
36
|
if screen.clearscreen
|
35
37
|
if ENV['TERM_PROGRAM'] = 'iTerm.app'
|
@@ -59,6 +61,7 @@ def display(screen)
|
|
59
61
|
end
|
60
62
|
end
|
61
63
|
|
64
|
+
# move to the next screen
|
62
65
|
def shownext
|
63
66
|
if @session.current_screen and @session.current_screen.stdin
|
64
67
|
display @session.current_screen
|
@@ -70,6 +73,7 @@ def shownext
|
|
70
73
|
end
|
71
74
|
end
|
72
75
|
|
76
|
+
# move to the previous screen
|
73
77
|
def showprevious
|
74
78
|
if @session.pointer > 0
|
75
79
|
@session.previous
|
@@ -81,6 +85,7 @@ def showprevious
|
|
81
85
|
end
|
82
86
|
end
|
83
87
|
|
88
|
+
# jump to an arbitrary screen
|
84
89
|
def show(index)
|
85
90
|
if @session.show(index) && @session.show(index).stdin
|
86
91
|
display @session.show(index)
|
@@ -93,6 +98,7 @@ end
|
|
93
98
|
|
94
99
|
print "\n\e[33m>\e[0m Type <enter> to begin."
|
95
100
|
|
101
|
+
# main loop
|
96
102
|
while continue do
|
97
103
|
command = STDIN.gets.strip
|
98
104
|
case command
|
data/lib/shellplay/config.rb
CHANGED
@@ -2,6 +2,8 @@ require 'cliprompt'
|
|
2
2
|
require 'configstruct'
|
3
3
|
require 'fileutils'
|
4
4
|
|
5
|
+
# config struct class
|
6
|
+
# refer to https://github.com/mose/configstruct for documentation
|
5
7
|
module Shellplay
|
6
8
|
class Config < ConfigStruct
|
7
9
|
|
@@ -11,12 +13,16 @@ module Shellplay
|
|
11
13
|
super(options, input = STDIN, output = STDOUT, true)
|
12
14
|
end
|
13
15
|
|
16
|
+
# override default config values
|
14
17
|
def set_defaults
|
15
18
|
default :basedir, File.join(ENV['HOME'], '.shellplay')
|
16
19
|
default :basefile, File.join(self.basedir, 'config.yml')
|
17
20
|
super
|
18
21
|
end
|
19
22
|
|
23
|
+
# interactive configuration creation process
|
24
|
+
# uses cliprompt for console interaction
|
25
|
+
# refer to https://github.com/mose/cliprompt for documentation
|
20
26
|
def setup
|
21
27
|
unless self.prompt && self.timeformat
|
22
28
|
values = {}
|
data/lib/shellplay/screen.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# class for the screen object
|
1
2
|
module Shellplay
|
2
3
|
class Screen
|
3
4
|
|
@@ -14,6 +15,7 @@ module Shellplay
|
|
14
15
|
@timespent = 0
|
15
16
|
end
|
16
17
|
|
18
|
+
# transforms a hash into a screen object
|
17
19
|
def import(hash)
|
18
20
|
@displaycommand = !!hash['displaycommand']
|
19
21
|
@playprompt = !!hash['playprompt']
|
@@ -25,6 +27,7 @@ module Shellplay
|
|
25
27
|
@timespent = hash['timespent']
|
26
28
|
end
|
27
29
|
|
30
|
+
# transfroms a screen object into a hash
|
28
31
|
def export
|
29
32
|
{
|
30
33
|
displaycommand: @displaycommand,
|
data/lib/shellplay/session.rb
CHANGED
@@ -5,6 +5,7 @@ require "open-uri"
|
|
5
5
|
require "shellplay/config"
|
6
6
|
require "shellplay/screen"
|
7
7
|
|
8
|
+
# session class, controlling the interaction during the presentation
|
8
9
|
module Shellplay
|
9
10
|
class Session
|
10
11
|
|
@@ -20,11 +21,13 @@ module Shellplay
|
|
20
21
|
@timeformat = false
|
21
22
|
@pointer = 0
|
22
23
|
@basedir = basedir || File.join(ENV['HOME'], '.shellplay')
|
24
|
+
FileUtils.mkdir_p(@basedir) unless Dir.exist? @basedir
|
23
25
|
@basefile = basefile || 'config.yml'
|
24
26
|
@input = input
|
25
27
|
@output = output
|
26
28
|
end
|
27
29
|
|
30
|
+
# import a json file from local drive or http location
|
28
31
|
def import(name)
|
29
32
|
unless name
|
30
33
|
sessions = Dir.glob(File.join(@basedir, '*.json'))
|
@@ -58,38 +61,46 @@ module Shellplay
|
|
58
61
|
end
|
59
62
|
end
|
60
63
|
|
64
|
+
# appends a screen to the main sequence
|
61
65
|
def add_screen(screenhash)
|
62
66
|
s = Shellplay::Screen.new
|
63
67
|
s.import(screenhash)
|
64
68
|
@sequence << s
|
65
69
|
end
|
66
70
|
|
71
|
+
# appends an array of screens to the sequence
|
67
72
|
def add_screens(screenarray)
|
68
73
|
@sequence += screenarray
|
69
74
|
end
|
70
75
|
|
76
|
+
# used for cancelling a screen while recording
|
71
77
|
def drop_last_screen
|
72
78
|
@sequence.pop
|
73
79
|
previous
|
74
80
|
end
|
75
81
|
|
82
|
+
# jump to next screen
|
76
83
|
def next
|
77
84
|
@pointer += 1
|
78
85
|
end
|
79
86
|
|
87
|
+
# jump to previous screen
|
80
88
|
def previous
|
81
89
|
@pointer -= 1
|
82
90
|
end
|
83
91
|
|
92
|
+
# jump to an arbitrary screen
|
84
93
|
def show(index)
|
85
94
|
@pointer = index.to_i
|
86
95
|
current_screen
|
87
96
|
end
|
88
97
|
|
98
|
+
# returns the screen object at the current point in the sequence
|
89
99
|
def current_screen
|
90
100
|
@sequence[@pointer]
|
91
101
|
end
|
92
102
|
|
103
|
+
# saves the json file for the sequence
|
93
104
|
def save
|
94
105
|
prepare
|
95
106
|
h = {}
|
@@ -101,6 +112,7 @@ module Shellplay
|
|
101
112
|
end
|
102
113
|
end
|
103
114
|
|
115
|
+
# initialize the sequence meta-data
|
104
116
|
def prepare
|
105
117
|
set_title
|
106
118
|
set_name
|
@@ -108,10 +120,13 @@ module Shellplay
|
|
108
120
|
|
109
121
|
private
|
110
122
|
|
123
|
+
# uses cliprompt to ask for a title if not set already
|
111
124
|
def set_title
|
112
125
|
@title ||= ask("What is the title of this session?", "No Title")
|
113
126
|
end
|
114
127
|
|
128
|
+
# uses cliprompt to ask for a name if not set already
|
129
|
+
# name is the name of the file on the disk
|
115
130
|
def set_name
|
116
131
|
@name ||= ask("What is the name of the session file?", "untitled")
|
117
132
|
end
|
data/lib/shellplay.rb
CHANGED
data/shellplay.gemspec
CHANGED
@@ -18,13 +18,14 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^spec/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_dependency 'paint'
|
22
|
-
spec.add_dependency 'cliprompt'
|
23
|
-
spec.add_dependency 'configstruct',
|
24
|
-
spec.add_dependency 'shell2html'
|
21
|
+
spec.add_dependency 'paint', '~> 1.0.0'
|
22
|
+
spec.add_dependency 'cliprompt', '~> 0.1.2'
|
23
|
+
spec.add_dependency 'configstruct', '~> 0.1.0'
|
24
|
+
spec.add_dependency 'shell2html', '~> 0.0.5'
|
25
25
|
|
26
|
-
spec.add_development_dependency "bundler",
|
26
|
+
spec.add_development_dependency "bundler", '~> 1.6'
|
27
27
|
spec.add_development_dependency "rake"
|
28
|
-
spec.add_development_dependency 'rspec',
|
28
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
29
|
+
spec.add_development_dependency 'simplecov'
|
29
30
|
spec.add_development_dependency 'coveralls'
|
30
31
|
end
|
@@ -26,7 +26,7 @@ describe Shellplay::Session, "A shellplay session" do
|
|
26
26
|
|
27
27
|
context "when we import an invalid file, " do
|
28
28
|
it "should break and throw exception" do
|
29
|
-
expect { subject.import('/file/notfound') }.to raise_error
|
29
|
+
expect { subject.import('/file/notfound') }.to raise_error(Errno::ENOENT)
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
metadata
CHANGED
@@ -1,71 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shellplay
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- mose
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-11-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: paint
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 1.0.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 1.0.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: cliprompt
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 0.1.2
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 0.1.2
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: configstruct
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.0
|
47
|
+
version: 0.1.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.0
|
54
|
+
version: 0.1.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: shell2html
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 0.0.5
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: 0.0.5
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: bundler
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '3.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: simplecov
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: coveralls
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -181,7 +195,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
181
195
|
version: '0'
|
182
196
|
requirements: []
|
183
197
|
rubyforge_project:
|
184
|
-
rubygems_version: 2.
|
198
|
+
rubygems_version: 2.4.8
|
185
199
|
signing_key:
|
186
200
|
specification_version: 4
|
187
201
|
summary: CLI tool for shell-based presentations.
|