io-like 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. data/.yardopts +1 -0
  2. data/LICENSE +22 -57
  3. data/{LICENSE.rubyspec → LICENSE-rubyspec} +0 -0
  4. data/{NEWS → NEWS.md} +10 -5
  5. data/README.md +269 -0
  6. data/Rakefile +228 -0
  7. data/ruby.1.8.mspec +7 -0
  8. data/spec/binmode_spec.rb +29 -0
  9. data/spec/close_read_spec.rb +64 -0
  10. data/spec/close_spec.rb +36 -0
  11. data/spec/close_write_spec.rb +61 -0
  12. data/spec/closed_spec.rb +16 -0
  13. data/spec/each_byte_spec.rb +38 -0
  14. data/spec/each_line_spec.rb +11 -0
  15. data/spec/each_spec.rb +11 -0
  16. data/spec/eof_spec.rb +11 -0
  17. data/spec/fixtures/classes.rb +96 -0
  18. data/spec/fixtures/gets.txt +9 -0
  19. data/spec/fixtures/numbered_lines.txt +5 -0
  20. data/spec/fixtures/one_byte.txt +1 -0
  21. data/spec/fixtures/paragraphs.txt +7 -0
  22. data/spec/fixtures/readlines.txt +6 -0
  23. data/spec/flush_spec.rb +8 -0
  24. data/spec/getc_spec.rb +44 -0
  25. data/spec/gets_spec.rb +212 -0
  26. data/spec/isatty_spec.rb +6 -0
  27. data/spec/lineno_spec.rb +84 -0
  28. data/spec/output_spec.rb +47 -0
  29. data/spec/pos_spec.rb +53 -0
  30. data/spec/print_spec.rb +97 -0
  31. data/spec/printf_spec.rb +24 -0
  32. data/spec/putc_spec.rb +57 -0
  33. data/spec/puts_spec.rb +99 -0
  34. data/spec/read_spec.rb +162 -0
  35. data/spec/readchar_spec.rb +49 -0
  36. data/spec/readline_spec.rb +60 -0
  37. data/spec/readlines_spec.rb +140 -0
  38. data/spec/readpartial_spec.rb +92 -0
  39. data/spec/rewind_spec.rb +56 -0
  40. data/spec/seek_spec.rb +72 -0
  41. data/spec/shared/each.rb +204 -0
  42. data/spec/shared/eof.rb +116 -0
  43. data/spec/shared/pos.rb +39 -0
  44. data/spec/shared/tty.rb +12 -0
  45. data/spec/shared/write.rb +53 -0
  46. data/spec/sync_spec.rb +56 -0
  47. data/spec/sysread_spec.rb +87 -0
  48. data/spec/sysseek_spec.rb +68 -0
  49. data/spec/syswrite_spec.rb +60 -0
  50. data/spec/tell_spec.rb +7 -0
  51. data/spec/to_io_spec.rb +19 -0
  52. data/spec/tty_spec.rb +6 -0
  53. data/spec/ungetc_spec.rb +118 -0
  54. data/spec/write_spec.rb +61 -0
  55. data/spec_helper.rb +49 -0
  56. metadata +223 -32
  57. data/CONTRIBUTORS +0 -15
  58. data/GPL +0 -676
  59. data/HACKING +0 -123
  60. data/LEGAL +0 -56
  61. data/MANIFEST +0 -10
  62. data/README +0 -150
