riel 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.
Files changed (48) hide show
  1. data/README +0 -0
  2. data/lib/riel/ansicolor.rb +93 -0
  3. data/lib/riel/array.rb +20 -0
  4. data/lib/riel/command.rb +30 -0
  5. data/lib/riel/date.rb +16 -0
  6. data/lib/riel/dir.rb +90 -0
  7. data/lib/riel/enumerable.rb +66 -0
  8. data/lib/riel/env.rb +49 -0
  9. data/lib/riel/file.rb +212 -0
  10. data/lib/riel/filetype.rb +189 -0
  11. data/lib/riel/hash.rb +12 -0
  12. data/lib/riel/io.rb +20 -0
  13. data/lib/riel/log.rb +548 -0
  14. data/lib/riel/matchdata.rb +13 -0
  15. data/lib/riel/optproc.rb +369 -0
  16. data/lib/riel/pathname.rb +16 -0
  17. data/lib/riel/rcfile.rb +35 -0
  18. data/lib/riel/regexp.rb +152 -0
  19. data/lib/riel/setdiff.rb +53 -0
  20. data/lib/riel/size_converter.rb +62 -0
  21. data/lib/riel/string.rb +81 -0
  22. data/lib/riel/tempfile.rb +28 -0
  23. data/lib/riel/text.rb +408 -0
  24. data/lib/riel/timer.rb +52 -0
  25. data/lib/riel.rb +13 -0
  26. data/test/riel/array_test.rb +22 -0
  27. data/test/riel/command_test.rb +28 -0
  28. data/test/riel/date_test.rb +17 -0
  29. data/test/riel/dir_test.rb +98 -0
  30. data/test/riel/enumerable_test.rb +27 -0
  31. data/test/riel/env_test.rb +52 -0
  32. data/test/riel/file_test.rb +242 -0
  33. data/test/riel/filetype_test.rb +32 -0
  34. data/test/riel/hash_test.rb +12 -0
  35. data/test/riel/io_test.rb +22 -0
  36. data/test/riel/log_test.rb +184 -0
  37. data/test/riel/matchdata_test.rb +15 -0
  38. data/test/riel/optproc_test.rb +233 -0
  39. data/test/riel/pathname_test.rb +36 -0
  40. data/test/riel/rcfile_test.rb +44 -0
  41. data/test/riel/regexp_test.rb +24 -0
  42. data/test/riel/setdiff_test.rb +26 -0
  43. data/test/riel/size_converter_test.rb +64 -0
  44. data/test/riel/string_test.rb +58 -0
  45. data/test/riel/tempfile_test.rb +16 -0
  46. data/test/riel/text_test.rb +102 -0
  47. data/test/riel/timer_test.rb +43 -0
  48. metadata +134 -0
