ruby-nuggets 0.9.9 → 1.0.0

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 (244) hide show
  1. checksums.yaml +4 -4
  2. metadata +20 -324
  3. data/COPYING +0 -663
  4. data/ChangeLog +0 -7
  5. data/README +0 -62
  6. data/Rakefile +0 -47
  7. data/lib/nuggets.rb +0 -73
  8. data/lib/nuggets/all.rb +0 -36
  9. data/lib/nuggets/all_mixins.rb +0 -34
  10. data/lib/nuggets/ansicolor2css.rb +0 -125
  11. data/lib/nuggets/argv/option.rb +0 -3
  12. data/lib/nuggets/argv/option_mixin.rb +0 -85
  13. data/lib/nuggets/array/boost.rb +0 -5
  14. data/lib/nuggets/array/boost_mixin.rb +0 -78
  15. data/lib/nuggets/array/combination.rb +0 -63
  16. data/lib/nuggets/array/correlation.rb +0 -5
  17. data/lib/nuggets/array/correlation_mixin.rb +0 -64
  18. data/lib/nuggets/array/flatten_once.rb +0 -57
  19. data/lib/nuggets/array/flush.rb +0 -5
  20. data/lib/nuggets/array/flush_mixin.rb +0 -47
  21. data/lib/nuggets/array/format.rb +0 -66
  22. data/lib/nuggets/array/hashify.rb +0 -5
  23. data/lib/nuggets/array/hashify_mixin.rb +0 -48
  24. data/lib/nuggets/array/histogram.rb +0 -5
  25. data/lib/nuggets/array/histogram_mixin.rb +0 -170
  26. data/lib/nuggets/array/in_order.rb +0 -51
  27. data/lib/nuggets/array/limit.rb +0 -5
  28. data/lib/nuggets/array/limit_mixin.rb +0 -57
  29. data/lib/nuggets/array/mean.rb +0 -5
  30. data/lib/nuggets/array/mean_mixin.rb +0 -203
  31. data/lib/nuggets/array/median.rb +0 -5
  32. data/lib/nuggets/array/median_mixin.rb +0 -74
  33. data/lib/nuggets/array/mode.rb +0 -5
  34. data/lib/nuggets/array/mode_mixin.rb +0 -70
  35. data/lib/nuggets/array/monotone.rb +0 -84
  36. data/lib/nuggets/array/only.rb +0 -42
  37. data/lib/nuggets/array/rand.rb +0 -45
  38. data/lib/nuggets/array/regression.rb +0 -5
  39. data/lib/nuggets/array/regression_mixin.rb +0 -150
  40. data/lib/nuggets/array/runiq.rb +0 -5
  41. data/lib/nuggets/array/runiq_mixin.rb +0 -53
  42. data/lib/nuggets/array/shuffle.rb +0 -133
  43. data/lib/nuggets/array/standard_deviation.rb +0 -5
  44. data/lib/nuggets/array/standard_deviation_mixin.rb +0 -51
  45. data/lib/nuggets/array/to_hash.rb +0 -65
  46. data/lib/nuggets/array/variance.rb +0 -5
  47. data/lib/nuggets/array/variance_mixin.rb +0 -82
  48. data/lib/nuggets/cli.rb +0 -8
  49. data/lib/nuggets/content_type.rb +0 -98
  50. data/lib/nuggets/dotted_decimal.rb +0 -60
  51. data/lib/nuggets/enumerable/agrep.rb +0 -80
  52. data/lib/nuggets/enumerable/all_any_extended.rb +0 -67
  53. data/lib/nuggets/enumerable/minmax.rb +0 -103
  54. data/lib/nuggets/env/set.rb +0 -3
  55. data/lib/nuggets/env/set_mixin.rb +0 -68
  56. data/lib/nuggets/env/user_encoding.rb +0 -3
  57. data/lib/nuggets/env/user_encoding_mixin.rb +0 -55
  58. data/lib/nuggets/env/user_home.rb +0 -3
  59. data/lib/nuggets/env/user_home_mixin.rb +0 -57
  60. data/lib/nuggets/file/ext.rb +0 -5
  61. data/lib/nuggets/file/ext_mixin.rb +0 -88
  62. data/lib/nuggets/file/replace.rb +0 -5
  63. data/lib/nuggets/file/replace_mixin.rb +0 -56
  64. data/lib/nuggets/file/sub.rb +0 -5
  65. data/lib/nuggets/file/sub_mixin.rb +0 -96
  66. data/lib/nuggets/file/which.rb +0 -5
  67. data/lib/nuggets/file/which_mixin.rb +0 -73
  68. data/lib/nuggets/hash/at.rb +0 -69
  69. data/lib/nuggets/hash/deep_fetch.rb +0 -5
  70. data/lib/nuggets/hash/deep_fetch_mixin.rb +0 -75
  71. data/lib/nuggets/hash/deep_merge.rb +0 -5
  72. data/lib/nuggets/hash/deep_merge_mixin.rb +0 -54
  73. data/lib/nuggets/hash/idmap.rb +0 -5
  74. data/lib/nuggets/hash/idmap_mixin.rb +0 -42
  75. data/lib/nuggets/hash/in_order.rb +0 -44
  76. data/lib/nuggets/hash/insert.rb +0 -54
  77. data/lib/nuggets/hash/nest.rb +0 -5
  78. data/lib/nuggets/hash/nest_mixin.rb +0 -79
  79. data/lib/nuggets/hash/only.rb +0 -53
  80. data/lib/nuggets/hash/seen.rb +0 -5
  81. data/lib/nuggets/hash/seen_mixin.rb +0 -59
  82. data/lib/nuggets/hash/unroll.rb +0 -5
  83. data/lib/nuggets/hash/unroll_mixin.rb +0 -89
  84. data/lib/nuggets/hash/zip.rb +0 -5
  85. data/lib/nuggets/hash/zip_mixin.rb +0 -160
  86. data/lib/nuggets/i18n.rb +0 -156
  87. data/lib/nuggets/integer/factorial.rb +0 -57
  88. data/lib/nuggets/integer/length.rb +0 -5
  89. data/lib/nuggets/integer/length_mixin.rb +0 -50
  90. data/lib/nuggets/integer/map.rb +0 -5
  91. data/lib/nuggets/integer/map_mixin.rb +0 -43
  92. data/lib/nuggets/integer/to_binary_s.rb +0 -39
  93. data/lib/nuggets/io/agrep.rb +0 -44
  94. data/lib/nuggets/io/interact.rb +0 -5
  95. data/lib/nuggets/io/interact_mixin.rb +0 -160
  96. data/lib/nuggets/io/modes.rb +0 -122
  97. data/lib/nuggets/io/null.rb +0 -5
  98. data/lib/nuggets/io/null_mixin.rb +0 -41
  99. data/lib/nuggets/io/redirect.rb +0 -5
  100. data/lib/nuggets/io/redirect_mixin.rb +0 -51
  101. data/lib/nuggets/lazy_attr.rb +0 -45
  102. data/lib/nuggets/log_parser.rb +0 -71
  103. data/lib/nuggets/log_parser/apache.rb +0 -102
  104. data/lib/nuggets/log_parser/rails.rb +0 -220
  105. data/lib/nuggets/lsi.rb +0 -8
  106. data/lib/nuggets/midos.rb +0 -8
  107. data/lib/nuggets/mysql.rb +0 -8
  108. data/lib/nuggets/net/success.rb +0 -60
  109. data/lib/nuggets/numeric/between.rb +0 -2
  110. data/lib/nuggets/numeric/duration.rb +0 -101
  111. data/lib/nuggets/numeric/limit.rb +0 -63
  112. data/lib/nuggets/numeric/signum.rb +0 -53
  113. data/lib/nuggets/numeric/to_multiple.rb +0 -62
  114. data/lib/nuggets/object/blank.rb +0 -20
  115. data/lib/nuggets/object/blank_mixin.rb +0 -100
  116. data/lib/nuggets/object/boolean.rb +0 -5
  117. data/lib/nuggets/object/boolean_mixin.rb +0 -62
  118. data/lib/nuggets/object/eigenclass.rb +0 -2
  119. data/lib/nuggets/object/ghost_class.rb +0 -2
  120. data/lib/nuggets/object/metaclass.rb +0 -2
  121. data/lib/nuggets/object/msend.rb +0 -5
  122. data/lib/nuggets/object/msend_mixin.rb +0 -44
  123. data/lib/nuggets/object/silence.rb +0 -5
  124. data/lib/nuggets/object/silence_mixin.rb +0 -45
  125. data/lib/nuggets/object/singleton_class.rb +0 -5
  126. data/lib/nuggets/object/singleton_class_mixin.rb +0 -96
  127. data/lib/nuggets/object/uniclass.rb +0 -2
  128. data/lib/nuggets/object/virtual_class.rb +0 -2
  129. data/lib/nuggets/pluggable.rb +0 -92
  130. data/lib/nuggets/proc/bind.rb +0 -5
  131. data/lib/nuggets/proc/bind_mixin.rb +0 -52
  132. data/lib/nuggets/range/quantile.rb +0 -5
  133. data/lib/nuggets/range/quantile_mixin.rb +0 -43
  134. data/lib/nuggets/rdf/compression.rb +0 -6
  135. data/lib/nuggets/rdf/prefix.rb +0 -6
  136. data/lib/nuggets/rdf/turtle.rb +0 -8
  137. data/lib/nuggets/rdf/turtle/reader.rb +0 -6
  138. data/lib/nuggets/rdf/uri.rb +0 -6
  139. data/lib/nuggets/ruby.rb +0 -236
  140. data/lib/nuggets/statistics.rb +0 -12
  141. data/lib/nuggets/statistics_mixins.rb +0 -12
  142. data/lib/nuggets/string/camelscore.rb +0 -5
  143. data/lib/nuggets/string/camelscore_mixin.rb +0 -117
  144. data/lib/nuggets/string/capitalize_first.rb +0 -47
  145. data/lib/nuggets/string/case.rb +0 -82
  146. data/lib/nuggets/string/evaluate.rb +0 -5
  147. data/lib/nuggets/string/evaluate_mixin.rb +0 -48
  148. data/lib/nuggets/string/msub.rb +0 -85
  149. data/lib/nuggets/string/nsub.rb +0 -66
  150. data/lib/nuggets/string/sub_with_md.rb +0 -112
  151. data/lib/nuggets/string/wc.rb +0 -5
  152. data/lib/nuggets/string/wc_mixin.rb +0 -96
  153. data/lib/nuggets/string/word_wrap.rb +0 -77
  154. data/lib/nuggets/string/xor.rb +0 -5
  155. data/lib/nuggets/string/xor_mixin.rb +0 -60
  156. data/lib/nuggets/tempfile/open.rb +0 -58
  157. data/lib/nuggets/uri/content_type.rb +0 -5
  158. data/lib/nuggets/uri/content_type_mixin.rb +0 -48
  159. data/lib/nuggets/uri/exist.rb +0 -5
  160. data/lib/nuggets/uri/exist_mixin.rb +0 -57
  161. data/lib/nuggets/uri/redirect.rb +0 -5
  162. data/lib/nuggets/uri/redirect_mixin.rb +0 -102
  163. data/lib/nuggets/util/ansicolor2css.rb +0 -4
  164. data/lib/nuggets/util/cli.rb +0 -4
  165. data/lib/nuggets/util/content_type.rb +0 -4
  166. data/lib/nuggets/util/dotted_decimal.rb +0 -3
  167. data/lib/nuggets/util/i18n.rb +0 -4
  168. data/lib/nuggets/util/lazy_attr.rb +0 -4
  169. data/lib/nuggets/util/log_parser.rb +0 -4
  170. data/lib/nuggets/util/log_parser/apache.rb +0 -4
  171. data/lib/nuggets/util/log_parser/rails.rb +0 -4
  172. data/lib/nuggets/util/midos.rb +0 -4
  173. data/lib/nuggets/util/mysql.rb +0 -4
  174. data/lib/nuggets/util/pluggable.rb +0 -4
  175. data/lib/nuggets/util/ruby.rb +0 -4
  176. data/lib/nuggets/version.rb +0 -27
  177. data/spec/nuggets/array/boost_spec.rb +0 -50
  178. data/spec/nuggets/array/combination_spec.rb +0 -25
  179. data/spec/nuggets/array/correlation_spec.rb +0 -81
  180. data/spec/nuggets/array/flatten_once_spec.rb +0 -16
  181. data/spec/nuggets/array/flush_spec.rb +0 -43
  182. data/spec/nuggets/array/format_spec.rb +0 -52
  183. data/spec/nuggets/array/hashify_spec.rb +0 -41
  184. data/spec/nuggets/array/histogram_spec.rb +0 -87
  185. data/spec/nuggets/array/in_order_spec.rb +0 -13
  186. data/spec/nuggets/array/limit_spec.rb +0 -62
  187. data/spec/nuggets/array/mean_spec.rb +0 -203
  188. data/spec/nuggets/array/median_spec.rb +0 -77
  189. data/spec/nuggets/array/mode_spec.rb +0 -57
  190. data/spec/nuggets/array/monotone_spec.rb +0 -30
  191. data/spec/nuggets/array/only_spec.rb +0 -26
  192. data/spec/nuggets/array/regression_spec.rb +0 -54
  193. data/spec/nuggets/array/runiq_spec.rb +0 -25
  194. data/spec/nuggets/array/standard_deviation_spec.rb +0 -33
  195. data/spec/nuggets/array/to_hash_spec.rb +0 -28
  196. data/spec/nuggets/array/variance_spec.rb +0 -106
  197. data/spec/nuggets/dotted_decimal_spec.rb +0 -27
  198. data/spec/nuggets/enumerable/all_any_extended_spec.rb +0 -31
  199. data/spec/nuggets/enumerable/minmax_spec.rb +0 -21
  200. data/spec/nuggets/env/set_spec.rb +0 -29
  201. data/spec/nuggets/env/user_encoding_spec.rb +0 -38
  202. data/spec/nuggets/env/user_home_spec.rb +0 -42
  203. data/spec/nuggets/file/ext_spec.rb +0 -38
  204. data/spec/nuggets/file/replace_spec.rb +0 -95
  205. data/spec/nuggets/file/sub_spec.rb +0 -149
  206. data/spec/nuggets/file/which_spec.rb +0 -22
  207. data/spec/nuggets/hash/at_spec.rb +0 -19
  208. data/spec/nuggets/hash/deep_fetch_spec.rb +0 -159
  209. data/spec/nuggets/hash/deep_merge_spec.rb +0 -78
  210. data/spec/nuggets/hash/in_order_spec.rb +0 -12
  211. data/spec/nuggets/hash/insert_spec.rb +0 -13
  212. data/spec/nuggets/hash/nest_spec.rb +0 -102
  213. data/spec/nuggets/hash/only_spec.rb +0 -29
  214. data/spec/nuggets/hash/seen_spec.rb +0 -36
  215. data/spec/nuggets/hash/unroll_spec.rb +0 -68
  216. data/spec/nuggets/i18n_spec.rb +0 -13
  217. data/spec/nuggets/integer/factorial_spec.rb +0 -10
  218. data/spec/nuggets/integer/length_spec.rb +0 -18
  219. data/spec/nuggets/integer/map_spec.rb +0 -19
  220. data/spec/nuggets/integer/to_binary_s_spec.rb +0 -19
  221. data/spec/nuggets/numeric/duration_spec.rb +0 -25
  222. data/spec/nuggets/numeric/limit_spec.rb +0 -16
  223. data/spec/nuggets/numeric/signum_spec.rb +0 -16
  224. data/spec/nuggets/numeric/to_multiple_spec.rb +0 -16
  225. data/spec/nuggets/object/blank_spec.rb +0 -34
  226. data/spec/nuggets/object/boolean_spec.rb +0 -23
  227. data/spec/nuggets/object/msend_spec.rb +0 -25
  228. data/spec/nuggets/object/silence_spec.rb +0 -36
  229. data/spec/nuggets/object/singleton_class_spec.rb +0 -51
  230. data/spec/nuggets/proc/bind_spec.rb +0 -28
  231. data/spec/nuggets/range/quantile_spec.rb +0 -33
  232. data/spec/nuggets/string/camelscore_spec.rb +0 -114
  233. data/spec/nuggets/string/capitalize_first_spec.rb +0 -13
  234. data/spec/nuggets/string/case_spec.rb +0 -31
  235. data/spec/nuggets/string/evaluate_spec.rb +0 -24
  236. data/spec/nuggets/string/msub_spec.rb +0 -20
  237. data/spec/nuggets/string/nsub_spec.rb +0 -13
  238. data/spec/nuggets/string/sub_with_md_spec.rb +0 -25
  239. data/spec/nuggets/string/wc_spec.rb +0 -73
  240. data/spec/nuggets/string/word_wrap_spec.rb +0 -81
  241. data/spec/nuggets/string/xor_spec.rb +0 -57
  242. data/spec/nuggets/uri/content_type_spec.rb +0 -42
  243. data/spec/nuggets/uri/exist_spec.rb +0 -49
  244. data/spec/spec_helper.rb +0 -36
