char_sequencer 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.
@@ -0,0 +1,52 @@
1
+ module CharSequencer
2
+
3
+ class Sequence
4
+
5
+ attr_reader :current_string
6
+
7
+ def initialize(string_or_length, allowed_chars, expand_to_max_size = false)
8
+ @current_string = if string_or_length.is_a?(String)
9
+ string_or_length
10
+ else
11
+ (allowed_chars[0, 1] * string_or_length.to_i)
12
+ end
13
+ @original_string = @current_string.dup
14
+ @allowed_chars = allowed_chars
15
+ @expand_to_max_size = expand_to_max_size
16
+ end
17
+
18
+ def next!(position = @current_string.length - 1)
19
+ result = true
20
+ character_at_position = @current_string[position, 1]
21
+ if @allowed_chars.include?(character_at_position)
22
+ index = @allowed_chars.index(character_at_position)
23
+ if index + 1 < @allowed_chars.length
24
+ @current_string[position, 1] = @allowed_chars[index + 1, 1]
25
+ else
26
+ @current_string[position, 1] = @allowed_chars[0, 1]
27
+ if position - 1 >= 0
28
+ result = self.next!(position - 1)
29
+ else
30
+ if @expand_to_max_size && @expand_to_max_size > @current_string.length
31
+ @current_string = @allowed_chars[0, 1] * (@current_string.length + 1)
32
+ else
33
+ return false
34
+ end
35
+ end
36
+ end
37
+ else
38
+ raise "Illegal character detected (#{character_at_position} is not included in allowed_chars (#{@allowed_chars.join(', ')}))"
39
+ end
40
+ return result
41
+ end
42
+
43
+ def each(include_self = true, &block)
44
+ yield @current_string if include_self
45
+ while(self.next!)
46
+ yield @current_string
47
+ end
48
+ end
49
+
50
+ end
51
+
52
+ end
@@ -0,0 +1,3 @@
1
+ module CharSequencer
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,7 @@
1
+ require "char_sequencer/version"
2
+
3
+ module CharSequencer
4
+
5
+ autoload :Sequence, 'char_sequencer/sequence'
6
+
7
+ end
metadata ADDED
@@ -0,0 +1,49 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: char_sequencer
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - drake
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-06-18 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: A gem to generate all string of a given length and allowed characters
15
+ email:
16
+ - menostos@gmail.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - lib/char_sequencer/sequence.rb
22
+ - lib/char_sequencer/version.rb
23
+ - lib/char_sequencer.rb
24
+ homepage: ''
25
+ licenses: []
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ! '>='
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ requirements: []
43
+ rubyforge_project:
44
+ rubygems_version: 1.8.24
45
+ signing_key:
46
+ specification_version: 3
47
+ summary: This gem will provide a class wrapping String and give a next! method to
48
+ generate the next string
49
+ test_files: []