moon-null_io 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2c8680028df3d884b787ea9b790aacced72cc04f
4
+ data.tar.gz: 017f84e0d3d8dd5385e6bbb6477a9406118f16b4
5
+ SHA512:
6
+ metadata.gz: 4619154f2c8241d6887e2e079f97cdb07667f6436f4d7512997c06d54051fa341fbf221c255b0f49bee3961c65a6267883f8cac41ec246c90ea8e1a6e2a2f8c5
7
+ data.tar.gz: 6bbcc558151dec8aa4833d49e60ea255a3ca914c3d2686cceee44426f8768b686d05030fe7e0518f0d695fcfa6cbfb9c83b32fbadaede6c42498bef7b3fffc47
@@ -0,0 +1 @@
1
+ require 'moon-null_io/load'
@@ -0,0 +1 @@
1
+ require 'moon-null_io/null_io'
@@ -0,0 +1,125 @@
1
+ # An IO class stub, this class is intended to be used as a placeholder for
2
+ # a class that uses an IO object.
3
+ # Example of such classes would be a logger that logs to an IO.
4
+ class NullIO
5
+ # @param [Object] fd file descriptor
6
+ # @param [String] mode
7
+ # @param [Hash] options
8
+ def initialize(fd, mode = 'w+', options = {})
9
+ @fd = fd
10
+ @mode = mode
11
+ @options = options
12
+ @writable = !!(@mode =~ /[w\+a]/)
13
+ @readable = !!(@mode =~ /[r\+]/)
14
+ @binmode = !!(@mode =~ /[b]/)
15
+ @closed = false
16
+ end
17
+
18
+ # Is the IO closed?
19
+ #
20
+ # @return [Boolean]
21
+ def closed?
22
+ @closed
23
+ end
24
+
25
+ # Checks if the IO is open for operations
26
+ #
27
+ # @raise IOError
28
+ private def check_open
29
+ raise IOError, 'closed stream' if closed?
30
+ end
31
+
32
+ # Checks if the IO is open for writing
33
+ #
34
+ # @raise IOError
35
+ private def check_writable
36
+ check_open
37
+ raise IOError, 'not opened for writing' unless @writable
38
+ end
39
+
40
+ # Checks if the IO is open for reading
41
+ #
42
+ # @raise IOError
43
+ private def check_readable
44
+ check_open
45
+ raise IOError, 'not opened for reading' unless @readable
46
+ end
47
+
48
+ # Closes the IO
49
+ #
50
+ # @return [void]
51
+ def close
52
+ check_open
53
+ @closed = true
54
+ end
55
+
56
+ # Sets the IO into binary mode
57
+ #
58
+ # @return [NullIO]
59
+ def binmode
60
+ NullIO.new(@fd, @mode + 'b', @options)
61
+ end
62
+
63
+ # Is the IO in binary mode?
64
+ #
65
+ # @return [Boolean]
66
+ def binmode?
67
+ @binmode
68
+ end
69
+
70
+ # Writes a string to the stream, in the case of NullIO.
71
+ #
72
+ # @param [Object] args
73
+ # @return [Integer] number of bytes written
74
+ def write(*args)
75
+ check_writable
76
+ args.inject(0) { |acc, o| acc + o.to_s.size }
77
+ end
78
+
79
+ # Writes args to the stream.
80
+ #
81
+ # @param [Object] args
82
+ # @return [nil]
83
+ def print(*args)
84
+ write(*args)
85
+ nil
86
+ end
87
+
88
+ # (see #print)
89
+ def puts(*args)
90
+ print(*args)
91
+ end
92
+
93
+ # Pushes objects into the stream.
94
+ #
95
+ # @param [Object] args
96
+ # @return [self]
97
+ def <<(*args)
98
+ print(*args)
99
+ self
100
+ end
101
+
102
+ # Reads values from the stream, in the case of NullIO, an empty string is
103
+ # returned.
104
+ #
105
+ # @return [String] an empty string
106
+ def read
107
+ check_readable
108
+ ''
109
+ end
110
+
111
+ # Flushes the stream
112
+ #
113
+ # @return [self]
114
+ def flush(*args)
115
+ check_open
116
+ self
117
+ end
118
+
119
+ # STDIN shim
120
+ IN = new 0, 'r'
121
+ # STDOUT shim
122
+ OUT = new 1, 'w'
123
+ # STDERR shim
124
+ ERR = new 2, 'w'
125
+ end
@@ -0,0 +1,6 @@
1
+ ---
2
+ name: NullIO
3
+ author: IceDragon200 (Corey Powell) (mistdragon100@gmail.com)
4
+ description: "An empty, no-op IO object"
5
+ require: _basalt.rb
6
+ deps: []
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+ require 'moon-null_io/null_io'
3
+
4
+ describe NullIO::ERR do
5
+ subject(:io) { NullIO::ERR }
6
+
7
+ it 'is write only' do
8
+ io.puts('Hi')
9
+
10
+ expect { io.read }.to raise_error(IOError)
11
+ end
12
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+ require 'moon-null_io/null_io'
3
+
4
+ describe NullIO::IN do
5
+ subject(:io) { NullIO::IN }
6
+
7
+ it 'is read only' do
8
+ expect { io.puts('Hi') }.to raise_error(IOError)
9
+ io.read
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+ require 'moon-null_io/null_io'
3
+
4
+ describe NullIO::OUT do
5
+ subject(:io) { NullIO::OUT }
6
+
7
+ it 'is write only' do
8
+ io.puts('Hi')
9
+
10
+ expect { io.read }.to raise_error(IOError)
11
+ end
12
+ end
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+ require 'moon-null_io/null_io'
3
+
4
+ describe NullIO do
5
+ subject(:io) { @io ||= NullIO.new(-1, 'rw') }
6
+
7
+ context '#close' do
8
+ it 'closes a stream' do
9
+ myio = NullIO.new(-1, 'rw')
10
+ myio.close
11
+ expect(myio).to be_closed
12
+ end
13
+ end
14
+
15
+ context '#binmode' do
16
+ it 'creates a binary stream' do
17
+ myio = NullIO.new(-1, 'rw')
18
+ expect(myio).not_to be_binmode
19
+ myio = myio.binmode
20
+ expect(myio).to be_binmode
21
+ end
22
+ end
23
+
24
+ context '#write' do
25
+ it 'writes given objects' do
26
+ expect(io.write('Hi')).to eq(2)
27
+ end
28
+ end
29
+
30
+ context '#print' do
31
+ it 'prints given objects' do
32
+ io.print('Hello World', 1, 2, [], {})
33
+ end
34
+ end
35
+
36
+ context '#puts' do
37
+ # this is a lie in NullIOs case
38
+ it 'prints given objects appended with record seperator' do
39
+ io.puts('Hello World')
40
+ end
41
+ end
42
+
43
+ context '#<<' do
44
+ it 'writes given object' do
45
+ io << 'Hello World' << 'Derp'
46
+ end
47
+ end
48
+
49
+ context '#read' do
50
+ it 'reads from the io' do
51
+ expect(io.read).to eq('')
52
+ end
53
+ end
54
+
55
+ context '#flush' do
56
+ it 'flushes the io' do
57
+ expect(io.flush).to equal(io)
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,10 @@
1
+ Encoding.default_internal = Encoding.default_external = 'UTF-8'
2
+
3
+ require 'codeclimate-test-reporter'
4
+
5
+ require 'simplecov'
6
+
7
+ CodeClimate::TestReporter.start
8
+ SimpleCov.start
9
+
10
+ require 'moon-null_io/load'
metadata ADDED
@@ -0,0 +1,124 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: moon-null_io
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Blaž Hrastnik
8
+ - Corey Powell
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2015-09-01 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '10.3'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '10.3'
28
+ - !ruby/object:Gem::Dependency
29
+ name: yard
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '0.8'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '0.8'
42
+ - !ruby/object:Gem::Dependency
43
+ name: rspec
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '3.2'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '3.2'
56
+ - !ruby/object:Gem::Dependency
57
+ name: codeclimate-test-reporter
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: simplecov
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ description: An empty, no-op IO object in ruby.
85
+ email: mistdragon100@gmail.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - lib/moon-null_io/_basalt.rb
91
+ - lib/moon-null_io/load.rb
92
+ - lib/moon-null_io/null_io.rb
93
+ - lib/moon-null_io/pkg.yml
94
+ - spec/null_io_err_spec.rb
95
+ - spec/null_io_in_spec.rb
96
+ - spec/null_io_out_spec.rb
97
+ - spec/null_io_spec.rb
98
+ - spec/spec_helper.rb
99
+ homepage: https://github.com/polyfox/moon-null_io
100
+ licenses:
101
+ - MIT
102
+ metadata: {}
103
+ post_install_message:
104
+ rdoc_options: []
105
+ require_paths:
106
+ - lib
107
+ required_ruby_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ required_rubygems_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ requirements: []
118
+ rubyforge_project:
119
+ rubygems_version: 2.4.8
120
+ signing_key:
121
+ specification_version: 4
122
+ summary: NullIO
123
+ test_files: []
124
+ has_rdoc: