chars 0.2.4 → 0.3.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6257e8d2fa2f62cc364fc2e0ba901d777963476968264dd7747bc4407e5ff54c
4
- data.tar.gz: 16f5ecc2f44e8265869aac4946a64cacda2ae8dcdae3b669081a48d34f034f4e
3
+ metadata.gz: 1b408bb91d6c66422ccb57e66af6cdeceeb97d50c610628a9b99780319f4af57
4
+ data.tar.gz: '039bef18f59a8ea05fd2a259839432e9ad2eee15c692969bf611d11b15255b75'
5
5
  SHA512:
6
- metadata.gz: ebaf16c18de6b000b6219bf4afe7142926e24293b6b1e62214f937c51c5bdf7f5ffa7f46eecb151e1da044f7b49e1479b7d2cc947a6e20fa2a586f28b4a8a525
7
- data.tar.gz: 4c9c98dcbab77b201b86fc32a628575e4b0ebc03608c50c7591b51a70821127778ced5122f57de846c7c863440fa0e9555fe7bfd2940a913e494a929c74a513e
6
+ metadata.gz: 803264ba7bafc4546df334bd2a508389f525c9814ab0452ef7b2b7c9b75cc0fb952c729f0b5b093cbede36d60be5badeb29ada0e29ee5b12ae3d681878aeb163
7
+ data.tar.gz: 2e9f1c229d9987e5cb1dfc0caada8c71582e0c72e8c03e7b39313c4bc1e9e447bdbdfcf641009174de47b4e0e94384296dc26cf8a136f72881bfd664fa311720
@@ -9,12 +9,12 @@ jobs:
9
9
  fail-fast: false
10
10
  matrix:
11
11
  ruby:
12
- - 2.4
13
- - 2.5
14
- - 2.6
15
- - 2.7
16
- - 3.0
12
+ - '2.6'
13
+ - '2.7'
14
+ - '3.0'
15
+ - '3.1'
17
16
  - jruby
17
+ - truffleruby
18
18
  name: Ruby ${{ matrix.ruby }}
19
19
  steps:
20
20
  - uses: actions/checkout@v2