data/HACKING DELETED
@@ -1,123 +0,0 @@
1
- = Guide to Hacking IO::Like
2
-
3
- == Licensing
4
-
5
- Contributed code must be licensed under the same license as this project. See
6
- the included LICENSE file for details. Special consideration MAY be made in
7
- some cases, but such cases will be rare.
8
-
9
-
10
- == Dependencies
11
-
12
- === Runtime
13
-
14
- * Ruby 1.8.6 or greater
15
-
16
-
17
- === Build
18
-
19
- * rubygems 0.9.0 or greater
20
- * rake 0.8.3 or greater
21
- * mspec 1.5.9 (optional - used for testing)
22
- * allison 2.0.3 (optional - used for documentation only, if available)
23
- * rsync (optional - used for publishing documentation)
24
-
25
-
26
- === Install
27
-
28
- * rubygems 0.9.0 or greater
29
-
30
-
31
- == Versioning Policy
32
-
33
- Version numbers will be in <em>x.y.z</em> format, where <em>x</em>, <em>y</em>,
34
- and <em>z</em> are integers starting from 0. The version increment rules are
35
- as follows:
36
-
37
- <b>x</b>:: Planned releases which implement significant changes and/or break API
38
- compatibility. An exception is to be made for the transition from
39
- the <em>0.y.z</em> series to the <em>1.y.z</em> series since the
40
- <em>0.y.z</em> series is expected to be unstable throughout
41
- development. When incremented, <em>y</em> and <em>z</em> are reset
42
- to 0.
43
- <b>y</b>:: Planned releases which incorporate numerous bug fixes and/or new
44
- features which do not break backward compatibility. When
45
- incremented, <em>z</em> is reset to 0.
46
- <b>z</b>:: Generally, unplanned releases which incorporate a single fix for a
47
- critical defect.
48
-
49
- This is the {Rational Versioning Policy}[http://www.rubygems.org/read/chapter/7]
50
- as outlined in the {RubyGems User Guide}[http://www.rubygems.org/read/book/1].
51
-
52
-
53
- == Support Policy
54
-
55
- Due to limitations in resources (time/money/manpower), this project will focus
56
- primarily upon the development line of the current release at any given time.
57
- Fixes and new features should be applied first to that development line and then
58
- backported to earlier releases if necessary and feasible. Long term maintenance
59
- of previous releases is not planned. Users are generally expected to upgrade to
60
- the latest release in order to receive updates unless an explicit declaration of
61
- support for a previous release is made.
62
-
63
-
64
- == Coding Style
65
-
66
- The following points are not necessarily set in stone but should rather be used
67
- as a good guideline. Consistency is the goal of coding style, and changes will
68
- be more easily accepted if they are consistent with the rest of the code.
69
-
70
- <b>File Encoding</b>:: UTF-8
71
- <b>Indentation</b>:: Two spaces; no tabs
72
- <b>Comments</b>:: Document classes, attributes, methods, and code
73
- <b>Boolean Operators</b>:: Use <tt>&&</tt> and <tt>||</tt> for boolean tests;
74
- avoid <tt>and</tt> and <tt>or</tt>
75
- <b>Method Calls</b>:: Use <tt>a_method(arg, arg, etc)</tt>; <b>not</b>
76
- <tt>a_method( arg, arg, etc )</tt>,
77
- <tt>a_method arg, arg, etc</tt>, or any other
78
- variation
79
- <b>Blocks</b>:: <tt>do end</tt> for multi-line blocks and
80
- <tt>{ }</tt> for single-line blocks
81
- <b>Line length</b>:: Limit lines to a maximum of 80 characters
82
- <b>General</b>:: Try to follow the flow and style of the rest of the
83
- code
84
-
85
-
86
- == Generating Patches
87
-
88
- Patches should usually be generated against the <em>HEAD</em> revision of the
89
- <em>master</em> branch. When generating patches, please try to implement only
90
- a single feature or bug fix per patch. Documentation describing a patch should
91
- be included along with the patch so that the maintainer can more easily
92
- determine whether or not a patch is acceptable. Patches lacking the necessary
93
- documentation will be ignored.
94
-
95
- Patches will be much more readily accepted if test cases are provided which
96
- verify correct operation. Such test cases should be provided within the patch
97
- rather than as a separate patch. Proper documentation, especially for
98
- user-visible APIs, is highly prized; providing accurate and detailed
99
- documentation, often in the form of rubydocs, throughout new code contributions
100
- will also increase the desirability of a patch.
101
-
102
- If a series of patches is generated which cannot be applied individually, make
103
- sure to mention the dependency relationships in whatever medium is being used
104
- to distribute the patches. For instance, if a bug is discovered while
105
- implementing a new feature, create a patch which fixes the bug followed by a
106
- separate patch adding the feature. If the feature patch requires the bug fix
107
- patch in order to work, note that dependency in the comments for the feature
108
- patch by somehow referencing the bug fix patch.
109
-
110
- The patch generation process in general:
111
- $ git clone git://rubyforge.org/io-like.git # Clone the repo and check out
112
- # the master branch.
113
- $ cd io-like # Enter the workspace.
114
- (make and test changes)
115
- $ git add file1 file2 .. # Add new/modified files.
116
- $ git commit # Commit changes.
117
- $ git format-patch -C HEAD^ # Create a patch for the last
118
- # commit.
119
-
120
- Repeat as necessary until all patches are generated. Then either attach them to
121
- 1 or more email messages addressed to the maintainer or attach them to tickets
122
- in the issue tracker for the project. Remember to include a brief description
123
- of the patch and its dependencies, if any.
data/LEGAL DELETED
@@ -1,56 +0,0 @@
1
- = Other Legalities
2
-
3
- == Files Licensed Differently
4
-
5
- The following file(s) are provided under a license or licenses separate from
6
- this project.
7
-
8
- See LICENSE.rubyspec for terms of use for the following:
9
- spec/binmode_spec.rb
10
- spec/close_read_spec.rb
11
- spec/close_spec.rb
12
- spec/close_write_spec.rb
13
- spec/closed_spec.rb
14
- spec/each_byte_spec.rb
15
- spec/each_line_spec.rb
16
- spec/each_spec.rb
17
- spec/eof_spec.rb
18
- spec/fixtures/classes.rb
19
- spec/fixtures/gets.txt
20
- spec/fixtures/numbered_lines.txt
21
- spec/fixtures/one_byte.txt
22
- spec/fixtures/paragraphs.txt
23
- spec/fixtures/readlines.txt
24
- spec/flush_spec.rb
25
- spec/getc_spec.rb
26
- spec/gets_spec.rb
27
- spec/isatty_spec.rb
28
- spec/lineno_spec.rb
29
- spec/output_spec.rb
30
- spec/pos_spec.rb
31
- spec/print_spec.rb
32
- spec/printf_spec.rb
33
- spec/putc_spec.rb
34
- spec/puts_spec.rb
35
- spec/read_spec.rb
36
- spec/readchar_spec.rb
37
- spec/readline_spec.rb
38
- spec/readlines_spec.rb
39
- spec/readpartial_spec.rb
40
- spec/rewind_spec.rb
41
- spec/seek_spec.rb
42
- spec/shared/each.rb
43
- spec/shared/eof.rb
44
- spec/shared/pos.rb
45
- spec/shared/tty.rb
46
- spec/shared/write.rb
47
- spec/sync_spec.rb
48
- spec/sysread_spec.rb
49
- spec/sysseek_spec.rb
50
- spec/syswrite_spec.rb
51
- spec/tell_spec.rb
52
- spec/to_io_spec.rb
53
- spec/tty_spec.rb
54
- spec/ungetc_spec.rb
55
- spec/write_spec.rb
56
- spec_helper.rb
data/MANIFEST DELETED
@@ -1,10 +0,0 @@
1
- CONTRIBUTORS
2
- GPL
3
- HACKING
4
- LEGAL
5
- LICENSE
6
- LICENSE.rubyspec
7
- MANIFEST
8
- NEWS
9
- README
10
- lib/io/like.rb
data/README DELETED
@@ -1,150 +0,0 @@
1
- = IO::Like - in the Likeness of IO
2
-
3
- The IO::Like module provides all of the methods of typical IO implementations
4
- such as File; most importantly the read, write, and seek series of methods. A
5
- class which includes IO::Like needs to provide only a few methods in order to
6
- enable the higher level methods. Buffering is automatically provided by default
7
- for the methods which normally provide it in IO.
8
-
9
- See the documentation for IO::Like for more details regarding the necessary
10
- methods.
11
-
12
-
13
- == License
14
-
15
- Copyright © 2008,2009 Jeremy Bopp <jeremy at bopp dot net>
16
-
17
- Licensed under the same terms as Ruby -- See the included LICENSE file for
18
- details
19
-
20
- Some parts licensed under the same terms as the rubyspec project -- See the
21
- included LEGAL and LICENSE.rubyspec files for details
22
-
23
-
24
- == Installation/Removal
25
-
26
- Download the GEM file and install it with:
27
- % sudo gem install io-like-VERSION.gem
28
-
29
- or directly with:
30
- % sudo gem install io-like
31
-
32
- Removal is the same in either case:
33
- % sudo gem uninstall io-like
34
-
35
-
36
- == Example
37
- More examples can be found in the +examples+ directory of the source
38
- distribution.
39
-
40
- A simple ROT13 codec:
41
- gem 'io-like' # Use require_gem for rubygems versions older than 0.9.0.
42
- require 'io/like'
43
-
44
- class ROT13Filter
45
- include IO::Like
46
-
47
- def self.open(delegate_io)
48
- filter = new(delegate_io)
49
- return filter unless block_given?
50
-
51
- begin
52
- yield(filter)
53
- ensure
54
- filter.close unless filter.closed?
55
- end
56
- end
57
-
58
- def initialize(delegate_io)
59
- @delegate_io = delegate_io
60
- end
61
-
62
- private
63
-
64
- def encode_rot13(string)
65
- result = string.dup
66
- 0.upto(result.length) do |i|
67
- case result[i]
68
- when 65..90
69
- result[i] = (result[i] - 52) % 26 + 65
70
- when 97..122
71
- result[i] = (result[i] - 84) % 26 + 97
72
- end
73
- end
74
- result
75
- end
76
-
77
- def unbuffered_read(length)
78
- encode_rot13(@delegate_io.sysread(length))
79
- end
80
-
81
- def unbuffered_seek(offset, whence = IO::SEEK_SET)
82
- @delegate_io.sysseek(offset, whence)
83
- end
84
-
85
- def unbuffered_write(string)
86
- @delegate_io.syswrite(encode_rot13(string))
87
- end
88
- end
89
-
90
- File.open('normal_file.txt', 'w') do |f|
91
- f.puts('This is a test')
92
- end
93
-
94
- File.open('rot13_file.txt', 'w') do |f|
95
- ROT13Filter.open(f) do |rot13|
96
- rot13.puts('This is a test')
97
- end
98
- end
99
-
100
- File.open('normal_file.txt') do |f|
101
- ROT13Filter.open(f) do |rot13|
102
- puts(rot13.read) # -> Guvf vf n grfg
103
- end
104
- end
105
-
106
- File.open('rot13_file.txt') do |f|
107
- ROT13Filter.open(f) do |rot13|
108
- puts(rot13.read) # -> This is a test
109
- end
110
- end
111
-
112
- File.open('normal_file.txt') do |f|
113
- ROT13Filter.open(f) do |rot13|
114
- rot13.pos = 5
115
- puts(rot13.read) # -> vf n grfg
116
- end
117
- end
118
-
119
- File.open('rot13_file.txt') do |f|
120
- ROT13Filter.open(f) do |rot13|
121
- rot13.pos = 5
122
- puts(rot13.read) # -> is a test
123
- end
124
- end
125
-
126
- File.open('normal_file.txt') do |f|
127
- ROT13Filter.open(f) do |rot13|
128
- ROT13Filter.open(rot13) do |rot26| # ;-)
129
- puts(rot26.read) # -> This is a test
130
- end
131
- end
132
- end
133
-
134
-
135
- == Known Bugs/Limitations
136
-
137
- 1. Only up to version 1.8.6 of Ruby's IO interface is implemented. Version
138
- 1.8.7 and eventually 1.9.0/2.0.0 support are coming soon.
139
- 2. Ruby's finalization capabilities fall a bit short in a few respects, and as a
140
- result, it is impossible to cause the close, close_read, or close_write
141
- methods to be called automatically when an including class is garbage
142
- collected. Define a class open method in the manner of File.open which
143
- guarantees that an appropriate close method will be called after executing a
144
- block. Other than that, be diligent about calling the close methods.
145
-
146
-
147
- == Contributing
148
-
149
- Contributions for bug fixes, documentation, extensions, tests, etc. are
150
- encouraged. Please read the file HACKING for details.