shellcast 0.0.1 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +8 -7
- data/Gemfile.lock +8 -17
- data/README.md +22 -0
- data/Rakefile +2 -2
- data/TODO +3 -0
- data/VERSION +1 -1
- data/bin/shellcast +30 -1
- data/lib/shellcast/player.rb +40 -7
- data/lib/shellcast/publisher.rb +39 -0
- data/lib/shellcast/recorder.rb +43 -10
- data/lib/shellcast.rb +22 -5
- data/spec/shellcast/publisher_spec.rb +8 -0
- data/spec/shellcast/recorder_spec.rb +32 -1
- data/spec/shellcast_spec.rb +4 -0
- data/spec/spec_helper.rb +1 -1
- metadata +40 -30
- data/README.rdoc +0 -19
data/Gemfile
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
source "http://rubygems.org"
|
2
2
|
|
3
3
|
gem 'xdg'
|
4
|
-
gem '
|
4
|
+
gem 'colored'
|
5
|
+
#gem 'artii'
|
6
|
+
#gem 'ohai'
|
5
7
|
|
6
|
-
# Add dependencies to develop your gem here.
|
7
|
-
# Include everything needed to run rake, tests, features, etc.
|
8
8
|
group :development do
|
9
|
-
gem "rspec"
|
10
|
-
gem "
|
11
|
-
gem "
|
12
|
-
gem "
|
9
|
+
gem "rspec"
|
10
|
+
gem "mocha"
|
11
|
+
gem "bundler"
|
12
|
+
gem "jeweler"
|
13
|
+
gem "rcov"
|
13
14
|
end
|
data/Gemfile.lock
CHANGED
@@ -1,24 +1,15 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
+
colored (1.2)
|
4
5
|
diff-lcs (1.1.2)
|
5
|
-
extlib (0.9.15)
|
6
6
|
git (1.2.5)
|
7
7
|
jeweler (1.5.1)
|
8
8
|
bundler (~> 1.0.0)
|
9
9
|
git (>= 1.2.5)
|
10
10
|
rake
|
11
|
-
|
12
|
-
|
13
|
-
mixlib-config (1.1.2)
|
14
|
-
mixlib-log (1.2.0)
|
15
|
-
ohai (0.5.8)
|
16
|
-
extlib
|
17
|
-
json (>= 1.4.4, <= 1.4.6)
|
18
|
-
mixlib-cli
|
19
|
-
mixlib-config
|
20
|
-
mixlib-log
|
21
|
-
systemu
|
11
|
+
mocha (0.9.9)
|
12
|
+
rake
|
22
13
|
rake (0.8.7)
|
23
14
|
rcov (0.9.9)
|
24
15
|
rspec (2.1.0)
|
@@ -29,16 +20,16 @@ GEM
|
|
29
20
|
rspec-expectations (2.1.0)
|
30
21
|
diff-lcs (~> 1.1.2)
|
31
22
|
rspec-mocks (2.1.0)
|
32
|
-
systemu (1.2.0)
|
33
23
|
xdg (1.0.0)
|
34
24
|
|
35
25
|
PLATFORMS
|
36
26
|
ruby
|
37
27
|
|
38
28
|
DEPENDENCIES
|
39
|
-
bundler
|
40
|
-
|
41
|
-
|
29
|
+
bundler
|
30
|
+
colored
|
31
|
+
jeweler
|
32
|
+
mocha
|
42
33
|
rcov
|
43
|
-
rspec
|
34
|
+
rspec
|
44
35
|
xdg
|
data/README.md
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# ShellCast
|
2
|
+
|
3
|
+
Screencasting for [Shell Ninjas](http://shell.heroku.com/).
|
4
|
+
|
5
|
+
## Usage
|
6
|
+
|
7
|
+
gem install shellcast
|
8
|
+
shellcast record
|
9
|
+
...
|
10
|
+
exit
|
11
|
+
shellcash push ID
|
12
|
+
shellcast play ID
|
13
|
+
|
14
|
+
## Dependencies
|
15
|
+
|
16
|
+
You need `script` and `scriptreplay` tools from BSD Utils.
|
17
|
+
Tey are already installed if You use Debian/Ubuntu/BSD variants.
|
18
|
+
Not sure about other OSes.
|
19
|
+
|
20
|
+
## Copyright
|
21
|
+
|
22
|
+
Copyright (c) 2010 Antono Vasiljev. See LICENSE.txt for further details.
|
data/Rakefile
CHANGED
@@ -13,9 +13,9 @@ require 'jeweler'
|
|
13
13
|
Jeweler::Tasks.new do |gem|
|
14
14
|
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
15
15
|
gem.name = "shellcast"
|
16
|
-
gem.homepage = "http://
|
16
|
+
gem.homepage = "http://shell.heroku.com/"
|
17
17
|
gem.license = "GPL"
|
18
|
-
gem.summary = %Q{
|
18
|
+
gem.summary = %Q{Screencasts for Shell Ninjas}
|
19
19
|
gem.description = %Q{Screencast utility for unix shell junkies :)}
|
20
20
|
gem.email = "antono.vasiljev@gmail.com"
|
21
21
|
gem.authors = ["Antono Vasiljev"]
|
data/TODO
ADDED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.4
|
data/bin/shellcast
CHANGED
@@ -5,7 +5,20 @@ $LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
|
|
5
5
|
require 'rubygems'
|
6
6
|
require 'shellcast'
|
7
7
|
|
8
|
+
BASENAME = File.basename(__FILE__)
|
9
|
+
|
8
10
|
case ARGV[0]
|
11
|
+
when '-h', '--help'
|
12
|
+
puts <<-HELP
|
13
|
+
#{BASENAME} option [arg]
|
14
|
+
|
15
|
+
Options:
|
16
|
+
setup API_KEY - setup
|
17
|
+
record - record new shellcast
|
18
|
+
push RECORD_ID - publish
|
19
|
+
list - print list of records
|
20
|
+
play RECORD_ID - play local record
|
21
|
+
HELP
|
9
22
|
when 'record'
|
10
23
|
ShellCast::Recorder.record!
|
11
24
|
when 'list'
|
@@ -19,7 +32,23 @@ when 'play'
|
|
19
32
|
puts "Select one..."
|
20
33
|
exit
|
21
34
|
end
|
35
|
+
when 'push'
|
36
|
+
if ARGV[1]
|
37
|
+
ShellCast::Publisher.new.publish(ARGV[1])
|
38
|
+
else
|
39
|
+
puts "What do you want to publish"
|
40
|
+
ShellCast::Player.list
|
41
|
+
puts "Select one..."
|
42
|
+
exit
|
43
|
+
end
|
44
|
+
when 'setup'
|
45
|
+
if ARGV[1]
|
46
|
+
ShellCast.api_key = ARGV[1]
|
47
|
+
else
|
48
|
+
puts "\n\tUsage: #{BASENAME} setup API_KEY\n\n"
|
49
|
+
exit
|
50
|
+
end
|
22
51
|
else
|
23
|
-
puts "Usage: #{
|
52
|
+
puts "Usage: #{BASENAME} command [shellcast_id]"
|
24
53
|
puts "Commands: record, list, play, publish, get"
|
25
54
|
end
|
data/lib/shellcast/player.rb
CHANGED
@@ -1,13 +1,48 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
module ShellCast
|
2
3
|
class Player
|
4
|
+
|
5
|
+
HEADER = <<-EOH
|
6
|
+
|
7
|
+
█ ███ ███
|
8
|
+
▓███▒ █ █ █ ░███▒ █
|
9
|
+
█▓ ░█ █ █ █ ░█▒ ░█ █
|
10
|
+
█ █▒██▒ ███ █ █ █▒ ░███░ ▒███▒ █████
|
11
|
+
█▓░ █▓ ▒█ ▓▓ ▒█ █ █ █ █▒ ▒█ █▒ ░█ █
|
12
|
+
▓██▓ █ █ █ █ █ █ █ █ █▒░ █
|
13
|
+
▓█ █ █ █████ █ █ █ ▒████ ░███▒ █
|
14
|
+
█ █ █ █ █ █ █▒ █▒ █ ▒█ █
|
15
|
+
█░ ▓█ █ █ ▓▓ █ █░ █░ ░█▒ ░▓ █░ ▓█ █░ ▒█ █░
|
16
|
+
▒████░ █ █ ███▒ ▒██ ▒██ ▒███▒ ▒██▒█ ▒███▒ ▒██
|
17
|
+
|
18
|
+
|
19
|
+
.----------------.
|
20
|
+
' Playback started '
|
21
|
+
EOH
|
22
|
+
|
23
|
+
FOOTER = <<-EOF
|
24
|
+
█ █
|
25
|
+
███████ █ ██████ █
|
26
|
+
█ █ █ █
|
27
|
+
█ █▒██▒ ███ █ █▒██▒ ██▓█
|
28
|
+
█ █▓ ▒█ ▓▓ ▒█ █ █▓ ▒█ █▓ ▓█
|
29
|
+
█ █ █ █ █ ██████ █ █ █ █
|
30
|
+
█ █ █ █████ █ █ █ █ █
|
31
|
+
█ █ █ █ █ █ █ █ █
|
32
|
+
█ █ █ ▓▓ █ █ █ █ █▓ ▓█
|
33
|
+
█ █ █ ███▒ ██████ █ █ ██▓█
|
34
|
+
|
35
|
+
EOF
|
36
|
+
|
37
|
+
|
3
38
|
def self.play(id)
|
4
39
|
new(id).play
|
5
40
|
end
|
6
41
|
|
7
42
|
def self.list
|
8
43
|
Dir[File.join(ShellCast::DATA_DIR, "**", 'meta')].each do |path|
|
9
|
-
metadata =
|
10
|
-
puts "#{metadata["
|
44
|
+
metadata = JSON.parse(IO.read(path))
|
45
|
+
puts "#{metadata["created_at"]}: #{metadata["title"]}"
|
11
46
|
end
|
12
47
|
end
|
13
48
|
|
@@ -16,13 +51,11 @@ module ShellCast
|
|
16
51
|
end
|
17
52
|
|
18
53
|
def play
|
19
|
-
puts
|
20
|
-
puts
|
21
|
-
puts "-" * 80
|
54
|
+
puts HEADER.black_on_white
|
55
|
+
puts
|
22
56
|
system(scriptreplay_cmd)
|
23
57
|
puts
|
24
|
-
puts
|
25
|
-
puts "Playback finished"
|
58
|
+
puts FOOTER.black_on_white
|
26
59
|
end
|
27
60
|
|
28
61
|
private
|
data/lib/shellcast/publisher.rb
CHANGED
@@ -1,4 +1,43 @@
|
|
1
|
+
require 'oauth'
|
2
|
+
require 'net/http'
|
3
|
+
require 'uri'
|
4
|
+
|
1
5
|
module ShellCast
|
2
6
|
class Publisher
|
7
|
+
|
8
|
+
API_URL = 'http://shell.heroku.com'
|
9
|
+
|
10
|
+
def publish(id)
|
11
|
+
uri = URI.parse(API_URL + '/records')
|
12
|
+
params = { 'record' => prepare(id) }
|
13
|
+
params.merge!({'api_key' => ShellCast.api_key}) if api_key
|
14
|
+
res = Net::HTTP.post_form(uri, params)
|
15
|
+
res = JSON.parse(res.body)
|
16
|
+
if res['ok']
|
17
|
+
puts res['message']
|
18
|
+
puts API_URL + '/records/' + res['id']
|
19
|
+
else
|
20
|
+
puts res['message']
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def api_key
|
25
|
+
unless ShellCast.api_key
|
26
|
+
print 'Paste your API KEY [or Enter to publish as Anonymous]: '
|
27
|
+
key = STDIN.gets.strip
|
28
|
+
ShellCast.api_key = key unless key.empty?
|
29
|
+
end
|
30
|
+
ShellCast.api_key
|
31
|
+
end
|
32
|
+
|
33
|
+
def prepare(id)
|
34
|
+
out = {}
|
35
|
+
['meta', 'timing', 'typescript'].each do |file|
|
36
|
+
out[file] = File.read(File.join(ShellCast.shellcast_dir(id), file))
|
37
|
+
end
|
38
|
+
meta = JSON.parse(out.delete('meta'))
|
39
|
+
meta.each { |k,v| out[k] = v }
|
40
|
+
return out.to_json
|
41
|
+
end
|
3
42
|
end
|
4
43
|
end
|
data/lib/shellcast/recorder.rb
CHANGED
@@ -1,6 +1,37 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
module ShellCast
|
2
3
|
class Recorder
|
3
4
|
|
5
|
+
HEADER = <<-EOH
|
6
|
+
█ █
|
7
|
+
█████ █
|
8
|
+
█ ▓█ █
|
9
|
+
█ █ ███ ▓██▒ ███ █▒██▒ ██▓█ ███ █▒██▒ ██▓█
|
10
|
+
█ ▒█ ▓▓ ▒█ ▓█ ▓ █▓ ▓█ ██ █ █▓ ▓█ █ █▓ ▒█ █▓ ▓█
|
11
|
+
█████ █ █ █░ █ █ █ █ █ █ █ █ █ █
|
12
|
+
█ ░█▒ █████ █ █ █ █ █ █ █ █ █ █ █
|
13
|
+
█ ░█ █ █░ █ █ █ █ █ █ █ █ █ █
|
14
|
+
█ █ ▓▓ █ ▓█ ▓ █▓ ▓█ █ █▓ ▓█ █ █ █ █▓ ▓█ █ █
|
15
|
+
█ ▒ ███▒ ▓██▒ ███ █ ██▓█ █████ █ █ ██▒█ █ █
|
16
|
+
█
|
17
|
+
▓ ▒█
|
18
|
+
▒██░
|
19
|
+
EOH
|
20
|
+
|
21
|
+
FOOTER = <<-EOF
|
22
|
+
█ █ █ █
|
23
|
+
██████ █ █ █
|
24
|
+
█ █ █ █
|
25
|
+
█ ███ █▒██▒ ███ ▒███▒ █▒██▒ ███ ██▓█ █
|
26
|
+
█ █ █▓ ▒█ █ █▒ ░█ █▓ ▒█ ▓▓ ▒█ █▓ ▓█ █
|
27
|
+
██████ █ █ █ █ █▒░ █ █ █ █ █ █ █
|
28
|
+
█ █ █ █ █ ░███▒ █ █ █████ █ █ █
|
29
|
+
█ █ █ █ █ ▒█ █ █ █ █ █
|
30
|
+
█ █ █ █ █ █░ ▒█ █ █ ▓▓ █ █▓ ▓█ █
|
31
|
+
█ █████ █ █ █████ ▒███▒ █ █ ███▒ ██▓█ █
|
32
|
+
|
33
|
+
EOF
|
34
|
+
|
4
35
|
def self.record!
|
5
36
|
new.record!
|
6
37
|
end
|
@@ -10,32 +41,34 @@ module ShellCast
|
|
10
41
|
end
|
11
42
|
|
12
43
|
def record!
|
13
|
-
|
44
|
+
test_shellcast_data_dir
|
14
45
|
request_metadata
|
46
|
+
puts HEADER.black_on_white
|
15
47
|
puts "Your session started"
|
16
48
|
puts "Type Ctrl+D or exit to finish recording"
|
17
|
-
puts "-" * 80
|
18
49
|
init_terminal
|
19
50
|
system(script_cmd)
|
20
51
|
restore_terminal
|
21
|
-
puts
|
22
|
-
puts "
|
23
|
-
puts "Shellcast ID:\t #{shellcast_id}"
|
24
|
-
puts "Shellcast path:\t #{shellcast_dir}"
|
52
|
+
puts FOOTER.black_on_white
|
53
|
+
puts "hint $ shellcast play #{shellcast_id}".green
|
25
54
|
end
|
26
55
|
|
27
56
|
def request_metadata
|
28
|
-
|
57
|
+
print "Provide name for Your shellcast: "
|
29
58
|
@meta["title"] = STDIN.gets.strip
|
30
|
-
@meta["
|
59
|
+
@meta["created_at"] = shellcast_id
|
31
60
|
puts shellcast_file('meta')
|
32
61
|
File.open(shellcast_file('meta'), 'w+') do |meta|
|
33
|
-
meta.puts @meta.
|
62
|
+
meta.puts @meta.to_json
|
34
63
|
end
|
35
64
|
end
|
36
65
|
|
37
66
|
private
|
38
67
|
|
68
|
+
def test_shellcast_data_dir
|
69
|
+
FileUtils.mkdir_p(shellcast_dir) unless File.exists?(shellcast_dir)
|
70
|
+
end
|
71
|
+
|
39
72
|
def init_terminal
|
40
73
|
stty_data = `stty -a`
|
41
74
|
@user_columns = stty_data.match(/columns (\d+)/)[1]
|
@@ -61,7 +94,7 @@ module ShellCast
|
|
61
94
|
end
|
62
95
|
|
63
96
|
def script_cmd
|
64
|
-
"script -c 'bash' #{shellcast_file('
|
97
|
+
"script -c 'bash' #{shellcast_file('typescript')} -t 2> #{shellcast_file('timing')}"
|
65
98
|
end
|
66
99
|
end
|
67
100
|
end
|
data/lib/shellcast.rb
CHANGED
@@ -1,17 +1,34 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'fileutils'
|
3
|
+
require 'colored'
|
3
4
|
require 'xdg'
|
4
5
|
require 'yaml'
|
6
|
+
require 'json'
|
5
7
|
|
6
8
|
module ShellCast
|
7
9
|
|
8
|
-
APP_NAME
|
9
|
-
DATA_DIR
|
10
|
+
APP_NAME = 'shellcast'
|
11
|
+
DATA_DIR = File.join(XDG::Data.home, APP_NAME)
|
12
|
+
CONFIG_DIR = File.join(XDG::Config.home, APP_NAME)
|
13
|
+
API_KEY = File.join(CONFIG_DIR, 'api_key')
|
10
14
|
|
11
|
-
|
12
|
-
|
15
|
+
class << self
|
16
|
+
def api_key
|
17
|
+
return false unless File.exist?(API_KEY)
|
18
|
+
@api_key ||= File.read(API_KEY).strip
|
19
|
+
end
|
20
|
+
|
21
|
+
def api_key=(key)
|
22
|
+
FileUtils.mkdir_p(CONFIG_DIR) unless File.exist?(CONFIG_DIR)
|
23
|
+
File.open(API_KEY, 'w+') do |f|
|
24
|
+
f.puts(key.strip)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def shellcast_dir(shellcast_id)
|
29
|
+
File.join(ShellCast::DATA_DIR, shellcast_id.to_s)
|
30
|
+
end
|
13
31
|
end
|
14
|
-
module_function :shellcast_dir
|
15
32
|
|
16
33
|
autoload :Recorder, 'shellcast/recorder.rb'
|
17
34
|
autoload :Player, 'shellcast/player.rb'
|
@@ -1,10 +1,41 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe ShellCast::Recorder do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
STDIN.stubs(:gets).returns('my shellcast')
|
7
|
+
end
|
8
|
+
|
4
9
|
describe "#record!" do
|
10
|
+
|
11
|
+
before(:each) do
|
12
|
+
subject.stubs(:system).with(anything).returns(true)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should set tty to 80x24" do
|
16
|
+
subject.expects("system").with(regexp_matches(/stty columns 80 rows 24/))
|
17
|
+
subject.record!
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should restore tty to user defined values" do
|
21
|
+
subject.expects(:restore_terminal)
|
22
|
+
subject.record!
|
23
|
+
end
|
24
|
+
|
5
25
|
it "should start script session" do
|
6
|
-
subject.
|
26
|
+
subject.expects("system").with(regexp_matches Regexp.compile("script -c 'bash'"))
|
7
27
|
subject.record!
|
8
28
|
end
|
9
29
|
end
|
30
|
+
|
31
|
+
describe "#restore_terminal" do
|
32
|
+
it "should call tty with saved dimensions" do
|
33
|
+
subject.expects(:system).with(
|
34
|
+
all_of(regexp_matches(/stty/),
|
35
|
+
regexp_matches(/columns/),
|
36
|
+
regexp_matches(/rows/))
|
37
|
+
)
|
38
|
+
subject.send :restore_terminal
|
39
|
+
end
|
40
|
+
end
|
10
41
|
end
|
data/spec/shellcast_spec.rb
CHANGED
@@ -8,4 +8,8 @@ describe ShellCast do
|
|
8
8
|
it "should provide XDG and APP_NAME based ::DATA_DIR" do
|
9
9
|
ShellCast::DATA_DIR.should == File.join(XDG::Data.home, ShellCast::APP_NAME)
|
10
10
|
end
|
11
|
+
|
12
|
+
it "should provide XDG config path" do
|
13
|
+
ShellCast::CONFIG_DIR.should == File.join(XDG::Config.home, ShellCast::APP_NAME)
|
14
|
+
end
|
11
15
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 4
|
9
|
+
version: 0.0.4
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Antono Vasiljev
|
@@ -14,12 +14,11 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-12-
|
17
|
+
date: 2010-12-30 00:00:00 +02:00
|
18
18
|
default_executable: shellcast
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: xdg
|
22
|
-
prerelease: false
|
23
22
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
23
|
none: false
|
25
24
|
requirements:
|
@@ -29,10 +28,10 @@ dependencies:
|
|
29
28
|
- 0
|
30
29
|
version: "0"
|
31
30
|
type: :runtime
|
31
|
+
prerelease: false
|
32
32
|
version_requirements: *id001
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
|
-
name:
|
35
|
-
prerelease: false
|
34
|
+
name: colored
|
36
35
|
requirement: &id002 !ruby/object:Gem::Requirement
|
37
36
|
none: false
|
38
37
|
requirements:
|
@@ -42,55 +41,49 @@ dependencies:
|
|
42
41
|
- 0
|
43
42
|
version: "0"
|
44
43
|
type: :runtime
|
44
|
+
prerelease: false
|
45
45
|
version_requirements: *id002
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
47
|
name: rspec
|
48
|
-
prerelease: false
|
49
48
|
requirement: &id003 !ruby/object:Gem::Requirement
|
50
49
|
none: false
|
51
50
|
requirements:
|
52
|
-
- -
|
51
|
+
- - ">="
|
53
52
|
- !ruby/object:Gem::Version
|
54
53
|
segments:
|
55
|
-
- 2
|
56
|
-
- 1
|
57
54
|
- 0
|
58
|
-
version:
|
55
|
+
version: "0"
|
59
56
|
type: :development
|
57
|
+
prerelease: false
|
60
58
|
version_requirements: *id003
|
61
59
|
- !ruby/object:Gem::Dependency
|
62
|
-
name:
|
63
|
-
prerelease: false
|
60
|
+
name: mocha
|
64
61
|
requirement: &id004 !ruby/object:Gem::Requirement
|
65
62
|
none: false
|
66
63
|
requirements:
|
67
|
-
- -
|
64
|
+
- - ">="
|
68
65
|
- !ruby/object:Gem::Version
|
69
66
|
segments:
|
70
|
-
- 1
|
71
|
-
- 0
|
72
67
|
- 0
|
73
|
-
version:
|
68
|
+
version: "0"
|
74
69
|
type: :development
|
70
|
+
prerelease: false
|
75
71
|
version_requirements: *id004
|
76
72
|
- !ruby/object:Gem::Dependency
|
77
|
-
name:
|
78
|
-
prerelease: false
|
73
|
+
name: bundler
|
79
74
|
requirement: &id005 !ruby/object:Gem::Requirement
|
80
75
|
none: false
|
81
76
|
requirements:
|
82
|
-
- -
|
77
|
+
- - ">="
|
83
78
|
- !ruby/object:Gem::Version
|
84
79
|
segments:
|
85
|
-
-
|
86
|
-
|
87
|
-
- 1
|
88
|
-
version: 1.5.1
|
80
|
+
- 0
|
81
|
+
version: "0"
|
89
82
|
type: :development
|
83
|
+
prerelease: false
|
90
84
|
version_requirements: *id005
|
91
85
|
- !ruby/object:Gem::Dependency
|
92
|
-
name:
|
93
|
-
prerelease: false
|
86
|
+
name: jeweler
|
94
87
|
requirement: &id006 !ruby/object:Gem::Requirement
|
95
88
|
none: false
|
96
89
|
requirements:
|
@@ -100,7 +93,21 @@ dependencies:
|
|
100
93
|
- 0
|
101
94
|
version: "0"
|
102
95
|
type: :development
|
96
|
+
prerelease: false
|
103
97
|
version_requirements: *id006
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: rcov
|
100
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
101
|
+
none: false
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
segments:
|
106
|
+
- 0
|
107
|
+
version: "0"
|
108
|
+
type: :development
|
109
|
+
prerelease: false
|
110
|
+
version_requirements: *id007
|
104
111
|
description: Screencast utility for unix shell junkies :)
|
105
112
|
email: antono.vasiljev@gmail.com
|
106
113
|
executables:
|
@@ -109,15 +116,17 @@ extensions: []
|
|
109
116
|
|
110
117
|
extra_rdoc_files:
|
111
118
|
- LICENSE.txt
|
112
|
-
- README.
|
119
|
+
- README.md
|
120
|
+
- TODO
|
113
121
|
files:
|
114
122
|
- .document
|
115
123
|
- .rspec
|
116
124
|
- Gemfile
|
117
125
|
- Gemfile.lock
|
118
126
|
- LICENSE.txt
|
119
|
-
- README.
|
127
|
+
- README.md
|
120
128
|
- Rakefile
|
129
|
+
- TODO
|
121
130
|
- VERSION
|
122
131
|
- bin/shellcast
|
123
132
|
- lib/shellcast.rb
|
@@ -130,7 +139,7 @@ files:
|
|
130
139
|
- spec/shellcast_spec.rb
|
131
140
|
- spec/spec_helper.rb
|
132
141
|
has_rdoc: true
|
133
|
-
homepage: http://
|
142
|
+
homepage: http://shell.heroku.com/
|
134
143
|
licenses:
|
135
144
|
- GPL
|
136
145
|
post_install_message:
|
@@ -143,6 +152,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
143
152
|
requirements:
|
144
153
|
- - ">="
|
145
154
|
- !ruby/object:Gem::Version
|
155
|
+
hash: -466564625
|
146
156
|
segments:
|
147
157
|
- 0
|
148
158
|
version: "0"
|
@@ -160,7 +170,7 @@ rubyforge_project:
|
|
160
170
|
rubygems_version: 1.3.7
|
161
171
|
signing_key:
|
162
172
|
specification_version: 3
|
163
|
-
summary:
|
173
|
+
summary: Screencasts for Shell Ninjas
|
164
174
|
test_files:
|
165
175
|
- spec/shellcast/player_spec.rb
|
166
176
|
- spec/shellcast/publisher_spec.rb
|
data/README.rdoc
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
= shellcast
|
2
|
-
|
3
|
-
Description goes here.
|
4
|
-
|
5
|
-
== Contributing to shellcast
|
6
|
-
|
7
|
-
* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
|
8
|
-
* Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
|
9
|
-
* Fork the project
|
10
|
-
* Start a feature/bugfix branch
|
11
|
-
* Commit and push until you are happy with your contribution
|
12
|
-
* Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
|
13
|
-
* Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
|
14
|
-
|
15
|
-
== Copyright
|
16
|
-
|
17
|
-
Copyright (c) 2010 Antono Vasiljev. See LICENSE.txt for
|
18
|
-
further details.
|
19
|
-
|