moon-null_io 1.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 +7 -0
- data/lib/moon-null_io/_basalt.rb +1 -0
- data/lib/moon-null_io/load.rb +1 -0
- data/lib/moon-null_io/null_io.rb +125 -0
- data/lib/moon-null_io/pkg.yml +6 -0
- data/spec/null_io_err_spec.rb +12 -0
- data/spec/null_io_in_spec.rb +11 -0
- data/spec/null_io_out_spec.rb +12 -0
- data/spec/null_io_spec.rb +60 -0
- data/spec/spec_helper.rb +10 -0
- metadata +124 -0
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,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
|
data/spec/spec_helper.rb
ADDED
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:
|