HelperClasses 0.1.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.
- checksums.yaml +7 -0
- data/LICENSE +3 -0
- data/README +78 -0
- data/lib/helperclasses.rb +3 -0
- data/lib/helperclasses/arraysym.rb +25 -0
- data/lib/helperclasses/dputs.rb +86 -0
- data/lib/helperclasses/hashaccessor.rb +41 -0
- data/test/test_arraysym.rb +5 -0
- data/test/test_dputs.rb +12 -0
- data/test/test_hashaccessor.rb +9 -0
- metadata +54 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5e9d72b8fe43505cae6d07152f6bf45f9d94cec5
|
4
|
+
data.tar.gz: c8ec6b3f48a225602628f578122ac32f5bb7388a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: cdd44f845254cadfc4771dce2c205fdca28139550e0d1bf6d2393cb67fd0f03f12a3cca089ce8ff3e5f5f117cd82a16f2614cd4288504d621f1ead249ec733a0
|
7
|
+
data.tar.gz: 3404bd78e68baa95a8c991714c80a0f9326c50dd8624e40ea907e76fa5c79315a0a12368cb44321826cc3b0dac0d1060c092d35e16cc9f78e0e6928dcf83b84c
|
data/LICENSE
ADDED
data/README
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
== HelperClasses
|
2
|
+
|
3
|
+
Some simple classes to help in everyday tasks
|
4
|
+
|
5
|
+
=== DPuts
|
6
|
+
|
7
|
+
Ever wanted to have detailed debug-output, but in the end even PRODUCING the
|
8
|
+
string without printing it was too long? Here comes DPuts! It let's you define
|
9
|
+
different debug-levels and the strings are only evaluated if they're about
|
10
|
+
to be printed! Great for that 10MB-dump that you only want for debugging...
|
11
|
+
|
12
|
+
Usage:
|
13
|
+
|
14
|
+
```
|
15
|
+
include HelperClasses::DPuts
|
16
|
+
|
17
|
+
DEBUG_LVL = 5
|
18
|
+
dputs(5){ "String with some #{huge_db.inspect}" }
|
19
|
+
```
|
20
|
+
|
21
|
+
This will evaluate and print the ```huge_db``` variable, while
|
22
|
+
|
23
|
+
```
|
24
|
+
include HelperClasses::DPuts
|
25
|
+
|
26
|
+
DEBUG_LVL = 4
|
27
|
+
dputs(5){ "String with some #{huge_db.inspect}" }
|
28
|
+
```
|
29
|
+
|
30
|
+
will NOT evaluate it! The debug-levels are arbitrarily chosen like this:
|
31
|
+
|
32
|
+
0 - Errors
|
33
|
+
1 - Info and warnings, important
|
34
|
+
2 - Often used debug-messages - limit of production-use
|
35
|
+
3 - More detailed debugging
|
36
|
+
4
|
37
|
+
5 - Dumping lots of raw data
|
38
|
+
|
39
|
+
=== Arraysym
|
40
|
+
|
41
|
+
to_sym and to_sym! - calls .to_sym on all elements. Usage:
|
42
|
+
|
43
|
+
```
|
44
|
+
using HelperClasses::ArraySym
|
45
|
+
|
46
|
+
p [ "a", "b" ].to_sym
|
47
|
+
```
|
48
|
+
|
49
|
+
Produces "[ :a, :b ]"
|
50
|
+
|
51
|
+
=== HashAccessor
|
52
|
+
|
53
|
+
This should be standard ruby. Access all elements of an array by
|
54
|
+
prepending a "_".
|
55
|
+
|
56
|
+
==== Getting a value
|
57
|
+
|
58
|
+
```
|
59
|
+
using HelperClasses::HashAccessor
|
60
|
+
|
61
|
+
p { :a => 2, "a" => 3 }._a
|
62
|
+
```
|
63
|
+
|
64
|
+
Will print "2". So symbols have precedence over string-keys.
|
65
|
+
|
66
|
+
==== Setting a value
|
67
|
+
|
68
|
+
```
|
69
|
+
using HelperClasses::HashAccessor
|
70
|
+
|
71
|
+
a = { :a => 2, "a" => 3 }
|
72
|
+
a._a = 4
|
73
|
+
a._b = 5
|
74
|
+
|
75
|
+
p a
|
76
|
+
```
|
77
|
+
|
78
|
+
Will print ```{ :a => 4, "a" => 3, :b => "5" }```
|
@@ -0,0 +1,25 @@
|
|
1
|
+
|
2
|
+
module HelperClasses
|
3
|
+
module ArraySym
|
4
|
+
refine Array do
|
5
|
+
# Comptaibility for Ruby < 1.9
|
6
|
+
if ! Array.respond_to? :to_h
|
7
|
+
def to_h
|
8
|
+
Hash[ *self ]
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_sym
|
13
|
+
collect{|v| v.to_sym }
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_sym!
|
17
|
+
self.replace( to_sym() )
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_s
|
21
|
+
"[#{join(",")}]"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module HelperClasses
|
2
|
+
require 'thread'
|
3
|
+
require 'singleton'
|
4
|
+
|
5
|
+
module DPuts
|
6
|
+
extend self
|
7
|
+
attr_accessor :mutex, :silent, :show_time, :terminal_width, :log_file
|
8
|
+
|
9
|
+
@mutex = Mutex.new
|
10
|
+
@silent = false
|
11
|
+
@show_time = 60
|
12
|
+
@terminal_width = 160
|
13
|
+
@log_file = false
|
14
|
+
|
15
|
+
def dputs_out( n, s, call )
|
16
|
+
return if DPuts.silent
|
17
|
+
if precision = DPuts.show_time
|
18
|
+
$dputs_time ||= Time.now - 120
|
19
|
+
now = Time.now
|
20
|
+
show = false
|
21
|
+
case precision
|
22
|
+
when /sec/
|
23
|
+
show = now.to_i != $dputs_time.to_i
|
24
|
+
when /min/
|
25
|
+
show = ( now.to_i / 60 ).floor != ( $dputs_time.to_i / 60 ).floor
|
26
|
+
end
|
27
|
+
show and puts "\n *** It is now: " +
|
28
|
+
Time.now.strftime( "%Y-%m-%d %H:%M:%S" )
|
29
|
+
$dputs_time = now
|
30
|
+
end
|
31
|
+
DPuts.mutex.synchronize do
|
32
|
+
width = DPuts.terminal_width
|
33
|
+
width -= 30.0
|
34
|
+
file, func = call.split(" ")
|
35
|
+
file = file[/^.*\/([^.]*)/, 1]
|
36
|
+
who = ( ":" + n.to_s + ":" + file.to_s +
|
37
|
+
func.to_s ).ljust(30, [ "X","x","*","-","."," "][n])
|
38
|
+
lines = []
|
39
|
+
pos = 0
|
40
|
+
while ( pos < s.length )
|
41
|
+
len = width
|
42
|
+
if s.length - pos > width
|
43
|
+
len = s.rindex( /[, .;=&>]/, pos + width )
|
44
|
+
len and len = len - pos + 1
|
45
|
+
if len < width / 2
|
46
|
+
len = width
|
47
|
+
end
|
48
|
+
end
|
49
|
+
lines.push s.slice( pos, len )
|
50
|
+
pos += len
|
51
|
+
end
|
52
|
+
puts who + " " + lines.shift.to_s
|
53
|
+
lines.each{|l|
|
54
|
+
puts " " * ( 32 ) + l
|
55
|
+
}
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def dputs(n, &s)
|
60
|
+
if DEBUG_LVL >= n
|
61
|
+
s = yield s
|
62
|
+
dputs_out( n, s, caller(0)[1] )
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def ddputs( n, &s )
|
67
|
+
s = yield s
|
68
|
+
dputs_out( -n, s, caller(0)[1] )
|
69
|
+
end
|
70
|
+
|
71
|
+
def dp( s )
|
72
|
+
dputs_out( 0, s.class == String ? s : s.inspect, caller(0)[1] )
|
73
|
+
s
|
74
|
+
end
|
75
|
+
|
76
|
+
def log_msg( mod, msg )
|
77
|
+
dputs( 1 ){ "Info from #{mod}: #{msg}" }
|
78
|
+
return if not DPuts.log_file
|
79
|
+
File.open( DPuts.log_file, "a" ){ |f|
|
80
|
+
str = Time.now.strftime( "%a %y.%m.%d-%H:%M:%S #{mod}: #{msg}" )
|
81
|
+
f.puts str
|
82
|
+
}
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module HelperClasses
|
2
|
+
module HashAccessor
|
3
|
+
refine Hash do
|
4
|
+
# Converts all keys of a hash to syms recursively
|
5
|
+
def to_sym
|
6
|
+
ret = {}
|
7
|
+
each{|k,v|
|
8
|
+
ret[ k.to_sym ] = v.class == Hash ? v.to_sym : v
|
9
|
+
}
|
10
|
+
ret
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_sym!
|
14
|
+
self.replace( to_sym() )
|
15
|
+
end
|
16
|
+
|
17
|
+
def method_missing( s, *args )
|
18
|
+
case s.to_s
|
19
|
+
when "to_ary"
|
20
|
+
super( s, args )
|
21
|
+
when /^_.*[^=]$/
|
22
|
+
key = s.to_s.sub(/^_{1,2}/, '').to_sym
|
23
|
+
self.has_key? key and return self[key]
|
24
|
+
self.has_key? key.to_s and return self[key.to_s]
|
25
|
+
if s.to_s =~ /^__/
|
26
|
+
return self[key] = {}
|
27
|
+
else
|
28
|
+
return nil
|
29
|
+
end
|
30
|
+
when /^_.*=$/
|
31
|
+
key = /^_{1,2}(.*)=$/.match(s.to_s)[1].to_sym
|
32
|
+
self.has_key? key and return self[key] = args[0]
|
33
|
+
self.has_key? key.to_s and return self[key.to_s] = args[0]
|
34
|
+
return self[key] = args[0]
|
35
|
+
else
|
36
|
+
super( s, args )
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/test/test_dputs.rb
ADDED
metadata
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: HelperClasses
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Linus Gasser
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-05-28 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Array.to_sym, Hash-accessors and debug-outputs with lazy evaluation
|
14
|
+
email: ineiti@linusetviviane.ch
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- "./LICENSE"
|
20
|
+
- "./README"
|
21
|
+
- "./lib/helperclasses.rb"
|
22
|
+
- "./lib/helperclasses/arraysym.rb"
|
23
|
+
- "./lib/helperclasses/dputs.rb"
|
24
|
+
- "./lib/helperclasses/hashaccessor.rb"
|
25
|
+
- "./test/test_arraysym.rb"
|
26
|
+
- "./test/test_dputs.rb"
|
27
|
+
- "./test/test_hashaccessor.rb"
|
28
|
+
- LICENSE
|
29
|
+
- README
|
30
|
+
homepage: https://github.com/ineiti/HelperClasses
|
31
|
+
licenses:
|
32
|
+
- GPLv3
|
33
|
+
metadata: {}
|
34
|
+
post_install_message:
|
35
|
+
rdoc_options: []
|
36
|
+
require_paths:
|
37
|
+
- lib
|
38
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0'
|
43
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
requirements: []
|
49
|
+
rubyforge_project:
|
50
|
+
rubygems_version: 2.2.0
|
51
|
+
signing_key:
|
52
|
+
specification_version: 4
|
53
|
+
summary: Helpers for Array, Hash and debug-output
|
54
|
+
test_files: []
|