heel 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1020) hide show
  1. data/CHANGES +17 -0
  2. data/LICENSE +31 -0
  3. data/README +84 -0
  4. data/bin/heel +10 -0
  5. data/lib/heel.rb +16 -0
  6. data/lib/heel/dir_handler.rb +284 -0
  7. data/lib/heel/error_handler.rb +27 -0
  8. data/lib/heel/gemspec.rb +49 -0
  9. data/lib/heel/server.rb +216 -0
  10. data/lib/heel/specification.rb +128 -0
  11. data/lib/heel/version.rb +21 -0
  12. data/resources/error.rhtml +68 -0
  13. data/resources/famfamfam/icons/accept.png +0 -0
  14. data/resources/famfamfam/icons/add.png +0 -0
  15. data/resources/famfamfam/icons/anchor.png +0 -0
  16. data/resources/famfamfam/icons/application.png +0 -0
  17. data/resources/famfamfam/icons/application_add.png +0 -0
  18. data/resources/famfamfam/icons/application_cascade.png +0 -0
  19. data/resources/famfamfam/icons/application_delete.png +0 -0
  20. data/resources/famfamfam/icons/application_double.png +0 -0
  21. data/resources/famfamfam/icons/application_edit.png +0 -0
  22. data/resources/famfamfam/icons/application_error.png +0 -0
  23. data/resources/famfamfam/icons/application_form.png +0 -0
  24. data/resources/famfamfam/icons/application_form_add.png +0 -0
  25. data/resources/famfamfam/icons/application_form_delete.png +0 -0
  26. data/resources/famfamfam/icons/application_form_edit.png +0 -0
  27. data/resources/famfamfam/icons/application_form_magnify.png +0 -0
  28. data/resources/famfamfam/icons/application_get.png +0 -0
  29. data/resources/famfamfam/icons/application_go.png +0 -0
  30. data/resources/famfamfam/icons/application_home.png +0 -0
  31. data/resources/famfamfam/icons/application_key.png +0 -0
  32. data/resources/famfamfam/icons/application_lightning.png +0 -0
  33. data/resources/famfamfam/icons/application_link.png +0 -0
  34. data/resources/famfamfam/icons/application_osx.png +0 -0
  35. data/resources/famfamfam/icons/application_osx_terminal.png +0 -0
  36. data/resources/famfamfam/icons/application_put.png +0 -0
  37. data/resources/famfamfam/icons/application_side_boxes.png +0 -0
  38. data/resources/famfamfam/icons/application_side_contract.png +0 -0
  39. data/resources/famfamfam/icons/application_side_expand.png +0 -0
  40. data/resources/famfamfam/icons/application_side_list.png +0 -0
  41. data/resources/famfamfam/icons/application_side_tree.png +0 -0
  42. data/resources/famfamfam/icons/application_split.png +0 -0
  43. data/resources/famfamfam/icons/application_tile_horizontal.png +0 -0
  44. data/resources/famfamfam/icons/application_tile_vertical.png +0 -0
  45. data/resources/famfamfam/icons/application_view_columns.png +0 -0
  46. data/resources/famfamfam/icons/application_view_detail.png +0 -0
  47. data/resources/famfamfam/icons/application_view_gallery.png +0 -0
  48. data/resources/famfamfam/icons/application_view_icons.png +0 -0
  49. data/resources/famfamfam/icons/application_view_list.png +0 -0
  50. data/resources/famfamfam/icons/application_view_tile.png +0 -0
  51. data/resources/famfamfam/icons/application_xp.png +0 -0
  52. data/resources/famfamfam/icons/application_xp_terminal.png +0 -0
  53. data/resources/famfamfam/icons/arrow_branch.png +0 -0
  54. data/resources/famfamfam/icons/arrow_divide.png +0 -0
  55. data/resources/famfamfam/icons/arrow_down.png +0 -0
  56. data/resources/famfamfam/icons/arrow_in.png +0 -0
  57. data/resources/famfamfam/icons/arrow_inout.png +0 -0
  58. data/resources/famfamfam/icons/arrow_join.png +0 -0
  59. data/resources/famfamfam/icons/arrow_left.png +0 -0
  60. data/resources/famfamfam/icons/arrow_merge.png +0 -0
  61. data/resources/famfamfam/icons/arrow_out.png +0 -0
  62. data/resources/famfamfam/icons/arrow_redo.png +0 -0
  63. data/resources/famfamfam/icons/arrow_refresh.png +0 -0
  64. data/resources/famfamfam/icons/arrow_refresh_small.png +0 -0
  65. data/resources/famfamfam/icons/arrow_right.png +0 -0
  66. data/resources/famfamfam/icons/arrow_rotate_anticlockwise.png +0 -0
  67. data/resources/famfamfam/icons/arrow_rotate_clockwise.png +0 -0
  68. data/resources/famfamfam/icons/arrow_switch.png +0 -0
  69. data/resources/famfamfam/icons/arrow_turn_left.png +0 -0
  70. data/resources/famfamfam/icons/arrow_turn_right.png +0 -0
  71. data/resources/famfamfam/icons/arrow_undo.png +0 -0
  72. data/resources/famfamfam/icons/arrow_up.png +0 -0
  73. data/resources/famfamfam/icons/asterisk_orange.png +0 -0
  74. data/resources/famfamfam/icons/asterisk_yellow.png +0 -0
  75. data/resources/famfamfam/icons/attach.png +0 -0
  76. data/resources/famfamfam/icons/award_star_add.png +0 -0
  77. data/resources/famfamfam/icons/award_star_bronze_1.png +0 -0
  78. data/resources/famfamfam/icons/award_star_bronze_2.png +0 -0
  79. data/resources/famfamfam/icons/award_star_bronze_3.png +0 -0
  80. data/resources/famfamfam/icons/award_star_delete.png +0 -0
  81. data/resources/famfamfam/icons/award_star_gold_1.png +0 -0
  82. data/resources/famfamfam/icons/award_star_gold_2.png +0 -0
  83. data/resources/famfamfam/icons/award_star_gold_3.png +0 -0
  84. data/resources/famfamfam/icons/award_star_silver_1.png +0 -0
  85. data/resources/famfamfam/icons/award_star_silver_2.png +0 -0
  86. data/resources/famfamfam/icons/award_star_silver_3.png +0 -0
  87. data/resources/famfamfam/icons/basket.png +0 -0
  88. data/resources/famfamfam/icons/basket_add.png +0 -0
  89. data/resources/famfamfam/icons/basket_delete.png +0 -0
  90. data/resources/famfamfam/icons/basket_edit.png +0 -0
  91. data/resources/famfamfam/icons/basket_error.png +0 -0
  92. data/resources/famfamfam/icons/basket_go.png +0 -0
  93. data/resources/famfamfam/icons/basket_put.png +0 -0
  94. data/resources/famfamfam/icons/basket_remove.png +0 -0
  95. data/resources/famfamfam/icons/bell.png +0 -0
  96. data/resources/famfamfam/icons/bell_add.png +0 -0
  97. data/resources/famfamfam/icons/bell_delete.png +0 -0
  98. data/resources/famfamfam/icons/bell_error.png +0 -0
  99. data/resources/famfamfam/icons/bell_go.png +0 -0
  100. data/resources/famfamfam/icons/bell_link.png +0 -0
  101. data/resources/famfamfam/icons/bin.png +0 -0
  102. data/resources/famfamfam/icons/bin_closed.png +0 -0
  103. data/resources/famfamfam/icons/bin_empty.png +0 -0
  104. data/resources/famfamfam/icons/bomb.png +0 -0
  105. data/resources/famfamfam/icons/book.png +0 -0
  106. data/resources/famfamfam/icons/book_add.png +0 -0
  107. data/resources/famfamfam/icons/book_addresses.png +0 -0
  108. data/resources/famfamfam/icons/book_delete.png +0 -0
  109. data/resources/famfamfam/icons/book_edit.png +0 -0
  110. data/resources/famfamfam/icons/book_error.png +0 -0
  111. data/resources/famfamfam/icons/book_go.png +0 -0
  112. data/resources/famfamfam/icons/book_key.png +0 -0
  113. data/resources/famfamfam/icons/book_link.png +0 -0
  114. data/resources/famfamfam/icons/book_next.png +0 -0
  115. data/resources/famfamfam/icons/book_open.png +0 -0
  116. data/resources/famfamfam/icons/book_previous.png +0 -0
  117. data/resources/famfamfam/icons/box.png +0 -0
  118. data/resources/famfamfam/icons/brick.png +0 -0
  119. data/resources/famfamfam/icons/brick_add.png +0 -0
  120. data/resources/famfamfam/icons/brick_delete.png +0 -0
  121. data/resources/famfamfam/icons/brick_edit.png +0 -0
  122. data/resources/famfamfam/icons/brick_error.png +0 -0
  123. data/resources/famfamfam/icons/brick_go.png +0 -0
  124. data/resources/famfamfam/icons/brick_link.png +0 -0
  125. data/resources/famfamfam/icons/bricks.png +0 -0
  126. data/resources/famfamfam/icons/briefcase.png +0 -0
  127. data/resources/famfamfam/icons/bug.png +0 -0
  128. data/resources/famfamfam/icons/bug_add.png +0 -0
  129. data/resources/famfamfam/icons/bug_delete.png +0 -0
  130. data/resources/famfamfam/icons/bug_edit.png +0 -0
  131. data/resources/famfamfam/icons/bug_error.png +0 -0
  132. data/resources/famfamfam/icons/bug_go.png +0 -0
  133. data/resources/famfamfam/icons/bug_link.png +0 -0
  134. data/resources/famfamfam/icons/building.png +0 -0
  135. data/resources/famfamfam/icons/building_add.png +0 -0
  136. data/resources/famfamfam/icons/building_delete.png +0 -0
  137. data/resources/famfamfam/icons/building_edit.png +0 -0
  138. data/resources/famfamfam/icons/building_error.png +0 -0
  139. data/resources/famfamfam/icons/building_go.png +0 -0
  140. data/resources/famfamfam/icons/building_key.png +0 -0
  141. data/resources/famfamfam/icons/building_link.png +0 -0
  142. data/resources/famfamfam/icons/bullet_add.png +0 -0
  143. data/resources/famfamfam/icons/bullet_arrow_bottom.png +0 -0
  144. data/resources/famfamfam/icons/bullet_arrow_down.png +0 -0
  145. data/resources/famfamfam/icons/bullet_arrow_top.png +0 -0
  146. data/resources/famfamfam/icons/bullet_arrow_up.png +0 -0
  147. data/resources/famfamfam/icons/bullet_black.png +0 -0
  148. data/resources/famfamfam/icons/bullet_blue.png +0 -0
  149. data/resources/famfamfam/icons/bullet_delete.png +0 -0
  150. data/resources/famfamfam/icons/bullet_disk.png +0 -0
  151. data/resources/famfamfam/icons/bullet_error.png +0 -0
  152. data/resources/famfamfam/icons/bullet_feed.png +0 -0
  153. data/resources/famfamfam/icons/bullet_go.png +0 -0
  154. data/resources/famfamfam/icons/bullet_green.png +0 -0
  155. data/resources/famfamfam/icons/bullet_key.png +0 -0
  156. data/resources/famfamfam/icons/bullet_orange.png +0 -0
  157. data/resources/famfamfam/icons/bullet_picture.png +0 -0
  158. data/resources/famfamfam/icons/bullet_pink.png +0 -0
  159. data/resources/famfamfam/icons/bullet_purple.png +0 -0
  160. data/resources/famfamfam/icons/bullet_red.png +0 -0
  161. data/resources/famfamfam/icons/bullet_star.png +0 -0
  162. data/resources/famfamfam/icons/bullet_toggle_minus.png +0 -0
  163. data/resources/famfamfam/icons/bullet_toggle_plus.png +0 -0
  164. data/resources/famfamfam/icons/bullet_white.png +0 -0
  165. data/resources/famfamfam/icons/bullet_wrench.png +0 -0
  166. data/resources/famfamfam/icons/bullet_yellow.png +0 -0
  167. data/resources/famfamfam/icons/cake.png +0 -0
  168. data/resources/famfamfam/icons/calculator.png +0 -0
  169. data/resources/famfamfam/icons/calculator_add.png +0 -0
  170. data/resources/famfamfam/icons/calculator_delete.png +0 -0
  171. data/resources/famfamfam/icons/calculator_edit.png +0 -0
  172. data/resources/famfamfam/icons/calculator_error.png +0 -0
  173. data/resources/famfamfam/icons/calculator_link.png +0 -0
  174. data/resources/famfamfam/icons/calendar.png +0 -0
  175. data/resources/famfamfam/icons/calendar_add.png +0 -0
  176. data/resources/famfamfam/icons/calendar_delete.png +0 -0
  177. data/resources/famfamfam/icons/calendar_edit.png +0 -0
  178. data/resources/famfamfam/icons/calendar_link.png +0 -0
  179. data/resources/famfamfam/icons/calendar_view_day.png +0 -0
  180. data/resources/famfamfam/icons/calendar_view_month.png +0 -0
  181. data/resources/famfamfam/icons/calendar_view_week.png +0 -0
  182. data/resources/famfamfam/icons/camera.png +0 -0
  183. data/resources/famfamfam/icons/camera_add.png +0 -0
  184. data/resources/famfamfam/icons/camera_delete.png +0 -0
  185. data/resources/famfamfam/icons/camera_edit.png +0 -0
  186. data/resources/famfamfam/icons/camera_error.png +0 -0
  187. data/resources/famfamfam/icons/camera_go.png +0 -0
  188. data/resources/famfamfam/icons/camera_link.png +0 -0
  189. data/resources/famfamfam/icons/camera_small.png +0 -0
  190. data/resources/famfamfam/icons/cancel.png +0 -0
  191. data/resources/famfamfam/icons/car.png +0 -0
  192. data/resources/famfamfam/icons/car_add.png +0 -0
  193. data/resources/famfamfam/icons/car_delete.png +0 -0
  194. data/resources/famfamfam/icons/cart.png +0 -0
  195. data/resources/famfamfam/icons/cart_add.png +0 -0
  196. data/resources/famfamfam/icons/cart_delete.png +0 -0
  197. data/resources/famfamfam/icons/cart_edit.png +0 -0
  198. data/resources/famfamfam/icons/cart_error.png +0 -0
  199. data/resources/famfamfam/icons/cart_go.png +0 -0
  200. data/resources/famfamfam/icons/cart_put.png +0 -0
  201. data/resources/famfamfam/icons/cart_remove.png +0 -0
  202. data/resources/famfamfam/icons/cd.png +0 -0
  203. data/resources/famfamfam/icons/cd_add.png +0 -0
  204. data/resources/famfamfam/icons/cd_burn.png +0 -0
  205. data/resources/famfamfam/icons/cd_delete.png +0 -0
  206. data/resources/famfamfam/icons/cd_edit.png +0 -0
  207. data/resources/famfamfam/icons/cd_eject.png +0 -0
  208. data/resources/famfamfam/icons/cd_go.png +0 -0
  209. data/resources/famfamfam/icons/chart_bar.png +0 -0
  210. data/resources/famfamfam/icons/chart_bar_add.png +0 -0
  211. data/resources/famfamfam/icons/chart_bar_delete.png +0 -0
  212. data/resources/famfamfam/icons/chart_bar_edit.png +0 -0
  213. data/resources/famfamfam/icons/chart_bar_error.png +0 -0
  214. data/resources/famfamfam/icons/chart_bar_link.png +0 -0
  215. data/resources/famfamfam/icons/chart_curve.png +0 -0
  216. data/resources/famfamfam/icons/chart_curve_add.png +0 -0
  217. data/resources/famfamfam/icons/chart_curve_delete.png +0 -0
  218. data/resources/famfamfam/icons/chart_curve_edit.png +0 -0
  219. data/resources/famfamfam/icons/chart_curve_error.png +0 -0
  220. data/resources/famfamfam/icons/chart_curve_go.png +0 -0
  221. data/resources/famfamfam/icons/chart_curve_link.png +0 -0
  222. data/resources/famfamfam/icons/chart_line.png +0 -0
  223. data/resources/famfamfam/icons/chart_line_add.png +0 -0
  224. data/resources/famfamfam/icons/chart_line_delete.png +0 -0
  225. data/resources/famfamfam/icons/chart_line_edit.png +0 -0
  226. data/resources/famfamfam/icons/chart_line_error.png +0 -0
  227. data/resources/famfamfam/icons/chart_line_link.png +0 -0
  228. data/resources/famfamfam/icons/chart_organisation.png +0 -0
  229. data/resources/famfamfam/icons/chart_organisation_add.png +0 -0
  230. data/resources/famfamfam/icons/chart_organisation_delete.png +0 -0
  231. data/resources/famfamfam/icons/chart_pie.png +0 -0
  232. data/resources/famfamfam/icons/chart_pie_add.png +0 -0
  233. data/resources/famfamfam/icons/chart_pie_delete.png +0 -0
  234. data/resources/famfamfam/icons/chart_pie_edit.png +0 -0
  235. data/resources/famfamfam/icons/chart_pie_error.png +0 -0
  236. data/resources/famfamfam/icons/chart_pie_link.png +0 -0
  237. data/resources/famfamfam/icons/clock.png +0 -0
  238. data/resources/famfamfam/icons/clock_add.png +0 -0
  239. data/resources/famfamfam/icons/clock_delete.png +0 -0
  240. data/resources/famfamfam/icons/clock_edit.png +0 -0
  241. data/resources/famfamfam/icons/clock_error.png +0 -0
  242. data/resources/famfamfam/icons/clock_go.png +0 -0
  243. data/resources/famfamfam/icons/clock_link.png +0 -0
  244. data/resources/famfamfam/icons/clock_pause.png +0 -0
  245. data/resources/famfamfam/icons/clock_play.png +0 -0
  246. data/resources/famfamfam/icons/clock_red.png +0 -0
  247. data/resources/famfamfam/icons/clock_stop.png +0 -0
  248. data/resources/famfamfam/icons/cog.png +0 -0
  249. data/resources/famfamfam/icons/cog_add.png +0 -0
  250. data/resources/famfamfam/icons/cog_delete.png +0 -0
  251. data/resources/famfamfam/icons/cog_edit.png +0 -0
  252. data/resources/famfamfam/icons/cog_error.png +0 -0
  253. data/resources/famfamfam/icons/cog_go.png +0 -0
  254. data/resources/famfamfam/icons/coins.png +0 -0
  255. data/resources/famfamfam/icons/coins_add.png +0 -0
  256. data/resources/famfamfam/icons/coins_delete.png +0 -0
  257. data/resources/famfamfam/icons/color_swatch.png +0 -0
  258. data/resources/famfamfam/icons/color_wheel.png +0 -0
  259. data/resources/famfamfam/icons/comment.png +0 -0
  260. data/resources/famfamfam/icons/comment_add.png +0 -0
  261. data/resources/famfamfam/icons/comment_delete.png +0 -0
  262. data/resources/famfamfam/icons/comment_edit.png +0 -0
  263. data/resources/famfamfam/icons/comments.png +0 -0
  264. data/resources/famfamfam/icons/comments_add.png +0 -0
  265. data/resources/famfamfam/icons/comments_delete.png +0 -0
  266. data/resources/famfamfam/icons/compress.png +0 -0
  267. data/resources/famfamfam/icons/computer.png +0 -0
  268. data/resources/famfamfam/icons/computer_add.png +0 -0
  269. data/resources/famfamfam/icons/computer_delete.png +0 -0
  270. data/resources/famfamfam/icons/computer_edit.png +0 -0
  271. data/resources/famfamfam/icons/computer_error.png +0 -0
  272. data/resources/famfamfam/icons/computer_go.png +0 -0
  273. data/resources/famfamfam/icons/computer_key.png +0 -0
  274. data/resources/famfamfam/icons/computer_link.png +0 -0
  275. data/resources/famfamfam/icons/connect.png +0 -0
  276. data/resources/famfamfam/icons/contrast.png +0 -0
  277. data/resources/famfamfam/icons/contrast_decrease.png +0 -0
  278. data/resources/famfamfam/icons/contrast_high.png +0 -0
  279. data/resources/famfamfam/icons/contrast_increase.png +0 -0
  280. data/resources/famfamfam/icons/contrast_low.png +0 -0
  281. data/resources/famfamfam/icons/control_eject.png +0 -0
  282. data/resources/famfamfam/icons/control_eject_blue.png +0 -0
  283. data/resources/famfamfam/icons/control_end.png +0 -0
  284. data/resources/famfamfam/icons/control_end_blue.png +0 -0
  285. data/resources/famfamfam/icons/control_equalizer.png +0 -0
  286. data/resources/famfamfam/icons/control_equalizer_blue.png +0 -0
  287. data/resources/famfamfam/icons/control_fastforward.png +0 -0
  288. data/resources/famfamfam/icons/control_fastforward_blue.png +0 -0
  289. data/resources/famfamfam/icons/control_pause.png +0 -0
  290. data/resources/famfamfam/icons/control_pause_blue.png +0 -0
  291. data/resources/famfamfam/icons/control_play.png +0 -0
  292. data/resources/famfamfam/icons/control_play_blue.png +0 -0
  293. data/resources/famfamfam/icons/control_repeat.png +0 -0
  294. data/resources/famfamfam/icons/control_repeat_blue.png +0 -0
  295. data/resources/famfamfam/icons/control_rewind.png +0 -0
  296. data/resources/famfamfam/icons/control_rewind_blue.png +0 -0
  297. data/resources/famfamfam/icons/control_start.png +0 -0
  298. data/resources/famfamfam/icons/control_start_blue.png +0 -0
  299. data/resources/famfamfam/icons/control_stop.png +0 -0
  300. data/resources/famfamfam/icons/control_stop_blue.png +0 -0
  301. data/resources/famfamfam/icons/controller.png +0 -0
  302. data/resources/famfamfam/icons/controller_add.png +0 -0
  303. data/resources/famfamfam/icons/controller_delete.png +0 -0
  304. data/resources/famfamfam/icons/controller_error.png +0 -0
  305. data/resources/famfamfam/icons/creditcards.png +0 -0
  306. data/resources/famfamfam/icons/cross.png +0 -0
  307. data/resources/famfamfam/icons/css.png +0 -0
  308. data/resources/famfamfam/icons/css_add.png +0 -0
  309. data/resources/famfamfam/icons/css_delete.png +0 -0
  310. data/resources/famfamfam/icons/css_go.png +0 -0
  311. data/resources/famfamfam/icons/css_valid.png +0 -0
  312. data/resources/famfamfam/icons/cup.png +0 -0
  313. data/resources/famfamfam/icons/cup_add.png +0 -0
  314. data/resources/famfamfam/icons/cup_delete.png +0 -0
  315. data/resources/famfamfam/icons/cup_edit.png +0 -0
  316. data/resources/famfamfam/icons/cup_error.png +0 -0
  317. data/resources/famfamfam/icons/cup_go.png +0 -0
  318. data/resources/famfamfam/icons/cup_key.png +0 -0
  319. data/resources/famfamfam/icons/cup_link.png +0 -0
  320. data/resources/famfamfam/icons/cursor.png +0 -0
  321. data/resources/famfamfam/icons/cut.png +0 -0
  322. data/resources/famfamfam/icons/cut_red.png +0 -0
  323. data/resources/famfamfam/icons/database.png +0 -0
  324. data/resources/famfamfam/icons/database_add.png +0 -0
  325. data/resources/famfamfam/icons/database_connect.png +0 -0
  326. data/resources/famfamfam/icons/database_delete.png +0 -0
  327. data/resources/famfamfam/icons/database_edit.png +0 -0
  328. data/resources/famfamfam/icons/database_error.png +0 -0
  329. data/resources/famfamfam/icons/database_gear.png +0 -0
  330. data/resources/famfamfam/icons/database_go.png +0 -0
  331. data/resources/famfamfam/icons/database_key.png +0 -0
  332. data/resources/famfamfam/icons/database_lightning.png +0 -0
  333. data/resources/famfamfam/icons/database_link.png +0 -0
  334. data/resources/famfamfam/icons/database_refresh.png +0 -0
  335. data/resources/famfamfam/icons/database_save.png +0 -0
  336. data/resources/famfamfam/icons/database_table.png +0 -0
  337. data/resources/famfamfam/icons/date.png +0 -0
  338. data/resources/famfamfam/icons/date_add.png +0 -0
  339. data/resources/famfamfam/icons/date_delete.png +0 -0
  340. data/resources/famfamfam/icons/date_edit.png +0 -0
  341. data/resources/famfamfam/icons/date_error.png +0 -0
  342. data/resources/famfamfam/icons/date_go.png +0 -0
  343. data/resources/famfamfam/icons/date_link.png +0 -0
  344. data/resources/famfamfam/icons/date_magnify.png +0 -0
  345. data/resources/famfamfam/icons/date_next.png +0 -0
  346. data/resources/famfamfam/icons/date_previous.png +0 -0
  347. data/resources/famfamfam/icons/delete.png +0 -0
  348. data/resources/famfamfam/icons/disconnect.png +0 -0
  349. data/resources/famfamfam/icons/disk.png +0 -0
  350. data/resources/famfamfam/icons/disk_multiple.png +0 -0
  351. data/resources/famfamfam/icons/door.png +0 -0
  352. data/resources/famfamfam/icons/door_in.png +0 -0
  353. data/resources/famfamfam/icons/door_open.png +0 -0
  354. data/resources/famfamfam/icons/door_out.png +0 -0
  355. data/resources/famfamfam/icons/drink.png +0 -0
  356. data/resources/famfamfam/icons/drink_empty.png +0 -0
  357. data/resources/famfamfam/icons/drive.png +0 -0
  358. data/resources/famfamfam/icons/drive_add.png +0 -0
  359. data/resources/famfamfam/icons/drive_burn.png +0 -0
  360. data/resources/famfamfam/icons/drive_cd.png +0 -0
  361. data/resources/famfamfam/icons/drive_cd_empty.png +0 -0
  362. data/resources/famfamfam/icons/drive_delete.png +0 -0
  363. data/resources/famfamfam/icons/drive_disk.png +0 -0
  364. data/resources/famfamfam/icons/drive_edit.png +0 -0
  365. data/resources/famfamfam/icons/drive_error.png +0 -0
  366. data/resources/famfamfam/icons/drive_go.png +0 -0
  367. data/resources/famfamfam/icons/drive_key.png +0 -0
  368. data/resources/famfamfam/icons/drive_link.png +0 -0
  369. data/resources/famfamfam/icons/drive_magnify.png +0 -0
  370. data/resources/famfamfam/icons/drive_network.png +0 -0
  371. data/resources/famfamfam/icons/drive_rename.png +0 -0
  372. data/resources/famfamfam/icons/drive_user.png +0 -0
  373. data/resources/famfamfam/icons/drive_web.png +0 -0
  374. data/resources/famfamfam/icons/dvd.png +0 -0
  375. data/resources/famfamfam/icons/dvd_add.png +0 -0
  376. data/resources/famfamfam/icons/dvd_delete.png +0 -0
  377. data/resources/famfamfam/icons/dvd_edit.png +0 -0
  378. data/resources/famfamfam/icons/dvd_error.png +0 -0
  379. data/resources/famfamfam/icons/dvd_go.png +0 -0
  380. data/resources/famfamfam/icons/dvd_key.png +0 -0
  381. data/resources/famfamfam/icons/dvd_link.png +0 -0
  382. data/resources/famfamfam/icons/email.png +0 -0
  383. data/resources/famfamfam/icons/email_add.png +0 -0
  384. data/resources/famfamfam/icons/email_attach.png +0 -0
  385. data/resources/famfamfam/icons/email_delete.png +0 -0
  386. data/resources/famfamfam/icons/email_edit.png +0 -0
  387. data/resources/famfamfam/icons/email_error.png +0 -0
  388. data/resources/famfamfam/icons/email_go.png +0 -0
  389. data/resources/famfamfam/icons/email_link.png +0 -0
  390. data/resources/famfamfam/icons/email_open.png +0 -0
  391. data/resources/famfamfam/icons/email_open_image.png +0 -0
  392. data/resources/famfamfam/icons/emoticon_evilgrin.png +0 -0
  393. data/resources/famfamfam/icons/emoticon_grin.png +0 -0
  394. data/resources/famfamfam/icons/emoticon_happy.png +0 -0
  395. data/resources/famfamfam/icons/emoticon_smile.png +0 -0
  396. data/resources/famfamfam/icons/emoticon_surprised.png +0 -0
  397. data/resources/famfamfam/icons/emoticon_tongue.png +0 -0
  398. data/resources/famfamfam/icons/emoticon_unhappy.png +0 -0
  399. data/resources/famfamfam/icons/emoticon_waii.png +0 -0
  400. data/resources/famfamfam/icons/emoticon_wink.png +0 -0
  401. data/resources/famfamfam/icons/error.png +0 -0
  402. data/resources/famfamfam/icons/error_add.png +0 -0
  403. data/resources/famfamfam/icons/error_delete.png +0 -0
  404. data/resources/famfamfam/icons/error_go.png +0 -0
  405. data/resources/famfamfam/icons/exclamation.png +0 -0
  406. data/resources/famfamfam/icons/eye.png +0 -0
  407. data/resources/famfamfam/icons/feed.png +0 -0
  408. data/resources/famfamfam/icons/feed_add.png +0 -0
  409. data/resources/famfamfam/icons/feed_delete.png +0 -0
  410. data/resources/famfamfam/icons/feed_disk.png +0 -0
  411. data/resources/famfamfam/icons/feed_edit.png +0 -0
  412. data/resources/famfamfam/icons/feed_error.png +0 -0
  413. data/resources/famfamfam/icons/feed_go.png +0 -0
  414. data/resources/famfamfam/icons/feed_key.png +0 -0
  415. data/resources/famfamfam/icons/feed_link.png +0 -0
  416. data/resources/famfamfam/icons/feed_magnify.png +0 -0
  417. data/resources/famfamfam/icons/female.png +0 -0
  418. data/resources/famfamfam/icons/film.png +0 -0
  419. data/resources/famfamfam/icons/film_add.png +0 -0
  420. data/resources/famfamfam/icons/film_delete.png +0 -0
  421. data/resources/famfamfam/icons/film_edit.png +0 -0
  422. data/resources/famfamfam/icons/film_error.png +0 -0
  423. data/resources/famfamfam/icons/film_go.png +0 -0
  424. data/resources/famfamfam/icons/film_key.png +0 -0
  425. data/resources/famfamfam/icons/film_link.png +0 -0
  426. data/resources/famfamfam/icons/film_save.png +0 -0
  427. data/resources/famfamfam/icons/find.png +0 -0
  428. data/resources/famfamfam/icons/flag_blue.png +0 -0
  429. data/resources/famfamfam/icons/flag_green.png +0 -0
  430. data/resources/famfamfam/icons/flag_orange.png +0 -0
  431. data/resources/famfamfam/icons/flag_pink.png +0 -0
  432. data/resources/famfamfam/icons/flag_purple.png +0 -0
  433. data/resources/famfamfam/icons/flag_red.png +0 -0
  434. data/resources/famfamfam/icons/flag_yellow.png +0 -0
  435. data/resources/famfamfam/icons/folder.png +0 -0
  436. data/resources/famfamfam/icons/folder_add.png +0 -0
  437. data/resources/famfamfam/icons/folder_bell.png +0 -0
  438. data/resources/famfamfam/icons/folder_brick.png +0 -0
  439. data/resources/famfamfam/icons/folder_bug.png +0 -0
  440. data/resources/famfamfam/icons/folder_camera.png +0 -0
  441. data/resources/famfamfam/icons/folder_database.png +0 -0
  442. data/resources/famfamfam/icons/folder_delete.png +0 -0
  443. data/resources/famfamfam/icons/folder_edit.png +0 -0
  444. data/resources/famfamfam/icons/folder_error.png +0 -0
  445. data/resources/famfamfam/icons/folder_explore.png +0 -0
  446. data/resources/famfamfam/icons/folder_feed.png +0 -0
  447. data/resources/famfamfam/icons/folder_find.png +0 -0
  448. data/resources/famfamfam/icons/folder_go.png +0 -0
  449. data/resources/famfamfam/icons/folder_heart.png +0 -0
  450. data/resources/famfamfam/icons/folder_image.png +0 -0
  451. data/resources/famfamfam/icons/folder_key.png +0 -0
  452. data/resources/famfamfam/icons/folder_lightbulb.png +0 -0
  453. data/resources/famfamfam/icons/folder_link.png +0 -0
  454. data/resources/famfamfam/icons/folder_magnify.png +0 -0
  455. data/resources/famfamfam/icons/folder_page.png +0 -0
  456. data/resources/famfamfam/icons/folder_page_white.png +0 -0
  457. data/resources/famfamfam/icons/folder_palette.png +0 -0
  458. data/resources/famfamfam/icons/folder_picture.png +0 -0
  459. data/resources/famfamfam/icons/folder_star.png +0 -0
  460. data/resources/famfamfam/icons/folder_table.png +0 -0
  461. data/resources/famfamfam/icons/folder_user.png +0 -0
  462. data/resources/famfamfam/icons/folder_wrench.png +0 -0
  463. data/resources/famfamfam/icons/font.png +0 -0
  464. data/resources/famfamfam/icons/font_add.png +0 -0
  465. data/resources/famfamfam/icons/font_delete.png +0 -0
  466. data/resources/famfamfam/icons/font_go.png +0 -0
  467. data/resources/famfamfam/icons/group.png +0 -0
  468. data/resources/famfamfam/icons/group_add.png +0 -0
  469. data/resources/famfamfam/icons/group_delete.png +0 -0
  470. data/resources/famfamfam/icons/group_edit.png +0 -0
  471. data/resources/famfamfam/icons/group_error.png +0 -0
  472. data/resources/famfamfam/icons/group_gear.png +0 -0
  473. data/resources/famfamfam/icons/group_go.png +0 -0
  474. data/resources/famfamfam/icons/group_key.png +0 -0
  475. data/resources/famfamfam/icons/group_link.png +0 -0
  476. data/resources/famfamfam/icons/heart.png +0 -0
  477. data/resources/famfamfam/icons/heart_add.png +0 -0
  478. data/resources/famfamfam/icons/heart_delete.png +0 -0
  479. data/resources/famfamfam/icons/help.png +0 -0
  480. data/resources/famfamfam/icons/hourglass.png +0 -0
  481. data/resources/famfamfam/icons/hourglass_add.png +0 -0
  482. data/resources/famfamfam/icons/hourglass_delete.png +0 -0
  483. data/resources/famfamfam/icons/hourglass_go.png +0 -0
  484. data/resources/famfamfam/icons/hourglass_link.png +0 -0
  485. data/resources/famfamfam/icons/house.png +0 -0
  486. data/resources/famfamfam/icons/house_go.png +0 -0
  487. data/resources/famfamfam/icons/house_link.png +0 -0
  488. data/resources/famfamfam/icons/html.png +0 -0
  489. data/resources/famfamfam/icons/html_add.png +0 -0
  490. data/resources/famfamfam/icons/html_delete.png +0 -0
  491. data/resources/famfamfam/icons/html_go.png +0 -0
  492. data/resources/famfamfam/icons/html_valid.png +0 -0
  493. data/resources/famfamfam/icons/image.png +0 -0
  494. data/resources/famfamfam/icons/image_add.png +0 -0
  495. data/resources/famfamfam/icons/image_delete.png +0 -0
  496. data/resources/famfamfam/icons/image_edit.png +0 -0
  497. data/resources/famfamfam/icons/image_link.png +0 -0
  498. data/resources/famfamfam/icons/images.png +0 -0
  499. data/resources/famfamfam/icons/information.png +0 -0
  500. data/resources/famfamfam/icons/ipod.png +0 -0
  501. data/resources/famfamfam/icons/ipod_cast.png +0 -0
  502. data/resources/famfamfam/icons/ipod_cast_add.png +0 -0
  503. data/resources/famfamfam/icons/ipod_cast_delete.png +0 -0
  504. data/resources/famfamfam/icons/ipod_sound.png +0 -0
  505. data/resources/famfamfam/icons/joystick.png +0 -0
  506. data/resources/famfamfam/icons/joystick_add.png +0 -0
  507. data/resources/famfamfam/icons/joystick_delete.png +0 -0
  508. data/resources/famfamfam/icons/joystick_error.png +0 -0
  509. data/resources/famfamfam/icons/key.png +0 -0
  510. data/resources/famfamfam/icons/key_add.png +0 -0
  511. data/resources/famfamfam/icons/key_delete.png +0 -0
  512. data/resources/famfamfam/icons/key_go.png +0 -0
  513. data/resources/famfamfam/icons/keyboard.png +0 -0
  514. data/resources/famfamfam/icons/keyboard_add.png +0 -0
  515. data/resources/famfamfam/icons/keyboard_delete.png +0 -0
  516. data/resources/famfamfam/icons/keyboard_magnify.png +0 -0
  517. data/resources/famfamfam/icons/layers.png +0 -0
  518. data/resources/famfamfam/icons/layout.png +0 -0
  519. data/resources/famfamfam/icons/layout_add.png +0 -0
  520. data/resources/famfamfam/icons/layout_content.png +0 -0
  521. data/resources/famfamfam/icons/layout_delete.png +0 -0
  522. data/resources/famfamfam/icons/layout_edit.png +0 -0
  523. data/resources/famfamfam/icons/layout_error.png +0 -0
  524. data/resources/famfamfam/icons/layout_header.png +0 -0
  525. data/resources/famfamfam/icons/layout_link.png +0 -0
  526. data/resources/famfamfam/icons/layout_sidebar.png +0 -0
  527. data/resources/famfamfam/icons/lightbulb.png +0 -0
  528. data/resources/famfamfam/icons/lightbulb_add.png +0 -0
  529. data/resources/famfamfam/icons/lightbulb_delete.png +0 -0
  530. data/resources/famfamfam/icons/lightbulb_off.png +0 -0
  531. data/resources/famfamfam/icons/lightning.png +0 -0
  532. data/resources/famfamfam/icons/lightning_add.png +0 -0
  533. data/resources/famfamfam/icons/lightning_delete.png +0 -0
  534. data/resources/famfamfam/icons/lightning_go.png +0 -0
  535. data/resources/famfamfam/icons/link.png +0 -0
  536. data/resources/famfamfam/icons/link_add.png +0 -0
  537. data/resources/famfamfam/icons/link_break.png +0 -0
  538. data/resources/famfamfam/icons/link_delete.png +0 -0
  539. data/resources/famfamfam/icons/link_edit.png +0 -0
  540. data/resources/famfamfam/icons/link_error.png +0 -0
  541. data/resources/famfamfam/icons/link_go.png +0 -0
  542. data/resources/famfamfam/icons/lock.png +0 -0
  543. data/resources/famfamfam/icons/lock_add.png +0 -0
  544. data/resources/famfamfam/icons/lock_break.png +0 -0
  545. data/resources/famfamfam/icons/lock_delete.png +0 -0
  546. data/resources/famfamfam/icons/lock_edit.png +0 -0
  547. data/resources/famfamfam/icons/lock_go.png +0 -0
  548. data/resources/famfamfam/icons/lock_open.png +0 -0
  549. data/resources/famfamfam/icons/lorry.png +0 -0
  550. data/resources/famfamfam/icons/lorry_add.png +0 -0
  551. data/resources/famfamfam/icons/lorry_delete.png +0 -0
  552. data/resources/famfamfam/icons/lorry_error.png +0 -0
  553. data/resources/famfamfam/icons/lorry_flatbed.png +0 -0
  554. data/resources/famfamfam/icons/lorry_go.png +0 -0
  555. data/resources/famfamfam/icons/lorry_link.png +0 -0
  556. data/resources/famfamfam/icons/magifier_zoom_out.png +0 -0
  557. data/resources/famfamfam/icons/magnifier.png +0 -0
  558. data/resources/famfamfam/icons/magnifier_zoom_in.png +0 -0
  559. data/resources/famfamfam/icons/male.png +0 -0
  560. data/resources/famfamfam/icons/map.png +0 -0
  561. data/resources/famfamfam/icons/map_add.png +0 -0
  562. data/resources/famfamfam/icons/map_delete.png +0 -0
  563. data/resources/famfamfam/icons/map_edit.png +0 -0
  564. data/resources/famfamfam/icons/map_go.png +0 -0
  565. data/resources/famfamfam/icons/map_magnify.png +0 -0
  566. data/resources/famfamfam/icons/medal_bronze_1.png +0 -0
  567. data/resources/famfamfam/icons/medal_bronze_2.png +0 -0
  568. data/resources/famfamfam/icons/medal_bronze_3.png +0 -0
  569. data/resources/famfamfam/icons/medal_bronze_add.png +0 -0
  570. data/resources/famfamfam/icons/medal_bronze_delete.png +0 -0
  571. data/resources/famfamfam/icons/medal_gold_1.png +0 -0
  572. data/resources/famfamfam/icons/medal_gold_2.png +0 -0
  573. data/resources/famfamfam/icons/medal_gold_3.png +0 -0
  574. data/resources/famfamfam/icons/medal_gold_add.png +0 -0
  575. data/resources/famfamfam/icons/medal_gold_delete.png +0 -0
  576. data/resources/famfamfam/icons/medal_silver_1.png +0 -0
  577. data/resources/famfamfam/icons/medal_silver_2.png +0 -0
  578. data/resources/famfamfam/icons/medal_silver_3.png +0 -0
  579. data/resources/famfamfam/icons/medal_silver_add.png +0 -0
  580. data/resources/famfamfam/icons/medal_silver_delete.png +0 -0
  581. data/resources/famfamfam/icons/money.png +0 -0
  582. data/resources/famfamfam/icons/money_add.png +0 -0
  583. data/resources/famfamfam/icons/money_delete.png +0 -0
  584. data/resources/famfamfam/icons/money_dollar.png +0 -0
  585. data/resources/famfamfam/icons/money_euro.png +0 -0
  586. data/resources/famfamfam/icons/money_pound.png +0 -0
  587. data/resources/famfamfam/icons/money_yen.png +0 -0
  588. data/resources/famfamfam/icons/monitor.png +0 -0
  589. data/resources/famfamfam/icons/monitor_add.png +0 -0
  590. data/resources/famfamfam/icons/monitor_delete.png +0 -0
  591. data/resources/famfamfam/icons/monitor_edit.png +0 -0
  592. data/resources/famfamfam/icons/monitor_error.png +0 -0
  593. data/resources/famfamfam/icons/monitor_go.png +0 -0
  594. data/resources/famfamfam/icons/monitor_lightning.png +0 -0
  595. data/resources/famfamfam/icons/monitor_link.png +0 -0
  596. data/resources/famfamfam/icons/mouse.png +0 -0
  597. data/resources/famfamfam/icons/mouse_add.png +0 -0
  598. data/resources/famfamfam/icons/mouse_delete.png +0 -0
  599. data/resources/famfamfam/icons/mouse_error.png +0 -0
  600. data/resources/famfamfam/icons/music.png +0 -0
  601. data/resources/famfamfam/icons/new.png +0 -0
  602. data/resources/famfamfam/icons/newspaper.png +0 -0
  603. data/resources/famfamfam/icons/newspaper_add.png +0 -0
  604. data/resources/famfamfam/icons/newspaper_delete.png +0 -0
  605. data/resources/famfamfam/icons/newspaper_go.png +0 -0
  606. data/resources/famfamfam/icons/newspaper_link.png +0 -0
  607. data/resources/famfamfam/icons/note.png +0 -0
  608. data/resources/famfamfam/icons/note_add.png +0 -0
  609. data/resources/famfamfam/icons/note_delete.png +0 -0
  610. data/resources/famfamfam/icons/note_edit.png +0 -0
  611. data/resources/famfamfam/icons/note_error.png +0 -0
  612. data/resources/famfamfam/icons/note_go.png +0 -0
  613. data/resources/famfamfam/icons/overlays.png +0 -0
  614. data/resources/famfamfam/icons/package.png +0 -0
  615. data/resources/famfamfam/icons/package_add.png +0 -0
  616. data/resources/famfamfam/icons/package_delete.png +0 -0
  617. data/resources/famfamfam/icons/package_go.png +0 -0
  618. data/resources/famfamfam/icons/package_green.png +0 -0
  619. data/resources/famfamfam/icons/package_link.png +0 -0
  620. data/resources/famfamfam/icons/page.png +0 -0
  621. data/resources/famfamfam/icons/page_add.png +0 -0
  622. data/resources/famfamfam/icons/page_attach.png +0 -0
  623. data/resources/famfamfam/icons/page_code.png +0 -0
  624. data/resources/famfamfam/icons/page_copy.png +0 -0
  625. data/resources/famfamfam/icons/page_delete.png +0 -0
  626. data/resources/famfamfam/icons/page_edit.png +0 -0
  627. data/resources/famfamfam/icons/page_error.png +0 -0
  628. data/resources/famfamfam/icons/page_excel.png +0 -0
  629. data/resources/famfamfam/icons/page_find.png +0 -0
  630. data/resources/famfamfam/icons/page_gear.png +0 -0
  631. data/resources/famfamfam/icons/page_go.png +0 -0
  632. data/resources/famfamfam/icons/page_green.png +0 -0
  633. data/resources/famfamfam/icons/page_key.png +0 -0
  634. data/resources/famfamfam/icons/page_lightning.png +0 -0
  635. data/resources/famfamfam/icons/page_link.png +0 -0
  636. data/resources/famfamfam/icons/page_paintbrush.png +0 -0
  637. data/resources/famfamfam/icons/page_paste.png +0 -0
  638. data/resources/famfamfam/icons/page_red.png +0 -0
  639. data/resources/famfamfam/icons/page_refresh.png +0 -0
  640. data/resources/famfamfam/icons/page_save.png +0 -0
  641. data/resources/famfamfam/icons/page_white.png +0 -0
  642. data/resources/famfamfam/icons/page_white_acrobat.png +0 -0
  643. data/resources/famfamfam/icons/page_white_actionscript.png +0 -0
  644. data/resources/famfamfam/icons/page_white_add.png +0 -0
  645. data/resources/famfamfam/icons/page_white_c.png +0 -0
  646. data/resources/famfamfam/icons/page_white_camera.png +0 -0
  647. data/resources/famfamfam/icons/page_white_cd.png +0 -0
  648. data/resources/famfamfam/icons/page_white_code.png +0 -0
  649. data/resources/famfamfam/icons/page_white_code_red.png +0 -0
  650. data/resources/famfamfam/icons/page_white_coldfusion.png +0 -0
  651. data/resources/famfamfam/icons/page_white_compressed.png +0 -0
  652. data/resources/famfamfam/icons/page_white_copy.png +0 -0
  653. data/resources/famfamfam/icons/page_white_cplusplus.png +0 -0
  654. data/resources/famfamfam/icons/page_white_csharp.png +0 -0
  655. data/resources/famfamfam/icons/page_white_cup.png +0 -0
  656. data/resources/famfamfam/icons/page_white_database.png +0 -0
  657. data/resources/famfamfam/icons/page_white_delete.png +0 -0
  658. data/resources/famfamfam/icons/page_white_dvd.png +0 -0
  659. data/resources/famfamfam/icons/page_white_edit.png +0 -0
  660. data/resources/famfamfam/icons/page_white_error.png +0 -0
  661. data/resources/famfamfam/icons/page_white_excel.png +0 -0
  662. data/resources/famfamfam/icons/page_white_find.png +0 -0
  663. data/resources/famfamfam/icons/page_white_flash.png +0 -0
  664. data/resources/famfamfam/icons/page_white_freehand.png +0 -0
  665. data/resources/famfamfam/icons/page_white_gear.png +0 -0
  666. data/resources/famfamfam/icons/page_white_get.png +0 -0
  667. data/resources/famfamfam/icons/page_white_go.png +0 -0
  668. data/resources/famfamfam/icons/page_white_h.png +0 -0
  669. data/resources/famfamfam/icons/page_white_horizontal.png +0 -0
  670. data/resources/famfamfam/icons/page_white_key.png +0 -0
  671. data/resources/famfamfam/icons/page_white_lightning.png +0 -0
  672. data/resources/famfamfam/icons/page_white_link.png +0 -0
  673. data/resources/famfamfam/icons/page_white_magnify.png +0 -0
  674. data/resources/famfamfam/icons/page_white_medal.png +0 -0
  675. data/resources/famfamfam/icons/page_white_office.png +0 -0
  676. data/resources/famfamfam/icons/page_white_paint.png +0 -0
  677. data/resources/famfamfam/icons/page_white_paintbrush.png +0 -0
  678. data/resources/famfamfam/icons/page_white_paste.png +0 -0
  679. data/resources/famfamfam/icons/page_white_php.png +0 -0
  680. data/resources/famfamfam/icons/page_white_picture.png +0 -0
  681. data/resources/famfamfam/icons/page_white_powerpoint.png +0 -0
  682. data/resources/famfamfam/icons/page_white_put.png +0 -0
  683. data/resources/famfamfam/icons/page_white_ruby.png +0 -0
  684. data/resources/famfamfam/icons/page_white_stack.png +0 -0
  685. data/resources/famfamfam/icons/page_white_star.png +0 -0
  686. data/resources/famfamfam/icons/page_white_swoosh.png +0 -0
  687. data/resources/famfamfam/icons/page_white_text.png +0 -0
  688. data/resources/famfamfam/icons/page_white_text_width.png +0 -0
  689. data/resources/famfamfam/icons/page_white_tux.png +0 -0
  690. data/resources/famfamfam/icons/page_white_vector.png +0 -0
  691. data/resources/famfamfam/icons/page_white_visualstudio.png +0 -0
  692. data/resources/famfamfam/icons/page_white_width.png +0 -0
  693. data/resources/famfamfam/icons/page_white_word.png +0 -0
  694. data/resources/famfamfam/icons/page_white_world.png +0 -0
  695. data/resources/famfamfam/icons/page_white_wrench.png +0 -0
  696. data/resources/famfamfam/icons/page_white_zip.png +0 -0
  697. data/resources/famfamfam/icons/page_word.png +0 -0
  698. data/resources/famfamfam/icons/page_world.png +0 -0
  699. data/resources/famfamfam/icons/paintbrush.png +0 -0
  700. data/resources/famfamfam/icons/paintcan.png +0 -0
  701. data/resources/famfamfam/icons/palette.png +0 -0
  702. data/resources/famfamfam/icons/paste_plain.png +0 -0
  703. data/resources/famfamfam/icons/paste_word.png +0 -0
  704. data/resources/famfamfam/icons/pencil.png +0 -0
  705. data/resources/famfamfam/icons/pencil_add.png +0 -0
  706. data/resources/famfamfam/icons/pencil_delete.png +0 -0
  707. data/resources/famfamfam/icons/pencil_go.png +0 -0
  708. data/resources/famfamfam/icons/phone.png +0 -0
  709. data/resources/famfamfam/icons/phone_add.png +0 -0
  710. data/resources/famfamfam/icons/phone_delete.png +0 -0
  711. data/resources/famfamfam/icons/phone_sound.png +0 -0
  712. data/resources/famfamfam/icons/photo.png +0 -0
  713. data/resources/famfamfam/icons/photo_add.png +0 -0
  714. data/resources/famfamfam/icons/photo_delete.png +0 -0
  715. data/resources/famfamfam/icons/photo_link.png +0 -0
  716. data/resources/famfamfam/icons/photos.png +0 -0
  717. data/resources/famfamfam/icons/picture.png +0 -0
  718. data/resources/famfamfam/icons/picture_add.png +0 -0
  719. data/resources/famfamfam/icons/picture_delete.png +0 -0
  720. data/resources/famfamfam/icons/picture_edit.png +0 -0
  721. data/resources/famfamfam/icons/picture_empty.png +0 -0
  722. data/resources/famfamfam/icons/picture_error.png +0 -0
  723. data/resources/famfamfam/icons/picture_go.png +0 -0
  724. data/resources/famfamfam/icons/picture_key.png +0 -0
  725. data/resources/famfamfam/icons/picture_link.png +0 -0
  726. data/resources/famfamfam/icons/picture_save.png +0 -0
  727. data/resources/famfamfam/icons/pictures.png +0 -0
  728. data/resources/famfamfam/icons/pilcrow.png +0 -0
  729. data/resources/famfamfam/icons/pill.png +0 -0
  730. data/resources/famfamfam/icons/pill_add.png +0 -0
  731. data/resources/famfamfam/icons/pill_delete.png +0 -0
  732. data/resources/famfamfam/icons/pill_go.png +0 -0
  733. data/resources/famfamfam/icons/plugin.png +0 -0
  734. data/resources/famfamfam/icons/plugin_add.png +0 -0
  735. data/resources/famfamfam/icons/plugin_delete.png +0 -0
  736. data/resources/famfamfam/icons/plugin_disabled.png +0 -0
  737. data/resources/famfamfam/icons/plugin_edit.png +0 -0
  738. data/resources/famfamfam/icons/plugin_error.png +0 -0
  739. data/resources/famfamfam/icons/plugin_go.png +0 -0
  740. data/resources/famfamfam/icons/plugin_link.png +0 -0
  741. data/resources/famfamfam/icons/printer.png +0 -0
  742. data/resources/famfamfam/icons/printer_add.png +0 -0
  743. data/resources/famfamfam/icons/printer_delete.png +0 -0
  744. data/resources/famfamfam/icons/printer_empty.png +0 -0
  745. data/resources/famfamfam/icons/printer_error.png +0 -0
  746. data/resources/famfamfam/icons/rainbow.png +0 -0
  747. data/resources/famfamfam/icons/report.png +0 -0
  748. data/resources/famfamfam/icons/report_add.png +0 -0
  749. data/resources/famfamfam/icons/report_delete.png +0 -0
  750. data/resources/famfamfam/icons/report_disk.png +0 -0
  751. data/resources/famfamfam/icons/report_edit.png +0 -0
  752. data/resources/famfamfam/icons/report_go.png +0 -0
  753. data/resources/famfamfam/icons/report_key.png +0 -0
  754. data/resources/famfamfam/icons/report_link.png +0 -0
  755. data/resources/famfamfam/icons/report_magnify.png +0 -0
  756. data/resources/famfamfam/icons/report_picture.png +0 -0
  757. data/resources/famfamfam/icons/report_user.png +0 -0
  758. data/resources/famfamfam/icons/report_word.png +0 -0
  759. data/resources/famfamfam/icons/resultset_first.png +0 -0
  760. data/resources/famfamfam/icons/resultset_last.png +0 -0
  761. data/resources/famfamfam/icons/resultset_next.png +0 -0
  762. data/resources/famfamfam/icons/resultset_previous.png +0 -0
  763. data/resources/famfamfam/icons/rosette.png +0 -0
  764. data/resources/famfamfam/icons/rss.png +0 -0
  765. data/resources/famfamfam/icons/rss_add.png +0 -0
  766. data/resources/famfamfam/icons/rss_delete.png +0 -0
  767. data/resources/famfamfam/icons/rss_go.png +0 -0
  768. data/resources/famfamfam/icons/rss_valid.png +0 -0
  769. data/resources/famfamfam/icons/ruby.png +0 -0
  770. data/resources/famfamfam/icons/ruby_add.png +0 -0
  771. data/resources/famfamfam/icons/ruby_delete.png +0 -0
  772. data/resources/famfamfam/icons/ruby_gear.png +0 -0
  773. data/resources/famfamfam/icons/ruby_get.png +0 -0
  774. data/resources/famfamfam/icons/ruby_go.png +0 -0
  775. data/resources/famfamfam/icons/ruby_key.png +0 -0
  776. data/resources/famfamfam/icons/ruby_link.png +0 -0
  777. data/resources/famfamfam/icons/ruby_put.png +0 -0
  778. data/resources/famfamfam/icons/script.png +0 -0
  779. data/resources/famfamfam/icons/script_add.png +0 -0
  780. data/resources/famfamfam/icons/script_code.png +0 -0
  781. data/resources/famfamfam/icons/script_code_red.png +0 -0
  782. data/resources/famfamfam/icons/script_delete.png +0 -0
  783. data/resources/famfamfam/icons/script_edit.png +0 -0
  784. data/resources/famfamfam/icons/script_error.png +0 -0
  785. data/resources/famfamfam/icons/script_gear.png +0 -0
  786. data/resources/famfamfam/icons/script_go.png +0 -0
  787. data/resources/famfamfam/icons/script_key.png +0 -0
  788. data/resources/famfamfam/icons/script_lightning.png +0 -0
  789. data/resources/famfamfam/icons/script_link.png +0 -0
  790. data/resources/famfamfam/icons/script_palette.png +0 -0
  791. data/resources/famfamfam/icons/script_save.png +0 -0
  792. data/resources/famfamfam/icons/server.png +0 -0
  793. data/resources/famfamfam/icons/server_add.png +0 -0
  794. data/resources/famfamfam/icons/server_chart.png +0 -0
  795. data/resources/famfamfam/icons/server_compressed.png +0 -0
  796. data/resources/famfamfam/icons/server_connect.png +0 -0
  797. data/resources/famfamfam/icons/server_database.png +0 -0
  798. data/resources/famfamfam/icons/server_delete.png +0 -0
  799. data/resources/famfamfam/icons/server_edit.png +0 -0
  800. data/resources/famfamfam/icons/server_error.png +0 -0
  801. data/resources/famfamfam/icons/server_go.png +0 -0
  802. data/resources/famfamfam/icons/server_key.png +0 -0
  803. data/resources/famfamfam/icons/server_lightning.png +0 -0
  804. data/resources/famfamfam/icons/server_link.png +0 -0
  805. data/resources/famfamfam/icons/server_uncompressed.png +0 -0
  806. data/resources/famfamfam/icons/shading.png +0 -0
  807. data/resources/famfamfam/icons/shape_align_bottom.png +0 -0
  808. data/resources/famfamfam/icons/shape_align_center.png +0 -0
  809. data/resources/famfamfam/icons/shape_align_left.png +0 -0
  810. data/resources/famfamfam/icons/shape_align_middle.png +0 -0
  811. data/resources/famfamfam/icons/shape_align_right.png +0 -0
  812. data/resources/famfamfam/icons/shape_align_top.png +0 -0
  813. data/resources/famfamfam/icons/shape_flip_horizontal.png +0 -0
  814. data/resources/famfamfam/icons/shape_flip_vertical.png +0 -0
  815. data/resources/famfamfam/icons/shape_group.png +0 -0
  816. data/resources/famfamfam/icons/shape_handles.png +0 -0
  817. data/resources/famfamfam/icons/shape_move_back.png +0 -0
  818. data/resources/famfamfam/icons/shape_move_backwards.png +0 -0
  819. data/resources/famfamfam/icons/shape_move_forwards.png +0 -0
  820. data/resources/famfamfam/icons/shape_move_front.png +0 -0
  821. data/resources/famfamfam/icons/shape_rotate_anticlockwise.png +0 -0
  822. data/resources/famfamfam/icons/shape_rotate_clockwise.png +0 -0
  823. data/resources/famfamfam/icons/shape_square.png +0 -0
  824. data/resources/famfamfam/icons/shape_square_add.png +0 -0
  825. data/resources/famfamfam/icons/shape_square_delete.png +0 -0
  826. data/resources/famfamfam/icons/shape_square_edit.png +0 -0
  827. data/resources/famfamfam/icons/shape_square_error.png +0 -0
  828. data/resources/famfamfam/icons/shape_square_go.png +0 -0
  829. data/resources/famfamfam/icons/shape_square_key.png +0 -0
  830. data/resources/famfamfam/icons/shape_square_link.png +0 -0
  831. data/resources/famfamfam/icons/shape_ungroup.png +0 -0
  832. data/resources/famfamfam/icons/shield.png +0 -0
  833. data/resources/famfamfam/icons/shield_add.png +0 -0
  834. data/resources/famfamfam/icons/shield_delete.png +0 -0
  835. data/resources/famfamfam/icons/shield_go.png +0 -0
  836. data/resources/famfamfam/icons/sitemap.png +0 -0
  837. data/resources/famfamfam/icons/sitemap_color.png +0 -0
  838. data/resources/famfamfam/icons/sound.png +0 -0
  839. data/resources/famfamfam/icons/sound_add.png +0 -0
  840. data/resources/famfamfam/icons/sound_delete.png +0 -0
  841. data/resources/famfamfam/icons/sound_low.png +0 -0
  842. data/resources/famfamfam/icons/sound_mute.png +0 -0
  843. data/resources/famfamfam/icons/sound_none.png +0 -0
  844. data/resources/famfamfam/icons/spellcheck.png +0 -0
  845. data/resources/famfamfam/icons/sport_8ball.png +0 -0
  846. data/resources/famfamfam/icons/sport_basketball.png +0 -0
  847. data/resources/famfamfam/icons/sport_football.png +0 -0
  848. data/resources/famfamfam/icons/sport_golf.png +0 -0
  849. data/resources/famfamfam/icons/sport_raquet.png +0 -0
  850. data/resources/famfamfam/icons/sport_shuttlecock.png +0 -0
  851. data/resources/famfamfam/icons/sport_soccer.png +0 -0
  852. data/resources/famfamfam/icons/sport_tennis.png +0 -0
  853. data/resources/famfamfam/icons/star.png +0 -0
  854. data/resources/famfamfam/icons/status_away.png +0 -0
  855. data/resources/famfamfam/icons/status_busy.png +0 -0
  856. data/resources/famfamfam/icons/status_offline.png +0 -0
  857. data/resources/famfamfam/icons/status_online.png +0 -0
  858. data/resources/famfamfam/icons/stop.png +0 -0
  859. data/resources/famfamfam/icons/style.png +0 -0
  860. data/resources/famfamfam/icons/style_add.png +0 -0
  861. data/resources/famfamfam/icons/style_delete.png +0 -0
  862. data/resources/famfamfam/icons/style_edit.png +0 -0
  863. data/resources/famfamfam/icons/style_go.png +0 -0
  864. data/resources/famfamfam/icons/sum.png +0 -0
  865. data/resources/famfamfam/icons/tab.png +0 -0
  866. data/resources/famfamfam/icons/tab_add.png +0 -0
  867. data/resources/famfamfam/icons/tab_delete.png +0 -0
  868. data/resources/famfamfam/icons/tab_edit.png +0 -0
  869. data/resources/famfamfam/icons/tab_go.png +0 -0
  870. data/resources/famfamfam/icons/table.png +0 -0
  871. data/resources/famfamfam/icons/table_add.png +0 -0
  872. data/resources/famfamfam/icons/table_delete.png +0 -0
  873. data/resources/famfamfam/icons/table_edit.png +0 -0
  874. data/resources/famfamfam/icons/table_error.png +0 -0
  875. data/resources/famfamfam/icons/table_gear.png +0 -0
  876. data/resources/famfamfam/icons/table_go.png +0 -0
  877. data/resources/famfamfam/icons/table_key.png +0 -0
  878. data/resources/famfamfam/icons/table_lightning.png +0 -0
  879. data/resources/famfamfam/icons/table_link.png +0 -0
  880. data/resources/famfamfam/icons/table_multiple.png +0 -0
  881. data/resources/famfamfam/icons/table_refresh.png +0 -0
  882. data/resources/famfamfam/icons/table_relationship.png +0 -0
  883. data/resources/famfamfam/icons/table_row_delete.png +0 -0
  884. data/resources/famfamfam/icons/table_row_insert.png +0 -0
  885. data/resources/famfamfam/icons/table_save.png +0 -0
  886. data/resources/famfamfam/icons/table_sort.png +0 -0
  887. data/resources/famfamfam/icons/tag.png +0 -0
  888. data/resources/famfamfam/icons/tag_blue.png +0 -0
  889. data/resources/famfamfam/icons/tag_blue_add.png +0 -0
  890. data/resources/famfamfam/icons/tag_blue_delete.png +0 -0
  891. data/resources/famfamfam/icons/tag_blue_edit.png +0 -0
  892. data/resources/famfamfam/icons/tag_green.png +0 -0
  893. data/resources/famfamfam/icons/tag_orange.png +0 -0
  894. data/resources/famfamfam/icons/tag_pink.png +0 -0
  895. data/resources/famfamfam/icons/tag_purple.png +0 -0
  896. data/resources/famfamfam/icons/tag_red.png +0 -0
  897. data/resources/famfamfam/icons/tag_yellow.png +0 -0
  898. data/resources/famfamfam/icons/telephone.png +0 -0
  899. data/resources/famfamfam/icons/telephone_add.png +0 -0
  900. data/resources/famfamfam/icons/telephone_delete.png +0 -0
  901. data/resources/famfamfam/icons/telephone_edit.png +0 -0
  902. data/resources/famfamfam/icons/telephone_error.png +0 -0
  903. data/resources/famfamfam/icons/telephone_go.png +0 -0
  904. data/resources/famfamfam/icons/telephone_key.png +0 -0
  905. data/resources/famfamfam/icons/telephone_link.png +0 -0
  906. data/resources/famfamfam/icons/television.png +0 -0
  907. data/resources/famfamfam/icons/television_add.png +0 -0
  908. data/resources/famfamfam/icons/television_delete.png +0 -0
  909. data/resources/famfamfam/icons/text_align_center.png +0 -0
  910. data/resources/famfamfam/icons/text_align_justify.png +0 -0
  911. data/resources/famfamfam/icons/text_align_left.png +0 -0
  912. data/resources/famfamfam/icons/text_align_right.png +0 -0
  913. data/resources/famfamfam/icons/text_allcaps.png +0 -0
  914. data/resources/famfamfam/icons/text_bold.png +0 -0
  915. data/resources/famfamfam/icons/text_columns.png +0 -0
  916. data/resources/famfamfam/icons/text_dropcaps.png +0 -0
  917. data/resources/famfamfam/icons/text_heading_1.png +0 -0
  918. data/resources/famfamfam/icons/text_heading_2.png +0 -0
  919. data/resources/famfamfam/icons/text_heading_3.png +0 -0
  920. data/resources/famfamfam/icons/text_heading_4.png +0 -0
  921. data/resources/famfamfam/icons/text_heading_5.png +0 -0
  922. data/resources/famfamfam/icons/text_heading_6.png +0 -0
  923. data/resources/famfamfam/icons/text_horizontalrule.png +0 -0
  924. data/resources/famfamfam/icons/text_indent.png +0 -0
  925. data/resources/famfamfam/icons/text_indent_remove.png +0 -0
  926. data/resources/famfamfam/icons/text_italic.png +0 -0
  927. data/resources/famfamfam/icons/text_kerning.png +0 -0
  928. data/resources/famfamfam/icons/text_letter_omega.png +0 -0
  929. data/resources/famfamfam/icons/text_letterspacing.png +0 -0
  930. data/resources/famfamfam/icons/text_linespacing.png +0 -0
  931. data/resources/famfamfam/icons/text_list_bullets.png +0 -0
  932. data/resources/famfamfam/icons/text_list_numbers.png +0 -0
  933. data/resources/famfamfam/icons/text_lowercase.png +0 -0
  934. data/resources/famfamfam/icons/text_padding_bottom.png +0 -0
  935. data/resources/famfamfam/icons/text_padding_left.png +0 -0
  936. data/resources/famfamfam/icons/text_padding_right.png +0 -0
  937. data/resources/famfamfam/icons/text_padding_top.png +0 -0
  938. data/resources/famfamfam/icons/text_replace.png +0 -0
  939. data/resources/famfamfam/icons/text_signature.png +0 -0
  940. data/resources/famfamfam/icons/text_smallcaps.png +0 -0
  941. data/resources/famfamfam/icons/text_strikethrough.png +0 -0
  942. data/resources/famfamfam/icons/text_subscript.png +0 -0
  943. data/resources/famfamfam/icons/text_superscript.png +0 -0
  944. data/resources/famfamfam/icons/text_underline.png +0 -0
  945. data/resources/famfamfam/icons/text_uppercase.png +0 -0
  946. data/resources/famfamfam/icons/textfield.png +0 -0
  947. data/resources/famfamfam/icons/textfield_add.png +0 -0
  948. data/resources/famfamfam/icons/textfield_delete.png +0 -0
  949. data/resources/famfamfam/icons/textfield_key.png +0 -0
  950. data/resources/famfamfam/icons/textfield_rename.png +0 -0
  951. data/resources/famfamfam/icons/thumb_down.png +0 -0
  952. data/resources/famfamfam/icons/thumb_up.png +0 -0
  953. data/resources/famfamfam/icons/tick.png +0 -0
  954. data/resources/famfamfam/icons/time.png +0 -0
  955. data/resources/famfamfam/icons/time_add.png +0 -0
  956. data/resources/famfamfam/icons/time_delete.png +0 -0
  957. data/resources/famfamfam/icons/time_go.png +0 -0
  958. data/resources/famfamfam/icons/timeline_marker.png +0 -0
  959. data/resources/famfamfam/icons/transmit.png +0 -0
  960. data/resources/famfamfam/icons/transmit_add.png +0 -0
  961. data/resources/famfamfam/icons/transmit_blue.png +0 -0
  962. data/resources/famfamfam/icons/transmit_delete.png +0 -0
  963. data/resources/famfamfam/icons/transmit_edit.png +0 -0
  964. data/resources/famfamfam/icons/transmit_error.png +0 -0
  965. data/resources/famfamfam/icons/transmit_go.png +0 -0
  966. data/resources/famfamfam/icons/tux.png +0 -0
  967. data/resources/famfamfam/icons/user.png +0 -0
  968. data/resources/famfamfam/icons/user_add.png +0 -0
  969. data/resources/famfamfam/icons/user_comment.png +0 -0
  970. data/resources/famfamfam/icons/user_delete.png +0 -0
  971. data/resources/famfamfam/icons/user_edit.png +0 -0
  972. data/resources/famfamfam/icons/user_female.png +0 -0
  973. data/resources/famfamfam/icons/user_go.png +0 -0
  974. data/resources/famfamfam/icons/user_gray.png +0 -0
  975. data/resources/famfamfam/icons/user_green.png +0 -0
  976. data/resources/famfamfam/icons/user_orange.png +0 -0
  977. data/resources/famfamfam/icons/user_red.png +0 -0
  978. data/resources/famfamfam/icons/user_suit.png +0 -0
  979. data/resources/famfamfam/icons/vcard.png +0 -0
  980. data/resources/famfamfam/icons/vcard_add.png +0 -0
  981. data/resources/famfamfam/icons/vcard_delete.png +0 -0
  982. data/resources/famfamfam/icons/vcard_edit.png +0 -0
  983. data/resources/famfamfam/icons/vector.png +0 -0
  984. data/resources/famfamfam/icons/vector_add.png +0 -0
  985. data/resources/famfamfam/icons/vector_delete.png +0 -0
  986. data/resources/famfamfam/icons/wand.png +0 -0
  987. data/resources/famfamfam/icons/weather_clouds.png +0 -0
  988. data/resources/famfamfam/icons/weather_cloudy.png +0 -0
  989. data/resources/famfamfam/icons/weather_lightning.png +0 -0
  990. data/resources/famfamfam/icons/weather_rain.png +0 -0
  991. data/resources/famfamfam/icons/weather_snow.png +0 -0
  992. data/resources/famfamfam/icons/weather_sun.png +0 -0
  993. data/resources/famfamfam/icons/webcam.png +0 -0
  994. data/resources/famfamfam/icons/webcam_add.png +0 -0
  995. data/resources/famfamfam/icons/webcam_delete.png +0 -0
  996. data/resources/famfamfam/icons/webcam_error.png +0 -0
  997. data/resources/famfamfam/icons/world.png +0 -0
  998. data/resources/famfamfam/icons/world_add.png +0 -0
  999. data/resources/famfamfam/icons/world_delete.png +0 -0
  1000. data/resources/famfamfam/icons/world_edit.png +0 -0
  1001. data/resources/famfamfam/icons/world_go.png +0 -0
  1002. data/resources/famfamfam/icons/world_link.png +0 -0
  1003. data/resources/famfamfam/icons/wrench.png +0 -0
  1004. data/resources/famfamfam/icons/wrench_orange.png +0 -0
  1005. data/resources/famfamfam/icons/xhtml.png +0 -0
  1006. data/resources/famfamfam/icons/xhtml_add.png +0 -0
  1007. data/resources/famfamfam/icons/xhtml_delete.png +0 -0
  1008. data/resources/famfamfam/icons/xhtml_go.png +0 -0
  1009. data/resources/famfamfam/icons/xhtml_valid.png +0 -0
  1010. data/resources/famfamfam/icons/zoom.png +0 -0
  1011. data/resources/famfamfam/icons/zoom_in.png +0 -0
  1012. data/resources/famfamfam/icons/zoom_out.png +0 -0
  1013. data/resources/famfamfam/readme.html +1495 -0
  1014. data/resources/famfamfam/readme.txt +22 -0
  1015. data/resources/listing.rhtml +68 -0
  1016. data/spec/dir_handler_spec.rb +13 -0
  1017. data/spec/error_handler_spec.rb +13 -0
  1018. data/spec/server_spec.rb +53 -0
  1019. data/spec/spec_helper.rb +8 -0
  1020. metadata +1102 -0