@@ -0,0 +1,189 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ require 'singleton'
5
+
6
+ class FileType
7
+ include Singleton
8
+
9
+ BINARY = "binary"
10
+ DIRECTORY = "directory"
11
+ NONE = "none"
12
+ TEXT = "text"
13
+ UNKNOWN = "unknown"
14
+ UNREADABLE = "unreadable"
15
+
16
+ # extensions associated with files that are always text:
17
+ TEXT_EXTENSIONS = %w{
18
+ c
19
+ css
20
+ el
21
+ h
22
+ html
23
+ java
24
+ mk
25
+ php
26
+ pl
27
+ pm
28
+ rb
29
+ rbw
30
+ txt
31
+ xml
32
+ yml
33
+ yaml
34
+ }
35
+
36
+ # extensions associated with files that are never text:
37
+ NONTEXT_EXTENSIONS = %w{
38
+ Z
39
+ a
40
+ bz2
41
+ elc
42
+ gif
43
+ gz
44
+ jar
45
+ jpeg
46
+ jpg
47
+ mp3
48
+ mpeg
49
+ o
50
+ obj
51
+ pdf
52
+ png
53
+ ps
54
+ tar
55
+ wav
56
+ zip
57
+ }
58
+
59
+ EXTENSION_REGEXP = %r{ \. (\w+) $ }x
60
+
61
+ def initialize
62
+ # the percentage of characters that we allow to be odd in a text file
63
+ @odd_factor = 0.3
64
+
65
+ # how many bytes (characters) of a file we test
66
+ @test_length = 1024
67
+
68
+ @known = Hash.new
69
+
70
+ set_extensions(true, *TEXT_EXTENSIONS)
71
+ set_extensions(false, *NONTEXT_EXTENSIONS)
72
+ end
73
+
74
+ def ascii?(c)
75
+ # from ctype.h
76
+ (c.to_i & ~0x7f) == 0
77
+ end
78
+
79
+ def type(file)
80
+ begin
81
+ case File.stat(file).ftype
82
+ when "directory"
83
+ DIRECTORY
84
+ when "file"
85
+ if File.readable?(file)
86
+ text?(file) ? TEXT : BINARY
87
+ else
88
+ UNREADABLE
89
+ end
90
+ else
91
+ UNKNOWN
92
+ end
93
+ rescue Errno::ENOENT
94
+ NONE
95
+ rescue => e
96
+ warn "file not readable: #{file}; error: #{e}"
97
+ UNREADABLE
98
+ end
99
+ end
100
+
101
+ def set_extensions(is_text, *exts)
102
+ exts.each do |ext|
103
+ @known[ext] = is_text
104
+ end
105
+ end
106
+
107
+ def set_text(*ext)
108
+ @known[ext] = true
109
+ end
110
+
111
+ def set_nontext(ext)
112
+ @known[ext] = false
113
+ end
114
+
115
+ def text_extensions
116
+ @known.keys.select { |suf| @known[suf] }
117
+ end
118
+
119
+ def nontext_extensions
120
+ @known.keys.reject { |suf| @known[suf] }
121
+ end
122
+
123
+ def text?(file)
124
+ return false unless File.exists?(file)
125
+
126
+ if md = EXTENSION_REGEXP.match(file.to_s)
127
+ suffix = md[1]
128
+ if @known.include?(suffix)
129
+ return @known[suffix]
130
+ end
131
+ end
132
+
133
+ ntested = 0
134
+ nodd = 0
135
+
136
+ begin
137
+ File.open(file) do |f|
138
+ buf = f.read(@test_length)
139
+ if buf
140
+ buf.each_byte do |ch|
141
+ ntested += 1
142
+
143
+ # never allow null in a text file
144
+ return false if ch.to_i == 0
145
+
146
+ nodd += 1 unless ascii?(ch)
147
+ end
148
+ else
149
+ # file had length of 0:
150
+ return UNKNOWN
151
+ end
152
+ end
153
+ rescue => e
154
+ warn "file not readable: #{file}; error: #{e}"
155
+ return UNREADABLE
156
+ end
157
+
158
+ nodd < ntested * @odd_factor
159
+ end
160
+
161
+ def self.ascii?(c)
162
+ return self.instance.ascii?(c)
163
+ end
164
+
165
+ def self.type(file)
166
+ return self.instance.type(file)
167
+ end
168
+
169
+ def self.set_text(ext)
170
+ return self.instance.set_text(ext)
171
+ end
172
+
173
+ def self.set_nontext(ext)
174
+ return self.instance.set_nontext(ext)
175
+ end
176
+
177
+ def self.text_extensions
178
+ return self.instance.text_extensions
179
+ end
180
+
181
+ def self.nontext_extensions
182
+ return self.instance.nontext_extensions
183
+ end
184
+
185
+ def self.text?(file)
186
+ return self.instance.text?(file)
187
+ end
188
+
189
+ end
data/lib/riel/hash.rb ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ class Hash
5
+
6
+ $-w = false
7
+ def to_s
8
+ "{ " + collect { |k, v| k.to_s + " => " + v.to_s }.join(", ") + " }"
9
+ end
10
+ $-w = true
11
+
12
+ end
data/lib/riel/io.rb ADDED
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ class IO
5
+
6
+ $-w = false
7
+
8
+ # Reads the stream into an array. It works even when $/ == nil, which
9
+ # works around a problem in Ruby 1.8.1.
10
+ def readlines
11
+ contents = []
12
+ while ((line = gets) && line.length > 0)
13
+ contents << line
14
+ end
15
+ contents
16
+ end
17
+
18
+ $-w = true
19
+
20
+ end