showterm 0.1.pre.1

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.
Files changed (3) hide show
  1. data/bin/showterm +23 -0
  2. data/lib/showterm.rb +59 -0
  3. metadata +47 -0
data/bin/showterm ADDED
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'showterm'
4
+
5
+ if ARGV.include?('-h') || ARGV.include?('--help')
6
+ puts <<-EOF
7
+ Usage: showterm <command to run>
8
+
9
+ showterm will record the exact output of your session, and upload it to the
10
+ internet where it can be replayed by anyone to whom you give the URL.
11
+ EOF
12
+ end
13
+
14
+ sf, tf = Showterm.record! *ARGV
15
+ begin
16
+ Showterm.upload! sf, tf
17
+ rescue => e
18
+ puts [e] + e.backtrace
19
+ puts "DON'T PANIC"
20
+ puts "your script file is: #{sf} and your timing file is: #{tf}"
21
+ puts "to try uploading again:"
22
+ puts "ruby -rshowterm -e'Showterm.upload! #{sf.inspect}, #{tf.inspect}'"
23
+ end
data/lib/showterm.rb ADDED
@@ -0,0 +1,59 @@
1
+ require 'json'
2
+ require 'tempfile'
3
+ require 'net/https'
4
+
5
+ module Showterm
6
+ extend self
7
+
8
+ def record!(*cmd)
9
+
10
+ scriptfile = Tempfile.new('showterm.script')
11
+ timingfile = Tempfile.new('showterm.time')
12
+
13
+ scriptfile.close(false)
14
+ timingfile.close(false)
15
+
16
+ args = []
17
+ if cmd.size > 0
18
+ args << '-c' + cmd.join(" ")
19
+ end
20
+
21
+ args << '-q'
22
+ args << '-t' + timingfile.path
23
+ args << scriptfile.path
24
+
25
+ puts "showterm is recording, quit when you're done."
26
+
27
+ unless system('script', *args)
28
+ raise "Could not run 'script', please check that it's installed"
29
+ end
30
+
31
+ puts 'Recorded'
32
+
33
+ [scriptfile.path, timingfile.path]
34
+ end
35
+
36
+ def upload!(scriptfile, timingfile)
37
+ request = Net::HTTP::Post.new("/scripts")
38
+ request.set_form_data(:scriptfile => File.read(scriptfile),
39
+ :timingfile => File.read(timingfile))
40
+
41
+ response = http(request)
42
+ puts response.body
43
+ end
44
+
45
+ private
46
+
47
+ def http(request)
48
+ connection = Net::HTTP.new("showterm.herokuapp.com", 443)
49
+ connection.use_ssl = true
50
+ connection.verify_mode = OpenSSL::SSL::VERIFY_NONE
51
+ connection.open_timeout = 10
52
+ connection.read_timeout = 10
53
+ connection.start do |http|
54
+ http.request request
55
+ end
56
+ rescue Timeout::Error
57
+ raise "Could not connect to https://api.github.com/"
58
+ end
59
+ end
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: showterm
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.pre.1
5
+ prerelease: 4
6
+ platform: ruby
7
+ authors:
8
+ - Conrad Irwin
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-10-08 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Integrates with showterm.io for awesome sharability.
15
+ email: conrad.irwin@gmail.com
16
+ executables:
17
+ - showterm
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - lib/showterm.rb
22
+ - bin/showterm
23
+ homepage: http://github.com/Conradirwin/showterm
24
+ licenses: []
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ none: false
37
+ requirements:
38
+ - - ! '>'
39
+ - !ruby/object:Gem::Version
40
+ version: 1.3.1
41
+ requirements: []
42
+ rubyforge_project:
43
+ rubygems_version: 1.8.24
44
+ signing_key:
45
+ specification_version: 3
46
+ summary: Allows you to make screen casts of your terminal really easily
47
+ test_files: []