shelr 0.11.8 → 0.11.9

Sign up to get free protection for your applications and to get access to all the features.
data/.rbenv-version ADDED
@@ -0,0 +1 @@
1
+ 1.9.3-p125
data/Gemfile CHANGED
@@ -3,9 +3,11 @@ source "http://rubygems.org"
3
3
  gem 'json'
4
4
 
5
5
  group :development, :test do
6
+ gem "pry"
7
+ gem "pry-nav"
8
+ gem "rspec"
6
9
  gem "rspec"
7
10
  gem "aruba", :git => 'git://github.com/cucumber/aruba.git'
8
- gem "mocha"
9
11
  gem "bundler"
10
12
  gem "jeweler"
11
13
  gem "simplecov"
data/Gemfile.lock CHANGED
@@ -14,6 +14,7 @@ GEM
14
14
  builder (3.0.0)
15
15
  childprocess (0.3.1)
16
16
  ffi (~> 1.0.6)
17
+ coderay (1.0.5)
17
18
  cucumber (1.1.9)
18
19
  builder (>= 2.1.2)
19
20
  diff-lcs (>= 1.1.2)
@@ -31,10 +32,14 @@ GEM
31
32
  rake
32
33
  rdoc
33
34
  json (1.6.5)
34
- metaclass (0.0.1)
35
- mocha (0.10.5)
36
- metaclass (~> 0.0.1)
35
+ method_source (0.7.1)
37
36
  multi_json (1.1.0)
37
+ pry (0.9.8.2)
38
+ coderay (~> 1.0.5)
39
+ method_source (~> 0.7)
40
+ slop (>= 2.4.4, < 3)
41
+ pry-nav (0.1.0)
42
+ pry (~> 0.9.8.1)
38
43
  rake (0.9.2.2)
39
44
  rdoc (3.12)
40
45
  json (~> 1.4)
@@ -50,6 +55,7 @@ GEM
50
55
  multi_json (~> 1.0)
51
56
  simplecov-html (~> 0.5.3)
52
57
  simplecov-html (0.5.3)
58
+ slop (2.4.4)
53
59
  term-ansicolor (1.0.7)
54
60
 
55
61
  PLATFORMS
@@ -60,6 +66,7 @@ DEPENDENCIES
60
66
  bundler
61
67
  jeweler
62
68
  json
63
- mocha
69
+ pry
70
+ pry-nav
64
71
  rspec
65
72
  simplecov
data/bin/shelr CHANGED
@@ -19,6 +19,11 @@ HELP = <<-HELP
19
19
  push last - publish last record
20
20
  push RECORD_ID - publish
21
21
 
22
+ Getting record as json:
23
+
24
+ dump last - dump last record as json to current dir
25
+ dump RECORD_ID - dump any record as json to current dir
26
+
22
27
  Replaying:
23
28
 
24
29
  list - print list of records
@@ -53,7 +58,14 @@ when 'play'
53
58
  puts "Missing id for shellcast"
54
59
  Shelr::Player.list
55
60
  puts "Select one..."
56
- exit
61
+ end
62
+ when 'dump'
63
+ if ARGV[1]
64
+ Shelr::Publisher.new.dump(ARGV[1])
65
+ else
66
+ puts "What do you want to dump?"
67
+ Shelr::Player.list
68
+ puts "Select one..."
57
69
  end
58
70
  when 'push'
59
71
  if ARGV[1]
@@ -62,21 +74,18 @@ when 'push'
62
74
  puts "What do you want to publish?"
63
75
  Shelr::Player.list
64
76
  puts "Select one..."
65
- exit
66
77
  end
67
78
  when 'setup'
68
79
  if ARGV[1]
69
80
  Shelr.api_key = ARGV[1]
70
81
  else
71
82
  puts "\n\tUsage: #{BASENAME} setup API_KEY\n\n"
72
- exit
73
83
  end
74
84
  when 'backend'
75
85
  if ARGV[1]
76
86
  Shelr.backend = ARGV[1]
77
87
  else
78
88
  puts "\n\tUsage: #{BASENAME} backend [ttyrec|script]\n\n"
79
- exit
80
89
  end
81
90
  when 'version'
82
91
  puts Shelr::VERSION
@@ -1,7 +1,7 @@
1
1
  Feature: Recording shell
2
2
 
3
3
  In order to impress the world
4
- As a `shelr` user
4
+ As a `Ŝelr` user
5
5
  I would like to record my terminal
6
6
 
7
7
  Background:
@@ -5,10 +5,34 @@ module Shelr
5
5
  class Publisher
6
6
 
7
7
  def publish(id)
