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.
Files changed (2) hide show
  1. data/lib/zaru.rb +37 -0
  2. 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: []