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 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: