indented_io 0.7.3 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f678cdfa6edee19dad6a5256367071ceea8d1ca7ebb5dd4556330f260250e0e1
4
- data.tar.gz: a2cb615747e62ca14ed25b872ae501c9f6b0dbaadd1a9ec73f3a2dbfcd519f61
3
+ metadata.gz: '097c526b0eeabff0b3be7d1483a6bac19232b803ddb630457c56ca4e7d180cea'
4
+ data.tar.gz: 0a6dc9f1bdf3dbc325ea52d06298b67dd7be389297baadc85d773e4f23edd329
5
5
  SHA512:
6
- metadata.gz: 914ca7aef4d7017fc4899c2f1cc19da8a7cf6bacc7c0937bd28033bef7cb2350f3878bd0ac9380301d4e2b0cb7df6aded579085a7a52c0f48206e80dbe6b3a7a
7
- data.tar.gz: 5dcf284b39596f7faaff975d2e703125caa157c133646a1aa9a2147bb95b7c4c852de61c3bcdc872208c08d79a7d4acc42a0170d168d66e9a56199082ed5d328
6
+ metadata.gz: 516212abf50023dd89352d55f2bf2745e367cf3e0646d3f0dc1c5d6a8193cf0fdc8053beec7259e978ad7bd94791cd6e8476c9ba101e2a066b93b311d9589b84
7
+ data.tar.gz: 4b8ead522fa1830c8c31888cded99ae00679737dd6f3560ebe9214190b27c38b2af2ff224437cb8c7be5e2de7fe338ca06525d5d7d980eb088f5dbc996380e6b
data/README.md CHANGED
@@ -142,14 +142,14 @@ In case of errors an `IndentedIO::Error` exception is raised
142
142
 
143
143
  You can add support for your own IO objects by including
144
144
  `IndentedIO::IndentedIOInterface` in your class. All that is required is that
145
- the class define a `#print` method with the same semantics as the system
146
- `#print`
145
+ the class define a `#write` method with the same semantics as `IO#write`
146
+ (convert arguments to strings and then write them)
147
147
 