data/CHANGES ADDED
@@ -0,0 +1,17 @@
1
+ = Changelog
2
+
3
+ === Version 0.2.0 - 2007-08-11
4
+
5
+ * Initial public release
6
+ * Added daemonizing of server
7
+ * Added launching of browser to server URL
8
+
9
+ === Version 0.1.0
10
+
11
+ * rename project to 'heel'
12
+ * gem packaging
13
+
14
+ === Version 0.0.1 - 2007-05-03
15
+
16
+ * initial development release
17
+
data/LICENSE ADDED
@@ -0,0 +1,31 @@
1
+ Copyright (c) 2007, Jeremy Hinegardner
2
+
3
+ All rights reserved.
4
+
5
+ Redistribution and use in source and binary forms, with or without
6
+ modification, are permitted provided that the following conditions are met:
7
+
8
+ * Redistributions of source code must retain the above copyright notice,
9
+ this list of conditions and the following disclaimer.
10
+
11
+ * Redistributions in binary form must reproduce the above copyright notice,
12
+ this list of conditions and the following disclaimer in the
13
+ documentation and/or other materials provided with the
14
+ distribution.
15
+
16
+ * Neither the name of Jeremy Hinegardner nor the
17
+ names of its contributors may be used to endorse or promote
18
+ products derived from this software without specific prior written
19
+ permission.
20
+
21
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
22
+ IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
23
+ TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
24
+ PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
25
+ OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
26
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
27
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
28
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
31
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/README ADDED
@@ -0,0 +1,84 @@
1
+ == Heel
2
+
3
+ * Homepage[http://copiousfreetime.rubyforge.org/heel/]
4
+ * {Rubyforge Project}[http://rubyforge.org/projects/copiousfreetime/]
5
+ * email jeremy at hinegardner dot org
6
+
7
+ == DESCRIPTION:
8
+
9
+ Heel is a small static file web server based on {mongrel}[http://mongrel.rubyforge.org]
10
+ for use when you need a quick web server fo a directory. Once the server is running heel will use
11
+ {launchy}[http://copiousfreetime.rubyforge.org/launchy/] to open your browser at the URL of your document root.
12
+
13
+ == SYNOPSIS:
14
+
15
+ Usage: heel [options]
16
+
17
+ -a, --address ADDRESS Address to bind to
18
+ (default: 0.0.0.0)
19
+ -d, --daemonize Run daemonized in the background
20
+ -h, --help Display this text
21
+ -k, --kill Kill an existing daemonized heel process
22
+ -p, --port PORT Port to bind to
23
+ (default: 4331)
24
+ -r, --root ROOT Set the document root
25
+ (default: current working directory)
26
+ -v, --version Show version
27
+
28
+
29
+ == REQUIREMENTS:
30
+
31
+ === For running:
32
+
33
+ * mongrel
34
+ * {launchy}[http://copiousfreetime.rubyforge.org/launchy/] >= 0.1.1
35
+ * mime-types
36
+
37
+ === For development:
38
+
39
+ * rake >= 0.7.1
40
+ * rcov >= 0.7.0.1
41
+ * rspec >= 0.7.3
42
+
43
+ == INSTALL:
44
+
45
+ * gem install heel
46
+
47
+ == CREDITS:
48
+
49
+ * Zed Shaw for {mongrel}[http://mongrel.rubyforge.org]
50
+ * http://www.famfamfam.com/ for amazing icons
51
+
52
+ == LICENSE:
53
+
54
+ Copyright (c) 2007, Jeremy Hinegardner
55
+
56
+ All rights reserved.
57
+
58
+ Redistribution and use in source and binary forms, with or without
59
+ modification, are permitted provided that the following conditions are met:
60
+
61
+ * Redistributions of source code must retain the above copyright notice,
62
+ this list of conditions and the following disclaimer.
63
+
64
+ * Redistributions in binary form must reproduce the above copyright notice,
65
+ this list of conditions and the following disclaimer in the
66
+ documentation and/or other materials provided with the
67
+ distribution.
68
+
69
+ * Neither the name of Jeremy Hinegardner nor the
70
+ names of its contributors may be used to endorse or promote
71
+ products derived from this software without specific prior written
72
+ permission.
73
+
74
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
75
+ IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
76
+ TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
77
+ PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
78
+ OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
79
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
80
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
81
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
82
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
83
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
84
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/bin/heel ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $: << File.expand_path(File.join(File.dirname(__FILE__),"..","lib"))
4
+
5
+ require 'rubygems'
6
+ require 'mongrel'
7
+ require 'heel'
8
+
9
+ Heel::Server.new(ARGV).run
10
+
data/lib/heel.rb ADDED
@@ -0,0 +1,16 @@
1
+ module Heel
2
+ APP_ROOT_DIR = File.dirname(File.expand_path(File.join(__FILE__,".."))).freeze
3
+ APP_LIB_DIR = File.join(APP_ROOT_DIR,"lib")
4
+ APP_RESOURCE_DIR = File.join(APP_ROOT_DIR,"resources")
5
+ end
6
+
7
+ require 'rubygems'
8
+ require 'mongrel'
9
+
10
+ require 'heel/version'
11
+ require 'heel/specification'
12
+ require 'heel/gemspec'
13
+ require 'heel/server'
14
+ require 'heel/dir_handler'
15
+ require 'heel/error_handler'
16
+
@@ -0,0 +1,284 @@
1
+ require 'heel'
2
+ require 'mime/types'
3
+ require 'erb'
4
+
5
+ module Heel
6
+
7
+ # A refactored version of Mongrel::DirHandler using the mime-types
8
+ # gem and a prettier directory listing.
9
+ class DirHandler < ::Mongrel::HttpHandler
10
+ attr_reader :document_root
11
+ attr_reader :directory_index_html
12
+ attr_reader :icon_url
13
+ attr_reader :default_mime_type
14
+ attr_reader :ignore_globs
15
+ attr_reader :reload_template_changes
16
+ attr_reader :template
17
+ attr_reader :template_mtime
18
+
19
+ # if any other mime types are needed, add them directly via the
20
+ # mime-types calls.
21
+ ADDITIONAL_MIME_TYPES = [
22
+ # [ content-type , [ array, of, filename, extentions] ]
23
+ ["images/svg+xml", ["svg"]],
24
+ ["video/x-flv", ["flv"]],
25
+ ["application/x-shockwave-flash", ["swf"]],
26
+ ["text/plain", ["rb", "rhtml"]],
27
+ ]
28
+
29
+ ICONS_BY_MIME_TYPE = {
30
+ "text/plain" => "page_white_text.png",
31
+ "image" => "picture.png",
32
+ "pdf" => "page_white_acrobat.png",
33
+ "xml" => "page_white_code.png",
34
+ "compress" => "compress.png",
35
+ "gzip" => "compress.png",
36
+ "zip" => "compress.png",
37
+ "application/xhtml+xml" => "xhtml.png",
38
+ "application/word" => "page_word.png",
39
+ "application/excel" => "page_excel.png",
40
+ "application/powerpoint" => "page_white_powerpoint.png",
41
+ "text/html" => "html.png",
42
+ "application" => "application.png",
43
+ "text" => "page_white_text.png",
44
+ :directory => "folder.png",
45
+ :default => "page_white.png",
46
+ }
47
+
48
+ def initialize(options = {})
49
+ @ignore_globs = options[:ignore_globs] || %w( *~ .htaccess . )
50
+ @document_root = options[:document_root] || Dir.pwd
51
+ @directory_listing_allowed = options[:directory_listing_allowed] || true
52
+ @directory_index_html = options[:directory_index_html] || "index.html"
53
+ @using_icons = options[:using_icons] || true
54
+ @icon_url = options[:icon_url] || "/icons"
55
+ @reload_template_changes = options[:reload_template_changes] || false
56
+ reload_template
57
+
58
+ ADDITIONAL_MIME_TYPES.each do |mt|
59
+ if MIME::Types[mt.first].size == 0 then
60
+ type = MIME::Type.from_array(mt)
61
+ MIME::Types.add(type)
62
+ else
63
+ type = MIME::Types[mt.first].first
64
+ mt[1].each do |ext|
65
+ type.extensions << ext unless type.extensions.include?(ext)
66
+ end
67
+ # have to reindex if new extensions added
68
+ MIME::Types.index_extensions(type)
69
+ end
70
+ end
71
+
72
+ @default_mime_type = MIME::Types["application/octet-stream"].first
73
+ end
74
+
75
+ def directory_listing_allowed?
76
+ return !!@directory_listing_allowed
77
+ end
78
+
79
+ def using_icons?
80
+ return !!@using_icons
81
+ end
82
+
83
+ def icon_for(mime_type)
84
+ icon = nil
85
+ [:content_type, :sub_type, :media_type].each do |t|
86
+ icon = ICONS_BY_MIME_TYPE[mime_type.send(t)]
87
+ return icon if icon
88
+ end
89
+ icon = ICONS_BY_MIME_TYPE[:default]
90
+ end
91
+
92
+ def reload_template_changes?
93
+ return @reload_template_changes
94
+ end
95
+
96
+ def reload_template
97
+ fname = File.join(APP_RESOURCE_DIR,"listing.rhtml")
98
+ fstat = File.stat(fname)
99
+ @template_mtime ||= fstat.mtime
100
+ if @template.nil? or fstat.mtime > @template_mtime then
101
+ @template = ::ERB.new(File.read(fname))
102
+ # log "Reloaded #{fname}"
103
+ end
104
+ end
105
+
106
+ # determine how to respond to the request, it will either be a
107
+ # directory listing, a file return, or an error return.
108
+ def how_to_respond(req_path)
109
+ if req_path.index(document_root) == 0 then
110
+ begin
111
+ stat = File.stat(req_path)
112
+
113
+ # if it is a directory, we either return the
114
+ # directory index file, or a directory listing
115
+ if stat.directory? then
116
+ dir_index = File.join(req_path,directory_index_html)
117
+ if File.exists?(dir_index) then
118
+ return dir_index
119
+ elsif directory_listing_allowed?
120
+ return :directory_listing
121
+ end
122
+
123
+ # if it is a file and readable, make sure that the
124
+ # path is a legal path
125
+ elsif stat.file? and stat.readable? then
126
+ if should_ignore?(File.basename(req_path)) then
127
+ return 403
128
+ end
129
+ return req_path
130
+ else
131
+ # TODO: debug log
132
+ return 403
133
+ end
134
+
135
+ rescue => error
136
+ if error.kind_of?(Errno::ENOENT) then
137
+ return 404
138
+ end
139
+ # TODO: debug log
140
+ return 500
141
+ end
142
+ else
143
+ return 403
144
+ end
145
+ end
146
+
147
+ def should_ignore?(fname)
148
+ ignore_globs.each do |glob|
149
+ return true if File.fnmatch(glob,fname)
150
+ end
151
+ false
152
+ end
153
+
154
+ # send a directory listing back to the client
155
+ def respond_with_directory_listing(req_path,request,response)
156
+ base_uri = ::Mongrel::HttpRequest.unescape(request.params[Mongrel::Const::REQUEST_URI])
157
+ entries = []
158
+ Dir.entries(req_path).each do |entry|
159
+ next if should_ignore?(entry)
160
+ next if req_path == document_root and entry == ".."
161
+
162
+ stat = File.stat(File.join(req_path,entry))
163
+ entry_data = OpenStruct.new
164
+
165
+ entry_data.name = entry == ".." ? "Parent Directory" : entry
166
+ entry_data.link = entry
167
+ entry_data.size = num_to_bytes(stat.size)
168
+ entry_data.last_modified = stat.mtime.strftime("%Y-%m-%d %H:%M:%S")
169
+
170
+ if stat.directory? then
171
+ entry_data.content_type = "Directory"
172
+ entry_data.size = "-"
173
+ entry_data.name += "/"
174
+ if using_icons? then
175
+ entry_data.icon_url = File.join(icon_url, ICONS_BY_MIME_TYPE[:directory])
176
+ end
177
+ else
178
+ entry_data.mime_type = MIME::Types.of(entry).first || default_mime_type
179
+ entry_data.content_type = entry_data.mime_type.content_type
180
+ if using_icons? then
181
+ entry_data.icon_url = File.join(icon_url, icon_for(entry_data.mime_type))
182
+ end
183
+ end
184
+ entries << entry_data
185
+ end
186
+
187
+ entries = entries.sort_by { |e| e.link }
188
+
189
+ response.start(200) do |head,out|
190
+ head['Content-Type'] = 'text/html'
191
+ out.write(template.result(binding))
192
+ end
193
+ end
194
+
195
+ # this method is essentially the send_file method from
196
+ # Mongrel::DirHandler
197
+ def respond_with_send_file(path,method,request,response)
198
+ stat = File.stat(path)
199
+ mtime = stat.mtime
200
+ etag = ::Mongrel::Const::ETAG_FORMAT % [mtime.to_i, stat.size, stat.ino]
201
+
202
+ modified_since = request.params[::Mongrel::Const::HTTP_IF_MODIFIED_SINCE]
203
+ none_match = request.params[::Mongrel::Const::HTTP_IF_NONE_MATCH]
204
+
205
+ last_response_time = Time.httpddate(modified_since) rescue nil
206
+
207
+ same_response = case
208
+ when modified_since && !last_response_time : false
209
+ when modified_since && last_response_time > Time.now : false
210
+ when modified_since && mtime > last_response_time : false
211
+ when none_match && none_match == "*" : false
212
+ when none_match && !none_match.strip.split(/\s*,\s*/).include?(etag) : false
213
+ else modified_since || none_match
214
+ end
215
+ header = response.header
216
+ header[::Mongrel::Const::ETAG] = etag
217
+
218
+ if same_response then
219
+ response.start(304) {}
220
+ else
221
+ response.status = 200
222
+ header[::Mongrel::Const::LAST_MODIFIED] = mtime.httpdate
223
+ header[::Mongrel::Const::CONTENT_TYPE] = (MIME::Types.of(path).first || default_mime_type).to_s
224
+ end
225
+
226
+ response.send_status(stat.size)
227
+ response.send_header
228
+
229
+ if method == ::Mongrel::Const::GET then
230
+ response.send_file(path,stat.size < ::Mongrel::Const::CHUNK_SIZE * 2)
231
+ end
232
+ end
233
+
234
+ # process the request, returning either the file, a directory
235
+ # listing (if allowed) or an appropriate error
236
+ def process(request, response)
237
+ method = request.params[Mongrel::Const::REQUEST_METHOD] || Mongrel::Const::GET
238
+ if ( method == Mongrel::Const::GET ) or ( method == Mongrel::Const::HEAD ) then
239
+
240
+ reload_template if reload_template_changes
241
+
242
+ req_path = File.expand_path(File.join(@document_root,
243
+ ::Mongrel::HttpRequest.unescape(request.params[Mongrel::Const::PATH_INFO])),
244
+ @document_root)
245
+ res_type = how_to_respond(req_path)
246
+
247
+ case res_type
248
+ when :directory_listing
249
+ respond_with_directory_listing(req_path,request,response)
250
+ when String
251
+ respond_with_send_file(res_type,method,request,response)
252
+ when Integer
253
+ response.status = res_type
254
+ end
255
+
256
+ # invalid method
257
+ else
258
+ response.start(403) { |head,out| out.write("Only HEAD and GET requests are honored.") }
259
+ end
260
+ end
261
+
262
+ # essentially this is strfbytes from facets
263
+ def num_to_bytes(num,fmt="%.2f")
264
+ case
265
+ when num < 1024
266
+ "#{num} bytes"
267
+ when num < 1024**2
268
+ "#{fmt % (num.to_f / 1024)} KB"
269
+ when num < 1024**3
270
+ "#{fmt % (num.to_f / 1024**2)} MB"
271
+ when num < 1024**4
272
+ "#{fmt % (num.to_f / 1024**3)} GB"
273
+ when num < 1024**5
274
+ "#{fmt % (num.to_f / 1024**4)} TB"
275
+ else
276
+ "#{num} bytes"
277
+ end
278
+ end
279
+
280
+ def log(msg)
281
+ STDERR.print "--> ", msg, "\n"
282
+ end
283
+ end
284
+ end