catch_and_release 0.0.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 95a40f343f7a05c372d164592e586f7e11e22d65
4
+ data.tar.gz: ce43684c7ea5068116ad79687780dd093a6a444a
5
+ SHA512:
6
+ metadata.gz: 777d2738723980eae67121c9fc387a50d8724aca8a9abfce747970503d71ff3d8134a749aae5d4dbfff39255b354a30567f32d85bc6c4f73397bd17fe6d969de
7
+ data.tar.gz: b50e5e40b4041a721d1797e3e6915063ca18940e1e5eb84be2c6f99ceba269e693746b0dd77fdd330c8097240255453867d05a4401c10c6f7a391e58d41c32e6
@@ -0,0 +1,4 @@
1
+ require_relative 'catch_and_release/version'
2
+
3
+ require_relative 'catch_and_release/catch'
4
+ require_relative 'catch_and_release/release'
@@ -0,0 +1,61 @@
1
+ module CatchAndRelease
2
+ module Catch
3
+
4
+ class << self
5
+ def stdout &block
6
+ Stdout.new.capture(&block).read
7
+ end
8
+
9
+ def stderr &block
10
+ Stderr.new.capture(&block).read
11
+ end
12
+ end
13
+
14
+ class Stdout
15
+ attr_reader :orig_stdout
16
+ attr_reader :new_stdout
17
+
18
+ def initialize
19
+ @orig_stdout = $stdout
20
+ @new_stdout = StringIO.new
21
+ end
22
+
23
+ def capture &block
24
+ $stdout = new_stdout
25
+ yield
26
+ return self
27
+ ensure
28
+ $stdout = orig_stdout
29
+ end
30
+
31
+ def read
32
+ new_stdout.rewind
33
+ new_stdout.read
34
+ end
35
+ end
36
+
37
+ class Stderr
38
+ attr_reader :orig_stderr
39
+ attr_reader :new_stderr
40
+
41
+ def initialize
42
+ @orig_stderr = $stderr
43
+ @new_stderr = StringIO.new
44
+ end
45
+
46
+ def capture &block
47
+ $stderr = new_stderr
48
+ yield
49
+ return self
50
+ ensure
51
+ $stderr = orig_stderr
52
+ end
53
+
54
+ def read
55
+ new_stderr.rewind
56
+ new_stderr.read
57
+ end
58
+ end
59
+
60
+ end
61
+ end
@@ -0,0 +1,34 @@
1
+ module CatchAndRelease
2
+ module Release
3
+
4
+ class << self
5
+
6
+ def stdin *args, &block
7
+ Stdin.new.release(*args, &block)
8
+ end
9
+
10
+ end
11
+
12
+ class Stdin
13
+ attr_reader :orig_stdin
14
+ attr_reader :new_stdin
15
+
16
+ def initialize
17
+ @orig_stdin = $stdin
18
+ @new_stdin = StringIO.new
19
+ end
20
+
21
+ def release *args, &block
22
+ $stdin = new_stdin
23
+ $stdin.puts(args.shift) until args.empty?
24
+ $stdin.rewind
25
+
26
+ yield
27
+ ensure
28
+ $stdin = orig_stdin
29
+ end
30
+
31
+ end
32
+
33
+ end
34
+ end
@@ -0,0 +1,3 @@
1
+ module CatchAndRelease
2
+ VERSION = '0.0.0'
3
+ end
@@ -0,0 +1,81 @@
1
+ require 'spec_helper'
2
+
3
+ describe CatchAndRelease::Catch do
4
+
5
+ describe "::stdout" do
6
+ it "returns $stdout output from the given block" do
7
+ out = described_class.stdout do
8
+ $stdout.print "hello world"
9
+ end
10
+
11
+ expect( out ).to eq "hello world"
12
+ end
13
+
14
+ context "with a non-default stdout" do
15
+ before :each do
16
+ @set_stdout = StringIO.new
17
+ $stdout = @set_stdout
18
+ end
19
+
20
+ it "returns $stdout to it's existing state after the call" do
21
+ described_class.stdout do
22
+ $stdout.print "hello world"
23
+ end
24
+
25
+ expect( $stdout ).to eq @set_stdout
26
+ end
27
+
28
+ context "when an exception is raised" do
29
+ it "returns $stdout to it's existing state after the call " do
30
+ begin
31
+ described_class.stdout do
32
+ raise "hello world"
33
+ end
34
+ rescue RuntimeError
35
+ end
36
+
37
+ expect( $stdout ).to eq @set_stdout
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ describe "::stderr" do
44
+ it "returns $stderr output from the given block" do
45
+ out = described_class.stderr do
46
+ $stderr.print "hello world"
47
+ end
48
+
49
+ expect( out ).to eq "hello world"
50
+ end
51
+
52
+ context "with a non-default stderr" do
53
+ before :each do
54
+ @set_stderr = StringIO.new
55
+ $stderr = @set_stderr
56
+ end
57
+
58
+ it "returns $stderr to it's existing state after the call" do
59
+ described_class.stderr do
60
+ $stderr.print "hello world"
61
+ end
62
+
63
+ expect( $stderr ).to eq @set_stderr
64
+ end
65
+
66
+ context "when an exception is raised" do
67
+ it "returns $stderr to it's existing state after the call " do
68
+ begin
69
+ described_class.stderr do
70
+ raise "hello world"
71
+ end
72
+ rescue RuntimeError
73
+ end
74
+
75
+ expect( $stderr ).to eq @set_stderr
76
+ end
77
+ end
78
+ end
79
+ end
80
+
81
+ end
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+
3
+ describe CatchAndRelease::Release do
4
+
5
+ describe "::stdin" do
6
+
7
+ it "loads args into stdin" do
8
+ described_class.stdin 'hello world' do
9
+ expect( get_input ).to eq 'hello world'
10
+ end
11
+ end
12
+
13
+ it "loads args in order to stdin" do
14
+ described_class.stdin 'hello world', 'second arg' do
15
+ expect( get_input ).to eq 'hello world'
16
+ expect( get_input ).to eq 'second arg'
17
+ end
18
+ end
19
+
20
+ context "with a non-default stdin" do
21
+ before :each do
22
+ @set_stdin = StringIO.new
23
+ $stdin = @set_stdin
24
+ end
25
+
26
+ it "returns $stdin to it's existing state after the call" do
27
+ described_class.stdin 'hello world' do
28
+ 'nothing'
29
+ end
30
+
31
+ expect( $stdin ).to eq @set_stdin
32
+ end
33
+
34
+ context "when an exception is raised" do
35
+ it "returns $stdin to it's existing state after the call " do
36
+ begin
37
+ described_class.stdin 'hello world' do
38
+ raise "hello world"
39
+ end
40
+ rescue RuntimeError
41
+ end
42
+
43
+ expect( $stdin ).to eq @set_stdin
44
+ end
45
+ end
46
+ end
47
+
48
+ end
49
+
50
+ def get_input
51
+ $stdin.gets.chomp
52
+ end
53
+
54
+ end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe CatchAndRelease do
4
+ it "has a version #" do
5
+ expect( CatchAndRelease::VERSION >= '0.0.0' ).to be_truthy
6
+ end
7
+ end
@@ -0,0 +1,2 @@
1
+ require 'rspec'
2
+ require 'catch_and_release'
metadata ADDED
@@ -0,0 +1,55 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: catch_and_release
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Steven Sloan
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-12-02 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: ' Tools for testing standard inputs & outputs '
14
+ email: stevenosloan@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/catch_and_release/catch.rb
20
+ - lib/catch_and_release/release.rb
21
+ - lib/catch_and_release/version.rb
22
+ - lib/catch_and_release.rb
23
+ - spec/lib/catch_and_release/catch_spec.rb
24
+ - spec/lib/catch_and_release/release_spec.rb
25
+ - spec/lib/catch_and_release_spec.rb
26
+ - spec/spec_helper.rb
27
+ homepage: http://github.com/stevenosloan/catch_and_release
28
+ licenses:
29
+ - MIT
30
+ metadata: {}
31
+ post_install_message:
32
+ rdoc_options: []
33
+ require_paths:
34
+ - lib
35
+ required_ruby_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - '>='
38
+ - !ruby/object:Gem::Version
39
+ version: 1.9.3
40
+ required_rubygems_version: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ requirements: []
46
+ rubyforge_project:
47
+ rubygems_version: 2.0.5
48
+ signing_key:
49
+ specification_version: 4
50
+ summary: Tools for testing standard inputs & outputs
51
+ test_files:
52
+ - spec/lib/catch_and_release/catch_spec.rb
53
+ - spec/lib/catch_and_release/release_spec.rb
54
+ - spec/lib/catch_and_release_spec.rb
55
+ - spec/spec_helper.rb