zaru 0.0.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.
- data/lib/zaru.rb +37 -0
- metadata +45 -0
data/lib/zaru.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
class Zaru
|
4
|
+
CHARACTER_FILTER = /[\x00-\x1F\/\\:\*\?\"<>\|]/u
|
5
|
+
UNICODE_WHITESPACE = /[[:space:]]+/u
|
6
|
+
|
7
|
+
def initialize(filename)
|
8
|
+
@raw = filename.to_s.freeze
|
9
|
+
end
|
10
|
+
|
11
|
+
# strip whitespace on beginning and end
|
12
|
+
# collapse intra-string whitespace into single spaces
|
13
|
+
def normalize
|
14
|
+
@normalized ||= @raw.strip.gsub(UNICODE_WHITESPACE,' ')
|
15
|
+
end
|
16
|
+
|
17
|
+
# remove characters that aren't allowed cross-OS
|
18
|
+
def sanitize
|
19
|
+
@sanitized ||= normalize.gsub(CHARACTER_FILTER,'')
|
20
|
+
end
|
21
|
+
|
22
|
+
# normalize unicode string and cut off at 255 characters
|
23
|
+
# TODO
|
24
|
+
def truncate
|
25
|
+
@truncated ||= sanitize.chars.to_a.slice(0..254).join
|
26
|
+
end
|
27
|
+
|
28
|
+
# convert back from multibyte string
|
29
|
+
def to_s
|
30
|
+
truncate
|
31
|
+
end
|
32
|
+
|
33
|
+
# convenience method
|
34
|
+
def self.sanitize!(filename)
|
35
|
+
Zaru.new(filename).to_s
|
36
|
+
end
|
37
|
+
end
|
metadata
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: zaru
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Thomas Fuchs
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-02-03 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: Filename sanitization for Ruby
|
15
|
+
email: thomas@slash7.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- lib/zaru.rb
|
21
|
+
homepage: http://rubygems.org/gems/zaru
|
22
|
+
licenses: []
|
23
|
+
post_install_message:
|
24
|
+
rdoc_options: []
|
25
|
+
require_paths:
|
26
|
+
- lib
|
27
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
requirements: []
|
40
|
+
rubyforge_project:
|
41
|
+
rubygems_version: 1.8.23
|
42
|
+
signing_key:
|
43
|
+
specification_version: 3
|
44
|
+
summary: zaru
|
45
|
+
test_files: []
|