8
- uri = URI.parse(Shelr::API_URL + '/records')
9
- params = { 'record' => prepare(id) }
10
- params.merge!({'api_key' => Shelr.api_key}) if api_key
11
- res = Net::HTTP.post_form(uri, params)
8
+ with_exception_handler do
9
+ uri = URI.parse(Shelr::API_URL + '/records')
10
+ params = { 'record' => prepare(id) }
11
+ params.merge!({'api_key' => Shelr.api_key}) if api_key
12
+ handle_response Net::HTTP.post_form(uri, params)
13
+ end
14
+ end
15
+
16
+ def dump(id)
17
+ with_exception_handler do
18
+ File.open(dump_filename, 'w+') do |f|
19
+ f.puts(prepare(id))
20
+ end
21
+ puts "=> record dumped to #{dump_filename}"
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def with_exception_handler(&block)
28
+ yield
29
+ rescue => e
30
+ puts "=> Something went wrong..."
31
+ puts e.message
32
+ puts e.backtrace.join("\n")
33
+ end
34
+
35
+ def handle_response(res)
12
36
  res = JSON.parse(res.body)
13
37
  if res['ok']
14
38
  puts res['message']
@@ -18,6 +42,10 @@ module Shelr
18
42
  end
19
43
  end
20
44
 
45
+ def dump_filename
46
+ File.join(Dir.getwd, 'shelr-record.json')
47
+ end
48
+
21
49
  def api_key
22
50
  unless Shelr.api_key
23
51
  print 'Paste your API KEY [or Enter to publish as Anonymous]: '
@@ -29,8 +57,8 @@ module Shelr
29
57
 
30
58
  def prepare(id)
31
59
  puts
32
- puts 'Your record will be published under terms'
33
- puts 'of Creative Commons Attribution-ShareAlike 3.0 Unported'
60
+ puts 'Your record will be published under terms of'
61
+ puts 'Creative Commons Attribution-ShareAlike 3.0 Unported'
34
62
  puts 'See http://creativecommons.org/licenses/by-sa/3.0/ for details.'
35
63
  puts
36
64
 
data/lib/shelr/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Shelr
2
- VERSION = '0.11.8'
2
+ VERSION = '0.11.9'
3
3
  end
data/shelr.1 CHANGED
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "SHELR" "1" "February 2012" "" ""
4
+ .TH "SHELR" "1" "March 2012" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBshelr\fR \- screencasting for shell ninjas
@@ -33,6 +33,10 @@ plays local or remote shellcast\.
33
33
  \fBpush\fR
34
34
  publish your shellcast
35
35
  .
36
+ .TP
37
+ \fBdump\fR
38
+ dump shellcast as json to current directory\.
39
+ .
36
40
  .SH "EXAMPLES"
37
41
  Record your shellcast:
38
42
  .
data/shelr.1.ronn CHANGED
@@ -27,6 +27,9 @@ or other services.
27
27
  * `push`:
28
28
  publish your shellcast
29
29
 
30
+ * `dump`:
31
+ dump shellcast as json to current directory.
32
+
30
33
  ## EXAMPLES
31
34
 
32
35
  Record your shellcast:
@@ -0,0 +1 @@
1
+ {"timing":"0.117451 100\n2.245175 1\n0.645616 1\n0.131508 2\n0.265617 41\n0.006015 198\n0.002213 174\n0.000021 100\n0.045656 1\n1.635819 1\n0.158412 1\n0.438685 1\n0.408513 4\n1.611577 41\n0.005889 100\n0.053797 6\n","typescript":"Script started on Sun 25 Mar 2012 02:09:04 PM FET\n\u001b]0;antono@libero ~/Code/shelr.tv \u0007\u001b[0;36m(\u001b[0;32mnext \u001b[0;31m✗\u001b[0;36m)\u001b[39m \u001b[0;36mshelr.tv\u001b[39m ls\r\n\u001b]0;ls {~/Code/shelr.tv} (antono@libero)\u0007\u001b[0m\u001b[01;34mapp\u001b[0m config.ru \u001b[01;34mdoc\u001b[0m Gemfile.lock Guardfile \u001b[01;34mlog\u001b[0m Rakefile \u001b[01;32mrun.sh\u001b[0m \u001b[01;34msolr\u001b[0m tags \u001b[01;34mtmp\u001b[0m \u001b[01;34mvendor\u001b[0m\r\n\u001b[01;34mconfig\u001b[0m \u001b[01;34mdb\u001b[0m Gemfile gems.tags \u001b[01;34mlib\u001b[0m \u001b[01;34mpublic\u001b[0m README.md \u001b[01;34mscript\u001b[0m \u001b[01;34mspec\u001b[0m TAGS TODO.org\r\n\u001b]0;antono@libero ~/Code/shelr.tv \u0007\u001b[0;36m(\u001b[0;32mnext \u001b[0;31m✗\u001b[0;36m)\u001b[39m \u001b[0;36mshelr.tv\u001b[39m yo !^C\r\n\u001b]0;ls {~/Code/shelr.tv} (antono@libero)\u0007\u001b]0;antono@libero ~/Code/shelr.tv \u0007\u001b[0;36m(\u001b[0;32mnext \u001b[0;31m✗\u001b[0;36m)\u001b[39m \u001b[0;36mshelr.tv\u001b[39m exit\r\n\nScript done on Sun 25 Mar 2012 02:09:12 PM FET\n","title":"hello fixture","created_at":"1332673740","columns":"141","rows":"40","description":"hello fixture","tags":"fixture, linux"}
@@ -1,9 +1,40 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Shelr::Publisher do
4
+ before :each do
5
+ File.stub(:open)
6
+ Net::HTTP.stub(:post_form)
7
+ end
8
+
4
9
  describe "#publish(id)" do
