heel 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +17 -0
- data/LICENSE +31 -0
- data/README +84 -0
- data/bin/heel +10 -0
- data/lib/heel.rb +16 -0
- data/lib/heel/dir_handler.rb +284 -0
- data/lib/heel/error_handler.rb +27 -0
- data/lib/heel/gemspec.rb +49 -0
- data/lib/heel/server.rb +216 -0
- data/lib/heel/specification.rb +128 -0
- data/lib/heel/version.rb +21 -0
- data/resources/error.rhtml +68 -0
- data/resources/famfamfam/icons/accept.png +0 -0
- data/resources/famfamfam/icons/add.png +0 -0
- data/resources/famfamfam/icons/anchor.png +0 -0
- data/resources/famfamfam/icons/application.png +0 -0
- data/resources/famfamfam/icons/application_add.png +0 -0
- data/resources/famfamfam/icons/application_cascade.png +0 -0
- data/resources/famfamfam/icons/application_delete.png +0 -0
- data/resources/famfamfam/icons/application_double.png +0 -0
- data/resources/famfamfam/icons/application_edit.png +0 -0
- data/resources/famfamfam/icons/application_error.png +0 -0
- data/resources/famfamfam/icons/application_form.png +0 -0
- data/resources/famfamfam/icons/application_form_add.png +0 -0
- data/resources/famfamfam/icons/application_form_delete.png +0 -0
- data/resources/famfamfam/icons/application_form_edit.png +0 -0
- data/resources/famfamfam/icons/application_form_magnify.png +0 -0
- data/resources/famfamfam/icons/application_get.png +0 -0
- data/resources/famfamfam/icons/application_go.png +0 -0
- data/resources/famfamfam/icons/application_home.png +0 -0
- data/resources/famfamfam/icons/application_key.png +0 -0
- data/resources/famfamfam/icons/application_lightning.png +0 -0
- data/resources/famfamfam/icons/application_link.png +0 -0
- data/resources/famfamfam/icons/application_osx.png +0 -0
- data/resources/famfamfam/icons/application_osx_terminal.png +0 -0
- data/resources/famfamfam/icons/application_put.png +0 -0
- data/resources/famfamfam/icons/application_side_boxes.png +0 -0
- data/resources/famfamfam/icons/application_side_contract.png +0 -0
- data/resources/famfamfam/icons/application_side_expand.png +0 -0
- data/resources/famfamfam/icons/application_side_list.png +0 -0
- data/resources/famfamfam/icons/application_side_tree.png +0 -0
- data/resources/famfamfam/icons/application_split.png +0 -0
- data/resources/famfamfam/icons/application_tile_horizontal.png +0 -0
- data/resources/famfamfam/icons/application_tile_vertical.png +0 -0
- data/resources/famfamfam/icons/application_view_columns.png +0 -0
- data/resources/famfamfam/icons/application_view_detail.png +0 -0
- data/resources/famfamfam/icons/application_view_gallery.png +0 -0
- data/resources/famfamfam/icons/application_view_icons.png +0 -0
- data/resources/famfamfam/icons/application_view_list.png +0 -0
- data/resources/famfamfam/icons/application_view_tile.png +0 -0
- data/resources/famfamfam/icons/application_xp.png +0 -0
- data/resources/famfamfam/icons/application_xp_terminal.png +0 -0
- data/resources/famfamfam/icons/arrow_branch.png +0 -0
- data/resources/famfamfam/icons/arrow_divide.png +0 -0
- data/resources/famfamfam/icons/arrow_down.png +0 -0
- data/resources/famfamfam/icons/arrow_in.png +0 -0
- data/resources/famfamfam/icons/arrow_inout.png +0 -0
- data/resources/famfamfam/icons/arrow_join.png +0 -0
- data/resources/famfamfam/icons/arrow_left.png +0 -0
- data/resources/famfamfam/icons/arrow_merge.png +0 -0
- data/resources/famfamfam/icons/arrow_out.png +0 -0
- data/resources/famfamfam/icons/arrow_redo.png +0 -0
- data/resources/famfamfam/icons/arrow_refresh.png +0 -0
- data/resources/famfamfam/icons/arrow_refresh_small.png +0 -0
- data/resources/famfamfam/icons/arrow_right.png +0 -0
- data/resources/famfamfam/icons/arrow_rotate_anticlockwise.png +0 -0
- data/resources/famfamfam/icons/arrow_rotate_clockwise.png +0 -0
- data/resources/famfamfam/icons/arrow_switch.png +0 -0
- data/resources/famfamfam/icons/arrow_turn_left.png +0 -0
- data/resources/famfamfam/icons/arrow_turn_right.png +0 -0
- data/resources/famfamfam/icons/arrow_undo.png +0 -0
- data/resources/famfamfam/icons/arrow_up.png +0 -0
- data/resources/famfamfam/icons/asterisk_orange.png +0 -0
- data/resources/famfamfam/icons/asterisk_yellow.png +0 -0
- data/resources/famfamfam/icons/attach.png +0 -0
- data/resources/famfamfam/icons/award_star_add.png +0 -0
- data/resources/famfamfam/icons/award_star_bronze_1.png +0 -0
- data/resources/famfamfam/icons/award_star_bronze_2.png +0 -0
- data/resources/famfamfam/icons/award_star_bronze_3.png +0 -0
- data/resources/famfamfam/icons/award_star_delete.png +0 -0
- data/resources/famfamfam/icons/award_star_gold_1.png +0 -0
- data/resources/famfamfam/icons/award_star_gold_2.png +0 -0
- data/resources/famfamfam/icons/award_star_gold_3.png +0 -0
- data/resources/famfamfam/icons/award_star_silver_1.png +0 -0
- data/resources/famfamfam/icons/award_star_silver_2.png +0 -0
- data/resources/famfamfam/icons/award_star_silver_3.png +0 -0
- data/resources/famfamfam/icons/basket.png +0 -0
- data/resources/famfamfam/icons/basket_add.png +0 -0
- data/resources/famfamfam/icons/basket_delete.png +0 -0
- data/resources/famfamfam/icons/basket_edit.png +0 -0
- data/resources/famfamfam/icons/basket_error.png +0 -0
- data/resources/famfamfam/icons/basket_go.png +0 -0
- data/resources/famfamfam/icons/basket_put.png +0 -0
- data/resources/famfamfam/icons/basket_remove.png +0 -0
- data/resources/famfamfam/icons/bell.png +0 -0
- data/resources/famfamfam/icons/bell_add.png +0 -0
- data/resources/famfamfam/icons/bell_delete.png +0 -0
- data/resources/famfamfam/icons/bell_error.png +0 -0
- data/resources/famfamfam/icons/bell_go.png +0 -0
- data/resources/famfamfam/icons/bell_link.png +0 -0
- data/resources/famfamfam/icons/bin.png +0 -0
- data/resources/famfamfam/icons/bin_closed.png +0 -0
- data/resources/famfamfam/icons/bin_empty.png +0 -0
- data/resources/famfamfam/icons/bomb.png +0 -0
- data/resources/famfamfam/icons/book.png +0 -0
- data/resources/famfamfam/icons/book_add.png +0 -0
- data/resources/famfamfam/icons/book_addresses.png +0 -0
- data/resources/famfamfam/icons/book_delete.png +0 -0
- data/resources/famfamfam/icons/book_edit.png +0 -0
- data/resources/famfamfam/icons/book_error.png +0 -0
- data/resources/famfamfam/icons/book_go.png +0 -0
- data/resources/famfamfam/icons/book_key.png +0 -0
- data/resources/famfamfam/icons/book_link.png +0 -0
- data/resources/famfamfam/icons/book_next.png +0 -0
- data/resources/famfamfam/icons/book_open.png +0 -0
- data/resources/famfamfam/icons/book_previous.png +0 -0
- data/resources/famfamfam/icons/box.png +0 -0
- data/resources/famfamfam/icons/brick.png +0 -0
- data/resources/famfamfam/icons/brick_add.png +0 -0
- data/resources/famfamfam/icons/brick_delete.png +0 -0
- data/resources/famfamfam/icons/brick_edit.png +0 -0
- data/resources/famfamfam/icons/brick_error.png +0 -0
- data/resources/famfamfam/icons/brick_go.png +0 -0
- data/resources/famfamfam/icons/brick_link.png +0 -0
- data/resources/famfamfam/icons/bricks.png +0 -0
- data/resources/famfamfam/icons/briefcase.png +0 -0
- data/resources/famfamfam/icons/bug.png +0 -0
- data/resources/famfamfam/icons/bug_add.png +0 -0
- data/resources/famfamfam/icons/bug_delete.png +0 -0
- data/resources/famfamfam/icons/bug_edit.png +0 -0
- data/resources/famfamfam/icons/bug_error.png +0 -0
- data/resources/famfamfam/icons/bug_go.png +0 -0
- data/resources/famfamfam/icons/bug_link.png +0 -0
- data/resources/famfamfam/icons/building.png +0 -0
- data/resources/famfamfam/icons/building_add.png +0 -0
- data/resources/famfamfam/icons/building_delete.png +0 -0
- data/resources/famfamfam/icons/building_edit.png +0 -0
- data/resources/famfamfam/icons/building_error.png +0 -0
- data/resources/famfamfam/icons/building_go.png +0 -0
- data/resources/famfamfam/icons/building_key.png +0 -0
- data/resources/famfamfam/icons/building_link.png +0 -0
- data/resources/famfamfam/icons/bullet_add.png +0 -0
- data/resources/famfamfam/icons/bullet_arrow_bottom.png +0 -0
- data/resources/famfamfam/icons/bullet_arrow_down.png +0 -0
- data/resources/famfamfam/icons/bullet_arrow_top.png +0 -0
- data/resources/famfamfam/icons/bullet_arrow_up.png +0 -0
- data/resources/famfamfam/icons/bullet_black.png +0 -0
- data/resources/famfamfam/icons/bullet_blue.png +0 -0
- data/resources/famfamfam/icons/bullet_delete.png +0 -0
- data/resources/famfamfam/icons/bullet_disk.png +0 -0
- data/resources/famfamfam/icons/bullet_error.png +0 -0
- data/resources/famfamfam/icons/bullet_feed.png +0 -0
- data/resources/famfamfam/icons/bullet_go.png +0 -0
- data/resources/famfamfam/icons/bullet_green.png +0 -0
- data/resources/famfamfam/icons/bullet_key.png +0 -0
- data/resources/famfamfam/icons/bullet_orange.png +0 -0
- data/resources/famfamfam/icons/bullet_picture.png +0 -0
- data/resources/famfamfam/icons/bullet_pink.png +0 -0
- data/resources/famfamfam/icons/bullet_purple.png +0 -0
- data/resources/famfamfam/icons/bullet_red.png +0 -0
- data/resources/famfamfam/icons/bullet_star.png +0 -0
- data/resources/famfamfam/icons/bullet_toggle_minus.png +0 -0
- data/resources/famfamfam/icons/bullet_toggle_plus.png +0 -0
- data/resources/famfamfam/icons/bullet_white.png +0 -0
- data/resources/famfamfam/icons/bullet_wrench.png +0 -0
- data/resources/famfamfam/icons/bullet_yellow.png +0 -0
- data/resources/famfamfam/icons/cake.png +0 -0
- data/resources/famfamfam/icons/calculator.png +0 -0
- data/resources/famfamfam/icons/calculator_add.png +0 -0
- data/resources/famfamfam/icons/calculator_delete.png +0 -0
- data/resources/famfamfam/icons/calculator_edit.png +0 -0
- data/resources/famfamfam/icons/calculator_error.png +0 -0
- data/resources/famfamfam/icons/calculator_link.png +0 -0
- data/resources/famfamfam/icons/calendar.png +0 -0
- data/resources/famfamfam/icons/calendar_add.png +0 -0
- data/resources/famfamfam/icons/calendar_delete.png +0 -0
- data/resources/famfamfam/icons/calendar_edit.png +0 -0
- data/resources/famfamfam/icons/calendar_link.png +0 -0
- data/resources/famfamfam/icons/calendar_view_day.png +0 -0
- data/resources/famfamfam/icons/calendar_view_month.png +0 -0
- data/resources/famfamfam/icons/calendar_view_week.png +0 -0
- data/resources/famfamfam/icons/camera.png +0 -0
- data/resources/famfamfam/icons/camera_add.png +0 -0
- data/resources/famfamfam/icons/camera_delete.png +0 -0
- data/resources/famfamfam/icons/camera_edit.png +0 -0
- data/resources/famfamfam/icons/camera_error.png +0 -0
- data/resources/famfamfam/icons/camera_go.png +0 -0
- data/resources/famfamfam/icons/camera_link.png +0 -0
- data/resources/famfamfam/icons/camera_small.png +0 -0
- data/resources/famfamfam/icons/cancel.png +0 -0
- data/resources/famfamfam/icons/car.png +0 -0
- data/resources/famfamfam/icons/car_add.png +0 -0
- data/resources/famfamfam/icons/car_delete.png +0 -0
- data/resources/famfamfam/icons/cart.png +0 -0
- data/resources/famfamfam/icons/cart_add.png +0 -0
- data/resources/famfamfam/icons/cart_delete.png +0 -0
- data/resources/famfamfam/icons/cart_edit.png +0 -0
- data/resources/famfamfam/icons/cart_error.png +0 -0
- data/resources/famfamfam/icons/cart_go.png +0 -0
- data/resources/famfamfam/icons/cart_put.png +0 -0
- data/resources/famfamfam/icons/cart_remove.png +0 -0
- data/resources/famfamfam/icons/cd.png +0 -0
- data/resources/famfamfam/icons/cd_add.png +0 -0
- data/resources/famfamfam/icons/cd_burn.png +0 -0
- data/resources/famfamfam/icons/cd_delete.png +0 -0
- data/resources/famfamfam/icons/cd_edit.png +0 -0
- data/resources/famfamfam/icons/cd_eject.png +0 -0
- data/resources/famfamfam/icons/cd_go.png +0 -0
- data/resources/famfamfam/icons/chart_bar.png +0 -0
- data/resources/famfamfam/icons/chart_bar_add.png +0 -0
- data/resources/famfamfam/icons/chart_bar_delete.png +0 -0
- data/resources/famfamfam/icons/chart_bar_edit.png +0 -0
- data/resources/famfamfam/icons/chart_bar_error.png +0 -0
- data/resources/famfamfam/icons/chart_bar_link.png +0 -0
- data/resources/famfamfam/icons/chart_curve.png +0 -0
- data/resources/famfamfam/icons/chart_curve_add.png +0 -0
- data/resources/famfamfam/icons/chart_curve_delete.png +0 -0
- data/resources/famfamfam/icons/chart_curve_edit.png +0 -0
- data/resources/famfamfam/icons/chart_curve_error.png +0 -0
- data/resources/famfamfam/icons/chart_curve_go.png +0 -0
- data/resources/famfamfam/icons/chart_curve_link.png +0 -0
- data/resources/famfamfam/icons/chart_line.png +0 -0
- data/resources/famfamfam/icons/chart_line_add.png +0 -0
- data/resources/famfamfam/icons/chart_line_delete.png +0 -0
- data/resources/famfamfam/icons/chart_line_edit.png +0 -0
- data/resources/famfamfam/icons/chart_line_error.png +0 -0
- data/resources/famfamfam/icons/chart_line_link.png +0 -0
- data/resources/famfamfam/icons/chart_organisation.png +0 -0
- data/resources/famfamfam/icons/chart_organisation_add.png +0 -0
- data/resources/famfamfam/icons/chart_organisation_delete.png +0 -0
- data/resources/famfamfam/icons/chart_pie.png +0 -0
- data/resources/famfamfam/icons/chart_pie_add.png +0 -0
- data/resources/famfamfam/icons/chart_pie_delete.png +0 -0
- data/resources/famfamfam/icons/chart_pie_edit.png +0 -0
- data/resources/famfamfam/icons/chart_pie_error.png +0 -0
- data/resources/famfamfam/icons/chart_pie_link.png +0 -0
- data/resources/famfamfam/icons/clock.png +0 -0
- data/resources/famfamfam/icons/clock_add.png +0 -0
- data/resources/famfamfam/icons/clock_delete.png +0 -0
- data/resources/famfamfam/icons/clock_edit.png +0 -0
- data/resources/famfamfam/icons/clock_error.png +0 -0
- data/resources/famfamfam/icons/clock_go.png +0 -0
- data/resources/famfamfam/icons/clock_link.png +0 -0
- data/resources/famfamfam/icons/clock_pause.png +0 -0
- data/resources/famfamfam/icons/clock_play.png +0 -0
- data/resources/famfamfam/icons/clock_red.png +0 -0
- data/resources/famfamfam/icons/clock_stop.png +0 -0
- data/resources/famfamfam/icons/cog.png +0 -0
- data/resources/famfamfam/icons/cog_add.png +0 -0
- data/resources/famfamfam/icons/cog_delete.png +0 -0
- data/resources/famfamfam/icons/cog_edit.png +0 -0
- data/resources/famfamfam/icons/cog_error.png +0 -0
- data/resources/famfamfam/icons/cog_go.png +0 -0
- data/resources/famfamfam/icons/coins.png +0 -0
- data/resources/famfamfam/icons/coins_add.png +0 -0
- data/resources/famfamfam/icons/coins_delete.png +0 -0
- data/resources/famfamfam/icons/color_swatch.png +0 -0
- data/resources/famfamfam/icons/color_wheel.png +0 -0
- data/resources/famfamfam/icons/comment.png +0 -0
- data/resources/famfamfam/icons/comment_add.png +0 -0
- data/resources/famfamfam/icons/comment_delete.png +0 -0
- data/resources/famfamfam/icons/comment_edit.png +0 -0
- data/resources/famfamfam/icons/comments.png +0 -0
- data/resources/famfamfam/icons/comments_add.png +0 -0
- data/resources/famfamfam/icons/comments_delete.png +0 -0
- data/resources/famfamfam/icons/compress.png +0 -0
- data/resources/famfamfam/icons/computer.png +0 -0
- data/resources/famfamfam/icons/computer_add.png +0 -0
- data/resources/famfamfam/icons/computer_delete.png +0 -0
- data/resources/famfamfam/icons/computer_edit.png +0 -0
- data/resources/famfamfam/icons/computer_error.png +0 -0
- data/resources/famfamfam/icons/computer_go.png +0 -0
- data/resources/famfamfam/icons/computer_key.png +0 -0
- data/resources/famfamfam/icons/computer_link.png +0 -0
- data/resources/famfamfam/icons/connect.png +0 -0
- data/resources/famfamfam/icons/contrast.png +0 -0
- data/resources/famfamfam/icons/contrast_decrease.png +0 -0
- data/resources/famfamfam/icons/contrast_high.png +0 -0
- data/resources/famfamfam/icons/contrast_increase.png +0 -0
- data/resources/famfamfam/icons/contrast_low.png +0 -0
- data/resources/famfamfam/icons/control_eject.png +0 -0
- data/resources/famfamfam/icons/control_eject_blue.png +0 -0
- data/resources/famfamfam/icons/control_end.png +0 -0
- data/resources/famfamfam/icons/control_end_blue.png +0 -0
- data/resources/famfamfam/icons/control_equalizer.png +0 -0
- data/resources/famfamfam/icons/control_equalizer_blue.png +0 -0
- data/resources/famfamfam/icons/control_fastforward.png +0 -0
- data/resources/famfamfam/icons/control_fastforward_blue.png +0 -0
- data/resources/famfamfam/icons/control_pause.png +0 -0
- data/resources/famfamfam/icons/control_pause_blue.png +0 -0
- data/resources/famfamfam/icons/control_play.png +0 -0
- data/resources/famfamfam/icons/control_play_blue.png +0 -0
- data/resources/famfamfam/icons/control_repeat.png +0 -0
- data/resources/famfamfam/icons/control_repeat_blue.png +0 -0
- data/resources/famfamfam/icons/control_rewind.png +0 -0
- data/resources/famfamfam/icons/control_rewind_blue.png +0 -0
- data/resources/famfamfam/icons/control_start.png +0 -0
- data/resources/famfamfam/icons/control_start_blue.png +0 -0
- data/resources/famfamfam/icons/control_stop.png +0 -0
- data/resources/famfamfam/icons/control_stop_blue.png +0 -0
- data/resources/famfamfam/icons/controller.png +0 -0
- data/resources/famfamfam/icons/controller_add.png +0 -0
- data/resources/famfamfam/icons/controller_delete.png +0 -0
- data/resources/famfamfam/icons/controller_error.png +0 -0
- data/resources/famfamfam/icons/creditcards.png +0 -0
- data/resources/famfamfam/icons/cross.png +0 -0
- data/resources/famfamfam/icons/css.png +0 -0
- data/resources/famfamfam/icons/css_add.png +0 -0
- data/resources/famfamfam/icons/css_delete.png +0 -0
- data/resources/famfamfam/icons/css_go.png +0 -0
- data/resources/famfamfam/icons/css_valid.png +0 -0
- data/resources/famfamfam/icons/cup.png +0 -0
- data/resources/famfamfam/icons/cup_add.png +0 -0
- data/resources/famfamfam/icons/cup_delete.png +0 -0
- data/resources/famfamfam/icons/cup_edit.png +0 -0
- data/resources/famfamfam/icons/cup_error.png +0 -0
- data/resources/famfamfam/icons/cup_go.png +0 -0
- data/resources/famfamfam/icons/cup_key.png +0 -0
- data/resources/famfamfam/icons/cup_link.png +0 -0
- data/resources/famfamfam/icons/cursor.png +0 -0
- data/resources/famfamfam/icons/cut.png +0 -0
- data/resources/famfamfam/icons/cut_red.png +0 -0
- data/resources/famfamfam/icons/database.png +0 -0
- data/resources/famfamfam/icons/database_add.png +0 -0
- data/resources/famfamfam/icons/database_connect.png +0 -0
- data/resources/famfamfam/icons/database_delete.png +0 -0
- data/resources/famfamfam/icons/database_edit.png +0 -0
- data/resources/famfamfam/icons/database_error.png +0 -0
- data/resources/famfamfam/icons/database_gear.png +0 -0
- data/resources/famfamfam/icons/database_go.png +0 -0
- data/resources/famfamfam/icons/database_key.png +0 -0
- data/resources/famfamfam/icons/database_lightning.png +0 -0
- data/resources/famfamfam/icons/database_link.png +0 -0
- data/resources/famfamfam/icons/database_refresh.png +0 -0
- data/resources/famfamfam/icons/database_save.png +0 -0
- data/resources/famfamfam/icons/database_table.png +0 -0
- data/resources/famfamfam/icons/date.png +0 -0
- data/resources/famfamfam/icons/date_add.png +0 -0
- data/resources/famfamfam/icons/date_delete.png +0 -0
- data/resources/famfamfam/icons/date_edit.png +0 -0
- data/resources/famfamfam/icons/date_error.png +0 -0
- data/resources/famfamfam/icons/date_go.png +0 -0
- data/resources/famfamfam/icons/date_link.png +0 -0
- data/resources/famfamfam/icons/date_magnify.png +0 -0
- data/resources/famfamfam/icons/date_next.png +0 -0
- data/resources/famfamfam/icons/date_previous.png +0 -0
- data/resources/famfamfam/icons/delete.png +0 -0
- data/resources/famfamfam/icons/disconnect.png +0 -0
- data/resources/famfamfam/icons/disk.png +0 -0
- data/resources/famfamfam/icons/disk_multiple.png +0 -0
- data/resources/famfamfam/icons/door.png +0 -0
- data/resources/famfamfam/icons/door_in.png +0 -0
- data/resources/famfamfam/icons/door_open.png +0 -0
- data/resources/famfamfam/icons/door_out.png +0 -0
- data/resources/famfamfam/icons/drink.png +0 -0
- data/resources/famfamfam/icons/drink_empty.png +0 -0
- data/resources/famfamfam/icons/drive.png +0 -0
- data/resources/famfamfam/icons/drive_add.png +0 -0
- data/resources/famfamfam/icons/drive_burn.png +0 -0
- data/resources/famfamfam/icons/drive_cd.png +0 -0
- data/resources/famfamfam/icons/drive_cd_empty.png +0 -0
- data/resources/famfamfam/icons/drive_delete.png +0 -0
- data/resources/famfamfam/icons/drive_disk.png +0 -0
- data/resources/famfamfam/icons/drive_edit.png +0 -0
- data/resources/famfamfam/icons/drive_error.png +0 -0
- data/resources/famfamfam/icons/drive_go.png +0 -0
- data/resources/famfamfam/icons/drive_key.png +0 -0
- data/resources/famfamfam/icons/drive_link.png +0 -0
- data/resources/famfamfam/icons/drive_magnify.png +0 -0
- data/resources/famfamfam/icons/drive_network.png +0 -0
- data/resources/famfamfam/icons/drive_rename.png +0 -0
- data/resources/famfamfam/icons/drive_user.png +0 -0
- data/resources/famfamfam/icons/drive_web.png +0 -0
- data/resources/famfamfam/icons/dvd.png +0 -0
- data/resources/famfamfam/icons/dvd_add.png +0 -0
- data/resources/famfamfam/icons/dvd_delete.png +0 -0
- data/resources/famfamfam/icons/dvd_edit.png +0 -0
- data/resources/famfamfam/icons/dvd_error.png +0 -0
- data/resources/famfamfam/icons/dvd_go.png +0 -0
- data/resources/famfamfam/icons/dvd_key.png +0 -0
- data/resources/famfamfam/icons/dvd_link.png +0 -0
- data/resources/famfamfam/icons/email.png +0 -0
- data/resources/famfamfam/icons/email_add.png +0 -0
- data/resources/famfamfam/icons/email_attach.png +0 -0
- data/resources/famfamfam/icons/email_delete.png +0 -0
- data/resources/famfamfam/icons/email_edit.png +0 -0
- data/resources/famfamfam/icons/email_error.png +0 -0
- data/resources/famfamfam/icons/email_go.png +0 -0
- data/resources/famfamfam/icons/email_link.png +0 -0
- data/resources/famfamfam/icons/email_open.png +0 -0
- data/resources/famfamfam/icons/email_open_image.png +0 -0
- data/resources/famfamfam/icons/emoticon_evilgrin.png +0 -0
- data/resources/famfamfam/icons/emoticon_grin.png +0 -0
- data/resources/famfamfam/icons/emoticon_happy.png +0 -0
- data/resources/famfamfam/icons/emoticon_smile.png +0 -0
- data/resources/famfamfam/icons/emoticon_surprised.png +0 -0
- data/resources/famfamfam/icons/emoticon_tongue.png +0 -0
- data/resources/famfamfam/icons/emoticon_unhappy.png +0 -0
- data/resources/famfamfam/icons/emoticon_waii.png +0 -0
- data/resources/famfamfam/icons/emoticon_wink.png +0 -0
- data/resources/famfamfam/icons/error.png +0 -0
- data/resources/famfamfam/icons/error_add.png +0 -0
- data/resources/famfamfam/icons/error_delete.png +0 -0
- data/resources/famfamfam/icons/error_go.png +0 -0
- data/resources/famfamfam/icons/exclamation.png +0 -0
- data/resources/famfamfam/icons/eye.png +0 -0
- data/resources/famfamfam/icons/feed.png +0 -0
- data/resources/famfamfam/icons/feed_add.png +0 -0
- data/resources/famfamfam/icons/feed_delete.png +0 -0
- data/resources/famfamfam/icons/feed_disk.png +0 -0
- data/resources/famfamfam/icons/feed_edit.png +0 -0
- data/resources/famfamfam/icons/feed_error.png +0 -0
- data/resources/famfamfam/icons/feed_go.png +0 -0
- data/resources/famfamfam/icons/feed_key.png +0 -0
- data/resources/famfamfam/icons/feed_link.png +0 -0
- data/resources/famfamfam/icons/feed_magnify.png +0 -0
- data/resources/famfamfam/icons/female.png +0 -0
- data/resources/famfamfam/icons/film.png +0 -0
- data/resources/famfamfam/icons/film_add.png +0 -0
- data/resources/famfamfam/icons/film_delete.png +0 -0
- data/resources/famfamfam/icons/film_edit.png +0 -0
- data/resources/famfamfam/icons/film_error.png +0 -0
- data/resources/famfamfam/icons/film_go.png +0 -0
- data/resources/famfamfam/icons/film_key.png +0 -0
- data/resources/famfamfam/icons/film_link.png +0 -0
- data/resources/famfamfam/icons/film_save.png +0 -0
- data/resources/famfamfam/icons/find.png +0 -0
- data/resources/famfamfam/icons/flag_blue.png +0 -0
- data/resources/famfamfam/icons/flag_green.png +0 -0
- data/resources/famfamfam/icons/flag_orange.png +0 -0
- data/resources/famfamfam/icons/flag_pink.png +0 -0
- data/resources/famfamfam/icons/flag_purple.png +0 -0
- data/resources/famfamfam/icons/flag_red.png +0 -0
- data/resources/famfamfam/icons/flag_yellow.png +0 -0
- data/resources/famfamfam/icons/folder.png +0 -0
- data/resources/famfamfam/icons/folder_add.png +0 -0
- data/resources/famfamfam/icons/folder_bell.png +0 -0
- data/resources/famfamfam/icons/folder_brick.png +0 -0
- data/resources/famfamfam/icons/folder_bug.png +0 -0
- data/resources/famfamfam/icons/folder_camera.png +0 -0
- data/resources/famfamfam/icons/folder_database.png +0 -0
- data/resources/famfamfam/icons/folder_delete.png +0 -0
- data/resources/famfamfam/icons/folder_edit.png +0 -0
- data/resources/famfamfam/icons/folder_error.png +0 -0
- data/resources/famfamfam/icons/folder_explore.png +0 -0
- data/resources/famfamfam/icons/folder_feed.png +0 -0
- data/resources/famfamfam/icons/folder_find.png +0 -0
- data/resources/famfamfam/icons/folder_go.png +0 -0
- data/resources/famfamfam/icons/folder_heart.png +0 -0
- data/resources/famfamfam/icons/folder_image.png +0 -0
- data/resources/famfamfam/icons/folder_key.png +0 -0
- data/resources/famfamfam/icons/folder_lightbulb.png +0 -0
- data/resources/famfamfam/icons/folder_link.png +0 -0
- data/resources/famfamfam/icons/folder_magnify.png +0 -0
- data/resources/famfamfam/icons/folder_page.png +0 -0
- data/resources/famfamfam/icons/folder_page_white.png +0 -0
- data/resources/famfamfam/icons/folder_palette.png +0 -0
- data/resources/famfamfam/icons/folder_picture.png +0 -0
- data/resources/famfamfam/icons/folder_star.png +0 -0
- data/resources/famfamfam/icons/folder_table.png +0 -0
- data/resources/famfamfam/icons/folder_user.png +0 -0
- data/resources/famfamfam/icons/folder_wrench.png +0 -0
- data/resources/famfamfam/icons/font.png +0 -0
- data/resources/famfamfam/icons/font_add.png +0 -0
- data/resources/famfamfam/icons/font_delete.png +0 -0
- data/resources/famfamfam/icons/font_go.png +0 -0
- data/resources/famfamfam/icons/group.png +0 -0
- data/resources/famfamfam/icons/group_add.png +0 -0
- data/resources/famfamfam/icons/group_delete.png +0 -0
- data/resources/famfamfam/icons/group_edit.png +0 -0
- data/resources/famfamfam/icons/group_error.png +0 -0
- data/resources/famfamfam/icons/group_gear.png +0 -0
- data/resources/famfamfam/icons/group_go.png +0 -0
- data/resources/famfamfam/icons/group_key.png +0 -0
- data/resources/famfamfam/icons/group_link.png +0 -0
- data/resources/famfamfam/icons/heart.png +0 -0
- data/resources/famfamfam/icons/heart_add.png +0 -0
- data/resources/famfamfam/icons/heart_delete.png +0 -0
- data/resources/famfamfam/icons/help.png +0 -0
- data/resources/famfamfam/icons/hourglass.png +0 -0
- data/resources/famfamfam/icons/hourglass_add.png +0 -0
- data/resources/famfamfam/icons/hourglass_delete.png +0 -0
- data/resources/famfamfam/icons/hourglass_go.png +0 -0
- data/resources/famfamfam/icons/hourglass_link.png +0 -0
- data/resources/famfamfam/icons/house.png +0 -0
- data/resources/famfamfam/icons/house_go.png +0 -0
- data/resources/famfamfam/icons/house_link.png +0 -0
- data/resources/famfamfam/icons/html.png +0 -0
- data/resources/famfamfam/icons/html_add.png +0 -0
- data/resources/famfamfam/icons/html_delete.png +0 -0
- data/resources/famfamfam/icons/html_go.png +0 -0
- data/resources/famfamfam/icons/html_valid.png +0 -0
- data/resources/famfamfam/icons/image.png +0 -0
- data/resources/famfamfam/icons/image_add.png +0 -0
- data/resources/famfamfam/icons/image_delete.png +0 -0
- data/resources/famfamfam/icons/image_edit.png +0 -0
- data/resources/famfamfam/icons/image_link.png +0 -0
- data/resources/famfamfam/icons/images.png +0 -0
- data/resources/famfamfam/icons/information.png +0 -0
- data/resources/famfamfam/icons/ipod.png +0 -0
- data/resources/famfamfam/icons/ipod_cast.png +0 -0
- data/resources/famfamfam/icons/ipod_cast_add.png +0 -0
- data/resources/famfamfam/icons/ipod_cast_delete.png +0 -0
- data/resources/famfamfam/icons/ipod_sound.png +0 -0
- data/resources/famfamfam/icons/joystick.png +0 -0
- data/resources/famfamfam/icons/joystick_add.png +0 -0
- data/resources/famfamfam/icons/joystick_delete.png +0 -0
- data/resources/famfamfam/icons/joystick_error.png +0 -0
- data/resources/famfamfam/icons/key.png +0 -0
- data/resources/famfamfam/icons/key_add.png +0 -0
- data/resources/famfamfam/icons/key_delete.png +0 -0
- data/resources/famfamfam/icons/key_go.png +0 -0
- data/resources/famfamfam/icons/keyboard.png +0 -0
- data/resources/famfamfam/icons/keyboard_add.png +0 -0
- data/resources/famfamfam/icons/keyboard_delete.png +0 -0
- data/resources/famfamfam/icons/keyboard_magnify.png +0 -0
- data/resources/famfamfam/icons/layers.png +0 -0
- data/resources/famfamfam/icons/layout.png +0 -0
- data/resources/famfamfam/icons/layout_add.png +0 -0
- data/resources/famfamfam/icons/layout_content.png +0 -0
- data/resources/famfamfam/icons/layout_delete.png +0 -0
- data/resources/famfamfam/icons/layout_edit.png +0 -0
- data/resources/famfamfam/icons/layout_error.png +0 -0
- data/resources/famfamfam/icons/layout_header.png +0 -0
- data/resources/famfamfam/icons/layout_link.png +0 -0
- data/resources/famfamfam/icons/layout_sidebar.png +0 -0
- data/resources/famfamfam/icons/lightbulb.png +0 -0
- data/resources/famfamfam/icons/lightbulb_add.png +0 -0
- data/resources/famfamfam/icons/lightbulb_delete.png +0 -0
- data/resources/famfamfam/icons/lightbulb_off.png +0 -0
- data/resources/famfamfam/icons/lightning.png +0 -0
- data/resources/famfamfam/icons/lightning_add.png +0 -0
- data/resources/famfamfam/icons/lightning_delete.png +0 -0
- data/resources/famfamfam/icons/lightning_go.png +0 -0
- data/resources/famfamfam/icons/link.png +0 -0
- data/resources/famfamfam/icons/link_add.png +0 -0
- data/resources/famfamfam/icons/link_break.png +0 -0
- data/resources/famfamfam/icons/link_delete.png +0 -0
- data/resources/famfamfam/icons/link_edit.png +0 -0
- data/resources/famfamfam/icons/link_error.png +0 -0
- data/resources/famfamfam/icons/link_go.png +0 -0
- data/resources/famfamfam/icons/lock.png +0 -0
- data/resources/famfamfam/icons/lock_add.png +0 -0
- data/resources/famfamfam/icons/lock_break.png +0 -0
- data/resources/famfamfam/icons/lock_delete.png +0 -0
- data/resources/famfamfam/icons/lock_edit.png +0 -0
- data/resources/famfamfam/icons/lock_go.png +0 -0
- data/resources/famfamfam/icons/lock_open.png +0 -0
- data/resources/famfamfam/icons/lorry.png +0 -0
- data/resources/famfamfam/icons/lorry_add.png +0 -0
- data/resources/famfamfam/icons/lorry_delete.png +0 -0
- data/resources/famfamfam/icons/lorry_error.png +0 -0
- data/resources/famfamfam/icons/lorry_flatbed.png +0 -0
- data/resources/famfamfam/icons/lorry_go.png +0 -0
- data/resources/famfamfam/icons/lorry_link.png +0 -0
- data/resources/famfamfam/icons/magifier_zoom_out.png +0 -0
- data/resources/famfamfam/icons/magnifier.png +0 -0
- data/resources/famfamfam/icons/magnifier_zoom_in.png +0 -0
- data/resources/famfamfam/icons/male.png +0 -0
- data/resources/famfamfam/icons/map.png +0 -0
- data/resources/famfamfam/icons/map_add.png +0 -0
- data/resources/famfamfam/icons/map_delete.png +0 -0
- data/resources/famfamfam/icons/map_edit.png +0 -0
- data/resources/famfamfam/icons/map_go.png +0 -0
- data/resources/famfamfam/icons/map_magnify.png +0 -0
- data/resources/famfamfam/icons/medal_bronze_1.png +0 -0
- data/resources/famfamfam/icons/medal_bronze_2.png +0 -0
- data/resources/famfamfam/icons/medal_bronze_3.png +0 -0
- data/resources/famfamfam/icons/medal_bronze_add.png +0 -0
- data/resources/famfamfam/icons/medal_bronze_delete.png +0 -0
- data/resources/famfamfam/icons/medal_gold_1.png +0 -0
- data/resources/famfamfam/icons/medal_gold_2.png +0 -0
- data/resources/famfamfam/icons/medal_gold_3.png +0 -0
- data/resources/famfamfam/icons/medal_gold_add.png +0 -0
- data/resources/famfamfam/icons/medal_gold_delete.png +0 -0
- data/resources/famfamfam/icons/medal_silver_1.png +0 -0
- data/resources/famfamfam/icons/medal_silver_2.png +0 -0
- data/resources/famfamfam/icons/medal_silver_3.png +0 -0
- data/resources/famfamfam/icons/medal_silver_add.png +0 -0
- data/resources/famfamfam/icons/medal_silver_delete.png +0 -0
- data/resources/famfamfam/icons/money.png +0 -0
- data/resources/famfamfam/icons/money_add.png +0 -0
- data/resources/famfamfam/icons/money_delete.png +0 -0
- data/resources/famfamfam/icons/money_dollar.png +0 -0
- data/resources/famfamfam/icons/money_euro.png +0 -0
- data/resources/famfamfam/icons/money_pound.png +0 -0
- data/resources/famfamfam/icons/money_yen.png +0 -0
- data/resources/famfamfam/icons/monitor.png +0 -0
- data/resources/famfamfam/icons/monitor_add.png +0 -0
- data/resources/famfamfam/icons/monitor_delete.png +0 -0
- data/resources/famfamfam/icons/monitor_edit.png +0 -0
- data/resources/famfamfam/icons/monitor_error.png +0 -0
- data/resources/famfamfam/icons/monitor_go.png +0 -0
- data/resources/famfamfam/icons/monitor_lightning.png +0 -0
- data/resources/famfamfam/icons/monitor_link.png +0 -0
- data/resources/famfamfam/icons/mouse.png +0 -0
- data/resources/famfamfam/icons/mouse_add.png +0 -0
- data/resources/famfamfam/icons/mouse_delete.png +0 -0
- data/resources/famfamfam/icons/mouse_error.png +0 -0
- data/resources/famfamfam/icons/music.png +0 -0
- data/resources/famfamfam/icons/new.png +0 -0
- data/resources/famfamfam/icons/newspaper.png +0 -0
- data/resources/famfamfam/icons/newspaper_add.png +0 -0
- data/resources/famfamfam/icons/newspaper_delete.png +0 -0
- data/resources/famfamfam/icons/newspaper_go.png +0 -0
- data/resources/famfamfam/icons/newspaper_link.png +0 -0
- data/resources/famfamfam/icons/note.png +0 -0
- data/resources/famfamfam/icons/note_add.png +0 -0
- data/resources/famfamfam/icons/note_delete.png +0 -0
- data/resources/famfamfam/icons/note_edit.png +0 -0
- data/resources/famfamfam/icons/note_error.png +0 -0
- data/resources/famfamfam/icons/note_go.png +0 -0
- data/resources/famfamfam/icons/overlays.png +0 -0
- data/resources/famfamfam/icons/package.png +0 -0
- data/resources/famfamfam/icons/package_add.png +0 -0
- data/resources/famfamfam/icons/package_delete.png +0 -0
- data/resources/famfamfam/icons/package_go.png +0 -0
- data/resources/famfamfam/icons/package_green.png +0 -0
- data/resources/famfamfam/icons/package_link.png +0 -0
- data/resources/famfamfam/icons/page.png +0 -0
- data/resources/famfamfam/icons/page_add.png +0 -0
- data/resources/famfamfam/icons/page_attach.png +0 -0
- data/resources/famfamfam/icons/page_code.png +0 -0
- data/resources/famfamfam/icons/page_copy.png +0 -0
- data/resources/famfamfam/icons/page_delete.png +0 -0
- data/resources/famfamfam/icons/page_edit.png +0 -0
- data/resources/famfamfam/icons/page_error.png +0 -0
- data/resources/famfamfam/icons/page_excel.png +0 -0
- data/resources/famfamfam/icons/page_find.png +0 -0
- data/resources/famfamfam/icons/page_gear.png +0 -0
- data/resources/famfamfam/icons/page_go.png +0 -0
- data/resources/famfamfam/icons/page_green.png +0 -0
- data/resources/famfamfam/icons/page_key.png +0 -0
- data/resources/famfamfam/icons/page_lightning.png +0 -0
- data/resources/famfamfam/icons/page_link.png +0 -0
- data/resources/famfamfam/icons/page_paintbrush.png +0 -0
- data/resources/famfamfam/icons/page_paste.png +0 -0
- data/resources/famfamfam/icons/page_red.png +0 -0
- data/resources/famfamfam/icons/page_refresh.png +0 -0
- data/resources/famfamfam/icons/page_save.png +0 -0
- data/resources/famfamfam/icons/page_white.png +0 -0
- data/resources/famfamfam/icons/page_white_acrobat.png +0 -0
- data/resources/famfamfam/icons/page_white_actionscript.png +0 -0
- data/resources/famfamfam/icons/page_white_add.png +0 -0
- data/resources/famfamfam/icons/page_white_c.png +0 -0
- data/resources/famfamfam/icons/page_white_camera.png +0 -0
- data/resources/famfamfam/icons/page_white_cd.png +0 -0
- data/resources/famfamfam/icons/page_white_code.png +0 -0
- data/resources/famfamfam/icons/page_white_code_red.png +0 -0
- data/resources/famfamfam/icons/page_white_coldfusion.png +0 -0
- data/resources/famfamfam/icons/page_white_compressed.png +0 -0
- data/resources/famfamfam/icons/page_white_copy.png +0 -0
- data/resources/famfamfam/icons/page_white_cplusplus.png +0 -0
- data/resources/famfamfam/icons/page_white_csharp.png +0 -0
- data/resources/famfamfam/icons/page_white_cup.png +0 -0
- data/resources/famfamfam/icons/page_white_database.png +0 -0
- data/resources/famfamfam/icons/page_white_delete.png +0 -0
- data/resources/famfamfam/icons/page_white_dvd.png +0 -0
- data/resources/famfamfam/icons/page_white_edit.png +0 -0
- data/resources/famfamfam/icons/page_white_error.png +0 -0
- data/resources/famfamfam/icons/page_white_excel.png +0 -0
- data/resources/famfamfam/icons/page_white_find.png +0 -0
- data/resources/famfamfam/icons/page_white_flash.png +0 -0
- data/resources/famfamfam/icons/page_white_freehand.png +0 -0
- data/resources/famfamfam/icons/page_white_gear.png +0 -0
- data/resources/famfamfam/icons/page_white_get.png +0 -0
- data/resources/famfamfam/icons/page_white_go.png +0 -0
- data/resources/famfamfam/icons/page_white_h.png +0 -0
- data/resources/famfamfam/icons/page_white_horizontal.png +0 -0
- data/resources/famfamfam/icons/page_white_key.png +0 -0
- data/resources/famfamfam/icons/page_white_lightning.png +0 -0
- data/resources/famfamfam/icons/page_white_link.png +0 -0
- data/resources/famfamfam/icons/page_white_magnify.png +0 -0
- data/resources/famfamfam/icons/page_white_medal.png +0 -0
- data/resources/famfamfam/icons/page_white_office.png +0 -0
- data/resources/famfamfam/icons/page_white_paint.png +0 -0
- data/resources/famfamfam/icons/page_white_paintbrush.png +0 -0
- data/resources/famfamfam/icons/page_white_paste.png +0 -0
- data/resources/famfamfam/icons/page_white_php.png +0 -0
- data/resources/famfamfam/icons/page_white_picture.png +0 -0
- data/resources/famfamfam/icons/page_white_powerpoint.png +0 -0
- data/resources/famfamfam/icons/page_white_put.png +0 -0
- data/resources/famfamfam/icons/page_white_ruby.png +0 -0
- data/resources/famfamfam/icons/page_white_stack.png +0 -0
- data/resources/famfamfam/icons/page_white_star.png +0 -0
- data/resources/famfamfam/icons/page_white_swoosh.png +0 -0
- data/resources/famfamfam/icons/page_white_text.png +0 -0
- data/resources/famfamfam/icons/page_white_text_width.png +0 -0
- data/resources/famfamfam/icons/page_white_tux.png +0 -0
- data/resources/famfamfam/icons/page_white_vector.png +0 -0
- data/resources/famfamfam/icons/page_white_visualstudio.png +0 -0
- data/resources/famfamfam/icons/page_white_width.png +0 -0
- data/resources/famfamfam/icons/page_white_word.png +0 -0
- data/resources/famfamfam/icons/page_white_world.png +0 -0
- data/resources/famfamfam/icons/page_white_wrench.png +0 -0
- data/resources/famfamfam/icons/page_white_zip.png +0 -0
- data/resources/famfamfam/icons/page_word.png +0 -0
- data/resources/famfamfam/icons/page_world.png +0 -0
- data/resources/famfamfam/icons/paintbrush.png +0 -0
- data/resources/famfamfam/icons/paintcan.png +0 -0
- data/resources/famfamfam/icons/palette.png +0 -0
- data/resources/famfamfam/icons/paste_plain.png +0 -0
- data/resources/famfamfam/icons/paste_word.png +0 -0
- data/resources/famfamfam/icons/pencil.png +0 -0
- data/resources/famfamfam/icons/pencil_add.png +0 -0
- data/resources/famfamfam/icons/pencil_delete.png +0 -0
- data/resources/famfamfam/icons/pencil_go.png +0 -0
- data/resources/famfamfam/icons/phone.png +0 -0
- data/resources/famfamfam/icons/phone_add.png +0 -0
- data/resources/famfamfam/icons/phone_delete.png +0 -0
- data/resources/famfamfam/icons/phone_sound.png +0 -0
- data/resources/famfamfam/icons/photo.png +0 -0
- data/resources/famfamfam/icons/photo_add.png +0 -0
- data/resources/famfamfam/icons/photo_delete.png +0 -0
- data/resources/famfamfam/icons/photo_link.png +0 -0
- data/resources/famfamfam/icons/photos.png +0 -0
- data/resources/famfamfam/icons/picture.png +0 -0
- data/resources/famfamfam/icons/picture_add.png +0 -0
- data/resources/famfamfam/icons/picture_delete.png +0 -0
- data/resources/famfamfam/icons/picture_edit.png +0 -0
- data/resources/famfamfam/icons/picture_empty.png +0 -0
- data/resources/famfamfam/icons/picture_error.png +0 -0
- data/resources/famfamfam/icons/picture_go.png +0 -0
- data/resources/famfamfam/icons/picture_key.png +0 -0
- data/resources/famfamfam/icons/picture_link.png +0 -0
- data/resources/famfamfam/icons/picture_save.png +0 -0
- data/resources/famfamfam/icons/pictures.png +0 -0
- data/resources/famfamfam/icons/pilcrow.png +0 -0
- data/resources/famfamfam/icons/pill.png +0 -0
- data/resources/famfamfam/icons/pill_add.png +0 -0
- data/resources/famfamfam/icons/pill_delete.png +0 -0
- data/resources/famfamfam/icons/pill_go.png +0 -0
- data/resources/famfamfam/icons/plugin.png +0 -0
- data/resources/famfamfam/icons/plugin_add.png +0 -0
- data/resources/famfamfam/icons/plugin_delete.png +0 -0
- data/resources/famfamfam/icons/plugin_disabled.png +0 -0
- data/resources/famfamfam/icons/plugin_edit.png +0 -0
- data/resources/famfamfam/icons/plugin_error.png +0 -0
- data/resources/famfamfam/icons/plugin_go.png +0 -0
- data/resources/famfamfam/icons/plugin_link.png +0 -0
- data/resources/famfamfam/icons/printer.png +0 -0
- data/resources/famfamfam/icons/printer_add.png +0 -0
- data/resources/famfamfam/icons/printer_delete.png +0 -0
- data/resources/famfamfam/icons/printer_empty.png +0 -0
- data/resources/famfamfam/icons/printer_error.png +0 -0
- data/resources/famfamfam/icons/rainbow.png +0 -0
- data/resources/famfamfam/icons/report.png +0 -0
- data/resources/famfamfam/icons/report_add.png +0 -0
- data/resources/famfamfam/icons/report_delete.png +0 -0
- data/resources/famfamfam/icons/report_disk.png +0 -0
- data/resources/famfamfam/icons/report_edit.png +0 -0
- data/resources/famfamfam/icons/report_go.png +0 -0
- data/resources/famfamfam/icons/report_key.png +0 -0
- data/resources/famfamfam/icons/report_link.png +0 -0
- data/resources/famfamfam/icons/report_magnify.png +0 -0
- data/resources/famfamfam/icons/report_picture.png +0 -0
- data/resources/famfamfam/icons/report_user.png +0 -0
- data/resources/famfamfam/icons/report_word.png +0 -0
- data/resources/famfamfam/icons/resultset_first.png +0 -0
- data/resources/famfamfam/icons/resultset_last.png +0 -0
- data/resources/famfamfam/icons/resultset_next.png +0 -0
- data/resources/famfamfam/icons/resultset_previous.png +0 -0
- data/resources/famfamfam/icons/rosette.png +0 -0
- data/resources/famfamfam/icons/rss.png +0 -0
- data/resources/famfamfam/icons/rss_add.png +0 -0
- data/resources/famfamfam/icons/rss_delete.png +0 -0
- data/resources/famfamfam/icons/rss_go.png +0 -0
- data/resources/famfamfam/icons/rss_valid.png +0 -0
- data/resources/famfamfam/icons/ruby.png +0 -0
- data/resources/famfamfam/icons/ruby_add.png +0 -0
- data/resources/famfamfam/icons/ruby_delete.png +0 -0
- data/resources/famfamfam/icons/ruby_gear.png +0 -0
- data/resources/famfamfam/icons/ruby_get.png +0 -0
- data/resources/famfamfam/icons/ruby_go.png +0 -0
- data/resources/famfamfam/icons/ruby_key.png +0 -0
- data/resources/famfamfam/icons/ruby_link.png +0 -0
- data/resources/famfamfam/icons/ruby_put.png +0 -0
- data/resources/famfamfam/icons/script.png +0 -0
- data/resources/famfamfam/icons/script_add.png +0 -0
- data/resources/famfamfam/icons/script_code.png +0 -0
- data/resources/famfamfam/icons/script_code_red.png +0 -0
- data/resources/famfamfam/icons/script_delete.png +0 -0
- data/resources/famfamfam/icons/script_edit.png +0 -0
- data/resources/famfamfam/icons/script_error.png +0 -0
- data/resources/famfamfam/icons/script_gear.png +0 -0
- data/resources/famfamfam/icons/script_go.png +0 -0
- data/resources/famfamfam/icons/script_key.png +0 -0
- data/resources/famfamfam/icons/script_lightning.png +0 -0
- data/resources/famfamfam/icons/script_link.png +0 -0
- data/resources/famfamfam/icons/script_palette.png +0 -0
- data/resources/famfamfam/icons/script_save.png +0 -0
- data/resources/famfamfam/icons/server.png +0 -0
- data/resources/famfamfam/icons/server_add.png +0 -0
- data/resources/famfamfam/icons/server_chart.png +0 -0
- data/resources/famfamfam/icons/server_compressed.png +0 -0
- data/resources/famfamfam/icons/server_connect.png +0 -0
- data/resources/famfamfam/icons/server_database.png +0 -0
- data/resources/famfamfam/icons/server_delete.png +0 -0
- data/resources/famfamfam/icons/server_edit.png +0 -0
- data/resources/famfamfam/icons/server_error.png +0 -0
- data/resources/famfamfam/icons/server_go.png +0 -0
- data/resources/famfamfam/icons/server_key.png +0 -0
- data/resources/famfamfam/icons/server_lightning.png +0 -0
- data/resources/famfamfam/icons/server_link.png +0 -0
- data/resources/famfamfam/icons/server_uncompressed.png +0 -0
- data/resources/famfamfam/icons/shading.png +0 -0
- data/resources/famfamfam/icons/shape_align_bottom.png +0 -0
- data/resources/famfamfam/icons/shape_align_center.png +0 -0
- data/resources/famfamfam/icons/shape_align_left.png +0 -0
- data/resources/famfamfam/icons/shape_align_middle.png +0 -0
- data/resources/famfamfam/icons/shape_align_right.png +0 -0
- data/resources/famfamfam/icons/shape_align_top.png +0 -0
- data/resources/famfamfam/icons/shape_flip_horizontal.png +0 -0
- data/resources/famfamfam/icons/shape_flip_vertical.png +0 -0
- data/resources/famfamfam/icons/shape_group.png +0 -0
- data/resources/famfamfam/icons/shape_handles.png +0 -0
- data/resources/famfamfam/icons/shape_move_back.png +0 -0
- data/resources/famfamfam/icons/shape_move_backwards.png +0 -0
- data/resources/famfamfam/icons/shape_move_forwards.png +0 -0
- data/resources/famfamfam/icons/shape_move_front.png +0 -0
- data/resources/famfamfam/icons/shape_rotate_anticlockwise.png +0 -0
- data/resources/famfamfam/icons/shape_rotate_clockwise.png +0 -0
- data/resources/famfamfam/icons/shape_square.png +0 -0
- data/resources/famfamfam/icons/shape_square_add.png +0 -0
- data/resources/famfamfam/icons/shape_square_delete.png +0 -0
- data/resources/famfamfam/icons/shape_square_edit.png +0 -0
- data/resources/famfamfam/icons/shape_square_error.png +0 -0
- data/resources/famfamfam/icons/shape_square_go.png +0 -0
- data/resources/famfamfam/icons/shape_square_key.png +0 -0
- data/resources/famfamfam/icons/shape_square_link.png +0 -0
- data/resources/famfamfam/icons/shape_ungroup.png +0 -0
- data/resources/famfamfam/icons/shield.png +0 -0
- data/resources/famfamfam/icons/shield_add.png +0 -0
- data/resources/famfamfam/icons/shield_delete.png +0 -0
- data/resources/famfamfam/icons/shield_go.png +0 -0
- data/resources/famfamfam/icons/sitemap.png +0 -0
- data/resources/famfamfam/icons/sitemap_color.png +0 -0
- data/resources/famfamfam/icons/sound.png +0 -0
- data/resources/famfamfam/icons/sound_add.png +0 -0
- data/resources/famfamfam/icons/sound_delete.png +0 -0
- data/resources/famfamfam/icons/sound_low.png +0 -0
- data/resources/famfamfam/icons/sound_mute.png +0 -0
- data/resources/famfamfam/icons/sound_none.png +0 -0
- data/resources/famfamfam/icons/spellcheck.png +0 -0
- data/resources/famfamfam/icons/sport_8ball.png +0 -0
- data/resources/famfamfam/icons/sport_basketball.png +0 -0
- data/resources/famfamfam/icons/sport_football.png +0 -0
- data/resources/famfamfam/icons/sport_golf.png +0 -0
- data/resources/famfamfam/icons/sport_raquet.png +0 -0
- data/resources/famfamfam/icons/sport_shuttlecock.png +0 -0
- data/resources/famfamfam/icons/sport_soccer.png +0 -0
- data/resources/famfamfam/icons/sport_tennis.png +0 -0
- data/resources/famfamfam/icons/star.png +0 -0
- data/resources/famfamfam/icons/status_away.png +0 -0
- data/resources/famfamfam/icons/status_busy.png +0 -0
- data/resources/famfamfam/icons/status_offline.png +0 -0
- data/resources/famfamfam/icons/status_online.png +0 -0
- data/resources/famfamfam/icons/stop.png +0 -0
- data/resources/famfamfam/icons/style.png +0 -0
- data/resources/famfamfam/icons/style_add.png +0 -0
- data/resources/famfamfam/icons/style_delete.png +0 -0
- data/resources/famfamfam/icons/style_edit.png +0 -0
- data/resources/famfamfam/icons/style_go.png +0 -0
- data/resources/famfamfam/icons/sum.png +0 -0
- data/resources/famfamfam/icons/tab.png +0 -0
- data/resources/famfamfam/icons/tab_add.png +0 -0
- data/resources/famfamfam/icons/tab_delete.png +0 -0
- data/resources/famfamfam/icons/tab_edit.png +0 -0
- data/resources/famfamfam/icons/tab_go.png +0 -0
- data/resources/famfamfam/icons/table.png +0 -0
- data/resources/famfamfam/icons/table_add.png +0 -0
- data/resources/famfamfam/icons/table_delete.png +0 -0
- data/resources/famfamfam/icons/table_edit.png +0 -0
- data/resources/famfamfam/icons/table_error.png +0 -0
- data/resources/famfamfam/icons/table_gear.png +0 -0
- data/resources/famfamfam/icons/table_go.png +0 -0
- data/resources/famfamfam/icons/table_key.png +0 -0
- data/resources/famfamfam/icons/table_lightning.png +0 -0
- data/resources/famfamfam/icons/table_link.png +0 -0
- data/resources/famfamfam/icons/table_multiple.png +0 -0
- data/resources/famfamfam/icons/table_refresh.png +0 -0
- data/resources/famfamfam/icons/table_relationship.png +0 -0
- data/resources/famfamfam/icons/table_row_delete.png +0 -0
- data/resources/famfamfam/icons/table_row_insert.png +0 -0
- data/resources/famfamfam/icons/table_save.png +0 -0
- data/resources/famfamfam/icons/table_sort.png +0 -0
- data/resources/famfamfam/icons/tag.png +0 -0
- data/resources/famfamfam/icons/tag_blue.png +0 -0
- data/resources/famfamfam/icons/tag_blue_add.png +0 -0
- data/resources/famfamfam/icons/tag_blue_delete.png +0 -0
- data/resources/famfamfam/icons/tag_blue_edit.png +0 -0
- data/resources/famfamfam/icons/tag_green.png +0 -0
- data/resources/famfamfam/icons/tag_orange.png +0 -0
- data/resources/famfamfam/icons/tag_pink.png +0 -0
- data/resources/famfamfam/icons/tag_purple.png +0 -0
- data/resources/famfamfam/icons/tag_red.png +0 -0
- data/resources/famfamfam/icons/tag_yellow.png +0 -0
- data/resources/famfamfam/icons/telephone.png +0 -0
- data/resources/famfamfam/icons/telephone_add.png +0 -0
- data/resources/famfamfam/icons/telephone_delete.png +0 -0
- data/resources/famfamfam/icons/telephone_edit.png +0 -0
- data/resources/famfamfam/icons/telephone_error.png +0 -0
- data/resources/famfamfam/icons/telephone_go.png +0 -0
- data/resources/famfamfam/icons/telephone_key.png +0 -0
- data/resources/famfamfam/icons/telephone_link.png +0 -0
- data/resources/famfamfam/icons/television.png +0 -0
- data/resources/famfamfam/icons/television_add.png +0 -0
- data/resources/famfamfam/icons/television_delete.png +0 -0
- data/resources/famfamfam/icons/text_align_center.png +0 -0
- data/resources/famfamfam/icons/text_align_justify.png +0 -0
- data/resources/famfamfam/icons/text_align_left.png +0 -0
- data/resources/famfamfam/icons/text_align_right.png +0 -0
- data/resources/famfamfam/icons/text_allcaps.png +0 -0
- data/resources/famfamfam/icons/text_bold.png +0 -0
- data/resources/famfamfam/icons/text_columns.png +0 -0
- data/resources/famfamfam/icons/text_dropcaps.png +0 -0
- data/resources/famfamfam/icons/text_heading_1.png +0 -0
- data/resources/famfamfam/icons/text_heading_2.png +0 -0
- data/resources/famfamfam/icons/text_heading_3.png +0 -0
- data/resources/famfamfam/icons/text_heading_4.png +0 -0
- data/resources/famfamfam/icons/text_heading_5.png +0 -0
- data/resources/famfamfam/icons/text_heading_6.png +0 -0
- data/resources/famfamfam/icons/text_horizontalrule.png +0 -0
- data/resources/famfamfam/icons/text_indent.png +0 -0
- data/resources/famfamfam/icons/text_indent_remove.png +0 -0
- data/resources/famfamfam/icons/text_italic.png +0 -0
- data/resources/famfamfam/icons/text_kerning.png +0 -0
- data/resources/famfamfam/icons/text_letter_omega.png +0 -0
- data/resources/famfamfam/icons/text_letterspacing.png +0 -0
- data/resources/famfamfam/icons/text_linespacing.png +0 -0
- data/resources/famfamfam/icons/text_list_bullets.png +0 -0
- data/resources/famfamfam/icons/text_list_numbers.png +0 -0
- data/resources/famfamfam/icons/text_lowercase.png +0 -0
- data/resources/famfamfam/icons/text_padding_bottom.png +0 -0
- data/resources/famfamfam/icons/text_padding_left.png +0 -0
- data/resources/famfamfam/icons/text_padding_right.png +0 -0
- data/resources/famfamfam/icons/text_padding_top.png +0 -0
- data/resources/famfamfam/icons/text_replace.png +0 -0
- data/resources/famfamfam/icons/text_signature.png +0 -0
- data/resources/famfamfam/icons/text_smallcaps.png +0 -0
- data/resources/famfamfam/icons/text_strikethrough.png +0 -0
- data/resources/famfamfam/icons/text_subscript.png +0 -0
- data/resources/famfamfam/icons/text_superscript.png +0 -0
- data/resources/famfamfam/icons/text_underline.png +0 -0
- data/resources/famfamfam/icons/text_uppercase.png +0 -0
- data/resources/famfamfam/icons/textfield.png +0 -0
- data/resources/famfamfam/icons/textfield_add.png +0 -0
- data/resources/famfamfam/icons/textfield_delete.png +0 -0
- data/resources/famfamfam/icons/textfield_key.png +0 -0
- data/resources/famfamfam/icons/textfield_rename.png +0 -0
- data/resources/famfamfam/icons/thumb_down.png +0 -0
- data/resources/famfamfam/icons/thumb_up.png +0 -0
- data/resources/famfamfam/icons/tick.png +0 -0
- data/resources/famfamfam/icons/time.png +0 -0
- data/resources/famfamfam/icons/time_add.png +0 -0
- data/resources/famfamfam/icons/time_delete.png +0 -0
- data/resources/famfamfam/icons/time_go.png +0 -0
- data/resources/famfamfam/icons/timeline_marker.png +0 -0
- data/resources/famfamfam/icons/transmit.png +0 -0
- data/resources/famfamfam/icons/transmit_add.png +0 -0
- data/resources/famfamfam/icons/transmit_blue.png +0 -0
- data/resources/famfamfam/icons/transmit_delete.png +0 -0
- data/resources/famfamfam/icons/transmit_edit.png +0 -0
- data/resources/famfamfam/icons/transmit_error.png +0 -0
- data/resources/famfamfam/icons/transmit_go.png +0 -0
- data/resources/famfamfam/icons/tux.png +0 -0
- data/resources/famfamfam/icons/user.png +0 -0
- data/resources/famfamfam/icons/user_add.png +0 -0
- data/resources/famfamfam/icons/user_comment.png +0 -0
- data/resources/famfamfam/icons/user_delete.png +0 -0
- data/resources/famfamfam/icons/user_edit.png +0 -0
- data/resources/famfamfam/icons/user_female.png +0 -0
- data/resources/famfamfam/icons/user_go.png +0 -0
- data/resources/famfamfam/icons/user_gray.png +0 -0
- data/resources/famfamfam/icons/user_green.png +0 -0
- data/resources/famfamfam/icons/user_orange.png +0 -0
- data/resources/famfamfam/icons/user_red.png +0 -0
- data/resources/famfamfam/icons/user_suit.png +0 -0
- data/resources/famfamfam/icons/vcard.png +0 -0
- data/resources/famfamfam/icons/vcard_add.png +0 -0
- data/resources/famfamfam/icons/vcard_delete.png +0 -0
- data/resources/famfamfam/icons/vcard_edit.png +0 -0
- data/resources/famfamfam/icons/vector.png +0 -0
- data/resources/famfamfam/icons/vector_add.png +0 -0
- data/resources/famfamfam/icons/vector_delete.png +0 -0
- data/resources/famfamfam/icons/wand.png +0 -0
- data/resources/famfamfam/icons/weather_clouds.png +0 -0
- data/resources/famfamfam/icons/weather_cloudy.png +0 -0
- data/resources/famfamfam/icons/weather_lightning.png +0 -0
- data/resources/famfamfam/icons/weather_rain.png +0 -0
- data/resources/famfamfam/icons/weather_snow.png +0 -0
- data/resources/famfamfam/icons/weather_sun.png +0 -0
- data/resources/famfamfam/icons/webcam.png +0 -0
- data/resources/famfamfam/icons/webcam_add.png +0 -0
- data/resources/famfamfam/icons/webcam_delete.png +0 -0
- data/resources/famfamfam/icons/webcam_error.png +0 -0
- data/resources/famfamfam/icons/world.png +0 -0
- data/resources/famfamfam/icons/world_add.png +0 -0
- data/resources/famfamfam/icons/world_delete.png +0 -0
- data/resources/famfamfam/icons/world_edit.png +0 -0
- data/resources/famfamfam/icons/world_go.png +0 -0
- data/resources/famfamfam/icons/world_link.png +0 -0
- data/resources/famfamfam/icons/wrench.png +0 -0
- data/resources/famfamfam/icons/wrench_orange.png +0 -0
- data/resources/famfamfam/icons/xhtml.png +0 -0
- data/resources/famfamfam/icons/xhtml_add.png +0 -0
- data/resources/famfamfam/icons/xhtml_delete.png +0 -0
- data/resources/famfamfam/icons/xhtml_go.png +0 -0
- data/resources/famfamfam/icons/xhtml_valid.png +0 -0
- data/resources/famfamfam/icons/zoom.png +0 -0
- data/resources/famfamfam/icons/zoom_in.png +0 -0
- data/resources/famfamfam/icons/zoom_out.png +0 -0
- data/resources/famfamfam/readme.html +1495 -0
- data/resources/famfamfam/readme.txt +22 -0
- data/resources/listing.rhtml +68 -0
- data/spec/dir_handler_spec.rb +13 -0
- data/spec/error_handler_spec.rb +13 -0
- data/spec/server_spec.rb +53 -0
- data/spec/spec_helper.rb +8 -0
- 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
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
|