sixarm_ruby_ramp 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gemtest +0 -0
- data/CHANGELOG.txt +51 -0
- data/INSTALL.txt +32 -0
- data/LICENSE.txt +12 -0
- data/README.rdoc +240 -0
- data/Rakefile +8 -0
- data/VERSION +1 -0
- data/lib/sixarm_ruby_ramp/array.rb +397 -0
- data/lib/sixarm_ruby_ramp/class.rb +38 -0
- data/lib/sixarm_ruby_ramp/csv.rb +58 -0
- data/lib/sixarm_ruby_ramp/date.rb +55 -0
- data/lib/sixarm_ruby_ramp/enumerable.rb +483 -0
- data/lib/sixarm_ruby_ramp/file.rb +17 -0
- data/lib/sixarm_ruby_ramp/fixnum.rb +34 -0
- data/lib/sixarm_ruby_ramp/hash.rb +238 -0
- data/lib/sixarm_ruby_ramp/integer.rb +26 -0
- data/lib/sixarm_ruby_ramp/io.rb +71 -0
- data/lib/sixarm_ruby_ramp/kernel.rb +84 -0
- data/lib/sixarm_ruby_ramp/math.rb +30 -0
- data/lib/sixarm_ruby_ramp/nil.rb +22 -0
- data/lib/sixarm_ruby_ramp/numeric.rb +44 -0
- data/lib/sixarm_ruby_ramp/object.rb +23 -0
- data/lib/sixarm_ruby_ramp/process.rb +221 -0
- data/lib/sixarm_ruby_ramp/string.rb +230 -0
- data/lib/sixarm_ruby_ramp/symbol.rb +29 -0
- data/lib/sixarm_ruby_ramp/time.rb +61 -0
- data/lib/sixarm_ruby_ramp/xml.rb +204 -0
- data/lib/sixarm_ruby_ramp/yaml.rb +10 -0
- data/lib/sixarm_ruby_ramp.rb +8 -0
- data/test/sixarm_ruby_ramp/io_test.txt +1 -0
- data/test/sixarm_ruby_ramp/xml_test_1.xml +5 -0
- data/test/sixarm_ruby_ramp/xml_test_2.xml +5 -0
- data/test/sixarm_ruby_ramp/xml_test_msword_clean.html +1 -0
- data/test/sixarm_ruby_ramp/xml_test_msword_dirty.html +148 -0
- data/test/sixarm_ruby_ramp_test.rb +9 -0
- data.tar.gz.sig +1 -0
- metadata +113 -0
- metadata.gz.sig +0 -0
@@ -0,0 +1,221 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
#
|
3
|
+
# = Process extensions to help debug Ruby programs.
|
4
|
+
#
|
5
|
+
# ==Examples
|
6
|
+
#
|
7
|
+
# p = Process.ps
|
8
|
+
# puts p
|
9
|
+
# => the results of the 'ps' command for the current process id
|
10
|
+
#
|
11
|
+
# p = Process.ps(1234)
|
12
|
+
# puts p
|
13
|
+
# => the results of the 'ps' command for process id 1234
|
14
|
+
#
|
15
|
+
# p = Process.pss
|
16
|
+
# p['%cpu'] => percentage of cpu use, as a float
|
17
|
+
# p['%mem'] => percentage of memory use, as a float
|
18
|
+
##
|
19
|
+
|
20
|
+
module Process
|
21
|
+
|
22
|
+
|
23
|
+
# Get the 'ps' command as one long text string.
|
24
|
+
#
|
25
|
+
# This is typically useful for logging to a text file.
|
26
|
+
#
|
27
|
+
# @example
|
28
|
+
# pid = 100
|
29
|
+
# Process.ps(pid)
|
30
|
+
# => "0.0 bfd86194 21:14:51 ..."
|
31
|
+
#
|
32
|
+
# @return [String] lots of data about the process
|
33
|
+
|
34
|
+
def self.ps(pid=Process.pid)
|
35
|
+
`#{self.ps_command} #{pid.to_i}`
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
# Get the 'ps' command as a hash of keys and values.
|
40
|
+
#
|
41
|
+
# @return [Hash<String,String>] the ps command options as keys and values
|
42
|
+
#
|
43
|
+
# @example
|
44
|
+
# pid = 100
|
45
|
+
# Process.pss(pid)
|
46
|
+
# => {"cp"=>0.0, "esp"=>"bfd86194", "etime"=>"21:14:51", ... }
|
47
|
+
# -
|
48
|
+
# OPTIMIZE: add dates, times
|
49
|
+
|
50
|
+
def self.pss(pid=Process.pid)
|
51
|
+
ps=self.ps(pid)
|
52
|
+
h=Hash[*self.ps_keys.zip(ps.split).flatten]
|
53
|
+
h['c'] =h['c'].to_i
|
54
|
+
h['cp'] =h['cp'].to_f
|
55
|
+
h['egid'] =h['egid'].to_i
|
56
|
+
h['egroup'] =h['egroup'].to_i
|
57
|
+
h['uid'] =h['uid'].to_i
|
58
|
+
h['fgid'] =h['fgid'].to_i
|
59
|
+
h['lwp'] =h['lwp'].to_i
|
60
|
+
h['ni'] =h['ni'].to_i
|
61
|
+
h['nlwp'] =h['nlwp'].to_i
|
62
|
+
h['pcpu'] =h['pcpu'].to_f
|
63
|
+
h['pgid'] =h['pgid'].to_i
|
64
|
+
h['pid'] =h['pid'].to_i
|
65
|
+
h['pmem'] =h['pmem'].to_f
|
66
|
+
h['ppid'] =h['ppid'].to_i
|
67
|
+
h['rgid'] =h['rgid'].to_i
|
68
|
+
h['rss'] =h['rss'].to_i
|
69
|
+
h['ruid'] =h['ruid'].to_i
|
70
|
+
h['sid'] =h['sid'].to_i
|
71
|
+
h['sgid'] =h['sgid'].to_i
|
72
|
+
h['suid'] =h['suid'].to_i
|
73
|
+
self.ps_aliases.each_pair{|key,val| h[key]=h[val]}
|
74
|
+
return h
|
75
|
+
end
|
76
|
+
|
77
|
+
|
78
|
+
# Get the list of process alias keywords as typically defined by the shell.
|
79
|
+
#
|
80
|
+
# For example, a shell may consider "%cpu" and "pcpu" to be identical.
|
81
|
+
#
|
82
|
+
# @example
|
83
|
+
# Process::PS_ALIASES_DEFAULT
|
84
|
+
# => {"%cpu"=>"pcpu", "sigmask"=>"blocked", "cls"=>"policy", ... }
|
85
|
+
#
|
86
|
+
# @return [Hash<String,String>] process keyword aliases
|
87
|
+
|
88
|
+
PS_ALIASES_DEFAULT={
|
89
|
+
'%cpu'=>'pcpu',
|
90
|
+
'%mem'=>'pmem',
|
91
|
+
'sig_block'=>'blocked',
|
92
|
+
'sigmask'=>'blocked',
|
93
|
+
'sig_catch'=>'caught',
|
94
|
+
'sigcatch'=>'caught',
|
95
|
+
'cls'=>'class',
|
96
|
+
'cls'=>'policy',
|
97
|
+
'cputime'=>'time',
|
98
|
+
'gid'=>'egid',
|
99
|
+
'group'=>'egroup',
|
100
|
+
'uid'=>'euid',
|
101
|
+
'uname'=>'euser',
|
102
|
+
'user'=>'euser',
|
103
|
+
'flag'=>'f',
|
104
|
+
'flags'=>'f',
|
105
|
+
'fsuid'=>'fuid',
|
106
|
+
'sig_ignore'=>'ignored',
|
107
|
+
'sigignore'=>'ignored',
|
108
|
+
'spid'=>'lwp',
|
109
|
+
'tid'=>'lwp',
|
110
|
+
'nice'=>'ni',
|
111
|
+
'thcount'=>'nlwp',
|
112
|
+
'sig'=>'pending',
|
113
|
+
'sig_pend'=>'pending',
|
114
|
+
'pgrp'=>'pgid',
|
115
|
+
'rssize'=>'rss',
|
116
|
+
'rsz'=>'rss',
|
117
|
+
'state'=>'s',
|
118
|
+
'sess'=>'sid',
|
119
|
+
'session'=>'sid',
|
120
|
+
'svgid'=>'sgid',
|
121
|
+
'tt'=>'tname',
|
122
|
+
'tty'=>'tname',
|
123
|
+
'vsz'=>'vsize'
|
124
|
+
}
|
125
|
+
|
126
|
+
|
127
|
+
# Get the list of process alias keywords as typically defined by the shell.
|
128
|
+
#
|
129
|
+
# For example, a shell may consider "%cpu" and "pcpu" to be identical.
|
130
|
+
#
|
131
|
+
# @example
|
132
|
+
# Process.ps_aliases
|
133
|
+
# => {"%cpu"=>"pcpu", "sigmask"=>"blocked", "cls"=>"policy", ... }
|
134
|
+
#
|
135
|
+
# @return [Hash<String,String>] process keyword aliases
|
136
|
+
|
137
|
+
def self.ps_aliases
|
138
|
+
@@ps_aliases||=PS_ALIASES_DEFAULT
|
139
|
+
end
|
140
|
+
|
141
|
+
|
142
|
+
# Set the list of process alias keywords.
|
143
|
+
#
|
144
|
+
# For example, a shell may consider "%cpu" and "pcpu" to be identical.
|
145
|
+
#
|
146
|
+
# @example
|
147
|
+
# Process::ps_aliases={ {"%cpu"=>"pcpu", "sigmask"=>"blocked", "cls"=>"policy" }
|
148
|
+
# => {"%cpu"=>"pcpu", "sigmask"=>"blocked", "cls"=>"policy"}
|
149
|
+
#
|
150
|
+
# @param [Hash<String,String>] aliases
|
151
|
+
# @return [Hash<String,String>] aliases
|
152
|
+
|
153
|
+
def self.ps_aliases=(aliases)
|
154
|
+
@@ps_aliases=aliases
|
155
|
+
end
|
156
|
+
|
157
|
+
|
158
|
+
# The list of process keywords.
|
159
|
+
|
160
|
+
PS_KEYS_DEFAULT=%w'blocked bsdtime c caught class cp egid egroup eip esp etime euid euser f fgid fgroup fuid fuser group ignored label lwp ni nlwp nwchan pending pcpu pgid pid pmem ppid pri psr rgid rgroup rss rtprio ruid ruser s sched sgi_p sgid sgroup sid sig size stackp start_time stat suid suser sz time tname tpgid vsize wchan'
|
161
|
+
|
162
|
+
|
163
|
+
# Get the list of process keywords.
|
164
|
+
#
|
165
|
+
# @example
|
166
|
+
# Process.ps_keys
|
167
|
+
# => ["blocked","group","pending","size"]
|
168
|
+
#
|
169
|
+
# @return [Array<String>] the list of process keywords.
|
170
|
+
|
171
|
+
|
172
|
+
def self.ps_keys
|
173
|
+
@@ps_keys||=PS_KEYS_DEFAULT
|
174
|
+
end
|
175
|
+
|
176
|
+
|
177
|
+
# Set the list of process keywords.
|
178
|
+
#
|
179
|
+
# @example
|
180
|
+
# Process.ps_keys = ["blocked","group","pending","size"]
|
181
|
+
#
|
182
|
+
# @param [Array<String>] keywords
|
183
|
+
# @return [Array<String>] keywords
|
184
|
+
|
185
|
+
def self.ps_keys=(keys)
|
186
|
+
@@ps_keys=keys
|
187
|
+
end
|
188
|
+
|
189
|
+
|
190
|
+
# The process command, i.e. what the sytem will call for the "ps" command.
|
191
|
+
|
192
|
+
PS_COMMAND_DEFAULT='ps h ww -o "'+self.ps_keys.join(',')+'"'
|
193
|
+
|
194
|
+
|
195
|
+
# Get the process command, i.e. what the sytem will call for the "ps" command.
|
196
|
+
#
|
197
|
+
# @example
|
198
|
+
# Process.ps_command
|
199
|
+
# => "ps h ww -o blocked,group,pending,size"
|
200
|
+
#
|
201
|
+
# @return [String] the process command
|
202
|
+
|
203
|
+
def self.ps_command
|
204
|
+
@@ps_command||=PS_COMMAND_DEFAULT
|
205
|
+
end
|
206
|
+
|
207
|
+
|
208
|
+
# Set the process command, i.e. what the sytem will call for the "ps" command.
|
209
|
+
#
|
210
|
+
# @example
|
211
|
+
# Process.ps_command = "ps h ww -o blocked,group,pending,size"
|
212
|
+
#
|
213
|
+
# @param [String] the process command
|
214
|
+
# @return [String] the process command
|
215
|
+
|
216
|
+
def self.ps_command=(command)
|
217
|
+
@@ps_command=command
|
218
|
+
end
|
219
|
+
|
220
|
+
|
221
|
+
end
|
@@ -0,0 +1,230 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
# String extensions
|
4
|
+
|
5
|
+
class String
|
6
|
+
|
7
|
+
|
8
|
+
# @return [String] self, with words capitalized
|
9
|
+
# @example
|
10
|
+
# "foo goo hoo".capitalize_words
|
11
|
+
# => "Foo Goo Hoo"
|
12
|
+
|
13
|
+
def capitalize_words
|
14
|
+
split(/\b/).map{|word| word.capitalize }.join
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
# @return [Array<String>] an array that is the string split into words, i.e. split(\W*\b\*)
|
19
|
+
# @example
|
20
|
+
# "foo goo hoo".words
|
21
|
+
# => ["foo", "goo", "hoo"]
|
22
|
+
|
23
|
+
def words
|
24
|
+
split(/\W*\b\W*/)
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
# @return [Array<String>] an array that is the string split at tabs, i.e. split(/\t/)
|
29
|
+
# @example
|
30
|
+
# "foo\tgoo\thoo".split_tab
|
31
|
+
# => ["foo", "goo", "hoo"]
|
32
|
+
|
33
|
+
def split_tab
|
34
|
+
split(/\t/)
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
# This is useful to split a TSV (Tab Separated Values) string
|
39
|
+
# into an array of rows, and each row into an array of fields.
|
40
|
+
#
|
41
|
+
# @return [Array<String>] an array that is the string split at newlines, then tabs.
|
42
|
+
#
|
43
|
+
# @example
|
44
|
+
# "foo\tgoo\thoo\n"ioo\tjoo\tkoo\nloo\tmoo\tnoo".split_tsv
|
45
|
+
# => [["foo", "goo", "hoo"], ["ioo", "joo", "koo"], ["loo", "moo", "noo"]]
|
46
|
+
|
47
|
+
def split_tsv
|
48
|
+
split(/\n/).map{|line| line.split(/\t/)}
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
# @return [String] self in lowercase,
|
53
|
+
# with any non-word-characters
|
54
|
+
# replaced with single underscores (aka low dashes).
|
55
|
+
#
|
56
|
+
# @example
|
57
|
+
# 'Foo Goo Hoo' => 'foo_goo_hoo'
|
58
|
+
# 'Foo***Goo***Hoo' => 'foo_goo_hoo'
|
59
|
+
|
60
|
+
def lowcase
|
61
|
+
downcase.gsub(/[_\W]+/,'_')
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
# @return [String] the string as an XML id, which is the same as #lowcase
|
66
|
+
#
|
67
|
+
# @example
|
68
|
+
# "Foo Hoo Goo" => 'foo_goo_hoo'
|
69
|
+
# "Foo***Goo***Hoo" => 'foo_goo_hoo'
|
70
|
+
|
71
|
+
def to_xid
|
72
|
+
self.lowcase
|
73
|
+
end
|
74
|
+
|
75
|
+
# Ruby String#to_class method to convert from a String to a class
|
76
|
+
#
|
77
|
+
# From Mirage at http://infovore.org/archives/2006/08/02/getting-a-class-object-in-ruby-from-a-string-containing-that-classes-name/
|
78
|
+
#
|
79
|
+
# @return [Class] the string converted to a class
|
80
|
+
|
81
|
+
def to_class
|
82
|
+
split('::').inject(Kernel) {|scope, const_name| scope.const_get(const_name)}
|
83
|
+
end
|
84
|
+
|
85
|
+
|
86
|
+
# Increment the rightmost natural number
|
87
|
+
#
|
88
|
+
# @return [String] the string with an incremented rightmost number
|
89
|
+
#
|
90
|
+
# @example
|
91
|
+
# 'foo5bar'.increment => 'foo4bar'
|
92
|
+
# 'foo5bar'.increment(3) => 'foo8bar'
|
93
|
+
# 'foo9bar'.increment => 'foo10bar'
|
94
|
+
#
|
95
|
+
# @see String#decrement
|
96
|
+
|
97
|
+
def increment(step=1)
|
98
|
+
self=~/\d+/ ? $`+($&.to_i+step).to_s+$' : self
|
99
|
+
end
|
100
|
+
|
101
|
+
|
102
|
+
# Decrement the rightmost natural number
|
103
|
+
#
|
104
|
+
# @return [String] the string with a decremented rightmost number
|
105
|
+
#
|
106
|
+
# @example
|
107
|
+
# 'foo5bar'.decrement => 'foo4bar'
|
108
|
+
# 'foo5bar'.decrement(3) => 'foo2bar'
|
109
|
+
# 'foo10bar'.derement => 'foo9bar'
|
110
|
+
#
|
111
|
+
# @see String#increment
|
112
|
+
|
113
|
+
def decrement(step=1)
|
114
|
+
self=~/\d+/ ? $`+($&.to_i-step).to_s+$' : self
|
115
|
+
end
|
116
|
+
|
117
|
+
|
118
|
+
# @return [String] the previous character, with a changed flag and carry flag
|
119
|
+
#
|
120
|
+
# @example
|
121
|
+
# String.prev_char('n') => 'm', true, false # change
|
122
|
+
# String.prev_char('a') => 'z', true, true # change & carry
|
123
|
+
# String.prev_char('6') => '5', true, false # change
|
124
|
+
# String.prev_char('0') => '9', true, true # change & carry
|
125
|
+
# String.prev_char('-') => '-', false, false # unchanged
|
126
|
+
|
127
|
+
def self.prev_char(chr) #=> prev_char, changed_flag, carry_flag
|
128
|
+
case chr
|
129
|
+
when '1'..'9', 'B'..'Z', 'b'..'z'
|
130
|
+
pos=(chr.respond_to?(:ord) ? chr.ord : chr[0])
|
131
|
+
return (pos-1).chr, true, false
|
132
|
+
when '0'
|
133
|
+
return '9', true, true
|
134
|
+
when 'A'
|
135
|
+
return 'Z', true, true
|
136
|
+
when 'a'
|
137
|
+
return 'z', true, true
|
138
|
+
else
|
139
|
+
return chr, false, false
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
# @return [String] the previous string
|
144
|
+
#
|
145
|
+
# @see String#next
|
146
|
+
#
|
147
|
+
# @example
|
148
|
+
# '888'.prev => '887'
|
149
|
+
# 'n'.prev => 'm'
|
150
|
+
# 'N'.prev => 'M'
|
151
|
+
#
|
152
|
+
# @example with carry
|
153
|
+
# '880'.prev => '879'
|
154
|
+
# 'nna'.prev => 'nmz'
|
155
|
+
# 'NNA'.prev => 'NMZ'
|
156
|
+
# 'nn0aA'.prev => 'nm9zZ'
|
157
|
+
|
158
|
+
def prev
|
159
|
+
self.clone.prev!
|
160
|
+
end
|
161
|
+
|
162
|
+
|
163
|
+
# Do String#prev in place
|
164
|
+
#
|
165
|
+
# @return [String] self
|
166
|
+
|
167
|
+
def prev!
|
168
|
+
return self if length==0
|
169
|
+
index=length-1 # rightmost
|
170
|
+
while true do
|
171
|
+
chr=self[index].chr
|
172
|
+
prev_chr,changed_flag,carry_flag=String.prev_char(chr)
|
173
|
+
return self if !changed_flag
|
174
|
+
self[index]=prev_chr
|
175
|
+
return self if !carry_flag
|
176
|
+
index-=1
|
177
|
+
return nil if index<0
|
178
|
+
end
|
179
|
+
return self
|
180
|
+
end
|
181
|
+
|
182
|
+
alias pred prev # String#pred : predecessor :: String#succ : successor
|
183
|
+
alias pred! prev!
|
184
|
+
|
185
|
+
class << self
|
186
|
+
alias_method :pred_char, :prev_char
|
187
|
+
end
|
188
|
+
|
189
|
+
# Helpful constants
|
190
|
+
|
191
|
+
LOWERCASE_ENGLISH_CHARS = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
|
192
|
+
UPPERCASE_ENGLISH_CHARS = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
|
193
|
+
|
194
|
+
|
195
|
+
##
|
196
|
+
#
|
197
|
+
# Lorem Ipsum random text generator
|
198
|
+
#
|
199
|
+
##
|
200
|
+
|
201
|
+
# @return [Integer[ a random length suitable for a "lorem ipsum" string.
|
202
|
+
#
|
203
|
+
# This method uses 1+rand(10)
|
204
|
+
#
|
205
|
+
# @example
|
206
|
+
# String.lorem_length => 3
|
207
|
+
# String.lorem_length => 9
|
208
|
+
# String.lorem_length => 5
|
209
|
+
|
210
|
+
def self.lorem_length
|
211
|
+
1+rand(10)
|
212
|
+
end
|
213
|
+
|
214
|
+
# @return [String] a random string suitable for "lorem ipsum" text.
|
215
|
+
#
|
216
|
+
# @example
|
217
|
+
# String.lorem => "galkjadscals"
|
218
|
+
# String.lorem(4) => "qtgf"
|
219
|
+
#
|
220
|
+
# This method chooses from lowercase letters a-z.
|
221
|
+
#
|
222
|
+
# This method defaults to length = self.lorem_length.
|
223
|
+
|
224
|
+
def self.lorem(length=self.lorem_length)
|
225
|
+
['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'].choices(length).join
|
226
|
+
end
|
227
|
+
|
228
|
+
|
229
|
+
end
|
230
|
+
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
# Symbol extensions
|
4
|
+
|
5
|
+
class Symbol
|
6
|
+
|
7
|
+
# Compare this symbol to another symbol.
|
8
|
+
#
|
9
|
+
# @example Less than
|
10
|
+
# :foo <=> :goo
|
11
|
+
# => -1
|
12
|
+
#
|
13
|
+
# @example Equal
|
14
|
+
# :foo <=> :foo
|
15
|
+
# => 0
|
16
|
+
#
|
17
|
+
# @example Greater than
|
18
|
+
# :foo <=> :bar
|
19
|
+
# => 1
|
20
|
+
#
|
21
|
+
# @return [-1,0,1] -1 if this is < that, 0
|
22
|
+
|
23
|
+
include Comparable
|
24
|
+
def <=>(that)
|
25
|
+
self.to_s<=>that.to_s
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
# Time extensions
|
4
|
+
|
5
|
+
class Time
|
6
|
+
|
7
|
+
|
8
|
+
# @return [String] a time stamp string in standard format: "YYYY-MM-DD HH:MM:SSZ"
|
9
|
+
#
|
10
|
+
# This standard format is specified in IETF RFC 3339 and ISO 8601.
|
11
|
+
#
|
12
|
+
# @see http://www.ietf.org/rfc/rfc3339.txt
|
13
|
+
#
|
14
|
+
# @example
|
15
|
+
# Time.now.stamp
|
16
|
+
# => "2010-12-31 12:59:59Z"
|
17
|
+
|
18
|
+
def stamp
|
19
|
+
getutc.strftime('%Y-%m-%d %H:%M:%SZ')
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
# Shorthand for Time.now.stamp
|
24
|
+
#
|
25
|
+
# @example
|
26
|
+
# Time.stamp
|
27
|
+
# => "2010-12-31 12:59:59Z"
|
28
|
+
#
|
29
|
+
# @return [String] Time.now.stamp
|
30
|
+
|
31
|
+
def self.stamp
|
32
|
+
now.stamp
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
# @return [String] time packed into a short string: "YYYYMMDDHHMMSS"
|
37
|
+
#
|
38
|
+
# The time is converted to UTC.
|
39
|
+
#
|
40
|
+
# @example
|
41
|
+
# Time.now.pack
|
42
|
+
# => "20101231125959"
|
43
|
+
|
44
|
+
def pack
|
45
|
+
getutc.strftime('%Y%m%d%H%M%S')
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
# Shorthand for Time.now.pack
|
50
|
+
#
|
51
|
+
# @example
|
52
|
+
# Time.pack
|
53
|
+
# => "20101231125959"
|
54
|
+
#
|
55
|
+
# @return [String] Time.now.pack
|
56
|
+
|
57
|
+
def self.pack
|
58
|
+
now.pack
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|