webget_ramp 1.7.1.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 (51) hide show
  1. data.tar.gz.sig +0 -0
  2. data/lib/webget_ramp.rb +227 -0
  3. data/lib/webget_ramp/active_record.rb +119 -0
  4. data/lib/webget_ramp/active_record/connection_adapters/abstract/schema_statements.rb +24 -0
  5. data/lib/webget_ramp/array.rb +369 -0
  6. data/lib/webget_ramp/csv.rb +52 -0
  7. data/lib/webget_ramp/date.rb +87 -0
  8. data/lib/webget_ramp/enumerable.rb +369 -0
  9. data/lib/webget_ramp/file.rb +13 -0
  10. data/lib/webget_ramp/hash.rb +195 -0
  11. data/lib/webget_ramp/integer.rb +20 -0
  12. data/lib/webget_ramp/io.rb +63 -0
  13. data/lib/webget_ramp/kernel.rb +34 -0
  14. data/lib/webget_ramp/math.rb +18 -0
  15. data/lib/webget_ramp/nil.rb +9 -0
  16. data/lib/webget_ramp/numeric.rb +94 -0
  17. data/lib/webget_ramp/object.rb +18 -0
  18. data/lib/webget_ramp/process.rb +153 -0
  19. data/lib/webget_ramp/string.rb +220 -0
  20. data/lib/webget_ramp/symbol.rb +10 -0
  21. data/lib/webget_ramp/time.rb +9 -0
  22. data/lib/webget_ramp/xml.rb +120 -0
  23. data/lib/webget_ramp/yaml.rb +32 -0
  24. data/test/webget_ramp/active_record/connection_adapters/abstract/schema_statements_test.rb +9 -0
  25. data/test/webget_ramp/active_record_test.rb +64 -0
  26. data/test/webget_ramp/array_test.rb +171 -0
  27. data/test/webget_ramp/csv_test.rb +18 -0
  28. data/test/webget_ramp/date_test.rb +60 -0
  29. data/test/webget_ramp/enumerable_test.rb +271 -0
  30. data/test/webget_ramp/file_test.rb +15 -0
  31. data/test/webget_ramp/hash_test.rb +105 -0
  32. data/test/webget_ramp/integer_test.rb +19 -0
  33. data/test/webget_ramp/io_test.rb +31 -0
  34. data/test/webget_ramp/io_test.txt +1 -0
  35. data/test/webget_ramp/kernel_test.rb +15 -0
  36. data/test/webget_ramp/math_test.rb +17 -0
  37. data/test/webget_ramp/nil_test.rb +11 -0
  38. data/test/webget_ramp/numeric_test.rb +28 -0
  39. data/test/webget_ramp/object_test.rb +12 -0
  40. data/test/webget_ramp/process_test.rb +24 -0
  41. data/test/webget_ramp/string_test.rb +125 -0
  42. data/test/webget_ramp/symbol_test.rb +26 -0
  43. data/test/webget_ramp/time_test.rb +12 -0
  44. data/test/webget_ramp/xml_test.rb +50 -0
  45. data/test/webget_ramp/xml_test_1.xml +5 -0
  46. data/test/webget_ramp/xml_test_2.xml +5 -0
  47. data/test/webget_ramp/yaml_test.rb +32 -0
  48. data/test/webget_ramp/yaml_test_1.yml +38 -0
  49. data/test/webget_ramp/yaml_test_2.yml +38 -0
  50. metadata +124 -0
  51. metadata.gz.sig +0 -0