data/ChangeLog.md CHANGED
@@ -1,3 +1,23 @@
1
+ ### 0.3.1 / 2022-12-01
2
+
3
+ * Removed the space character from {Chars::PUNCTUATION}, as spaces are not
4
+ technically a punctuation character.
5
+ * Removed `\f`, `\n`, `\r`, `\t`, and `\v` from {Chars::PRINTABLE}, as other
6
+ whitespace characters besides space (`' '`) are not considered printable
7
+ characters.
8
+
9
+ ### 0.3.0 / 2021-10-23
10
+
11
+ * Added {Chars::WHITESPACE}.
12
+ * Added {Chars::DIGITS}.
13
+ * Added {Chars::CharSet#each_substring_with_index}.
14
+ * Added {Chars::CharSet#substrings_with_indexes}.
15
+ * Added {Chars::CharSet#each_substring}.
16
+ * Added {Chars::CharSet#substrings}.
17
+ * Added {Chars::CharSet#each_string_of_length}.
18
+ * Added {Chars::CharSet#strings_of_length}.
19
+ * Added {Chars::StringEnumerator}.
20
+
1
21
  ### 0.2.4 / 2021-10-22
2
22
 
3
23
  * Require [ruby] >= 2.0.0.
@@ -10,7 +30,7 @@
10
30
 
11
31
  ### 0.2.2 / 2012-05-28
12
32
 
13
- * {Chars::CharSet#initialize} now raises a TypeError when given arguments
33
+ * {Chars::CharSet#initialize} now raises a `TypeError` when given arguments
14
34
  that were neither a `String`, `Integer` or `Enumerable`.
15
35
  * Allow {Chars::CharSet#strings_in} to yield results as they are found.
16
36
  * Improved the performance of {Chars::CharSet#strings_in} when operating on
@@ -34,20 +54,21 @@
34
54
 
35
55
  ### 0.1.2 / 2009-09-21
36
56
 
37
- * Require Hoe >= 2.3.3.
38
- * Require YARD >= 0.2.3.5.
39
- * Require RSpec >= 1.2.8.
40
- * Added Chars.visibile and Chars::VISIBLE (thanks flatline).
41
- * Added CharSet#random_distinct_bytes, CharSet#random_distinct_chars,
42
- and CharSet#random_distinct_string (thanks flatline).
43
- * Use 'hoe/signing' for signed RubyGems.
57
+ * Require `hoe` >= 2.3.3.
58
+ * Require `yard` >= 0.2.3.5.
59
+ * Require `rspec` >= 1.2.8.
60
+ * Added {Chars.visibile} and {Chars::VISIBLE} (thanks flatline).
61
+ * Added {Chars::CharSet#random_distinct_bytes},
62
+ {Chars::CharSet#random_distinct_chars}, and {CharSet#random_distinct_string}
63
+ (thanks flatline).
64
+ * Use `hoe/signing` for signed RubyGems.
44
65
  * Moved to YARD based documentation.
45
66
  * All specs now pass on JRuby 1.3.1.
46
67
 
47
68
  ### 0.1.1 / 2009-04-01
48
69
 
49
- * Renamed CharSet#=~ to CharSet#===.
50
- * Added an alias from CharSet#=~ to CharSet#===.
70
+ * Renamed {Chars::CharSet#=~} to {Chars::CharSet#===}.
71
+ * Added an alias from `Chars::CharSet#=~` to {Chars::CharSet#===}.
51
72
 
52
73
  ### 0.1.0 / 2009-03-16
53
74
 
@@ -68,7 +89,7 @@
68
89
  * Printable
69
90
  * Control
70
91
  * ASCII
71
- * Provides convenience methods for testing wether a String or Integer
92
+ * Provides convenience methods for testing whether a `String` or `Integer`
72
93
  belongs to a certain character set.
73
94
  * Supports random text generation using specific character sets.
74
95
 
data/Gemfile CHANGED
@@ -6,7 +6,9 @@ group :development do
6
6
  gem 'rake'
7
7
  gem 'rubygems-tasks', '~> 0.2'
8
8
  gem 'rspec', '~> 3.0'
9
+
9
10
  gem 'kramdown'
11
+ gem 'redcarpet', platform: :mri
10
12
  gem 'yard', '~> 0.9'
11
13
  gem 'yard-spellcheck', require: false
12
14
  end
data/README.md CHANGED
@@ -23,11 +23,11 @@ recognizing text and generating random text from specific character sets.
23
23
  * Lowercase Alpha: `a` - `z`
24
24
  * Alpha: `a` - `z`, `A` - `Z`
25
25
  * Alpha-numeric: `0` - `9`, `a` - `z`, `A` - `Z`
26
- * Punctuation: `' '`, `'`, `"`, `` ` ``, `,`, `;`, `:`, `~`, `-`, `(`, `)`, `[`, `]`, `{`, `}`, `.`, `?`, `!`
27
- * Symbols: `' '`, `'`, `"`, `` ` ``, `,`, `;`, `:`, `~`, `-`, `(`, `)`, `[`, `]`, `{`, `}`, `.`, `?`, `!`, `@`, `#`, `$`, `%`, `^`, `&`, `*`, `_`, `+`, `=`, `|`, `\`, `<`, `>`, `/`
26
+ * Punctuation: `'`, `"`, `` ` ``, `,`, `;`, `:`, `~`, `-`, `(`, `)`, `[`, `]`, `{`, `}`, `.`, `?`, `!`
27
+ * Symbols: `'`, `"`, `` ` ``, `,`, `;`, `:`, `~`, `-`, `(`, `)`, `[`, `]`, `{`, `}`, `.`, `?`, `!`, `@`, `#`, `$`, `%`, `^`, `&`, `*`, `_`, `+`, `=`, `|`, `\`, `<`, `>`, `/`
28
28
  * Space: `' '`, `\f`, `\n`, `\r`, `\t`, `\v`
29
29
  * Visible: `0` - `9`, `a` - `z`, `A` - `Z`, `'`, `"`, `` ` ``, `,`, `;`, `:`, `~`, `-`, `(`, `)`, `[`, `]`, `{`, `}`, `.`, `?`, `!`, `@`, `#`, `$`, `%`, `^`, `&`, `*`, `_`, `+`, `=`, `|`, `\`, `<`, `>`, `/`
30
- * Printable: `0` - `9`, `a` - `z`, `A` - `Z`, `' '`, `'`, `"`, `` ` ``, `,`, `;`, `:`, `~`, `-`, `(`, `)`, `[`, `]`, `{`, `}`, `.`, `?`, `!`, `@`, `#`, `$`, `%`, `^`, `&`, <code>*</code>, <code>_</code>, `+`, `=`, `|`, `\`, `<`, `>`, `/`, `\f`, `\n`, `\r`, `\t`, `\v`
30
+ * Printable: `0` - `9`, `a` - `z`, `A` - `Z`, `' '`, `'`, `"`, `` ` ``, `,`, `;`, `:`, `~`, `-`, `(`, `)`, `[`, `]`, `{`, `}`, `.`, `?`, `!`, `@`, `#`, `$`, `%`, `^`, `&`, <code>*</code>, <code>_</code>, `+`, `=`, `|`, `\`, `<`, `>`, `/`
31
31
  * Control: `\x00` - `\x1f`, `\x7f`
32
32
  * Signed ASCII: `\x00` - `\x7f`
33
33
  * ASCII: `\x00` - `\xff`
@@ -48,14 +48,6 @@ Determine whether a String belongs to a character set:
48
48
  # => true
49
49
  ```
50
50
 
51
- Find all sub-strings that belong to a character set within a String:
52
-
53
- ```ruby
54
- ls = File.read('/bin/ls')
55
- Chars.printable.strings_in(ls)
56
- # => ["/lib64/ld-linux-x86-64.so.2", "KIq/", "5J~!", "%L~!", ...]
57
- ```
58
-
59
51
  Return a random character from the set of all characters:
60
52
 
61
53
  ```ruby
@@ -85,6 +77,14 @@ Chars.all.random_string(10)
85
77
  # => "\xc2h\xad\xccm7\x1e6J\x13"
86
78
  ```
87
79
 
80
+ Generate a secure password:
81
+
82
+ ```ruby
83
+ require 'securerandom'
84
+ Chars.visible.random_string(10..14, random: SecureRandom)
85
+ # => ".*$X=D*XK2h8gC"
86
+ ```
87
+
88
88
  Return a random String with a random length between 5 and 10, from the
89
89
  set of space characters:
90
90
 
@@ -93,6 +93,57 @@ Chars.space.random_string(5..10)
93
93
  # => "\r\v\n\t\n\f"
94
94
  ```
95
95
 
96
+ Find all sub-strings that belong to a character set within a String:
97
+
98
+ ```ruby
99
+ ls = File.binread('/bin/ls')
100
+ Chars.printable.substrings(ls)
101
+ # =>
102
+ # ["/lib64/ld-linux-x86-64.so.2",
103
+ # "_ITM_deregisterTMCloneTable",
104
+ # "__gmon_start__",
105
+ # "_ITM_registerTMCloneTable",
106
+ # ...
107
+ # ]
108
+ ```
109
+
110
+ Find all sub-strings that belong to a character set within a String, with
111
+ indexes:
112
+
113
+ ```ruby
114
+ ls = File.binread('/bin/ls')
115
+ Chars.printable.substrings_with_indexes(ls)
116
+ # =>
117
+ # [["/lib64/ld-linux-x86-64.so.2", 792],
118
+ # ["_ITM_deregisterTMCloneTable", 4009],
119
+ # ["__gmon_start__", 4037],
120
+ # ["_ITM_registerTMCloneTable", 4052],
121
+ # ...
122
+ # ]
123
+ ```
124
+
125
+ Enumerate over all strings from a character set of a given length:
126
+
127
+ ```ruby
128
+ passwords = Chars.visible.strings_of_length(6)
129
+ passwords.each { |password| puts password }
130
+ # AAAAAA
131
+ # AAAAAB
132
+ # AAAAAC
133
+ # ...
134
+ ```
135
+
136
+ Enumerate over all strings from a character set of lengths between 4 and 8:
137
+
138
+ ```ruby
139
+ passwords = Chars.visible.strings_of_length(4..8)
140
+ passwords.each { |password| puts password }
141
+ # AAAA
142
+ # AAAB
143
+ # AAAC
144
+ # ...
145
+ ```
146
+
96
147
  ## Requirements
97
148
 
98
149
  * [ruby](https://www.ruby-lang.org/) >= 2.0.0
@@ -104,13 +155,13 @@ Chars.space.random_string(5..10)
104
155
  ### gemspec
105
156
 
106
157
  ```ruby
107
- gem.add_dependency 'chars', '~> 0.2'
158
+ gem.add_dependency 'chars', '~> 0.3'
108
159
  ```
109
160
 
110
161
  ### Gemfile
111
162
 
112
163
  ```ruby
113
- gem 'chars', '~> 0.2'
164
+ gem 'chars', '~> 0.3'
114
165
  ```
115
166
 
116
167
  ## Crystal
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- $LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__),'..','lib'))
3
+ $LOAD_PATH.unshift(File.expand_path(File.join(__dir__,'..','lib')))
4
4
 
5
5
  require 'chars'
6
6
  require 'benchmark'
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift(File.expand_path(File.join(__dir__,'..','lib')))
4
+
5
+ require 'chars'
6
+ require 'benchmark'
7
+
8
+ CHARSET = Chars::ALPHA_NUMERIC
9
+ STRING = File.binread('/usr/bin/openssl')
10
+
11
+ Benchmark.bm(41) do |b|
12
+ b.report('Chars::CharSet#each_substring_with_index') do
13
+ CHARSET.each_substring_with_index(STRING) { |string,index| }
14
+ end
15
+
16
+ b.report('Chars::CharSet#each_substring') do
17
+ CHARSET.each_substring(STRING) { |string| }
18
+ end
19
+
20
+ (5..20).step(5) do |n|
21
+ b.report("Chars::CharSet#each_substring (length=#{n})") do
22
+ CHARSET.strings_in(STRING, :length => n) { |offset,string| }
23
+ end
24
+ end
25
+ end
data/gemspec.yml CHANGED
@@ -15,6 +15,7 @@ metadata:
15
15
  source_code_uri: https://github.com/postmodern/chars.rb
16
16
  bug_tracker_uri: https://github.com/postmodern/chars.rb/issues
17
17
  changelog_uri: https://github.com/postmodern/chars.rb/blob/master/ChangeLog.md
18
+ rubygems_mfa_required: 'true'
18
19
 
19
20
  required_ruby_version: ">= 2.0.0"
20
21