148
148
  ```ruby
149
149
  require 'indented_io'
150
150
  class MyIO
151
151
  include IndentedIO::IndentedIOInterface
152
- def print(*args) ... end
152
+ def writte(*args) ... end
153
153
  end
154
154
 
155
155
  my_io = MyIO.new
@@ -174,7 +174,7 @@ check performance). It would be much faster if the inner loop was implemented
174
174
  in C. However, we're talking micro-seconds here: Printing without using
175
175
  IndentedIO range from around 0.25ms to 1ms while using IndentedIO slows it down
176
176
  to between 4 and 12 microseconds, so IndentedIO won't cause a noticeable slow
177
- down of your application
177
+ down of your application unless you do a lot of output
178
178
 
179
179
  ## Installation
180
180
 
data/TODO CHANGED
@@ -2,14 +2,20 @@
2
2
  TODO
3
3
  o Check if IO object is writable - no good solution ?
4
4
  o better name for @this_indent ? 'string' ?
5
- o Change dependency in IndentedIOInterface from #print to #write and bump
6
- version to 0.8 as this is the last user-visible change to be made
7
5
  o Reimplement core loop in C
8
6
  o Create BaseIndentedIO to hold bol status and remove it from IndentedIO
9
7
  o Transmogrify instances variables and protected methods in IndentedIO to
10
8
  avoid collision with names from the underlying device
11
9
  o Explain name collision issues in the docs
10
+ o Remove IndentedIO#dump
12
11
 
12
+ + Change dependency in IndentedIOInterface from #print to #write and bump
13
+ version to 0.8 as this is the last user-visible change to be made
14
+ + Oops. #print reimplemention doesn't do this:
15
+ If the output field separator ($,) is not nil, it is inserted between
16
+ objects. If the output record separator ($\) is not nil, it is appended to
17
+ the output
18
+ + Tests for #write
13
19
  + explain bol
14
20
  + Allow a symbolic :string argument
15
21
  + #printf !
@@ -20,48 +20,54 @@ module IndentedIO
20
20
  interface_indent(levels, string, bol: bol, &block)
21
21
  end
22
22
 
23
- # Indent and print args to the underlying device. #print has the same semantic
24
- # as Kernel#print
25
- def print(*args)
26
- if bol
27
- @device.print @combined_indent
28
- self.bol = false
29
- end
23
+ # Indent and print args to the underlying device. #write has the same semantic
24
+ # as IO#write
25
+ def write(*args)
26
+ n_bytes = 0
30
27
  args.join.each_char { |c|
31
28
  if c == "\n"
32
29
  self.bol = true
33
30
  elsif bol
34
- @device.print @combined_indent
31
+ n_bytes += @device.write(@combined_indent)
35
32
  self.bol = false
36
33
  end
37
- @device.print c
34
+ n_bytes += @device.write(c)
38
35
  }
36
+ n_bytes
37
+ end
38
+
39
+ # Indent and print args to the underlying device. #print has the same semantic
40
+ # as Kernel#print
41
+ def print(*args)
42
+ return nil if args.empty?
43
+ write(args.join($, || ''))
44
+ write($\) if $\
39
45
  nil
40
46
  end
41
47
 
42
48
  # Indent and print args to the underlying device. #printf has the same semantic
43
49
  # as Kernel#printf
44
50
  def printf(format, *args)
45
- print format % args
51
+ write format % args
46
52
  end
47
53
 
48
54
  # Indent and print args to the underlying device. #puts has the same semantic
49
55
  # as Kernel#puts
50
56
  def puts(*args)
51
- args.each { |arg| print(arg, "\n") }
57
+ write args.join("\n"), "\n"
52
58
  nil
53
59
  end
54
60
 
55
61
  # Indent and print args to the underlying device. #p has the same semantic
56
62
  # as Kernel#p. Please note that #p is usually not defined on other classes
57
- # then Kernel but can be used on any IndentedIO object
63
+ # than Kernel but can be used on any IndentedIO object
58
64
  def p(*args)
59
65
  if bol
60
- args.each { |arg| print(arg.inspect, "\n") }
66
+ args.each { |arg| write(arg.inspect, "\n") }
61
67
  else
62
- @device.print args.first.inspect, "\n"
68
+ @device.write(args.first.inspect, "\n")
63
69
  bol = true
64
- args[1..-1].each { |arg| print(arg.inspect, "\n") }
70
+ args[1..-1].each { |arg| write(arg.inspect, "\n") }
65
71
  end
66
72
  args.size == 1 ? args.first : args
67
73
  end
@@ -146,18 +152,5 @@ module IndentedIO
146
152
  self.bol = (bol.nil? ? true : bol)
147
153
  end
148
154
  end
149
-
150
- public
151
- # @!visibility private
152
- def dump
153
- $stderr.puts "#{self.class} [#{self.object_id}]"
154
- $stderr.puts " device: #{device.class} [#{device.object_id}]"
155
- $stderr.puts " base : #{base.class} [#{base.object_id}]"
156
- $stderr.puts " parent: #{parent.class} [#{parent.object_id}]"
157
- $stderr.puts " levels: #{levels}"
158
- $stderr.puts " this_indent: #{this_indent.inspect}"
159
- $stderr.puts " combined_indent: #{combined_indent.inspect}"
160
- $stderr.puts " bol: #{bol}"
161
- end
162
155
  end
163
156
  end
@@ -1,12 +1,12 @@
1
1
  module IndentedIO
2
2
  # IndentedIO interface that provides the #indent method. It is used by IO,
3
3
  # StringIO, and IndentedIO but can be included in any class that define a
4
- # #print method like this:
4
+ # #write method like this:
5
5
  #
6
6
  # require 'indented_io'
7
7
  # class MyIO
8
8
  # include IndentedIO::IndentedIOInterface
9
- # def print(*args) ... end
9
+ # def write(*args) ... end
10
10
  # end
11
11
  #
12
12
  # my_io = MyIO.new
@@ -1,4 +1,4 @@
1
1
  module IndentedIO
2
2
  # Version number
3
- VERSION = "0.7.3"
3
+ VERSION = '0.8.0'
4
4
  end
@@ -56,7 +56,7 @@ dynamic_wo_indent = timeit {
56
56
  }
57
57
 
58
58
  dynamic_w_indent = nil
59
- indent(" ") {
59
+ indent(:string => " ") {
60
60
  dynamic_w_indent = timeit { puts "Indented" }
61
61
  }
62
62
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: indented_io
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.3
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Claus Rasmussen