buzzcore 0.5.1 → 0.6.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/VERSION +1 -1
- data/buzzcore.gemspec +4 -4
- data/lib/buzzcore/extend_base_classes.rb +229 -229
- data/lib/buzzcore/extra/html_truncate.rb +11 -0
- data/lib/buzzcore/misc_utils.rb +3 -6
- data/lib/buzzcore/string_utils.rb +15 -0
- data/test/extend_base_classes_test.rb +23 -0
- metadata +6 -6
- data/lib/buzzcore/tweaks.rb +0 -107
- data/rails/init.rb +0 -16
data/VERSION
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
0.
|
1
|
+
0.6.1
|
2
2
|
|
data/buzzcore.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{buzzcore}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.6.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["buzzware"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2011-06-03}
|
13
13
|
s.description = %q{buzzcore is the ruby core library developed and used by Buzzware Solutions.}
|
14
14
|
s.email = %q{contact@buzzware.com.au}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -41,13 +41,12 @@ Gem::Specification.new do |s|
|
|
41
41
|
"lib/buzzcore/shell_extras.rb",
|
42
42
|
"lib/buzzcore/string_utils.rb",
|
43
43
|
"lib/buzzcore/text_doc.rb",
|
44
|
-
"lib/buzzcore/tweaks.rb",
|
45
44
|
"lib/buzzcore/xml_utils.rb",
|
46
45
|
"lib/buzzcore_dev.rb",
|
47
|
-
"rails/init.rb",
|
48
46
|
"test/buzzcore_test.rb",
|
49
47
|
"test/config_test.rb",
|
50
48
|
"test/credentials_test.rb",
|
49
|
+
"test/extend_base_classes_test.rb",
|
51
50
|
"test/misc_test.rb",
|
52
51
|
"test/shell_test.rb",
|
53
52
|
"test/test_helper.rb"
|
@@ -61,6 +60,7 @@ Gem::Specification.new do |s|
|
|
61
60
|
"test/buzzcore_test.rb",
|
62
61
|
"test/config_test.rb",
|
63
62
|
"test/credentials_test.rb",
|
63
|
+
"test/extend_base_classes_test.rb",
|
64
64
|
"test/misc_test.rb",
|
65
65
|
"test/shell_test.rb",
|
66
66
|
"test/test_helper.rb"
|
@@ -1,38 +1,38 @@
|
|
1
|
-
String.class_eval do
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
1
|
+
String.class_eval do
|
2
|
+
def pad_left(value)
|
3
|
+
increase = value-self.length
|
4
|
+
return self if increase==0
|
5
|
+
if increase > 0
|
6
|
+
return self + ' '*increase
|
7
|
+
else
|
8
|
+
return self[0,value]
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def pad_right(value)
|
13
|
+
increase = value-self.length
|
14
|
+
return self if increase==0
|
15
|
+
if increase > 0
|
16
|
+
return ' '*increase + self
|
17
|
+
else
|
18
|
+
return self[0,value]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# Like chomp! but operates on the leading characters instead.
|
23
|
+
# The aString parameter would not normally be used.
|
24
|
+
def bite!(aValue=$/,aString=self)
|
25
|
+
if aString[0,aValue.length] == aValue
|
26
|
+
aString[0,aValue.length] = ''
|
27
|
+
return aString
|
28
|
+
else
|
29
|
+
return aString
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def bite(aValue=$/)
|
34
|
+
bite!(aValue,self.clone)
|
35
|
+
end
|
36
36
|
|
37
37
|
def begins_with?(aString)
|
38
38
|
self[0,aString.length]==aString
|
@@ -79,128 +79,128 @@ String.class_eval do
|
|
79
79
|
def is_f?
|
80
80
|
self.to_float(false) and true
|
81
81
|
end
|
82
|
-
|
82
|
+
|
83
83
|
# like scan but returns array of MatchData's.
|
84
84
|
# doesn't yet support blocks
|
85
85
|
def scan_md(aPattern)
|
86
86
|
result = []
|
87
|
-
self.scan(aPattern) {|s| result << $~ }
|
87
|
+
self.scan(aPattern) {|s| result << $~ }
|
88
88
|
result
|
89
89
|
end
|
90
|
-
|
90
|
+
|
91
91
|
def to_nil(aPattern=nil)
|
92
92
|
return nil if self.empty?
|
93
93
|
if aPattern
|
94
94
|
return nil if (aPattern.is_a? Regexp) && (self =~ aPattern)
|
95
|
-
return nil if aPattern.to_s == self
|
95
|
+
return nil if aPattern.to_s == self
|
96
96
|
end
|
97
97
|
self
|
98
98
|
end
|
99
|
-
|
99
|
+
|
100
100
|
def to_b(aDefault=false)
|
101
101
|
return true if ['1','yes','y','true','on'].include?(self.downcase)
|
102
102
|
return false if ['0','no','n','false','off'].include?(self.downcase)
|
103
103
|
aDefault
|
104
104
|
end
|
105
|
-
|
106
|
-
# uses
|
105
|
+
|
106
|
+
# uses
|
107
107
|
#URLIZE_PATTERN = /[ \/\\\(\)\[\]]/
|
108
108
|
URLIZE_PATTERN_PS = /[ \\\(\)\[\]_]/
|
109
109
|
def urlize(aSlashChar='+')
|
110
110
|
return self if self.empty?
|
111
|
-
result = self.gsub(URLIZE_PATTERN_PS,'-').downcase.gsub(/[^a-z0-9_\-+,\.\/]/,'')
|
111
|
+
result = self.gsub(URLIZE_PATTERN_PS,'-').downcase.gsub(/[^a-z0-9_\-+,\.\/]/,'').sub(/-+$/,'').sub(/^-+/,'')
|
112
112
|
result.gsub!('/',aSlashChar) unless aSlashChar=='/'
|
113
113
|
result.gsub!(/-{2,}/,'-')
|
114
114
|
result
|
115
|
-
end
|
116
|
-
|
115
|
+
end
|
116
|
+
|
117
117
|
private
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
end
|
118
|
+
CRC_LOOKUP = [
|
119
|
+
0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241,
|
120
|
+
0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440,
|
121
|
+
0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40,
|
122
|
+
0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841,
|
123
|
+
0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40,
|
124
|
+
0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41,
|
125
|
+
0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641,
|
126
|
+
0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040,
|
127
|
+
0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240,
|
128
|
+
0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441,
|
129
|
+
0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41,
|
130
|
+
0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840,
|
131
|
+
0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41,
|
132
|
+
0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40,
|
133
|
+
0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640,
|
134
|
+
0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041,
|
135
|
+
0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240,
|
136
|
+
0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441,
|
137
|
+
0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41,
|
138
|
+
0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840,
|
139
|
+
0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41,
|
140
|
+
0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40,
|
141
|
+
0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640,
|
142
|
+
0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041,
|
143
|
+
0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241,
|
144
|
+
0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440,
|
145
|
+
0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40,
|
146
|
+
0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841,
|
147
|
+
0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40,
|
148
|
+
0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41,
|
149
|
+
0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641,
|
150
|
+
0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040
|
151
|
+
]
|
152
|
+
public
|
153
|
+
|
154
|
+
def crc16
|
155
|
+
crc = 0x00
|
156
|
+
self.each_byte do |b|
|
157
|
+
crc = ((crc >> 8) & 0xff) ^ CRC_LOOKUP[(crc ^ b) & 0xff]
|
158
|
+
end
|
159
|
+
crc
|
160
|
+
end
|
161
|
+
|
162
|
+
|
163
|
+
end
|
164
164
|
|
165
165
|
|
166
166
|
Time.class_eval do
|
167
167
|
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
168
|
+
if !respond_to?(:change) # no activesupport loaded
|
169
|
+
def change(options)
|
170
|
+
::Time.send(
|
171
|
+
self.utc? ? :utc : :local,
|
172
|
+
options[:year] || self.year,
|
173
|
+
options[:month] || self.month,
|
174
|
+
options[:day] || self.day,
|
175
|
+
options[:hour] || self.hour,
|
176
|
+
options[:min] || (options[:hour] ? 0 : self.min),
|
177
|
+
options[:sec] || ((options[:hour] || options[:min]) ? 0 : self.sec),
|
178
|
+
options[:usec] || ((options[:hour] || options[:min] || options[:sec]) ? 0 : self.usec)
|
179
|
+
)
|
180
|
+
end
|
181
|
+
|
182
|
+
def seconds_since_midnight
|
183
|
+
self.to_i - self.change(:hour => 0).to_i + (self.usec/1.0e+6)
|
184
|
+
end
|
185
|
+
|
186
|
+
def beginning_of_day
|
187
|
+
(self - self.seconds_since_midnight).change(:usec => 0)
|
188
|
+
end
|
189
|
+
|
190
|
+
alias :midnight :beginning_of_day
|
191
|
+
alias :at_midnight :beginning_of_day
|
192
|
+
alias :at_beginning_of_day :beginning_of_day
|
193
|
+
|
194
|
+
end
|
195
195
|
|
196
196
|
# offset of local machine from UTC, in seconds eg +9.hours
|
197
197
|
def self.local_offset
|
198
|
-
local(2000).utc_offset
|
198
|
+
local(2000).utc_offset
|
199
199
|
end
|
200
200
|
|
201
|
-
|
202
|
-
|
203
|
-
|
201
|
+
def date
|
202
|
+
self.at_beginning_of_day
|
203
|
+
end
|
204
204
|
|
205
205
|
# index number of this day, from Time.at(0) + utc_offset
|
206
206
|
def day_number
|
@@ -220,11 +220,11 @@ Time.class_eval do
|
|
220
220
|
def date_numeric
|
221
221
|
self.strftime('%Y%m%d')
|
222
222
|
end
|
223
|
-
|
223
|
+
|
224
224
|
def to_universal
|
225
|
-
self.strftime("%d %b %Y")
|
225
|
+
self.strftime("%d %b %Y")
|
226
226
|
end
|
227
|
-
|
227
|
+
|
228
228
|
# create a new Time from eg. "20081231"
|
229
229
|
def self.from_date_numeric(aString)
|
230
230
|
return nil unless aString
|
@@ -239,60 +239,60 @@ Time.class_eval do
|
|
239
239
|
self.strftime('%Y%m%d-%H%M%S')
|
240
240
|
end
|
241
241
|
|
242
|
-
def to_sql
|
242
|
+
def to_sql_format # was to_sql, but clashed with Rails 3
|
243
243
|
self.strftime('%Y-%m-%d %H:%M:%S')
|
244
244
|
end
|
245
245
|
|
246
246
|
def to_w3c
|
247
|
-
utc.strftime("%Y-%m-%dT%H:%M:%S+00:00")
|
247
|
+
utc.strftime("%Y-%m-%dT%H:%M:%S+00:00")
|
248
248
|
end
|
249
249
|
end
|
250
250
|
|
251
251
|
module HashUtils
|
252
|
-
|
253
|
-
|
252
|
+
def filter_include!(aKeys,aHash=nil)
|
253
|
+
aHash ||= self
|
254
254
|
|
255
255
|
if aKeys.is_a? Regexp
|
256
|
-
|
256
|
+
return aHash.delete_if {|k,v| not k =~ aKeys }
|
257
257
|
else
|
258
258
|
aKeys = [aKeys] unless aKeys.is_a? Array
|
259
|
-
|
260
|
-
|
261
|
-
|
259
|
+
return aHash.clear if aKeys.empty?
|
260
|
+
return aHash.delete_if {|key, value| !((aKeys.include?(key)) || (key.is_a?(Symbol) and aKeys.include?(key.to_s)) || (key.is_a?(String) and aKeys.include?(key.to_sym)))}
|
261
|
+
return aHash # last resort
|
262
262
|
end
|
263
|
-
|
263
|
+
end
|
264
264
|
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
265
|
+
def filter_include(aKeys,aHash=nil)
|
266
|
+
aHash ||= self
|
267
|
+
filter_include!(aKeys,aHash.clone)
|
268
|
+
end
|
269
269
|
|
270
|
-
|
271
|
-
|
270
|
+
def filter_exclude!(aKeys,aHash=nil)
|
271
|
+
aHash ||= self
|
272
272
|
|
273
273
|
if aKeys.is_a? Regexp
|
274
|
-
|
274
|
+
return aHash.delete_if {|k,v| k =~ aKeys }
|
275
275
|
else
|
276
276
|
aKeys = [aKeys] unless aKeys.is_a? Array
|
277
|
-
|
278
|
-
|
277
|
+
return aHash if aKeys.empty?
|
278
|
+
return aHash.delete_if {|key, value| ((aKeys.include?(key)) || (key.is_a?(Symbol) and aKeys.include?(key.to_s)) || (key.is_a?(String) and aKeys.include?(key.to_sym)))}
|
279
279
|
end
|
280
|
-
|
280
|
+
end
|
281
281
|
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
282
|
+
def filter_exclude(aKeys,aHash=nil)
|
283
|
+
aHash ||= self
|
284
|
+
filter_exclude!(aKeys,aHash.clone)
|
285
|
+
end
|
286
286
|
|
287
287
|
def has_values_for?(aKeys,aHash=nil)
|
288
|
-
|
288
|
+
aHash ||= self
|
289
289
|
# check all keys exist in aHash and their values are not nil
|
290
290
|
aKeys.all? { |k,v| aHash[k] }
|
291
291
|
end
|
292
292
|
|
293
293
|
# give a block to execute without the given key in this hash
|
294
294
|
# It will be replaced after the block (guaranteed by ensure)
|
295
|
-
# eg.
|
295
|
+
# eg.
|
296
296
|
# hash.without_key(:blah) do |aHash|
|
297
297
|
# puts aHash.inspect
|
298
298
|
# end
|
@@ -309,7 +309,7 @@ module HashUtils
|
|
309
309
|
end
|
310
310
|
return result
|
311
311
|
end
|
312
|
-
|
312
|
+
|
313
313
|
def symbolize_keys
|
314
314
|
result = {}
|
315
315
|
self.each { |k,v| k.is_a?(String) ? result[k.to_sym] = v : result[k] = v }
|
@@ -323,7 +323,7 @@ module HashUtils
|
|
323
323
|
end
|
324
324
|
|
325
325
|
Hash.class_eval do
|
326
|
-
|
326
|
+
include HashUtils
|
327
327
|
end
|
328
328
|
|
329
329
|
if defined? HashWithIndifferentAccess
|
@@ -333,40 +333,40 @@ if defined? HashWithIndifferentAccess
|
|
333
333
|
end
|
334
334
|
|
335
335
|
module ArrayUtils
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
336
|
+
def filter_include!(aValues,aArray=nil)
|
337
|
+
aArray ||= self
|
338
|
+
if aValues.is_a? Array
|
339
|
+
return aArray if aValues.empty?
|
340
|
+
return aArray.delete_if {|v| not aValues.include? v }
|
341
|
+
elsif aValues.is_a? Regexp
|
342
|
+
return aArray.delete_if {|v| not v =~ aValues }
|
343
|
+
else
|
344
|
+
return filter_include!([aValues],aArray)
|
345
|
+
end
|
346
|
+
end
|
347
|
+
|
348
|
+
def filter_include(aValues,aArray=nil)
|
349
|
+
aArray ||= self
|
350
|
+
filter_include!(aValues,aArray.clone)
|
351
|
+
end
|
352
|
+
|
353
|
+
def filter_exclude!(aValues,aArray=nil)
|
354
|
+
aArray ||= self
|
355
|
+
if aValues.is_a? Array
|
356
|
+
return aArray if aValues.empty?
|
357
|
+
return aArray.delete_if {|v| aValues.include? v }
|
358
|
+
elsif aValues.is_a? Regexp
|
359
|
+
return aArray.delete_if {|v| v =~ aValues }
|
360
|
+
else
|
361
|
+
return filter_exclude!([aValues],aArray)
|
362
|
+
end
|
363
|
+
end
|
364
|
+
|
365
|
+
def filter_exclude(aValues,aArray=nil)
|
366
|
+
aArray ||= self
|
367
|
+
filter_exclude!(aValues,aArray.clone)
|
368
|
+
end
|
369
|
+
|
370
370
|
def to_nil
|
371
371
|
self.empty? ? nil : self
|
372
372
|
end
|
@@ -374,7 +374,7 @@ module ArrayUtils
|
|
374
374
|
end
|
375
375
|
|
376
376
|
Array.class_eval do
|
377
|
-
|
377
|
+
include ArrayUtils
|
378
378
|
|
379
379
|
# fixes a memory leak in shift in Ruby 1.8 - should be fixed in 1.9
|
380
380
|
# see http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/216055
|
@@ -390,27 +390,27 @@ Kernel.class_eval do
|
|
390
390
|
end
|
391
391
|
end
|
392
392
|
|
393
|
-
if defined? ActiveRecord
|
394
|
-
ActiveRecord::Base.class_eval do
|
395
|
-
|
396
|
-
def self.find_any_id(aId)
|
397
|
-
with_exclusive_scope { find(:first, {:conditions => {:id => aId}}) }
|
398
|
-
end
|
399
|
-
|
400
|
-
def self.find_any_all(aOptions={})
|
401
|
-
with_exclusive_scope { find(:all, aOptions) }
|
402
|
-
end
|
403
|
-
|
404
|
-
def self.find_ids(aIds)
|
405
|
-
find(:all, {:conditions=> ["id in (?)",aIds.join(',')]})
|
406
|
-
end
|
407
|
-
|
408
|
-
def self.find_any_ids(aIds)
|
409
|
-
with_exclusive_scope { find(:all, {:conditions=> ["id in (?)",aIds.join(',')]}) }
|
410
|
-
end
|
411
|
-
|
412
|
-
end
|
413
|
-
end
|
393
|
+
#if defined? ActiveRecord
|
394
|
+
# ActiveRecord::Base.class_eval do
|
395
|
+
#
|
396
|
+
# def self.find_any_id(aId)
|
397
|
+
# with_exclusive_scope { find(:first, {:conditions => {:id => aId}}) }
|
398
|
+
# end
|
399
|
+
#
|
400
|
+
# def self.find_any_all(aOptions={})
|
401
|
+
# with_exclusive_scope { find(:all, aOptions) }
|
402
|
+
# end
|
403
|
+
#
|
404
|
+
# def self.find_ids(aIds)
|
405
|
+
# find(:all, {:conditions=> ["id in (?)",aIds.join(',')]})
|
406
|
+
# end
|
407
|
+
#
|
408
|
+
# def self.find_any_ids(aIds)
|
409
|
+
# with_exclusive_scope { find(:all, {:conditions=> ["id in (?)",aIds.join(',')]}) }
|
410
|
+
# end
|
411
|
+
#
|
412
|
+
# end
|
413
|
+
#end
|
414
414
|
|
415
415
|
Fixnum.class_eval do
|
416
416
|
|
@@ -429,57 +429,57 @@ Bignum.class_eval do
|
|
429
429
|
def to_nil
|
430
430
|
self==0 ? nil : self
|
431
431
|
end
|
432
|
-
|
432
|
+
|
433
433
|
def to_b(aDefault=false)
|
434
434
|
self==0 ? false : true
|
435
435
|
end
|
436
436
|
|
437
437
|
end
|
438
438
|
|
439
|
-
NilClass.class_eval do
|
439
|
+
NilClass.class_eval do
|
440
440
|
|
441
441
|
def to_nil
|
442
|
-
nil
|
442
|
+
nil
|
443
443
|
end
|
444
|
-
|
444
|
+
|
445
445
|
def to_b(aDefault=false)
|
446
446
|
false
|
447
447
|
end
|
448
|
-
|
448
|
+
|
449
449
|
end
|
450
450
|
|
451
|
-
TrueClass.class_eval do
|
451
|
+
TrueClass.class_eval do
|
452
452
|
|
453
453
|
def to_nil
|
454
|
-
self
|
454
|
+
self
|
455
455
|
end
|
456
|
-
|
456
|
+
|
457
457
|
def to_b(aDefault=false)
|
458
458
|
self
|
459
|
-
end
|
460
|
-
|
459
|
+
end
|
460
|
+
|
461
461
|
end
|
462
462
|
|
463
|
-
FalseClass.class_eval do
|
463
|
+
FalseClass.class_eval do
|
464
464
|
|
465
465
|
def to_nil
|
466
|
-
nil
|
466
|
+
nil
|
467
467
|
end
|
468
|
-
|
468
|
+
|
469
469
|
def to_b(aDefault=false)
|
470
470
|
self
|
471
|
-
end
|
472
|
-
|
471
|
+
end
|
472
|
+
|
473
473
|
end
|
474
474
|
|
475
475
|
|
476
476
|
Math.module_eval do
|
477
|
-
|
478
|
-
|
479
|
-
|
477
|
+
def self.max(a, b)
|
478
|
+
a > b ? a : b
|
479
|
+
end
|
480
480
|
|
481
|
-
|
482
|
-
|
483
|
-
|
481
|
+
def self.min(a, b)
|
482
|
+
a < b ? a : b
|
483
|
+
end
|
484
484
|
end
|
485
485
|
|
@@ -30,6 +30,17 @@ module HtmlUtils
|
|
30
30
|
aHtml = Sanitize.clean(aHtml)
|
31
31
|
StringUtils.simplify_whitespace(aHtml)
|
32
32
|
end
|
33
|
+
|
34
|
+
def self.plain_words(aHtmlText,aWords)
|
35
|
+
result = CGI.unescapeHTML(Sanitize.clean(aHtmlText))
|
36
|
+
StringUtils.crop_to_word_count(result,aWords)
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.plain_chars(aHtmlText,aMaxLength)
|
40
|
+
result = CGI.unescapeHTML(Sanitize.clean(aHtmlText))
|
41
|
+
result = StringUtils.simplify_whitespace(result)
|
42
|
+
StringUtils.word_safe_truncate(result,aMaxLength)
|
43
|
+
end
|
33
44
|
|
34
45
|
end
|
35
46
|
|
data/lib/buzzcore/misc_utils.rb
CHANGED
@@ -91,12 +91,9 @@ module MiscUtils
|
|
91
91
|
return new_dir
|
92
92
|
end
|
93
93
|
|
94
|
-
def self.mkdir?(aPath,aPermissions)
|
95
|
-
|
96
|
-
|
97
|
-
else
|
98
|
-
Dir.mkdir(aPath, aPermissions)
|
99
|
-
end
|
94
|
+
def self.mkdir?(aPath,aPermissions=nil)
|
95
|
+
FileUtils.mkdir_p(aPath) unless File.exists?(aPath)
|
96
|
+
File.chmod(aPermissions, aPath) if aPermissions
|
100
97
|
end
|
101
98
|
|
102
99
|
def self.set_permissions_cmd(aFilepath,aUser=nil,aGroup=nil,aMode=nil,aSetGroupId=false,aSudo=true)
|
@@ -18,6 +18,13 @@ module StringUtils
|
|
18
18
|
result = (match ? match.pre_match : aText)
|
19
19
|
result
|
20
20
|
end
|
21
|
+
|
22
|
+
def self.random_word(min,max)
|
23
|
+
len = min + rand(max-min+1)
|
24
|
+
result = ' '*len
|
25
|
+
(len-1).downto(0) {|i| result[i] = (?a + rand(?z-?a+1)).chr}
|
26
|
+
return result
|
27
|
+
end
|
21
28
|
|
22
29
|
# aTemplate is a string containing tokens like ${SOME_TOKEN}
|
23
30
|
# aValues is a hash of token names eg. 'SOME_TOKEN' and their values to substitute
|
@@ -90,6 +97,14 @@ module StringUtils
|
|
90
97
|
aText.squeeze!(' ')
|
91
98
|
aText
|
92
99
|
end
|
100
|
+
|
101
|
+
def self.clean_tag(aTag)
|
102
|
+
aTag.downcase.gsub('_','-').gsub(/[^a-z0-9-]/,'').bite('-').chomp('-')
|
103
|
+
end
|
104
|
+
|
105
|
+
def self.clean_tags(aTags)
|
106
|
+
aTags.map {|t| clean_tag(t)}.uniq
|
107
|
+
end
|
93
108
|
|
94
109
|
end
|
95
110
|
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# To change this template, choose Tools | Templates
|
2
|
+
# and open the template in the editor.
|
3
|
+
|
4
|
+
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
5
|
+
|
6
|
+
require 'rubygems'
|
7
|
+
|
8
|
+
require 'test/unit'
|
9
|
+
gem 'shoulda'; require 'shoulda'
|
10
|
+
|
11
|
+
require 'fileutils'
|
12
|
+
|
13
|
+
gem 'buzzcore'; require 'buzzcore'
|
14
|
+
|
15
|
+
class ExtendBaseClassesTest < Test::Unit::TestCase
|
16
|
+
|
17
|
+
should "urlize generate correct url" do
|
18
|
+
s = "Waiting for Grace (ii)"
|
19
|
+
u = s.urlize
|
20
|
+
assert_equal 'waiting-for-grace-ii',u
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: buzzcore
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 5
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 6
|
9
9
|
- 1
|
10
|
-
version: 0.
|
10
|
+
version: 0.6.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- buzzware
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2011-06-03 00:00:00 +08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -80,13 +80,12 @@ files:
|
|
80
80
|
- lib/buzzcore/shell_extras.rb
|
81
81
|
- lib/buzzcore/string_utils.rb
|
82
82
|
- lib/buzzcore/text_doc.rb
|
83
|
-
- lib/buzzcore/tweaks.rb
|
84
83
|
- lib/buzzcore/xml_utils.rb
|
85
84
|
- lib/buzzcore_dev.rb
|
86
|
-
- rails/init.rb
|
87
85
|
- test/buzzcore_test.rb
|
88
86
|
- test/config_test.rb
|
89
87
|
- test/credentials_test.rb
|
88
|
+
- test/extend_base_classes_test.rb
|
90
89
|
- test/misc_test.rb
|
91
90
|
- test/shell_test.rb
|
92
91
|
- test/test_helper.rb
|
@@ -128,6 +127,7 @@ test_files:
|
|
128
127
|
- test/buzzcore_test.rb
|
129
128
|
- test/config_test.rb
|
130
129
|
- test/credentials_test.rb
|
130
|
+
- test/extend_base_classes_test.rb
|
131
131
|
- test/misc_test.rb
|
132
132
|
- test/shell_test.rb
|
133
133
|
- test/test_helper.rb
|
data/lib/buzzcore/tweaks.rb
DELETED
@@ -1,107 +0,0 @@
|
|
1
|
-
module Buzzcore
|
2
|
-
|
3
|
-
#class Tweak
|
4
|
-
#
|
5
|
-
# attr_reader :name
|
6
|
-
#
|
7
|
-
# def initialize(aName)
|
8
|
-
# @name = aName.to_sym
|
9
|
-
# end
|
10
|
-
#
|
11
|
-
# def config
|
12
|
-
# Tweaks.config_for(name)
|
13
|
-
# end
|
14
|
-
#
|
15
|
-
#end
|
16
|
-
|
17
|
-
class Tweaks
|
18
|
-
|
19
|
-
@@configs = {}
|
20
|
-
@@switch = {}
|
21
|
-
@@switch_default = {}
|
22
|
-
|
23
|
-
#cattr_accessor :rails_config
|
24
|
-
|
25
|
-
# load all tweaks from a path
|
26
|
-
def self.load_all(aPath)
|
27
|
-
aPath = File.expand_path(aPath)
|
28
|
-
# get list of tweak_files
|
29
|
-
tweak_files = Dir.glob(File.join(aPath,'*_tweak.rb'))
|
30
|
-
tweak_files.each do |f|
|
31
|
-
Tweaks.load(f)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def self.load(aTweakFile)
|
36
|
-
#name = aTweakFile.scan(/.*\/(.+)_tweak\.rb$/).flatten.pop
|
37
|
-
#@@tweaks[name.to_sym] = Tweak.new(name)
|
38
|
-
if defined? Rails
|
39
|
-
require_dependency aTweakFile
|
40
|
-
else
|
41
|
-
::Kernel.load(aTweakFile)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def self.enable(*aTweakNames)
|
46
|
-
aTweakNames = [aTweakNames] unless aTweakNames.is_a?(Array)
|
47
|
-
aTweakNames.each do |n|
|
48
|
-
@@switch[n.to_sym] = true
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def self.disable(*aTweakNames)
|
53
|
-
aTweakNames = [aTweakNames] unless aTweakNames.is_a?(Array)
|
54
|
-
aTweakNames.each do |n|
|
55
|
-
@@switch[n.to_sym] = false
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def self.header_enabled?(aTweak)
|
60
|
-
end
|
61
|
-
|
62
|
-
def self.header_disabled?(aTweak)
|
63
|
-
end
|
64
|
-
|
65
|
-
# pass a hash to set
|
66
|
-
# returns config hash for modification
|
67
|
-
def self.config_for(aTweak,aHash=nil)
|
68
|
-
aTweak = aTweak.to_sym
|
69
|
-
if !(cf = @@configs[aTweak])
|
70
|
-
cf = {}
|
71
|
-
@@configs[aTweak] = cf
|
72
|
-
end
|
73
|
-
if aHash
|
74
|
-
if cf.is_a?(ConfigClass)
|
75
|
-
cf.reset()
|
76
|
-
cf.read(aHash)
|
77
|
-
else
|
78
|
-
@@configs[aTweak] = cf = aHash
|
79
|
-
end
|
80
|
-
end
|
81
|
-
cf
|
82
|
-
end
|
83
|
-
|
84
|
-
# pass a hash to set
|
85
|
-
# returns config hash for modification
|
86
|
-
#def self.defaults_for(aTweak,aHash=nil)
|
87
|
-
# c = config
|
88
|
-
#end
|
89
|
-
|
90
|
-
# called by tweak code (not sure if necessary)
|
91
|
-
# aDefaults creates an optional config object for this tweak with the given defaults and previously given values
|
92
|
-
# aNormally :enabled or :disabled
|
93
|
-
def self.define(aName,aNormally,aDefaults=nil)
|
94
|
-
config = @@configs[aName.to_sym]
|
95
|
-
@@configs[aName.to_sym] = config = ConfigClass.new(aDefaults,config) if aDefaults
|
96
|
-
@@switch_default[aName.to_sym] = (aNormally==:enabled || aNormally==true ? true : false)
|
97
|
-
en = enabled?(aName)
|
98
|
-
yield(config,aName) if en
|
99
|
-
en
|
100
|
-
end
|
101
|
-
|
102
|
-
def self.enabled?(aTweakName)
|
103
|
-
@@switch[aTweakName.to_sym]==nil ? @@switch_default[aTweakName.to_sym] : @@switch[aTweakName.to_sym]
|
104
|
-
end
|
105
|
-
|
106
|
-
end
|
107
|
-
end
|
data/rails/init.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
#gem_root = File.expand_path(File.join(File.dirname(__FILE__), ".."))
|
2
|
-
#Cms.add_to_rails_paths gem_root
|
3
|
-
#
|
4
|
-
#throw RuntimeError.new('thumbs_cache folder must exist') unless File.exists? APP_CONFIG[:thumbs_cache]
|
5
|
-
#
|
6
|
-
#Cms::PageHelper.module_eval do
|
7
|
-
#
|
8
|
-
# extend BcmsTools::PageHelper
|
9
|
-
#
|
10
|
-
#end
|
11
|
-
#
|
12
|
-
config.after_initialize do
|
13
|
-
#Buzzcore::Tweaks.rails_config = config
|
14
|
-
Buzzcore::Tweaks.load_all(File.join(File.dirname(__FILE__),'../tweaks'))
|
15
|
-
Buzzcore::Tweaks.load_all(File.join(RAILS_ROOT,'tweaks'))
|
16
|
-
end
|