shokkenki-support 0.0.2 → 0.0.3

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.
@@ -1,7 +1,7 @@
1
1
  module Shokkenki
2
2
  module Support
3
3
  module Version
4
- STRING = '0.0.2'
4
+ STRING = '0.0.3'
5
5
  end
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shokkenki-support
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-11-26 00:00:00.000000000 Z
12
+ date: 2013-11-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
@@ -113,9 +113,6 @@ files:
113
113
  - lib/shokkenki/term/string_term.rb
114
114
  - lib/shokkenki/term/term.rb
115
115
  - lib/shokkenki/term/term_factory.rb
116
- - lib/shokkenki/term/ruby-string-random/lib/strrand.rb
117
- - lib/shokkenki/term/ruby-string-random/README
118
- - lib/shokkenki/term/ruby-string-random/test/test_strrand.rb
119
116
  homepage: http://github.com/brentsnook/shokkenki-support
120
117
  licenses:
121
118
  - GPL2
@@ -138,11 +135,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
135
  version: '0'
139
136
  segments:
140
137
  - 0
141
- hash: 2074170128590300944
138
+ hash: 3238517007321891354
142
139
  requirements: []
143
140
  rubyforge_project:
144
141
  rubygems_version: 1.8.24
145
142
  signing_key:
146
143
  specification_version: 3
147
- summary: shokkenki-support-0.0.2
144
+ summary: shokkenki-support-0.0.3
148
145
  test_files: []
@@ -1,15 +0,0 @@
1
- # About StringRandom
2
-
3
- StringRandom generate a random string based on Regexp syntax or Patterns.
4
- StringRandom is Ruby version of String::Random written in Perl.
5
- The original code released in http://search.cpan.org/~steve/String-Random-0.22/
6
-
7
- # How to use
8
-
9
- Exmaples are written in test_strrand.rb.
10
-
11
- # Copyright
12
-
13
- Copyright (c) 2008 Masahiro Nakagawa
14
-
15
- This library is released under the Ruby license.
@@ -1,302 +0,0 @@
1
- #
2
- # = strrand.rb: Generates a random string from a pattern
3
- #
4
- # Author:: tama <repeatedly@gmail.com>
5
- #
6
- # StringRandom is derived from the String::Random written in Perl.
7
- # See http://search.cpan.org/~steve/String-Random-0.22/
8
- #
9
- # == Example
10
- #
11
- # string_random = StringRandom.new
12
- # string_random.random_pattern('CCcc!ccn') #=> ZIop$ab1
13
- #
14
- # refer to test/test_stringrandom.rb
15
- #
16
- # == Format
17
- #
18
- # === Regular expression syntax
19
- #
20
- # *_regex methods use this rule.
21
- #
22
- # The following regular expression elements are supported.
23
- #
24
- # [\w] Alphanumeric + "_".
25
- # [\d] Digits.
26
- # [\W] Printable characters other than those in \w.
27
- # [\D] Printable characters other than those in \d.
28
- # [.] Printable characters.
29
- # [[]] Character classes.
30
- # [{}] Repetition.
31
- # [*] Same as {0,}.
32
- # [+] Same as {1,}
33
- # [?] Same as {0,1}.
34
- #
35
- # === Patterns
36
- #
37
- # random_pattern and random_string methods use this rule.
38
- #
39
- # The following patterns are pre-defined.
40
- #
41
- # [c] Any lowercase character [a-z]
42
- # [C] Any uppercase character [A-Z]
43
- # [n] Any digit [0-9]
44
- # [!] A punctuation character [~`!@$%^&*()-_+={}[]|\:;"'.<>?/#,]
45
- # [.] Any of the above
46
- # [s] A "salt" character [A-Za-z0-9./]
47
- # [b] Any binary data
48
- #
49
- # Pattern can modify and add as bellow.
50
- #
51
- # string_random['C'] = ['n']
52
- # string_random['A'] = Array('A'..'Z') | Array('a'..'z')
53
- #
54
- # Pattern must be a flattened array that elements are one character.
55
- # Other types cause undefined behavior(raise exception, success, etc...).
56
- #
57
- class StringRandom
58
- Upper = Array('A'..'Z')
59
- Lower = Array('a'..'z')
60
- Digit = Array('0'..'9')
61
- Punct = [33..47, 58..64, 91..96, 123..126].map { |r| r.map { |val| val.chr } }.flatten
62
- Any = Upper | Lower | Digit | Punct
63
- Salt = Upper | Lower | Digit | ['.', '/']
64
- Binary = (0..255).map { |val| val.chr }
65
-
66
- # These are the regex-based patterns.
67
- Pattern = {
68
- # These are the regex-equivalents.
69
- '.' => Any,
70
- '\d' => Digit,
71
- '\D' => Upper | Lower | Punct,
72
- '\w' => Upper | Lower | Digit | ['_'],
73
- '\W' => Punct.reject { |val| val == '_' },
74
- '\s' => [' ', "\t"],
75
- '\S' => Upper | Lower | Digit | Punct,
76
-
77
- # These are translated to their double quoted equivalents.
78
- '\t' => ["\t"],
79
- '\n' => ["\n"],
80
- '\r' => ["\r"],
81
- '\f' => ["\f"],
82
- '\a' => ["\a"],
83
- '\e' => ["\e"]
84
- }
85
- # These are the old patterns for random_pattern.
86
- OldPattern = {
87
- 'C' => Upper,
88
- 'c' => Lower,
89
- 'n' => Digit,
90
- '!' => Punct,
91
- '.' => Any,
92
- 's' => Salt,
93
- 'b' => Binary
94
- }
95
-
96
- #
97
- # Singleton method version of random_regex.
98
- #
99
- def self.random_regex(patterns)
100
- StringRandom.new.random_regex(patterns)
101
- end
102
-
103
- #
104
- # Same as StringRandom#random_pattern if single argument.
105
- # Optionally, references to lists containing
106
- # other patterns can be passed to the function.
107
- # Those lists will be used for 0 through 9 in the pattern.
108
- #
109
- def self.random_string(pattern, *pattern_list)
110
- string_random = StringRandom.new
111
-
112
- pattern_list.each_with_index do |new_pattern, i|
113
- string_random[i.to_s] = new_pattern
114
- end
115
-
116
- string_random.random_pattern(pattern)
117
- end
118
-
119
- #
120
- # _max_ is default length for creating random string
121
- #
122
- def initialize(max = 10)
123
- @max = max
124
- @map = OldPattern.clone
125
- @regch = {
126
- "\\" => method(:regch_slash),
127
- '.' => method(:regch_dot),
128
- '[' => method(:regch_bracket),
129
- '*' => method(:regch_asterisk),
130
- '+' => method(:regch_plus),
131
- '?' => method(:regch_question),
132
- '{' => method(:regch_brace)
133
- }
134
- end
135
-
136
- #
137
- # Returns a random string that will match
138
- # the regular expression passed in the list argument.
139
- #
140
- def random_regex(patterns)
141
- return _random_regex(patterns) unless patterns.instance_of?(Array)
142
-
143
- result = []
144
- patterns.each do |pattern|
145
- result << _random_regex(pattern)
146
- end
147
- result
148
- end
149
-
150
- #
151
- # Returns a random string based on the concatenation
152
- # of all the pattern strings in the list.
153
- #
154
- def random_pattern(patterns)
155
- return _random_pattern(patterns) unless patterns.instance_of?(Array)
156
-
157
- result = []
158
- patterns.each do |pattern|
159
- result << _random_pattern(pattern)
160
- end
161
- result
162
- end
163
-
164
- #
165
- # Returns a random string pattern
166
- #
167
- def [](key)
168
- @map[key]
169
- end
170
-
171
- #
172
- # Adds a random string pattern
173
- #
174
- # _pattern_ must be flattened array
175
- #
176
- def []=(key, pattern)
177
- @map[key] = pattern
178
- end
179
-
180
- private
181
-
182
- def _random_regex(pattern)
183
- string = []
184
- chars = pattern.split(//)
185
- non_ch = /[\$\^\*\(\)\+\{\}\]\|\?]/ # not supported chars
186
-
187
- while ch = chars.shift
188
- if @regch.has_key?(ch)
189
- @regch[ch].call(ch, chars, string)
190
- else
191
- warn "'#{ch}' not implemented. treating literally." if ch =~ non_ch
192
- string << [ch]
193
- end
194
- end
195
-
196
- result = ''
197
- string.each do |ch|
198
- result << ch[rand(ch.size)]
199
- end
200
- result
201
- end
202
-
203
- def _random_pattern(pattern)
204
- string = ''
205
-
206
- pattern.split(//).each do |ch|
207
- raise %Q(Unknown pattern character "#{ch}"!) unless @map.has_key?(ch)
208
- string << @map[ch][rand(@map[ch].size)]
209
- end
210
-
211
- string
212
- end
213
-
214
- #-
215
- # The folloing methods are defined for regch.
216
- # These characters are treated specially in random_regex.
217
- #+
218
-
219
- def regch_slash(ch, chars, string)
220
- raise 'regex not terminated' if chars.empty?
221
-
222
- tmp = chars.shift
223
- if tmp == 'x'
224
- # This is supposed to be a number in hex, so
225
- # there had better be at least 2 characters left.
226
- tmp = chars.shift + chars.shift
227
- string << tmp.hex.chr
228
- elsif tmp =~ /[0-7]/
229
- warn 'octal parsing not implemented. treating literally.'
230
- string << tmp
231
- elsif Pattern.has_key?(ch + tmp)
232
- string << Pattern[ch + tmp]
233
- else
234
- warn "'\\#{tmp}' being treated as literal '#{tmp}'"
235
- string << tmp
236
- end
237
- end
238
-
239
- def regch_dot(ch, chars, string)
240
- string << Pattern[ch]
241
- end
242
-
243
- def regch_bracket(ch, chars, string)
244
- tmp = []
245
-
246
- while ch = chars.shift and ch != ']'
247
- if ch == '-' and !chars.empty? and !tmp.empty?
248
- max = chars.shift
249
- min = tmp.last
250
- tmp << min = min.succ while min < max
251
- else
252
- warn "${ch}' will be treated literally inside []" if ch =~ /\W/
253
- tmp << ch
254
- end
255
- end
256
- raise 'unmatched []' if ch != ']'
257
-
258
- string << tmp
259
- end
260
-
261
- def regch_asterisk(ch, chars, string)
262
- chars = '{0,}'.split('').concat(chars)
263
- end
264
-
265
- def regch_plus(ch, chars, string)
266
- chars = '{1,}'.split('').concat(chars)
267
- end
268
-
269
- def regch_question(ch, chars, string)
270
- chars = '{0,1}'.split('').concat(chars)
271
- end
272
-
273
- def regch_brace(ch, chars, string)
274
- # { isn't closed, so treat it literally.
275
- return string << ch unless chars.include?('}')
276
-
277
- tmp = ''
278
- while ch = chars.shift and ch != '}'
279
- raise "'#{ch}' inside {} not supported" unless ch =~ /[\d,]/
280
- tmp << ch
281
- end
282
-
283
- tmp = if tmp =~ /,/
284
- raise "malformed range {#{tmp}}" unless tmp =~ /^(\d*),(\d*)$/
285
-
286
- min = $1.length.nonzero? ? $1.to_i : 0
287
- max = $2.length.nonzero? ? $2.to_i : @max
288
- raise "bad range {#{tmp}}" if min > max
289
-
290
- min == max ? min : min + rand(max - min + 1)
291
- else
292
- tmp.to_i
293
- end
294
-
295
- if tmp.nonzero?
296
- last = string.last
297
- (tmp - 1).times { string << last }
298
- else
299
- string.pop
300
- end
301
- end
302
- end
@@ -1,180 +0,0 @@
1
- #
2
- # test/test_strrand.rb
3
- #
4
-
5
- $KCODE = 'u' if RUBY_VERSION < '1.9.0'
6
- $LOAD_PATH << '../'
7
-
8
- require 'lib/strrand'
9
- require 'test/unit'
10
-
11
- class TestStringRandom < Test::Unit::TestCase
12
- def setup
13
- @string_random = StringRandom.new
14
- end
15
-
16
- # StringRandom itself
17
- def test_initialize
18
- assert_not_nil(@string_random)
19
- assert_instance_of(StringRandom, @string_random)
20
- end
21
-
22
- # StringRandom methods
23
- def test_method_respond
24
- # instance methods
25
- assert_respond_to(@string_random, :[])
26
- assert_respond_to(@string_random, :[]=)
27
- assert_respond_to(@string_random, :random_regex)
28
- assert_respond_to(@string_random, :random_pattern)
29
-
30
- # singleton methods
31
- assert_respond_to(StringRandom, :random_regex)
32
- assert_respond_to(StringRandom, :random_string)
33
- end
34
-
35
- # StringRandom#random_regex
36
- def test_random_regex
37
- patterns = ['\d\d\d',
38
- '\w\w\w',
39
- '[ABC][abc]',
40
- '[012][345]',
41
- '...',
42
- '[a-z][0-9]',
43
- '[aw-zX][123]',
44
- '[a-z]{5}',
45
- '0{80}',
46
- '[a-f][nprt]\d{3}',
47
- '\t\n\r\f\a\e',
48
- '\S\S\S',
49
- '\s\s\s',
50
- '\w{5,10}',
51
- '\w?',
52
- '\w+',
53
- '\w*',
54
- '']
55
-
56
- patterns.each do |pattern|
57
- result = @string_random.random_regex(pattern)
58
- assert_match(/#{pattern}/, result, "#{result} is invalid: pattern #{pattern}")
59
- end
60
-
61
- result = @string_random.random_regex(patterns)
62
- assert_equal(patterns.size, result.size)
63
- end
64
-
65
- # StringRandom#random_regex
66
- def test_random_regex_invalid
67
- patterns = ['[a-z]{a}',
68
- '0{,,}',
69
- '9{1,z}']
70
-
71
- patterns.each do |pattern|
72
- assert_raise(RuntimeError, "Non expected: #{pattern}") { @string_random.random_regex(pattern) }
73
- end
74
- end
75
-
76
- # StringRandom#random_pattern
77
- def test_random_pattern
78
- assert_equal(0, @string_random.random_pattern('').length)
79
-
80
- patterns = {
81
- 'x' => ['a'],
82
- 'y' => ['b'],
83
- 'z' => ['c']
84
- }
85
-
86
- patterns.each_pair do |key, pattern|
87
- @string_random[key] = pattern
88
- end
89
- assert_equal('abc', @string_random.random_pattern('xyz'))
90
-
91
- target = patterns.keys
92
- result = @string_random.random_pattern(target)
93
- assert_equal(target.size, result.size)
94
- target.each_with_index do |pattern, i|
95
- assert_equal(@string_random[pattern][0], result[i])
96
- end
97
- end
98
-
99
- # StringRandom#random_pattern
100
- def test_random_pattern_builtin
101
- ['C', 'c', 'n', '!', '.', 's', 'b'].each do |val|
102
- assert_not_nil(@string_random[val])
103
- end
104
-
105
- range = ('A'..'Z').to_a
106
- range.each_with_index do |val, i|
107
- assert_equal(val, @string_random['C'][i])
108
- end
109
-
110
- # modify built-in pattern
111
- @string_random['C'] = ['n']
112
- assert_equal('n', @string_random.random_pattern('C'))
113
-
114
- # undefined behavior
115
- count = 0
116
- patterns = {
117
- 'X' => ('A'..'Z'),
118
- 'Y' => [['foo,', 'bar'], [['baz']]],
119
- 'Z' => [true, false],
120
- '' => 'hogehoge' # no raise
121
- }
122
- patterns.each_pair do |key, pattern|
123
- begin
124
- @string_random[key] = pattern
125
- @string_random.random_pattern(key)
126
- rescue Exception
127
- count += 1
128
- end
129
- end
130
- assert_equal(patterns.keys.size - 1, count)
131
-
132
- # No pollute other object
133
- @other = StringRandom.new
134
- assert_not_equal('n', @other.random_pattern('C'))
135
- end
136
-
137
- # StringRandom#random_pattern
138
- def test_random_pattern_invalid
139
- ['A', 'CZ1s', 'Hoge', '\n'].each do |pattern|
140
- assert_raise(RuntimeError) { @string_random.random_pattern(pattern) }
141
- end
142
- end
143
-
144
- # StringRandom.random_regex
145
- def test_singleton_random_regex
146
- patterns = ['\d\d\d',
147
- '\w\w\w',
148
- '[ABC][abc]',
149
- '[012][345]',
150
- '...',
151
- '[a-z][0-9]',
152
- '[aw-zX][123]',
153
- '[a-z]{5}',
154
- '0{80}',
155
- '[a-f][nprt]\d{3}',
156
- '\t\n\r\f\a\e',
157
- '\S\S\S',
158
- '\s\s\s',
159
- '\w{5,10}',
160
- '\w?',
161
- '\w+',
162
- '\w*',
163
- '']
164
-
165
- patterns.each do |pattern|
166
- result = StringRandom.random_regex(pattern)
167
- assert_match(/#{pattern}/, result, "#{result} is invalid: pattern #{pattern}")
168
- end
169
- end
170
-
171
- # StringRandom.random_string
172
- def test_singleton_random_string
173
- assert_match(/\d/, StringRandom.random_string('n'))
174
- assert_raise(RuntimeError) { StringRandom.random_string('0') }
175
-
176
- # with optional lists
177
- assert_equal('abc', StringRandom.random_string('012', ['a'], ['b'], ['c']))
178
- assert_match(/[abc][def]/, StringRandom.random_string('01', ['a', 'b', 'c'], ['d', 'e', 'f']))
179
- end
180
- end