chars 0.2.0 → 0.2.4

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 6257e8d2fa2f62cc364fc2e0ba901d777963476968264dd7747bc4407e5ff54c
4
+ data.tar.gz: 16f5ecc2f44e8265869aac4946a64cacda2ae8dcdae3b669081a48d34f034f4e
5
+ SHA512:
6
+ metadata.gz: ebaf16c18de6b000b6219bf4afe7142926e24293b6b1e62214f937c51c5bdf7f5ffa7f46eecb151e1da044f7b49e1479b7d2cc947a6e20fa2a586f28b4a8a525
7
+ data.tar.gz: 4c9c98dcbab77b201b86fc32a628575e4b0ebc03608c50c7591b51a70821127778ced5122f57de846c7c863440fa0e9555fe7bfd2940a913e494a929c74a513e
data/.document CHANGED
@@ -1,4 +1,4 @@
1
1
  lib/**/*.rb
2
2
  -
3
- ChangeLog.*
3
+ ChangeLog.md
4
4
  LICENSE.txt
data/.gemspec ADDED
File without changes
@@ -0,0 +1,28 @@
1
+ name: CI
2
+
3
+ on: [ push, pull_request ]
4
+
5
+ jobs:
6
+ tests:
7
+ runs-on: ubuntu-latest
8
+ strategy:
9
+ fail-fast: false
10
+ matrix:
11
+ ruby:
12
+ - 2.4
13
+ - 2.5
14
+ - 2.6
15
+ - 2.7
16
+ - 3.0
17
+ - jruby
18
+ name: Ruby ${{ matrix.ruby }}
19
+ steps:
20
+ - uses: actions/checkout@v2
21
+ - name: Set up Ruby
22
+ uses: ruby/setup-ruby@v1
23
+ with:
24
+ ruby-version: ${{ matrix.ruby }}
25
+ - name: Install dependencies
26
+ run: bundle install --jobs 4 --retry 3
27
+ - name: Run tests
28
+ run: bundle exec rake test
data/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ /Gemfile.lock
2
+ /doc/
3
+ /pkg/
4
+ /vendor/bundle
5
+ .DS_Store
6
+ .yardoc
7
+ *.swp
8
+ *~
data/.yardopts CHANGED
@@ -1 +1 @@
1
- --markup markdown --title 'Chars Documentation' --protected --files ChangeLog.md,LICENSE.txt
1
+ --markup markdown --title 'Chars Documentation' --protected --quiet
data/ChangeLog.md CHANGED
@@ -1,3 +1,32 @@
1
+ ### 0.2.4 / 2021-10-22
2
+
3
+ * Require [ruby] >= 2.0.0.
4
+ * Added {Chars::CharSet#initialize_copy} to prevent leaking characters
5
+ between copied {Chars::CharSet} objects.
6
+
7
+ ### 0.2.3 / 2020-12-25
8
+
9
+ * Change {Chars::CharSet} to inherit from `Set`, instead of `SortedSet`.
10
+
11
+ ### 0.2.2 / 2012-05-28
12
+
13
+ * {Chars::CharSet#initialize} now raises a TypeError when given arguments
14
+ that were neither a `String`, `Integer` or `Enumerable`.
15
+ * Allow {Chars::CharSet#strings_in} to yield results as they are found.
16
+ * Improved the performance of {Chars::CharSet#strings_in} when operating on
17
+ small Strings.
18
+ * Replaced ore-tasks with
19
+ [rubygems-tasks](https://github.com/postmodern/rubygems-tasks#readme).
20
+
21
+ ### 0.2.1 / 2011-06-22
22
+
23
+ * Added {Chars::CharSet.[]}
24
+ * Added {Chars::CharSet#<<}.
25
+ * Added {Chars::CharSet#byte_to_char}.
26
+ * Added {Chars::CharSet#char_to_byte}.
27
+ * Added a cache of characters of the bytes within {Chars::CharSet}.
28
+ * Use `String#each_char` to distinguish Unicode from ASCII.
29
+
1
30
  ### 0.2.0 / 2010-10-27
2
31
 
3
32
  * Make sure all enumerable methods in {Chars::CharSet} return an
@@ -43,3 +72,4 @@
43
72
  belongs to a certain character set.
44
73
  * Supports random text generation using specific character sets.
45
74
 
75
+ [ruby]: https://www.ruby-lang.org/
data/Gemfile ADDED
@@ -0,0 +1,12 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ group :development do
6
+ gem 'rake'
7
+ gem 'rubygems-tasks', '~> 0.2'
8
+ gem 'rspec', '~> 3.0'
9
+ gem 'kramdown'
10
+ gem 'yard', '~> 0.9'
11
+ gem 'yard-spellcheck', require: false
12
+ end
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  (The MIT License)
2
2
 
3
- Copyright (c) 2009-2010 Hal Brodigan
3
+ Copyright (c) 2009-2021 Hal Brodigan
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining
6
6
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -1,8 +1,10 @@
1
1
  # Chars
2
2
 
3
- * http://chars.rubyforge.org/
4
- * http://github.com/postmodern/chars/
5
- * Postmodern (postmodern.mod3 at gmail.com)
3
+ [![CI](https://github.com/postmodern/chars.rb/actions/workflows/ruby.yml/badge.svg)](https://github.com/postmodern/chars.rb/actions/workflows/ruby.yml)
4
+
5
+ * [Source](https://github.com/postmodern/chars.rb#readme)
6
+ * [Issues](https://github.com/postmodern/chars.rb/issues)
7
+ * [Documentation](https://rubydoc.info/gems/chars)
6
8
 
7
9
  ## Description
8
10
 
@@ -12,80 +14,111 @@ recognizing text and generating random text from specific character sets.
12
14
  ## Features
13
15
 
14
16
  * 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
- * Visible ('0' - '9', 'a' - 'z', 'A' - 'Z', '\'', '"', '`', ',',
31
- ';', ':', '~', '-', '(', ')', '[', ']', '{', '}', '.', '?', '!', '@',
32
- '#', '$', '%', '^', '&', '*', '_', '+', '=', '|', '\\', '<', '>', '/',)
33
- * Printable ('0' - '9', 'a' - 'z', 'A' - 'Z', ' ', '\'', '"', '`', ',',
34
- ';', ':', '~', '-', '(', ')', '[', ']', '{', '}', '.', '?', '!', '@',
35
- '#', '$', '%', '^', '&', '*', '_', '+', '=', '|', '\\', '<', '>', '/',
36
- '\f', '\n', '\r', '\t', '\v')
37
- * Control ('\x00' - '\x1f', '\x7f')
38
- * Signed ASCII ('\x00' - '\x7f')
39
- * ASCII ('\x00' - '\xff')
17
+ * Numeric: `0` - `9`
18
+ * Octal: `0` - `7`
19
+ * Uppercase Hexadecimal: `0` - `9`, `A` - `F`
20
+ * Lowercase Hexadecimal: `0` - `9`, `a` - `f`
21
+ * Hexadecimal: `0` - `9`, `a` - `f`, `A` - `F`
22
+ * Uppercase Alpha: `A` - `Z`
23
+ * Lowercase Alpha: `a` - `z`
24
+ * Alpha: `a` - `z`, `A` - `Z`
25
+ * Alpha-numeric: `0` - `9`, `a` - `z`, `A` - `Z`
26
+ * Punctuation: `' '`, `'`, `"`, `` ` ``, `,`, `;`, `:`, `~`, `-`, `(`, `)`, `[`, `]`, `{`, `}`, `.`, `?`, `!`
27
+ * Symbols: `' '`, `'`, `"`, `` ` ``, `,`, `;`, `:`, `~`, `-`, `(`, `)`, `[`, `]`, `{`, `}`, `.`, `?`, `!`, `@`, `#`, `$`, `%`, `^`, `&`, `*`, `_`, `+`, `=`, `|`, `\`, `<`, `>`, `/`
28
+ * Space: `' '`, `\f`, `\n`, `\r`, `\t`, `\v`
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`
31
+ * Control: `\x00` - `\x1f`, `\x7f`
32
+ * Signed ASCII: `\x00` - `\x7f`
33
+ * ASCII: `\x00` - `\xff`
40
34
 
41
35
  ## Examples
42
36
 
43
37
  Determine whether a byte belongs to a character set:
44
38
 
45
- 0x41.alpha?
46
- # => true
39
+ ```ruby
40
+ 0x41.alpha?
41
+ # => true
42
+ ```
47
43
 
48
44
  Determine whether a String belongs to a character set:
49
45
 
50
- "22e1c0".hex?
51
- # => true
46
+ ```ruby
47
+ "22e1c0".hex?
48
+ # => true
49
+ ```
52
50
 
53
51
  Find all sub-strings that belong to a character set within a String:
54
52
 
55
- ls = File.read('/bin/ls')
56
- Chars.printable.strings_in(ls)
57
- # => ["/lib64/ld-linux-x86-64.so.2", "KIq/", "5J~!", "%L~!", ...]
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
58
 
59
59
  Return a random character from the set of all characters:
60
60
 
61
- Chars.all.random_char
62
- # => "\x94"
61
+ ```ruby
62
+ Chars.all.random_char
63
+ # => "\x94"
64
+ ```
63
65
 
64
66
  Return a random Array of characters from the alpha-numeric character set:
65
67
 
66
- Chars.alpha_numeric.random_chars(10)
67
- # => ["Q", "N", "S", "4", "x", "z", "3", "M", "F", "F"]
68
+ ```ruby
69
+ Chars.alpha_numeric.random_chars(10)
70
+ # => ["Q", "N", "S", "4", "x", "z", "3", "M", "F", "F"]
71
+ ```
68
72
 
69
73
  Return a random Array of a random length of unique characters from the
70
74
  visible character set:
71
75
 
72
- Chars.visible.random_distinct_chars(1..10)
73
- # => ["S", "l", "o", "8", "'", "q"]
76
+ ```ruby
77
+ Chars.visible.random_distinct_chars(1..10)
78
+ # => ["S", "l", "o", "8", "'", "q"]
79
+ ```
74
80
 
75
81
  Return a random String from the set of all characters:
76
82
 
77
- Chars.all.random_string(10)
78
- # => "\xc2h\xad\xccm7\x1e6J\x13"
83
+ ```ruby
84
+ Chars.all.random_string(10)
85
+ # => "\xc2h\xad\xccm7\x1e6J\x13"
86
+ ```
79
87
 
80
88
  Return a random String with a random length between 5 and 10, from the
81
89
  set of space characters:
82
90
 
83
- Chars.space.random_string(5..10)
84
- # => "\r\v\n\t\n\f"
91
+ ```ruby
92
+ Chars.space.random_string(5..10)
93
+ # => "\r\v\n\t\n\f"
94
+ ```
95
+
96
+ ## Requirements
97
+
98
+ * [ruby](https://www.ruby-lang.org/) >= 2.0.0
85
99
 
86
100
  ## Install
87
101
 
88
- $ sudo gem install chars
102
+ $ gem install chars
103
+
104
+ ### gemspec
105
+
106
+ ```ruby
107
+ gem.add_dependency 'chars', '~> 0.2'
108
+ ```
109
+
110
+ ### Gemfile
111
+
112
+ ```ruby
113
+ gem 'chars', '~> 0.2'
114
+ ```
115
+
116
+ ## Crystal
117
+
118
+ [chars.cr] is a [Crystal] port of this library.
119
+
120
+ [chars.cr]: https://github.com/postmodern/chars.cr
121
+ [Crystal]: https://crystal-lang.org/
89
122
 
90
123
  ## License
91
124
 
data/Rakefile CHANGED
@@ -1,35 +1,12 @@
1
1
  require 'rubygems'
2
- require 'rake'
3
2
 
4
- begin
5
- gem 'ore-tasks', '~> 0.1.2'
6
- require 'ore/tasks'
3
+ require 'rubygems/tasks'
4
+ Gem::Tasks.new
7
5
 
8
- Ore::Tasks.new
9
- rescue LoadError => e
10
- STDERR.puts e.message
11
- STDERR.puts "Run `gem install ore-tasks` to install 'ore/tasks'."
12
- end
13
-
14
- begin
15
- gem 'rspec', '~> 2.0.0'
16
- require 'rspec/core/rake_task'
17
-
18
- RSpec::Core::RakeTask.new
19
- rescue LoadError => e
20
- task :spec do
21
- abort "Please run `gem install rspec` to install RSpec."
22
- end
23
- end
6
+ require 'rspec/core/rake_task'
7
+ RSpec::Core::RakeTask.new
8
+ task :test => :spec
24
9
  task :default => :spec
25
10
 
26
- begin
27
- gem 'yard', '~> 0.6.0'
28
- require 'yard'
29
-
30
- YARD::Rake::YardocTask.new
31
- rescue LoadError => e
32
- task :yard do
33
- abort "Please run `gem install yard` to install YARD."
34
- end
35
- end
11
+ require 'yard'
12
+ YARD::Rake::YardocTask.new
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__),'..','lib'))
4
+
5
+ require 'chars'
6
+ require 'benchmark'
7
+
8
+ CHARSET = Chars::ALPHA_NUMERIC
9
+ N = 1_000_000
10
+ STRING = ('A' * N) + '!'
11
+ ENUM = (['A', 0x42] * (N / 2)) << '!'
12
+
13
+ Benchmark.bm(12) do |b|
14
+ b.report('String') { CHARSET === STRING }
15
+ b.report('Enumerable') { CHARSET === ENUM }
16
+ end
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__),'..','lib'))
4
+
5
+ require 'chars'
6
+ require 'benchmark'
7
+
8
+ CHARSET = Chars::ALPHA_NUMERIC
9
+ STRING = File.open('/usr/bin/openssl','rb') do |file|
10
+ file.read
11
+ end
12
+
13
+ Benchmark.bm(24) do |b|
14
+ b.report('strings_in') do
15
+ CHARSET.strings_in(STRING) { |offset,string| }
16
+ end
17
+
18
+ (5..20).step(5) do |n|
19
+ b.report("strings_in (length=#{n})") do
20
+ CHARSET.strings_in(STRING, :length => n) { |offset,string| }
21
+ end
22
+ end
23
+ end
data/chars.gemspec CHANGED
@@ -1,10 +1,61 @@
1
- # -*- encoding: utf-8 -*-
1
+ # encoding: utf-8
2
2
 
3
- begin
4
- Ore::Specification.new do |gemspec|
5
- # custom logic here
3
+ require 'yaml'
4
+
5
+ Gem::Specification.new do |gem|
6
+ gemspec = YAML.load_file('gemspec.yml')
7
+
8
+ gem.name = gemspec.fetch('name')
9
+ gem.version = gemspec.fetch('version') do
10
+ lib_dir = File.join(File.dirname(__FILE__),'lib')
11
+ $LOAD_PATH << lib_dir unless $LOAD_PATH.include?(lib_dir)
12
+
13
+ require 'chars/version'
14
+ Chars::VERSION
15
+ end
16
+
17
+ gem.summary = gemspec['summary']
18
+ gem.description = gemspec['description']
19
+ gem.licenses = Array(gemspec['license'])
20
+ gem.authors = Array(gemspec['authors'])
21
+ gem.email = gemspec['email']
22
+ gem.homepage = gemspec['homepage']
23
+ gem.metadata = gemspec['metadata'] if gemspec['metadata']
24
+
25
+ glob = lambda { |patterns| gem.files & Dir[*patterns] }
26
+
27
+ gem.files = `git ls-files`.split($/)
28
+ gem.files = glob[gemspec['files']] if gemspec['files']
29
+
30
+ gem.executables = gemspec.fetch('executables') do
31
+ glob['bin/*'].map { |path| File.basename(path) }
32
+ end
33
+ gem.default_executable = gem.executables.first if Gem::VERSION < '1.7.'
34
+
35
+ gem.extensions = glob[gemspec['extensions'] || 'ext/**/extconf.rb']
36
+ gem.test_files = glob[gemspec['test_files'] || '{test/{**/}*_test.rb']
37
+ gem.extra_rdoc_files = glob[gemspec['extra_doc_files'] || '*.{txt,md}']
38
+
39
+ gem.require_paths = Array(gemspec.fetch('require_paths') {
40
+ %w[ext lib].select { |dir| File.directory?(dir) }
41
+ })
42
+
43
+ gem.requirements = gemspec['requirements']
44
+ gem.required_ruby_version = gemspec['required_ruby_version']
45
+ gem.required_rubygems_version = gemspec['required_rubygems_version']
46
+ gem.post_install_message = gemspec['post_install_message']
47
+
48
+ split = lambda { |string| string.split(/,\s*/) }
49
+
50
+ if gemspec['dependencies']
51
+ gemspec['dependencies'].each do |name,versions|
52
+ gem.add_dependency(name,split[versions])
53
+ end
54
+ end
55
+
56
+ if gemspec['development_dependencies']
57
+ gemspec['development_dependencies'].each do |name,versions|
58
+ gem.add_development_dependency(name,split[versions])
59
+ end
6
60
  end
7
- rescue NameError
8
- STDERR.puts "The 'chars.gemspec' file requires Ore."
9
- STDERR.puts "Run `gem install ore` to install Ore."
10
61
  end
data/gemspec.yml CHANGED
@@ -5,12 +5,18 @@ description:
5
5
  recognizing text and generating random text from specific character sets.
6
6
 
7
7
  license: MIT
8
- homepage: http://github.com/postmodern/chars
8
+ homepage: https://github.com/postmodern/chars.rb#readme
9
9
  authors: Postmodern
10
10
  email: postmodern.mod3@gmail.com
11
11
  has_yard: true
12
12
 
13
+ metadata:
14
+ documentation_uri: https://rubydoc.info/gems/chars
15
+ source_code_uri: https://github.com/postmodern/chars.rb
16
+ bug_tracker_uri: https://github.com/postmodern/chars.rb/issues
17
+ changelog_uri: https://github.com/postmodern/chars.rb/blob/master/ChangeLog.md
18
+
19
+ required_ruby_version: ">= 2.0.0"
20
+
13
21
  development_dependencies:
14
- ore: ~> 0.2.0
15
- ore-tasks: ~> 0.1.2
16
- rspec: ~> 2.0.0
22
+ bundler: ~> 2.0