rext 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. data/History.rdoc +97 -0
  2. data/Manifest +54 -0
  3. data/README.rdoc +136 -0
  4. data/Rakefile +16 -0
  5. data/benchmarks/enumerable.rb +14 -0
  6. data/benchmarks/proc.rb +24 -0
  7. data/lib/rext.rb +24 -0
  8. data/lib/rext/all.rb +18 -0
  9. data/lib/rext/array.rb +6 -0
  10. data/lib/rext/array/helpers.rb +64 -0
  11. data/lib/rext/date.rb +6 -0
  12. data/lib/rext/date/helpers.rb +11 -0
  13. data/lib/rext/enumerable.rb +6 -0
  14. data/lib/rext/enumerable/helpers.rb +88 -0
  15. data/lib/rext/hash.rb +6 -0
  16. data/lib/rext/hash/helpers.rb +42 -0
  17. data/lib/rext/integer.rb +6 -0
  18. data/lib/rext/integer/helpers.rb +29 -0
  19. data/lib/rext/module.rb +6 -0
  20. data/lib/rext/module/helpers.rb +85 -0
  21. data/lib/rext/numeric.rb +7 -0
  22. data/lib/rext/numeric/bytes.rb +16 -0
  23. data/lib/rext/numeric/time.rb +57 -0
  24. data/lib/rext/object.rb +7 -0
  25. data/lib/rext/object/helpers.rb +62 -0
  26. data/lib/rext/object/metaclass.rb +29 -0
  27. data/lib/rext/proc.rb +7 -0
  28. data/lib/rext/proc/helpers.rb +22 -0
  29. data/lib/rext/string.rb +7 -0
  30. data/lib/rext/string/encode.rb +82 -0
  31. data/lib/rext/string/helpers.rb +246 -0
  32. data/lib/rext/symbol.rb +6 -0
  33. data/lib/rext/symbol/helpers.rb +16 -0
  34. data/lib/rext/time.rb +6 -0
  35. data/lib/rext/time/helpers.rb +43 -0
  36. data/lib/rext/version.rb +4 -0
  37. data/rext.gemspec +30 -0
  38. data/spec/array_spec.rb +61 -0
  39. data/spec/date_spec.rb +14 -0
  40. data/spec/enumerable_spec.rb +55 -0
  41. data/spec/hash_spec.rb +36 -0
  42. data/spec/integer_spec.rb +19 -0
  43. data/spec/module_spec.rb +41 -0
  44. data/spec/numeric_spec.rb +31 -0
  45. data/spec/object_spec.rb +101 -0
  46. data/spec/spec.opts +1 -0
  47. data/spec/spec_helper.rb +5 -0
  48. data/spec/string_spec.rb +194 -0
  49. data/spec/symbol_spec.rb +14 -0
  50. data/spec/time_spec.rb +22 -0
  51. data/tasks/benchmark.rake +13 -0
  52. data/tasks/docs.rake +13 -0
  53. data/tasks/gemspec.rake +3 -0
  54. data/tasks/spec.rake +25 -0
  55. metadata +147 -0