@@ -1,5 +0,0 @@
1
- require 'nuggets/hash/unroll_mixin'
2
-
3
- class Hash
4
- include Nuggets::Hash::UnrollMixin
5
- end
@@ -1,89 +0,0 @@
1
- #--
2
- ###############################################################################
3
- # #
4
- # A component of ruby-nuggets, some extensions to the Ruby programming #
5
- # language. #
6
- # #
7
- # Copyright (C) 2007-2011 Jens Wille #
8
- # #
9
- # Authors: #
10
- # Jens Wille <jens.wille@gmail.com> #
11
- # #
12
- # ruby-nuggets is free software; you can redistribute it and/or modify it #
13
- # under the terms of the GNU Affero General Public License as published by #
14
- # the Free Software Foundation; either version 3 of the License, or (at your #
15
- # option) any later version. #
16
- # #
17
- # ruby-nuggets is distributed in the hope that it will be useful, but WITHOUT #
18
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
19
- # FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License #
20
- # for more details. #
21
- # #
22
- # You should have received a copy of the GNU Affero General Public License #
23
- # along with ruby-nuggets. If not, see <http://www.gnu.org/licenses/>. #
24
- # #
25
- ###############################################################################
26
- #++
27
-
28
- module Nuggets
29
- class Hash
30
- module UnrollMixin
31
-
32
- # call-seq:
33
- # hash.unroll(*value_keys) => anArray
34
- # hash.unroll(*value_keys, :sort_by => ...) => anArray
35
- # hash.unroll(*value_keys) { |value_hash| ... } => anArray
36
- #
37
- # "Unrolls" a nested hash, so that each path through _hash_ results in a
38
- # row that is, e.g., suitable for use with CSV.
39
- #
40
- # Note that from the final hash ("value hash") only the values are used,
41
- # namely, if +value_keys+ are given, the values at those keys are returned.
42
- # If a block is given, the +value_hash+ is passed to that block for any
43
- # additional processing or sanitization.
44
- #
45
- # If +sort_by+ is given, all hashes are passed through that block for
46
- # sorting before being put into the result array.
47
- #
48
- # Examples:
49
- #
50
- # { :foo => { :bar => { :a => { :x => 1, :y => 2 }, :b => { :x => 0, :y => 3 } } } }.unroll
51
- # #=> [[:foo, :bar, :b, 3, 0], [:foo, :bar, :a, 2, 1]]
52
- #
53
- # { :foo => { :bar => { :a => { :x => 1, :y => 2 }, :b => { :x => 0, :y => 3 } } } }.unroll(:sort_by => :to_s)
54
- # #=> [[:foo, :bar, :a, 1, 2], [:foo, :bar, :b, 0, 3]]
55
- #
56
- # { :foo => { :bar => { :a => { :x => 1, :y => 2 }, :b => { :x => 0, :y => 3 } } } }.unroll { |data| data[:x] = nil; data[:y] *= 2 }
57
- # #=> [[:foo, :bar, :b, 6, nil], [:foo, :bar, :a, 4, nil]]
58
- def unroll(*value_keys, &block)
59
- args = value_keys.dup
60
- options = value_keys.last.is_a?(::Hash) ? value_keys.pop : {}
61
-
62
- sort_proc = if options.key?(:sort_by)
63
- lambda { sort_by(&options[:sort_by]) }
64
- elsif options.key?(:sort)
65
- options[:sort] == true ? lambda { sort } : lambda { sort(&options[:sort]) }
66
- end
67
-
68
- rows = []
69
-
70
- if values.first.is_a?(self.class) # if any is, then all are
71
- (sort_proc ? sort_proc.call : self).each { |key, value|
72
- value.unroll(*args, &block).each { |row| rows << [key, *row] }
73
- }
74
- else
75
- block[self] if block
76
-
77
- rows << if value_keys.empty?
78
- sort_proc ? sort_proc.call.map { |key, value| value } : values
79
- else
80
- values_at(*value_keys)
81
- end
82
- end
83
-
84
- rows
85
- end
86
-
87
- end
88
- end
89
- end
@@ -1,5 +0,0 @@
1
- require 'nuggets/hash/zip_mixin'
2
-
3
- class Hash
4
- extend Nuggets::Hash::ZipMixin
5
- end
@@ -1,160 +0,0 @@
1
- #--
2
- ###############################################################################
3
- # #
4
- # A component of ruby-nuggets, some extensions to the Ruby programming #
5
- # language. #
6
- # #
7
- # Copyright (C) 2007-2014 Jens Wille #
8
- # #
9
- # Authors: #
10
- # Jens Wille <jens.wille@gmail.com> #
11
- # #
12
- # ruby-nuggets is free software; you can redistribute it and/or modify it #
13
- # under the terms of the GNU Affero General Public License as published by #
14
- # the Free Software Foundation; either version 3 of the License, or (at your #
15
- # option) any later version. #
16
- # #
17
- # ruby-nuggets is distributed in the hope that it will be useful, but WITHOUT #
18
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
19
- # FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License #
20
- # for more details. #
21
- # #
22
- # You should have received a copy of the GNU Affero General Public License #
23
- # along with ruby-nuggets. If not, see <http://www.gnu.org/licenses/>. #
24
- # #
25
- ###############################################################################
26
- #++
27
-
28
- require 'zlib'
29
-
30
- module Nuggets
31
- class Hash
32
- module ZipMixin
33
-
34
- def zip(*args, &block)
35
- ZipHash.new(*args, &block)
36
- end
37
-
38
- def zipval(*args, &block)
39
- ZipValHash.new(*args, &block)
40
- end
41
-
42
- def zipkey(*args, &block)
43
- ZipKeyHash.new(*args, &block)
44
- end
45
-
46
- class ZipHash < ::Hash
47
-
48
- def [](key)
49
- unzipval(super(zipkey(key)))
50
- end
51
-
52
- def []=(key, value)
53
- super(zipkey(key), zipval(value))
54
- end
55
-
56
- def fetch(key, *args)
57
- unzipval(super(zipkey(key), *args))
58
- end
59
-
60
- def store(key, value)
61
- super(zipkey(key), zipval(value))
62
- end
63
-
64
- private
65
-
66
- def zipval(value)
67
- value.is_a?(ZipVal) ? value : ZipVal.new(value)
68
- end
69
-
70
- def unzipval(value)
71
- value.is_a?(ZipVal) ? value.to_s : value
72
- end
73
-
74
- def zipkey(key)
75
- key.is_a?(ZipKey) ? key : ZipKey.new(key)
76
- end
77
-
78
- def unzipkey(key)
79
- key.is_a?(ZipKey) ? key.to_s : key
80
- end
81
-
82
- end
83
-
84
- class ZipValHash < ZipHash
85
-
86
- private
87
-
88
- def zipkey(key)
89
- key
90
- end
91
-
92
- def unzipkey(key)
93
- key
94
- end
95
-
96
- end
97
-
98
- class ZipKeyHash < ZipHash
99
-
100
- private
101
-
102
- def zipval(value)
103
- value
104
- end
105
-
106
- def unzipval(value)
107
- value
108
- end
109
-
110
- end
111
-
112
- class ZipVal
113
-
114
- include Comparable
115
-
116
- def initialize(value)
117
- @value = zip(value)
118
- end
119
-
120
- def <=>(other)
121
- to_s <=> other.to_s if self.class.equal?(other.class)
122
- end
123
-
124
- def to_s
125
- unzip(@value)
126
- end
127
-
128
- def inspect
129
- !((s = to_s).length > 64 || s.include?($/)) ? to_s :
130
- '#<%s:0x%x length=%p>' % [self.class, object_id, @value.length]
131
- end
132
-
133
- def hash
134
- to_s.hash
135
- end
136
-
137
- def eql?(other)
138
- (self <=> other) == 0
139
- end
140
-
141
- alias_method :==, :eql?
142
-
143
- private
144
-
145
- def zip(string)
146
- Zlib::Deflate.deflate(string)
147
- end
148
-
149
- def unzip(string)
150
- Zlib::Inflate.inflate(string)
151
- end
152
-
153
- end
154
-
155
- class ZipKey < ZipVal
156
- end
157
-
158
- end
159
- end
160
- end
@@ -1,156 +0,0 @@
1
- # encoding: utf-8
2
-
3
- #--
4
- ###############################################################################
5
- # #
6
- # A component of ruby-nuggets, some extensions to the Ruby programming #
7
- # language. #
8
- # #
9
- # Copyright (C) 2007-2011 Jens Wille #
10
- # #
11
- # Authors: #
12
- # Jens Wille <jens.wille@gmail.com> #
13
- # #
14
- # ruby-nuggets is free software; you can redistribute it and/or modify it #
15
- # under the terms of the GNU Affero General Public License as published by #
16
- # the Free Software Foundation; either version 3 of the License, or (at your #
17
- # option) any later version. #
18
- # #
19
- # ruby-nuggets is distributed in the hope that it will be useful, but WITHOUT #
20
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
21
- # FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License #
22
- # for more details. #
23
- # #
24
- # You should have received a copy of the GNU Affero General Public License #
25
- # along with ruby-nuggets. If not, see <http://www.gnu.org/licenses/>. #
26
- # #
27
- ###############################################################################
28
- #++
29
-
30
- module Nuggets
31
- module I18n
32
-
33
- DIACRITICS = {
34
- 'À' => 'A', # LATIN CAPITAL LETTER A WITH GRAVE
35
- 'Á' => 'A', # LATIN CAPITAL LETTER A WITH ACUTE
36
- 'Â' => 'A', # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
37
- 'Ã' => 'A', # LATIN CAPITAL LETTER A WITH TILDE
38
- 'Ä' => 'AE', # LATIN CAPITAL LETTER A WITH DIAERESIS
39
- 'Å' => 'A', # LATIN CAPITAL LETTER A WITH RING ABOVE
40
- 'Æ' => 'AE', # LATIN CAPITAL LETTER AE
41
- 'Ç' => 'C', # LATIN CAPITAL LETTER C WITH CEDILLA
42
- 'È' => 'E', # LATIN CAPITAL LETTER E WITH GRAVE
43
- 'É' => 'E', # LATIN CAPITAL LETTER E WITH ACUTE
44
- 'Ê' => 'E', # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
45
- 'Ë' => 'E', # LATIN CAPITAL LETTER E WITH DIAERESIS
46
- 'Ì' => 'I', # LATIN CAPITAL LETTER I WITH GRAVE
47
- 'Í' => 'I', # LATIN CAPITAL LETTER I WITH ACUTE
48
- 'Î' => 'I', # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
49
- 'Ï' => 'I', # LATIN CAPITAL LETTER I WITH DIAERESIS
50
- 'Ð' => 'DH', # LATIN CAPITAL LETTER ETH
51
- 'Ñ' => 'N', # LATIN CAPITAL LETTER N WITH TILDE
52
- 'Ò' => 'O', # LATIN CAPITAL LETTER O WITH GRAVE
53
- 'Ó' => 'O', # LATIN CAPITAL LETTER O WITH ACUTE
54
- 'Ô' => 'O', # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
55
- 'Õ' => 'O', # LATIN CAPITAL LETTER O WITH TILDE
56
- 'Ö' => 'OE', # LATIN CAPITAL LETTER O WITH DIAERESIS
57
- 'Ø' => 'O', # LATIN CAPITAL LETTER O WITH STROKE
58
- 'Ù' => 'U', # LATIN CAPITAL LETTER U WITH GRAVE
59
- 'Ú' => 'U', # LATIN CAPITAL LETTER U WITH ACUTE
60
- 'Û' => 'U', # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
61
- 'Ü' => 'UE', # LATIN CAPITAL LETTER U WITH DIAERESIS
62
- 'Ý' => 'Y', # LATIN CAPITAL LETTER Y WITH ACUTE
63
- 'Þ' => 'TH', # LATIN CAPITAL LETTER THORN
64
- 'ß' => 'ss', # LATIN SMALL LETTER SHARP S
65
- 'à' => 'a', # LATIN SMALL LETTER A WITH GRAVE
66
- 'á' => 'a', # LATIN SMALL LETTER A WITH ACUTE
67
- 'â' => 'a', # LATIN SMALL LETTER A WITH CIRCUMFLEX
68
- 'ã' => 'a', # LATIN SMALL LETTER A WITH TILDE
69
- 'ä' => 'ae', # LATIN SMALL LETTER A WITH DIAERESIS
70
- 'å' => 'a', # LATIN SMALL LETTER A WITH RING ABOVE
71
- 'æ' => 'ae', # LATIN SMALL LETTER AE
72
- 'ç' => 'c', # LATIN SMALL LETTER C WITH CEDILLA
73
- 'è' => 'e', # LATIN SMALL LETTER E WITH GRAVE
74
- 'é' => 'e', # LATIN SMALL LETTER E WITH ACUTE
75
- 'ê' => 'e', # LATIN SMALL LETTER E WITH CIRCUMFLEX
76
- 'ë' => 'e', # LATIN SMALL LETTER E WITH DIAERESIS
77
- 'ì' => 'i', # LATIN SMALL LETTER I WITH GRAVE
78
- 'í' => 'i', # LATIN SMALL LETTER I WITH ACUTE
79
- 'î' => 'i', # LATIN SMALL LETTER I WITH CIRCUMFLEX
80
- 'ï' => 'i', # LATIN SMALL LETTER I WITH DIAERESIS
81
- 'ð' => 'dh', # LATIN SMALL LETTER ETH
82
- 'ñ' => 'n', # LATIN SMALL LETTER N WITH TILDE
83
- 'ò' => 'o', # LATIN SMALL LETTER O WITH GRAVE
84
- 'ó' => 'o', # LATIN SMALL LETTER O WITH ACUTE
85
- 'ô' => 'o', # LATIN SMALL LETTER O WITH CIRCUMFLEX
86
- 'õ' => 'o', # LATIN SMALL LETTER O WITH TILDE
87
- 'ö' => 'oe', # LATIN SMALL LETTER O WITH DIAERESIS
88
- 'ø' => 'o', # LATIN SMALL LETTER O WITH STROKE
89
- 'ù' => 'u', # LATIN SMALL LETTER U WITH GRAVE
90
- 'ú' => 'u', # LATIN SMALL LETTER U WITH ACUTE
91
- 'û' => 'u', # LATIN SMALL LETTER U WITH CIRCUMFLEX
92
- 'ü' => 'ue', # LATIN SMALL LETTER U WITH DIAERESIS
93
- 'ý' => 'y', # LATIN SMALL LETTER Y WITH ACUTE
94
- 'þ' => 'th', # LATIN SMALL LETTER THORN
95
- 'ÿ' => 'y' # LATIN SMALL LETTER Y WITH DIAERESIS
96
- }
97
-
98
- def self.args_for_map_diacritics
99
- @args_for_map_diacritics ||= begin
100
- map = ::Hash.new { |h, k| h[k] = [] }
101
-
102
- DIACRITICS.each { |a| a.each { |i| map[i].concat(a) } }
103
- map.each { |k, v| v.uniq!; map[k] = "(#{::Regexp.union(*v).source})" }
104
-
105
- [::Regexp.union(*map.keys.sort_by { |k| -k.length }), map.method(:[])]
106
- end
107
- end
108
-
109
- end
110
- end
111
-
112
- class String
113
-
114
- # call-seq:
115
- # str.replace_diacritics => new_str
116
- #
117
- # Substitutes any diacritics in _str_ with their replacements as per
118
- # Nuggets::I18n::DIACRITICS.
119
- def replace_diacritics
120
- (_dup = dup).replace_diacritics! || _dup
121
- end
122
-
123
- # call-seq:
124
- # str.replace_diacritics! => str or +nil+
125
- #
126
- # Destructive version of #replace_diacritics.
127
- def replace_diacritics!
128
- diacritics = ::Nuggets::I18n::DIACRITICS
129
-
130
- gsub!(/#{::Regexp.union(*diacritics.keys)}/) { |m|
131
- s = diacritics[m]
132
-
133
- # Try to adjust case:
134
- # 'Äh' => 'AEh' => 'Aeh'
135
- #
136
- # But:
137
- # 'SÖS' => 'SOES' (not 'SOeS'!)
138
- if s.length > 1
139
- t = $'[0, 1]
140
- s[1..-1] = s[1..-1].downcase if t == t.downcase
141
- end
142
-
143
- s
144
- }
145
- end
146
-
147
- def map_diacritics
148
- (_dup = dup).map_diacritics! || _dup
149
- end
150
-
151
- def map_diacritics!
152
- re, block = ::Nuggets::I18n.args_for_map_diacritics
153
- gsub!(re, &block)
154
- end
155
-
156
- end
@@ -1,57 +0,0 @@
1
- #--
2
- ###############################################################################
3
- # #
4
- # A component of ruby-nuggets, some extensions to the Ruby programming #
5
- # language. #
6
- # #
7
- # Copyright (C) 2007-2011 Jens Wille #
8
- # #
9
- # Authors: #
10
- # Jens Wille <jens.wille@gmail.com> #
11
- # #
12
- # ruby-nuggets is free software; you can redistribute it and/or modify it #
13
- # under the terms of the GNU Affero General Public License as published by #
14
- # the Free Software Foundation; either version 3 of the License, or (at your #
15
- # option) any later version. #
16
- # #
17
- # ruby-nuggets is distributed in the hope that it will be useful, but WITHOUT #
18
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
19
- # FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License #
20
- # for more details. #
21
- # #
22
- # You should have received a copy of the GNU Affero General Public License #
23
- # along with ruby-nuggets. If not, see <http://www.gnu.org/licenses/>. #
24
- # #
25
- ###############################################################################
26
- #++
27
-
28
- class Integer
29
-
30
- # Memoization container: integer => factorial(integer)
31
- FACTORIAL = { 0 => 1 }
32
-
33
- # call-seq:
34
- # int.factorial => anInteger
35
- #
36
- # Calculate the factorial of _int_. To use the memoized version:
37
- # <tt>Integer.send(:alias_method, :factorial, :factorial_memoized)</tt>
38
- def factorial
39
- (1..self).inject { |f, i| f * i }
40
- end
41
-
42
- # call-seq:
43
- # int.factorial_memoized => anInteger
44
- #
45
- # Calculate the factorial of _int_ with the help of memoization (Which gives
46
- # a considerable speedup for repeated calculations -- at the cost of memory).
47
- #
48
- # WARNING: Don't try to calculate the factorial this way for "large"
49
- # integers! This might well bring your system down to its knees... ;-)
50
- def factorial_memoized
51
- FACTORIAL[self] ||= (1..self).inject { |f, i| FACTORIAL[i] ||= f * i }
52
- end
53
-
54
- alias_method :fac, :factorial
55
- alias_method :f!, :factorial
56
-
57
- end