@@ -0,0 +1,52 @@
1
+
2
+ class CSV
3
+
4
+ # Return HTTP headers for a typical CSV file download without caching.
5
+ #
6
+ # ==Options
7
+ # - filename: defaults to "data.csv"
8
+ # - request: the incoming http request, which is used to return MSIE-specific headers
9
+ #
10
+ # ==Example
11
+ # headers = CSV.http_headers("myfile.csv")
12
+ #
13
+ # ==Example for Rails
14
+ # response.headers.merge CSV.http_headers("myfile.csv")
15
+ #
16
+ # Ideas from http://stackoverflow.com/questions/94502/in-rails-how-to-return-records-as-a-csv-file/94520
17
+
18
+ def self.http_headers(options={})
19
+ filename = options[:filename] || 'data.csv'
20
+ options=self.http_headers_adjust_for_broken_msie(options)
21
+ content_type = options[:content_type] || 'text/csv'
22
+ return options[:cache] \
23
+ ? {
24
+ 'Content-Type' => content_type,
25
+ 'Content-Disposition' => "attachment; filename=\"#{filename}\"",
26
+ } \
27
+ : {
28
+ 'Content-Type' => content_type,
29
+ 'Cache-Control' => 'no-cache, must-revalidate, post-check=0, pre-check=0',
30
+ 'Expires' => "0",
31
+ 'Pragma' => 'no-cache',
32
+ 'Content-Disposition' => "attachment; filename=\"#{filename}\"",
33
+ }
34
+ end
35
+
36
+ # Helper to try to "do the right thing" for the common case of Rails & MS IE.
37
+ #
38
+ # Rails automatically defines a _request_ object,
39
+ # that has an env HTTP_USER_AGENT.
40
+
41
+ def self.http_headers_adjust_for_broken_msie(options={})
42
+ request = options[:request] || request
43
+ msie = (request and request.env['HTTP_USER_AGENT'] =~ /msie/i)
44
+ if msie
45
+ options[:content_type]||='text/plain''})'
46
+ options[:cache]||=false
47
+ end
48
+ options
49
+ end
50
+
51
+ end
52
+
@@ -0,0 +1,87 @@
1
+ require 'date'
2
+
3
+ class Date
4
+
5
+
6
+ # Return date in a sql format: YYYY-MM-DD
7
+ #
8
+ # ==Example
9
+ # d=Date.today
10
+ # d.to_sql => "2007-12-31"
11
+
12
+ def to_sql
13
+ return to_time.strftime("%Y-%m-%d")
14
+ end
15
+
16
+
17
+ # Return true if the date is a weekday: Mon, Tue, Wed, Thu, Fri
18
+ #
19
+ # ==Example
20
+ # d = Date.parse('2008-01-01')
21
+ # d.wday => 2
22
+ # d.weekday? => true
23
+
24
+ def weekday?
25
+ wday>0 and wday<6
26
+ end
27
+
28
+
29
+ # Return true if the date is a weekend: Sat, Sun
30
+ #
31
+ # ==Example
32
+ # d = Date.parse('2008-01-05')
33
+ # d.wday => 6
34
+ # d.weekend? => true
35
+
36
+ def weekend?
37
+ wday==0 or wday==6
38
+ end
39
+
40
+
41
+ # Return a random date between min & max
42
+ #
43
+ # ==Example
44
+ # d1= Date.parse('2008-01-01')
45
+ # d2= Date.parse('2009-01-01')
46
+ # Date.between(d1,d3) => Date 2008-11-22
47
+
48
+ def self.between(min,max)
49
+ min+rand(max-min)
50
+ end
51
+
52
+
53
+ # Return the age in years for a given date.
54
+ #
55
+ # ==Example
56
+ #
57
+ # birthdate=Date.new(1980,10,31)
58
+ # birthdate.age_years => 28 (where 28 is the correct age for today)
59
+ #
60
+ # ==Example of custom dates
61
+ #
62
+ # birthdate=Date.new(1980,10,31)
63
+ #
64
+ # valentines = Date.new(2008,02,14)
65
+ # birthdate.age_years(valentines) => 27 # before the birthday
66
+ #
67
+ # halloween = Date.new(2008,10,31)
68
+ # birthdate.age_years(halloween) => 28 # on the birthday
69
+ #
70
+ # new_years_eve = Date.new(2008,12,31)
71
+ # birthdate.age_years(new_years_eve) => 28 # after the birthday
72
+
73
+ def age_years(compare_date=Date.today)
74
+ age=compare_date.year-year
75
+ age-=1 if compare_date.month < month or (compare_date.month==month and compare_date.day < day)
76
+ age
77
+ end
78
+
79
+
80
+ # Return the age in days for a given date.
81
+
82
+ def age_days(compare_to_date=Date.today)
83
+ (compare_to_date-self).to_i
84
+ end
85
+
86
+
87
+ end
@@ -0,0 +1,369 @@
1
+ # -*- coding: utf-8 -*-
2
+ module Enumerable
3
+
4
+
5
+ ########################################################################
6
+ #
7
+ # typecast
8
+ #
9
+ ########################################################################
10
+
11
+ # Convert an enumerable to a hash.
12
+ #
13
+ # ==Example
14
+ # array=[[:a, :b],[:c, :d],[:e, :f]]
15
+ # array.to_h => {:a=>:b, :c=>:d, :e=>:f}
16
+ #
17
+ # If a key occurs more than once, then this will automatically
18
+ # convert the value to an array of the keys' values.
19
+ #
20
+ # ==Example
21
+ # array=[[:a,:b],[:a,:c],[:a,:d]]
22
+ # array.to_h => {:a=>[:b, :c, :d]}
23
+
24
+ def to_h
25
+ h={}
26
+ dupe={}
27
+ each{|k,v|
28
+ if h.key? k
29
+ if dupe.key? k
30
+ h[k] << v
31
+ else
32
+ h[k]=[h[k]]
33
+ h[k] << v
34
+ dupe[k]=true
35
+ end
36
+ else
37
+ h[k]=v
38
+ end
39
+ }
40
+ return h
41
+ end
42
+
43
+
44
+ # Convert the enumerable to a hash by mapping each item to a key,item pair.
45
+ #
46
+ # ==Example
47
+ # strings = ["red","blue","green"]
48
+ # strings.index_by{|a| a.size]}
49
+ # => {3 => "red", 4 => "blue", 5 => "green"}
50
+ #
51
+ # Rails has this method.
52
+ #
53
+ # From http://stackoverflow.com/questions/412771/cleanest-way-to-create-a-hash-from-an-array
54
+ #
55
+ # Compare #hash_by
56
+
57
+ def index_by
58
+ inject({}) {|hash, elem| hash.merge!(yield(elem) => elem) }
59
+ end
60
+
61
+
62
+ # Convert the enumerable to a hash by mapping each item to a key,value pair.
63
+ #
64
+ # ==Example
65
+ # strings = ["red","blue","green"]
66
+ # strings.hash_by{|a| [a.size, a.titlecase]}
67
+ # => {3 => "red", 4 => "blue", 5 => "green"}
68
+ #
69
+ # Compare #index_by
70
+
71
+ def hash_by
72
+ map{|x| yield(x)}.to_h
73
+ end
74
+
75
+
76
+
77
+ ########################################################################
78
+ #
79
+ # map_to_xxx
80
+ #
81
+ ########################################################################
82
+
83
+
84
+ # Map each item => item.id
85
+ #
86
+ # ==Example
87
+ # users = User.find(:all)
88
+ # users.map_id => [1,2,3,4,...]
89
+ #
90
+ # A typical use is to convert a list of ActiveRecord items to a list of id items.
91
+ #
92
+ # This method is a fast way to get the same results as items.map(&:id)
93
+
94
+ def map_id
95
+ map{|x| x.id}
96
+ end
97
+
98
+
99
+ # Map each item => item.to_a
100
+ #
101
+ # ==Example
102
+ # set1 = Set.new([:a,:b,:c])
103
+ # set2 = Set.new([:d,:e,:f])
104
+ # set3 = Set.new([:g,:h,:i])
105
+ # sets = [set1, set2, set3]
106
+ # sets.map_to_a => [[:a, :b, :c], [:d, :e, :f], [:g, :h, :i]]
107
+ #
108
+ # A typical use is to convert a list with Set items to a list of Array items,
109
+ # so you can more easily iterate over the the Array items.
110
+ #
111
+ # See http://www.ruby-doc.org/core/classes/Enumerable.html#M003148
112
+
113
+ def map_to_a
114
+ map{|x| [x]}
115
+ end
116
+
117
+
118
+ # Map each item => item.to_f
119
+ #
120
+ # ==Example
121
+ # strings = ["1","2","3"]
122
+ # strings.map_to_f => [1.0, 2.0, 3.0]
123
+ #
124
+ # A typical use is to convert a list of String items to a list of float items.
125
+ #
126
+ # This method is a fast way to get the same results as items.map(&:to_f)
127
+
128
+ def map_to_f
129
+ map{|x| x.to_f}
130
+ end
131
+
132
+
133
+ # Map each item => item.to_i
134
+ #
135
+ # ==Example
136
+ # strings = ["1","2","3"]
137
+ # strings.map_to_i => [1, 2, 3]
138
+ #
139
+ # A typical use is to convert a list of String items to a list of integer items.
140
+ #
141
+ # This method is a fast way to get the same results as items.map(&:to_i)
142
+
143
+ def map_to_i
144
+ map{|x| x.to_i}
145
+ end
146
+
147
+
148
+ # Map each item => item.to_s
149
+ #
150
+ # ==Example
151
+ # numbers = [1, 2, 3]
152
+ # numbers.map_to_s => ["1", "2", "3"]
153
+ #
154
+ # A typical use is to convert a list of Numeric items to a list of String items.
155
+ #
156
+ # This method is a fast way to get the same results as items.map(&:to_s)
157
+
158
+ def map_to_s
159
+ map{|x| x.to_s}
160
+ end
161
+
162
+
163
+ # Map each item => item.to_sym
164
+ #
165
+ # ==Example
166
+ # strings = ["foo", "goo", "hoo"]
167
+ # strings.map_to_sym => [:foo, :goo, :hoo]
168
+ #
169
+ # A typical use is to convert a list of Object items to a list of Symbol items.
170
+ #
171
+ # This method is a fast way to get the same results as items.map(&:to_sym)
172
+
173
+ def map_to_sym
174
+ map{|x| x.to_sym}
175
+ end
176
+
177
+
178
+ ########################################################################
179
+ #
180
+ # select
181
+ #
182
+ ########################################################################
183
+
184
+
185
+ # enum.select_while {|obj| block } => array
186
+ # Returns an array containing the leading elements for which block is not false or nil.
187
+
188
+ def select_while
189
+ a = []
190
+ each{|x| yield(x) ? (a << x) : break}
191
+ return a
192
+ end
193
+
194
+
195
+ # enum.select_until {|obj| block } => array
196
+ # Returns an array containing the leading elements for which block is false or nil.
197
+
198
+ def select_until
199
+ a = []
200
+ each{|x| yield(x) ? break : (a << x)}
201
+ return a
202
+ end
203
+
204
+
205
+ # enum.select_with_index {|obj,i| block } => array
206
+ # Calls block with two arguments, the item and its index, for each item in enum.
207
+ # Returns an array containing the leading elements for which block is not false or nil.
208
+
209
+ def select_with_index
210
+ i = 0
211
+ a = []
212
+ each{|x|
213
+ if yield(x,i)
214
+ a << x
215
+ i+=1
216
+ else
217
+ break
218
+ end
219
+ }
220
+ return a
221
+ end
222
+
223
+
224
+ ########################################################################
225
+ #
226
+ # bisect
227
+ #
228
+ ########################################################################
229
+
230
+ # enum.bisect {|obj| block} => array of positives, array of negatives
231
+ # Returns two arrays: the first contains the elements for which block is
232
+ # true, the second contains the elements for which block is false or nil.
233
+
234
+ def bisect
235
+ a=[]
236
+ b=[]
237
+ each{|x|
238
+ if yield(x)
239
+ a << x
240
+ else
241
+ b << x
242
+ end
243
+ }
244
+ return a,b
245
+ end
246
+
247
+
248
+ ########################################################################
249
+ #
250
+ # nitems
251
+ #
252
+ ########################################################################
253
+
254
+
255
+ # enum.nitems_while {| obj | block } => number of items
256
+ # Returns the number of leading elements for which block is not false or nil.
257
+
258
+ def nitems_while
259
+ n = 0
260
+ each{|x| yield(x) ? (n+=1) : break}
261
+ return n
262
+ end
263
+
264
+
265
+ # enum.nitems_until {| obj | block } => number of items
266
+ # Returns the number of leading elements for which block is false.
267
+
268
+ def nitems_until
269
+ n = 0
270
+ each{|x|
271
+ if yield(x)
272
+ break
273
+ else
274
+ n+=1
275
+ end
276
+ }
277
+ return n
278
+ irb
279
+ end
280
+
281
+
282
+ # enum.nitems_with_index {|obj,i| block } => number of items
283
+ # Calls block with two arguments, the item and its index, for each item in enum.
284
+ # Returns the number of leading elements for which block is true.
285
+
286
+ def nitems_with_index
287
+ i = 0
288
+ each{|x| yield(x,i) ? (i+=1) : break}
289
+ return i
290
+ end
291
+
292
+
293
+ # Shortcut to Array#join to concatenate the items into a string
294
+
295
+ def join(prefix=nil,suffix=nil)
296
+ to_a.join(prefix,suffix)
297
+ end
298
+
299
+
300
+ ########################################################################
301
+ #
302
+ # set math
303
+ #
304
+ ########################################################################
305
+
306
+
307
+ # Returns true if this _enum_ intersects another _enum_.
308
+ #
309
+ # @nb This implementation uses #to_a and array intersection.
310
+ # A developer may want to optimize this implementation for
311
+ # other classes, such as detecting whether a range intersects
312
+ # another range simply by comparing the ranges' min/max values.
313
+ #
314
+ # ==Examples
315
+ # ['a','b','c'].intersect?(['c','d','e'] => true
316
+ # ['a','b','c'].intersect?(['d','e','f'] => false
317
+
318
+ def intersect?(enum)
319
+ return ((self===enum and self.to_a.size>0) or ((self.to_a & enum.to_a).size>0))
320
+ end
321
+
322
+
323
+ # Return the cartesian product of the enumerations.
324
+ # http://en.wikipedia.org/wiki/Cartesian_product
325
+ #
326
+ # This is the fastest implementation we have found.
327
+ # It returns results in typical order.
328
+ #
329
+ # By Thomas Hafner
330
+ # See http://www.ruby-forum.com/topic/95519
331
+ #
332
+ # For our benchmarks, we also compared thesk:
333
+ # - By William James, http://www.ruby-forum.com/topic/95519
334
+ # - By Brian Schröäer, http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/151857
335
+
336
+ def self.cartesian_product(*enums)
337
+ result = [[]]
338
+ while [] != enums
339
+ t, result = result, []
340
+ b, *enums = enums
341
+ t.each do |a|
342
+ b.each do |n|
343
+ result << a + [n]
344
+ end
345
+ end
346
+ end
347
+ result
348
+ end
349
+
350
+ def cartesian_product(*enums)
351
+ Enumerable.cartesian_product(self,*enums)
352
+ end
353
+
354
+
355
+ # Return the power set: an array with all subsets of the enum's elements.
356
+ # http://en.wikipedia.org/wiki/Power_set
357
+ #
358
+ # This implementation is from
359
+ # http://johncarrino.net/blog/2006/08/11/powerset-in-ruby/
360
+ #
361
+ # ==Example
362
+ # [1,2,3].power_set.sort
363
+ # => [[], [1], [1, 2], [1, 2, 3], [1, 3], [2], [2, 3], [3]]
364
+
365
+ def power_set
366
+ inject([[]]){|c,y|r=[];c.each{|i|r<<i;r<<i+[y]};r}
367
+ end
368
+
369
+ end