stud 0.0.13 → 0.0.14
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/LICENSE +14 -0
- data/lib/stud/buffer.rb +13 -13
- data/lib/stud/temporary.rb +47 -0
- data/lib/stud/time.rb +37 -0
- data/lib/stud/time/format.rb +1323 -0
- data/lib/stud/time/format.tt +236 -0
- data/lib/stud/with.rb +22 -0
- metadata +29 -25
@@ -0,0 +1,236 @@
|
|
1
|
+
grammar StudTimeFormat
|
2
|
+
rule format
|
3
|
+
(time / text)* {
|
4
|
+
def compile
|
5
|
+
return %Q<lambda do |t|
|
6
|
+
return [
|
7
|
+
#{elements.collect(&:compile).join(",\n ")}
|
8
|
+
].join("")
|
9
|
+
end>
|
10
|
+
end
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
rule time
|
15
|
+
(
|
16
|
+
era
|
17
|
+
/ century_of_era
|
18
|
+
/ year_of_era
|
19
|
+
/ weekyear
|
20
|
+
/ week_of_weekyear
|
21
|
+
/ day_of_week_number
|
22
|
+
/ day_of_week_text
|
23
|
+
/ year
|
24
|
+
/ day_of_year
|
25
|
+
/ month_of_year
|
26
|
+
/ day_of_month
|
27
|
+
/ halfday_of_day
|
28
|
+
/ hour_of_halfday
|
29
|
+
/ clockhour_of_halfday
|
30
|
+
/ hour_of_day
|
31
|
+
/ clockhour_of_day
|
32
|
+
/ minute_of_hour
|
33
|
+
/ second_of_minute
|
34
|
+
/ fraction_of_second
|
35
|
+
/ time_zone_text
|
36
|
+
/ time_zone_offset_or_id
|
37
|
+
)
|
38
|
+
end
|
39
|
+
|
40
|
+
rule text
|
41
|
+
string / symbol
|
42
|
+
end
|
43
|
+
|
44
|
+
rule string
|
45
|
+
"'" content:[^']* "'" {
|
46
|
+
def compile
|
47
|
+
if content.text_value.length == 0
|
48
|
+
return %Q<"'">
|
49
|
+
else
|
50
|
+
return %Q<"#{content.text_value}">
|
51
|
+
end
|
52
|
+
end
|
53
|
+
}
|
54
|
+
end
|
55
|
+
|
56
|
+
rule symbol
|
57
|
+
[^A-Za-z']+ {
|
58
|
+
def compile
|
59
|
+
return %<"#{text_value}">
|
60
|
+
end
|
61
|
+
}
|
62
|
+
end
|
63
|
+
|
64
|
+
rule quote_char
|
65
|
+
# a literal '
|
66
|
+
"''" {
|
67
|
+
def compile
|
68
|
+
return %Q("'")
|
69
|
+
end
|
70
|
+
}
|
71
|
+
end
|
72
|
+
|
73
|
+
rule era
|
74
|
+
"G"+
|
75
|
+
end
|
76
|
+
|
77
|
+
rule century_of_era
|
78
|
+
"C"+ {
|
79
|
+
def compile
|
80
|
+
# TODO(sissel): support eras? I don't really care myself.
|
81
|
+
return "AD"
|
82
|
+
end
|
83
|
+
}
|
84
|
+
end
|
85
|
+
|
86
|
+
rule year_of_era
|
87
|
+
( "Y"+ / weekyear / year ) {
|
88
|
+
def compile
|
89
|
+
# No 'era' support, so year is just year.
|
90
|
+
return case text_value.length
|
91
|
+
when 2 then "t.year % 100"
|
92
|
+
else "t.year"
|
93
|
+
end
|
94
|
+
end
|
95
|
+
}
|
96
|
+
end
|
97
|
+
|
98
|
+
rule weekyear
|
99
|
+
"x"+ # same as 'year_of_era' used above.
|
100
|
+
end
|
101
|
+
|
102
|
+
rule week_of_weekyear
|
103
|
+
"w"+ {
|
104
|
+
def compile
|
105
|
+
return "(t.yday / 7) + 1"
|
106
|
+
end
|
107
|
+
}
|
108
|
+
end
|
109
|
+
|
110
|
+
rule day_of_week_number
|
111
|
+
"e"+ {
|
112
|
+
def compile
|
113
|
+
return "t.wday"
|
114
|
+
end
|
115
|
+
}
|
116
|
+
end
|
117
|
+
|
118
|
+
rule day_of_week_text
|
119
|
+
"E"+ {
|
120
|
+
def compile
|
121
|
+
if text_value.length < 4
|
122
|
+
return %Q<t.strftime("%a")>
|
123
|
+
end
|
124
|
+
return %Q<t.strftime("%A")>
|
125
|
+
end
|
126
|
+
}
|
127
|
+
end
|
128
|
+
|
129
|
+
rule year
|
130
|
+
"y"+ # same as 'year_of_era' used above.
|
131
|
+
end
|
132
|
+
|
133
|
+
rule day_of_year
|
134
|
+
"D"+ {
|
135
|
+
def compile
|
136
|
+
return %Q<t.yday>
|
137
|
+
end
|
138
|
+
}
|
139
|
+
end
|
140
|
+
|
141
|
+
rule month_of_year
|
142
|
+
"M"+ {
|
143
|
+
def compile
|
144
|
+
return case text_value.length
|
145
|
+
when 1..2 then %Q<sprintf("%0#{text_value.length}d", t.month)>
|
146
|
+
when 3 then %Q<t.strftime("%b")>
|
147
|
+
else %Q<t.strftime("%B")>
|
148
|
+
end
|
149
|
+
end
|
150
|
+
}
|
151
|
+
end
|
152
|
+
|
153
|
+
rule day_of_month
|
154
|
+
"d"+ {
|
155
|
+
def compile
|
156
|
+
return %Q<t.strftime("%0#{text_value.length}d")>
|
157
|
+
end
|
158
|
+
}
|
159
|
+
end
|
160
|
+
|
161
|
+
rule halfday_of_day
|
162
|
+
"a"+ {
|
163
|
+
def compile
|
164
|
+
return %Q<t.strftime("%p")>
|
165
|
+
end
|
166
|
+
}
|
167
|
+
end
|
168
|
+
|
169
|
+
rule hour_of_halfday
|
170
|
+
"K"+ {
|
171
|
+
def compile
|
172
|
+
return %Q<t.strftime("%I")>
|
173
|
+
end
|
174
|
+
}
|
175
|
+
end
|
176
|
+
|
177
|
+
rule clockhour_of_halfday
|
178
|
+
"h"+ {
|
179
|
+
def compile
|
180
|
+
return %Q<sprintf("%0#{text_value.length}d", t.hour / 12)>
|
181
|
+
end
|
182
|
+
}
|
183
|
+
end
|
184
|
+
|
185
|
+
rule hour_of_day
|
186
|
+
"H"+ {
|
187
|
+
def compile
|
188
|
+
return %Q<sprintf("%0#{text_value.length}d", t.hour)>
|
189
|
+
end
|
190
|
+
}
|
191
|
+
end
|
192
|
+
|
193
|
+
rule clockhour_of_day
|
194
|
+
"k"+ {
|
195
|
+
def compile
|
196
|
+
return %Q<sprintf("%0#{text_value.length}d", t.hour + 1)>
|
197
|
+
end
|
198
|
+
}
|
199
|
+
end
|
200
|
+
|
201
|
+
rule minute_of_hour
|
202
|
+
"m"+ {
|
203
|
+
def compile
|
204
|
+
return %Q<sprintf("%0#{text_value.length}d", t.min)>
|
205
|
+
end
|
206
|
+
}
|
207
|
+
end
|
208
|
+
|
209
|
+
rule second_of_minute
|
210
|
+
"s"+ {
|
211
|
+
def compile
|
212
|
+
return %Q<sprintf("%0#{text_value.length}d", t.sec)>
|
213
|
+
end
|
214
|
+
}
|
215
|
+
end
|
216
|
+
|
217
|
+
rule fraction_of_second
|
218
|
+
"S"+ {
|
219
|
+
def compile
|
220
|
+
return %Q<sprintf("%0#{text_value.length}d", t.nsec / (10 ** (9 - #{text_value.length})))>
|
221
|
+
end
|
222
|
+
}
|
223
|
+
end
|
224
|
+
|
225
|
+
rule time_zone_text
|
226
|
+
"z"+
|
227
|
+
end
|
228
|
+
|
229
|
+
rule time_zone_offset_or_id
|
230
|
+
"Z"+ {
|
231
|
+
def compile
|
232
|
+
return %Q<sprintf("%+05d", t.gmtoff / 36)>
|
233
|
+
end
|
234
|
+
}
|
235
|
+
end
|
236
|
+
end
|
data/lib/stud/with.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
module Stud
|
2
|
+
module With
|
3
|
+
# Run a block with arguments. This is sometimes useful in lieu of
|
4
|
+
# explicitly assigning variables.
|
5
|
+
#
|
6
|
+
# I find mainly that using 'with' is a clue that I can factor out
|
7
|
+
# a given segment of code into a method or function.
|
8
|
+
#
|
9
|
+
# Example usage:
|
10
|
+
#
|
11
|
+
# with(TCPSocket.new("google.com", 80)) do |s|
|
12
|
+
# s.write("GET / HTTP/1.0\r\nHost: google.com\r\n\r\n")
|
13
|
+
# puts s.read
|
14
|
+
# s.close
|
15
|
+
# end
|
16
|
+
def with(*args, &block)
|
17
|
+
block.call(*args)
|
18
|
+
end
|
19
|
+
|
20
|
+
extend self
|
21
|
+
end
|
22
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stud
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.14
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,67 +9,67 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-06-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
+
type: :runtime
|
16
|
+
version_requirements: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
15
22
|
name: metriks
|
23
|
+
prerelease: false
|
16
24
|
requirement: !ruby/object:Gem::Requirement
|
17
25
|
none: false
|
18
26
|
requirements:
|
19
27
|
- - ! '>='
|
20
28
|
- !ruby/object:Gem::Version
|
21
29
|
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
22
31
|
type: :runtime
|
23
|
-
prerelease: false
|
24
32
|
version_requirements: !ruby/object:Gem::Requirement
|
25
33
|
none: false
|
26
34
|
requirements:
|
27
35
|
- - ! '>='
|
28
36
|
- !ruby/object:Gem::Version
|
29
37
|
version: '0'
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
38
|
name: ffi
|
39
|
+
prerelease: false
|
32
40
|
requirement: !ruby/object:Gem::Requirement
|
33
41
|
none: false
|
34
42
|
requirements:
|
35
43
|
- - ! '>='
|
36
44
|
- !ruby/object:Gem::Version
|
37
45
|
version: '0'
|
38
|
-
|
39
|
-
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
type: :development
|
40
48
|
version_requirements: !ruby/object:Gem::Requirement
|
41
49
|
none: false
|
42
50
|
requirements:
|
43
51
|
- - ! '>='
|
44
52
|
- !ruby/object:Gem::Version
|
45
53
|
version: '0'
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
54
|
name: rspec
|
55
|
+
prerelease: false
|
48
56
|
requirement: !ruby/object:Gem::Requirement
|
49
57
|
none: false
|
50
58
|
requirements:
|
51
59
|
- - ! '>='
|
52
60
|
- !ruby/object:Gem::Version
|
53
61
|
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
54
63
|
type: :development
|
55
|
-
prerelease: false
|
56
64
|
version_requirements: !ruby/object:Gem::Requirement
|
57
65
|
none: false
|
58
66
|
requirements:
|
59
67
|
- - ! '>='
|
60
68
|
- !ruby/object:Gem::Version
|
61
69
|
version: '0'
|
62
|
-
- !ruby/object:Gem::Dependency
|
63
70
|
name: insist
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
|
-
requirements:
|
67
|
-
- - ! '>='
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '0'
|
70
|
-
type: :development
|
71
71
|
prerelease: false
|
72
|
-
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
75
|
- - ! '>='
|
@@ -82,15 +82,20 @@ executables: []
|
|
82
82
|
extensions: []
|
83
83
|
extra_rdoc_files: []
|
84
84
|
files:
|
85
|
+
- lib/stud/secret.rb
|
86
|
+
- lib/stud/with.rb
|
87
|
+
- lib/stud/task.rb
|
88
|
+
- lib/stud/pool.rb
|
89
|
+
- lib/stud/buffer.rb
|
85
90
|
- lib/stud/try.rb
|
86
|
-
- lib/stud/
|
91
|
+
- lib/stud/time.rb
|
92
|
+
- lib/stud/temporary.rb
|
87
93
|
- lib/stud/benchmark.rb
|
88
|
-
- lib/stud/benchmark/rusage.rb
|
89
|
-
- lib/stud/task.rb
|
90
94
|
- lib/stud/trap.rb
|
91
|
-
- lib/stud/
|
92
|
-
- lib/stud/
|
93
|
-
- lib/stud/
|
95
|
+
- lib/stud/interval.rb
|
96
|
+
- lib/stud/benchmark/rusage.rb
|
97
|
+
- lib/stud/time/format.rb
|
98
|
+
- lib/stud/time/format.tt
|
94
99
|
- LICENSE
|
95
100
|
- CHANGELIST
|
96
101
|
- README.md
|
@@ -115,9 +120,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
115
120
|
version: '0'
|
116
121
|
requirements: []
|
117
122
|
rubyforge_project:
|
118
|
-
rubygems_version: 1.8.
|
123
|
+
rubygems_version: 1.8.25
|
119
124
|
signing_key:
|
120
125
|
specification_version: 3
|
121
126
|
summary: stud - common code techniques
|
122
127
|
test_files: []
|
123
|
-
has_rdoc:
|