hamster 0.4.0 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (231) hide show
  1. data/History.rdoc +6 -0
  2. data/README.rdoc +1 -1
  3. data/Rakefile +1 -1
  4. data/lib/hamster/core_ext.rb +1 -0
  5. data/lib/hamster/core_ext/enumerator.rb +30 -0
  6. data/lib/hamster/list.rb +27 -4
  7. data/lib/hamster/set.rb +5 -4
  8. data/lib/hamster/sorter.rb +9 -0
  9. data/lib/hamster/vector.rb +6 -0
  10. data/lib/hamster/version.rb +1 -1
  11. data/spec/hamster/core_ext/coverage/assets/0.4.4/app.js +66 -0
  12. data/spec/hamster/core_ext/coverage/assets/0.4.4/fancybox/blank.gif +0 -0
  13. data/spec/hamster/core_ext/coverage/assets/0.4.4/fancybox/fancy_close.png +0 -0
  14. data/spec/hamster/core_ext/coverage/assets/0.4.4/fancybox/fancy_loading.png +0 -0
  15. data/spec/hamster/core_ext/coverage/assets/0.4.4/fancybox/fancy_nav_left.png +0 -0
  16. data/spec/hamster/core_ext/coverage/assets/0.4.4/fancybox/fancy_nav_right.png +0 -0
  17. data/spec/hamster/core_ext/coverage/assets/0.4.4/fancybox/fancy_shadow_e.png +0 -0
  18. data/spec/hamster/core_ext/coverage/assets/0.4.4/fancybox/fancy_shadow_n.png +0 -0
  19. data/spec/hamster/core_ext/coverage/assets/0.4.4/fancybox/fancy_shadow_ne.png +0 -0
  20. data/spec/hamster/core_ext/coverage/assets/0.4.4/fancybox/fancy_shadow_nw.png +0 -0
  21. data/spec/hamster/core_ext/coverage/assets/0.4.4/fancybox/fancy_shadow_s.png +0 -0
  22. data/spec/hamster/core_ext/coverage/assets/0.4.4/fancybox/fancy_shadow_se.png +0 -0
  23. data/spec/hamster/core_ext/coverage/assets/0.4.4/fancybox/fancy_shadow_sw.png +0 -0
  24. data/spec/hamster/core_ext/coverage/assets/0.4.4/fancybox/fancy_shadow_w.png +0 -0
  25. data/spec/hamster/core_ext/coverage/assets/0.4.4/fancybox/fancy_title_left.png +0 -0
  26. data/spec/hamster/core_ext/coverage/assets/0.4.4/fancybox/fancy_title_main.png +0 -0
  27. data/spec/hamster/core_ext/coverage/assets/0.4.4/fancybox/fancy_title_over.png +0 -0
  28. data/spec/hamster/core_ext/coverage/assets/0.4.4/fancybox/fancy_title_right.png +0 -0
  29. data/spec/hamster/core_ext/coverage/assets/0.4.4/fancybox/fancybox-x.png +0 -0
  30. data/spec/hamster/core_ext/coverage/assets/0.4.4/fancybox/fancybox-y.png +0 -0
  31. data/spec/hamster/core_ext/coverage/assets/0.4.4/fancybox/fancybox.png +0 -0
  32. data/spec/hamster/core_ext/coverage/assets/0.4.4/fancybox/jquery.fancybox-1.3.1.css +363 -0
  33. data/spec/hamster/core_ext/coverage/assets/0.4.4/fancybox/jquery.fancybox-1.3.1.pack.js +44 -0
  34. data/spec/hamster/core_ext/coverage/assets/0.4.4/favicon.png +0 -0
  35. data/spec/hamster/core_ext/coverage/assets/0.4.4/jquery-1.4.2.min.js +155 -0
  36. data/spec/hamster/core_ext/coverage/assets/0.4.4/jquery.dataTables.min.js +152 -0
  37. data/spec/hamster/core_ext/coverage/assets/0.4.4/jquery.timeago.js +141 -0
  38. data/spec/hamster/core_ext/coverage/assets/0.4.4/jquery.url.js +174 -0
  39. data/spec/hamster/core_ext/coverage/assets/0.4.4/loading.gif +0 -0
  40. data/spec/hamster/core_ext/coverage/assets/0.4.4/magnify.png +0 -0
  41. data/spec/hamster/core_ext/coverage/assets/0.4.4/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  42. data/spec/hamster/core_ext/coverage/assets/0.4.4/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  43. data/spec/hamster/core_ext/coverage/assets/0.4.4/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  44. data/spec/hamster/core_ext/coverage/assets/0.4.4/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  45. data/spec/hamster/core_ext/coverage/assets/0.4.4/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  46. data/spec/hamster/core_ext/coverage/assets/0.4.4/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  47. data/spec/hamster/core_ext/coverage/assets/0.4.4/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  48. data/spec/hamster/core_ext/coverage/assets/0.4.4/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  49. data/spec/hamster/core_ext/coverage/assets/0.4.4/smoothness/images/ui-icons_222222_256x240.png +0 -0
  50. data/spec/hamster/core_ext/coverage/assets/0.4.4/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  51. data/spec/hamster/core_ext/coverage/assets/0.4.4/smoothness/images/ui-icons_454545_256x240.png +0 -0
  52. data/spec/hamster/core_ext/coverage/assets/0.4.4/smoothness/images/ui-icons_888888_256x240.png +0 -0
  53. data/spec/hamster/core_ext/coverage/assets/0.4.4/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  54. data/spec/hamster/core_ext/coverage/assets/0.4.4/smoothness/jquery-ui-1.8.4.custom.css +295 -0
  55. data/spec/hamster/core_ext/coverage/assets/0.4.4/stylesheet.css +341 -0
  56. data/spec/hamster/core_ext/coverage/covered_percent +1 -0
  57. data/spec/hamster/core_ext/coverage/index.html +71 -0
  58. data/spec/hamster/core_ext/coverage/resultset.yml +10 -0
  59. data/spec/hamster/core_ext/enumerator_spec.rb +25 -0
  60. data/spec/hamster/list/coverage/assets/0.4.4/app.js +66 -0
  61. data/spec/hamster/list/coverage/assets/0.4.4/fancybox/blank.gif +0 -0
  62. data/spec/hamster/list/coverage/assets/0.4.4/fancybox/fancy_close.png +0 -0
  63. data/spec/hamster/list/coverage/assets/0.4.4/fancybox/fancy_loading.png +0 -0
  64. data/spec/hamster/list/coverage/assets/0.4.4/fancybox/fancy_nav_left.png +0 -0
  65. data/spec/hamster/list/coverage/assets/0.4.4/fancybox/fancy_nav_right.png +0 -0
  66. data/spec/hamster/list/coverage/assets/0.4.4/fancybox/fancy_shadow_e.png +0 -0
  67. data/spec/hamster/list/coverage/assets/0.4.4/fancybox/fancy_shadow_n.png +0 -0
  68. data/spec/hamster/list/coverage/assets/0.4.4/fancybox/fancy_shadow_ne.png +0 -0
  69. data/spec/hamster/list/coverage/assets/0.4.4/fancybox/fancy_shadow_nw.png +0 -0
  70. data/spec/hamster/list/coverage/assets/0.4.4/fancybox/fancy_shadow_s.png +0 -0
  71. data/spec/hamster/list/coverage/assets/0.4.4/fancybox/fancy_shadow_se.png +0 -0
  72. data/spec/hamster/list/coverage/assets/0.4.4/fancybox/fancy_shadow_sw.png +0 -0
  73. data/spec/hamster/list/coverage/assets/0.4.4/fancybox/fancy_shadow_w.png +0 -0
  74. data/spec/hamster/list/coverage/assets/0.4.4/fancybox/fancy_title_left.png +0 -0
  75. data/spec/hamster/list/coverage/assets/0.4.4/fancybox/fancy_title_main.png +0 -0
  76. data/spec/hamster/list/coverage/assets/0.4.4/fancybox/fancy_title_over.png +0 -0
  77. data/spec/hamster/list/coverage/assets/0.4.4/fancybox/fancy_title_right.png +0 -0
  78. data/spec/hamster/list/coverage/assets/0.4.4/fancybox/fancybox-x.png +0 -0
  79. data/spec/hamster/list/coverage/assets/0.4.4/fancybox/fancybox-y.png +0 -0
  80. data/spec/hamster/list/coverage/assets/0.4.4/fancybox/fancybox.png +0 -0
  81. data/spec/hamster/list/coverage/assets/0.4.4/fancybox/jquery.fancybox-1.3.1.css +363 -0
  82. data/spec/hamster/list/coverage/assets/0.4.4/fancybox/jquery.fancybox-1.3.1.pack.js +44 -0
  83. data/spec/hamster/list/coverage/assets/0.4.4/favicon.png +0 -0
  84. data/spec/hamster/list/coverage/assets/0.4.4/jquery-1.4.2.min.js +155 -0
  85. data/spec/hamster/list/coverage/assets/0.4.4/jquery.dataTables.min.js +152 -0
  86. data/spec/hamster/list/coverage/assets/0.4.4/jquery.timeago.js +141 -0
  87. data/spec/hamster/list/coverage/assets/0.4.4/jquery.url.js +174 -0
  88. data/spec/hamster/list/coverage/assets/0.4.4/loading.gif +0 -0
  89. data/spec/hamster/list/coverage/assets/0.4.4/magnify.png +0 -0
  90. data/spec/hamster/list/coverage/assets/0.4.4/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  91. data/spec/hamster/list/coverage/assets/0.4.4/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  92. data/spec/hamster/list/coverage/assets/0.4.4/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  93. data/spec/hamster/list/coverage/assets/0.4.4/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  94. data/spec/hamster/list/coverage/assets/0.4.4/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  95. data/spec/hamster/list/coverage/assets/0.4.4/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  96. data/spec/hamster/list/coverage/assets/0.4.4/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  97. data/spec/hamster/list/coverage/assets/0.4.4/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  98. data/spec/hamster/list/coverage/assets/0.4.4/smoothness/images/ui-icons_222222_256x240.png +0 -0
  99. data/spec/hamster/list/coverage/assets/0.4.4/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  100. data/spec/hamster/list/coverage/assets/0.4.4/smoothness/images/ui-icons_454545_256x240.png +0 -0
  101. data/spec/hamster/list/coverage/assets/0.4.4/smoothness/images/ui-icons_888888_256x240.png +0 -0
  102. data/spec/hamster/list/coverage/assets/0.4.4/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  103. data/spec/hamster/list/coverage/assets/0.4.4/smoothness/jquery-ui-1.8.4.custom.css +295 -0
  104. data/spec/hamster/list/coverage/assets/0.4.4/stylesheet.css +341 -0
  105. data/spec/hamster/list/coverage/covered_percent +1 -0
  106. data/spec/hamster/list/coverage/index.html +71 -0
  107. data/spec/hamster/list/coverage/resultset.yml +151 -0
  108. data/spec/hamster/list/grep_spec.rb +1 -1
  109. data/spec/hamster/list/group_by_spec.rb +39 -35
  110. data/spec/hamster/list/map_spec.rb +1 -1
  111. data/spec/hamster/list/merge_by_spec.rb +79 -0
  112. data/spec/hamster/list/merge_spec.rb +79 -0
  113. data/spec/hamster/set/coverage/assets/0.4.4/app.js +66 -0
  114. data/spec/hamster/set/coverage/assets/0.4.4/fancybox/blank.gif +0 -0
  115. data/spec/hamster/set/coverage/assets/0.4.4/fancybox/fancy_close.png +0 -0
  116. data/spec/hamster/set/coverage/assets/0.4.4/fancybox/fancy_loading.png +0 -0
  117. data/spec/hamster/set/coverage/assets/0.4.4/fancybox/fancy_nav_left.png +0 -0
  118. data/spec/hamster/set/coverage/assets/0.4.4/fancybox/fancy_nav_right.png +0 -0
  119. data/spec/hamster/set/coverage/assets/0.4.4/fancybox/fancy_shadow_e.png +0 -0
  120. data/spec/hamster/set/coverage/assets/0.4.4/fancybox/fancy_shadow_n.png +0 -0
  121. data/spec/hamster/set/coverage/assets/0.4.4/fancybox/fancy_shadow_ne.png +0 -0
  122. data/spec/hamster/set/coverage/assets/0.4.4/fancybox/fancy_shadow_nw.png +0 -0
  123. data/spec/hamster/set/coverage/assets/0.4.4/fancybox/fancy_shadow_s.png +0 -0
  124. data/spec/hamster/set/coverage/assets/0.4.4/fancybox/fancy_shadow_se.png +0 -0
  125. data/spec/hamster/set/coverage/assets/0.4.4/fancybox/fancy_shadow_sw.png +0 -0
  126. data/spec/hamster/set/coverage/assets/0.4.4/fancybox/fancy_shadow_w.png +0 -0
  127. data/spec/hamster/set/coverage/assets/0.4.4/fancybox/fancy_title_left.png +0 -0
  128. data/spec/hamster/set/coverage/assets/0.4.4/fancybox/fancy_title_main.png +0 -0
  129. data/spec/hamster/set/coverage/assets/0.4.4/fancybox/fancy_title_over.png +0 -0
  130. data/spec/hamster/set/coverage/assets/0.4.4/fancybox/fancy_title_right.png +0 -0
  131. data/spec/hamster/set/coverage/assets/0.4.4/fancybox/fancybox-x.png +0 -0
  132. data/spec/hamster/set/coverage/assets/0.4.4/fancybox/fancybox-y.png +0 -0
  133. data/spec/hamster/set/coverage/assets/0.4.4/fancybox/fancybox.png +0 -0
  134. data/spec/hamster/set/coverage/assets/0.4.4/fancybox/jquery.fancybox-1.3.1.css +363 -0
  135. data/spec/hamster/set/coverage/assets/0.4.4/fancybox/jquery.fancybox-1.3.1.pack.js +44 -0
  136. data/spec/hamster/set/coverage/assets/0.4.4/favicon.png +0 -0
  137. data/spec/hamster/set/coverage/assets/0.4.4/jquery-1.4.2.min.js +155 -0
  138. data/spec/hamster/set/coverage/assets/0.4.4/jquery.dataTables.min.js +152 -0
  139. data/spec/hamster/set/coverage/assets/0.4.4/jquery.timeago.js +141 -0
  140. data/spec/hamster/set/coverage/assets/0.4.4/jquery.url.js +174 -0
  141. data/spec/hamster/set/coverage/assets/0.4.4/loading.gif +0 -0
  142. data/spec/hamster/set/coverage/assets/0.4.4/magnify.png +0 -0
  143. data/spec/hamster/set/coverage/assets/0.4.4/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  144. data/spec/hamster/set/coverage/assets/0.4.4/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  145. data/spec/hamster/set/coverage/assets/0.4.4/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  146. data/spec/hamster/set/coverage/assets/0.4.4/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  147. data/spec/hamster/set/coverage/assets/0.4.4/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  148. data/spec/hamster/set/coverage/assets/0.4.4/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  149. data/spec/hamster/set/coverage/assets/0.4.4/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  150. data/spec/hamster/set/coverage/assets/0.4.4/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  151. data/spec/hamster/set/coverage/assets/0.4.4/smoothness/images/ui-icons_222222_256x240.png +0 -0
  152. data/spec/hamster/set/coverage/assets/0.4.4/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  153. data/spec/hamster/set/coverage/assets/0.4.4/smoothness/images/ui-icons_454545_256x240.png +0 -0
  154. data/spec/hamster/set/coverage/assets/0.4.4/smoothness/images/ui-icons_888888_256x240.png +0 -0
  155. data/spec/hamster/set/coverage/assets/0.4.4/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  156. data/spec/hamster/set/coverage/assets/0.4.4/smoothness/jquery-ui-1.8.4.custom.css +295 -0
  157. data/spec/hamster/set/coverage/assets/0.4.4/stylesheet.css +341 -0
  158. data/spec/hamster/set/coverage/covered_percent +1 -0
  159. data/spec/hamster/set/coverage/index.html +71 -0
  160. data/spec/hamster/set/coverage/resultset.yml +13 -0
  161. data/spec/hamster/set/grep_spec.rb +1 -1
  162. data/spec/hamster/set/group_by_spec.rb +32 -28
  163. data/spec/hamster/set/map_spec.rb +1 -1
  164. data/spec/hamster/sorter/coverage/assets/0.4.4/app.js +66 -0
  165. data/spec/hamster/sorter/coverage/assets/0.4.4/fancybox/blank.gif +0 -0
  166. data/spec/hamster/sorter/coverage/assets/0.4.4/fancybox/fancy_close.png +0 -0
  167. data/spec/hamster/sorter/coverage/assets/0.4.4/fancybox/fancy_loading.png +0 -0
  168. data/spec/hamster/sorter/coverage/assets/0.4.4/fancybox/fancy_nav_left.png +0 -0
  169. data/spec/hamster/sorter/coverage/assets/0.4.4/fancybox/fancy_nav_right.png +0 -0
  170. data/spec/hamster/sorter/coverage/assets/0.4.4/fancybox/fancy_shadow_e.png +0 -0
  171. data/spec/hamster/sorter/coverage/assets/0.4.4/fancybox/fancy_shadow_n.png +0 -0
  172. data/spec/hamster/sorter/coverage/assets/0.4.4/fancybox/fancy_shadow_ne.png +0 -0
  173. data/spec/hamster/sorter/coverage/assets/0.4.4/fancybox/fancy_shadow_nw.png +0 -0
  174. data/spec/hamster/sorter/coverage/assets/0.4.4/fancybox/fancy_shadow_s.png +0 -0
  175. data/spec/hamster/sorter/coverage/assets/0.4.4/fancybox/fancy_shadow_se.png +0 -0
  176. data/spec/hamster/sorter/coverage/assets/0.4.4/fancybox/fancy_shadow_sw.png +0 -0
  177. data/spec/hamster/sorter/coverage/assets/0.4.4/fancybox/fancy_shadow_w.png +0 -0
  178. data/spec/hamster/sorter/coverage/assets/0.4.4/fancybox/fancy_title_left.png +0 -0
  179. data/spec/hamster/sorter/coverage/assets/0.4.4/fancybox/fancy_title_main.png +0 -0
  180. data/spec/hamster/sorter/coverage/assets/0.4.4/fancybox/fancy_title_over.png +0 -0
  181. data/spec/hamster/sorter/coverage/assets/0.4.4/fancybox/fancy_title_right.png +0 -0
  182. data/spec/hamster/sorter/coverage/assets/0.4.4/fancybox/fancybox-x.png +0 -0
  183. data/spec/hamster/sorter/coverage/assets/0.4.4/fancybox/fancybox-y.png +0 -0
  184. data/spec/hamster/sorter/coverage/assets/0.4.4/fancybox/fancybox.png +0 -0
  185. data/spec/hamster/sorter/coverage/assets/0.4.4/fancybox/jquery.fancybox-1.3.1.css +363 -0
  186. data/spec/hamster/sorter/coverage/assets/0.4.4/fancybox/jquery.fancybox-1.3.1.pack.js +44 -0
  187. data/spec/hamster/sorter/coverage/assets/0.4.4/favicon.png +0 -0
  188. data/spec/hamster/sorter/coverage/assets/0.4.4/jquery-1.4.2.min.js +155 -0
  189. data/spec/hamster/sorter/coverage/assets/0.4.4/jquery.dataTables.min.js +152 -0
  190. data/spec/hamster/sorter/coverage/assets/0.4.4/jquery.timeago.js +141 -0
  191. data/spec/hamster/sorter/coverage/assets/0.4.4/jquery.url.js +174 -0
  192. data/spec/hamster/sorter/coverage/assets/0.4.4/loading.gif +0 -0
  193. data/spec/hamster/sorter/coverage/assets/0.4.4/magnify.png +0 -0
  194. data/spec/hamster/sorter/coverage/assets/0.4.4/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  195. data/spec/hamster/sorter/coverage/assets/0.4.4/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  196. data/spec/hamster/sorter/coverage/assets/0.4.4/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  197. data/spec/hamster/sorter/coverage/assets/0.4.4/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  198. data/spec/hamster/sorter/coverage/assets/0.4.4/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  199. data/spec/hamster/sorter/coverage/assets/0.4.4/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  200. data/spec/hamster/sorter/coverage/assets/0.4.4/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  201. data/spec/hamster/sorter/coverage/assets/0.4.4/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  202. data/spec/hamster/sorter/coverage/assets/0.4.4/smoothness/images/ui-icons_222222_256x240.png +0 -0
  203. data/spec/hamster/sorter/coverage/assets/0.4.4/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  204. data/spec/hamster/sorter/coverage/assets/0.4.4/smoothness/images/ui-icons_454545_256x240.png +0 -0
  205. data/spec/hamster/sorter/coverage/assets/0.4.4/smoothness/images/ui-icons_888888_256x240.png +0 -0
  206. data/spec/hamster/sorter/coverage/assets/0.4.4/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  207. data/spec/hamster/sorter/coverage/assets/0.4.4/smoothness/jquery-ui-1.8.4.custom.css +295 -0
  208. data/spec/hamster/sorter/coverage/assets/0.4.4/stylesheet.css +341 -0
  209. data/spec/hamster/sorter/coverage/covered_percent +1 -0
  210. data/spec/hamster/sorter/coverage/index.html +71 -0
  211. data/spec/hamster/sorter/coverage/resultset.yml +22 -0
  212. data/spec/hamster/vector/map_spec.rb +64 -0
  213. data/spec/spec_helper.rb +10 -1
  214. data/tasks/spec.rb +13 -0
  215. metadata +205 -42
  216. data/lib/hamster.rbc +0 -165
  217. data/lib/hamster/core_ext.rbc +0 -69
  218. data/lib/hamster/core_ext/enumerable.rbc +0 -636
  219. data/lib/hamster/core_ext/io.rbc +0 -616
  220. data/lib/hamster/hash.rbc +0 -4429
  221. data/lib/hamster/immutable.rbc +0 -1609
  222. data/lib/hamster/list.rbc +0 -15710
  223. data/lib/hamster/queue.rbc +0 -1842
  224. data/lib/hamster/set.rbc +0 -7780
  225. data/lib/hamster/sorter.rbc +0 -371
  226. data/lib/hamster/stack.rbc +0 -1627
  227. data/lib/hamster/trie.rbc +0 -3527
  228. data/lib/hamster/tuple.rbc +0 -873
  229. data/lib/hamster/undefined.rbc +0 -258
  230. data/lib/hamster/version.rbc +0 -136
  231. data/tasks/rspec.rb +0 -4
@@ -1,3 +1,9 @@
1
+ === 0.4.2 / 2011-04-07
2
+
3
+ * Added List#merge/merge_by to merge sorted lists into a single stream.
4
+ * Added Enumerator#to_list produces a lazy list.
5
+ * Alias List/Set#group_by as #group.
6
+
1
7
  === 0.4.0 / 2010-12-13
2
8
 
3
9
  * Added initial implementation of Vector for efficient indexed access.
@@ -7,7 +7,7 @@
7
7
 
8
8
  == Introduction
9
9
 
10
- Hamster started out as an implementation of Hash Array Mapped Tries (HAMT) for Ruby (see http://lamp.epfl.ch/papers/idealhashtrees.pdf) and has since expanded to include implementations of other Persistent Data Structures (see http://en.wikipedia.org/wiki/Persistent_data_structure) including Set, List, Stack, and Queue.
10
+ Hamster started out as an implementation of Hash Array Mapped Tries (HAMT) for Ruby (see http://lamp.epfl.ch/papers/idealhashtrees.pdf) and has since expanded to include implementations of other Persistent Data Structures (see http://en.wikipedia.org/wiki/Persistent_data_structure) including Set, List, Stack, Queue, and Vector.
11
11
 
12
12
  Hamster collections are immutable. Whenever you modify a Hamster collection, the original is preserved and a modified copy is returned. This makes them inherently thread-safe and sharable. (For an interesting perspective on why immutability itself is inherently a good thing, you might like to take a look at Matthias Felleisen's Function Objects presentation: http://www.ccs.neu.edu/home/matthias/Presentations/ecoop2004.pdf)
13
13
 
data/Rakefile CHANGED
@@ -2,4 +2,4 @@ Dir[File.expand_path("tasks/**/*.rb")].each do |task_file|
2
2
  require task_file
3
3
  end
4
4
 
5
- task :default => [ :rspec ]
5
+ task :default => [ :spec ]
@@ -1,2 +1,3 @@
1
1
  require 'hamster/core_ext/enumerable'
2
+ require 'hamster/core_ext/enumerator'
2
3
  require 'hamster/core_ext/io'
@@ -0,0 +1,30 @@
1
+ require 'hamster/list'
2
+
3
+ module Hamster
4
+
5
+ module CoreExt
6
+
7
+ module Enumerator
8
+
9
+ def to_list
10
+ Stream.new do
11
+ begin
12
+ Sequence.new(self.next, to_list)
13
+ rescue StopIteration
14
+ EmptyList
15
+ end
16
+ end
17
+
18
+ end
19
+
20
+ end
21
+
22
+ end
23
+
24
+ end
25
+
26
+ class Enumerator
27
+
28
+ include Hamster::CoreExt::Enumerator
29
+
30
+ end
@@ -185,13 +185,13 @@ module Hamster
185
185
  EmptyList
186
186
  end
187
187
 
188
- def sort(&block)
189
- Stream.new { Sorter.new(self).sort(&block).to_list }
188
+ def sort(&comparator)
189
+ Stream.new { Sorter.new(self).sort(&comparator) }
190
190
  end
191
191
 
192
- def sort_by(&block)
192
+ def sort_by(&transformer)
193
193
  return sort unless block_given?
194
- Stream.new { Sorter.new(self).sort_by(&block).to_list }
194
+ Stream.new { Sorter.new(self).sort_by(&transformer) }
195
195
  end
196
196
 
197
197
  def join(sep = "")
@@ -286,6 +286,7 @@ module Hamster
286
286
  hash.put(key, (hash.get(key) || EmptyList).cons(item))
287
287
  end
288
288
  end
289
+ def_delegator :self, :group_by, :group
289
290
 
290
291
  def at(index)
291
292
  drop(index).head
@@ -336,6 +337,28 @@ module Hamster
336
337
  find_indices(&block)
337
338
  end
338
339
 
340
+ def merge(&comparator)
341
+ return merge_by unless block_given?
342
+ Stream.new do
343
+ sorted = remove(&:empty?).sort do |a, b|
344
+ yield(a.head, b.head)
345
+ end
346
+ next EmptyList if sorted.empty?
347
+ Sequence.new(sorted.head.head, sorted.tail.cons(sorted.head.tail).merge(&comparator))
348
+ end
349
+ end
350
+
351
+ def merge_by(&transformer)
352
+ return merge_by { |item| item } unless block_given?
353
+ Stream.new do
354
+ sorted = remove(&:empty?).sort_by do |list|
355
+ yield(list.head)
356
+ end
357
+ next EmptyList if sorted.empty?
358
+ Sequence.new(sorted.head.head, sorted.tail.cons(sorted.head.tail).merge_by(&transformer))
359
+ end
360
+ end
361
+
339
362
  def eql?(other)
340
363
  list = self
341
364
  loop do
@@ -73,13 +73,13 @@ module Hamster
73
73
  end
74
74
  def_delegator :self, :head, :first
75
75
 
76
- def sort(&block)
77
- Stream.new { Sorter.new(self).sort(&block).to_list }
76
+ def sort(&comparator)
77
+ Stream.new { Sorter.new(self).sort(&comparator) }
78
78
  end
79
79
 
80
- def sort_by(&block)
80
+ def sort_by(&transformer)
81
81
  return sort unless block_given?
82
- Stream.new { Sorter.new(self).sort_by(&block).to_list }
82
+ Stream.new { Sorter.new(self).sort_by(&transformer) }
83
83
  end
84
84
 
85
85
  def join(sep = nil)
@@ -139,6 +139,7 @@ module Hamster
139
139
  hash.put(key, (hash.get(key) || EmptySet).add(item))
140
140
  end
141
141
  end
142
+ def_delegator :self, :group_by, :group
142
143
 
143
144
  def clear
144
145
  EmptySet
@@ -1,6 +1,7 @@
1
1
  require 'forwardable'
2
2
 
3
3
  require 'hamster/immutable'
4
+ require 'hamster/core_ext/enumerator'
4
5
 
5
6
  module Hamster
6
7
 
@@ -18,6 +19,14 @@ module Hamster
18
19
 
19
20
  def_delegator :@collection, :each
20
21
 
22
+ def sort(&comparator)
23
+ super.to_enum.to_list
24
+ end
25
+
26
+ def sort_by(&transformer)
27
+ super.to_enum.to_list
28
+ end
29
+
21
30
  end
22
31
 
23
32
  end
@@ -84,6 +84,12 @@ module Hamster
84
84
  nil
85
85
  end
86
86
 
87
+ def map(&block)
88
+ return self unless block_given?
89
+ reduce(EmptyVector) { |vector, item| vector.add(yield(item)) }
90
+ end
91
+ def_delegator :self, :map, :collect
92
+
87
93
  def filter
88
94
  return self unless block_given?
89
95
  reduce(EmptyVector) { |vector, item| yield(item) ? vector.add(item) : vector }
@@ -1,5 +1,5 @@
1
1
  module Hamster
2
2
 
3
- VERSION = "0.4.0".freeze
3
+ VERSION = "0.4.2".freeze
4
4
 
5
5
  end
@@ -0,0 +1,66 @@
1
+ $(document).ready(function() {
2
+ $('.file_list').dataTable({
3
+ "aaSorting": [[ 1, "asc" ]],
4
+ "bPaginate": false,
5
+ "bJQueryUI": true,
6
+ "aoColumns": [
7
+ null,
8
+ { "sType": "percent" },
9
+ null,
10
+ null,
11
+ null,
12
+ null
13
+ ]
14
+ });
15
+
16
+ $('.source_table tbody tr:odd').addClass('odd');
17
+ $('.source_table tbody tr:even').addClass('even');
18
+
19
+ $("a.src_link").fancybox({
20
+ 'hideOnContentClick': true
21
+ });
22
+
23
+ // Hide src files and file list container
24
+ $('.source_files').hide();
25
+ $('.file_list_container').hide();
26
+
27
+ // Add tabs based upon existing file_list_containers
28
+ $('.file_list_container h2').each(function(){
29
+ $('.group_tabs').append('<li><a href="#' + $(this).parent().attr('id') + '">' + $(this).html() + '</a></li>');
30
+ });
31
+
32
+ $('.group_tabs a').each( function() {
33
+ $(this).addClass($(this).attr('href').replace('#', ''));
34
+ });
35
+
36
+ $('.group_tabs a').live('focus', function() {
37
+ $(this).blur();
38
+ });
39
+
40
+ var favicon_path = $('link[rel="shortcut icon"]').attr('href')
41
+ $('.group_tabs a').live('click', function(){
42
+ if (!$(this).parent().hasClass('active')) {
43
+ $('.group_tabs a').parent().removeClass('active');
44
+ $(this).parent().addClass('active');
45
+ $('.file_list_container').hide();
46
+ $(".file_list_container" + $(this).attr('href')).show();
47
+ window.location.href = window.location.href.split('#')[0] + $(this).attr('href').replace('#', '#_');
48
+
49
+ // Force favicon reload - otherwise the location change containing anchor would drop the favicon...
50
+ // Works only on firefox, but still... - Anyone know a better solution to force favicon?
51
+ $('link[rel="shortcut icon"]').remove();
52
+ $('head').append('<link rel="shortcut icon" type="image/png" href="'+ favicon_path +'" />');
53
+ };
54
+ return false;
55
+ });
56
+
57
+ if (jQuery.url.attr('anchor')) {
58
+ $('.group_tabs a.'+jQuery.url.attr('anchor').replace('_', '')).click();
59
+ } else {
60
+ $('.group_tabs a:first').click();
61
+ };
62
+
63
+ $("abbr.timeago").timeago();
64
+ $('#loading').fadeOut();
65
+ $('#wrapper').show();
66
+ });
@@ -0,0 +1,363 @@
1
+ /*
2
+ * FancyBox - jQuery Plugin
3
+ * Simple and fancy lightbox alternative
4
+ *
5
+ * Examples and documentation at: http://fancybox.net
6
+ *
7
+ * Copyright (c) 2008 - 2010 Janis Skarnelis
8
+ *
9
+ * Version: 1.3.1 (05/03/2010)
10
+ * Requires: jQuery v1.3+
11
+ *
12
+ * Dual licensed under the MIT and GPL licenses:
13
+ * http://www.opensource.org/licenses/mit-license.php
14
+ * http://www.gnu.org/licenses/gpl.html
15
+ */
16
+
17
+ #fancybox-loading {
18
+ position: fixed;
19
+ top: 50%;
20
+ left: 50%;
21
+ height: 40px;
22
+ width: 40px;
23
+ margin-top: -20px;
24
+ margin-left: -20px;
25
+ cursor: pointer;
26
+ overflow: hidden;
27
+ z-index: 1104;
28
+ display: none;
29
+ }
30
+
31
+ * html #fancybox-loading { /* IE6 */
32
+ position: absolute;
33
+ margin-top: 0;
34
+ }
35
+
36
+ #fancybox-loading div {
37
+ position: absolute;
38
+ top: 0;
39
+ left: 0;
40
+ width: 40px;
41
+ height: 480px;
42
+ background-image: url('fancybox.png');
43
+ }
44
+
45
+ #fancybox-overlay {
46
+ position: fixed;
47
+ top: 0;
48
+ left: 0;
49
+ bottom: 0;
50
+ right: 0;
51
+ background: #000;
52
+ z-index: 1100;
53
+ display: none;
54
+ }
55
+
56
+ * html #fancybox-overlay { /* IE6 */
57
+ position: absolute;
58
+ width: 100%;
59
+ }
60
+
61
+ #fancybox-tmp {
62
+ padding: 0;
63
+ margin: 0;
64
+ border: 0;
65
+ overflow: auto;
66
+ display: none;
67
+ }
68
+
69
+ #fancybox-wrap {
70
+ position: absolute;
71
+ top: 0;
72
+ left: 0;
73
+ margin: 0;
74
+ padding: 20px;
75
+ z-index: 1101;
76
+ display: none;
77
+ }
78
+
79
+ #fancybox-outer {
80
+ position: relative;
81
+ width: 100%;
82
+ height: 100%;
83
+ background: #FFF;
84
+ }
85
+
86
+ #fancybox-inner {
87
+ position: absolute;
88
+ top: 0;
89
+ left: 0;
90
+ width: 1px;
91
+ height: 1px;
92
+ padding: 0;
93
+ margin: 0;
94
+ outline: none;
95
+ overflow: hidden;
96
+ }
97
+
98
+ #fancybox-hide-sel-frame {
99
+ position: absolute;
100
+ top: 0;
101
+ left: 0;
102
+ width: 100%;
103
+ height: 100%;
104
+ background: transparent;
105
+ }
106
+
107
+ #fancybox-close {
108
+ position: absolute;
109
+ top: -15px;
110
+ right: -15px;
111
+ width: 30px;
112
+ height: 30px;
113
+ background-image: url('fancybox.png');
114
+ background-position: -40px 0px;
115
+ cursor: pointer;
116
+ z-index: 1103;
117
+ display: none;
118
+ }
119
+
120
+ #fancybox_error {
121
+ color: #444;
122
+ font: normal 12px/20px Arial;
123
+ padding: 7px;
124
+ margin: 0;
125
+ }
126
+
127
+ #fancybox-content {
128
+ height: auto;
129
+ width: auto;
130
+ padding: 0;
131
+ margin: 0;
132
+ }
133
+
134
+ #fancybox-img {
135
+ width: 100%;
136
+ height: 100%;
137
+ padding: 0;
138
+ margin: 0;
139
+ border: none;
140
+ outline: none;
141
+ line-height: 0;
142
+ vertical-align: top;
143
+ -ms-interpolation-mode: bicubic;
144
+ }
145
+
146
+ #fancybox-frame {
147
+ position: relative;
148
+ width: 100%;
149
+ height: 100%;
150
+ border: none;
151
+ display: block;
152
+ }
153
+
154
+ #fancybox-title {
155
+ position: absolute;
156
+ bottom: 0;
157
+ left: 0;
158
+ font-family: Arial;
159
+ font-size: 12px;
160
+ z-index: 1102;
161
+ }
162
+
163
+ .fancybox-title-inside {
164
+ padding: 10px 0;
165
+ text-align: center;
166
+ color: #333;
167
+ }
168
+
169
+ .fancybox-title-outside {
170
+ padding-top: 5px;
171
+ color: #FFF;
172
+ text-align: center;
173
+ font-weight: bold;
174
+ }
175
+
176
+ .fancybox-title-over {
177
+ color: #FFF;
178
+ text-align: left;
179
+ }
180
+
181
+ #fancybox-title-over {
182
+ padding: 10px;
183
+ background-image: url('fancy_title_over.png');
184
+ display: block;
185
+ }
186
+
187
+ #fancybox-title-wrap {
188
+ display: inline-block;
189
+ }
190
+
191
+ #fancybox-title-wrap span {
192
+ height: 32px;
193
+ float: left;
194
+ }
195
+
196
+ #fancybox-title-left {
197
+ padding-left: 15px;
198
+ background-image: url('fancybox.png');
199
+ background-position: -40px -90px;
200
+ background-repeat: no-repeat;
201
+ }
202
+
203
+ #fancybox-title-main {
204
+ font-weight: bold;
205
+ line-height: 29px;
206
+ background-image: url('fancybox-x.png');
207
+ background-position: 0px -40px;
208
+ color: #FFF;
209
+ }
210
+
211
+ #fancybox-title-right {
212
+ padding-left: 15px;
213
+ background-image: url('fancybox.png');
214
+ background-position: -55px -90px;
215
+ background-repeat: no-repeat;
216
+ }
217
+
218
+ #fancybox-left, #fancybox-right {
219
+ position: absolute;
220
+ bottom: 0px;
221
+ height: 100%;
222
+ width: 35%;
223
+ cursor: pointer;
224
+ outline: none;
225
+ background-image: url('blank.gif');
226
+ z-index: 1102;
227
+ display: none;
228
+ }
229
+
230
+ #fancybox-left {
231
+ left: 0px;
232
+ }
233
+
234
+ #fancybox-right {
235
+ right: 0px;
236
+ }
237
+
238
+ #fancybox-left-ico, #fancybox-right-ico {
239
+ position: absolute;
240
+ top: 50%;
241
+ left: -9999px;
242
+ width: 30px;
243
+ height: 30px;
244
+ margin-top: -15px;
245
+ cursor: pointer;
246
+ z-index: 1102;
247
+ display: block;
248
+ }
249
+
250
+ #fancybox-left-ico {
251
+ background-image: url('fancybox.png');
252
+ background-position: -40px -30px;
253
+ }
254
+
255
+ #fancybox-right-ico {
256
+ background-image: url('fancybox.png');
257
+ background-position: -40px -60px;
258
+ }
259
+
260
+ #fancybox-left:hover, #fancybox-right:hover {
261
+ visibility: visible; /* IE6 */
262
+ }
263
+
264
+ #fancybox-left:hover span {
265
+ left: 20px;
266
+ }
267
+
268
+ #fancybox-right:hover span {
269
+ left: auto;
270
+ right: 20px;
271
+ }
272
+
273
+ .fancy-bg {
274
+ position: absolute;
275
+ padding: 0;
276
+ margin: 0;
277
+ border: 0;
278
+ width: 20px;
279
+ height: 20px;
280
+ z-index: 1001;
281
+ }
282
+
283
+ #fancy-bg-n {
284
+ top: -20px;
285
+ left: 0;
286
+ width: 100%;
287
+ background-image: url('fancybox-x.png');
288
+ }
289
+
290
+ #fancy-bg-ne {
291
+ top: -20px;
292
+ right: -20px;
293
+ background-image: url('fancybox.png');
294
+ background-position: -40px -162px;
295
+ }
296
+
297
+ #fancy-bg-e {
298
+ top: 0;
299
+ right: -20px;
300
+ height: 100%;
301
+ background-image: url('fancybox-y.png');
302
+ background-position: -20px 0px;
303
+ }
304
+
305
+ #fancy-bg-se {
306
+ bottom: -20px;
307
+ right: -20px;
308
+ background-image: url('fancybox.png');
309
+ background-position: -40px -182px;
310
+ }
311
+
312
+ #fancy-bg-s {
313
+ bottom: -20px;
314
+ left: 0;
315
+ width: 100%;
316
+ background-image: url('fancybox-x.png');
317
+ background-position: 0px -20px;
318
+ }
319
+
320
+ #fancy-bg-sw {
321
+ bottom: -20px;
322
+ left: -20px;
323
+ background-image: url('fancybox.png');
324
+ background-position: -40px -142px;
325
+ }
326
+
327
+ #fancy-bg-w {
328
+ top: 0;
329
+ left: -20px;
330
+ height: 100%;
331
+ background-image: url('fancybox-y.png');
332
+ }
333
+
334
+ #fancy-bg-nw {
335
+ top: -20px;
336
+ left: -20px;
337
+ background-image: url('fancybox.png');
338
+ background-position: -40px -122px;
339
+ }
340
+
341
+ /* IE */
342
+
343
+ #fancybox-loading.fancybox-ie div { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_loading.png', sizingMethod='scale'); }
344
+ .fancybox-ie #fancybox-close { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_close.png', sizingMethod='scale'); }
345
+
346
+ .fancybox-ie #fancybox-title-over { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_over.png', sizingMethod='scale'); zoom: 1; }
347
+ .fancybox-ie #fancybox-title-left { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_left.png', sizingMethod='scale'); }
348
+ .fancybox-ie #fancybox-title-main { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_main.png', sizingMethod='scale'); }
349
+ .fancybox-ie #fancybox-title-right { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_right.png', sizingMethod='scale'); }
350
+
351
+ .fancybox-ie #fancybox-left-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_left.png', sizingMethod='scale'); }
352
+ .fancybox-ie #fancybox-right-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_right.png', sizingMethod='scale'); }
353
+
354
+ .fancybox-ie .fancy-bg { background: transparent !important; }
355
+
356
+ .fancybox-ie #fancy-bg-n { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_n.png', sizingMethod='scale'); }
357
+ .fancybox-ie #fancy-bg-ne { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_ne.png', sizingMethod='scale'); }
358
+ .fancybox-ie #fancy-bg-e { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_e.png', sizingMethod='scale'); }
359
+ .fancybox-ie #fancy-bg-se { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_se.png', sizingMethod='scale'); }
360
+ .fancybox-ie #fancy-bg-s { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_s.png', sizingMethod='scale'); }
361
+ .fancybox-ie #fancy-bg-sw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_sw.png', sizingMethod='scale'); }
362
+ .fancybox-ie #fancy-bg-w { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_w.png', sizingMethod='scale'); }
363
+ .fancybox-ie #fancy-bg-nw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_nw.png', sizingMethod='scale'); }