5
- it "should publish shellcast with API_KEY" do
6
- pending
10
+ it "should prepare record as json" do
11
+ STDIN.stub(:gets).and_return('something')
12
+ subject.stub(:handle_response)
13
+ subject.stub(:prepare).and_return(fixture('record1.json'))
14
+ subject.should_receive(:prepare).with('hello')
15
+
16
+ subject.publish('hello')
17
+ end
18
+ end
19
+
20
+ describe "#dump_filename" do
21
+ it "should return `pwd` + /shelr-record.json" do
22
+ subject.send(:dump_filename).should == File.join(Dir.getwd, 'shelr-record.json')
7
23
  end
8
24
  end
25
+
26
+ describe "#dump(id)" do
27
+ before :each do
28
+ @file = mock('dump file')
29
+ File.stub(:open).and_yield @file
30
+ end
31
+
32
+ it "should save prepared dump to #dump_filename" do
33
+ File.should_receive(:open).with(subject.send(:dump_filename), 'w+')
34
+ subject.should_receive(:prepare).with('hello').and_return('dump')
35
+ @file.should_receive(:puts).with('dump')
36
+ subject.dump('hello')
37
+ end
38
+ end
39
+
9
40
  end
@@ -3,17 +3,17 @@ require 'spec_helper'
3
3
  describe Shelr::Recorder do
4
4
 
5
5
  before(:each) do
6
- STDIN.stubs(:gets).returns('my shellcast')
6
+ STDIN.stub(:gets).and_return('my shellcast')
7
7
  Shelr.backend = 'script'
8
8
  end
9
9
 
10
10
  describe "#record!" do
11
11
  before(:each) do
12
- subject.stubs(:system).with(anything).returns(true)
12
+ subject.stub(:system).with(anything).and_return(true)
13
13
  end
14
14
 
15
15
  it "should start script session" do
16
- subject.expects("system").with(regexp_matches Regexp.compile("script"))
16
+ subject.should_receive("system").with(Regexp.compile("script"))
17
17
  subject.record!
18
18
  end
19
19
  end
data/spec/spec_helper.rb CHANGED
@@ -23,12 +23,16 @@ require 'rspec'
23
23
  require 'shelr'
24
24
  require "rubygems"
25
25
  require "bundler/setup"
26
+ require 'pry'
27
+ require 'pry-nav'
26
28
 
27
29
  # Requires supporting files with custom matchers and macros, etc,
28
30
  # in ./support/ and its subdirectories.
29
31
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
30
32
 
31
-
32
- RSpec.configure do |config|
33
- config.mock_with :mocha
33
+ def fixture(name)
34
+ file = File.join(File.expand_path("../fixtures/#{name}", __FILE__))
35
+ require 'pp'
36
+ pp file
37
+ JSON.parse(File.read(file))
34
38
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shelr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.8
4
+ version: 0.11.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,11 +11,11 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2012-03-19 00:00:00.000000000 Z
14
+ date: 2012-03-25 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: json
18
- requirement: &6770980 !ruby/object:Gem::Requirement
18
+ requirement: &16036960 !ruby/object:Gem::Requirement
19
19
  none: false
20
20
  requirements:
21
21
  - - ! '>='
@@ -23,7 +23,7 @@ dependencies:
23
23
  version: 1.6.5
24
24
  type: :runtime
25
25
  prerelease: false
26
- version_requirements: *6770980
26
+ version_requirements: *16036960
27
27
  description: Screencast utility for unix shell junkies
28
28
  email: self@antono.info
29
29
  executables:
@@ -32,6 +32,7 @@ extensions: []
32
32
  extra_rdoc_files: []
33
33
  files:
34
34
  - .gitignore
35
+ - .rbenv-version
35
36
  - .rspec
36
37
  - .rvmrc
37
38
  - Gemfile
@@ -53,6 +54,7 @@ files:
53
54
  - shelr.1
54
55
  - shelr.1.ronn
55
56
  - shelr.gemspec
57
+ - spec/fixtures/record1.json
56
58
  - spec/shelr/player_spec.rb
57
59
  - spec/shelr/publisher_spec.rb
58
60
  - spec/shelr/recorder_spec.rb
@@ -71,21 +73,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
71
73
  - - ! '>='
72
74
  - !ruby/object:Gem::Version
73
75
  version: '0'
74
- segments:
75
- - 0
76
- hash: 218875704179376272
77
76
  required_rubygems_version: !ruby/object:Gem::Requirement
78
77
  none: false
79
78
  requirements:
80
79
  - - ! '>='
81
80
  - !ruby/object:Gem::Version
82
81
  version: '0'
83
- segments:
84
- - 0
85
- hash: 218875704179376272
86
82
  requirements: []
87
83
  rubyforge_project:
88
- rubygems_version: 1.8.17
84
+ rubygems_version: 1.8.11
89
85
  signing_key:
90
86
  specification_version: 3
91
87
  summary: Screencasts for Shell Ninjas