hamster 0.4.0 → 0.4.2

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 (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'); }