showterm 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d992ca33efcee43c76b0e0c5e3fc883ddba89c4f
4
+ data.tar.gz: 0f3efea05cea7538e05e7e267f079bb2f47aeca7
5
+ SHA512:
6
+ metadata.gz: 86e9ecea75443c6268da1a15ce8b08eb0d3a7f828c3a40b408972d769d63f2086f17bb86feeac3b46c9e426a81b6460d739a2537cee24322397e6ac2d61e457b
7
+ data.tar.gz: f4b7f0ec1a9fa654487ba1f6d09e9018127e58570e4c8561d49363b6ea535c9d368c415573769ada296b1a120f4d7cc8544cacc732dbe93befe95390fcfc055a
@@ -0,0 +1,4 @@
1
+ ext/*.o
2
+ ext/ttyrec
3
+ ext/ttyplay
4
+ ext/ttytime
data/README.md CHANGED
@@ -23,6 +23,22 @@ TODO
23
23
 
24
24
  * Allow embedders to chose colourschemes (at least light vs. dark background).
25
25
 
26
+ Bugs
27
+ ====
28
+
29
+ Showterm doesn't preserve enough context for `rvm` to work correctly. This can cause some ruby programs (e.g. capistrano) to crash when used inside a showterm. To fix this run: `rvm use` before running any ruby programs:
30
+
31
+ ```
32
+ [~/repo/www] > showterm
33
+ Showterm recording. (Exit shell when done.)
34
+ [~/repo/www] > rvm use
35
+ Using /Users/jasghar/.rvm/gems/ruby-1.9.3-p286
36
+ [~/repo/www] > cap deploy
37
+ ...
38
+ ```
39
+
40
+
41
+
26
42
  Meta-fu
27
43
  =======
28
44
 
@@ -14,6 +14,11 @@ class Showterm::Main
14
14
  ARGV.shift
15
15
  reupload
16
16
 
17
+ elsif ARGV[0] == '--delete'
18
+
19
+ ARGV.shift
20
+ delete
21
+
17
22
  else
18
23
 
19
24
  if '-e' == ARGV[0] || '--edit' == ARGV[0]
@@ -37,6 +42,8 @@ class Showterm::Main
37
42
  def help
38
43
  puts <<-EOF
39
44
  Usage: showterm [-e] <command to run>
45
+ showterm --retry <script> <times>
46
+ showterm --delete <url>
40
47
 
41
48
  showterm will record the exact output of your session, and upload it to the
42
49
  internet where it can be replayed by anyone to whom you give the URL.
@@ -47,6 +54,9 @@ class Showterm::Main
47
54
 
48
55
  If you would like to attempt an upload again
49
56
  showterm --retry <script> <times>
57
+
58
+ To delete a showterm you have uploaded from this computer
59
+ showterm --delete <url>
50
60
  EOF
51
61
  end
52
62
 
@@ -58,6 +68,18 @@ class Showterm::Main
58
68
  end
59
69
  end
60
70
 
71
+ def delete
72
+ if ARGV.size == 1
73
+ puts "Deleting..."
74
+ puts Showterm.delete! ARGV.first
75
+ else
76
+ puts "Usage: showterm --delete <url>"
77
+ end
78
+ rescue => e
79
+ puts [e] + e.backtrace
80
+ puts "-" * 80
81
+ end
82
+
61
83
  def upload(sf, tf)
62
84
  puts "Uploading..."
63
85
  puts Showterm.upload! sf, tf
@@ -1,6 +1,7 @@
1
1
  require 'tempfile'
2
2
  require 'shellwords'
3
3
  require 'net/https'
4
+ require 'securerandom'
4
5
 
5
6
  module Showterm
6
7
  extend self
@@ -43,24 +44,55 @@ module Showterm
43
44
  # @param [String] scriptfile The ANSI dump of the terminal
44
45
  # @param [String] timingfile The timings
45
46
  # @param [Integer] cols The width of the terminal
46
- def upload!(scriptfile, timingfile, cols=terminal_width, lines=terminal_height)
47
- retried ||= false
48
- request = Net::HTTP::Post.new("/scripts")
49
- request.set_form_data(:scriptfile => scriptfile,
50
- :timingfile => timingfile,
51
- :cols => cols,
52
- :lines => lines)
47
+ # @param [String] secret The shared secret that will allow deleting this showterm.
48
+ def upload!(scriptfile, timingfile, cols=terminal_width, lines=terminal_height, secret=shared_secret)
49
+ with_retry do
50
+ request = Net::HTTP::Post.new("/scripts")
51
+ request.set_form_data(:scriptfile => scriptfile,
52
+ :timingfile => timingfile,
53
+ :cols => cols,
54
+ :lines => lines,
55
+ :secret => secret)
56
+
57
+ response = http(request)
58
+ raise response.body unless Net::HTTPSuccess === response
59
+ response.body
60
+ end
61
+ end
62
+
63
+ # Delete from showterm.io
64
+ #
65
+ # @param [String] url The URL of the showterm to delete
66
+ # @param [String] secret The secret with which it was uploaded.
67
+ def delete!(url, secret=shared_secret)
53
68
 
69
+ request = Net::HTTP::Delete.new(URI(url).path)
70
+ request.set_form_data(:secret => secret)
54
71
  response = http(request)
72
+
55
73
  raise response.body unless Net::HTTPSuccess === response
56
74
  response.body
75
+ end
76
+
77
+ private
78
+
79
+ def with_retry(n=1, &block)
80
+ yield
57
81
  rescue
58
- raise if retried
59
- retried = true
82
+ raise if n == 0
83
+ n -= 1
60
84
  retry
61
85
  end
62
86
 
63
- private
87
+ def shared_secret
88
+ path = File.expand_path("~/.showterm")
89
+ unless File.exist?(path)
90
+ File.open(path, 'w') do |f|
91
+ f.write SecureRandom.hex(16)
92
+ end
93
+ end
94
+ File.read(path).strip
95
+ end
64
96
 
65
97
  # Get a temporary file that will be deleted when the program exits.
66
98
  def temp_file
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "showterm"
3
- s.version = "0.4.0"
3
+ s.version = "0.5.0"
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.author = "Conrad Irwin"
6
6
  s.email = "conrad.irwin@gmail.com"
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: showterm
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 0.4.0
4
+ version: 0.5.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Conrad Irwin
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-01-19 00:00:00.000000000 Z
11
+ date: 2013-11-12 00:00:00.000000000 Z
13
12
  dependencies: []
14
13
  description: Integrates with showterm.io for awesome sharability.
15
14
  email: conrad.irwin@gmail.com
@@ -19,6 +18,7 @@ extensions:
19
18
  - ext/extconf.rb
20
19
  extra_rdoc_files: []
21
20
  files:
21
+ - .gitignore
22
22
  - LICENSE.MIT
23
23
  - README.md
24
24
  - bin/showterm
@@ -38,27 +38,26 @@ files:
38
38
  - showterm.gemspec
39
39
  homepage: http://github.com/Conradirwin/showterm
40
40
  licenses: []
41
+ metadata: {}
41
42
  post_install_message:
42
43
  rdoc_options: []
43
44
  require_paths:
44
45
  - lib
45
46
  required_ruby_version: !ruby/object:Gem::Requirement
46
- none: false
47
47
  requirements:
48
- - - ! '>='
48
+ - - '>='
49
49
  - !ruby/object:Gem::Version
50
50
  version: '0'
51
51
  required_rubygems_version: !ruby/object:Gem::Requirement
52
- none: false
53
52
  requirements:
54
- - - ! '>='
53
+ - - '>='
55
54
  - !ruby/object:Gem::Version
56
55
  version: '0'
57
56
  requirements: []
58
57
  rubyforge_project:
59
- rubygems_version: 1.8.24
58
+ rubygems_version: 2.0.3
60
59
  signing_key:
61
- specification_version: 3
60
+ specification_version: 4
62
61
  summary: Allows you to make screen casts of your terminal really easily
63
62
  test_files: []
64
63
  has_rdoc: