chars 0.1.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.
- data/History.txt +23 -0
- data/Manifest.txt +17 -0
- data/README.txt +98 -0
- data/Rakefile +14 -0
- data/lib/chars.rb +4 -0
- data/lib/chars/char_set.rb +228 -0
- data/lib/chars/chars.rb +165 -0
- data/lib/chars/extensions.rb +2 -0
- data/lib/chars/extensions/integer.rb +65 -0
- data/lib/chars/extensions/string.rb +65 -0
- data/lib/chars/version.rb +4 -0
- data/spec/char_set_spec.rb +186 -0
- data/spec/chars_spec.rb +107 -0
- data/spec/integer_spec.rb +65 -0
- data/spec/spec_helper.rb +5 -0
- data/spec/string_spec.rb +65 -0
- data/tasks/spec.rb +9 -0
- metadata +82 -0
data/History.txt
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
=== 0.1.0 / 2009-03-16
|
2
|
+
|
3
|
+
* Initial release.
|
4
|
+
* Provides character sets for:
|
5
|
+
* Numeric
|
6
|
+
* Octal
|
7
|
+
* Uppercase Hexadecimal
|
8
|
+
* Lowercase Hexadecimal
|
9
|
+
* Hexadecimal
|
10
|
+
* Uppercase Alpha
|
11
|
+
* Lowercase Alpha
|
12
|
+
* Alpha
|
13
|
+
* Alpha-numeric
|
14
|
+
* Punctuation
|
15
|
+
* Symbols
|
16
|
+
* Space
|
17
|
+
* Printable
|
18
|
+
* Control
|
19
|
+
* ASCII
|
20
|
+
* Provides convenience methods for testing wether a String or Integer
|
21
|
+
belongs to a certain character set.
|
22
|
+
* Supports random text generation using specific character sets.
|
23
|
+
|
data/Manifest.txt
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
History.txt
|
2
|
+
Manifest.txt
|
3
|
+
README.txt
|
4
|
+
Rakefile
|
5
|
+
lib/chars.rb
|
6
|
+
lib/chars/char_set.rb
|
7
|
+
lib/chars/chars.rb
|
8
|
+
lib/chars/extensions.rb
|
9
|
+
lib/chars/extensions/integer.rb
|
10
|
+
lib/chars/extensions/string.rb
|
11
|
+
lib/chars/version.rb
|
12
|
+
tasks/spec.rb
|
13
|
+
spec/spec_helper.rb
|
14
|
+
spec/char_set_spec.rb
|
15
|
+
spec/chars_spec.rb
|
16
|
+
spec/integer_spec.rb
|
17
|
+
spec/string_spec.rb
|
data/README.txt
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
= Chars
|
2
|
+
|
3
|
+
* http://chars.rubyforge.org/
|
4
|
+
* http://github.com/postmodern/chars
|
5
|
+
* Postmodern (postmodern.mod3 at gmail.com)
|
6
|
+
|
7
|
+
== DESCRIPTION:
|
8
|
+
|
9
|
+
Chars is a Ruby library for working with various character sets,
|
10
|
+
recognizing text and generating random text from specific character sets.
|
11
|
+
|
12
|
+
== FEATURES:
|
13
|
+
|
14
|
+
* Provides character sets for:
|
15
|
+
* Numeric ('0' - '9')
|
16
|
+
* Octal ('0' - '7')
|
17
|
+
* Uppercase Hexadecimal ('0' - '9', 'A' - 'F')
|
18
|
+
* Lowercase Hexadecimal ('0' - '9', 'a' - 'f')
|
19
|
+
* Hexadecimal ('0' - '9', 'a' - 'f', 'A' - 'F')
|
20
|
+
* Uppercase Alpha ('A' - 'Z')
|
21
|
+
* Lowercase Alpha ('a' - 'z')
|
22
|
+
* Alpha ('a' - 'z', 'A' - 'Z')
|
23
|
+
* Alpha-numeric ('0' - '9', 'a' - 'z', 'A' - 'Z')
|
24
|
+
* Punctuation (' ', '\'', '"', '`', ',', ';', ':', '~', '-', '(', ')',
|
25
|
+
'[', ']', '{', '}', '.', '?', '!')
|
26
|
+
* Symbols (' ', '\'', '"', '`', ',', ';', ':', '~', '-', '(', ')',
|
27
|
+
'[', ']', '{', '}', '.', '?', '!', '@', '#', '$', '%', '^', '&', '*',
|
28
|
+
'_', '+', '=', '|', '\\', '<', '>', '/')
|
29
|
+
* Space (' ', '\f', '\n', '\r', '\t', '\v')
|
30
|
+
* Printable ('0' - '9', 'a' - 'z', 'A' - 'Z', ' ', '\'', '"', '`', ',',
|
31
|
+
';', ':', '~', '-', '(', ')', '[', ']', '{', '}', '.', '?', '!', '@',
|
32
|
+
'#', '$', '%', '^', '&', '*', '_', '+', '=', '|', '\\', '<', '>', '/',
|
33
|
+
'\f', '\n', '\r', '\t', '\v')
|
34
|
+
* Control ('\x00' - '\x1f', '\x7f')
|
35
|
+
* ASCII ('\x00' - '\x7f')
|
36
|
+
* All ('\x00' - '\xff')
|
37
|
+
|
38
|
+
== EXAMPLES:
|
39
|
+
|
40
|
+
* Determine wether a byte belongs to a character set:
|
41
|
+
|
42
|
+
0x41.alpha?
|
43
|
+
# => true
|
44
|
+
|
45
|
+
* Determine wether a String belongs to a character set:
|
46
|
+
|
47
|
+
"22e1c0".hex?
|
48
|
+
# => true
|
49
|
+
|
50
|
+
* Return a random character from the set of all characters:
|
51
|
+
|
52
|
+
Chars.all.random_char
|
53
|
+
# => "\x94"
|
54
|
+
|
55
|
+
* Return a random Array of characters from the alpha-numeric character set:
|
56
|
+
|
57
|
+
Chars.alpha_numeric.random_array(10)
|
58
|
+
# => ["Q", "N", "S", "4", "x", "z", "3", "M", "F", "F"]
|
59
|
+
|
60
|
+
* Return a random String from the set of all characters:
|
61
|
+
|
62
|
+
Chars.all.random_string(10)
|
63
|
+
# => "\xc2h\xad\xccm7\x1e6J\x13"
|
64
|
+
|
65
|
+
* Return a random String with a random length between 5 and 10, from the
|
66
|
+
set of space characters:
|
67
|
+
|
68
|
+
Chars.space.random_string(5..10)
|
69
|
+
# => "\r\v\n\t\n\f"
|
70
|
+
|
71
|
+
== INSTALL:
|
72
|
+
|
73
|
+
$ sudo gem install chars
|
74
|
+
|
75
|
+
== LICENSE:
|
76
|
+
|
77
|
+
The MIT License
|
78
|
+
|
79
|
+
Copyright (c) 2009 Hal Brodigan
|
80
|
+
|
81
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
82
|
+
a copy of this software and associated documentation files (the
|
83
|
+
'Software'), to deal in the Software without restriction, including
|
84
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
85
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
86
|
+
permit persons to whom the Software is furnished to do so, subject to
|
87
|
+
the following conditions:
|
88
|
+
|
89
|
+
The above copyright notice and this permission notice shall be
|
90
|
+
included in all copies or substantial portions of the Software.
|
91
|
+
|
92
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
93
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
94
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
95
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
96
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
97
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
98
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'hoe'
|
5
|
+
require './tasks/spec.rb'
|
6
|
+
require './lib/chars/version.rb'
|
7
|
+
|
8
|
+
Hoe.new('chars', Chars::VERSION) do |p|
|
9
|
+
p.rubyforge_name = 'chars'
|
10
|
+
p.developer('Postmodern','postmodern.mod3@gmail.com')
|
11
|
+
p.remote_rdoc_dir = '/'
|
12
|
+
end
|
13
|
+
|
14
|
+
# vim: syntax=Ruby
|
data/lib/chars.rb
ADDED
@@ -0,0 +1,228 @@
|
|
1
|
+
require 'set'
|
2
|
+
|
3
|
+
module Chars
|
4
|
+
class CharSet < SortedSet
|
5
|
+
|
6
|
+
#
|
7
|
+
# Creates a new CharSet object with the given _chars_.
|
8
|
+
#
|
9
|
+
def initialize(*chars)
|
10
|
+
super()
|
11
|
+
|
12
|
+
merge_chars = lambda { |element|
|
13
|
+
if element.kind_of?(String)
|
14
|
+
element.each_byte(&merge_chars)
|
15
|
+
elsif element.kind_of?(Integer)
|
16
|
+
self << element
|
17
|
+
elsif element.kind_of?(Enumerable)
|
18
|
+
element.each(&merge_chars)
|
19
|
+
end
|
20
|
+
}
|
21
|
+
|
22
|
+
merge_chars.call(chars)
|
23
|
+
end
|
24
|
+
|
25
|
+
alias include_byte? include?
|
26
|
+
alias bytes to_a
|
27
|
+
alias each_byte each
|
28
|
+
alias select_bytes select
|
29
|
+
alias map_bytes map
|
30
|
+
|
31
|
+
#
|
32
|
+
# Returns +true+ if the character set includes the specified _char_,
|
33
|
+
# returns +false+ otherwise.
|
34
|
+
#
|
35
|
+
def include_char?(char)
|
36
|
+
return false unless char.respond_to?(:each_byte)
|
37
|
+
|
38
|
+
char.each_byte do |b|
|
39
|
+
return include?(b)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
#
|
44
|
+
# Returns all the characters within the character set as Strings.
|
45
|
+
#
|
46
|
+
def chars
|
47
|
+
map { |b| b.chr }
|
48
|
+
end
|
49
|
+
|
50
|
+
#
|
51
|
+
# Iterates over every character within the character set, passing
|
52
|
+
# each to the given _block_.
|
53
|
+
#
|
54
|
+
def each_char(&block)
|
55
|
+
each { |b| block.call(b.chr) } if block
|
56
|
+
end
|
57
|
+
|
58
|
+
#
|
59
|
+
# Selects an Array of characters from the character set that match
|
60
|
+
# the given _block_.
|
61
|
+
#
|
62
|
+
def select_chars(&block)
|
63
|
+
chars.select(&block)
|
64
|
+
end
|
65
|
+
|
66
|
+
#
|
67
|
+
# Maps the characters of the character set using the given _block_.
|
68
|
+
#
|
69
|
+
def map_chars(&block)
|
70
|
+
chars.map(&block)
|
71
|
+
end
|
72
|
+
|
73
|
+
#
|
74
|
+
# Returns a random byte from the character set.
|
75
|
+
#
|
76
|
+
def random_byte
|
77
|
+
self.entries[rand(self.length)]
|
78
|
+
end
|
79
|
+
|
80
|
+
#
|
81
|
+
# Returns a random char from the character set.
|
82
|
+
#
|
83
|
+
def random_char
|
84
|
+
random_byte.chr
|
85
|
+
end
|
86
|
+
|
87
|
+
#
|
88
|
+
# Pass a random byte to the specified _block_, _n_ times.
|
89
|
+
#
|
90
|
+
def each_random_byte(n,&block)
|
91
|
+
n.times { block.call(random_byte) }
|
92
|
+
end
|
93
|
+
|
94
|
+
#
|
95
|
+
# Pass a random character to the specified _block_, _n_ times.
|
96
|
+
#
|
97
|
+
def each_random_char(n,&block)
|
98
|
+
each_random_byte(n) { |b| block.call(b.chr) }
|
99
|
+
end
|
100
|
+
|
101
|
+
#
|
102
|
+
# Returns an Array of the specified _length_ containing
|
103
|
+
# random bytes from the character set. The specified _length_ may
|
104
|
+
# be an Integer, Array or a Range of lengths.
|
105
|
+
#
|
106
|
+
def random_bytes(length)
|
107
|
+
if (length.kind_of?(Array) || length.kind_of?(Range))
|
108
|
+
return Array.new(length.sort_by { rand }.first) { random_byte }
|
109
|
+
else
|
110
|
+
return Array.new(length) { random_byte }
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
#
|
115
|
+
# Returns an Array of the specified _length_ containing
|
116
|
+
# random characters from the character set. The specified _length_
|
117
|
+
# may be an Integer, Array or a Range of lengths.
|
118
|
+
#
|
119
|
+
def random_chars(length)
|
120
|
+
random_bytes(length).map { |b| b.chr }
|
121
|
+
end
|
122
|
+
|
123
|
+
#
|
124
|
+
# Returns a String of the specified _length_ containing
|
125
|
+
# random characters from the character set.
|
126
|
+
#
|
127
|
+
def random_string(length)
|
128
|
+
random_chars(length).join
|
129
|
+
end
|
130
|
+
|
131
|
+
#
|
132
|
+
# Finds sub-strings within the specified _data_ that are part of the
|
133
|
+
# character set, using the given _options_.
|
134
|
+
#
|
135
|
+
# _options_ may contain the following keys:
|
136
|
+
# <tt>:length</tt>:: The minimum length of matching sub-strings
|
137
|
+
# within the _data_. Defaults to 4, if not
|
138
|
+
# specified.
|
139
|
+
# <tt>:offsets</tt>:: Specifies wether to return a Hash of the
|
140
|
+
# offsets within the _data_ and the matched
|
141
|
+
# sub-strings. If not specified a simple
|
142
|
+
# Array will be returned of the matched
|
143
|
+
# sub-strings.
|
144
|
+
#
|
145
|
+
def strings_in(data,options={})
|
146
|
+
min_length = (options[:length] || 4)
|
147
|
+
|
148
|
+
if options[:offsets]
|
149
|
+
found = {}
|
150
|
+
found_substring = lambda { |offset,substring|
|
151
|
+
found[offset] = substring
|
152
|
+
}
|
153
|
+
else
|
154
|
+
found = []
|
155
|
+
found_substring = lambda { |offset,substring|
|
156
|
+
found << substring
|
157
|
+
}
|
158
|
+
end
|
159
|
+
|
160
|
+
return found if data.length < min_length
|
161
|
+
|
162
|
+
index = 0
|
163
|
+
|
164
|
+
while index <= (data.length - min_length)
|
165
|
+
if self =~ data[index...(index + min_length)]
|
166
|
+
sub_index = (index + min_length)
|
167
|
+
|
168
|
+
while self.include_char?(data[sub_index..sub_index])
|
169
|
+
sub_index += 1
|
170
|
+
end
|
171
|
+
|
172
|
+
found_substring.call(index,data[index...sub_index])
|
173
|
+
index = sub_index
|
174
|
+
else
|
175
|
+
index += 1
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
return found
|
180
|
+
end
|
181
|
+
|
182
|
+
#
|
183
|
+
# Creates a new CharSet object containing the both the characters
|
184
|
+
# of the character set and the specified _other_set_.
|
185
|
+
#
|
186
|
+
def |(other_set)
|
187
|
+
super(CharSet.new(other_set))
|
188
|
+
end
|
189
|
+
|
190
|
+
alias + |
|
191
|
+
|
192
|
+
#
|
193
|
+
# Returns +true+ if all of the bytes within the specified _string_
|
194
|
+
# are included in the character set, returns +false+ otherwise.
|
195
|
+
#
|
196
|
+
# Chars.alpha =~ "hello"
|
197
|
+
# # => true
|
198
|
+
#
|
199
|
+
def =~(string)
|
200
|
+
return false unless string.respond_to?(:each_byte)
|
201
|
+
|
202
|
+
string.each_byte do |b|
|
203
|
+
return false unless include?(b)
|
204
|
+
end
|
205
|
+
|
206
|
+
return true
|
207
|
+
end
|
208
|
+
|
209
|
+
#
|
210
|
+
# Inspects the character set.
|
211
|
+
#
|
212
|
+
def inspect
|
213
|
+
"#<#{self.class.name}: {" + map { |b|
|
214
|
+
case b
|
215
|
+
when (0x07..0x0d), (0x20..0x7e)
|
216
|
+
b.chr.dump
|
217
|
+
when 0x00
|
218
|
+
# sly hack to make char-sets more friendly
|
219
|
+
# to us C programmers
|
220
|
+
'"\0"'
|
221
|
+
else
|
222
|
+
"0x%02x" % b
|
223
|
+
end
|
224
|
+
}.join(', ') + "}>"
|
225
|
+
end
|
226
|
+
|
227
|
+
end
|
228
|
+
end
|
data/lib/chars/chars.rb
ADDED
@@ -0,0 +1,165 @@
|
|
1
|
+
require 'chars/char_set'
|
2
|
+
|
3
|
+
module Chars
|
4
|
+
# The numeric decimal character set
|
5
|
+
NUMERIC = CharSet.new('0'..'9')
|
6
|
+
|
7
|
+
# The octal character set
|
8
|
+
OCTAL = CharSet.new('0'..'7')
|
9
|
+
|
10
|
+
# The upper-case hexadecimal character set
|
11
|
+
UPPERCASE_HEXADECIMAL = NUMERIC + ('A'..'F')
|
12
|
+
|
13
|
+
# The lower-case hexadecimal character set
|
14
|
+
LOWERCASE_HEXADECIMAL = NUMERIC + ('a'..'f')
|
15
|
+
|
16
|
+
# The hexadecimal character set
|
17
|
+
HEXADECIMAL = UPPERCASE_HEXADECIMAL + LOWERCASE_HEXADECIMAL
|
18
|
+
|
19
|
+
# The upper-case alpha character set
|
20
|
+
UPPERCASE_ALPHA = CharSet.new('A'..'Z')
|
21
|
+
|
22
|
+
# The lower-case alpha character set
|
23
|
+
LOWERCASE_ALPHA = CharSet.new('a'..'z')
|
24
|
+
|
25
|
+
# The alpha character set
|
26
|
+
ALPHA = UPPERCASE_ALPHA + LOWERCASE_ALPHA
|
27
|
+
|
28
|
+
# The alpha-numeric character set
|
29
|
+
ALPHA_NUMERIC = ALPHA + NUMERIC
|
30
|
+
|
31
|
+
# The punctuation character set
|
32
|
+
PUNCTUATION = CharSet.new(' ', '\'', '"', '`', ',', ';', ':', '~', '-',
|
33
|
+
'(', ')', '[', ']', '{', '}', '.', '?', '!')
|
34
|
+
|
35
|
+
# The symbolic character set
|
36
|
+
SYMBOLS = PUNCTUATION + ['@', '#', '$', '%', '^', '&', '*', '_', '+',
|
37
|
+
'=', '|', '\\', '<', '>', '/']
|
38
|
+
|
39
|
+
# The space character set
|
40
|
+
SPACE = CharSet.new(' ', "\f", "\n", "\r", "\t", "\v")
|
41
|
+
|
42
|
+
# The set of printable characters (including spaces)
|
43
|
+
PRINTABLE = ALPHA_NUMERIC + PUNCTUATION + SYMBOLS + SPACE
|
44
|
+
|
45
|
+
# The control-char character set
|
46
|
+
CONTROL = CharSet.new(0..0x1f, 0x7f)
|
47
|
+
|
48
|
+
# The ASCII character set
|
49
|
+
ASCII = CharSet.new(0..0x7f)
|
50
|
+
|
51
|
+
# The full 8-bit character set
|
52
|
+
ALL = CharSet.new(0..0xff)
|
53
|
+
|
54
|
+
#
|
55
|
+
# The numeric decimal character set.
|
56
|
+
#
|
57
|
+
def Chars.numeric
|
58
|
+
NUMERIC
|
59
|
+
end
|
60
|
+
|
61
|
+
#
|
62
|
+
# The octal character set.
|
63
|
+
#
|
64
|
+
def Chars.octal
|
65
|
+
OCTAL
|
66
|
+
end
|
67
|
+
|
68
|
+
#
|
69
|
+
# The upper-case hexadecimal character set.
|
70
|
+
#
|
71
|
+
def Chars.uppercase_hexadecimal
|
72
|
+
UPPERCASE_HEXADECIMAL
|
73
|
+
end
|
74
|
+
|
75
|
+
#
|
76
|
+
# The lower-case hexadecimal character set.
|
77
|
+
#
|
78
|
+
def Chars.lowercase_hexadecimal
|
79
|
+
LOWERCASE_HEXADECIMAL
|
80
|
+
end
|
81
|
+
|
82
|
+
#
|
83
|
+
# The hexadecimal character set.
|
84
|
+
#
|
85
|
+
def Chars.hexadecimal
|
86
|
+
HEXADECIMAL
|
87
|
+
end
|
88
|
+
|
89
|
+
#
|
90
|
+
# The upper-case alpha character set.
|
91
|
+
#
|
92
|
+
def Chars.uppercase_alpha
|
93
|
+
UPPERCASE_ALPHA
|
94
|
+
end
|
95
|
+
|
96
|
+
#
|
97
|
+
# The lower-case alpha character set.
|
98
|
+
#
|
99
|
+
def Chars.lowercase_alpha
|
100
|
+
LOWERCASE_ALPHA
|
101
|
+
end
|
102
|
+
|
103
|
+
#
|
104
|
+
# The alpha character set.
|
105
|
+
#
|
106
|
+
def Chars.alpha
|
107
|
+
ALPHA
|
108
|
+
end
|
109
|
+
|
110
|
+
#
|
111
|
+
# The alpha-numeric character set.
|
112
|
+
#
|
113
|
+
def Chars.alpha_numeric
|
114
|
+
ALPHA_NUMERIC
|
115
|
+
end
|
116
|
+
|
117
|
+
#
|
118
|
+
# The punctuation character set.
|
119
|
+
#
|
120
|
+
def Chars.punctuation
|
121
|
+
PUNCTUATION
|
122
|
+
end
|
123
|
+
|
124
|
+
#
|
125
|
+
# The symbolic character set.
|
126
|
+
#
|
127
|
+
def Chars.symbols
|
128
|
+
SYMBOLS
|
129
|
+
end
|
130
|
+
|
131
|
+
#
|
132
|
+
# The space character set.
|
133
|
+
#
|
134
|
+
def Chars.space
|
135
|
+
SPACE
|
136
|
+
end
|
137
|
+
|
138
|
+
#
|
139
|
+
# The set of printable characters, including spaces.
|
140
|
+
#
|
141
|
+
def Chars.printable
|
142
|
+
PRINTABLE
|
143
|
+
end
|
144
|
+
|
145
|
+
#
|
146
|
+
# The control-char character set.
|
147
|
+
#
|
148
|
+
def Chars.control
|
149
|
+
CONTROL
|
150
|
+
end
|
151
|
+
|
152
|
+
#
|
153
|
+
# The ASCII character set.
|
154
|
+
#
|
155
|
+
def Chars.ascii
|
156
|
+
ASCII
|
157
|
+
end
|
158
|
+
|
159
|
+
#
|
160
|
+
# The full 8-bit character set.
|
161
|
+
#
|
162
|
+
def Chars.all
|
163
|
+
ALL
|
164
|
+
end
|
165
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'chars/chars'
|
2
|
+
|
3
|
+
class Integer
|
4
|
+
|
5
|
+
def numeric?
|
6
|
+
Chars::NUMERIC.include?(self)
|
7
|
+
end
|
8
|
+
|
9
|
+
def octal?
|
10
|
+
Chars::OCTAL.include?(self)
|
11
|
+
end
|
12
|
+
|
13
|
+
def uppercase_hex?
|
14
|
+
Chars::UPPERCASE_HEXADECIMAL.include?(self)
|
15
|
+
end
|
16
|
+
|
17
|
+
def lowercase_hex?
|
18
|
+
Chars::LOWERCASE_HEXADECIMAL.include?(self)
|
19
|
+
end
|
20
|
+
|
21
|
+
def hex?
|
22
|
+
Chars::HEXADECIMAL.include?(self)
|
23
|
+
end
|
24
|
+
|
25
|
+
def uppercase_alpha?
|
26
|
+
Chars::UPPERCASE_ALPHA.include?(self)
|
27
|
+
end
|
28
|
+
|
29
|
+
def lowercase_alpha?
|
30
|
+
Chars::LOWERCASE_ALPHA.include?(self)
|
31
|
+
end
|
32
|
+
|
33
|
+
def alpha?
|
34
|
+
Chars::ALPHA.include?(self)
|
35
|
+
end
|
36
|
+
|
37
|
+
def alpha_numeric?
|
38
|
+
Chars::ALPHA_NUMERIC.include?(self)
|
39
|
+
end
|
40
|
+
|
41
|
+
def punctuation?
|
42
|
+
Chars::PUNCTUATION.include?(self)
|
43
|
+
end
|
44
|
+
|
45
|
+
def symbolic?
|
46
|
+
Chars::SYMBOLS.include?(self)
|
47
|
+
end
|
48
|
+
|
49
|
+
def space?
|
50
|
+
Chars::SPACE.include?(self)
|
51
|
+
end
|
52
|
+
|
53
|
+
def printable?
|
54
|
+
Chars::PRINTABLE.include?(self)
|
55
|
+
end
|
56
|
+
|
57
|
+
def control?
|
58
|
+
Chars::CONTROL.include?(self)
|
59
|
+
end
|
60
|
+
|
61
|
+
def ascii?
|
62
|
+
Chars::ASCII.include?(self)
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'chars/chars'
|
2
|
+
|
3
|
+
class String
|
4
|
+
|
5
|
+
def numeric?
|
6
|
+
Chars::NUMERIC =~ self
|
7
|
+
end
|
8
|
+
|
9
|
+
def octal?
|
10
|
+
Chars::OCTAL =~ self
|
11
|
+
end
|
12
|
+
|
13
|
+
def uppercase_hex?
|
14
|
+
Chars::UPPERCASE_HEXADECIMAL =~ self
|
15
|
+
end
|
16
|
+
|
17
|
+
def lowercase_hex?
|
18
|
+
Chars::LOWERCASE_HEXADECIMAL =~ self
|
19
|
+
end
|
20
|
+
|
21
|
+
def hex?
|
22
|
+
Chars::HEXADECIMAL =~ self
|
23
|
+
end
|
24
|
+
|
25
|
+
def uppercase_alpha?
|
26
|
+
Chars::UPPERCASE_ALPHA =~ self
|
27
|
+
end
|
28
|
+
|
29
|
+
def lowercase_alpha?
|
30
|
+
Chars::LOWERCASE_ALPHA =~ self
|
31
|
+
end
|
32
|
+
|
33
|
+
def alpha?
|
34
|
+
Chars::ALPHA =~ self
|
35
|
+
end
|
36
|
+
|
37
|
+
def alpha_numeric?
|
38
|
+
Chars::ALPHA_NUMERIC =~ self
|
39
|
+
end
|
40
|
+
|
41
|
+
def punctuation?
|
42
|
+
Chars::PUNCTUATION =~ self
|
43
|
+
end
|
44
|
+
|
45
|
+
def symbolic?
|
46
|
+
Chars::SYMBOLS =~ self
|
47
|
+
end
|
48
|
+
|
49
|
+
def space?
|
50
|
+
Chars::SPACE =~ self
|
51
|
+
end
|
52
|
+
|
53
|
+
def printable?
|
54
|
+
Chars::PRINTABLE =~ self
|
55
|
+
end
|
56
|
+
|
57
|
+
def control?
|
58
|
+
Chars::CONTROL =~ self
|
59
|
+
end
|
60
|
+
|
61
|
+
def ascii?
|
62
|
+
Chars::ASCII =~ self
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
@@ -0,0 +1,186 @@
|
|
1
|
+
require 'chars/chars'
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Chars::CharSet do
|
6
|
+
before(:all) do
|
7
|
+
@integer_range = (0x41..0x43)
|
8
|
+
@string_range = ('A'..'C')
|
9
|
+
@integers = @integer_range.to_a
|
10
|
+
@strings = @string_range.to_a
|
11
|
+
|
12
|
+
@char_set = Chars::CharSet.new(*@strings)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "may be created with String arguments" do
|
16
|
+
@chars = Chars::CharSet.new(*@strings)
|
17
|
+
|
18
|
+
@strings.each do |s|
|
19
|
+
@chars.include_char?(s).should == true
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
it "may be created with an Array of Strings" do
|
24
|
+
@chars = Chars::CharSet.new(@strings)
|
25
|
+
|
26
|
+
@strings.each do |s|
|
27
|
+
@chars.include_char?(s).should == true
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
it "may be created with a Range of Strings" do
|
32
|
+
@chars = Chars::CharSet.new(@string_range)
|
33
|
+
|
34
|
+
@strings.each do |s|
|
35
|
+
@chars.include_char?(s).should == true
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
it "may be created with Integer arguments" do
|
40
|
+
@chars = Chars::CharSet.new(*@integers)
|
41
|
+
|
42
|
+
@integers.each do |i|
|
43
|
+
@chars.include?(i).should == true
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
it "may be created with an Array of Integers" do
|
48
|
+
@chars = Chars::CharSet.new(@integers)
|
49
|
+
|
50
|
+
@integers.each do |i|
|
51
|
+
@chars.include?(i).should == true
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
it "may be created with a Range of Integers" do
|
56
|
+
@chars = Chars::CharSet.new(@integer_range)
|
57
|
+
|
58
|
+
@integers.each do |i|
|
59
|
+
@chars.include?(i).should == true
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should include Strings" do
|
64
|
+
@char_set.include_char?('A').should == true
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should include Integers" do
|
68
|
+
@char_set.include?(0x41).should == true
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should be able to select bytes" do
|
72
|
+
@sub_chars = @char_set.select_bytes { |c| c <= 0x42 }
|
73
|
+
|
74
|
+
@sub_chars.should == [0x41, 0x42]
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should be able to select chars" do
|
78
|
+
@sub_chars = @char_set.select_chars { |c| c <= 'B' }
|
79
|
+
|
80
|
+
@sub_chars.should == ['A', 'B']
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should return a random byte" do
|
84
|
+
@char_set.include?(@char_set.random_byte).should == true
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should return a random char" do
|
88
|
+
@char_set.include_char?(@char_set.random_char).should == true
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should iterate over n random bytes" do
|
92
|
+
@char_set.each_random_byte(10) do |b|
|
93
|
+
@char_set.include?(b).should == true
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should iterate over n random chars" do
|
98
|
+
@char_set.each_random_char(10) do |c|
|
99
|
+
@char_set.include_char?(c).should == true
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
it "should return a random Array of bytes" do
|
104
|
+
bytes = @char_set.random_bytes(10)
|
105
|
+
|
106
|
+
bytes.each do |b|
|
107
|
+
@char_set.include?(b).should == true
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should return a random Array of chars" do
|
112
|
+
chars = @char_set.random_chars(10)
|
113
|
+
|
114
|
+
chars.each do |c|
|
115
|
+
@char_set.include_char?(c).should == true
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
it "should return a random Array of bytes with a varying length" do
|
120
|
+
bytes = @char_set.random_bytes(5..10)
|
121
|
+
|
122
|
+
bytes.length.between?(5, 10).should == true
|
123
|
+
bytes.each do |b|
|
124
|
+
@char_set.include?(b).should == true
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
it "should return a random Array of chars with a varying length" do
|
129
|
+
chars = @char_set.random_chars(5..10)
|
130
|
+
|
131
|
+
chars.length.between?(5, 10).should == true
|
132
|
+
chars.each do |c|
|
133
|
+
@char_set.include_char?(c).should == true
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
it "should return a random String of chars" do
|
138
|
+
@char_set.random_string(10).each_byte do |b|
|
139
|
+
@char_set.include?(b).should == true
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
it "should return a random String of chars with a varying length" do
|
144
|
+
string = @char_set.random_string(5..10)
|
145
|
+
|
146
|
+
string.length.between?(5, 10)
|
147
|
+
string.each_byte do |b|
|
148
|
+
@char_set.include?(b).should == true
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
it "should be able to be compared with another set of chars" do
|
153
|
+
(@char_set == Chars::CharSet['A', 'B', 'C']).should == true
|
154
|
+
(@char_set == Chars::CharSet['A', 'C', 'B']).should == true
|
155
|
+
end
|
156
|
+
|
157
|
+
it "should be able to be unioned with another set of chars" do
|
158
|
+
super_set = (@char_set | Chars::CharSet['D'])
|
159
|
+
|
160
|
+
super_set.class.should == Chars::CharSet
|
161
|
+
super_set.should == Chars::CharSet['A', 'B', 'C', 'D']
|
162
|
+
end
|
163
|
+
|
164
|
+
it "should be able to be removed from another set of chars" do
|
165
|
+
sub_set = (@char_set - Chars::CharSet['B'])
|
166
|
+
|
167
|
+
sub_set.class.should == Chars::CharSet
|
168
|
+
sub_set.subset?(@char_set).should == true
|
169
|
+
end
|
170
|
+
|
171
|
+
it "should find one sub-string from a String belonging to the char set" do
|
172
|
+
@char_set.strings_in("AAAA").should == ["AAAA"]
|
173
|
+
end
|
174
|
+
|
175
|
+
it "should find sub-strings from a String belonging to the char set" do
|
176
|
+
@char_set.strings_in("AAAAXBXCCCCCC").should == [
|
177
|
+
"AAAA",
|
178
|
+
"CCCCCC"
|
179
|
+
]
|
180
|
+
end
|
181
|
+
|
182
|
+
it "should determine if a String is made up of the characters from the char set" do
|
183
|
+
(@char_set =~ "AABCBAA").should == true
|
184
|
+
(@char_set =~ "AADDEE").should_not == true
|
185
|
+
end
|
186
|
+
end
|
data/spec/chars_spec.rb
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
require 'chars/chars'
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Chars do
|
6
|
+
before(:all) do
|
7
|
+
@numeric_string = Chars.numeric.random_string(10)
|
8
|
+
@octal_string = Chars.octal.random_string(10)
|
9
|
+
@uppercase_hex_string = Chars.uppercase_hexadecimal.random_string(10)
|
10
|
+
@lowercase_hex_string = Chars.lowercase_hexadecimal.random_string(10)
|
11
|
+
@hex_string = Chars.hexadecimal.random_string(10)
|
12
|
+
@uppercase_alpha_string = Chars.uppercase_alpha.random_string(10)
|
13
|
+
@lowercase_alpha_string = Chars.lowercase_alpha.random_string(10)
|
14
|
+
@alpha_string = Chars.alpha.random_string(10)
|
15
|
+
@alpha_numeric_string = Chars.alpha_numeric.random_string(10)
|
16
|
+
@space_string = Chars.space.random_string(10)
|
17
|
+
@punctuation_string = Chars.punctuation.random_string(10)
|
18
|
+
@symbols_string = Chars.symbols.random_string(10)
|
19
|
+
@control_string = Chars.control.random_string(10)
|
20
|
+
@ascii_string = Chars.ascii.random_string(10)
|
21
|
+
@all_string = Chars.all.random_string(10)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should provide a numeric CharSet" do
|
25
|
+
@numeric_string.length.should == 10
|
26
|
+
@numeric_string.each_byte do |b|
|
27
|
+
Chars::NUMERIC.include?(b).should == true
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should provide an octal CharSet" do
|
32
|
+
@octal_string.length.should == 10
|
33
|
+
@octal_string.each_byte do |b|
|
34
|
+
Chars::OCTAL.include?(b).should == true
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should provide an upper-case hexadecimal CharSet" do
|
39
|
+
@uppercase_hex_string.length.should == 10
|
40
|
+
@uppercase_hex_string.each_byte do |b|
|
41
|
+
Chars::UPPERCASE_HEXADECIMAL.include?(b).should == true
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should provide a lower-case hexadecimal CharSet" do
|
46
|
+
@lowercase_hex_string.length.should == 10
|
47
|
+
@lowercase_hex_string.each_byte do |b|
|
48
|
+
Chars::LOWERCASE_HEXADECIMAL.include?(b).should == true
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should provide a hexadecimal CharSet" do
|
53
|
+
@hex_string.length.should == 10
|
54
|
+
@hex_string.each_byte do |b|
|
55
|
+
Chars::HEXADECIMAL.include?(b).should == true
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should provide an upper-case alpha CharSet" do
|
60
|
+
@uppercase_alpha_string.length.should == 10
|
61
|
+
@uppercase_alpha_string.each_byte do |b|
|
62
|
+
Chars::UPPERCASE_ALPHA.include?(b).should == true
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should provide a lower-case alpha CharSet" do
|
67
|
+
@lowercase_alpha_string.length.should == 10
|
68
|
+
@lowercase_alpha_string.each_byte do |b|
|
69
|
+
Chars::LOWERCASE_ALPHA.include?(b).should == true
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should provide an alpha CharSet" do
|
74
|
+
@alpha_string.length.should == 10
|
75
|
+
@alpha_string.each_byte do |b|
|
76
|
+
Chars::ALPHA.include?(b).should == true
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should provide an alpha-numeric CharSet" do
|
81
|
+
@alpha_numeric_string.length.should == 10
|
82
|
+
@alpha_numeric_string.each_byte do |b|
|
83
|
+
Chars::ALPHA_NUMERIC.include?(b).should == true
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should provide a space CharSet" do
|
88
|
+
@space_string.length.should == 10
|
89
|
+
@space_string.each_byte do |b|
|
90
|
+
Chars::SPACE.include?(b).should == true
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should provide a punctuation CharSet" do
|
95
|
+
@punctuation_string.length.should == 10
|
96
|
+
@punctuation_string.each_byte do |b|
|
97
|
+
Chars::PUNCTUATION.include?(b).should == true
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should provide a symbols CharSet" do
|
102
|
+
@symbols_string.length.should == 10
|
103
|
+
@symbols_string.each_byte do |b|
|
104
|
+
Chars::SYMBOLS.include?(b).should == true
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'chars/extensions/integer'
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Integer do
|
6
|
+
it "should recognize numeric bytes" do
|
7
|
+
0x39.should be_numeric
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should recognize octal bytes" do
|
11
|
+
0x30.should be_octal
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should recognize upper-case hexadecimal bytes" do
|
15
|
+
0x44.should be_uppercase_hex
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should recognize lower-case hexadecimal bytes" do
|
19
|
+
0x61.should be_lowercase_hex
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should recognize hexadecimal bytes" do
|
23
|
+
0x63.should be_hex
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should recognize upper-case alpha bytes" do
|
27
|
+
0x4c.should be_uppercase_alpha
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should recognize lower-case alpha bytes" do
|
31
|
+
0x71.should be_lowercase_alpha
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should recognize alpha bytes" do
|
35
|
+
0x7a.should be_alpha
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should recognize alpha-numeric bytes" do
|
39
|
+
0x69.should be_alpha_numeric
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should recognize punctuation bytes" do
|
43
|
+
0x60.should be_punctuation
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should recognize symbolic bytes" do
|
47
|
+
0x26.should be_symbolic
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should recognize space bytes" do
|
51
|
+
0x20.should be_space
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should recognize printable bytes" do
|
55
|
+
0x3f.should be_printable
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should recognize control bytes" do
|
59
|
+
0x1b.should be_control
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should recognize ASCII bytes" do
|
63
|
+
0x00.should be_ascii
|
64
|
+
end
|
65
|
+
end
|
data/spec/spec_helper.rb
ADDED
data/spec/string_spec.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'chars/extensions/string'
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe String do
|
6
|
+
it "should recognize numeric strings" do
|
7
|
+
"0987".should be_numeric
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should recognize octal strings" do
|
11
|
+
"012".should be_octal
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should recognize upper-case hexadecimal strings" do
|
15
|
+
"2D".should be_uppercase_hex
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should recognize lower-case hexadecimal strings" do
|
19
|
+
"2d".should be_lowercase_hex
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should recognize hexadecimal strings" do
|
23
|
+
"2dE3".should be_hex
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should recognize upper-case alpha strings" do
|
27
|
+
"ABC".should be_uppercase_alpha
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should recognize lower-case alpha strings" do
|
31
|
+
"abc".should be_lowercase_alpha
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should recognize alpha strings" do
|
35
|
+
"abcDEF".should be_alpha
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should recognize alpha-numeric strings" do
|
39
|
+
"abc123".should be_alpha_numeric
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should recognize punctuation strings" do
|
43
|
+
"[...]".should be_punctuation
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should recognize symbolic strings" do
|
47
|
+
"++".should be_symbolic
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should recognize space strings" do
|
51
|
+
" \t".should be_space
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should recognize printable strings" do
|
55
|
+
"abc, [123]\nDEF".should be_printable
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should recognize control strings" do
|
59
|
+
"\b\b\a".should be_control
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should recognize ASCII strings" do
|
63
|
+
"lol\0".should be_ascii
|
64
|
+
end
|
65
|
+
end
|
data/tasks/spec.rb
ADDED
metadata
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: chars
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Postmodern
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-03-16 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: hoe
|
17
|
+
type: :development
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 1.10.0
|
24
|
+
version:
|
25
|
+
description: Chars is a Ruby library for working with various character sets, recognizing text and generating random text from specific character sets.
|
26
|
+
email:
|
27
|
+
- postmodern.mod3@gmail.com
|
28
|
+
executables: []
|
29
|
+
|
30
|
+
extensions: []
|
31
|
+
|
32
|
+
extra_rdoc_files:
|
33
|
+
- History.txt
|
34
|
+
- Manifest.txt
|
35
|
+
- README.txt
|
36
|
+
files:
|
37
|
+
- History.txt
|
38
|
+
- Manifest.txt
|
39
|
+
- README.txt
|
40
|
+
- Rakefile
|
41
|
+
- lib/chars.rb
|
42
|
+
- lib/chars/char_set.rb
|
43
|
+
- lib/chars/chars.rb
|
44
|
+
- lib/chars/extensions.rb
|
45
|
+
- lib/chars/extensions/integer.rb
|
46
|
+
- lib/chars/extensions/string.rb
|
47
|
+
- lib/chars/version.rb
|
48
|
+
- tasks/spec.rb
|
49
|
+
- spec/spec_helper.rb
|
50
|
+
- spec/char_set_spec.rb
|
51
|
+
- spec/chars_spec.rb
|
52
|
+
- spec/integer_spec.rb
|
53
|
+
- spec/string_spec.rb
|
54
|
+
has_rdoc: true
|
55
|
+
homepage: http://chars.rubyforge.org/
|
56
|
+
post_install_message:
|
57
|
+
rdoc_options:
|
58
|
+
- --main
|
59
|
+
- README.txt
|
60
|
+
require_paths:
|
61
|
+
- lib
|
62
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: "0"
|
67
|
+
version:
|
68
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: "0"
|
73
|
+
version:
|
74
|
+
requirements: []
|
75
|
+
|
76
|
+
rubyforge_project: chars
|
77
|
+
rubygems_version: 1.3.1
|
78
|
+
signing_key:
|
79
|
+
specification_version: 2
|
80
|
+
summary: Chars is a Ruby library for working with various character sets, recognizing text and generating random text from specific character sets.
|
81
|
+
test_files: []
|
82
|
+
|