@@ -0,0 +1,97 @@
1
+
2
+ === 0.3.4 / 2009-10-08
3
+
4
+ * Added metadef alias to meta_def
5
+ * Added #extendable
6
+
7
+ === 0.3.3 / 2009-08-24
8
+
9
+ * Added Symbol#to_proc [#5]
10
+
11
+ === 0.3.2 / 2009-08-24
12
+
13
+ * Added Symbol#to_proc [#5]
14
+
15
+ === 0.3.1 / 2009-08-17
16
+
17
+ * Added #try
18
+ * Fixed some requires
19
+
20
+ === 0.3.0 / 2009-08-11
21
+
22
+ * Moved some string encoding related methods to string/encode.rb
23
+ * Added String#to_md5 and String#to_sha512
24
+ * Added autospec support
25
+
26
+ === 0.2.2 / 2009-06-12
27
+
28
+ * Fixed require for libs previously removed
29
+
30
+ === 0.2.1 / 2009-06-10
31
+
32
+ * Removed BasicObject due to compatibility issues with other libraries
33
+
34
+ === 0.2.0 / 2009-06-10
35
+
36
+ * Added Enumerable#includes_all?
37
+
38
+ === 0.1.1 / 2009-06-10
39
+
40
+ * Removed sketchy BasicObject #method_added hack for now
41
+ * Added Module#setup
42
+ * Added / Implemented Object#returning
43
+
44
+ === 0.1.0 / 2009-05-04
45
+
46
+ * Added Module#call_method
47
+ * Added String#word_frequency and String#frequency_of_word
48
+
49
+ === 0.0.8 / 2009-04-13
50
+
51
+ * Added Array#chunk/in_groups_of
52
+ * Added Array#pad
53
+
54
+ === 0.0.7 / 2009-04-08
55
+
56
+ * Added Hash#switchify
57
+ * Added String#switchify
58
+
59
+ === 0.0.6 / 2009-04-01
60
+
61
+ * Added String#from
62
+
63
+ === 0.0.5 / 2009-04-01
64
+
65
+ * Added Object#indifferent_hash [#3]
66
+ * Added String#ends_with?
67
+ * Added String#starts_with?
68
+ * Refactored String#singular?
69
+ * Removed Todo list, use lighthouse now
70
+
71
+ === 0.0.4 / 2009-03-25
72
+
73
+ * Added Object#metaclass
74
+ * Added Object#meta_eval
75
+ * Added Object#meta_def
76
+ * Added BasicObject for Ruby < 1.9
77
+ * Added n param to String#first / last
78
+ * Added byte conversion 1.byte, 6.kilobytes etc
79
+ * Added form param to #to_time
80
+ * Added Array#from / to
81
+ * Moved time related methods from Integer to Numeric
82
+
83
+ === 0.0.3 / 2009-03-25
84
+
85
+ * Added String#base64_encode
86
+ * Added String#base64_decode
87
+ * Added String#constantize
88
+ * Added String#camelize
89
+
90
+ === 0.0.2 / 2009-03-23
91
+
92
+ * Added Proc#yield_or_eval docs
93
+ * Renamed class/helpers to module/helpers
94
+
95
+ === 0.0.1 / 2009-03-23
96
+
97
+ * Initial release
@@ -0,0 +1,54 @@
1
+ History.rdoc
2
+ Manifest
3
+ README.rdoc
4
+ Rakefile
5
+ benchmarks/enumerable.rb
6
+ benchmarks/proc.rb
7
+ lib/rext.rb
8
+ lib/rext/all.rb
9
+ lib/rext/array.rb
10
+ lib/rext/array/helpers.rb
11
+ lib/rext/date.rb
12
+ lib/rext/date/helpers.rb
13
+ lib/rext/enumerable.rb
14
+ lib/rext/enumerable/helpers.rb
15
+ lib/rext/hash.rb
16
+ lib/rext/hash/helpers.rb
17
+ lib/rext/integer.rb
18
+ lib/rext/integer/helpers.rb
19
+ lib/rext/module.rb
20
+ lib/rext/module/helpers.rb
21
+ lib/rext/numeric.rb
22
+ lib/rext/numeric/bytes.rb
23
+ lib/rext/numeric/time.rb
24
+ lib/rext/object.rb
25
+ lib/rext/object/helpers.rb
26
+ lib/rext/object/metaclass.rb
27
+ lib/rext/proc.rb
28
+ lib/rext/proc/helpers.rb
29
+ lib/rext/string.rb
30
+ lib/rext/string/encode.rb
31
+ lib/rext/string/helpers.rb
32
+ lib/rext/symbol.rb
33
+ lib/rext/symbol/helpers.rb
34
+ lib/rext/time.rb
35
+ lib/rext/time/helpers.rb
36
+ lib/rext/version.rb
37
+ rext.gemspec
38
+ spec/array_spec.rb
39
+ spec/date_spec.rb
40
+ spec/enumerable_spec.rb
41
+ spec/hash_spec.rb
42
+ spec/integer_spec.rb
43
+ spec/module_spec.rb
44
+ spec/numeric_spec.rb
45
+ spec/object_spec.rb
46
+ spec/spec.opts
47
+ spec/spec_helper.rb
48
+ spec/string_spec.rb
49
+ spec/symbol_spec.rb
50
+ spec/time_spec.rb
51
+ tasks/benchmark.rake
52
+ tasks/docs.rake
53
+ tasks/gemspec.rake
54
+ tasks/spec.rake
@@ -0,0 +1,136 @@
1
+
2
+ = Rext
3
+
4
+ Rext is primarily used for the Evolution CMS project, and its dependencies,
5
+ however it is de-coupled and free to use within your own project.
6
+
7
+ == Motivations
8
+
9
+ * ActiveSupport does not contain everything we need, and is messy IMO
10
+ * Very easy to cherry-pick what you need
11
+ * Provide better documentation
12
+ * Attention to quality and performance
13
+ * Abstraction of loosely coupled helpers used throughout Evolution and its sub-gems
14
+
15
+ == Usage
16
+
17
+ require 'rext/all'
18
+
19
+ # or
20
+
21
+ require 'rext/string'
22
+ require 'rext/hash'
23
+ ...
24
+
25
+ # or
26
+
27
+ require 'rext/string/escape'
28
+ require 'rext/enumerable/every'
29
+ ...
30
+
31
+ == Extensions
32
+
33
+ Below are the methods currently provided by Rext.
34
+
35
+ * Object
36
+ - metaclass
37
+ - meta_def
38
+ - meta_eval
39
+ - indifferent_hash
40
+ - returning
41
+ - try
42
+
43
+ * String
44
+ - url_encode
45
+ - url_decode
46
+ - base64_encode
47
+ - base64_decode
48
+ - html_escape
49
+ - merge_word / add_class
50
+ - digitize
51
+ - camelize
52
+ - constantize
53
+ - wrap
54
+ - starts_with?
55
+ - ends_with?
56
+ - plural?
57
+ - singular?
58
+ - first
59
+ - last
60
+ - from
61
+ - file
62
+ - files
63
+ - path
64
+ - switchify
65
+ - word_frequency
66
+ - frequency_of_word
67
+ - to_md5
68
+ - to_sha512
69
+
70
+ * Integer
71
+ - ordanalize
72
+
73
+ * Numeric
74
+ - bytes, kilobytes, etc
75
+ - seconds, minutes, hours, days, ...
76
+ - to_seconds, to_minutes, to_hours, ...
77
+ - ago / before
78
+ - since / from_now
79
+
80
+ * Hash
81
+ - delete_at / extract!
82
+ - switchify
83
+
84
+ * Time
85
+ - in_words_since / in_words_since_now
86
+ - to_time
87
+
88
+ * Date
89
+ - to_time
90
+
91
+ * Module
92
+ - chainable
93
+ - extendable
94
+ - call_method
95
+
96
+ * Proc
97
+ - yield_or_eval
98
+
99
+ * Enumerable
100
+ - group_by
101
+ - includes_all?
102
+ - every
103
+
104
+ * Symbol
105
+ - to_proc
106
+
107
+ == Contrib
108
+
109
+ Feel free to fork Rext on github, or submit a ticket:
110
+ http://github.com/visionmedia/rext/issues
111
+
112
+ == License
113
+
114
+ (The MIT License)
115
+
116
+ Copyright (c) 2009 TJ Holowaychuk <tj@vision-media.ca>
117
+
118
+ Permission is hereby granted, free of charge, to any person obtaining
119
+ a copy of this software and associated documentation files (the
120
+ 'Software'), to deal in the Software without restriction, including
121
+ without limitation the rights to use, copy, modify, merge, publish,
122
+ distribute, sublicense, an d/or sell copies of the Software, and to
123
+ permit persons to whom the Software is furnished to do so, subject to
124
+ the following conditions:
125
+
126
+ The above copyright notice and this permission notice shall be
127
+ included in all copies or substantial portions of the Software.
128
+
129
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
130
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
131
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
132
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
133
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
134
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
135
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
136
+ ALINGS IN THE SOFTWARE.
@@ -0,0 +1,16 @@
1
+
2
+ $:.unshift 'lib'
3
+ require 'rext'
4
+ require 'rubygems'
5
+ require 'rake'
6
+ require 'echoe'
7
+
8
+ Echoe.new "rext", Rext::VERSION do |p|
9
+ p.author = "TJ Holowaychuk"
10
+ p.email = "tj@vision-media.ca"
11
+ p.summary = "Ruby extensions"
12
+ p.url = "http://github.com/visionmedia/rext"
13
+ p.runtime_dependencies = []
14
+ end
15
+
16
+ Dir['tasks/**/*.rake'].sort.each { |lib| load lib }
@@ -0,0 +1,14 @@
1
+
2
+ list = %w( just some random foo bar like cookies )
3
+
4
+ benchmark 'Enumerable#group_by', :times => $times do
5
+ report 'with block' do
6
+ list.group_by { |item| item.length }
7
+ end
8
+ report 'with evaled block' do
9
+ list.group_by { length }
10
+ end
11
+ report 'with proxy' do
12
+ list.group_by.length
13
+ end
14
+ end
@@ -0,0 +1,24 @@
1
+
2
+ def yield_or_eval_test &block
3
+ block.yield_or_eval 'foo'
4
+ end
5
+
6
+ def manual &block
7
+ foo = 'foo'
8
+ if block.arity > 0
9
+ yield foo
10
+ else
11
+ foo.instance_eval &block
12
+ end
13
+ end
14
+
15
+ benchmark 'Proc', :times => $times do
16
+ report '#yield_or_eval' do
17
+ yield_or_eval_test { length }
18
+ yield_or_eval_test { |foo| foo.length }
19
+ end
20
+ report 'manual arity check' do
21
+ manual { length }
22
+ manual { |foo| foo.length }
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ #--
2
+ # Copyright (c) 2009 TJ Holowaychuk <tj@vision-media.ca>
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ #++
23
+
24
+ require 'rext/version'
@@ -0,0 +1,18 @@
1
+
2
+ #--
3
+ # Load all extensions.
4
+ #++
5
+
6
+ require 'rext/version'
7
+ require 'rext/symbol'
8
+ require 'rext/object'
9
+ require 'rext/module'
10
+ require 'rext/proc'
11
+ require 'rext/enumerable'
12
+ require 'rext/array'
13
+ require 'rext/hash'
14
+ require 'rext/numeric'
15
+ require 'rext/integer'
16
+ require 'rext/string'
17
+ require 'rext/date'
18
+ require 'rext/time'
@@ -0,0 +1,6 @@
1
+
2
+ #--
3
+ # Load Array specific rext extensions.
4
+ #++
5
+
6
+ require 'rext/array/helpers'
@@ -0,0 +1,64 @@
1
+
2
+ require 'enumerator'
3
+
4
+ class Array
5
+
6
+ ##
7
+ # Return array of elements after +position+.
8
+
9
+ def from position
10
+ self[position..-1]
11
+ end
12
+
13
+ ##
14
+ # Return array of elements up to +position+.
15
+
16
+ def to position
17
+ self[0..position]
18
+ end
19
+
20
+ ##
21
+ # Pad array with expected length +n+, and +pad_with+ an
22
+ # optional object or nil.
23
+ #
24
+ # === Examples
25
+ #
26
+ # [1,2].pad(4) # => [1,2,nil,nil]
27
+ # [1,2].pad(4) # => [1,2,'x','x']
28
+ # [1,2].pad(2) # => [1,2]
29
+ #
30
+
31
+ def pad n, pad_with = nil
32
+ fill pad_with, length, n - length
33
+ end
34
+
35
+ ##
36
+ # Split an array into chunks of length +n+. Optionally you
37
+ # may +pad_with+ an object to retain a uniform length per chunk.
38
+ #
39
+ # === Examples
40
+ #
41
+ # [1,2,3].chunk(2) # => [[1,2], [3, nil]]
42
+ # [1,2,3].chunk(2, 'x') # => [[1,2], [3, 'x']]
43
+ # [1,2,3].chunk(2, false) # => [[1,2], [3]]
44
+ # [1,2,3].in_groups_of(2) do |chunk|
45
+ # # Do something
46
+ # end
47
+ #
48
+ # === See
49
+ #
50
+ # * Array#pad
51
+ #
52
+
53
+ def chunk n, pad_with = nil, &block
54
+ returning [] do |chunks|
55
+ each_slice n do |chunk|
56
+ chunk.pad n, pad_with unless pad_with == false
57
+ yield chunk if block
58
+ chunks << chunk
59
+ end
60
+ end
61
+ end
62
+ alias :in_groups_of :chunk
63
+
64
+ end