Full Code of Bettermeans/bettermeans for AI

master 3cc796930874 cached
1916 files
7.9 MB
2.2M tokens
6068 symbols
1 requests
Download .txt
Showing preview only (8,718K chars total). Download the full file or copy to clipboard to get everything.
Repository: Bettermeans/bettermeans
Branch: master
Commit: 3cc796930874
Files: 1916
Total size: 7.9 MB

Directory structure:
gitextract_i_av7aco/

├── .gitignore
├── .gitmodules
├── .rspec
├── .rvmrc
├── Gemfile
├── Guardfile
├── README.md
├── Rakefile
├── app/
│   ├── controllers/
│   │   ├── account_controller.rb
│   │   ├── activity_stream_preferences_controller.rb
│   │   ├── activity_stream_preferences_module.rb
│   │   ├── activity_streams_controller.rb
│   │   ├── activity_streams_module.rb
│   │   ├── admin_controller.rb
│   │   ├── application_controller.rb
│   │   ├── attachments_controller.rb
│   │   ├── auth_sources_controller.rb
│   │   ├── boards_controller.rb
│   │   ├── comments_controller.rb
│   │   ├── credit_distributions_controller.rb
│   │   ├── credit_transfers_controller.rb
│   │   ├── credits_controller.rb
│   │   ├── documents_controller.rb
│   │   ├── email_updates_controller.rb
│   │   ├── enterprises_controller.rb
│   │   ├── enumerations_controller.rb
│   │   ├── help_controller.rb
│   │   ├── help_sections_controller.rb
│   │   ├── home_controller.rb
│   │   ├── hourly_types_controller.rb
│   │   ├── invitations_controller.rb
│   │   ├── issue_invitations_controller.rb
│   │   ├── issue_relations_controller.rb
│   │   ├── issue_statuses_controller.rb
│   │   ├── issue_votes_controller.rb
│   │   ├── issues_controller.rb
│   │   ├── journals_controller.rb
│   │   ├── mail_handler_controller.rb
│   │   ├── mails_controller.rb
│   │   ├── members_controller.rb
│   │   ├── messages_controller.rb
│   │   ├── motion_votes_controller.rb
│   │   ├── motions_controller.rb
│   │   ├── my_controller.rb
│   │   ├── news_controller.rb
│   │   ├── notifications_controller.rb
│   │   ├── projects_controller.rb
│   │   ├── queries_controller.rb
│   │   ├── quotes_controller.rb
│   │   ├── recurly_notifications_controller.rb
│   │   ├── reports_controller.rb
│   │   ├── reputations_controller.rb
│   │   ├── retro_ratings_controller.rb
│   │   ├── retros_controller.rb
│   │   ├── roles_controller.rb
│   │   ├── search_controller.rb
│   │   ├── settings_controller.rb
│   │   ├── shares_controller.rb
│   │   ├── todos_controller.rb
│   │   ├── trackers_controller.rb
│   │   ├── users_controller.rb
│   │   ├── votes_controller.rb
│   │   ├── watchers_controller.rb
│   │   ├── welcome_controller.rb
│   │   ├── wiki_controller.rb
│   │   ├── wikis_controller.rb
│   │   └── workflows_controller.rb
│   ├── helpers/
│   │   ├── admin_helper.rb
│   │   ├── application_helper.rb
│   │   ├── attachments_helper.rb
│   │   ├── groups_helper.rb
│   │   ├── issue_relations_helper.rb
│   │   ├── issues_helper.rb
│   │   ├── journals_helper.rb
│   │   ├── messages_helper.rb
│   │   ├── motions_helper.rb
│   │   ├── my_helper.rb
│   │   ├── news_helper.rb
│   │   ├── projects_helper.rb
│   │   ├── queries_helper.rb
│   │   ├── reports_helper.rb
│   │   ├── retros_helper.rb
│   │   ├── search_helper.rb
│   │   ├── settings_helper.rb
│   │   ├── sort_helper.rb
│   │   ├── users_helper.rb
│   │   ├── watchers_helper.rb
│   │   └── wiki_helper.rb
│   ├── models/
│   │   ├── activity_stream.rb
│   │   ├── activity_stream_preference.rb
│   │   ├── activity_stream_total.rb
│   │   ├── attachment.rb
│   │   ├── auth_source.rb
│   │   ├── auth_source_ldap.rb
│   │   ├── board.rb
│   │   ├── comment.rb
│   │   ├── credit.rb
│   │   ├── credit_distribution.rb
│   │   ├── credit_transfer.rb
│   │   ├── daily_digest.rb
│   │   ├── document.rb
│   │   ├── document_observer.rb
│   │   ├── email_update.rb
│   │   ├── enabled_module.rb
│   │   ├── enterprise.rb
│   │   ├── enumeration.rb
│   │   ├── help_section.rb
│   │   ├── hourly_type.rb
│   │   ├── invitation.rb
│   │   ├── issue.rb
│   │   ├── issue_observer.rb
│   │   ├── issue_relation.rb
│   │   ├── issue_status.rb
│   │   ├── issue_vote.rb
│   │   ├── journal.rb
│   │   ├── journal_detail.rb
│   │   ├── journal_observer.rb
│   │   ├── mail.rb
│   │   ├── mail_handler.rb
│   │   ├── mailer.rb
│   │   ├── member.rb
│   │   ├── member_role.rb
│   │   ├── message.rb
│   │   ├── message_observer.rb
│   │   ├── motion.rb
│   │   ├── motion_vote.rb
│   │   ├── news.rb
│   │   ├── news_observer.rb
│   │   ├── notification.rb
│   │   ├── open_id_authentication_association.rb
│   │   ├── open_id_authentication_nonces.rb
│   │   ├── personal_welcome.rb
│   │   ├── plan.rb
│   │   ├── plugin_schema_info.rb
│   │   ├── project.rb
│   │   ├── query.rb
│   │   ├── quote.rb
│   │   ├── reputation.rb
│   │   ├── retro.rb
│   │   ├── retro_rating.rb
│   │   ├── role.rb
│   │   ├── setting.rb
│   │   ├── share.rb
│   │   ├── todo.rb
│   │   ├── token.rb
│   │   ├── track.rb
│   │   ├── tracker.rb
│   │   ├── user.rb
│   │   ├── user_preference.rb
│   │   ├── watcher.rb
│   │   ├── wiki.rb
│   │   ├── wiki_content.rb
│   │   ├── wiki_content_observer.rb
│   │   ├── wiki_page.rb
│   │   ├── wiki_redirect.rb
│   │   └── workflow.rb
│   └── views/
│       ├── account/
│       │   ├── login.html.erb
│       │   ├── lost_password.html.erb
│       │   ├── password_recovery.html.erb
│       │   └── register.html.erb
│       ├── activity_stream_preferences/
│       │   └── index.html.erb
│       ├── activity_streams/
│       │   ├── _activity_comment.html.erb
│       │   ├── _activity_stream.html.erb
│       │   ├── _activity_stream_feed.atom.builder
│       │   ├── _activity_stream_group.erb
│       │   ├── _activity_stream_list.html.erb
│       │   ├── _activity_stream_sub.html.erb
│       │   ├── _indirect_object.html.erb
│       │   ├── _table_header.html.erb
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── admin/
│       │   ├── _menu.html.erb
│       │   ├── _no_data.html.erb
│       │   ├── index.html.erb
│       │   ├── info.html.erb
│       │   ├── plugins.html.erb
│       │   ├── projects.html.erb
│       │   └── user_stats.html.erb
│       ├── attachments/
│       │   ├── _form.html.erb
│       │   ├── _links.html.erb
│       │   ├── _table.erb
│       │   ├── diff.html.erb
│       │   └── file.html.erb
│       ├── auth_sources/
│       │   ├── _form.html.erb
│       │   ├── edit.html.erb
│       │   ├── list.html.erb
│       │   └── new.html.erb
│       ├── boards/
│       │   ├── _form.html.erb
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── common/
│       │   ├── 403.html.erb
│       │   ├── 404.html.erb
│       │   ├── _calendar.html.erb
│       │   ├── _diff.html.erb
│       │   ├── _file.html.erb
│       │   ├── _main_menu_home.html.erb
│       │   ├── _preview.html.erb
│       │   ├── _tabs.html.erb
│       │   └── feed.atom.rxml
│       ├── credit_distributions/
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── credit_transfers/
│       │   ├── _credit_transfer_history.html.erb
│       │   ├── _eligible_recipients.erb
│       │   ├── _new_credit_transfer.html.erb
│       │   └── index.html.erb
│       ├── credits/
│       │   ├── _credit_breakdown.html.erb
│       │   ├── _credit_history.html.erb
│       │   ├── _credit_queue.html.erb
│       │   ├── _my_credits.html.erb
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── documents/
│       │   ├── _document.html.erb
│       │   ├── _form.html.erb
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── email_updates/
│       │   └── new.html.erb
│       ├── enterprises/
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── enumerations/
│       │   ├── _form.html.erb
│       │   ├── destroy.html.erb
│       │   ├── edit.html.erb
│       │   ├── list.html.erb
│       │   └── new.html.erb
│       ├── help/
│       │   └── show.html.erb
│       ├── help_sections/
│       │   ├── _show.html.erb
│       │   ├── _show_popup.html.erb
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── home/
│       │   ├── _footer.html.erb
│       │   ├── _header.html.erb
│       │   ├── about.html.erb
│       │   ├── apps.html.erb
│       │   ├── contact.html.erb
│       │   ├── elements.html.erb
│       │   ├── features_original.html.erb
│       │   ├── how.html.erb
│       │   ├── hq.html.erb
│       │   ├── index.html.erb
│       │   ├── library.html.erb
│       │   ├── old_index.html.erb
│       │   ├── old_index2.html.erb
│       │   ├── old_inviteonline.html.erb
│       │   ├── open_enterprise_governance_model.html.erb
│       │   ├── pricing.html.erb
│       │   ├── privacy.html.erb
│       │   ├── services.html.erb
│       │   ├── signup.html.erb
│       │   ├── tour.html.erb
│       │   ├── user_agreement.html.erb
│       │   ├── webdesign.html.erb
│       │   ├── what.html.erb
│       │   └── why.html.erb
│       ├── hourly_types/
│       │   ├── _form.html.erb
│       │   ├── edit.html.erb
│       │   └── new.html.erb
│       ├── invitations/
│       │   ├── _generic_invitation.html.erb
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── issue_relations/
│       │   └── _form.html.erb
│       ├── issue_statuses/
│       │   ├── _form.html.erb
│       │   ├── edit.html.erb
│       │   ├── list.html.erb
│       │   └── new.html.erb
│       ├── issue_votes/
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── issues/
│       │   ├── _action_menu.html.erb
│       │   ├── _attributes.html.erb
│       │   ├── _edit.html.erb
│       │   ├── _form.html.erb
│       │   ├── _form_add_team_member.html.erb
│       │   ├── _form_update.html.erb
│       │   ├── _history.html.erb
│       │   ├── _joined_by.html.erb
│       │   ├── _list.html.erb
│       │   ├── _list_simple.html.erb
│       │   ├── _list_very_simple.html.erb
│       │   ├── _relations.html.erb
│       │   ├── _sidebar.html.erb
│       │   ├── calendar.html.erb
│       │   ├── changes.rxml
│       │   ├── context_menu.html.erb
│       │   ├── edit.html.erb
│       │   ├── gantt.html.erb
│       │   ├── index.html.erb
│       │   ├── move.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── journals/
│       │   ├── _notes_form.html.erb
│       │   ├── edit.rjs
│       │   └── update.rjs
│       ├── layouts/
│       │   ├── _account_menu.html.erb
│       │   ├── activescaffold.html.erb
│       │   ├── admin.html.erb
│       │   ├── base.html.erb
│       │   ├── blank.html.erb
│       │   ├── gooey.html.erb
│       │   ├── help_sections.html.erb
│       │   ├── issue_blank.html.erb
│       │   ├── mailer.text.html.erb
│       │   ├── mailer.text.plain.erb
│       │   └── static.html.erb
│       ├── mailer/
│       │   ├── _issue_text_html.html.erb
│       │   ├── _issue_text_plain.html.erb
│       │   ├── account_activated.text.html.html.erb
│       │   ├── account_activated.text.plain.html.erb
│       │   ├── account_activation_request.text.html.html.erb
│       │   ├── account_activation_request.text.plain.html.erb
│       │   ├── account_information.text.html.html.erb
│       │   ├── account_information.text.plain.html.erb
│       │   ├── attachments_added.text.html.html.erb
│       │   ├── attachments_added.text.plain.html.erb
│       │   ├── daily_digest.text.html.html.erb
│       │   ├── daily_digest.text.plain.html.erb
│       │   ├── document_added.text.html.html.erb
│       │   ├── document_added.text.plain.html.erb
│       │   ├── email_update_activation.text.html.html.erb
│       │   ├── email_update_activation.text.plain.html.erb
│       │   ├── invitation_add.text.html.html.erb
│       │   ├── invitation_add.text.plain.html.erb
│       │   ├── invitation_remind.text.html.html.erb
│       │   ├── invitation_remind.text.plain.html.erb
│       │   ├── issue_add.text.html.html.erb
│       │   ├── issue_add.text.plain.html.erb
│       │   ├── issue_edit.text.html.html.erb
│       │   ├── issue_edit.text.plain.html.erb
│       │   ├── lost_password.text.html.html.erb
│       │   ├── lost_password.text.plain.html.erb
│       │   ├── message_posted.text.html.html.erb
│       │   ├── message_posted.text.plain.html.erb
│       │   ├── news_added.text.html.html.erb
│       │   ├── news_added.text.plain.html.erb
│       │   ├── personal_welcome.text.html.html.erb
│       │   ├── personal_welcome.text.plain.html.erb
│       │   ├── register.text.html.html.erb
│       │   ├── register.text.plain.html.erb
│       │   ├── reminder.text.html.html.erb
│       │   ├── reminder.text.plain.html.erb
│       │   ├── test.text.html.html.erb
│       │   ├── test.text.plain.html.erb
│       │   ├── wiki_content_added.text.html.html.erb
│       │   ├── wiki_content_added.text.plain.html.erb
│       │   ├── wiki_content_updated.text.html.html.erb
│       │   └── wiki_content_updated.text.plain.html.erb
│       ├── mails/
│       │   ├── _inbox.html.erb
│       │   ├── _sent.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── members/
│       │   └── autocomplete_for_member.html.erb
│       ├── messages/
│       │   ├── _form.html.erb
│       │   ├── _motion_topic.html.erb
│       │   ├── edit.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── motion_votes/
│       │   ├── _vote.html.erb
│       │   ├── cast_vote.js.rjs
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── motions/
│       │   ├── _motions.html.erb
│       │   ├── edit.html.erb
│       │   ├── eligible_users.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── my/
│       │   ├── _belong_to_projects.html.erb
│       │   ├── _billing_form.html.erb
│       │   ├── _block.html.erb
│       │   ├── _my_projects.html.erb
│       │   ├── _plan_description.html.erb
│       │   ├── _plan_descriptions.html.erb
│       │   ├── _project_list.html.erb
│       │   ├── _sidebar.html.erb
│       │   ├── _usage_stats.html.erb
│       │   ├── account.html.erb
│       │   ├── blocks/
│       │   │   ├── _calendar.html.erb
│       │   │   ├── _documents.html.erb
│       │   │   ├── _issuesassignedtome.html.erb
│       │   │   ├── _issuesreportedbyme.html.erb
│       │   │   ├── _issueswatched.html.erb
│       │   │   └── _news.html.erb
│       │   ├── issues.html.erb
│       │   ├── page.html.erb
│       │   ├── page_layout.html.erb
│       │   ├── password.html.erb
│       │   ├── projects.html.erb
│       │   └── upgrade.html.erb
│       ├── news/
│       │   ├── _form.html.erb
│       │   ├── _news.html.erb
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── notifications/
│       │   ├── _credits_distributed.erb
│       │   ├── _credits_transferred.html.erb
│       │   ├── _invitation.erb
│       │   ├── _issue_joined.html.erb
│       │   ├── _issue_left.html.erb
│       │   ├── _issue_team_member_added.html.erb
│       │   ├── _issue_team_member_removed.html.erb
│       │   ├── _mention.html.erb
│       │   ├── _message.html.erb
│       │   ├── _motion_started.erb
│       │   ├── _new_role.erb
│       │   ├── _retro_ended.erb
│       │   ├── _retro_started.erb
│       │   ├── _trial_expired.html.erb
│       │   ├── _unresponded.html.erb
│       │   ├── _usage_over.html.erb
│       │   ├── edit.html.erb
│       │   ├── error.js.rjs
│       │   ├── hide.js.rjs
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── projects/
│       │   ├── _active_member_box.html.erb
│       │   ├── _active_member_box_simple.html.erb
│       │   ├── _clearance_member_box.html.erb
│       │   ├── _dashboard_javascript_variables.html.erb
│       │   ├── _edit.html.erb
│       │   ├── _form.html.erb
│       │   ├── _member_box.html.erb
│       │   ├── _point_scale.html.erb
│       │   ├── _project_list.html.erb
│       │   ├── _project_summary.html.erb
│       │   ├── _projects_list_simple.html.erb
│       │   ├── _subprojects.html.erb
│       │   ├── _team_link.html.erb
│       │   ├── _team_list.html.erb
│       │   ├── _team_list_member.html.erb
│       │   ├── activity.html.erb
│       │   ├── add.html.erb
│       │   ├── add_file.html.erb
│       │   ├── copy.html.erb
│       │   ├── core_vote.js.rjs
│       │   ├── credits.html.erb
│       │   ├── dashboard.html.erb
│       │   ├── index.html.erb
│       │   ├── list_files.html.erb
│       │   ├── list_members.html.erb
│       │   ├── map.html.erb
│       │   ├── move.html.erb
│       │   ├── overview.html.erb
│       │   ├── settings/
│       │   │   ├── _boards.html.erb
│       │   │   ├── _hourly_types.html.erb
│       │   │   ├── _members.html.erb
│       │   │   ├── _modules.html.erb
│       │   │   ├── _select_new_member.html.erb
│       │   │   └── _wiki.html.erb
│       │   ├── settings.html.erb
│       │   ├── show.png.flexi
│       │   ├── team.html.erb
│       │   └── team_update.js.rjs
│       ├── queries/
│       │   ├── _columns.html.erb
│       │   ├── _filters.html.erb
│       │   ├── _form.html.erb
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   └── new.html.erb
│       ├── quotes/
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── reports/
│       │   ├── _details.html.erb
│       │   ├── _simple.html.erb
│       │   ├── issue_report.html.erb
│       │   └── issue_report_details.html.erb
│       ├── reputations/
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── retro_ratings/
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── retros/
│       │   ├── _issue_details.html.erb
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   ├── show.html.erb
│       │   └── show_multiple.html.erb
│       ├── roles/
│       │   ├── _form.html.erb
│       │   ├── edit.html.erb
│       │   ├── list.html.erb
│       │   ├── new.html.erb
│       │   └── report.html.erb
│       ├── search/
│       │   └── index.html.erb
│       ├── settings/
│       │   ├── _authentication.html.erb
│       │   ├── _display.html.erb
│       │   ├── _general.html.erb
│       │   ├── _issues.html.erb
│       │   ├── _mail_handler.html.erb
│       │   ├── _notifications.html.erb
│       │   ├── _projects.html.erb
│       │   ├── edit.html.erb
│       │   └── plugin.html.erb
│       ├── shares/
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── todos/
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── trackers/
│       │   ├── _form.html.erb
│       │   ├── edit.html.erb
│       │   ├── list.html.erb
│       │   └── new.html.erb
│       ├── users/
│       │   ├── _activity.html.erb
│       │   ├── _form.html.erb
│       │   ├── _general.html.erb
│       │   ├── _general_info.html.erb
│       │   ├── _membership.html.erb
│       │   ├── _memberships.html.erb
│       │   ├── _reputation.html.erb
│       │   ├── add.html.erb
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   └── show.html.erb
│       ├── watchers/
│       │   └── _watchers.html.erb
│       ├── welcome/
│       │   ├── _list_workstreams.html.erb
│       │   ├── index.html.erb
│       │   └── robots.html.erb
│       ├── wiki/
│       │   ├── _content.html.erb
│       │   ├── _sidebar.html.erb
│       │   ├── annotate.html.erb
│       │   ├── destroy.html.erb
│       │   ├── diff.html.erb
│       │   ├── edit.html.erb
│       │   ├── export.html.erb
│       │   ├── export_multiple.html.erb
│       │   ├── history.html.erb
│       │   ├── rename.html.erb
│       │   ├── show.html.erb
│       │   ├── special_date_index.html.erb
│       │   └── special_page_index.html.erb
│       ├── wikis/
│       │   └── destroy.html.erb
│       └── workflows/
│           ├── _action_menu.html.erb
│           ├── copy.html.erb
│           ├── edit.html.erb
│           └── index.html.erb
├── config/
│   ├── additional_environment.rb.example
│   ├── boot.rb
│   ├── database.yml.example
│   ├── email.yml.example
│   ├── environment.rb
│   ├── environments/
│   │   ├── cucumber.rb
│   │   ├── demo.rb
│   │   ├── development.rb
│   │   ├── production.rb
│   │   ├── selenium.rb
│   │   ├── test.rb
│   │   ├── test_pgsql.rb
│   │   └── test_sqlite3.rb
│   ├── exceptional.yml
│   ├── initializers/
│   │   ├── 10-patches.rb
│   │   ├── 20-mime_types.rb
│   │   ├── 30-redmine.rb
│   │   ├── 40-email.rb
│   │   ├── activity_streams.rb
│   │   ├── admin_data.rb
│   │   ├── aws_s3.rb
│   │   ├── backtrace_silencers.rb
│   │   ├── bigdecimal-segfault-fix.rb
│   │   ├── hash.rb
│   │   ├── inflections.rb
│   │   ├── recurly_config.rb
│   │   └── timeout.rb
│   ├── locales/
│   │   └── en.yml
│   ├── preinitializer.rb
│   ├── rails_best_practices.yml
│   ├── routes.rb
│   ├── s3.yml
│   ├── selenium.yml
│   └── settings.yml
├── cucumber.yml
├── db/
│   ├── migrate/
│   │   ├── 20110320055526_acts_as_taggable_on_migration.rb
│   │   ├── 20110329230314_add_projectid_to_taggable.rb
│   │   └── 20110330041648_add_tags_to_issue.rb
│   ├── schema.rb
│   └── seeds.rb
├── deploy
├── doc/
│   ├── COPYING
│   ├── INSTALL
│   ├── README_FOR_APP
│   └── RUNNING_TESTS
├── extra/
│   ├── mail_handler/
│   │   └── rdm-mailhandler.rb
│   └── sample_plugin/
│       ├── README
│       ├── app/
│       │   ├── controllers/
│       │   │   └── example_controller.rb
│       │   ├── models/
│       │   │   └── meeting.rb
│       │   └── views/
│       │       ├── example/
│       │       │   ├── say_goodbye.html.erb
│       │       │   └── say_hello.html.erb
│       │       ├── my/
│       │       │   └── blocks/
│       │       │       └── _sample_block.html.erb
│       │       └── settings/
│       │           └── _sample_plugin_settings.html.erb
│       ├── assets/
│       │   └── stylesheets/
│       │       └── example.css
│       ├── config/
│       │   └── locales/
│       │       ├── en.yml
│       │       └── fr.yml
│       ├── db/
│       │   └── migrate/
│       │       └── 001_create_meetings.rb
│       └── init.rb
├── lib/
│   ├── activity_streams/
│   │   ├── log_activity_streams.rb
│   │   └── routes.rb
│   ├── activity_streams.rb
│   ├── ar_condition.rb
│   ├── diff.rb
│   ├── faster_csv.rb
│   ├── float.rb
│   ├── generators/
│   │   ├── redmine_plugin/
│   │   │   ├── USAGE
│   │   │   ├── redmine_plugin_generator.rb
│   │   │   └── templates/
│   │   │       ├── README.rdoc
│   │   │       ├── en.yml
│   │   │       ├── en_rails_i18n.yml
│   │   │       ├── init.rb.erb
│   │   │       └── test_helper.rb.erb
│   │   ├── redmine_plugin_controller/
│   │   │   ├── USAGE
│   │   │   ├── redmine_plugin_controller_generator.rb
│   │   │   └── templates/
│   │   │       ├── controller.rb.erb
│   │   │       ├── functional_test.rb.erb
│   │   │       ├── helper.rb.erb
│   │   │       └── view.html.erb
│   │   └── redmine_plugin_model/
│   │       ├── USAGE
│   │       ├── redmine_plugin_model_generator.rb
│   │       └── templates/
│   │           ├── fixtures.yml
│   │           ├── migration.rb.erb
│   │           ├── model.rb.erb
│   │           └── unit_test.rb.erb
│   ├── mention.rb
│   ├── redcloth3.rb
│   ├── redmine/
│   │   ├── about.rb
│   │   ├── access_control.rb
│   │   ├── access_keys.rb
│   │   ├── activity/
│   │   │   └── fetcher.rb
│   │   ├── activity.rb
│   │   ├── core_ext/
│   │   │   ├── string/
│   │   │   │   ├── conversions.rb
│   │   │   │   └── inflections.rb
│   │   │   └── string.rb
│   │   ├── core_ext.rb
│   │   ├── default_data/
│   │   │   └── loader.rb
│   │   ├── export/
│   │   │   └── pdf.rb
│   │   ├── helpers/
│   │   │   ├── calendar.rb
│   │   │   └── gantt.rb
│   │   ├── i18n.rb
│   │   ├── imap.rb
│   │   ├── info.rb
│   │   ├── menu_manager.rb
│   │   ├── mime_type.rb
│   │   ├── platform.rb
│   │   ├── plugin.rb
│   │   ├── search.rb
│   │   ├── themes.rb
│   │   ├── unified_diff.rb
│   │   ├── utils.rb
│   │   ├── version.rb
│   │   ├── views/
│   │   │   ├── my_page/
│   │   │   │   └── block.rb
│   │   │   └── other_formats_builder.rb
│   │   ├── wiki_formatting/
│   │   │   ├── macros.rb
│   │   │   └── textile/
│   │   │       ├── formatter.rb
│   │   │       └── helper.rb
│   │   └── wiki_formatting.rb
│   ├── redmine.rb
│   ├── string.rb
│   ├── tabular_form_builder.rb
│   └── tasks/
│       ├── autoaccept_commitrequests.rake
│       ├── backup.rake
│       ├── bootstrap.rake
│       ├── cleanup.rake
│       ├── close_retros.rake
│       ├── cron.rake
│       ├── cucumber.rake
│       ├── custom.rake
│       ├── deprecated.rake
│       ├── email.rake
│       ├── extract_fixtures.rake
│       ├── fetch_changesets.rake
│       ├── initializers.rake
│       ├── load_default_data.rake
│       ├── locales.rake
│       ├── metrics.rake
│       ├── migrate_from_mantis.rake
│       ├── migrate_from_trac.rake
│       ├── migrate_plugins.rake
│       ├── plugins.rake
│       ├── reek.rake
│       ├── reminder.rake
│       ├── remove_problem_type.rake
│       ├── reset_all_passwords.rake
│       ├── rspec.rake
│       ├── steak.rake
│       ├── testing.rake
│       ├── update_item_statuses.rake
│       └── watchers.rake
├── public/
│   ├── .htaccess
│   ├── 404.html
│   ├── 500.html
│   ├── help/
│   │   ├── wiki_syntax.html
│   │   └── wiki_syntax_detailed.html
│   ├── images/
│   │   ├── gallery/
│   │   │   └── index.sof
│   │   ├── inner-background.psd
│   │   └── static/
│   │       ├── HomePageMain.psd
│   │       ├── Untitled-1.psd
│   │       ├── Untitled-2.psd
│   │       ├── call-us.psd
│   │       ├── col-img3.psd
│   │       ├── index.sof
│   │       ├── landingmockup.psd
│   │       ├── pricings-buttom.psd
│   │       ├── thanks.psd
│   │       └── videotemplate.psd
│   ├── javascripts/
│   │   ├── application.js
│   │   ├── calendar/
│   │   │   ├── calendar-setup.js
│   │   │   ├── calendar.js
│   │   │   └── lang/
│   │   │       ├── calendar-bg.js
│   │   │       ├── calendar-bs.js
│   │   │       ├── calendar-ca.js
│   │   │       ├── calendar-cs.js
│   │   │       ├── calendar-da.js
│   │   │       ├── calendar-de.js
│   │   │       ├── calendar-en.js
│   │   │       ├── calendar-es.js
│   │   │       ├── calendar-fi.js
│   │   │       ├── calendar-fr.js
│   │   │       ├── calendar-gl.js
│   │   │       ├── calendar-he.js
│   │   │       ├── calendar-hu.js
│   │   │       ├── calendar-id.js
│   │   │       ├── calendar-it.js
│   │   │       ├── calendar-ja.js
│   │   │       ├── calendar-ko.js
│   │   │       ├── calendar-lt.js
│   │   │       ├── calendar-mk.js
│   │   │       ├── calendar-nl.js
│   │   │       ├── calendar-no.js
│   │   │       ├── calendar-pl.js
│   │   │       ├── calendar-pt-br.js
│   │   │       ├── calendar-pt.js
│   │   │       ├── calendar-ro.js
│   │   │       ├── calendar-ru.js
│   │   │       ├── calendar-sk.js
│   │   │       ├── calendar-sl.js
│   │   │       ├── calendar-sr.js
│   │   │       ├── calendar-sv.js
│   │   │       ├── calendar-th.js
│   │   │       ├── calendar-tr.js
│   │   │       ├── calendar-uk.js
│   │   │       ├── calendar-vi.js
│   │   │       ├── calendar-zh-tw.js
│   │   │       └── calendar-zh.js
│   │   ├── context_menu.js
│   │   ├── controls.js
│   │   ├── dashboard.js
│   │   ├── dragdrop.js
│   │   ├── effects.js
│   │   ├── enterprise_map.js
│   │   ├── fancybox/
│   │   │   ├── index.sof
│   │   │   ├── jquery.fancybox-1.3.0.css
│   │   │   ├── jquery.fancybox-1.3.0.pack.js
│   │   │   └── jquery.mousewheel-3.0.2.pack.js
│   │   ├── fileuploader.js
│   │   ├── hoverIntent.js
│   │   ├── issue.js
│   │   ├── jQuery.bubbletip-1.0.4.js
│   │   ├── jScrollPane
│   │   ├── jScrollPane.js
│   │   ├── jit-yc.js
│   │   ├── jit.js
│   │   ├── jquery-ui.js
│   │   ├── jquery.autocomplete.js
│   │   ├── jquery.autocomplete.pack.js
│   │   ├── jquery.easing-1.3.pack.js
│   │   ├── jquery.em.js
│   │   ├── jquery.fancybox-1.3.0.js
│   │   ├── jquery.fancybox-1.3.0.pack.js
│   │   ├── jquery.fancybox-1.3.4.js
│   │   ├── jquery.fancybox-1.3.4.pack.js
│   │   ├── jquery.fileupload-ui.js
│   │   ├── jquery.fileupload.js
│   │   ├── jquery.jgrowl_minimized.js
│   │   ├── jquery.js
│   │   ├── jquery.mousewheel-3.0.2.pack.js
│   │   ├── jquery.mousewheel-3.0.4.pack.js
│   │   ├── jquery.mousewheel.js
│   │   ├── jquery.scrollTo-min.js
│   │   ├── jquery.tagsinput.js
│   │   ├── jquery.ui.autocomplete.ext.js
│   │   ├── jquery.ui.autocomplete.js
│   │   ├── jquery.ui.position.js
│   │   ├── jrails.js
│   │   ├── json2.js
│   │   ├── jstoolbar/
│   │   │   ├── jstoolbar.js
│   │   │   ├── lang/
│   │   │   │   ├── jstoolbar-bg.js
│   │   │   │   ├── jstoolbar-bs.js
│   │   │   │   ├── jstoolbar-ca.js
│   │   │   │   ├── jstoolbar-cs.js
│   │   │   │   ├── jstoolbar-da.js
│   │   │   │   ├── jstoolbar-de.js
│   │   │   │   ├── jstoolbar-en.js
│   │   │   │   ├── jstoolbar-es.js
│   │   │   │   ├── jstoolbar-fi.js
│   │   │   │   ├── jstoolbar-fr.js
│   │   │   │   ├── jstoolbar-gl.js
│   │   │   │   ├── jstoolbar-he.js
│   │   │   │   ├── jstoolbar-hu.js
│   │   │   │   ├── jstoolbar-id.js
│   │   │   │   ├── jstoolbar-it.js
│   │   │   │   ├── jstoolbar-ja.js
│   │   │   │   ├── jstoolbar-ko.js
│   │   │   │   ├── jstoolbar-lt.js
│   │   │   │   ├── jstoolbar-mk.js
│   │   │   │   ├── jstoolbar-nl.js
│   │   │   │   ├── jstoolbar-no.js
│   │   │   │   ├── jstoolbar-pl.js
│   │   │   │   ├── jstoolbar-pt-br.js
│   │   │   │   ├── jstoolbar-pt.js
│   │   │   │   ├── jstoolbar-ro.js
│   │   │   │   ├── jstoolbar-ru.js
│   │   │   │   ├── jstoolbar-sk.js
│   │   │   │   ├── jstoolbar-sl.js
│   │   │   │   ├── jstoolbar-sr.js
│   │   │   │   ├── jstoolbar-sv.js
│   │   │   │   ├── jstoolbar-th.js
│   │   │   │   ├── jstoolbar-tr.js
│   │   │   │   ├── jstoolbar-uk.js
│   │   │   │   ├── jstoolbar-vi.js
│   │   │   │   ├── jstoolbar-zh-tw.js
│   │   │   │   └── jstoolbar-zh.js
│   │   │   └── textile.js
│   │   ├── lightbox.js
│   │   ├── prototype.js
│   │   ├── repository_navigation.js
│   │   ├── retro.js
│   │   ├── select_list_move.js
│   │   ├── static/
│   │   │   ├── Quicksand_Book_400.font.js
│   │   │   ├── css_browser_selector.js
│   │   │   ├── cufon-yui.js
│   │   │   ├── execute.js
│   │   │   ├── hoverIntent.js
│   │   │   ├── index.sof
│   │   │   ├── jquery-galleryview-1.1/
│   │   │   │   ├── index.sof
│   │   │   │   ├── jquery.galleryview-1.1.js
│   │   │   │   └── jquery.timers-1.1.2.js
│   │   │   ├── jquery.easing.1.3.js
│   │   │   ├── jquery.scroll.pack.js
│   │   │   ├── jquery.send.js
│   │   │   └── superfish.js
│   │   ├── store.js
│   │   ├── superfish.js
│   │   ├── supersubs.js
│   │   ├── textile-editor-config.js
│   │   └── textile-editor.js
│   ├── maintenance/
│   │   └── index.html
│   ├── stylesheets/
│   │   ├── bubbletip-IE.css
│   │   ├── bubbletip.css
│   │   ├── calendar.css
│   │   ├── context_menu.css
│   │   ├── csshover.htc
│   │   ├── custom.css
│   │   ├── dashboard.css
│   │   ├── enterprise_map.css
│   │   ├── fileuploader.css
│   │   ├── gt-fixed.css
│   │   ├── gt-rounded-corners.css
│   │   ├── gt-styles.css
│   │   ├── headerandfooter.css
│   │   ├── issue.css
│   │   ├── jScrollPane.css
│   │   ├── jquery-ui-1.7.2.custom.css
│   │   ├── jquery-ui-1.8.8.custom.css
│   │   ├── jquery.autocomplete.css
│   │   ├── jquery.fancybox-1.3.0.css
│   │   ├── jquery.fancybox-1.3.4.css
│   │   ├── jquery.fileupload-ui.css
│   │   ├── jquery.tagsinput.css
│   │   ├── jquery.ui.autocomplete.css
│   │   ├── jstoolbar.css
│   │   ├── lightbox.css
│   │   ├── oldapplication.css
│   │   ├── override.css
│   │   ├── reset-fonts.css
│   │   ├── scaffold.css
│   │   ├── scm.css
│   │   ├── static/
│   │   │   ├── index.sof
│   │   │   ├── print.css
│   │   │   ├── screen.css
│   │   │   ├── style.css
│   │   │   └── superfish.css
│   │   └── textile-editor.css
│   └── themes/
│       ├── README
│       └── bettermeans/
│           └── stylesheets/
│               └── application.css
├── script/
│   ├── about
│   ├── autospec
│   ├── breakpointer
│   ├── console
│   ├── cucumber
│   ├── dbconsole
│   ├── delayed_job
│   ├── destroy
│   ├── generate
│   ├── performance/
│   │   ├── benchmarker
│   │   ├── profiler
│   │   └── request
│   ├── plugin
│   ├── process/
│   │   ├── inspector
│   │   ├── reaper
│   │   ├── spawner
│   │   └── spinner
│   ├── runner
│   ├── server
│   └── spec
├── spec/
│   ├── acceptance/
│   │   ├── acceptance_helper.rb
│   │   ├── support/
│   │   │   ├── helpers.rb
│   │   │   └── paths.rb
│   │   └── user_login_spec.rb
│   ├── controllers/
│   │   ├── account_controller_spec.rb
│   │   └── projects/
│   │       ├── index_active_spec.rb
│   │       ├── index_latest_spec.rb
│   │       ├── index_spec.rb
│   │       ├── move_spec.rb
│   │       └── new_dash_data_spec.rb
│   ├── factories.rb
│   ├── lib/
│   │   └── hash_spec.rb
│   ├── models/
│   │   └── project_spec.rb
│   ├── rcov.opts
│   ├── routing/
│   │   ├── accounts_routing_spec.rb
│   │   ├── activity_stream_preferences_routing_spec.rb
│   │   ├── activity_streams_routing_spec.rb
│   │   ├── admin_routing_spec.rb
│   │   ├── attachments_routing_spec.rb
│   │   ├── auth_sources_routing_spec.rb
│   │   ├── boards_routing_spec.rb
│   │   ├── comments_routing_spec.rb
│   │   ├── credit_distributions_routing_spec.rb
│   │   ├── credit_transfers_routing_spec.rb
│   │   ├── credits_routing_spec.rb
│   │   ├── documents_routing_spec.rb
│   │   ├── email_updates_routing_spec.rb
│   │   ├── enterprises_routing_spec.rb
│   │   ├── enumerations_routing_spec.rb
│   │   ├── help_routing_spec.rb
│   │   ├── help_sections_routing_spec.rb
│   │   ├── home_routing_spec.rb
│   │   ├── hourly_types_routing_spec.rb
│   │   ├── invitations_routing_spec.rb
│   │   ├── issue_invitations_routing_spec.rb
│   │   ├── issue_relations_routing_spec.rb
│   │   ├── issue_statuses_routing_spec.rb
│   │   ├── issue_votes_routing_spec.rb
│   │   ├── issues_routing_spec.rb
│   │   ├── journals_routing_spec.rb
│   │   ├── mail_handler_routing_spec.rb
│   │   ├── mails_routing_spec.rb
│   │   ├── members_routing_spec.rb
│   │   ├── messages_routing_spec.rb
│   │   ├── motion_votes_routing_spec.rb
│   │   ├── motions_routing_spec.rb
│   │   ├── my_routing_spec.rb
│   │   ├── news_routing_spec.rb
│   │   ├── notifications_routing_spec.rb
│   │   ├── projects_routing_spec.rb
│   │   ├── queries_routing_spec.rb
│   │   ├── quotes_routing_spec.rb
│   │   ├── recurly_notifications_routing_spec.rb
│   │   ├── reports_routing_spec.rb
│   │   ├── reputations_routing_spec.rb
│   │   ├── retro_ratings_routing_spec.rb
│   │   ├── retros_routing_spec.rb
│   │   ├── roles_routing_spec.rb
│   │   ├── search_routing_spec.rb
│   │   ├── settings_routing_spec.rb
│   │   ├── shares_routing_spec.rb
│   │   ├── todos_routing_spec.rb
│   │   ├── trackers_routing_spec.rb
│   │   ├── users_routing_spec.rb
│   │   ├── votes_routing_spec.rb
│   │   ├── watchers_routing_spec.rb
│   │   ├── welcome_routing_spec.rb
│   │   ├── wiki_routing_spec.rb
│   │   ├── wikis_routing_spec.rb
│   │   └── workflows_routing_spec.rb
│   ├── spec.opts
│   └── spec_helper.rb
└── vendor/
    └── plugins/
        ├── acts-as-taggable-on/
        │   ├── .rspec
        │   ├── CHANGELOG
        │   ├── Gemfile
        │   ├── MIT-LICENSE
        │   ├── README.rdoc
        │   ├── Rakefile
        │   ├── VERSION
        │   ├── acts-as-taggable-on.gemspec
        │   ├── generators/
        │   │   └── acts_as_taggable_on_migration/
        │   │       ├── acts_as_taggable_on_migration_generator.rb
        │   │       └── templates/
        │   │           └── migration.rb
        │   ├── lib/
        │   │   ├── acts-as-taggable-on.rb
        │   │   ├── acts_as_taggable_on/
        │   │   │   ├── acts_as_tagger.rb
        │   │   │   ├── compatibility/
        │   │   │   │   ├── Gemfile
        │   │   │   │   └── active_record_backports.rb
        │   │   │   ├── tag.rb
        │   │   │   ├── tag_list.rb
        │   │   │   ├── taggable/
        │   │   │   │   ├── cache.rb
        │   │   │   │   ├── collection.rb
        │   │   │   │   ├── core.rb
        │   │   │   │   ├── ownership.rb
        │   │   │   │   └── related.rb
        │   │   │   ├── taggable.rb
        │   │   │   ├── tagging.rb
        │   │   │   └── tags_helper.rb
        │   │   └── generators/
        │   │       └── acts_as_taggable_on/
        │   │           └── migration/
        │   │               ├── migration_generator.rb
        │   │               └── templates/
        │   │                   └── active_record/
        │   │                       └── migration.rb
        │   ├── rails/
        │   │   └── init.rb
        │   ├── spec/
        │   │   ├── acts_as_taggable_on/
        │   │   │   ├── acts_as_taggable_on_spec.rb
        │   │   │   ├── acts_as_tagger_spec.rb
        │   │   │   ├── tag_list_spec.rb
        │   │   │   ├── tag_spec.rb
        │   │   │   ├── taggable_spec.rb
        │   │   │   ├── tagger_spec.rb
        │   │   │   ├── tagging_spec.rb
        │   │   │   └── tags_helper_spec.rb
        │   │   ├── bm.rb
        │   │   ├── database.yml.sample
        │   │   ├── models.rb
        │   │   ├── schema.rb
        │   │   └── spec_helper.rb
        │   └── uninstall.rb
        ├── acts_as_attachable/
        │   ├── init.rb
        │   └── lib/
        │       └── acts_as_attachable.rb
        ├── acts_as_event/
        │   ├── init.rb
        │   └── lib/
        │       └── acts_as_event.rb
        ├── acts_as_list/
        │   ├── README
        │   ├── init.rb
        │   ├── lib/
        │   │   └── active_record/
        │   │       └── acts/
        │   │           └── list.rb
        │   └── test/
        │       └── list_test.rb
        ├── acts_as_searchable/
        │   ├── init.rb
        │   └── lib/
        │       └── acts_as_searchable.rb
        ├── acts_as_tree/
        │   ├── README
        │   ├── Rakefile
        │   ├── init.rb
        │   ├── lib/
        │   │   └── active_record/
        │   │       └── acts/
        │   │           └── tree.rb
        │   └── test/
        │       ├── abstract_unit.rb
        │       ├── acts_as_tree_test.rb
        │       ├── database.yml
        │       ├── fixtures/
        │       │   ├── mixin.rb
        │       │   └── mixins.yml
        │       └── schema.rb
        ├── acts_as_versioned/
        │   ├── CHANGELOG
        │   ├── MIT-LICENSE
        │   ├── README
        │   ├── RUNNING_UNIT_TESTS
        │   ├── Rakefile
        │   ├── init.rb
        │   ├── lib/
        │   │   └── acts_as_versioned.rb
        │   └── test/
        │       ├── abstract_unit.rb
        │       ├── database.yml
        │       ├── fixtures/
        │       │   ├── authors.yml
        │       │   ├── landmark.rb
        │       │   ├── landmark_versions.yml
        │       │   ├── landmarks.yml
        │       │   ├── locked_pages.yml
        │       │   ├── locked_pages_revisions.yml
        │       │   ├── migrations/
        │       │   │   └── 1_add_versioned_tables.rb
        │       │   ├── page.rb
        │       │   ├── page_versions.yml
        │       │   ├── pages.yml
        │       │   └── widget.rb
        │       ├── migration_test.rb
        │       ├── schema.rb
        │       └── versioned_test.rb
        ├── acts_as_watchable/
        │   ├── init.rb
        │   └── lib/
        │       └── acts_as_watchable.rb
        ├── admin_data/
        │   ├── History.txt
        │   ├── README.md
        │   ├── Rakefile
        │   ├── app/
        │   │   ├── controllers/
        │   │   │   └── admin_data/
        │   │   │       ├── base_controller.rb
        │   │   │       ├── diagnostic_controller.rb
        │   │   │       ├── feed_controller.rb
        │   │   │       ├── main_controller.rb
        │   │   │       ├── migration_controller.rb
        │   │   │       ├── search_controller.rb
        │   │   │       └── validate_model_controller.rb
        │   │   └── views/
        │   │       ├── admin_data/
        │   │       │   ├── diagnostic/
        │   │       │   │   ├── index.html.erb
        │   │       │   │   └── missing_index.html.erb
        │   │       │   ├── feed/
        │   │       │   │   └── index.rss.builder
        │   │       │   ├── main/
        │   │       │   │   ├── all_models.html.erb
        │   │       │   │   ├── association/
        │   │       │   │   │   ├── _association_info.html.erb
        │   │       │   │   │   ├── _belongs_to_info.html.erb
        │   │       │   │   │   ├── _has_many_info.html.erb
        │   │       │   │   │   └── _has_one_info.html.erb
        │   │       │   │   ├── edit.html.erb
        │   │       │   │   ├── misc/
        │   │       │   │   │   ├── _form.html.erb
        │   │       │   │   │   └── _modify_record.html.erb
        │   │       │   │   ├── new.html.erb
        │   │       │   │   ├── show.html.erb
        │   │       │   │   └── table_structure.html.erb
        │   │       │   ├── migration/
        │   │       │   │   ├── index.html.erb
        │   │       │   │   └── jstest.html.erb
        │   │       │   ├── search/
        │   │       │   │   ├── _search_base.html.erb
        │   │       │   │   ├── advance_search.html.erb
        │   │       │   │   ├── quick_search.html.erb
        │   │       │   │   └── search/
        │   │       │   │       ├── _advance_search_form.html.erb
        │   │       │   │       ├── _errors.html.erb
        │   │       │   │       ├── _listing.html.erb
        │   │       │   │       ├── _search_form.html.erb
        │   │       │   │       ├── _sortby.html.erb
        │   │       │   │       └── _title.html.erb
        │   │       │   ├── shared/
        │   │       │   │   ├── _breadcrum.html.erb
        │   │       │   │   ├── _drop_down_klasses.html.erb
        │   │       │   │   ├── _flash_message.html.erb
        │   │       │   │   ├── _header.html.erb
        │   │       │   │   ├── _powered_by.html.erb
        │   │       │   │   └── _secondary_navigation.html.erb
        │   │       │   └── validate_model/
        │   │       │       ├── _bad.html.erb
        │   │       │       ├── tid.html.erb
        │   │       │       └── validate.html.erb
        │   │       └── layouts/
        │   │           └── admin_data.html.erb
        │   ├── config/
        │   │   └── routes.rb
        │   ├── doc/
        │   │   └── git.txt
        │   ├── init.rb
        │   ├── lib/
        │   │   ├── admin_data/
        │   │   │   ├── chelper.rb
        │   │   │   ├── compatibility.rb
        │   │   │   ├── helpers.rb
        │   │   │   ├── rake_util.rb
        │   │   │   ├── search.rb
        │   │   │   ├── settings.rb
        │   │   │   └── util.rb
        │   │   ├── admin_data_date_validation.rb
        │   │   ├── css/
        │   │   │   ├── app.css
        │   │   │   ├── base.css
        │   │   │   ├── header.css
        │   │   │   ├── rounded.css
        │   │   │   ├── themes/
        │   │   │   │   └── drastic-dark/
        │   │   │   │       └── style.css
        │   │   │   ├── umbrella.css
        │   │   │   └── vendor/
        │   │   │       ├── jquery-ui-1.7.2.custom.css
        │   │   │       └── qunit.css
        │   │   └── js/
        │   │       ├── advance_search/
        │   │       │   ├── act_on_result.js
        │   │       │   ├── adv_search.js
        │   │       │   ├── advance_search.js
        │   │       │   ├── advance_search_structure.js
        │   │       │   ├── ajaxify_advance_search.js
        │   │       │   ├── build_first_row.js
        │   │       │   ├── event_bindings.js
        │   │       │   ├── global_ajax_setting.js
        │   │       │   └── trigger_submit_on_domready.js
        │   │       ├── misc/
        │   │       │   ├── drop_down_change.js
        │   │       │   ├── js_util.js
        │   │       │   └── quick_search_input_focus.js
        │   │       ├── test/
        │   │       │   ├── act_on_result.js
        │   │       │   ├── advance_search.js
        │   │       │   ├── ajaxify_advance_search.js
        │   │       │   ├── build_first_row.js
        │   │       │   └── event_bindings.js
        │   │       ├── validate_model/
        │   │       │   ├── ajaxify_form.js
        │   │       │   └── select_all.js
        │   │       └── vendor/
        │   │           ├── jack.js
        │   │           ├── jquery-1.4.1.js
        │   │           ├── jquery.ba-isjquery.js
        │   │           ├── jquery.form.js
        │   │           ├── jquery.lint.js
        │   │           ├── log.js
        │   │           └── qunit.js
        │   ├── tasks/
        │   │   ├── admin_data_tasks.rake
        │   │   └── validate_models_bg.rake
        │   └── test/
        │       ├── factories/
        │       │   ├── article.rb
        │       │   ├── car.rb
        │       │   ├── city.rb
        │       │   ├── comment.rb
        │       │   ├── door.rb
        │       │   └── engine.rb
        │       ├── functional/
        │       │   ├── base_controller_test.rb
        │       │   ├── feed_controller_test.rb
        │       │   ├── main_controller_test.rb
        │       │   ├── migration_controller_test.rb
        │       │   └── search_controller_test.rb
        │       ├── helper/
        │       │   └── view_helper_test.rb
        │       ├── misc_tests/
        │       │   ├── date_validation_test.rb
        │       │   ├── settings_test.rb
        │       │   └── util_test.rb
        │       ├── rails_root/
        │       │   ├── Rakefile
        │       │   ├── app/
        │       │   │   ├── controllers/
        │       │   │   │   ├── application_controller.rb
        │       │   │   │   └── articles_controller.rb
        │       │   │   └── models/
        │       │   │       ├── article.rb
        │       │   │       ├── city.rb
        │       │   │       ├── comment.rb
        │       │   │       ├── tech_magazine.rb
        │       │   │       └── vehicle/
        │       │   │           ├── car.rb
        │       │   │           ├── door.rb
        │       │   │           └── engine.rb
        │       │   ├── config/
        │       │   │   ├── boot.rb
        │       │   │   ├── database.yml
        │       │   │   ├── environment.rb
        │       │   │   ├── environments/
        │       │   │   │   ├── development.rb
        │       │   │   │   └── test.rb
        │       │   │   ├── initializers/
        │       │   │   │   └── new_rails_defaults.rb
        │       │   │   └── routes.rb
        │       │   ├── db/
        │       │   │   ├── migrate/
        │       │   │   │   └── 20090809061114_create_tables.rb
        │       │   │   └── schema.rb
        │       │   ├── public/
        │       │   │   └── tmp/
        │       │   │       └── response.txt
        │       │   └── script/
        │       │       ├── about
        │       │       ├── console
        │       │       ├── dbconsole
        │       │       ├── destroy
        │       │       ├── generate
        │       │       ├── performance/
        │       │       │   ├── benchmarker
        │       │       │   └── profiler
        │       │       ├── plugin
        │       │       ├── runner
        │       │       └── server
        │       └── test_helper.rb
        ├── annotate_models/
        │   ├── History.txt
        │   ├── README.rdoc
        │   ├── Rakefile
        │   ├── VERSION.yml
        │   ├── annotate.gemspec
        │   ├── bin/
        │   │   └── annotate
        │   ├── lib/
        │   │   ├── annotate/
        │   │   │   ├── annotate_models.rb
        │   │   │   ├── annotate_routes.rb
        │   │   │   └── tasks/
        │   │   │       ├── migrate.rake
        │   │   │       └── migrate.rake~HEAD
        │   │   └── annotate.rb
        │   ├── spec/
        │   │   ├── annotate/
        │   │   │   ├── annotate_models_spec.rb
        │   │   │   └── annotate_routes_spec.rb
        │   │   ├── annotate_spec.rb
        │   │   ├── spec.opts
        │   │   └── spec_helper.rb
        │   └── todo.txt
        ├── auto_complete/
        │   ├── README
        │   ├── Rakefile
        │   ├── init.rb
        │   ├── lib/
        │   │   ├── auto_complete.rb
        │   │   └── auto_complete_macros_helper.rb
        │   └── test/
        │       └── auto_complete_test.rb
        ├── awesome_nested_set/
        │   ├── MIT-LICENSE
        │   ├── README.rdoc
        │   ├── Rakefile
        │   ├── awesome_nested_set.gemspec
        │   ├── init.rb
        │   ├── lib/
        │   │   ├── awesome_nested_set/
        │   │   │   ├── compatability.rb
        │   │   │   ├── helper.rb
        │   │   │   └── named_scope.rb
        │   │   └── awesome_nested_set.rb
        │   ├── rails/
        │   │   └── init.rb
        │   └── test/
        │       ├── awesome_nested_set/
        │       │   └── helper_test.rb
        │       ├── awesome_nested_set_test.rb
        │       ├── db/
        │       │   ├── database.yml
        │       │   └── schema.rb
        │       ├── fixtures/
        │       │   ├── categories.yml
        │       │   ├── category.rb
        │       │   ├── departments.yml
        │       │   └── notes.yml
        │       └── test_helper.rb
        ├── classic_pagination/
        │   ├── CHANGELOG
        │   ├── README
        │   ├── Rakefile
        │   ├── init.rb
        │   ├── install.rb
        │   ├── lib/
        │   │   ├── pagination.rb
        │   │   └── pagination_helper.rb
        │   └── test/
        │       ├── fixtures/
        │       │   ├── companies.yml
        │       │   ├── company.rb
        │       │   ├── developer.rb
        │       │   ├── developers.yml
        │       │   ├── developers_projects.yml
        │       │   ├── project.rb
        │       │   ├── projects.yml
        │       │   ├── replies.yml
        │       │   ├── reply.rb
        │       │   ├── schema.sql
        │       │   ├── topic.rb
        │       │   └── topics.yml
        │       ├── helper.rb
        │       ├── pagination_helper_test.rb
        │       └── pagination_test.rb
        ├── coderay-0.7.6.227/
        │   ├── FOLDERS
        │   ├── LICENSE
        │   ├── README
        │   ├── bin/
        │   │   ├── coderay
        │   │   └── coderay_stylesheet
        │   └── lib/
        │       ├── coderay/
        │       │   ├── duo.rb
        │       │   ├── encoder.rb
        │       │   ├── encoders/
        │       │   │   ├── _map.rb
        │       │   │   ├── count.rb
        │       │   │   ├── debug.rb
        │       │   │   ├── div.rb
        │       │   │   ├── html/
        │       │   │   │   ├── css.rb
        │       │   │   │   ├── numerization.rb
        │       │   │   │   └── output.rb
        │       │   │   ├── html.rb
        │       │   │   ├── null.rb
        │       │   │   ├── page.rb
        │       │   │   ├── span.rb
        │       │   │   ├── statistic.rb
        │       │   │   ├── text.rb
        │       │   │   ├── tokens.rb
        │       │   │   ├── xml.rb
        │       │   │   └── yaml.rb
        │       │   ├── helpers/
        │       │   │   ├── file_type.rb
        │       │   │   ├── gzip_simple.rb
        │       │   │   ├── plugin.rb
        │       │   │   └── word_list.rb
        │       │   ├── scanner.rb
        │       │   ├── scanners/
        │       │   │   ├── _map.rb
        │       │   │   ├── c.rb
        │       │   │   ├── debug.rb
        │       │   │   ├── delphi.rb
        │       │   │   ├── html.rb
        │       │   │   ├── java.rb
        │       │   │   ├── javascript.rb
        │       │   │   ├── nitro_xhtml.rb
        │       │   │   ├── php.rb
        │       │   │   ├── plaintext.rb
        │       │   │   ├── rhtml.rb
        │       │   │   ├── ruby/
        │       │   │   │   └── patterns.rb
        │       │   │   ├── ruby.rb
        │       │   │   ├── scheme.rb
        │       │   │   └── xml.rb
        │       │   ├── style.rb
        │       │   ├── styles/
        │       │   │   ├── _map.rb
        │       │   │   ├── cycnus.rb
        │       │   │   └── murphy.rb
        │       │   ├── token_classes.rb
        │       │   └── tokens.rb
        │       └── coderay.rb
        ├── default_value_for/
        │   ├── LICENSE.TXT
        │   ├── README.rdoc
        │   ├── Rakefile
        │   ├── init.rb
        │   └── test.rb
        ├── delayed_job/
        │   ├── MIT-LICENSE
        │   ├── README.textile
        │   ├── Rakefile
        │   ├── VERSION
        │   ├── contrib/
        │   │   └── delayed_job.monitrc
        │   ├── delayed_job.gemspec
        │   ├── generators/
        │   │   └── delayed_job/
        │   │       ├── delayed_job_generator.rb
        │   │       └── templates/
        │   │           ├── migration.rb
        │   │           └── script
        │   ├── init.rb
        │   ├── lib/
        │   │   ├── delayed/
        │   │   │   ├── command.rb
        │   │   │   ├── job.rb
        │   │   │   ├── message_sending.rb
        │   │   │   ├── performable_method.rb
        │   │   │   ├── recipes.rb
        │   │   │   ├── tasks.rb
        │   │   │   └── worker.rb
        │   │   └── delayed_job.rb
        │   ├── recipes/
        │   │   └── delayed_job.rb
        │   ├── spec/
        │   │   ├── delayed_method_spec.rb
        │   │   ├── job_spec.rb
        │   │   ├── sample_jobs.rb
        │   │   ├── spec_helper.rb
        │   │   ├── story_spec.rb
        │   │   └── worker_spec.rb
        │   └── tasks/
        │       └── jobs.rake
        ├── engines/
        │   ├── .gitignore
        │   ├── CHANGELOG
        │   ├── MIT-LICENSE
        │   ├── README
        │   ├── Rakefile
        │   ├── about.yml
        │   ├── boot.rb
        │   ├── generators/
        │   │   └── plugin_migration/
        │   │       ├── USAGE
        │   │       ├── plugin_migration_generator.rb
        │   │       └── templates/
        │   │           └── plugin_migration.erb
        │   ├── init.rb
        │   ├── lib/
        │   │   ├── engines/
        │   │   │   ├── assets.rb
        │   │   │   ├── plugin/
        │   │   │   │   ├── list.rb
        │   │   │   │   ├── loader.rb
        │   │   │   │   ├── locator.rb
        │   │   │   │   └── migrator.rb
        │   │   │   ├── plugin.rb
        │   │   │   ├── rails_extensions/
        │   │   │   │   ├── asset_helpers.rb
        │   │   │   │   ├── dependencies.rb
        │   │   │   │   ├── form_tag_helpers.rb
        │   │   │   │   ├── migrations.rb
        │   │   │   │   └── rails.rb
        │   │   │   ├── tasks/
        │   │   │   │   ├── engines.rake
        │   │   │   │   └── engines.rake~HEAD
        │   │   │   └── testing.rb
        │   │   └── engines.rb
        │   └── test/
        │       ├── app/
        │       │   ├── controllers/
        │       │   │   ├── app_and_plugin_controller.rb
        │       │   │   └── namespace/
        │       │   │       └── app_and_plugin_controller.rb
        │       │   ├── helpers/
        │       │   │   └── mail_helper.rb
        │       │   ├── models/
        │       │   │   ├── app_and_plugin_model.rb
        │       │   │   └── notify_mail.rb
        │       │   ├── things/
        │       │   │   └── thing.rb
        │       │   └── views/
        │       │       ├── app_and_plugin/
        │       │       │   └── a_view.html.erb
        │       │       ├── namespace/
        │       │       │   └── app_and_plugin/
        │       │       │       └── a_view.html.erb
        │       │       ├── notify_mail/
        │       │       │   ├── implicit_multipart.text.html.erb
        │       │       │   ├── implicit_multipart.text.plain.erb
        │       │       │   ├── multipart_html.html.erb
        │       │       │   ├── multipart_plain.html.erb
        │       │       │   └── signup.text.plain.erb
        │       │       └── plugin_mail/
        │       │           ├── mail_from_plugin_with_application_template.text.plain.erb
        │       │           └── multipart_from_plugin_with_application_template_plain.html.erb
        │       ├── functional/
        │       │   ├── controller_loading_test.rb
        │       │   ├── exception_notification_compatibility_test.rb
        │       │   ├── locale_loading_test.rb
        │       │   ├── routes_test.rb
        │       │   ├── view_helpers_test.rb
        │       │   └── view_loading_test.rb
        │       ├── lib/
        │       │   ├── app_and_plugin_lib_model.rb
        │       │   ├── engines_test_helper.rb
        │       │   └── render_information.rb
        │       ├── plugins/
        │       │   ├── alpha_plugin/
        │       │   │   ├── app/
        │       │   │   │   ├── controllers/
        │       │   │   │   │   ├── alpha_plugin_controller.rb
        │       │   │   │   │   ├── app_and_plugin_controller.rb
        │       │   │   │   │   ├── namespace/
        │       │   │   │   │   │   ├── alpha_plugin_controller.rb
        │       │   │   │   │   │   ├── app_and_plugin_controller.rb
        │       │   │   │   │   │   └── shared_plugin_controller.rb
        │       │   │   │   │   └── shared_plugin_controller.rb
        │       │   │   │   ├── models/
        │       │   │   │   │   ├── alpha_plugin_model.rb
        │       │   │   │   │   ├── app_and_plugin_model.rb
        │       │   │   │   │   └── shared_plugin_model.rb
        │       │   │   │   └── views/
        │       │   │   │       ├── alpha_plugin/
        │       │   │   │       │   └── a_view.html.erb
        │       │   │   │       ├── app_and_plugin/
        │       │   │   │       │   └── a_view.html.erb
        │       │   │   │       ├── layouts/
        │       │   │   │       │   └── plugin_layout.erb
        │       │   │   │       ├── namespace/
        │       │   │   │       │   ├── alpha_plugin/
        │       │   │   │       │   │   └── a_view.html.erb
        │       │   │   │       │   ├── app_and_plugin/
        │       │   │   │       │   │   └── a_view.html.erb
        │       │   │   │       │   └── shared_plugin/
        │       │   │   │       │       └── a_view.html.erb
        │       │   │   │       └── shared_plugin/
        │       │   │   │           └── a_view.html.erb
        │       │   │   ├── lib/
        │       │   │   │   ├── alpha_plugin_lib_model.rb
        │       │   │   │   └── app_and_plugin_lib_model.rb
        │       │   │   └── locales/
        │       │   │       └── en.yml
        │       │   ├── beta_plugin/
        │       │   │   ├── app/
        │       │   │   │   ├── controllers/
        │       │   │   │   │   ├── app_and_plugin_controller.rb
        │       │   │   │   │   ├── namespace/
        │       │   │   │   │   │   └── shared_plugin_controller.rb
        │       │   │   │   │   └── shared_plugin_controller.rb
        │       │   │   │   ├── models/
        │       │   │   │   │   └── shared_plugin_model.rb
        │       │   │   │   └── views/
        │       │   │   │       ├── namespace/
        │       │   │   │       │   └── shared_plugin/
        │       │   │   │       │       └── a_view.html.erb
        │       │   │   │       └── shared_plugin/
        │       │   │   │           └── a_view.html.erb
        │       │   │   ├── init.rb
        │       │   │   └── locales/
        │       │   │       └── en.yml
        │       │   ├── not_a_plugin/
        │       │   │   └── public/
        │       │   │       └── should_not_be_copied.txt
        │       │   ├── test_assets/
        │       │   │   ├── app/
        │       │   │   │   ├── controllers/
        │       │   │   │   │   └── assets_controller.rb
        │       │   │   │   └── views/
        │       │   │   │       ├── assets/
        │       │   │   │       │   └── index.html.erb
        │       │   │   │       └── layouts/
        │       │   │   │           └── assets.html.erb
        │       │   │   ├── init.rb
        │       │   │   └── public/
        │       │   │       ├── file.txt
        │       │   │       └── subfolder/
        │       │   │           └── file_in_subfolder.txt
        │       │   ├── test_assets_with_assets_directory/
        │       │   │   ├── assets/
        │       │   │   │   ├── file.txt
        │       │   │   │   └── subfolder/
        │       │   │   │       └── file_in_subfolder.txt
        │       │   │   └── init.rb
        │       │   ├── test_assets_with_no_subdirectory/
        │       │   │   ├── assets/
        │       │   │   │   └── file.txt
        │       │   │   └── init.rb
        │       │   ├── test_code_mixing/
        │       │   │   ├── app/
        │       │   │   │   └── things/
        │       │   │   │       └── thing.rb
        │       │   │   └── init.rb
        │       │   ├── test_load_path/
        │       │   │   └── init.rb
        │       │   ├── test_migration/
        │       │   │   ├── db/
        │       │   │   │   └── migrate/
        │       │   │   │       ├── 001_create_tests.rb
        │       │   │   │       ├── 002_create_others.rb
        │       │   │   │       └── 003_create_extras.rb
        │       │   │   └── init.rb
        │       │   ├── test_plugin_mailing/
        │       │   │   ├── app/
        │       │   │   │   ├── models/
        │       │   │   │   │   └── plugin_mail.rb
        │       │   │   │   └── views/
        │       │   │   │       └── plugin_mail/
        │       │   │   │           ├── mail_from_plugin.erb
        │       │   │   │           ├── multipart_from_plugin_html.html.erb
        │       │   │   │           ├── multipart_from_plugin_plain.html.erb
        │       │   │   │           ├── multipart_from_plugin_with_application_template_html.html.erb
        │       │   │   │           └── multipart_from_plugin_with_application_template_plain.html.erb
        │       │   │   └── init.rb
        │       │   ├── test_routing/
        │       │   │   ├── app/
        │       │   │   │   └── controllers/
        │       │   │   │       ├── namespace/
        │       │   │   │       │   └── test_routing_controller.rb
        │       │   │   │       └── test_routing_controller.rb
        │       │   │   ├── config/
        │       │   │   │   └── routes.rb
        │       │   │   └── init.rb
        │       │   └── test_testing/
        │       │       ├── app/
        │       │       │   └── README.txt
        │       │       ├── init.rb
        │       │       └── test/
        │       │           ├── fixtures/
        │       │           │   └── testing_fixtures.yml
        │       │           └── unit/
        │       │               └── override_test.rb
        │       └── unit/
        │           ├── action_mailer_test.rb
        │           ├── arbitrary_code_mixing_test.rb
        │           ├── assets_test.rb
        │           ├── backwards_compat_test.rb
        │           ├── load_path_test.rb
        │           ├── migration_test.rb
        │           ├── model_and_lib_test.rb
        │           ├── plugins_test.rb
        │           ├── test_testing/
        │           │   └── override_test.rb
        │           └── testing_test.rb
        ├── exceptional/
        │   ├── History.txt
        │   ├── Manifest
        │   ├── README
        │   ├── Rakefile
        │   ├── bin/
        │   │   └── ginger
        │   ├── exceptional.gemspec
        │   ├── exceptional.yml
        │   ├── ginger_scenarios.rb
        │   ├── init.rb
        │   ├── install.rb
        │   ├── lib/
        │   │   ├── exceptional/
        │   │   │   ├── api.rb
        │   │   │   ├── bootstrap.rb
        │   │   │   ├── config.rb
        │   │   │   ├── exception_data.rb
        │   │   │   ├── integration/
        │   │   │   │   └── rails.rb
        │   │   │   ├── log.rb
        │   │   │   ├── remote.rb
        │   │   │   └── version.rb
        │   │   └── exceptional.rb
        │   └── spec/
        │       ├── api_spec.rb
        │       ├── bootstrap_spec.rb
        │       ├── config_spec.rb
        │       ├── exception_data_spec.rb
        │       ├── exceptional_rescue_from_spec.rb
        │       ├── exceptional_spec.rb
        │       ├── log_spec.rb
        │       ├── remote_spec.rb
        │       └── spec_helper.rb
        ├── googlecharts/
        │   ├── History.txt
        │   ├── License.txt
        │   ├── Manifest.txt
        │   ├── README
        │   ├── README.markdown
        │   ├── README.txt
        │   ├── Rakefile
        │   ├── VERSION
        │   ├── config/
        │   │   ├── hoe.rb
        │   │   └── requirements.rb
        │   ├── lib/
        │   │   ├── gchart/
        │   │   │   ├── aliases.rb
        │   │   │   ├── tasks/
        │   │   │   │   ├── deployment.rake
        │   │   │   │   ├── environment.rake
        │   │   │   │   ├── rspec.rake
        │   │   │   │   └── website.rake
        │   │   │   ├── theme.rb
        │   │   │   └── version.rb
        │   │   ├── gchart.rb
        │   │   ├── googlecharts.rb
        │   │   └── themes.yml
        │   ├── script/
        │   │   ├── destroy
        │   │   ├── generate
        │   │   └── txt2html
        │   ├── setup.rb
        │   ├── spec/
        │   │   ├── fixtures/
        │   │   │   ├── another_test_theme.yml
        │   │   │   └── test_theme.yml
        │   │   ├── gchart_spec.rb
        │   │   ├── spec_helper.rb
        │   │   └── theme_spec.rb
        │   └── website/
        │       ├── index.html
        │       ├── index.txt
        │       ├── javascripts/
        │       │   └── rounded_corners_lite.inc.js
        │       ├── stylesheets/
        │       │   └── screen.css
        │       └── template.rhtml
        ├── gravatar/
        │   ├── .gitignore
        │   ├── MIT-LICENSE
        │   ├── README.rdoc
        │   ├── Rakefile
        │   ├── about.yml
        │   ├── init.rb
        │   ├── lib/
        │   │   └── gravatar.rb
        │   └── spec/
        │       └── gravatar_spec.rb
        ├── jrails/
        │   ├── CHANGELOG
        │   ├── LICENSE
        │   ├── README.rdoc
        │   ├── Rakefile
        │   ├── VERSION.yml
        │   ├── bin/
        │   │   └── jrails
        │   ├── init.rb
        │   ├── install.rb
        │   ├── javascripts/
        │   │   ├── jquery-ui.js
        │   │   ├── jquery.js
        │   │   ├── jrails.js
        │   │   └── sources/
        │   │       └── jrails.js
        │   ├── jrails.gemspec
        │   ├── lib/
        │   │   ├── jquery_selector_assertions.rb
        │   │   ├── jrails.rb
        │   │   └── tasks/
        │   │       └── jrails.rake
        │   └── rails/
        │       └── init.rb
        ├── open_id_authentication/
        │   ├── CHANGELOG
        │   ├── README
        │   ├── Rakefile
        │   ├── generators/
        │   │   ├── open_id_authentication_tables/
        │   │   │   ├── open_id_authentication_tables_generator.rb
        │   │   │   └── templates/
        │   │   │       └── migration.rb
        │   │   └── upgrade_open_id_authentication_tables/
        │   │       ├── templates/
        │   │       │   └── migration.rb
        │   │       └── upgrade_open_id_authentication_tables_generator.rb
        │   ├── init.rb
        │   ├── lib/
        │   │   ├── open_id_authentication/
        │   │   │   ├── association.rb
        │   │   │   ├── db_store.rb
        │   │   │   ├── mem_cache_store.rb
        │   │   │   ├── nonce.rb
        │   │   │   ├── request.rb
        │   │   │   ├── tasks/
        │   │   │   │   └── open_id_authentication_tasks.rake
        │   │   │   └── timeout_fixes.rb
        │   │   └── open_id_authentication.rb
        │   └── test/
        │       ├── mem_cache_store_test.rb
        │       ├── normalize_test.rb
        │       ├── open_id_authentication_test.rb
        │       ├── status_test.rb
        │       └── test_helper.rb
        ├── pickle/
        │   ├── History.txt
        │   ├── License.txt
        │   ├── README.rdoc
        │   ├── Rakefile
        │   ├── Todo.txt
        │   ├── VERSION
        │   ├── features/
        │   │   ├── app/
        │   │   │   ├── app.rb
        │   │   │   ├── blueprints.rb
        │   │   │   ├── factories.rb
        │   │   │   └── views/
        │   │   │       └── notifier/
        │   │   │           ├── email.erb
        │   │   │           └── user_email.erb
        │   │   ├── email/
        │   │   │   └── email.feature
        │   │   ├── generator/
        │   │   │   └── generators.feature
        │   │   ├── path/
        │   │   │   ├── models_page.feature
        │   │   │   └── named_route_page.feature
        │   │   ├── pickle/
        │   │   │   ├── create_from_active_record.feature
        │   │   │   ├── create_from_factory_girl.feature
        │   │   │   └── create_from_machinist.feature
        │   │   ├── step_definitions/
        │   │   │   ├── email_steps.rb
        │   │   │   ├── extra_email_steps.rb
        │   │   │   ├── fork_steps.rb
        │   │   │   ├── generator_steps.rb
        │   │   │   ├── path_steps.rb
        │   │   │   └── pickle_steps.rb
        │   │   └── support/
        │   │       ├── env.rb
        │   │       └── paths.rb
        │   ├── garlic.rb
        │   ├── init.rb
        │   ├── lib/
        │   │   ├── pickle/
        │   │   │   ├── adapter.rb
        │   │   │   ├── config.rb
        │   │   │   ├── email/
        │   │   │   │   ├── parser.rb
        │   │   │   │   └── world.rb
        │   │   │   ├── email.rb
        │   │   │   ├── parser/
        │   │   │   │   └── matchers.rb
        │   │   │   ├── parser.rb
        │   │   │   ├── path/
        │   │   │   │   └── world.rb
        │   │   │   ├── path.rb
        │   │   │   ├── session/
        │   │   │   │   └── parser.rb
        │   │   │   ├── session.rb
        │   │   │   ├── version.rb
        │   │   │   └── world.rb
        │   │   └── pickle.rb
        │   ├── pickle.gemspec
        │   ├── rails_generators/
        │   │   └── pickle/
        │   │       ├── pickle_generator.rb
        │   │       └── templates/
        │   │           ├── email_steps.rb
        │   │           ├── env.rb
        │   │           ├── paths.rb
        │   │           └── pickle_steps.rb
        │   └── spec/
        │       ├── lib/
        │       │   ├── pickle_adapter_spec.rb
        │       │   ├── pickle_config_spec.rb
        │       │   ├── pickle_email_parser_spec.rb
        │       │   ├── pickle_email_spec.rb
        │       │   ├── pickle_parser_matchers_spec.rb
        │       │   ├── pickle_parser_spec.rb
        │       │   ├── pickle_path_spec.rb
        │       │   ├── pickle_session_spec.rb
        │       │   └── pickle_spec.rb
        │       └── spec_helper.rb
        ├── prepend_engine_views/
        │   └── init.rb
        ├── redmine_s3/
        │   ├── README.rdoc
        │   ├── config/
        │   │   ├── locales/
        │   │   │   └── en.yml
        │   │   └── s3.yml.example
        │   ├── init.rb
        │   ├── lang/
        │   │   └── en.yml
        │   ├── lib/
        │   │   ├── S3.rb
        │   │   ├── redmine_s3/
        │   │   │   └── connection.rb
        │   │   └── s3_helper.rb
        │   └── test/
        │       └── test_helper.rb
        ├── rfpdf/
        │   ├── CHANGELOG
        │   ├── MIT-LICENSE
        │   ├── README
        │   ├── init.rb
        │   ├── lib/
        │   │   ├── rfpdf/
        │   │   │   ├── bookmark.rb
        │   │   │   ├── chinese.rb
        │   │   │   ├── errors.rb
        │   │   │   ├── fpdf.rb
        │   │   │   ├── fpdf_eps.rb
        │   │   │   ├── japanese.rb
        │   │   │   ├── korean.rb
        │   │   │   ├── makefont.rb
        │   │   │   ├── rfpdf.rb
        │   │   │   └── view.rb
        │   │   └── rfpdf.rb
        │   └── test/
        │       └── test_helper.rb
        ├── ruby-net-ldap-0.0.4/
        │   ├── COPYING
        │   ├── ChangeLog
        │   ├── LICENCE
        │   ├── README
        │   ├── lib/
        │   │   └── net/
        │   │       ├── ber.rb
        │   │       ├── ldap/
        │   │       │   ├── dataset.rb
        │   │       │   ├── entry.rb
        │   │       │   ├── filter.rb
        │   │       │   ├── pdu.rb
        │   │       │   └── psw.rb
        │   │       ├── ldap.rb
        │   │       └── ldif.rb
        │   └── tests/
        │       ├── testber.rb
        │       ├── testdata.ldif
        │       ├── testem.rb
        │       ├── testfilter.rb
        │       ├── testldap.rb
        │       ├── testldif.rb
        │       └── testpsw.rb
        ├── seed_dump/
        │   ├── CHANGELOG.rdoc
        │   ├── MIT-LICENSE
        │   ├── README.rdoc
        │   ├── Rakefile
        │   ├── VERSION
        │   ├── lib/
        │   │   ├── seed_dump/
        │   │   │   └── railtie.rb
        │   │   ├── seed_dump.rb
        │   │   └── tasks/
        │   │       └── seed_dump.rake
        │   ├── seed_dump.gemspec
        │   └── test/
        │       ├── seed_dump_test.rb
        │       └── test_helper.rb
        ├── selenium-on-rails/
        │   ├── CHANGELOG
        │   ├── LICENSE-2.0.txt
        │   ├── README.md
        │   ├── Rakefile
        │   ├── doc/
        │   │   ├── classes/
        │   │   │   ├── SeleniumController.html
        │   │   │   ├── SeleniumHelper.html
        │   │   │   ├── SeleniumOnRails/
        │   │   │   │   ├── FixtureLoader.html
        │   │   │   │   ├── PartialsSupport.html
        │   │   │   │   ├── Paths.html
        │   │   │   │   ├── RSelenese.html
        │   │   │   │   ├── Renderer.html
        │   │   │   │   ├── Selenese.html
        │   │   │   │   ├── SuiteRenderer.html
        │   │   │   │   ├── TestBuilder.html
        │   │   │   │   ├── TestBuilderAccessors.html
        │   │   │   │   ├── TestBuilderActions.html
        │   │   │   │   ├── TestBuilderUserAccessors.html
        │   │   │   │   └── TestBuilderUserActions.html
        │   │   │   ├── SeleniumOnRails.html
        │   │   │   └── SeleniumOnRailsConfig.html
        │   │   ├── files/
        │   │   │   ├── CHANGELOG.html
        │   │   │   ├── README.html
        │   │   │   └── lib/
        │   │   │       ├── controllers/
        │   │   │       │   └── selenium_controller_rb.html
        │   │   │       ├── selenium_helper_rb.html
        │   │   │       ├── selenium_on_rails/
        │   │   │       │   ├── acceptance_test_runner_rb.html
        │   │   │       │   ├── fixture_loader_rb.html
        │   │   │       │   ├── partials_support_rb.html
        │   │   │       │   ├── paths_rb.html
        │   │   │       │   ├── renderer_rb.html
        │   │   │       │   ├── rselenese_rb.html
        │   │   │       │   ├── selenese_rb.html
        │   │   │       │   ├── suite_renderer_rb.html
        │   │   │       │   ├── test_builder_accessors_rb.html
        │   │   │       │   ├── test_builder_actions_rb.html
        │   │   │       │   └── test_builder_rb.html
        │   │   │       ├── selenium_on_rails_config_rb.html
        │   │   │       └── selenium_on_rails_rb.html
        │   │   ├── fr_class_index.html
        │   │   ├── fr_file_index.html
        │   │   ├── fr_method_index.html
        │   │   ├── index.html
        │   │   └── rdoc-style.css
        │   ├── generators/
        │   │   └── selenium/
        │   │       ├── USAGE
        │   │       ├── selenium_generator.rb
        │   │       └── templates/
        │   │           ├── rhtml.html.erb
        │   │           ├── rselenese.html.erb
        │   │           └── selenese.html.erb
        │   ├── init.rb
        │   ├── lib/
        │   │   ├── controllers/
        │   │   │   ├── selenium_controller.rb
        │   │   │   └── switch_environment_controller.rb
        │   │   ├── selenium_helper.rb
        │   │   ├── selenium_on_rails/
        │   │   │   ├── acceptance_test_runner.rb
        │   │   │   ├── fixture_loader.rb
        │   │   │   ├── partials_support.rb
        │   │   │   ├── paths.rb
        │   │   │   ├── renderer.rb
        │   │   │   ├── rselenese.rb
        │   │   │   ├── selenese.rb
        │   │   │   ├── suite_renderer.rb
        │   │   │   ├── tasks/
        │   │   │   │   └── test_acceptance.rake
        │   │   │   ├── test_builder.rb
        │   │   │   ├── test_builder_accessors.rb
        │   │   │   ├── test_builder_actions.rb
        │   │   │   ├── test_builder_user_accessors.rb.example
        │   │   │   └── test_builder_user_actions.rb.example
        │   │   ├── selenium_on_rails.rb
        │   │   ├── selenium_on_rails_config.rb
        │   │   └── views/
        │   │       ├── layouts/
        │   │       │   └── layout.html.erb
        │   │       ├── record.html.erb
        │   │       ├── selenium_helper.rb
        │   │       ├── setup.html.erb
        │   │       └── test_suite.html.erb
        │   ├── log/
        │   │   └── default.yml
        │   ├── routes.rb
        │   ├── selenium-core/
        │   │   ├── Blank.html
        │   │   ├── InjectedRemoteRunner.html
        │   │   ├── RemoteRunner.html
        │   │   ├── SeleniumLog.html
        │   │   ├── TestPrompt.html
        │   │   ├── TestRunner-splash.html
        │   │   ├── TestRunner.hta
        │   │   ├── TestRunner.html
        │   │   ├── domviewer/
        │   │   │   ├── domviewer.css
        │   │   │   ├── domviewer.html
        │   │   │   └── selenium-domviewer.js
        │   │   ├── iedoc-core.xml
        │   │   ├── iedoc.xml
        │   │   ├── lib/
        │   │   │   ├── cssQuery/
        │   │   │   │   ├── cssQuery-p.js
        │   │   │   │   └── src/
        │   │   │   │       ├── cssQuery-level2.js
        │   │   │   │       ├── cssQuery-level3.js
        │   │   │   │       ├── cssQuery-standard.js
        │   │   │   │       └── cssQuery.js
        │   │   │   ├── prototype.js
        │   │   │   ├── scriptaculous/
        │   │   │   │   ├── builder.js
        │   │   │   │   ├── controls.js
        │   │   │   │   ├── dragdrop.js
        │   │   │   │   ├── effects.js
        │   │   │   │   ├── scriptaculous.js
        │   │   │   │   ├── slider.js
        │   │   │   │   └── unittest.js
        │   │   │   └── snapsie.js
        │   │   ├── scripts/
        │   │   │   ├── find_matching_child.js
        │   │   │   ├── htmlutils.js
        │   │   │   ├── injection.html
        │   │   │   ├── selenium-api.js
        │   │   │   ├── selenium-browserbot.js
        │   │   │   ├── selenium-browserdetect.js
        │   │   │   ├── selenium-commandhandlers.js
        │   │   │   ├── selenium-executionloop.js
        │   │   │   ├── selenium-logging.js
        │   │   │   ├── selenium-remoterunner.js
        │   │   │   ├── selenium-testrunner.js
        │   │   │   ├── selenium-version.js
        │   │   │   ├── ui-doc.html
        │   │   │   ├── ui-element.js
        │   │   │   ├── ui-map-sample.js
        │   │   │   ├── user-extensions.js
        │   │   │   ├── user-extensions.js.sample
        │   │   │   └── xmlextras.js
        │   │   ├── selenium-test.css
        │   │   ├── selenium.css
        │   │   └── xpath/
        │   │       ├── dom.js
        │   │       ├── javascript-xpath-0.1.11.js
        │   │       ├── util.js
        │   │       ├── xmltoken.js
        │   │       └── xpath.js
        │   ├── selenium.yml
        │   ├── test/
        │   │   ├── fixtures/
        │   │   │   ├── config.yml
        │   │   │   └── selenium.yml
        │   │   ├── paths_test.rb
        │   │   ├── renderer_test.rb
        │   │   ├── rselenese_test.rb
        │   │   ├── selenese_test.rb
        │   │   ├── selenium_controller_test.rb
        │   │   ├── selenium_on_rails_config_test.rb
        │   │   ├── selenium_support_test.rb
        │   │   ├── setup_test.rb
        │   │   ├── suite_renderer_test.rb
        │   │   ├── switch_environment_controller_test.rb
        │   │   ├── test_builder_functions_authortest.rb
        │   │   └── test_helper.rb
        │   └── test_data/
        │       ├── _partial.rsel
        │       ├── backup.html~
        │       ├── own_layout.html
        │       ├── partials/
        │       │   ├── _html.html
        │       │   ├── _nesting.rsel
        │       │   ├── _rhtml.html.erb
        │       │   ├── _rsel.rsel
        │       │   ├── _sel.sel
        │       │   └── all_partials.rsel
        │       ├── rhtml.html.erb
        │       ├── rselenese.rsel
        │       ├── selenese.sel
        │       ├── suite_one/
        │       │   ├── subsuite/
        │       │   │   └── suite_one_subsuite_testcase.sel
        │       │   ├── suite_one_testcase1.sel
        │       │   └── suite_one_testcase2.sel
        │       └── suite_two/
        │           └── suite_two_testcase.sel
        ├── simple-private-messages/
        │   ├── MIT-LICENSE
        │   ├── README.rdoc
        │   ├── Rakefile
        │   ├── generators/
        │   │   ├── private_message_model/
        │   │   │   ├── USAGE
        │   │   │   ├── private_message_model_generator.rb
        │   │   │   └── templates/
        │   │   │       ├── migration.rb
        │   │   │       └── model.rb
        │   │   └── private_message_scaffold/
        │   │       ├── USAGE
        │   │       ├── private_message_scaffold_generator.rb
        │   │       └── templates/
        │   │           ├── controller.rb
        │   │           ├── view_index.html.erb
        │   │           ├── view_index_inbox.html.erb
        │   │           ├── view_index_sent.html.erb
        │   │           ├── view_new.html.erb
        │   │           └── view_show.html.erb
        │   ├── init.rb
        │   ├── lib/
        │   │   └── professionalnerd/
        │   │       └── simple_private_messages/
        │   │           ├── has_private_messages_extensions.rb
        │   │           ├── private_message_extensions.rb
        │   │           └── tasks/
        │   │               └── simple_private_messages_tasks.rake
        │   └── test/
        │       ├── database.yml
        │       ├── fixtures/
        │       │   ├── message.rb
        │       │   └── user.rb
        │       ├── schema.rb
        │       ├── test_helper.rb
        │       └── unit/
        │           ├── message_model.rb
        │           └── user_model.rb
        ├── textile-editor-helper/
        │   ├── CHANGELOG
        │   ├── MIT-LICENSE
        │   ├── README
        │   ├── Rakefile
        │   ├── assets/
        │   │   ├── javascripts/
        │   │   │   ├── textile-editor-config.js
        │   │   │   └── textile-editor.js
        │   │   └── stylesheets/
        │   │       └── textile-editor.css
        │   ├── init.rb
        │   ├── install.rb
        │   ├── lib/
        │   │   ├── tasks/
        │   │   │   └── textile_editor_helper_tasks.rake
        │   │   └── textile_editor_helper.rb
        │   └── test/
        │       ├── abstract_unit.rb
        │       └── textile_editor_helper_test.rb
        └── yaml_db/
            ├── README
            ├── Rakefile
            ├── about.yml
            ├── init.rb
            ├── lib/
            │   ├── tasks/
            │   │   └── yaml_db_tasks.rake
            │   └── yaml_db.rb
            └── spec/
                ├── base.rb
                ├── yaml_dump_spec.rb
                ├── yaml_load_spec.rb
                └── yaml_utils_spec.rb

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
/db/*.sqlite3
/db/pgdump_full.sql
/log/*.log
/tmp/**/*
/config/additional_environment.rb
/config/database.yml
/config/email.yml
/config/initializers/session_store.rb
/coverage
/db/*.db
/db/*.sqlite3
!/db/schema.rb
/files/*
/log/*.log*
/log/mongrel_debug
/public/dispatch.*
/public/plugin_assets
/tmp/*
/tmp/cache/*
/tmp/sessions/*
/tmp/sockets/*
/tmp/test/*
/vendor/rails
/config/database.yml
/nbproject
redmine.tmproj
serverlog
.DS_Store
*.swp
*.swo
.redcar/
.bundle
/bin


================================================
FILE: .gitmodules
================================================


================================================
FILE: .rspec
================================================
--colour
--format profile
--loadby mtime
--reverse


================================================
FILE: .rvmrc
================================================
#!/usr/bin/env bash

# This is an RVM Project .rvmrc file, used to automatically load the ruby
# development environment upon cd'ing into the directory

# First we specify our desired <ruby>[@<gemset>], the @gemset name is optional,
# Only full ruby name is supported here, for short names use:
#     echo "rvm use 1.8.7" > .rvmrc
environment_id="ruby-1.8.7-p370@bettermeans"

# Uncomment the following lines if you want to verify rvm version per project
# rvmrc_rvm_version="1.14.1 (stable)" # 1.10.1 seams as a safe start
# eval "$(echo ${rvm_version}.${rvmrc_rvm_version} | awk -F. '{print "[[ "$1*65536+$2*256+$3" -ge "$4*65536+$5*256+$6" ]]"}' )" || {
#   echo "This .rvmrc file requires at least RVM ${rvmrc_rvm_version}, aborting loading."
#   return 1
# }

# First we attempt to load the desired environment directly from the environment
# file. This is very fast and efficient compared to running through the entire
# CLI and selector. If you want feedback on which environment was used then
# insert the word 'use' after --create as this triggers verbose mode.
if [[ -d "${rvm_path:-$HOME/.rvm}/environments"
  && -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
then
  \. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
  [[ -s "${rvm_path:-$HOME/.rvm}/hooks/after_use" ]] &&
    \. "${rvm_path:-$HOME/.rvm}/hooks/after_use" || true
  if [[ $- == *i* ]] # check for interactive shells
  then echo "Using: $(tput setaf 2)$GEM_HOME$(tput sgr0)" # show the user the ruby and gemset they are using in green
  else echo "Using: $GEM_HOME" # don't use colors in non-interactive shells
  fi
else
  # If the environment file has not yet been created, use the RVM CLI to select.
  rvm --create use  "$environment_id" || {
    echo "Failed to create RVM environment '${environment_id}'."
    return 1
  }
fi

# If you use bundler, this might be useful to you:
# if [[ -s Gemfile ]] && {
#   ! builtin command -v bundle >/dev/null ||
#   builtin command -v bundle | GREP_OPTIONS= \grep $rvm_path/bin/bundle >/dev/null
# }
# then
#   printf "%b" "The rubygem 'bundler' is not installed. Installing it now.\n"
#   gem install bundler
# fi
# if [[ -s Gemfile ]] && builtin command -v bundle >/dev/null
# then
#   bundle install | GREP_OPTIONS= \grep -vE '^Using|Your bundle is complete'
# fi


================================================
FILE: Gemfile
================================================
source :rubygems

gem 'rake', '0.8.7'

gem 'rails', '2.3.14'

gem 'ruby-debug', '0.10.4'
gem 'rubytree', '0.7.0'
gem 'rpx_now', '0.6.24'
gem 'recurly', '0.3.3'
gem 'fleximage', '1.0.4'
gem 'reportable', '1.1.2'
gem 'comma', :git => 'https://github.com/crafterm/comma.git', :ref => 'rails2'
gem 'fastercsv', '1.5.4'
gem 'SystemTimer', '1.2.2', :require => 'system_timer', :platforms => :ruby_18
gem 'rack-timeout', '0.0.1'
gem 'will_paginate', '2.3.15'
gem 'grosser-ssl_requirement', :require => 'ssl_requirement'

group :test do
  gem 'shoulda'
  gem 'webrat', '0.7.3'
  gem 'rspec', '1.3.2'
  gem 'rspec-rails', '1.3.4'
  gem 'pickle', "0.3.4"
  gem 'factory_girl', "1.3.3"
  gem 'object_daddy', "0.4.3"
  #gem 'capybara-webkit'
  gem 'fakeweb'
end

group :development do
  gem 'sqlite3-ruby', :require => 'sqlite3'
  gem 'pg'
  gem 'mysql2', '< 0.3'
  gem 'guard-rspec'
  gem 'spork', '0.8.5'
  gem 'guard-spork'
  #gem 'reek'
  gem 'ruby2ruby', '1.2.2'
  gem 'heckle'
end

group :development, :test do
  gem 'capybara'
  gem 'steak'
end


================================================
FILE: Guardfile
================================================
# A sample Guardfile
# More info at https://github.com/guard/guard#readme
guard 'spork', :rspec_env => { 'RAILS_ENV' => 'test' } do
  watch('config/application.rb')
  watch('config/environment.rb')
  watch('config/environments/test.rb')
  watch(%r{^config/initializers/.+\.rb$})
  watch('Gemfile')
  watch('Gemfile.lock')
  watch('spec/spec_helper.rb') { :rspec }
  watch('spec/factories.rb')
  watch('db/seeds.rb')
  watch(%r{features/support/}) { :cucumber }
  watch(%r{^app/models/.+\.rb$})
  watch(%r{^app/controllers/.+\.rb$})
end

guard 'rspec', :version => 1, :cli => '--drb --color' do
  watch(%r{^spec/.+_spec\.rb$})
  watch(%r{^lib/(.+)\.rb$})     { |m| "spec/lib/#{m[1]}_spec.rb" }
  watch('spec/spec_helper.rb')  { "spec" }

  # Rails example
  watch(%r{^app/(.+)\.rb$})                           { |m| "spec/#{m[1]}_spec.rb" }
  watch(%r{^app/(.*)(\.erb|\.haml)$})                 { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
  watch(%r{^app/controllers/(.+)_(controller)\.rb$})  { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
  watch(%r{^spec/support/(.+)\.rb$})                  { "spec" }
  watch('config/routes.rb')                           { "spec/routing" }
  watch('app/controllers/application_controller.rb')  { "spec/controllers" }
  
  # Capybara request specs
  watch(%r{^app/views/(.+)/.*\.(erb|haml)$})          { |m| "spec/requests/#{m[1]}_spec.rb" }
  
  # Turnip features and steps
  watch(%r{^spec/acceptance/(.+)\.feature$})
  watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$})   { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
end


================================================
FILE: README.md
================================================
BetterMeans
-----------

BetterMeans is giving birth to a new kind of company. An Open Enterprise.

More details can be found at http://bettermeans.com and here http://bettermeans.org


Getting started
---------------

* `git clone git@github.com:Bettermeans/bettermeans.git`

* bundle install

* Rename `database.yml.example` to `database.yml`

* Run rake `db:create:all` and `rake db:schema:load`

That's it. Now you're ready to change the world. Here's to making a dent in things together!


Dev notes
---------

Platform workstream: http://bettermeans.com/projects/2/dashboard

IRC: #bettermeans irc.feenode.net

mailinglist: bettermeans@librelist.org (or build in workstream forum)


Testing
-------

capybara-webkit depends on a WebKit implementation from Qt as explained in https://github.com/thoughtbot/capybara-webkit/wiki/Installing-QT


Translating
-----------

You can find language specific translation groups at: https://www.transifex.net/projects/p/bettermeans


Known issues
------------

Attachments doesn't work in dev environment

Logging in via the janrain plugin (e.g. google, twitter...etc) won't work in dev environment (if you need to work with this, drop me a message, there's an involved workaround)


License and legalese
--------------------

Our codebase is based largely on an early fork of Redmine.

Redmine is open source and released under the terms of the GNU General Public License v2 (GPL).
All redmine code is Copyright (C) 2006-2011  Jean-Philippe Lang
All non-redmine code is Copyright (C) Shereef Bishay, and is dual-licensed: you may use either the GNU General Public License v2 (GPL), or the MIT License (see http://www.opensource.org/licenses/mit-license.php).

Thanks for joining us! May our work be used for the greater good of everyone.


================================================
FILE: Rakefile
================================================
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/switchtower.rake, and they will automatically be available to Rake.

require(File.join(File.dirname(__FILE__), 'config', 'boot'))

require 'rake'
require 'rake/testtask'
require 'rake/rdoctask'
require 'tasks/rails'


================================================
FILE: app/controllers/account_controller.rb
================================================
# TODO: rename this to something like SessionsController after integration specs are done
class AccountController < ApplicationController

  # RPX does not pass Rails form tokens...
  skip_before_filter :verify_authenticity_token, :only => [ :rpx_token, :register ]

  # prevents login action from being filtered by check_if_login_required application scope filter
  skip_before_filter :check_if_login_required, :except => [ :cancel ]
  ssl_required :all

  # Login request and validation
  def login
    set_invitation_token
    if request.get?
      logout_user
      session[:invitation_token] = @invitation_token
      render :layout => 'static'
    elsif open_id_authenticate?
      open_id_authenticate(params[:openid_url])
    else
      password_authentication(@invitation_token)
    end
  end

  def rpx_token
    find_user_by_identifier || find_user_by_mail || create_new_user
    message = reactivate_user
    successful_authentication(@user, @invitation_token, message)
  end

  # Log out current user and redirect to welcome page
  def logout
    cookies.delete :autologin
    current_user.delete_autologin_tokens
    logout_user
    redirect_to home_url
  end

  # Enable user to choose a new password
  def lost_password
    redirect_to(home_url) && return unless Setting.lost_password?
    validate_token || create_token
  end

  # User self-registration
  def register
    redirect_to(home_url) && return unless check_registration

    pick_plan
    if request.get?
      logout_and_invite
    else
      initialize_user_with_plan
      return if register_user_with_auth_source || register_user
    end
    render :layout => 'static'
  end

  # Token based account activation
  def activate
    redirect_to(home_url) && return unless can_activate? && user = registered_user
    user.activate

    if user.save
      @token.destroy
      flash.now[:success] = l(:notice_account_activated)
      successful_authentication(user)
    else
      render :action => 'login', :layout => 'static'
    end
  end

  def cancel
    current_user.cancel_account!
    render_message(l(:notice_account_canceled))
  end

  private

  def password_authentication(invitation_token=nil)
    user = User.try_to_login(params[:username], params[:password])

    if user.nil?
      invalid_credentials
    elsif user.new_record?
      onthefly_creation_failed(user, {:login => user.login, :auth_source_id => user.auth_source_id })
    elsif user.active?
      successful_authentication(user,invitation_token)
    else
      inactive_user
    end
  end

  def open_id_authenticate(openid_url)
    authenticate_with_open_id(openid_url, :required => [:nickname, :fullname, :email], :return_to => signin_url) do |result, identity_url, registration|
      if result.successful?
        user = User.find_or_initialize_by_identity_url(identity_url)
        if user.new_record?
          # Self-registration off
          redirect_to(home_url) && return unless Setting.self_registration?

          # Create on the fly
          user.login = registration['nickname'] unless registration['nickname'].nil?
          user.mail = registration['email'] unless registration['email'].nil?
          user.firstname, user.lastname = registration['fullname'].split(' ') unless registration['fullname'].nil?
          user.random_password
          user.status = User::STATUS_REGISTERED

          case Setting.self_registration
          when '1'
            register_by_email_activation(user) do
              onthefly_creation_failed(user)
            end
          when '3'
            register_automatically(user) do
              onthefly_creation_failed(user)
            end
          else
            register_manually_by_administrator(user) do
              onthefly_creation_failed(user)
            end
          end
        else
          # Existing record
          if user.active?
            successful_authentication(user)
          else
            account_pending
          end
        end
      end
    end
  end

  def successful_authentication(user, invitation_token = nil, msg=nil)
    # Valid user
    self.logged_user = user
    Track.log(Track::LOGIN,session[:client_ip])

    if invitation_token
      invitation = Invitation.find_by_token(invitation_token)
      invitation.accept(user) if invitation
    end

    # generate a key and set cookie if autologin
    if params[:autologin] && Setting.autologin?
      token = Token.create(:user => user, :action => 'autologin')
      cookies[:autologin] = { :value => token.value, :expires => 1.year.from_now }
    end

    if msg
      render_message(msg)
    else
      redirect_back_or_default :controller => 'welcome', :action => 'index'
    end
  end

  # Onthefly creation failed, display the registration form to fill/fix attributes
  def onthefly_creation_failed(user, auth_source_options = { })
    @user = user
    session[:auth_source_registration] = auth_source_options unless auth_source_options.empty?
    render :action => 'register'
  end

  def invalid_credentials
    # BUGBUG: "invalid_credentials", spelling
    flash.now[:error] = l(:notice_account_invalid_creditentials)
    render :layout => 'static'
  end

  def inactive_user
    flash.now[:error] = l(:notice_account_inactive_user)
    render_error(l(:notice_account_inactive_user))
  end

  # Register a user for email activation.
  #
  # Pass a block for behavior when a user fails to save
  def register_by_email_activation(user, invitation_token = nil)

    # BUGBUG: this should just be `invitation_token.blank?`
    # when it's nil this throws an error
    unless invitation_token.empty? || invitation_token.nil?
      invitation = Invitation.find_by_token invitation_token
      invitation.new_mail = user.mail
      invitation.save
    end

    if invitation && invitation.mail == user.mail
      return register_automatically(user)
    end

    token = Token.new(:user => user, :action => "register")
    if user.save and token.save
      Mailer.send_later(:deliver_register,token)
      flash.now[:success] = l(:notice_account_register_done)
      render :action => 'login', :layout => 'static'
      return true
    else
      yield if block_given?
      return false
    end
  end

  # Automatically register a user
  #
  # Pass a block for behavior when a user fails to save
  def register_automatically(user, &block)
    # Automatic activation
    user.status = User::STATUS_ACTIVE
    user.last_login_on = Time.now
    if user.save
      self.logged_user = user
      Track.log(Track::LOGIN,session[:client_ip])
      redirect_with_flash :success, l(:notice_account_activated), :controller => 'welcome', :action => 'index'
      return true
    else
      yield if block_given?
      return false
    end
  end

  # Manual activation by the administrator
  #
  # Pass a block for behavior when a user fails to save
  def register_manually_by_administrator(user, &block)
    if user.save
      # Sends an email to the administrators
      Mailer.send_later(:deliver_account_activation_request,user)
      account_pending
    else
      yield if block_given?
    end
  end

  def account_pending
    flash.now[:notice] = l(:notice_account_pending)
    render :action => 'login', :layout => 'static'
  end

  def random_email
    "#{(0...8).map{65.+(rand(25)).chr}.join}_noemail@bettermeans.com"
  end

  def data
    @data ||= RPXNow.user_data(params[:token])
    raise "hackers?" unless @data
    @data
  end

  def invitation
    return @invitation if defined? @invitation
    if session[:invitation_token]
      @invitation = Invitation.find_by_token(session[:invitation_token])
      @invitation_token = session[:invitation_token]
    end
    @invitation
  end

  def invitation_mail
    invitation.mail if invitation
  end

  def update_invitation
    invitation.update_attributes(:new_mail => @user.mail) if invitation
  end

  def find_user_by_identifier
    if @user = User.find_by_identifier(data[:identifier])
      update_invitation
      true
    end
  end

  def find_user_by_mail
    if data[:email] && @user = User.find_by_mail(data[:email])
      @user.update_attributes(:identifier => data[:identifier])
      true
    end
  end

  def create_new_user
    @user = User.new(:firstname => name,
                      :mail => mail,
                      :identifier => data[:identifier])

    @user.login = available_login
    update_invitation
    save_user_or_raise
  end

  def reactivate_user
    unless @user.active?
      @user.reactivate
      return l(:notice_account_reactivated)
    end
  end

  def save_user_or_raise
    unless @user.save
      session[:debug_user] = @user.inspect
      session[:debug_data] = data.inspect
      raise "Couldn't create new account"
    end
  end

  def name
    data[:name] || data[:username]
  end

  def mail
    # twitter accounts don't give email so we generate a random one
    # TODO: get a real email from the user, or don't require one
    data[:email] || invitation_mail || random_email
  end

  def available_login
    # BUGBUG: if data[:email] is nil this won't fail based on validations
    # should probably use mail from up above
    User.find_available_login([data[:username], name]) || data[:email]
  end

  def logout_user
    self.logged_user = nil
  end

  def set_invitation_token
    session[:invitation_token] = params[:invitation_token] || session[:invitation_token]
    @invitation_token = session[:invitation_token]
  end

  def open_id_authenticate?
    Setting.openid? && using_open_id?
  end

  def update_password
    # BUGBUG: password confirmation isn't validated when nil
    @user.password = params[:new_password]
    @user.password_confirmation = params[:new_password_confirmation]

    if @user.save
      @token.destroy
      flash.now[:success] = l(:notice_account_password_updated)
      render :action => 'login', :layout => 'static'
      true
    end
  end

  def valid_user
    user = User.find_by_mail(params[:mail])

    if user.nil?
      flash.now[:error] = l(:notice_account_unknown_email)
      nil
    elsif user.auth_source_id
      flash.now[:error] = l(:notice_can_t_change_password)
      nil
    else
      user
    end
  end

  def valid_token
    if token && !token.expired?
      token
    else
      redirect_to(home_url)
      nil
    end
  end

  def token
    find_token('recovery')
  end

  # TODO: should be able to somehow combine #token and #find_token
  def find_token(action)
    @token ||= if params[:token]
      Token.find_by_action_and_value(action, params[:token])
    end
  end

  def send_mail(token)
    Mailer.send_later(:deliver_lost_password, token)
    flash.now[:success] = l(:notice_account_lost_email_sent)
    render :action => 'login', :layout => 'static'
  end

  def validate_token
    if params[:token] && @token = valid_token
      @user = @token.user
      return true if request.post? && update_password
      render :template => "account/password_recovery"
      true
    end
  end

  def create_token
    if request.post? && user = valid_user
      token = Token.new(:user => user, :action => "recovery")
      token.save && send_mail(token)
    end
  end

  def pick_plan
    if params[:plan]
      @plan_id = Plan.find_by_code(params[:plan]).id
    elsif params[:plan_id]
      @plan_id = params[:plan_id]
    else
      @plan_id = Plan.find_by_code(Plan::FREE_CODE).id
    end
  end

  def register_user
    @user.login = params[:user][:login]
    @user.password = params[:password]
    @user.password_confirmation = params[:password_confirmation]

    case Setting.self_registration
    when '1'
      register_by_email_activation(@user,params[:invitation_token])
    when '3'
      register_automatically(@user)
      false
    else
      register_manually_by_administrator(@user)
      false
    end
  end

  def invite_to_login
    session[:invitation_token] = params[:invitation_token]
    invitation = Invitation.find_by_token(params[:invitation_token])
    @user.mail = invitation.mail if invitation
    flash.now[:notice] = "Sign up below to activate your invitation." <<
                         "<br><br><a href='/login?invitation_token=" <<
                         "#{params[:invitation_token]}'>" <<
                         "Login here if you already have an account.</a>"
  end

  def initialize_user_with_plan
    @user = User.new(params[:user])
    @user.plan_id = @plan_id

    # TODO: it shouldn't be possible for @user.plan_id to be nil here
    @user.trial_expires_on = 30.days.from_now if @user.plan_id && !@user.plan.free?
    # TODO: admin is attr_protected in the model, so it shouldn't be necessary here
    @user.admin = false
    @user.status = User::STATUS_REGISTERED
  end

  def register_user_with_auth_source
    return false unless session[:auth_source_registration]
    @user.status = User::STATUS_ACTIVE
    @user.login = session[:auth_source_registration][:login]
    @user.auth_source_id = session[:auth_source_registration][:auth_source_id]

    if @user.save
      # TODO: this isn't necessary, as the session gets cleared in logged_user=
      session[:auth_source_registration] = nil
      self.logged_user = @user
      Track.log(Track::LOGIN,session[:client_ip])
      redirect_with_flash :notice, l(:notice_account_activated), :controller => 'my', :action => 'account'
      true
    end
  end

  def logout_and_invite
    # TODO: this isn't necessary, as the session gets cleared in logged_user=
    session[:auth_source_registration] = nil
    logout_user
    @user = User.new(:language => Setting.default_language)
    invite_to_login if params[:invitation_token]
  end

  def check_registration
    Setting.self_registration? || session[:auth_source_registration]
  end

  def can_activate?
    Setting.self_registration? && params[:token] && valid_register_token?
  end

  def valid_register_token?
    find_token('register')
    @token && !@token.expired?
  end

  def registered_user
    # TODO: this is brittle, depending on @token being set earlier
    user = @token.user
    user if user.registered?
  end
end


================================================
FILE: app/controllers/activity_stream_preferences_controller.rb
================================================
#--
# Copyright (c) 2008 Matson Systems, Inc.
# Released under the BSD license found in the file
# LICENSE included with this ActivityStreams plug-in.
#++
# Template to generate the controllers
class ActivityStreamPreferencesController < ApplicationController
  include ActivityStreamPreferencesModule
  before_filter :require_login, :except => :feed
end


================================================
FILE: app/controllers/activity_stream_preferences_module.rb
================================================
#--
# Copyright (c) 2008 Matson Systems, Inc.
# Released under the BSD license found in the file
# LICENSE included with this ActivityStreams plug-in.
#++
# activity_stream_preferences_module.rb provides ActivityStreamPreferencesModule

require 'digest/sha1'

# ActivityStreamPreferencesModule is included in your generated ActivityStreamPereference Controller and provides functionality for User to configure preferences as to where their activities are displayed
module ActivityStreamPreferencesModule

  def index

    get_user_id

    @activity_stream_preferences = ActivityStreamPreference.find(:all,
      :conditions => { ACTIVITY_STREAM_USER_MODEL_ID => @user_id })

    build_activities_hash

    klass = Object::const_get(ACTIVITY_STREAM_USER_MODEL)
    @user = klass.find(@user_id)
    if @user.activity_stream_token.blank?
      @user.update_attribute(:activity_stream_token,
        Digest::SHA1.hexdigest( Time.now.to_s.split(//).sort_by {rand}.join ))
      if @user.id == self.current_user.id
        self.current_user.reload
      end
    end

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @activity_stream_preferences }
    end
  end

  def create

    get_user_id

    @activity_stream_preferences = ActivityStreamPreference.find(:all,
      :conditions => { ACTIVITY_STREAM_USER_MODEL_ID => @user_id })

    build_activities_hash

    locations = params[:locations] || []

    all_locations = []

    ACTIVITY_STREAM_LOCATIONS.each do |location|
      ACTIVITY_STREAM_ACTIVITIES.each_key do |activity|
        all_locations <<  "#{activity.to_s}.#{location[0]}"
      end
    end

    (all_locations - locations).each do |location|
      activity = @activities[location]
      if activity
        @activities.delete(location)
        next
      end
      activity = ActivityStreamPreference.new
      (activity_name,location_id) = location.split('.')
      activity.activity = activity_name
      activity.location = location_id
      activity.send("#{ACTIVITY_STREAM_USER_MODEL_ID}=", @user_id)
      activity.save!
    end

    @activities.each_value { |a| a.destroy }

    respond_to do |format|
      flash.now[:success] = 'Activity Stream Preferences were successfully updated.'
      format.html do
        if current_user.admin? && params[ACTIVITY_STREAM_USER_MODEL_ID.to_sym] != current_user.id.to_s
          redirect_to(activity_stream_preferences_path(ACTIVITY_STREAM_USER_MODEL_ID => @user_id))
        else
          redirect_to(activity_stream_preferences_path)
        end
      end
      format.xml  { head :ok }
    end
  end

  protected

  def get_user_id
    if User.current.admin? && params[ACTIVITY_STREAM_USER_MODEL_ID.to_sym]
      @user_id = params[ACTIVITY_STREAM_USER_MODEL_ID.to_sym]
    else
      @user_id = User.current.id
    end
  end

  def build_activities_hash
    @activities = {}
    @activity_stream_preferences.each do |a|
      key = "#{a.activity}.#{a.location}"
      @activities[key] = a
    end
  end

end


================================================
FILE: app/controllers/activity_streams_controller.rb
================================================
#--
# Copyright (c) 2008 Matson Systems, Inc.
# Released under the BSD license found in the file
# LICENSE included with this ActivityStreams plug-in.
#++
# Template to generate the controllers
class ActivityStreamsController < ApplicationController

  include ActivityStreamsModule
  before_filter :authorize, :except => [ :index, :feed]
  ssl_required :all

  def index
    respond_to do |wants|
      wants.js do
        render :update do |page|
          if params[:refresh]
            page.replace "activity_stream_list", :partial => "activity_streams/activity_stream_list", :locals => {
                                                :user_id => params[:user_id],
                                                :project_id => params[:project_id],
                                                :with_subprojects => params[:with_subprojects],
                                                :limit => params[:limit],
                                                :max_created_at => nil,
                                                :show_refresh => true}
            page.call "arm_fancybox" #attaches fancybox triggers to new issues
            page.call "break_long_words"
          else
            page.replace "activity_stream_bottom", :partial => "activity_streams/activity_stream_list", :locals => {
                                                :user_id => params[:user_id],
                                                :project_id => params[:project_id],
                                                :with_subprojects => params[:with_subprojects],
                                                :limit => params[:limit],
                                                :max_created_at => params[:max_created_at],
                                                :show_refresh => false}
            page.call "arm_fancybox" #attaches fancybox triggers to new issues
            page.call "break_long_words"
          end
        end
      end
    end

  end

end


================================================
FILE: app/controllers/activity_streams_module.rb
================================================
#--
# Copyright (c) 2008 Matson Systems, Inc.
# Released under the BSD license found in the file
# LICENSE included with this ActivityStreams plug-in.
#++
# activity_streams_module.rb provides ActivityStreamsModule
#
# ActivityStreamsModule is included in your generated ActivityStreams Controller and provides base functionality for the Activity Streams Plug-in
module ActivityStreamsModule

  def index
    @activity_streams = ActivityStream.find(:all, :limit => 200, :order => "updated_at DESC")

    respond_to do |format|
      format.html
      format.xml  { render :xml => @activity_streams }
    end
  end

  def show
    @activity_stream = ActivityStream.find(params[:id])

    respond_to do |format|
      format.html
      format.xml  { render :xml => @activity_stream }
    end
  end

  def new
    @activity_stream = ActivityStream.new

    respond_to do |format|
      format.html
      format.xml  { render :xml => @activity_stream }
    end
  end

  def edit
    @activity_stream = ActivityStream.find(params[:id])
  end

  def create
    @activity_stream = ActivityStream.new(params[:activity_stream])

    respond_to do |format|
      if @activity_stream.save
        flash.now[:success] = 'ActivityStream was successfully created.'
        format.html { redirect_to(@activity_stream) }
        format.xml  { render :xml => @activity_stream, :status => :created, :location => @activity_stream }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @activity_stream.errors, :status => :unprocessable_entity }
      end
    end
  end

  def update
    @activity_stream = ActivityStream.find(params[:id])

    respond_to do |format|
      if @activity_stream.update_attributes(params[:activity_stream])
        flash.now[:success] = 'ActivityStream was successfully updated.'
        format.html { redirect_to(@activity_stream) }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @activity_stream.errors, :status => :unprocessable_entity }
      end
    end
  end

  def destroy
    @activity_stream = ActivityStream.find(params[:id])

    respond_to do |format|
      if (current_user.admin? || (current_user.id == @activity_stream.actor_id && @activity_stream.actor_type == ACTIVITY_STREAM_USER_MODEL)) && @activity_stream.soft_destroy
        flash.now[:success] = 'Activity Removed.'
        format.html { redirect_to "#{request.protocol}#{request.host_with_port}#{params[:ref]}" }
        format.xml  { head :ok }
      else
        flash.now[:error] = 'Unexpected Error removing ActivityStream.'
        format.html {redirect_to "#{request.protocol}#{request.host_with_port}#{params[:ref]}"}
        format.xml  { head :error }
      end
    end
  end

end


================================================
FILE: app/controllers/admin_controller.rb
================================================
# BetterMeans - Work 2.0
# Copyright (C) 2006-2011  See readme for details and license#

class AdminController < ApplicationController
  layout 'admin'

  before_filter :require_admin, :except => :user_stats
  ssl_required :all

  helper :sort
  include SortHelper

  def index
    @no_configuration_data = Redmine::DefaultData::Loader::no_data?
  end

  def projects
    @status = params[:status] ? params[:status].to_i : 1
    c = ARCondition.new(@status == 0 ? "status <> 0" : ["status = ?", @status])

    unless params[:name].blank?
      name = "%#{params[:name].strip.downcase}%"
      c << ["LOWER(identifier) LIKE ? OR LOWER(name) LIKE ?", name, name]
    end

    @projects = Project.find :all, :order => 'lft',
                                   :conditions => c.conditions

    render :action => "projects", :layout => false if request.xhr?
  end

  def plugins
    @plugins = Redmine::Plugin.all
  end

  # Loads the default configuration
  # (roles, trackers, statuses, workflow, enumerations)
  def default_configuration
    if request.post?
      begin
        Redmine::DefaultData::Loader::load(params[:lang])
        flash.now[:success] = l(:notice_default_data_loaded)
      rescue Exception => e
        flash.now[:error] = l(:error_can_t_load_default_data, e.message)
      end
    end
    redirect_to :action => 'index'
  end

  def test_email
    raise_delivery_errors = ActionMailer::Base.raise_delivery_errors
    # Force ActionMailer to raise delivery errors so we can catch it
    ActionMailer::Base.raise_delivery_errors = true
    begin
      @test = Mailer.deliver_test(User.current)
      flash.now[:success] = l(:notice_email_sent, User.current.mail)
    rescue Exception => e
      flash.now[:error] = l(:notice_email_error, e.message)
    end
    ActionMailer::Base.raise_delivery_errors = raise_delivery_errors
    redirect_to :controller => 'settings', :action => 'edit', :tab => 'notifications'
  end

  def user_data_dump
    @users = User.find(:all, :conditions => {:status => 1})
    render :csv => @users
  end

  def info
    @db_adapter_name = ActiveRecord::Base.connection.adapter_name
    @checklist = [
      [:text_default_administrator_account_changed, User.find(:first, :conditions => ["login=? and hashed_password=?", 'admin', User.hash_password('admin')]).nil?],
      [:text_file_repository_writable, File.writable?(Attachment.storage_path)],
      [:text_plugin_assets_writable, File.writable?(Engines.public_directory)],
      [:text_rmagick_available, Object.const_defined?(:Magick)]
    ]
  end
end


================================================
FILE: app/controllers/application_controller.rb
================================================
# BetterMeans - Work 2.0
# Copyright (C) 2006-2011  See readme for details and license#

require 'uri'
require 'cgi'
require 'ruby-debug'

class ApplicationController < ActionController::Base
  include Redmine::I18n
  include LogActivityStreams

  before_filter :set_user_ip

  include SslRequirement
  # don't require ssl in development
  skip_before_filter :ensure_proper_protocol if Rails.env.development?

  layout 'gooey'

  # Remove broken cookie after upgrade from 0.8.x (#4292)
  # See https://rails.lighthouseapp.com/projects/8994/tickets/3360
  # TODO: remove it when Rails is fixed
  before_filter :delete_broken_cookies
  def delete_broken_cookies
    if cookies['_redmine_session'] && cookies['_redmine_session'] !~ /--/
      cookies.delete '_redmine_session'
      redirect_to home_path
      return false
    end
  end

  before_filter :user_setup, :check_if_login_required, :set_localization
  filter_parameter_logging :password
  protect_from_forgery

  rescue_from ActionController::InvalidAuthenticityToken, :with => :invalid_authenticity_token

  include Redmine::Search::Controller
  include Redmine::MenuManager::MenuController
  helper Redmine::MenuManager::MenuHelper

  def set_user_ip
    session[:client_ip] = request.headers['X-Real-Ip'] unless session[:client_ip]
  end

  def user_setup
    # Check the settings cache for each request
    Setting.check_cache
    # Find the current user
    User.current = find_current_user
  end

  def redirect_with_flash(flash_type,msg,*params)
    flash[flash_type] = msg
    redirect_to(*params)
  end

  def current_user
    User.current
  end

  # Returns the current user or nil if no user is logged in
  # and starts a session if needed
  def find_current_user
    if session[:user_id]
      # existing session
      user = (User.active.find(session[:user_id]) rescue nil)
      user
    elsif cookies[:autologin] && Setting.autologin?
      # auto-login feature starts a new session
      user = User.try_to_autologin(cookies[:autologin])
      session[:user_id] = user.id if user
      Track.log(Track::LOGIN,session[:client_ip]) if user
      user
    elsif Setting.rest_api_enabled? && ['xml', 'json'].include?(params[:format]) && accept_key_auth_actions.include?(params[:action])
      if params[:key].present?
        # Use API key
        User.find_by_api_key(params[:key])
      else
        # HTTP Basic, either username/password or API key/random
        authenticate_with_http_basic do |username, password|
          #TODO: track login here: Track.log(Track::LOGIN,session[:client_ip])
          User.try_to_login(username, password) || User.find_by_api_key(username)
        end
      end
    end
  end

  # Sets the logged in user
  def logged_user=(user)
    #resetting session, but keeping client_ip
    ip = session[:client_ip] if session[:client_ip]
    reset_session
    session[:client_ip] = ip
    if user && user.is_a?(User)
      User.current = user
      session[:user_id] = user.id
    else
      User.current = User.anonymous
    end
  end

  # check if login is globally required to access the application
  def check_if_login_required
    # no check needed if user is already logged in
    return true if User.current.logged?
    require_login if Setting.login_required?
  end

  def set_localization
    lang = nil
    if User.current.logged?
      lang = find_language(User.current.language)
    end
    lang ||= Setting.default_language
    set_language_if_valid(lang)
  end

  def data_admin_logged_in?
    return true if User.current == User.find_by_login("shereef") || User.current == User.find_by_login("adelegb") || User.current == User.find_by_login("crabari")
    return false
  end

  def require_login
    if !User.current.logged?
      # Extract only the basic url parameters on non-GET requests
      if request.get?
        url = url_for(params)
      else
        url = url_for(:controller => params[:controller], :action => params[:action], :id => params[:id], :project_id => params[:project_id])
      end
      respond_to do |format|
        format.html { redirect_to :controller => "account", :action => "login", :back_url => url }
        format.xml { head :unauthorized }
        format.json { head :unauthorized }
      end
      return false
    end
    true
  end

  def require_admin
    return unless require_login
    if !User.current.admin?
      render_403
      return false
    end
    true
  end

  def deny_access
    User.current.logged? ? render_403 : require_login
  end

  # Authorize the user for the requested action
  def authorize(ctrl = params[:controller], action = params[:action], global = false)
    return true if params[:format] == "png"
    allowed = User.current.allowed_to?({:controller => ctrl, :action => action}, @project, :global => global)
    allowed ? true : deny_access
  end

  # Authorize the user for the requested action outside a project
  def authorize_global(ctrl = params[:controller], action = params[:action], global = true)
    authorize(ctrl, action, global)
  end

  # make sure that the user is a member of the project (or admin) if project is private
  # used as a before_filter for actions that do not require any particular permission on the project
  def check_project_privacy
    if @project && @project.active?
      if @project.is_public? || User.current.allowed_to_see_project?(@project) || User.current.admin?
        true
      else
        User.current.logged? ? render_403 : require_login
      end
    else
      @project = nil
      render_404
      false
    end
  end

  def redirect_back_or_default(default)
    back_url = CGI.unescape(params[:back_url].to_s)
    if !back_url.blank? && !back_url.include?("/home/") && !back_url.include?("/front/")
      begin
        uri = URI.parse(back_url)

        # do not redirect user to another host or to the login or register page
        if (uri.relative? || (uri.host == request.host)) && !uri.path.match(%r{/(login|account/register)})
          redirect_to(back_url)
          return
        end
      rescue URI::InvalidURIError
        # redirect to default
      end
    end
    redirect_to default
  end

  def render_403
    @project = nil
    render :template => "common/403", :layout => (request.xhr? ? false : 'gooey'), :status => 403
    return false
  end

  def render_404
    render :template => "common/404", :layout => !request.xhr?, :status => 404
    return false
  end

  def render_error(msg)
    flash.now[:error] = msg
    render :text => '', :layout => !request.xhr?, :status => 500
  end

  def render_message(msg)
    flash.now[:notice] = msg
    render :text => '', :layout => !request.xhr?
  end

  def invalid_authenticity_token
    redirect_back_or_default(home_path)
  end

  def render_feed(items, options={})
    @items = items || []
    @items.sort! {|x,y| y.event_datetime <=> x.event_datetime }
    @items = @items.slice(0, Setting.feeds_limit.to_i)
    @title = options[:title] || Setting.app_title
    render :template => "common/feed.atom.rxml", :layout => false, :content_type => 'application/atom+xml'
  end

  def self.accept_key_auth(*actions)
    actions = actions.flatten.map(&:to_s)
    write_inheritable_attribute('accept_key_auth_actions', actions)
  end

  def accept_key_auth_actions
    self.class.read_inheritable_attribute('accept_key_auth_actions') || []
  end

  def attach_files_for_new_issue(issue,attachment_ids)
    if attachment_ids
      Attachment.update_all("container_id = #{issue.id}" , "id in (#{attachment_ids}) and container_id = 0" )
    end
  end

  # TODO: move to model
  def attach_files(obj, attachments)
    attached = []
    unsaved = []
    if attachments && attachments.is_a?(Hash)
      attachments.each_value do |attachment|
        file = attachment['file']
        next unless file && file.size > 0
        a = Attachment.create(:container => obj,
                              :file => file,
                              :description => attachment['description'].to_s.strip,
                              :author => User.current)
        a.new_record? ? (unsaved << a) : (attached << a)
      end
      if unsaved.any?
        flash.now[:error] = l(:warning_attachments_not_saved, unsaved.size)
      end
    end
    attached
  end

  def attach_temp_files(obj, attachments)
    attached = []
    unsaved = []
    logger.info { "attaching temp #{attachments.inspect}" }
    if attachments && attachments.is_a?(Hash)
      attachments.each_value do |attachment|
        logger.info { "atatchment #{attachment}" }
        file = Tempfile.open(attachment)
        next unless file && file.size > 0
        a = Attachment.create(:container => obj,
                              :file => file,
                              :description => '',
                              :author => User.current)
        a.new_record? ? (unsaved << a) : (attached << a)
      end
      if unsaved.any?
        flash.now[:error] = l(:warning_attachments_not_saved, unsaved.size)
      end
    end
    attached
  end

  #replaces newline characters with more binary-compatible ones
  def cleanup_newline(text)
    return text unless text and !text.empty?
    text.gsub(/\r?\n/, "\r\n")
  end

  # Same as Rails' simple_format helper without using paragraphs
  def simple_format_without_paragraph(text)
    text.to_s.
      gsub(/\r\n?/, "\n").                    # \r\n and \r -> \n
      gsub(/\n\n+/, "<br /><br />").          # 2+ newline  -> 2 br
      gsub(/([^\n]\n)(?=[^\n])/, '\1<br />')  # 1 newline   -> br
  end

  # Returns the number of objects that should be displayed
  # on the paginated list
  def per_page_option
    per_page = nil
    if params[:per_page] && Setting.per_page_options_array.include?(params[:per_page].to_s.to_i)
      per_page = params[:per_page].to_s.to_i
      session[:per_page] = per_page
    elsif session[:per_page]
      per_page = session[:per_page]
    else
      per_page = Setting.per_page_options_array.first || 25
    end
    per_page
  end

  # qvalues http header parser
  # code taken from webrick
  def parse_qvalues(value)
    tmp = []
    if value
      parts = value.split(/,\s*/)
      parts.each {|part|
        if m = %r{^([^\s,]+?)(?:;\s*q=(\d+(?:\.\d+)?))?$}.match(part)
          val = m[1]
          q = (m[2] or 1).to_f
          tmp.push([val, q])
        end
      }
      tmp = tmp.sort_by{|val, q| -q}
      tmp.collect!{|val, q| val}
    end
    return tmp
  rescue
    nil
  end

  # Returns a string that can be used as filename value in Content-Disposition header
  def filename_for_content_disposition(name)
    request.env['HTTP_USER_AGENT'] =~ %r{MSIE} ? ERB::Util.url_encode(name) : name
  end

  #breakpoint
  def bp
    debugger if ENV['RAILS_ENV'] == 'development'
  end

end


================================================
FILE: app/controllers/attachments_controller.rb
================================================
# Redmine - project management software
# Copyright (C) 2006-2011  See readme for details and license
#

class AttachmentsController < ApplicationController
  before_filter :find_project, :except => :create
  before_filter :read_authorize, :except => [:destroy, :create]
  before_filter :delete_authorize, :only => :destroy
  ssl_required :all

  verify :method => :post, :only => :destroy

  unloadable # Send unloadable so it will not be unloaded in development

  before_filter :redirect_to_s3, :except => [:destroy, :create]


  def create
    logger.info { "params #{params.inspect}" }
    if params[:file]
      file = params[:file]
      logger.info { "file #{file.inspect}" }
      a = Attachment.create(:container_id => params[:container_id],
                            :container_type => params[:container_type],
                            :file => file,
                            :author => User.current)
      logger.info { "created attachment #{a.inspect}" }
    end
    logger.info {"done with create" }

    render :json => a.to_json
  end

  def redirect_to_s3
    if @attachment.container.is_a?(Project)
      @attachment.increment_download
    end
    redirect_to("#{RedmineS3::Connection.uri}/#{@attachment.disk_filename}")
  end


  def show
    if @attachment.is_diff?
      @diff = File.new(@attachment.diskfile, "rb").read
      render :action => 'diff'
    elsif @attachment.is_text? && @attachment.filesize <= Setting.file_max_size_displayed.to_i.kilobyte
      @content = File.new(@attachment.diskfile, "rb").read
      render :action => 'file'
    else
      download
    end
  end

  def download
    if @attachment.container.is_a?(Project)
      @attachment.increment_download
    end

    # images are sent inline
    send_file @attachment.diskfile, :filename => filename_for_content_disposition(@attachment.filename),
                                    :type => @attachment.content_type,
                                    :disposition => (@attachment.image? ? 'inline' : 'attachment')
  end

  def destroy
    # Make sure association callbacks are called
    @attachment.container.attachments.delete(@attachment)
    redirect_to :back
  rescue ::ActionController::RedirectBackError
    redirect_to :controller => 'projects', :action => 'show', :id => @project
  end

  private

  def find_project
    @attachment = Attachment.find(params[:id])
    # Show 404 if the filename in the url is wrong
    raise ActiveRecord::RecordNotFound if params[:filename] && params[:filename] != @attachment.filename
    @project = @attachment.project
  rescue ActiveRecord::RecordNotFound
    render_404
  end

  # Checks that the file exists and is readable
  def file_readable
    @attachment.readable? ? true : render_404
  end

  def read_authorize
    @attachment.visible? ? true : deny_access
  end

  def delete_authorize
    @attachment.deletable? ? true : deny_access
  end
end


================================================
FILE: app/controllers/auth_sources_controller.rb
================================================
# BetterMeans - Work 2.0
# Copyright (C) 2006-2011  See readme for details and license#

class AuthSourcesController < ApplicationController
  layout 'admin'

  before_filter :require_admin
  ssl_required :all

  def index
    list
    render :action => 'list' unless request.xhr?
  end

  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
  verify :method => :post, :only => [ :destroy, :create, :update ],
         :redirect_to => { :action => :list }

  def list
    @auth_source_pages, @auth_sources = paginate :auth_sources, :per_page => 10
    render :action => "list", :layout => false if request.xhr?
  end

  def new
    @auth_source = AuthSourceLdap.new
  end

  def create
    @auth_source = AuthSourceLdap.new(params[:auth_source])
    if @auth_source.save
      flash.now[:success] = l(:notice_successful_create)
      redirect_to :action => 'list'
    else
      render :action => 'new'
    end
  end

  def edit
    @auth_source = AuthSource.find(params[:id])
  end

  def update
    @auth_source = AuthSource.find(params[:id])
    if @auth_source.update_attributes(params[:auth_source])
      flash.now[:success] = l(:notice_successful_update)
      redirect_to :action => 'list'
    else
      render :action => 'edit'
    end
  end

  def test_connection
    @auth_method = AuthSource.find(params[:id])
    begin
      @auth_method.test_connection
      flash.now[:success] = l(:notice_successful_connection)
    rescue => text
      flash.now[:error] = "Unable to connect (#{text})"
    end
    redirect_to :action => 'list'
  end

  def destroy
    @auth_source = AuthSource.find(params[:id])
    unless @auth_source.users.find(:first)
      @auth_source.destroy
      flash.now[:success] = l(:notice_successful_delete)
    end
    redirect_to :action => 'list'
  end
end


================================================
FILE: app/controllers/boards_controller.rb
================================================
# BetterMeans - Work 2.0
# Copyright (C) 2006-2011  See readme for details and license#

class BoardsController < ApplicationController
  default_search_scope :messages
  before_filter :find_project, :authorize
  ssl_required :all

  helper :messages
  include MessagesHelper
  helper :sort
  include SortHelper
  helper :watchers
  include WatchersHelper

  def index
    @boards = @project.boards
    # show the board if there is only one
    if @boards.size == 1
      @board = @boards.first
      show
    end
  end

  def show
    respond_to do |format|
      format.html {
        sort_init 'updated_at', 'desc'
        sort_update 'created_at' => "#{Message.table_name}.created_at",
                    'replies' => "#{Message.table_name}.replies_count",
                    'updated_at' => "#{Message.table_name}.updated_at"

        @topic_count = @board.topics.count
        @topic_pages = Paginator.new self, @topic_count, per_page_option, params['page']
        @topics =  @board.topics.find :all, :order => ["#{Message.table_name}.sticky DESC", sort_clause].compact.join(', '),
                                      :include => [:author, {:last_reply => :author}],
                                      :limit  =>  @topic_pages.items_per_page,
                                      :offset =>  @topic_pages.current.offset
        @message = Message.new
        render :action => 'show', :layout => !request.xhr?
      }
    end
  end

  verify :method => :post, :only => [ :destroy ], :redirect_to => { :action => :index }

  def new
    @board = Board.new(params[:board])
    @board.project = @project
    if request.post? && @board.save
      flash.now[:success] = l(:notice_successful_create)
      redirect_to :controller => 'projects', :action => 'settings', :id => @project, :tab => 'boards'
    end
  end

  def edit
    if request.post? && @board.update_attributes(params[:board])
      redirect_to :controller => 'projects', :action => 'settings', :id => @project, :tab => 'boards'
    end
  end

  def destroy
    @board.destroy
    redirect_to :controller => 'projects', :action => 'settings', :id => @project, :tab => 'boards'
  end

  private

  def find_project
    @project = Project.find(params[:project_id])
    render_message l(:text_project_locked) if @project.locked?
    @board = @project.boards.find(params[:id]) if params[:id]
  rescue ActiveRecord::RecordNotFound
    render_404
  end
end


================================================
FILE: app/controllers/comments_controller.rb
================================================
class CommentsController < ApplicationController
  unloadable
  before_filter :find_issue, :only => [:index, :create ]
  before_filter :find_project, :authorize
  ssl_required :all

  log_activity_streams :current_user, :name, :updated, :@issue, :subject, :create, :issues, {
            :object_description_method => :description,
            :indirect_object => :@journal,
            :indirect_object_description_method => :notes,
            :indirect_object_phrase => '' }

  def index
    @journals = @issue.journals.find(:all,
                                          :include => [:user, :details],
                                          :order => "#{Journal.table_name}.created_at DESC",
                                          :conditions => "notes!=''")
  end

  def create
    @journal = @issue.init_journal(User.current, params[:comment])
    @journal.save!
    @journal.reload
    @issue.reload
    render :json => @issue.to_dashboard
  end

  private

  def find_issue
    @issue = Issue.find(params[:issue_id])
  end

  def find_project
    @project = @issue.project
  end
end


================================================
FILE: app/controllers/credit_distributions_controller.rb
================================================
class CreditDistributionsController < ApplicationController
  before_filter :require_admin
  ssl_required :all


  def index
    @credit_distributions = CreditDistribution.all

    respond_to do |format|
      format.html
      format.xml  { render :xml => @credit_distributions }
    end
  end

  def show
    @credit_distribution = CreditDistribution.find(params[:id])

    respond_to do |format|
      format.html
      format.xml  { render :xml => @credit_distribution }
    end
  end

  def new
    @credit_distribution = CreditDistribution.new

    respond_to do |format|
      format.html
      format.xml  { render :xml => @credit_distribution }
    end
  end

  def edit
    @credit_distribution = CreditDistribution.find(params[:id])
  end

  def create
    @credit_distribution = CreditDistribution.new(params[:credit_distribution])

    respond_to do |format|
      if @credit_distribution.save
        flash.now[:success] = 'CreditDistribution was successfully created.'
        format.html { redirect_to(@credit_distribution) }
        format.xml  { render :xml => @credit_distribution, :status => :created, :location => @credit_distribution }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @credit_distribution.errors, :status => :unprocessable_entity }
      end
    end
  end

  def update
    @credit_distribution = CreditDistribution.find(params[:id])

    respond_to do |format|
      if @credit_distribution.update_attributes(params[:credit_distribution])
        flash.now[:success] = 'CreditDistribution was successfully updated.'
        format.html { redirect_to(@credit_distribution) }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @credit_distribution.errors, :status => :unprocessable_entity }
      end
    end
  end

  def destroy
    @credit_distribution = CreditDistribution.find(params[:id])
    @credit_distribution.destroy

    respond_to do |format|
      format.html { redirect_to(credit_distributions_url) }
      format.xml  { head :ok }
    end
  end
end


================================================
FILE: app/controllers/credit_transfers_controller.rb
================================================
# BetterMeans - Work 2.0
# Copyright (C) 2006-2011  See readme for details and license
#

class CreditTransfersController < ApplicationController
  ssl_required :all
  before_filter :authorize_global, :except => :eligible_recipients

  def index
    @credit_transfers = CreditTransfer.find(:all, :conditions => "sender_id = #{User.current.id} or recipient_id = #{User.current.id}", :include => [:sender, :recipient, :project],:order => "created_at DESC")
    project_id_array = Credit.find(:all,:conditions => {:settled_on => nil, :owner_id => User.current.id}).group_by(&:project_id).collect{|p| p[0]}
    if project_id_array.empty?
    else
      @project_list = Project.find(:all, :conditions => "id IN (#{project_id_array.join(",")})").sort! {|x,y| x.name <=> y.name }
      if params[:selected_project_id]
        @selected_project_id = Integer(params[:selected_project_id])
        @project = Project.find(@selected_project_id)
        @total_credits = Credit.round(Credit.sum(:amount, :conditions => {:settled_on => nil, :owner_id => User.current.id, :project_id => @project.id}))
        @user_list = @project.root.all_members
        #remove current user from list
        @user_list.delete_if { |a| a.user_id == User.current.id}

      end
    end
  end

  def create
    recipient = User.find(params[:credit_transfer][:recipient_id])
    project = Project.find(params[:credit_transfer][:project_id])

    total_transferred = Credit.transfer User.current, recipient, project, Float(params[:amount]), params[:note]

    respond_to do |format|
      flash.now[:success] = "Successfully transferred #{total_transferred} credits to #{recipient.name}"
      format.html { redirect_to :action => "index" }
      flash.keep
    end
  rescue Exception => e
    flash.now[:error] = l(:text_failed_to_transfer) + e.message
    redirect_to :action => "index"
    flash.keep
  end


  def eligible_recipients
    @project = Project.find(params[:project_id])
    @total_credits = Credit.round(Credit.sum(:amount, :conditions => {:settled_on => nil, :owner_id => User.current.id, :project_id => @project.id}))
    @user_list = ""
    @user_list = @project.root.all_members

    #remove current user from list
    @user_list.delete_if { |a| a.user_id == User.current.id}

    render :partial => "eligible_recipients"
  end


end


================================================
FILE: app/controllers/credits_controller.rb
================================================
class CreditsController < ApplicationController

  before_filter :require_admin, :except => [:disable, :enable]
  before_filter :find_credit, :only => [:disable, :enable]
  before_filter :self_authorize, :only => [:disable, :enable]
  ssl_required :all


  def index
    @project = Project.find(params[:project_id]) unless params[:project_id].nil?

    @credits = @project.credits
    @active_credits = @credits.find_all{|credit| credit.enabled == true }.group_by{|credit| credit.owner_id}



    respond_to do |format|
      format.html
      format.xml  { render :xml => @credits }
    end
  end

  def show
    @credit = Credit.find(params[:id])

    respond_to do |format|
      format.html
      format.xml  { render :xml => @credit }
    end
  end

  def new
    @credit = Credit.new

    respond_to do |format|
      format.html
      format.xml  { render :xml => @credit }
    end
  end

  def edit
    @credit = Credit.find(params[:id])
  end

  def create
    @credit = Credit.new(params[:credit])

    respond_to do |format|
      if @credit.save
        flash.now[:success] = 'Credit was successfully created.'
        format.html { redirect_to :controller => :projects, :id => @credit.project_id, :action => "credits" }
        format.xml  { render :xml => @credit, :status => :created, :location => @credit }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @credit.errors, :status => :unprocessable_entity }
      end
    end
  end

  def update
    @credit = Credit.find(params[:id])

    respond_to do |format|
      if @credit.update_attributes(params[:credit])
        flash.now[:success] = 'Credit was successfully updated.'
        format.html { redirect_to :controller => :projects, :id => @credit.project_id, :action => "credits" }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @credit.errors, :status => :unprocessable_entity }
      end
    end
  end

  def disable
    respond_to do |format|
      if @credit.disable
        format.html { redirect_to :controller => :projects, :id => @credit.project_id, :action => "credits" }
        format.js do
          update_credit_partials
        end
      else
        format.html { redirect_to :controller => :projects, :id => @credit.project_id, :action => "credits" }
        format.js do
          render :update do |page|
            page.call '$.jGrowl', 'Something went wrong. Couldn\'t update record.'
          end
        end
      end
    end
  end

  def enable
    respond_to do |format|
      if @credit.enable
        format.html { redirect_to :controller => :projects, :id => @credit.project_id, :action => "credits" }
        format.js do
          update_credit_partials
        end
      else
        format.html { redirect_to :controller => :projects, :id => @credit.project_id, :action => "credits" }
        format.js do
          render :update do |page|
            page.call '$.jGrowl', 'Something went wrong. Couldn\'t update record.'
          end
        end
      end
    end
  end

  def update_credit_partials
    @project = Project.find(params[:project_id])
    @credits = @project.fetch_credits(params[:with_subprojects])
    @active_credits = @credits.find_all{|credit| credit.enabled == true && credit.settled_on.nil? == true }.group_by{|credit| credit.owner_id}

    render :update do |page|
      page.replace_html "my_credits_partial", :partial => 'credits/my_credits'
      page.replace_html "credit_queue_partial", :partial => 'credits/credit_queue'
      page.replace_html "credit_history_partial", :partial => 'credits/credit_history'
      page.replace_html "active_credits_partial", :partial => 'credits/credit_breakdown', :locals => {:group_credits => @active_credits, :title => l(:label_active_credits)}
      page.visual_effect :highlight, "q_#{@credit.id}", :duration => 2
      page.visual_effect :highlight, "h_#{@credit.id}", :duration => 2
      page.visual_effect :highlight, "m_#{@credit.id}", :duration => 3
    end
  end

  def destroy
    @credit = Credit.find(params[:id])
    @credit.destroy

    respond_to do |format|
      format.html { redirect_to :controller => :projects, :id => @credit.project_id, :action => "credits" }
      format.xml  { head :ok }
    end
  end

  private

  def find_credit
    @credit = Credit.find(params[:id])
    rescue ActiveRecord::RecordNotFound
      render_404
  end

  def self_authorize
    if User.current.id != @credit.owner_id
      render_403
      return false
    end
  end
end


================================================
FILE: app/controllers/documents_controller.rb
================================================
# BetterMeans - Work 2.0
# Copyright (C) 2006-2011  See readme for details and license#

class DocumentsController < ApplicationController
  default_search_scope :documents
  before_filter :find_project, :only => [:index, :new]
  before_filter :find_document, :except => [:index, :new]
  before_filter :authorize
  ssl_required :all

  helper :attachments

  log_activity_streams :current_user, :name, :added, :@document, :title, :new, :documents, {:object_description_method => :description}
  log_activity_streams :current_user, :name, :updated, :@document, :title, :edit, :documents, {:object_description_method => :description}
  log_activity_streams :current_user, :name, :deleted, :@document, :title, :destroy, :documents, {:object_description_method => :description}


  def index
    @sort_by = %w(catego»ry date title author).include?(params[:sort_by]) ? params[:sort_by] : 'title'
    documents = @project.documents.find :all, :include => [:attachments]
    case @sort_by
    when 'date'
      @grouped = documents.group_by {|d| d.updated_at.to_date }
    when 'title'
      @grouped = documents.group_by {|d| d.title.first.upcase}
    when 'author'
      @grouped = documents.select{|d| d.attachments.any?}.group_by {|d| d.attachments.last.author}
    else
      @grouped = documents.group_by {|d| d.updated_at.to_date }
    end
    @document = @project.documents.build
    render :layout => false if request.xhr?
  end

  def show
    @attachments = @document.attachments.find(:all, :order => "created_at DESC")
  end

  def new
    @document = @project.documents.build(params[:document])
    if request.post? and @document.save
      attach_files(@document, params[:attachments])
      flash.now[:success] = l(:notice_successful_create)
      redirect_to :action => 'index', :project_id => @project
    end
  end

  def edit
    if request.post? and @document.update_attributes(params[:document])
      flash.now[:success] = l(:notice_successful_update)
      redirect_to :action => 'show', :id => @document
    end
  end

  def destroy
    @document.destroy
    redirect_to :controller => 'documents', :action => 'index', :project_id => @project
  end

  def add_attachment
    attachments = attach_files(@document, params[:attachments])
    Mailer.deliver_attachments_added(attachments) if !attachments.empty? && Setting.notified_events.include?('document_added')
    redirect_to :action => 'show', :id => @document
  end

  private

  def find_project
    @project = Project.find(params[:project_id])
    render_message l(:text_project_locked) if @project.locked?
  rescue ActiveRecord::RecordNotFound
    render_404
  end

  def find_document
    @document = Document.find(params[:id])
    @project = @document.project
  rescue ActiveRecord::RecordNotFound
    render_404
  end
end


================================================
FILE: app/controllers/email_updates_controller.rb
================================================
class EmailUpdatesController < ApplicationController
  before_filter :require_login
  ssl_required :all

  def new
    @email_update = EmailUpdate.new

    respond_to do |format|
      format.html
      format.xml  { render :xml => @invitation }
    end
  end

  def create
    @email_update = EmailUpdate.new(params[:email_update])
    @email_update.user = User.current

    respond_to do |format|
      if @email_update.save
        @email_update.send_activation
        format.html { redirect_with_flash :success, "Please check #{@email_update.mail} for the activation email", {:controller => :my, :action => "account"}  }
      else
        flash.now[:error] = "Couldn't create email update"
        format.html { render :action => "new" }
      end
    end
  end

  def activate
    @email_update = EmailUpdate.find_by_token(params[:token])

    if @email_update.nil?
      redirect_with_flash :error, l(:error_bad_email_update), :controller => :my, :action => :account
      return
    end

    @email_update.accept


    redirect_with_flash :success, l(:text_email_updated), :controller => :my, :action => :account
    return

  rescue ActiveRecord::RecordNotFound
    redirect_with_flash :error, l(:error_bad_email_update), :controller => :my, :action => :account
  end

end


================================================
FILE: app/controllers/enterprises_controller.rb
================================================
class EnterprisesController < ApplicationController
  ssl_required :all

  def index
    @enterprises = Enterprise.all

    respond_to do |format|
      format.html
      format.xml  { render :xml => @enterprises }
    end
  end

  def show
    @enterprise = Enterprise.find(params[:id])

    respond_to do |format|
      format.html
      format.xml  { render :xml => @enterprise }
    end
  end

  def new
    @enterprise = Enterprise.new

    respond_to do |format|
      format.html
      format.xml  { render :xml => @enterprise }
    end
  end

  def edit
    @enterprise = Enterprise.find(params[:id])
  end

  def create
    @enterprise = Enterprise.new(params[:enterprise])

    respond_to do |format|
      if @enterprise.save
        flash.now[:success] = 'Enterprise was successfully created.'
        format.html { redirect_to(@enterprise) }
        format.xml  { render :xml => @enterprise, :status => :created, :location => @enterprise }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @enterprise.errors, :status => :unprocessable_entity }
      end
    end
  end

  def update
    @enterprise = Enterprise.find(params[:id])

    respond_to do |format|
      if @enterprise.update_attributes(params[:enterprise])
        flash.now[:success] = 'Enterprise was successfully updated.'
        format.html { redirect_to(@enterprise) }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @enterprise.errors, :status => :unprocessable_entity }
      end
    end
  end

  def destroy
    @enterprise = Enterprise.find(params[:id])
    @enterprise.destroy

    respond_to do |format|
      format.html { redirect_to(enterprises_url) }
      format.xml  { head :ok }
    end
  end
end


================================================
FILE: app/controllers/enumerations_controller.rb
================================================
# BetterMeans - Work 2.0
# Copyright (C) 2006-2011  See readme for details and license#

class EnumerationsController < ApplicationController
  layout 'admin'

  before_filter :require_admin
  ssl_required :all

  def index
    list
    render :action => 'list'
  end

  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
  verify :method => :post, :only => [ :destroy, :create, :update ],
         :redirect_to => { :action => :list }

  def list
  end

  def new
    begin
      @enumeration = params[:type].constantize.new
    rescue NameError
      @enumeration = Enumeration.new
    end
  end

  def create
    @enumeration = Enumeration.new(params[:enumeration])
    @enumeration.type = params[:enumeration][:type]
    if @enumeration.save
      flash.now[:success] = l(:notice_successful_create)
      redirect_to :action => 'list', :type => @enumeration.type
    else
      render :action => 'new'
    end
  end

  def edit
    @enumeration = Enumeration.find(params[:id])
  end

  def update
    @enumeration = Enumeration.find(params[:id])
    @enumeration.type = params[:enumeration][:type] if params[:enumeration][:type]
    if @enumeration.update_attributes(params[:enumeration])
      flash.now[:success] = l(:notice_successful_update)
      redirect_to :action => 'list', :type => @enumeration.type
    else
      render :action => 'edit'
    end
  end

  def destroy
    @enumeration = Enumeration.find(params[:id])
    if !@enumeration.in_use?
      # No associated objects
      @enumeration.destroy
      redirect_to :action => 'index'
    elsif params[:reassign_to_id]
      if reassign_to = Enumeration.find_by_type_and_id(@enumeration.type, params[:reassign_to_id])
        @enumeration.destroy(reassign_to)
        redirect_to :action => 'index'
      end
    end
    @enumerations = Enumeration.find(:all, :conditions => ['type = (?)', @enumeration.type]) - [@enumeration]
  end
end


================================================
FILE: app/controllers/help_controller.rb
================================================
class HelpController < ApplicationController
  def show
    @help_key = params[:key]
  end
end


================================================
FILE: app/controllers/help_sections_controller.rb
================================================
class HelpSectionsController < ApplicationController
  before_filter :authorize, :except => :dont_show
  ssl_required :all

  def show

    respond_to do |format|
      if @help_section.show
        format.html
        format.xml  { render :xml => @help_section }
      else
        format.html { render :nothing => true}
      end
    end
  end

  def dont_show
    @help_section = HelpSection.find(params[:id])
    @help_section.show = false
    @help_section.save
    respond_to do |wants|
      wants.js { render :update do |page|
                    page.replace "help_section", ""
                  end
          }
    end
  end

  def new
    @help_section = HelpSection.new

    respond_to do |format|
      format.html
      format.xml  { render :xml => @help_section }
    end
  end

  def edit
    @help_section = HelpSection.find(params[:id])
  end

  def create
    @help_section = HelpSection.new(params[:help_section])

    respond_to do |format|
      if @help_section.save
        flash.now[:success] = 'HelpSection was successfully created.'
        format.html { redirect_to(@help_section) }
        format.xml  { render :xml => @help_section, :status => :created, :location => @help_section }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @help_section.errors, :status => :unprocessable_entity }
      end
    end
  end

  def update
    @help_section = HelpSection.find(params[:id])

    respond_to do |format|
      if @help_section.update_attributes(params[:help_section])
        flash.now[:success] = 'HelpSection was successfully updated.'
        format.html { redirect_to(@help_section) }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @help_section.errors, :status => :unprocessable_entity }
      end
    end
  end

  def destroy
    @help_section = HelpSection.find(params[:id])
    @help_section.destroy

    respond_to do |format|
      format.html { redirect_to(help_sections_url) }
      format.xml  { head :ok }
    end
  end
end


================================================
FILE: app/controllers/home_controller.rb
================================================
class HomeController < ApplicationController
  ssl_required :index
  layout 'static'
  def index
    if User.current.logged?
      redirect_to :controller => 'welcome', :action => 'index'
    else
      redirect_to "/front/index.html"
    end
  end

  def show
    render :action => params[:page]
  end

  def robots
    @projects = Project.all_public.active
    render :layout => false, :content_type => 'text/plain'
  end

end


================================================
FILE: app/controllers/hourly_types_controller.rb
================================================
class HourlyTypesController < ApplicationController
  before_filter :find_project
  ssl_required :all

  def new
    @hourly_type = HourlyType.new(params[:hourly_type])
    @hourly_type.project = @project
    if request.post? && @hourly_type.save
      flash.now[:success] = l(:notice_successful_create)
      redirect_to :controller => 'projects', :action => 'settings', :id => @project, :tab => 'hourly_types'
    end
  end

  def edit
    if request.post? && @hourly_type.update_attributes(params[:hourly_type])
      redirect_to :controller => 'projects', :action => 'settings', :id => @project, :tab => 'hourly_types'
    end
  end

  def destroy
    @hourly_type.destroy
    redirect_to :controller => 'projects', :action => 'settings', :id => @project, :tab => 'hourly_types'
  end

  private

  def find_project
    @project = Project.find(params[:project_id])
    @hourly_type = @project.hourly_types.find(params[:id]) if params[:id]
  rescue ActiveRecord::RecordNotFound
    render_404
  end
end


================================================
FILE: app/controllers/invitations_controller.rb
================================================
class InvitationsController < ApplicationController
  before_filter :find_project, :except => :accept
  before_filter :authorize, :except => :accept
  ssl_required :all

  def index
    @all_invites, @invitations = paginate :invitations,
                                   :per_page => 30,
                                   :conditions => {:user_id => User.current.id, :project_id => @project.id},
                                   :order => "created_at DESC"

    respond_to do |format|
      format.html { render :layout => false if request.xhr? }
      format.xml  { render :xml => @invitations.to_xml }
      format.json { render :json => @invitation.to_json }
    end
  end

  def show
    @invitation = Invitation.find(params[:id])

    respond_to do |format|
      format.html
      format.xml  { render :xml => @invitation }
    end
  end

  def new
    unless @project.root?
      render_error("Project is not root. No invitations needed here.")
      return
    end

    @note = l(:text_invitation_note_default, {:user => User.current.name, :project => @project.name})

    respond_to do |format|
      format.html
      format.xml  { render :xml => @invitation }
    end
  end

  def edit
    @invitation = Invitation.find(params[:id])
  end

  def create

    #can't invite someone to anything other than contributor if you're not admin
    if params[:invitation][:role_id] != Role.contributor.id.to_s && !User.current.admin_of?(@project)
      render_403
      return
    end

    success = false
    @emails = params[:emails]
    @email_array = @emails.gsub(/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i) {|s| s}.collect
    @email_array.uniq!

    @email_array.each do |email|
        @email_array.delete email unless valid_email?(email)
    end

    @email_array.each do |email|
      @invitation = Invitation.new(params[:invitation])
      @invitation.mail = TMail::Address.parse(email).to_s
      @invitation.project_id = @project.id
      @invitation.user_id = User.current.id
      if @invitation.save
        @invitation.deliver(simple_format_without_paragraph(params[:note]))
        success = true
      end
    end

    respond_to do |format|
      if success
        @emails = nil
        @note = params[:note]
        @roles = Role.find(:all, :conditions => {:level => 1}, :order => "position DESC")

        flash.now[:success] = "#{@email_array.length} invitation(s)  successfully sent to<br>" + @email_array.join(", ")
        format.html { render :action => "new" }
        format.xml  { render :xml => @invitation, :status => :created, :location => @invitation }
      else
        flash.now[:error] = "Failed to send invitations. Make sure emails are properly formatted, and are each on a seperate line"
        format.html { render :action => "new" }
        format.xml  { render :xml => @invitation.errors, :status => :unprocessable_entity }
      end
    end
  end

  def accept
    @invitation = Invitation.find(params[:id])

    if @invitation.token != params[:token] || @invitation.status != Invitation::PENDING
      redirect_with_flash :error, l(:error_old_invite), :controller => :projects, :action => :show, :id => @invitation.project_id
      return
    end

    if @invitation.new_mail && !@invitation.new_mail.empty?
      @user = User.find_by_mail(@invitation.new_mail)
    else
      @user = User.find_by_mail(@invitation.mail)
    end

    respond_to do |wants|
      wants.html {
        if @user && !@user.anonymous?
          self.logged_user = @user
          Track.log(Track::LOGIN,request.env['REMOTE_ADDR'])
          @invitation.accept
          msg = "Invitation accepted. You are now a #{@invitation.role.name} of #{@invitation.project.name}."
          redirect_with_flash :success, msg, :controller => :projects, :action => :show, :id => @invitation.project_id
          return
        else
          session[:invitation] = @invitation.token
          redirect_to :controller => :account, :action => :register, :invitation_token => @invitation.token
        end
        }
    end
  end

  def resend
    @invitation = Invitation.find(params[:id])

    respond_to do |format|
      if @invitation.resend(params[:note])
        logger.info { "1" }

        format.js do
          logger.info { "format" }

          render :update do |page|
            logger.info { "ID BABY #{@invitation.id}" }
            page.visual_effect :highlight, "row-#{@invitation.id}", :duration => 3
            page.replace "resend-#{@invitation.id}", "Resent!"
            page.call '$.jGrowl', l(:notice_successful_update)
          end
        end
      else
        format.js do
          render :update do |page|
            page.parent.call '$.jGrowl', l(:error_general)
          end
        end
      end
    end
  end

  def destroy
    @invitation = Invitation.find(params[:id])
    @invitation.destroy

    respond_to do |format|
      format.js do
        render :update do |page|
          page.visual_effect :highlight, "row-#{@invitation.id}", :duration => 3
          page.remove "row-#{@invitation.id}"
          page.call '$.jGrowl', l(:notice_successful_delete)
        end
      end
    end
  end

  private

  def find_project
    @project = Project.find(params[:project_id])
    render_message l(:text_project_locked) if @project.locked?
  rescue ActiveRecord::RecordNotFound
    render_404
  end

  def valid_email?(email)
    TMail::Address.parse(email)
    return true
  rescue
    return false
  end

end


================================================
FILE: app/controllers/issue_invitations_controller.rb
================================================
# BetterMeans - Work 2.0
# Copyright (C) 2006-2011  See readme for details and license#

class IssueInvitationsController < ApplicationController
  def new
    @quote = Quote.new

    respond_to do |format|
      format.html
      format.xml  { render :xml => @quote }
    end
  end

  def create
    @quote = Quote.new(params[:quote])
    @quote.user_id = User.current.id

    respond_to do |format|
      flash.now[:success] = 'Invitation was successfully created and sent'
      format.html { redirect_to(@quote) }
      format.xml  { render :xml => @quote, :status => :created, :location => @quote }
    end
  end

end


================================================
FILE: app/controllers/issue_relations_controller.rb
================================================
# Redmine - project management software
# Copyright (C) 2006-2011  See readme for details and license
#


class IssueRelationsController < ApplicationController
  before_filter :find_project, :authorize
  ssl_required :all

  def new
    @relation = IssueRelation.new(params[:relation])
    @relation.issue_from = @issue
    if params[:relation] && !params[:relation][:issue_to_id].blank?
      @relation.issue_to = Issue.visible.find_by_id(params[:relation][:issue_to_id])
    end
    @relation.save if request.post?
    respond_to do |format|
      format.html { redirect_to :controller => 'issues', :action => 'show', :id => @issue }
      format.js do
        render :update do |page|
          page.replace_html "relations", :partial => 'issues/relations'
          if @relation.errors.empty?
            page << "$('relation_delay').value = ''"
            page << "$('relation_issue_to_id').value = ''"
          end
        end
      end
    end
  end

  def destroy
    relation = IssueRelation.find(params[:id])
    if request.post? && @issue.relations.include?(relation)
      relation.destroy
      @issue.reload
    end
    respond_to do |format|
      format.html { redirect_to :controller => 'issues', :action => 'show', :id => @issue }
      format.js { render(:update) {|page| page.replace_html "relations", :partial => 'issues/relations'} }
    end
  end

  private

  def find_project
    @issue = Issue.find(params[:issue_id])
    @project = @issue.project
  rescue ActiveRecord::RecordNotFound
    render_404
  end

end


================================================
FILE: app/controllers/issue_statuses_controller.rb
================================================
# BetterMeans - Work 2.0
# Copyright (C) 2006-2011  See readme for details and license#

class IssueStatusesController < ApplicationController
  layout 'admin'

  before_filter :require_admin
  ssl_required :all

  verify :method => :post, :only => [ :destroy, :create, :update, :move ],
         :redirect_to => { :action => :list }

  def index
    list
    render :action => 'list' unless request.xhr?
  end

  def list
    @issue_status_pages, @issue_statuses = paginate :issue_statuses, :per_page => 25, :order => "position"
    render :action => "list", :layout => false if request.xhr?
  end

  def new
    @issue_status = IssueStatus.new
  end

  def create
    @issue_status = IssueStatus.new(params[:issue_status])
    if @issue_status.save
      flash.now[:success] = l(:notice_successful_create)
      redirect_to :action => 'list'
    else
      render :action => 'new'
    end
  end

  def edit
    @issue_status = IssueStatus.find(params[:id])
  end

  def update
    @issue_status = IssueStatus.find(params[:id])
    if @issue_status.update_attributes(params[:issue_status])
      flash.now[:success] = l(:notice_successful_update)
      redirect_to :action => 'list'
    else
      render :action => 'edit'
    end
  end

  def destroy
    IssueStatus.find(params[:id]).destroy
    redirect_to :action => 'list'
  rescue
    flash.now[:error] = "Unable to delete issue status"
    redirect_to :action => 'list'
  end
end


================================================
FILE: app/controllers/issue_votes_controller.rb
================================================
class IssueVotesController < ApplicationController
  ssl_required :all

  def index
    @issue_votes = IssueVote.all

    respond_to do |format|
      format.html
      format.xml  { render :xml => @issue_votes }
    end
  end

  def show
    @issue_vote = IssueVote.find(params[:id])

    respond_to do |format|
      format.html
      format.xml  { render :xml => @issue_vote }
    end
  end

  def new
    @issue_vote = IssueVote.new

    respond_to do |format|
      format.html
      format.xml  { render :xml => @issue_vote }
    end
  end

  def edit
    @issue_vote = IssueVote.find(params[:id])
  end

  def create
    @issue_vote = IssueVote.new(params[:issue_vote])

    respond_to do |format|
      if @issue_vote.save
        flash.now[:success] = 'IssueVote was successfully created.'
        format.html { redirect_to(@issue_vote) }
        format.xml  { render :xml => @issue_vote, :status => :created, :location => @issue_vote }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @issue_vote.errors, :status => :unprocessable_entity }
      end
    end
  end

  def update
    @issue_vote = IssueVote.find(params[:id])

    respond_to do |format|
      if @issue_vote.update_attributes(params[:issue_vote])
        flash.now[:success] = 'IssueVote was successfully updated.'
        format.html { redirect_to(@issue_vote) }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @issue_vote.errors, :status => :unprocessable_entity }
      end
    end
  end

  def destroy
    @issue_vote = IssueVote.find(params[:id])
    @issue_vote.destroy

    respond_to do |format|
      format.html { redirect_to(issue_votes_url) }
      format.xml  { head :ok }
    end
  end
end


================================================
FILE: app/controllers/issues_controller.rb
================================================
# BetterMeans - Work 2.0
# Copyright (C) 2006-2011  See readme for details and license#

class IssuesController < ApplicationController
  menu_item :new_issue, :only => :new
  default_search_scope :issues
  ssl_required :all

  # BUGBUG: :disagree and :reject don't seem to be used anymore
  before_filter :find_issue, :only => [:show, :edit, :reply, :start, :finish, :release, :cancel, :restart, :prioritize, :agree, :disagree, :accept, :reject, :estimate, :join, :leave, :add_team_member, :remove_team_member, :move, :update_tags]
  before_filter :find_issues, :only => [:bulk_edit, :move, :destroy]
  before_filter :find_project, :only => [:new, :update_form, :preview]
  before_filter :authorize, :except => [:index, :changes, :gantt, :calendar, :preview, :context_menu, :datadump, :temp]
  before_filter :find_optional_project, :only => [:index, :changes, :gantt, :calendar]
  accept_key_auth :index, :show, :changes

  rescue_from Query::StatementInvalid, :with => :query_statement_invalid

  helper :journals
  helper :projects
  include ProjectsHelper
  helper :issue_relations
  include IssueRelationsHelper
  helper :watchers
  include WatchersHelper
  helper :attachments
  include AttachmentsHelper
  helper :queries
  helper :sort
  include SortHelper
  include IssuesHelper
  include Redmine::Export::PDF

  verify :method => :post,
         :only => :destroy,
         :render => { :nothing => true, :status => :method_not_allowed}

  log_activity_streams :current_user, :name, :added, :@issue, :subject, :new, :issues, {:object_description_method => :description}
  log_activity_streams :current_user, :name, :finished, :@issue, :subject, :finish, :issues, {
    :object_description_method => :description,
    :indirect_object => :@journal,
    :indirect_object_description_method => :notes,
    :indirect_object_phrase => '' }

  log_activity_streams :current_user, :name, :started, :@issue, :subject, :start, :issues, {:object_description_method => :description}
  log_activity_streams :current_user, :name, :gave_up_on, :@issue, :subject, :release, :issues, {:object_description_method => :description}
  log_activity_streams :current_user, :name, :canceled, :@issue, :subject, :cancel, :issues, {
    :object_description_method => :description,
    :indirect_object => :@journal,
    :indirect_object_description_method => :notes,
    :indirect_object_phrase => '' }
  log_activity_streams :current_user, :name, :joined, :@issue, :subject, :join, :issues, {:object_description_method => :description}
  log_activity_streams :current_user, :name, :left, :@issue, :subject, :leave, :issues, {:object_description_method => :description}
  log_activity_streams :current_user, :name, :updated, :@issue, :subject, :edit, :issues,{
    :object_description_method => :description,
    :indirect_object => :@journal,
    :indirect_object_description_method => :notes,
    :indirect_object_phrase => 'GENERATEDETAILS' } #special value generates details for each property change

  log_activity_streams :current_user, :name, :restarted, :@issue, :subject, :restart, :issues, {}

  def index
    retrieve_query
    sort_init(@query.sort_criteria.empty? ? [['id', 'desc']] : @query.sort_criteria)
    sort_update({'id' => "#{Issue.table_name}.id"}.merge(@query.available_columns.inject({}) {|h, c| h[c.name.to_s] = c.sortable; h}))

    if @query.valid?
      limit = per_page_option
      respond_to do |format|
        format.html { }
        format.csv  { limit = Setting.issues_export_limit.to_i }
        format.pdf  { limit = Setting.issues_export_limit.to_i }
      end

      @issue_count = @query.issue_count
      @issue_pages = Paginator.new self, @issue_count, limit, params['page']
      @issues = @query.issues(:include => [:assigned_to, :tracker],
                              :order => sort_clause,
                              :offset => @issue_pages.current.offset,
                              :limit => limit)
      @issue_count_by_group = @query.issue_count_by_group

      respond_to do |format|
        format.html { render :template => 'issues/index.html.erb', :layout => !request.xhr? }
        format.csv  { send_data(issues_to_csv(@issues, @project), :type => 'text/csv; header=present', :filename => 'export.csv') }
        format.pdf  { send_data(issues_to_pdf(@issues, @project, @query), :type => 'application/pdf', :filename => 'export.pdf') }
      end
    else
      # Send html if the query is not valid
      render(:template => 'issues/index.html.erb', :layout => !request.xhr?)
    end
  rescue ActiveRecord::RecordNotFound
    render_404
  end

  def show
    @journals = @issue.journals.find(:all, :include => [:user, :details], :order => "#{Journal.table_name}.created_at ASC")
    @journals.each_with_index {|j,i| j.indice = i+1}
    @journals.reverse! if User.current.wants_comments_in_reverse_order?
    @edit_allowed = true
    @edit_allowed = @issue.editable? && User.current.allowed_to?(:edit_issues, @project)

    respond_to do |format|
      format.html { render :template => 'issues/show.html.erb', :layout => 'issue_blank' }
      format.pdf  { send_data(issue_to_pdf(@issue), :type => 'application/pdf', :filename => "#{@project.identifier}-#{@issue.id}.pdf") }
    end
  end

  # Add a new issue
  # The new issue will be created from an existing one if copy_from parameter is given
  def new
    @issue = Issue.new
    @issue.copy_from(params[:copy_from]) if params[:copy_from]
    @issue.project = @project
    @issue.tracker ||= Tracker.find(params[:tracker_id] || :first || params[:issue][:tracker_id])
    if @issue.tracker.nil?
      render_error l(:error_no_tracker_in_project)
      return
    end
    if params[:issue].is_a?(Hash)
      @issue.attributes = params[:issue]
      @issue.watcher_user_ids = params[:issue]['watcher_user_ids'] if User.current.allowed_to?(:add_issue_watchers, @project)
    end
    @issue.author = User.current


    default_status = IssueStatus.default
    unless default_status
      render_error l(:error_no_default_issue_status)
      return
    end
    @issue.status = default_status
    @allowed_statuses = ([default_status] + default_status.find_new_statuses_allowed_to(User.current.roles_for_project(@project), @issue.tracker)).uniq

    if request.get?
      @issue.start_date ||= Date.today
    else
      if params[:issue].nil? || params[:issue][:status_id].nil?
        requested_status = default_status
      else
        requested_status = IssueStatus.find_by_id(params[:issue][:status_id])
      end

      @issue.status = requested_status
      @issue.tag_list = @issue.tags_copy if @issue.tags_copy

      if @issue.save
        Mention.parse(@issue, User.current.id)
        attach_files_for_new_issue(@issue, params[:attachments])

        #adding self-agree vote
        @iv = IssueVote.create :issue_id => @issue.id, :user_id => User.current.id, :points => 1, :vote_type => IssueVote::AGREE_VOTE_TYPE
        @issue.update_agree_total @iv.isbinding

        #dealing with the estimate
        if params[:estimate] && params[:estimate] != ""  #-2 means that nothing was chosen
          @iv = IssueVote.create :issue_id => @issue.id, :user_id => User.current.id, :points => params[:estimate].to_i, :vote_type => IssueVote::ESTIMATE_VOTE_TYPE
          @issue.update_estimate_total @iv.isbinding
        end

        #dealing with prioritizing
        if params[:prioritize] == "true"
          @iv = IssueVote.create :issue_id => @issue.id, :user_id => User.current.id, :points => 1, :vote_type => IssueVote::PRI_VOTE_TYPE
          @issue.update_pri_total @iv.isbinding
        end

        @issue.save if !@issue.update_status

        @issue.reload

        respond_to do |format|
          format.js {render :json => @issue.to_dashboard}
          format.html {redirect_to(params[:continue] ? { :action => 'new', :tracker_id => @issue.tracker } :
                                        { :action => 'show', :id => @issue })}
        end
        return
      else
        respond_to do |format|
          format.js {render :text => nil}
          format.html { render :action => "new" }
        end
        return
      end
    end

    render :layout => !request.xhr?
  end

  # Attributes that can be updated on workflow transition (without :edit permission)
  # TODO: make it configurable (at least per role)
  UPDATABLE_ATTRS_ON_TRANSITION = %w(status_id assigned_to_id done_ratio) unless const_defined?(:UPDATABLE_ATTRS_ON_TRANSITION)

  def edit
    @allowed_statuses = @issue.new_statuses_allowed_to(User.current)
    @edit_allowed = @issue.editable? && User.current.allowed_to?(:edit_issues, @project)

    @notes = params[:notes]
    @journal = @issue.init_journal(User.current, @notes)
    # User can change issue attributes only if he has :edit permission or if a workflow transition is allowed
    if (@edit_allowed || !@allowed_statuses.empty?) && params[:issue]
      attrs = params[:issue].dup
      attrs.delete_if {|k,v| !UPDATABLE_ATTRS_ON_TRANSITION.include?(k) } unless @edit_allowed
      attrs.delete(:status_id) unless @allowed_statuses.detect {|s| s.id.to_s == attrs[:status_id].to_s}
      @issue.attributes = attrs
    end

    if request.post?
      attachments = attach_files(@issue, params[:attachments])
      attachments.each {|a| @journal.details << JournalDetail.new(:property => 'attachment', :prop_key => a.id, :value => a.filename)}

      if @issue.save
        Mention.parse(@issue, User.current.id)

        @issue.reload
        respond_to do |format|
          format.js {render :json => @issue.to_dashboard}
          format.html {redirect_to(params[:back_to] || {:action => 'show', :id => @issue})}
        end
      end
    end
  rescue ActiveRecord::StaleObjectError
    # Optimistic locking exception
    flash.now[:error] = l(:notice_locking_conflict)
    # Remove the previously added attachments if issue was not updated
    attachments.each(&:destroy)
  end

  def start
    @in_progress = Issue.count(:conditions => {:assigned_to_id => User.current.id, :status_id => IssueStatus.assigned.id, :project_id => @issue.project_id})
    if @in_progress >= Setting::MAXIMUM_CONCURRENT_REQUESTS
      render_error "Maximum issues owned by this user already"
      return false;
    else
      IssueVote.create :user_id => User.current.id, :issue_id => params[:id], :vote_type => IssueVote::JOIN_VOTE_TYPE, :points => 1 #Joins as first person on the team
      IssueVote.delete_all :issue_id => params[:id], :vote_type => IssueVote::ACCEPT_VOTE_TYPE
      params[:issue] = {:status_id => IssueStatus.assigned.id, :assigned_to_id => User.current.id}
      change_status
    end
  end

  def finish
    params[:issue] = {:status_id => IssueStatus.done.id}
    @iv = IssueVote.create :user_id => User.current.id, :issue_id => @issue.id, :vote_type => IssueVote::ACCEPT_VOTE_TYPE, :points => 1 #adding accept vote for user who finished the issue
    @issue.update_accept_total  @iv.isbinding
    @issue.clone_recurring if @issue.tracker.recurring?
    @issue.set_points_from_hourly if @issue.is_hourly? #an hourly item is done, we set the
    change_status
  end

  def release
    if(@issue.is_hourly?)
      params[:issue] = {:status_id => IssueStatus.newstatus.id, :assigned_to_id => ''}
    else
      #Deleting current user from issue
      IssueVote.delete_all(["user_id = ? AND issue_id = ? AND vote_type = ?", User.current.id, params[:id], IssueVote::JOIN_VOTE_TYPE])

      #Check to see if anybody else is on the issue, if they are assign the issue to them
      next_team_member = @issue.team_members.first
      if next_team_member.nil?
        new_status_id = IssueStatus.open.id
        params[:issue] = {:status_id => IssueStatus.open.id, :assigned_to_id => ''}
      else
        params[:issue] = {:assigned_to_id => next_team_member.id}
      end
    end

    change_status
  end

  def cancel
    params[:issue] = {:status_id => IssueStatus.canceled.id}
    change_status
  end

  def restart
    params[:issue] = {:status_id => IssueStatus.newstatus.id}
    change_status
  end

  def change_status
      @notes = params[:notes]
      @journal = @issue.init_journal(User.current, @notes)

        attrs = params[:issue].dup
        @issue.attributes = attrs

      if @issue.save
        respond_to do |format|
          @issue.reload
          format.js {render :json => @issue.to_dashboard}
          format.html {redirect_to(params[:back_to] || {:action => 'show', :id => @issue})}
        end
      end
    rescue ActiveRecord::StaleObjectError
      # Optimistic locking exception
      flash.now[:error] = l(:notice_locking_conflict)
  end

  def prioritize
    @iv = IssueVote.create :user_id => User.current.id, :issue_id => params[:id], :vote_type => IssueVote::PRI_VOTE_TYPE, :points => params[:points]
    @issue.update_pri_total @iv.isbinding
    @issue.save
    @issue.reload
    respond_to do |format|
      format.js {render :json => @issue.to_dashboard}
      format.html {redirect_to(params[:back_to] || {:action => 'show', :id => @issue})}
    end
  end

  def update_tags
    @issue.send_later(:update_tags,params[:tags])

    respond_to do |format|
      format.js {render :nothing => true}
      format.html {redirect_to(params[:back_to] || {:action => 'show', :id => @issue})}
    end
  end


  def estimate
    if(@issue.is_hourly?)
      render_error 'Can not estimate hourly items'
      return false;
    end

    @journal = @issue.init_journal(User.current, params["notes"])

    @iv = IssueVote.create :user_id => User.current.id, :issue_id => params[:id], :vote_type => IssueVote::ESTIMATE_VOTE_TYPE, :points => params[:points]
    logger.info { "before update #{@issue.inspect}" }
    @issue.update_estimate_total @iv.isbinding
    logger.info { "after update #{@issue.inspect}" }
    logger.info { "start saving" }
    @issue.save if !@issue.update_status
    logger.info { "done saving #{@issue.inspect}" }
    @issue.reload

    respond_to do |format|
      format.js {render :json => @issue.to_dashboard}
      format.html {redirect_to(params[:back_to] || {:action => 'show', :id => @issue})}
    end
  end


  def agree
    @iv = IssueVote.create :user_id => User.current.id, :issue_id => params[:id], :vote_type => IssueVote::AGREE_VOTE_TYPE, :points => params[:points]
    journal = @issue.init_journal(User.current, params[:notes]) if params[:notes]
    @issue.update_agree_total @iv.isbinding
    @issue.save if !@issue.update_status
    @issue.reload

    if params[:notes]
      action = :updated
      logger.info { "action is #{params[:points]}" }
      case params[:points]
      when "-1"
        action = "voted against"
      when "-9999"
        action = :blocked
      end

      LogActivityStreams.write_single_activity_stream(User.current,:name,@issue,:subject,action,:issues, 0, journal,{
          :indirect_object_description_method => :notes,
          :indirect_object_phrase => 'GENERATEDETAILS' })
    end

    respond_to do |format|
      format.js {render :json => @issue.to_dashboard}
      format.html {redirect_to(params[:back_to] || {:action => 'show', :id => @issue})}
    end
  end


  def accept
    @iv = IssueVote.create :user_id => User.current.id, :issue_id => params[:id], :vote_type => IssueVote::ACCEPT_VOTE_TYPE, :points => params[:points]
    journal = @issue.init_journal(User.current, params[:notes]) if params[:notes]
    @issue.update_accept_total  @iv.isbinding
    @issue.save if !@issue.update_status
    @issue.reload

    if params[:notes]
      action = :updated
      logger.info { "action is #{params[:points]}" }
      case params[:points]
      when "-1"
        action = :rejected
      when "-9999"
        action = "blocked acceptance of"
      end

      LogActivityStreams.write_single_activity_stream(User.current,:name,@issue,:subject,action,:issues, 0, journal,{
          :indirect_object_description_method => :notes,
          :indirect_object_phrase => 'GENERATEDETAILS' })
    end


    respond_to do |format|
      format.js {render :json => @issue.to_dashboard}
      format.html {redirect_to(params[:back_to] || {:action => 'show', :id => @issue})}
    end
  end

  def join
    IssueVote.create :user_id => User.current.id, :issue_id => params[:id], :vote_type => IssueVote::JOIN_VOTE_TYPE, :points => 1
    @issue.save
    @issue.reload

    Notification.create :recipient_id => @issue.assigned_to_id,
                        :variation => 'issue_joined',
                        :params => {:issue_id => @issue.id},
                        :sender_id => User.current.id,
                        :source_id => @issue.id,
                        :source_type => "Issue"


    respond_to do |format|
      format.js {render :json => @issue.to_dashboard}
      format.html {redirect_to(params[:back_to] || {:action => 'show', :id => @issue})}
    end
  end

  def add_team_member
    IssueVote.create :user_id => params[:issue_vote][:user_id], :issue_id => params[:id], :vote_type => IssueVote::JOIN_VOTE_TYPE, :points => 1
    @issue.save
    @issue.reload

    Notification.create :recipient_id => params[:issue_vote][:user_id],
                        :variation => 'issue_team_member_added',
                        :params => {:issue_id => @issue.id, :joiner_id => params[:issue_vote][:user_id]},
                        :sender_id => User.current.id,
                        :source_id => @issue.id,
                        :source_type => "Issue"


    respond_to do |format|
      format.js do
        render :update do |page|
          page.replace "joined_by_partial", :partial => 'issues/joined_by'
          page.visual_effect :highlight, "joined_by_partial"
        end
      end
    end
  end

  def remove_team_member
    IssueVote.delete_all :user_id => params[:user_id], :issue_id => params[:id], :vote_type => IssueVote::JOIN_VOTE_TYPE

    Notification.create :recipient_id => params[:user_id],
                        :variation => 'issue_team_member_removed',
                        :params => {:issue_id => @issue.id, :joiner_id => params[:user_id]},
                        :sender_id => User.current.id,
                        :source_id => @issue.id,
                        :source_type => "Issue"

    respond_to do |format|
      format.js do
        render :update do |page|
          page.replace "joined_by_partial", :partial => 'issues/joined_by'
          page.visual_effect :highlight, "joined_by_partial"
        end
      end
    end
  end


  def leave
    IssueVote.delete_all(["user_id = ? AND issue_id = ? AND vote_type = ?", User.current.id, params[:id], IssueVote::JOIN_VOTE_TYPE])
    @issue.save
    @issue.reload

    admin = User.sysadmin
    Notification.create :recipient_id => @issue.assigned_to_id,
                        :variation => 'issue_left',
                        :params => {:issue => @issue, :joiner => User.current},
                        :sender_id => User.current.id,
                        :source_id => @issue.id,
                        :source_type => "Issue"


    respond_to do |format|
      format.js {render :json => @issue.to_dashboard}
      format.html {redirect_to(params[:back_to] || {:action => 'show', :id => @issue})}
    end
  end

  def reply
    journal = Journal.find(params[:journal_id]) if params[:journal_id]
    if journal
      user = journal.user
      text = journal.notes
    else
      user = @issue.author
      text = @issue.description
    end
    content = "#{ll(Setting.default_language, :text_user_wrote, user)}\\n> "
    content << text.to_s.strip.gsub(%r{<pre>((.|\s)*?)</pre>}m, '[...]').gsub('"', '\"').gsub(/(\r?\n|\r\n?)/, "\\n> ") + "\\n\\n"
    render(:update) { |page|
      page.<< "$('notes').value = \"#{content}\";"
      page.show 'update'
      page << "$('#notes').focus();"
      page << "$('body').scrollTo('#update');"
    }
  end

  # Bulk edit a set of issues
  def bulk_edit
    if request.post?
      tracker = params[:tracker_id].blank? ? nil : @project.trackers.find_by_id(params[:tracker_id])
      status = params[:status_id].blank? ? nil : IssueStatus.find_by_id(params[:status_id])
      assigned_to = (params[:assigned_to_id].blank? || params[:assigned_to_id] == 'none') ? nil : User.find_by_id(params[:assigned_to_id])

      unsaved_issue_ids = []
      @issues.each do |issue|
        journal = issue.init_journal(User.current, params[:notes])
        issue.tracker = tracker if tracker
        issue.assigned_to = assigned_to if assigned_to || params[:assigned_to_id] == 'none'
        issue.start_date = params[:start_date] unless params[:start_date].blank?
        issue.due_date = params[:due_date] unless params[:due_date].blank?
        issue.done_ratio = params[:done_ratio] unless params[:done_ratio].blank?
        # Don't save any change to the issue if the user is not authorized to apply the requested status
        unless (status.nil? || (issue.new_statuses_allowed_to(User.current).include?(status) && issue.status = status)) && issue.save
          # Keep unsaved issue ids to display them in flash error
          unsaved_issue_ids << issue.id
        end
      end
      if unsaved_issue_ids.empty?
        flash.now[:success] = l(:notice_successful_update) unless @issues.empty?
      else
        flash.now[:error] = l(:notice_failed_to_save_issues, :count => unsaved_issue_ids.size,
                                                         :total => @issues.size,
                                                         :ids => '#' + unsaved_issue_ids.join(', #'))
      end
      redirect_to(params[:back_to] || {:controller => 'issues', :action => 'index', :project_id => @project})
      return
    end
    @available_statuses = Workflow.available_statuses(@project)
  end

  def move
    @copy = params[:copy_options] && params[:copy_options][:copy]
    @allowed_projects = []
    # find projects to which the user is allowed to move the issue
    if User.current.admin?
      # admin is allowed to move issues to any active (visible) project
      @allowed_projects = Project.find(:all, :conditions => Project.visible_by(User.current))
    else
      @issue.project.root.self_and_descendants.each {|p| @allowed_projects << p if p.visible_to(User.current)}
    end

    @target_project = @allowed_projects.detect {|p| p.id.to_s == params[:new_project_id]} if params[:new_project_id]
    @target_project ||= @project
    @trackers = @target_project.trackers
    @available_statuses = Workflow.available_statuses(@project)
    if request.post?
      new_tracker = params[:new_tracker_id].blank? ? nil : @target_project.trackers.find_by_id(params[:new_tracker_id])
      unsaved_issue_ids = []
      moved_issues = []
      @issues.each do |issue|
        changed_attributes = {}
        [:assigned_to_id, :status_id, :start_date, :due_date].each do |valid_attribute|
          unless params[valid_attribute].blank?
            changed_attributes[valid_attribute] = (params[valid_attribute] == 'none' ? nil : params[valid_attribute])
          end
        end
        issue.init_journal(User.current)
        if r = issue.move_to(@target_project, new_tracker, {:copy => @copy, :attributes => changed_attributes})
          LogActivityStreams.write_single_activity_stream(User.current,:name,issue,:subject,:moved,:move, 0, @target_project, {
                    :indirect_object_name_method => :name,
                    :indirect_object_description_method => :name,
                    :indirect_object_phrase => 'to ' })
          moved_issues << r
        else
          unsaved_issue_ids << issue.id
        end
      end
      @project.project.send_later :refresh_issue_count
      if unsaved_issue_ids.empty?
      else
        flash.now[:error] = l(:notice_failed_to_save_issues, :count => unsaved_issue_ids.size,
                                                         :total => @issues.size,
                                                         :ids => '#' + unsaved_issue_ids.join(', #'))
      end
      if params[:follow]
        if @issues.size == 1 && moved_issues.size == 1
          redirect_to :controller => 'projects', :action => 'dashboard', :id => (@target_project || @project), :show_issue_id => moved_issues.first
        else
          redirect_to :controller => 'projects', :action => 'dashboard', :id => (@target_project || @project)
        end
      else
        redirect_to :controller => 'projects', :action => 'dashboard', :id => @project
      end
      return
    end
    render :layout => false if request.xhr?
  end

  def destroy
    @issues.each(&:destroy)
    redirect_to :action => 'index', :project_id => @project
  end

  def gantt
    @gantt = Redmine::Helpers::Gantt.new(params)
    retrieve_query
    if @query.valid?
      events = []
      # Issues that have start and due dates
      events += @query.issues(:include => [:tracker, :assigned_to],
                              :order => "start_date, due_date",
                              :conditions => ["(((start_date>=? and start_date<=?) or (due_date>=? and due_date<=?) or (start_date<? and due_date>?)) and start_date is not null and due_date is not null)", @gantt.date_from, @gantt.date_to, @gantt.date_from, @gantt.date_to, @gantt.date_from, @gantt.date_to]
                              )
      # Issues that don't have a due date but that are assigned to a version with a date
      events += @query.issues(:include => [:tracker, :assigned_to],
                              :order => "start_date, effective_date",
                              :conditions => ["(((start_date>=? and start_date<=?) or (effective_date>=? and effective_date<=?) or (start_date<? and effective_date>?)) and start_date is not null and due_date is null and effective_date is not null)", @gantt.date_from, @gantt.date_to, @gantt.date_from, @gantt.date_to, @gantt.date_from, @gantt.date_to]
                              )

      @gantt.events = events
    end

    basename = (@project ? "#{@project.identifier}-" : '') + 'gantt'

    respond_to do |format|
      format.html { render :template => "issues/gantt.html.erb", :layout => !request.xhr? }
      format.png  { send_data(@gantt.to_image, :disposition => 'inline', :type => 'image/png', :filename => "#{basename}.png") } if @gantt.respond_to?('to_image')
      format.pdf  { send_data(gantt_to_pdf(@gantt, @project), :type => 'application/pdf', :filename => "#{basename}.pdf") }
    end
  end

  def calendar
    if params[:year] and params[:year].to_i > 1900
      @year = params[:year].to_i
      if params[:month] and params[:month].to_i > 0 and params[:month].to_i < 13
        @month = params[:month].to_i
      end
    end
    @year ||= Date.today.year
    @month ||= Date.today.month

    @calendar = Redmine::Helpers::Calendar.new(Date.civil(@year, @month, 1), current_language, :month)
    retrieve_query
    if @query.valid?
      events = []
      events += @query.issues(:include => [:tracker, :assigned_to],
                              :conditions => ["((start_date BETWEEN ? AND ?) OR (due_date BETWEEN ? AND ?))", @calendar.startdt, @calendar.enddt, @calendar.startdt, @calendar.enddt]
                              )

      @calendar.events = events
    end

    render :layout => false if request.xhr?
  end

  def context_menu
    @issues = Issue.find_all_by_id(params[:ids], :include => :project)
    if (@issues.size == 1)
      @issue = @issues.first
      @allowed_statuses = @issue.new_statuses_allowed_to(User.current)
    end
    projects = @issues.collect(&:project).compact.uniq
    @project = projects.first if projects.size == 1

    @can = {:edit => (@project && User.current.allowed_to?(:edit_issues, @project)),
            :update => (@project && (User.current.allowed_to?(:edit_issues, @project) || (User.current.allowed_to?(:change_status, @project) && @allowed_statuses && !@allowed_statuses.empty?))),
            :move => (@project && User.current.allowed_to?(:move_issues, @project)),
            :copy => (@issue && @project.trackers.include?(@issue.tracker) && User.current.allowed_to?(:add_issues, @project)),
            :delete => (@project && User.current.allowed_to?(:delete_issues, @project))
            }
    if @project
      @assignables = @project.assignable_users
      @assignables << @issue.assigned_to if @issue && @issue.assigned_to && !@assignables.include?(@issue.assigned_to)
      @trackers = @project.trackers
    end

    @statuses = IssueStatus.find(:all, :order => 'position')
    @back = params[:back_url] || request.env['HTTP_REFERER']

    render :layout => false
  end

  def update_form
    if params[:id].blank?
      @issue = Issue.new
      @issue.project = @project
    else
      @issue = @project.issues.visible.find(params[:id])
    end
    @issue.attributes = params[:issue]
    @allowed_statuses = ([@issue.status] + @issue.status.find_new_statuses_allowed_to(User.current.roles_for_project(@project), @issue.tracker)).uniq

    render :partial => 'attributes'
  end

  def preview
    @issue = @project.issues.find_by_id(params[:id]) unless params[:id].blank?
    @attachements = @issue.attachments if @issue
    @text = params[:notes] || (params[:issue] ? params[:issue][:description] : nil)
    render :partial => 'common/preview'
  end

  def datadump
    @issues = Issue.find(:all, :conditions => "project_id IN (#{User.current.owned_projects.collect {|p| p.id}.join(",")})")
    render :csv => @issues
  end

  private

  def find_issue
    @issue = Issue.find(params[:id], :include => [:project, :tracker, :status, :author])
    @project = @issue.project
    render_message l(:text_project_locked) if @project.locked?
    render_404 if @issue.is_gift? && @issue.assigned_to_id == User.current.id
  rescue ActiveRecord::RecordNotFound
    render_404
  end

  # Filter for bulk operations
  def find_issues
    @issues = Issue.find_all_by_id(params[:id] || params[:ids])
    raise ActiveRecord::RecordNotFound if @issues.empty?
    projects = @issues.collect(&:project).compact.uniq
    if projects.size == 1
      @project = projects.first
    else
      # TODO: let users bulk edit/move/destroy issues from different projects
      render_error 'Can not bulk edit/move/destroy issues from different projects'
      return false
    end
  rescue ActiveRecord::RecordNotFound
    render_404
  end

  def find_project
    @project = Project.find(params[:project_id])
    render_message l(:text_project_locked) if @project.locked?
  rescue ActiveRecord::RecordNotFound
    render_404
  end

  def find_optional_project
    @project = Project.find(params[:project_id]) unless params[:project_id].blank?
    allowed = User.current.allowed_to?({:controller => params[:controller], :action => params[:action]}, @project, :global => true)
    allowed ? true : deny_access
  rescue ActiveRecord::RecordNotFound
    render_404
  end

  # Retrieve query from session or build a new query
  def retrieve_query
    if !params[:query_id].blank?
      cond = "project_id IS NULL"
      cond << " OR project_id = #{@project.id}" if @project
      @query = Query.find(params[:query_id], :conditions => cond)
      @query.project = @project
      session[:query] = {:id => @query.id, :project_id => @query.project_id}
      sort_clear
    else
      if params[:set_filter] || session[:query].nil? || session[:query][:project_id] != (@project ? @project.id : nil)
        # Give it a name, required to be valid
        @query = Query.new(:name => "_")
        @query.project = @project
        if params[:fields] and params[:fields].is_a? Array
          params[:fields].each do |field|
            @query.add_filter(field, params[:operators][field], params[:values][field])
          end
        else
          @query.available_filters.keys.each do |field|
            @query.add_short_filter(field, params[field]) if params[field]
          end
        end
        @query.group_by = params[:group_by]
        @query.column_names = params[:query] && params[:query][:column_names]
        session[:query] = {:project_id => @query.project_id, :filters => @query.filters, :group_by => @query.group_by, :column_names => @query.column_names}
      else
        @query = Query.find_by_id(session[:query][:id]) if session[:query][:id]
        @query ||= Query.new(:name => "_", :project => @project, :filters => session[:query][:filters], :group_by => session[:query][:group_by], :column_names => session[:query][:column_names])
        @query.project = @project
      end
    end
  end

  # Rescues an invalid query statement. Just in case...
  def query_statement_invalid(exception)
    logger.error "Query::StatementInvalid: #{exception.message}" if logger
    session.delete(:query)
    sort_clear
    render_error "An error occurred while executing the query and has been logged. Please report this error to your Redmine administrator."
  end

end


================================================
FILE: app/controllers/journals_controller.rb
================================================
# BetterMeans - Work 2.0
# Copyright (C) 2006-2011  See readme for details and license
#

class JournalsController < ApplicationController
  before_filter :find_journal
  ssl_required :all

  def edit
    if request.post?
      @journal.update_attributes(:notes => params[:notes]) if params[:notes]
      if @journal.details.empty? && @journal.notes.blank?
        @journal.destroy
      else
        update_activity_stream(params[:notes]) if params[:notes]
      end

      respond_to do |format|
        format.html { redirect_to :controller => 'issues', :action => 'show', :id => @journal.journalized_id }
        format.js { render :action => 'update' }
      end
    end
  end

  def edit_from_dashboard
    if @journal.update_attributes(params[:journal])
      update_activity_stream(params[:journal][:notes])
    end
    respond_to do |format|
      format.js {render :json => @journal.issue.to_dashboard}
    end
  end

  private

  def update_activity_stream(notes)
    ActivityStream.update_all(["indirect_object_description = ?", notes], {:indirect_object_id => @journal.id,
                                                                            :indirect_object_type => "Journal",
                                                                            :object_type => "Issue",
                                                                            :actor_id => User.current.id},
                                                                          :order => 'created_at DESC', :limit => 1)
  end

  def find_journal
    @journal = Journal.find(params[:id])
    (render_403; return false) unless @journal.editable_by?(User.current)
    @project = @journal.journalized.project
  rescue ActiveRecord::RecordNotFound
    render_404
  end

end


================================================
FILE: app/controllers/mail_handler_controller.rb
================================================
# BetterMeans - Work 2.0
# Copyright (C) 2006-2011  See readme for details and license
#

class MailHandlerController < ActionController::Base
  before_filter :check_credential

  verify :method => :post,
         :only => :index,
         :render => { :nothing => true, :status => 405 }


  # Submits an incoming email to MailHandler
  def index
    options = params.dup
    email = options.delete(:email)
    if MailHandler.receive(email, options)
      render :nothing => true, :status => :created
    else
      render :nothing => true, :status => :unprocessable_entity
    end
  end

  # Submits an incoming email from sendgrid to MailHandler
  def sendgrid
    @email = TMail::Mail.new
    @email.subject = params[:subject]
    @email.body = params[:text].to_s.gsub(/"/,'\"')
    @email.to = params[:to]
    @email.from = params[:from]
    @email.subject = params[:subject]

    logger.info { "email coming up" }
    logger.info(@email.inspect)
    #   attachments - Number of attachments included in email
    # *
    #   attachment1, attachment2, …, attachmentN - File upload names. The numbers are sequence numbers starting from 1 and ending on the number specified by the attachments parameter. If attachments is 0, there will be no attachment files. If attachments is 3, parameters attachment1, attachment2, and attachment3 will have file uploads.


    if MailHandler.receive_from_api(@email)
      render :nothing => true, :status => :created
    else
      render :nothing => true, :status => :unprocessable_entity
    end
  end

  private

  def check_credential
    User.current = nil

    unless Setting.mail_handler_api_enabled? && params[:key].to_s == Setting.mail_handler_api_key
      render :text => 'Access denied. Incoming emails WS is disabled or key is invalid.', :status => 403
    end
  end

end


================================================
FILE: app/controllers/mails_controller.rb
================================================
class MailsController < ApplicationController

  before_filter :set_user

  def index
    if params[:mailbox] == "sent"
      @mails = @user.sent_messages
    else
      @mails = @user.received_messages
    end
  end

  def show
    @mail = Mail.read_and_get(params[:id], User.current)
  end

  def new
    @mail = Mail.new

    if params[:reply_to]
      @reply_to = @user.received_messages.find(params[:reply_to])
      unless @reply_to.nil?
        @mail.to = @reply_to.sender.login
        @mail.subject = "Re: #{@reply_to.subject}"
        @mail.body = "\n\n*Original message*\n\n #{@reply_to.body}"
      end
    end
  end

  def create
    @mail = Mail.new(params[:mail])
    @mail.sender = @user
    @mail.recipient = User.find_by_login(params[:mail][:to])

    if @mail.save
      flash.now[:success] = "Message sent"
      redirect_to user_mails_path(@user)
    else
      render :action => :new
    end
  end

  def delete_selected
    if request.post?
      if params[:delete]
        params[:delete].each { |id|
          @mail = Mail.find(:first, :conditions => ["mails.id = ? AND (sender_id = ? OR recipient_id = ?)", id, @user, @user])
          @mail.mark_deleted(@user) unless @mail.nil?
        }
        flash.now[:success] = "Messages deleted"
      end
      redirect_to user_mail_path(@user, @mails)
    end
  end

  private

  def set_user
    @user = User.current
  end

end


================================================
FILE: app/controllers/members_controller.rb
================================================
# BetterMeans - Work 2.0
# Copyright (C) 2006-2011  See readme for details and license#

class MembersController < ApplicationController
  before_filter :find_member, :except => [:new, :autocomplete_for_member]
  before_filter :find_project, :only => [:new, :autocomplete_for_member]
  before_filter :authorize
  ssl_required :all

  def new
    members = []
    if params[:member] && request.post?
      attrs = params[:member].dup
      if (user_ids = attrs.delete(:user_ids))
        user_ids.each do |user_id|
          members << Member.new(attrs.merge(:user_id => user_id))
        end
      else
        members << Member.new(attrs)
      end
      result = @project.all_members << members
    end
    respond_to do |format|
      format.html { redirect_to :controller => 'projects', :action => 'settings', :tab => 'members', :id => @project }
      format.js {
        render(:update) {|page|
          page.replace_html "tab-content-members", :partial => 'projects/settings/members'
          members.each {|member| page.visual_effect(:highlight, "member-#{member.id}") }
        }
      }
    end
  end

  def edit
    if request.post? and @member.update_attributes(params[:member])
      respond_to do |format|
        format.html { redirect_to :controller => 'projects', :action => 'settings', :tab => 'members', :id => @project }
        format.js {
          render(:update) {|page|
            page.replace_html "tab-content-members", :partial => 'projects/settings/members'
            page.visual_effect(:highlight, "member-#{@member.id}")
          }
        }
      end
    end
  end

  def destroy
    if request.post? && @member.deletable?
      @member.destroy
    end
    respond_to do |format|
      format.html { redirect_to :controller => 'projects', :action => 'settings', :tab => 'members', :id => @project }
      format.js { render(:update) {|page| page.replace_html "tab-content-members", :partial => 'projects/settings/members'} }
    end
  end

  def autocomplete_for_member
    @users = User.active.like(params[:q]).find(:all, :limit => 100) - @project.users
    render :layout => false
  end

  private

  def find_project
    @project = Project.find(params[:id])
  rescue ActiveRecord::RecordNotFound
    render_404
  end

  def find_member
    @member = Member.find(params[:id])
    @project = @member.project
  rescue ActiveRecord::RecordNotFound
    render_404
  end

end


================================================
FILE: app/controllers/messages_controller.rb
================================================
# BetterMeans - Work 2.0
# Copyright (C) 2006-2011  See readme for details and license#

class MessagesController < ApplicationController
  menu_item :boards
  default_search_scope :messages
  before_filter :find_board, :only => [:new, :preview]
  before_filter :find_message, :except => [:new, :preview, :motion_reply]
  before_filter :authorize, :except => [:preview, :edit, :destroy]
  ssl_required :all


  verify :method => :post, :only => [ :reply, :destroy ], :redirect_to => { :action => :show }
  verify :xhr => true, :only => :quote

  helper :watchers
  helper :attachments
  include AttachmentsHelper

  log_activity_streams :current_user, :name, :created, :@message, :subject, :new, :messages, {:object_description_method => :content}
  log_activity_streams :current_user, :name, :edited, :@message, :subject, :edit, :messages, {:object_description_method => :content}
  log_activity_streams :current_user, :name, :replied_to, :@topic, :subject, :reply, :messages, {
            :object_description_method => :content,
            :indirect_object => :@reply,
            :indirect_object_description_method => :content,
            :indirect_object_phrase => '' }

  # Show a topic and its replies
  def show
    @replies = @topic.children.find(:all, :include => [:author, :attachments, {:board => :project}])
    @replies.reverse! if User.current.wants_comments_in_reverse_order?
    @reply = Message.new(:subject => "RE: #{@message.subject}")
    render :action => "show", :layout => false if request.xhr?
  end

  # Create a new topic
  def new
    @message = Message.new(params[:message])
    @message.author = User.current
    @message.board = @board
    if params[:message] && User.current.allowed_to?(:edit_messages, @project)
      @message.locked = params[:message]['locked']
      @message.sticky = params[:message]['sticky']
    end
    if request.post? && @message.save
      attach_files(@message, params[:attachments])
      redirect_to :action => 'show', :id => @message
    end
  end

  # Reply to a topic
  def reply
    @reply = Message.new(params[:reply])
    @reply.subject = @message.subject if @reply.subject == ""
    @reply.author = User.current
    @reply.board = @board
    @topic.children << @reply
    if !@reply.new_record?
      attach_files(@reply, params[:attachments])
    end
    respond_to do |wants|
      wants.html { redirect_to :action => 'show', :id => @topic  }
      wants.js { render :nothing => :true}
    end
  end

  # Edit a message
  def edit
    (render_403; return false) unless @message.editable_by?(User.current)
    if params[:message]
      @message.locked = params[:message]['locked']
      @message.sticky = params[:message]['sticky']
    end
    if request.post? && @message.update_attributes(params[:message])
      attach_files(@message, params[:attachments])
      flash.now[:success] = l(:notice_successful_update)
      @message.reload
      redirect_to :action => 'show', :board_id => @message.board, :id => @message.root
    end
  end

  # Delete a messages
  def destroy
    (render_403; return false) unless @message.destroyable_by?(User.current)
    @message.destroy
    redirect_to @message.parent.nil? ?
      { :controller => 'boards', :action => 'show', :project_id => @project, :id => @board } :
      { :action => 'show', :id => @message.parent }
  end

  def quote
    user = @message.author
    text = @message.content
    subject = @message.subject.gsub('"', '\"')
    subject = "RE: #{subject}" unless subject.starts_with?('RE:')
    content = "#{ll(Setting.default_language, :text_user_wrote, user)}\\n> "
    content << text.to_s.strip.gsub(%r{<pre>((.|\s)*?)</pre>}m, '[...]').gsub('"', '\"').gsub(/(\r?\n|\r\n?)/, "\\n> ") + "\\n\\n"
    render(:update) { |page|
      page << "$('reply_subject').value = \"#{subject}\";"
      page.<< "$('message_content').value = \"#{content}\";"
      page.show 'reply'
      page << "$('#message_content').focus();"
      page << "$('body').scrollTo('#reply');"
    }
  end

  def preview
    message = @board.messages.find_by_id(params[:id])
    @attachements = message.attachments if message
    @text = (params[:message] || params[:reply])[:content]
    render :partial => 'common/preview'
  end

  private

  def find_message
    if params[:board_id] == 'guess'
      logger.info { "guessing board" }
      guess_board
    else
      find_board
      @message = @board.messages.find(params[:id], :include => :parent)
    end
    @topic = @message.root unless @message.nil?
  rescue ActiveRecord::RecordNotFound
    render_404
  end

  #This function is used to redirect links coming from the activity stream
  #To save queries on the database, we don't try to load the board id in the link to a message
  def guess_board
    @message = Message.find(params[:id], :include => :parent)
    @board = @message.board
    @project = @board.project
    logger.info { "guessed board #{@board.inspect}" }
  rescue ActiveRecord::RecordNotFound
    render_404
  end

  def find_board
    @board = Board.find(params[:board_id], :include => :project)
    @project = @board.project
  rescue ActiveRecord::RecordNotFound
    render_404
  end

end


================================================
FILE: app/controllers/motion_votes_controller.rb
================================================
class MotionVotesController < ApplicationController
  ssl_required :all

  def index
    @motion_votes = MotionVote.all

    respond_to do |format|
      format.html
      format.xml  { render :xml => @motion_votes }
    end
  end

  def show
    @motion_vote = MotionVote.find(params[:id])

    respond_to do |format|
      format.html
      format.xml  { render :xml => @motion_vote }
    end
  end

  def new
    @motion_vote = MotionVote.new

    respond_to do |format|
      format.html
      format.xml  { render :xml => @motion_vote }
    end
  end

  def edit
    @motion_vote = MotionVote.find(params[:id])
  end

  def create
    @motion_vote = MotionVote.new(params[:motion_vote])
    @motion_vote.motion_id = params[:motion_id]
    @motion_vote.user_id = User.current.id

    if @motion_vote.motion.motion_type == Motion::TYPE_SHARE
      sum = @motion_vote.user.shares.for_project(@motion_vote.motion.project_id).sum(:amount).to_i
      @motion_vote.points = params[:points].to_i * sum
    else
      @motion_vote.points = params[:points]
    end

    respond_to do |format|
      if @motion_vote.save
        format.js  { render :action => "cast_vote", :motion => @motion_vote.motion}
      else
        format.js { render :action => "error"}
        format.html { render :action => "new" }
        format.xml  { render :xml => @motion_vote.errors, :status => :unprocessable_entity }
      end
    end
  end

  def update
    @motion_vote = MotionVote.find(params[:id])

    respond_to do |format|
      if @motion_vote.update_attributes(params[:motion_vote])
        flash.now[:success] = 'MotionVote was successfully updated.'
        format.html { redirect_to(@motion_vote) }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @motion_vote.errors, :status => :unprocessable_entity }
      end
    end
  end

  def destroy
    @motion_vote = MotionVote.find(params[:id])
    @motion_vote.destroy

    respond_to do |format|
      format.html { redirect_to(motion_votes_url) }
      format.xml  { head :ok }
    end
  end
end


================================================
FILE: app/controllers/motions_controller.rb
================================================
class MotionsController < ApplicationController

  before_filter :find_project, :only => [:new,:index,:create,:show, :edit, :eligible_users]
  before_filter :find_motion, :only => [:show, :edit, :destroy, :update, :reply]
  before_filter :check_visibility_permission, :only => [:show]
  before_filter :require_admin, :only => [:edit, :update, :destroy]
  before_filter :authorize, :except => [:check_visibility_permission]
  ssl_required :all


  def index
    @motions = @project.motions
    respond_to do |format|
      format.html
      format.xml  { render :xml => @motions }
    end
  end

  def show
    if @motion.concerned_user_id == User.current.id
      render_403
      return false
    end

    @motion.create_forum_topic if @motion.topic.nil?

    @topic = @motion.topic
    @board = @topic.board
    @replies = @topic.children.find(:all, :include => [:author, :attachments, {:board => :project}])
    @replies.reverse! if User.current.wants_comments_in_reverse_order?
    @reply = Message.new(:subject => "RE: #{@topic.subject}")


    respond_to do |format|
      format.html
      format.xml  { render :xml => @motion }
    end
  end

  def new
    @motion = Motion.new(params[:motion])

    @concerned_user_list = Motion.eligible_users(@motion.variation, @project.id)

    respond_to do |format|
      format.html
      format.xml  { render :xml => @motion }
    end
  end

  def eligible_users
    @concerned_user_list = ""
    @variation = params[:variation].to_i
    case @variation
      when Motion::VARIATION_NEW_MEMBER
        @concerned_user_list = @project.contributor_list
      when Motion::VARIATION_NEW_CORE
        @concerned_user_list = @project.member_list
      when Motion::VARIATION_FIRE_MEMBER
        @concerned_user_list = @project.member_list
      when Motion::VARIATION_FIRE_CORE
        @concerned_user_list = @project.core_member_list
    end

    @concerned_user_list = [] if @concerned_user_list == ""
    #remove current user from list
    @concerned_user_list.delete_if {|a| a.user_id == User.current.id}

    render :layout => false
  end

  def edit
  end

  def create
    @motion = Motion.new(params[:motion])
    @motion.project_id = @project.id
    @motion.author_id = User.current.id
    @motion.params = params[:param]

    respond_to do |format|
      if @motion.concerned_user == User.current
        format.html { redirect_with_flash :error, 'Cannot create a motion concerning yourself', :action => 'index' }
        format.xml  { render :xml => @motion.errors, :status => :unprocessable_entity }
      elsif !@motion.concerned_user && @motion.concerns_someone?
        format.html { redirect_with_flash :error, 'Who does this motion apply to? You need to select the user that this motion is concerned with.', :action => 'index' }
        format.xml  { render :xml => @motion.errors, :status => :unprocessable_entity }
      elsif @motion.save
        format.html { redirect_with_flash :success, 'Motion was successfully created', :action => "show", :id => @motion }
        format.xml  { render :xml => @motion, :status => :created, :location => @motion }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @motion.errors, :status => :unprocessable_entity }
      end
    end
  end

  def update
    respond_to do |format|
      if @motion.update_attributes(params[:motion])
        flash.now[:success] = 'Motion was successfully updated.'
        format.html { redirect_to(@motion) }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @motion.errors, :status => :unprocessable_entity }
      end
    end
  end

  def destroy
    @motion.destroy

    respond_to do |format|
      format.html { redirect_to(motions_url) }
      format.xml  { head :ok }
    end
  end

  # Reply to a motion discussion
  def reply
    @topic = @motion.topic
    @reply = Message.new(params[:reply])
    @reply.author = User.current
    @reply.board = @topic.board
    @topic.children << @reply
    if !@reply.new_record?
      attach_files(@reply, params[:attachments])
    end
    redirect_to :action => 'show', :id => @motion, :project_id => @motion.project_id
  rescue
    404
  end

  private

  def find_project
    @project = Project.find(params[:project_id]).root
    render_message l(:text_project_locked) if @project.locked?
  rescue ActiveRecord::RecordNotFound
    render_404
  end

  def find_motion
    @motion = Motion.find(params[:id])
    @project = @motion.project
    render_message l(:text_project_locked) if @project.locked?
  rescue ActiveRecord::RecordNotFound
    render_404
  end

  def check_visibility_permission
    if !User.current.allowed_to_see_motion?(@motion)
       render_403
       return false
    end
    return true
  end

end


================================================
FILE: app/controllers/my_controller.rb
================================================
# Redmine - project management software
# Copyright (C) 2006-2011  See readme for details and license#

class MyController < ApplicationController
  before_filter :require_login
  ssl_required :all


  helper :issues

  BLOCKS = { 'issuesassignedtome' => :label_assigned_to_me_issues,
             'issuesreportedbyme' => :label_reported_issues,
             'issueswatched' => :label_watched_issues,
             'news' => :label_news_latest,
             'calendar' => :label_calendar,
             'documents' => :label_document_plural
           }.merge(Redmine::Views::MyPage::Block.additional_blocks).freeze

  DEFAULT_LAYOUT = {  'left' => ['issuesassignedtome'],
                      'right' => ['issuesreportedbyme']
                   }.freeze

  verify :xhr => true,
         :only => [:add_block, :remove_block, :order_blocks]

  def index
    page
    render :action => 'page'
  end

  # Show user's page
  def page
    @user = User.current
    @blocks = @user.pref[:my_page_layout] || DEFAULT_LAYOUT
  end

  def projects
    project_ids = User.current.projects.collect{|p| p.id}.join(",")
    @all_projects = project_ids.any? ? Project.find(:all, :conditions => "(parent_id in (#{project_ids}) OR id in (#{project_ids})) AND (status=#{Project::STATUS_ACTIVE})") : []
    @my_projects = User.current.owned_projects
    @belong_to_projects = User.current.belongs_to_projects
    @active_projects = User.current.active_memberships.collect(&:project)
  end

  def issues
    @assigned_issues = Issue.visible.open.find(:all,
                                    :conditions => {:assigned_to_id => User.current.id},
                                    :include => [:project, :tracker ],
                                    :order => "#{Issue.table_name}.subject ASC")

    @watched_issues = Issue.visible.find(:all,
                                     :include => [:project, :tracker, :watchers],
                                     :conditions => ["#{Watcher.table_name}.user_id = ?", User.current.id],
                                     :order => "#{Issue.table_name}.subject ASC")

     @joined_issues = Issue.visible.find(:all,
                                      :include => [:project, :tracker, :issue_votes],
                                      :conditions => ["#{IssueVote.table_name}.user_id = ? AND #{IssueVote.table_name}.vote_type = ? AND #{Issue.table_name}.assigned_to_id != ? AND #{Issue.table_name}.status_id = ?", User.current.id, IssueVote::JOIN_VOTE_TYPE, User.current.id, IssueStatus.assigned.id],
                                      :order => "#{Issue.table_name}.subject ASC")

    @added_issues = Issue.visible.open.find(:all,
                                    :conditions => {:author_id => User.current.id},
                                    :include => [:project, :tracker ],
                                    :order => "#{Issue.table_name}.created_at DESC")

    @recent_issues = User.current.recent_items(30)

  end

  # Edit user's account
  def account
    @user = User.current
    @pref = @user.pref
    if request.post?
      cc = params[:user][:b_cc_last_four]

      if cc && cc.length > 14
        cc.gsub!(/[^0-9]/,'')
        params[:user][:b_cc_last_four] = ("XXXX-") + params[:user][:b_cc_last_four][cc.length-4,cc.length-1] if cc.length > 14
      end
      @user.attributes = params[:user]
      @user.login = params[:user][:login]
      logger.info { "@user.attributes #{@user.attributes.inspect}" }
      @user.mail_notification = (params[:notification_option] == 'all')

      logger.info { "params[:pref] #{params[:pref].inspect}" }
      @user.pref.attributes = params[:pref]
      logger.info { "@user.pref.attributes #{@user.pref.inspect}" }
      logger.info { "params[:active_only_jumps] #{params[:active_only_jumps]}  and boolean #{params[:active_only_jumps] == '1'}" }

      @user.pref[:no_self_notified] = (params[:no_self_notified] == '1')
      @user.pref[:daily_digest] = (params[:daily_digest] == '1')
      @user.pref[:no_emails] = (params[:no_emails] == '1')
      @user.pref[:hide_mail] = (params[:pref][:hide_mail] == '1')
      @user.pref[:active_only_jumps] = (params[:pref][:active_only_jumps] == '1')

      logger.info { "user pref #{@user.pref.inspect}" }
      if @user.save
        @user.pref.save
        @user.reload
        @user.save_billing cc, params[:ccverify], request.remote_ip
        @user.notified_project_ids = (params[:notification_option] == 'selected' ? params[:notified_project_ids] : [])
        set_language_if_valid @user.language
        redirect_with_flash :notice, l(:notice_account_updated), :action => 'account'
        return
      end
    end
    @notification_options = [[l(:label_user_mail_option_all), 'all'],
                             [l(:label_user_mail_option_none), 'none']]
    @notification_option = @user.mail_notification? ? 'all' : (@user.notified_projects_ids.empty? ? 'none' : 'selected')
  end

  def upgrade
    @user = User.current
    @plans = Plan.all
    @selected_plan = @user.plan

    if request.post?
      cc = params[:user][:b_cc_last_four]
      cc.gsub!(/[^0-9]/,'')
      logger.info { "length #{cc.length} #{cc}" }
      if cc.length > 14
        params[:user][:b_cc_last_four] = ("XXXX-") + params[:user][:b_cc_last_four][cc.length-4,cc.length-1]
      else
        params[:user].delete :b_cc_last_four
      end

      logger.info { "inspect #{params.inspect}" }

      @new_plan = Plan.find(params[:user][:plan_id])
      @user.attributes = params[:user]
      @user.plan_id = @user.plan.id #not upgrading yet

      account = User.update_recurly_billing @user.id, cc, params[:ccverify], request.remote_ip

      @user.save

      if defined? account.billing_info && defined? account.billing_info.errors
        if account.billing_info.errors.length > 0
          flash.now[:error] = account.billing_info.errors[:base].collect {|v| "#{v}"}.join('<br>')
          return
        end
      end

      if @new_plan.code == Plan::FREE_CODE && @new_plan.code != @selected_plan.code
        begin
          sub = Recurly::Subscription.find(@user.id.to_s)
          sub.cancel(@user.id.to_s)
        rescue Exception => e
          flash.now[:error] = e.message
          return
        else
          @user.trial_expires_on = nil
          @user.trial_expired_at = nil
          @user.plan_id = @new_plan.id
          @user.save
          @user.update_usage_over
          @user.update_trial_expiration
          @user.lock_workstreams
          flash.now[:success] = "Your plan was successfully canceled"
          @user.reload
          return
        end
      elsif @new_plan.code != @selected_plan.code
        begin
          sub = Recurly::Subscription.find(@user.id.to_s)
          begin
          sub.change('now', :plan_code => @new_plan.code, :quantity => 1)
          rescue Exception => e
            flash.now[:error] = e.message
            @user.reload
            return
          end
        rescue ActiveResource::ResourceNotFound
          begin
          trial_expiration = @user.trial_expires_on || -1.days.from_now
          logger.info { "trial #{trial_expiration}" }
          sub = Recurly::Subscription.create(
            :account_code => account.account_code,
            :plan_code => @new_plan.code,
            :quantity => 1,
            :account => account
          )
          rescue Exception => e
              flash.now[:error] = e.message
              @user.reload
              return
          end
        else
          @user.trial_expires_on = nil
          @user.trial_expired_at = nil
        end

        if sub.errors && sub.errors.any?
          flash.now[:error] = sub.errors.collect {|k, v| "#{v}"}.join('<br>')
          @user.reload
          return
        else
          @user.plan_id = @new_plan.id
          @user.save
          @user.update_usage_over
          @user.update_trial_expiration
          @user.unlock_workstreams
          flash.now[:success] = "Plan successfully changed to #{@new_plan.name}"
        end
      else
        flash.now[:success] = l(:notice_account_updated) + " No changes were made to your plan"
      end
      @user.reload

      return
    end
  end

  # Manage user's password
  def password
    @user = User.current
    if @user.auth_source_id
      flash.now[:error] = l(:notice_can_t_change_password)
      redirect_to :action => 'account'
      return
    end
    if request.post?
      if @user.check_password?(params[:password])
        @user.password, @user.password_confirmation = params[:new_password], params[:new_password_confirmation]
        if @user.save
          flash.now[:success] = l(:notice_account_password_updated)
          redirect_to :action => 'account'
        end
      else
        flash.now[:error] = l(:notice_account_wrong_password)
      end
    end
  end

  # Create a new feeds key
  def reset_rss_key
    if request.post?
      if User.current.rss_token
        User.current.rss_token.destroy
        User.current.reload
      end
      User.current.rss_key
      flash.now[:success] = l(:notice_feeds_access_key_reseted)
    end
    redirect_to :action => 'account'
  end

  # Create a new API key
  def reset_api_key
    if request.post?
      if User.current.api_token
        User.current.api_token.destroy
        User.current.reload
      end
      User.current.api_key
      flash.now[:success] = l(:notice_api_access_key_reseted)
    end
    redirect_to :action => 'account'
  end

  # User's page layout configuration
  def page_layout
    @user = User.current
    @blocks = @user.pref[:my_page_layout] || DEFAULT_LAYOUT.dup
    @block_options = []
    BLOCKS.each {|k, v| @block_options << [l("my.blocks.#{v}", :default => [v, v.to_s.humanize]), k.dasherize]}
  end

  # Add a block to user's page
  # The block is added on top of the page
  # params[:block] : id of the block to add
  def add_block
    block = params[:block].to_s.underscore
    (render :nothing => true; return) unless block && (BLOCKS.keys.include? block)
    @user = User.current
    layout = @user.pref[:my_page_layout] || {}
    # remove if already present in a group
    %w(top left right).each {|f| (layout[f] ||= []).delete block }
    # add it on top
    layout['top'].unshift block
    @user.pref[:my_page_layout] = layout
    @user.pref.save
    render :partial => "block", :locals => {:user => @user, :block_name => block}
  end

  # Remove a block to user's page
  # params[:block] : id of the block to remove
  def remove_block
    block = params[:block].to_s.underscore
    @user = User.current
    # remove block in all groups
    layout = @user.pref[:my_page_layout] || {}
    %w(top left right).each {|f| (layout[f] ||= []).delete block }
    @user.pref[:my_page_layout] = layout
    @user.pref.save
    render :nothing => true
  end

  # Change blocks order on user's page
  # params[:group] : group to order (top, left or right)
  # params[:list-(top|left|right)] : array of block ids of the group
  def order_blocks
    group = params[:group]
    @user = User.current
    if group.is_a?(String)
      group_items = (params["list-#{group}"] || []).collect(&:underscore)
      if group_items and group_items.is_a? Array
        layout = @user.pref[:my_page_layout] || {}
        # remove group blocks if they are presents in other groups
        %w(top left right).each {|f|
          layout[f] = (layout[f] || []) - group_items
        }
        layout[group] = group_items
        @user.pref[:my_page_layout] = layout
        @user.pref.save
      end
    end
    render :nothing => true
  end
end


================================================
FILE: app/controllers/news_controller.rb
================================================
# BetterMeans - Work 2.0
# Copyright (C) 2006-2011  See readme for details and license#

class NewsController < ApplicationController
  default_search_scope :news
  before_filter :find_news, :except => [:new, :index, :preview]
  before_filter :find_project, :only => [:new, :preview]
  before_filter :authorize, :except => [:index, :preview]
  before_filter :find_optional_project, :only => :index
  accept_key_auth :index
  ssl_required :all


  log_activity_streams :current_user, :name, :announced, :@news, :title, :new, :news, {:object_description_method => :summary}
  log_activity_streams :current_user, :name, :edited, :@news, :title, :edit, :news, {:object_description_method => :summary}
  log_activity_streams :current_user, :name, :commented_on, :@news, :title, :add_comment, :news, {
              :object_description_method => :summary,
              :indirect_object => :@comment,
              :indirect_object_description_method => :comments,
              :indirect_object_phrase => '' }

  def index
    @news_pages, @newss = paginate :news,
                                   :per_page => 10,
                                   :conditions => Project.allowed_to_condition(User.current, :view_news, :project => @project),
                                   :include => [:author, :project],
                                   :order => "#{News.table_name}.created_at DESC"
    respond_to do |format|
      format.html { render :layout => false if request.xhr? }
      format.xml { render :xml => @newss.to_xml }
      format.json { render :json => @newss.to_json }
    end
  end

  def show
    @comments = @news.comments
    @comments.reverse! if User.current.wants_comments_in_reverse_order?
  end

  def new
    @news = News.new(:project => @project, :author => User.current)
    if request.post?
      @news.attributes = params[:news]
      if @news.save
        flash.now[:success] = l(:notice_successful_create)
        redirect_to :controller => 'news', :action => 'index', :project_id => @project
      end
    end
  end

  def edit
    if request.post? and @news.update_attributes(params[:news])
      flash.now[:success] = l(:notice_successful_update)
      redirect_to :action => 'show', :id => @news
    end
  end

  def add_comment
    @comment = Comment.new(params[:comment])
    @comment.author = User.current
    if @news.comments << @comment
      flash.now[:success] = l(:label_comment_added)
      redirect_to :action => 'show', :id => @news
    else
      show
      render :action => 'show'
    end
  end

  def destroy_comment
    @news.comments.find(params[:comment_id]).destroy
    redirect_to :action => 'show', :id => @news
  end

  def destroy
    @news.destroy
    redirect_to :action => 'index', :project_id => @project
  end

  def preview
    @text = (params[:news] ? params[:news][:description] : nil)
    render :partial => 'common/preview'
  end

  private

  def find_news
    @news = News.find(params[:id])
    @project = @news.project
    render_message l(:text_project_locked) if @project.locked?
  rescue ActiveRecord::RecordNotFound
    render_404
  end

  def find_project
    @project = Project.find(params[:project_id])
    render_message l(:text_project_locked) if @project.locked?
  rescue ActiveRecord::RecordNotFound
    render_404
  end

  def find_optional_project
    return true unless params[:project_id]
    @project = Project.find(params[:project_id])
    render_message l(:text_project_locked) if @project.locked?
    authorize
  rescue ActiveRecord::RecordNotFound
    render_404
  end

end


================================================
FILE: app/controllers/notifications_controller.rb
================================================
class NotificationsController < ApplicationController
  ssl_required :all
  def index
    @notifications = Notification.unresponded
    @mentions = @notifications.select {|n| n.mention?}
    @notifications = @notifications.select {|n| !n.mention?}

    respond_to do |format|
      format.html
      format.xml  { render :xml => @notifications }
    end
  end

  def show
    @notification = Notification.find(params[:id])

    respond_to do |format|
      format.html
      format.xml  { render :xml => @notification }
    end
  end

  def new
    @notification = Notification.new

    respond_to do |format|
      format.html
      format.xml  { render :xml => @notification }
    end
  end

  def edit
    @notification = Notification.find(params[:id])
  end

  def create
    @notification = Notification.new(params[:notification])

    respond_to do |format|
      if @notification.save
        flash.now[:success] = 'Notification was successfully created.'
        format.html { redirect_to(@notification) }
        format.xml  { render :xml => @notification, :status => :created, :location => @notification }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @notification.errors, :status => :unprocessable_entity }
      end
    end
  end

  def update
    @notification = Notification.find(params[:id])

    respond_to do |format|
      if @notification.update_attributes(params[:notification])
        format.html { redirect_to(@notification) }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @notification.errors, :status => :unprocessable_entity }
      end
    end
  end

  def hide
    @notification = Notification.find(params[:notification_id])

    respond_to do |format|
      if @notification.mark_as_responded
        format.js {render :action => "hide"}
        format.xml  { head :ok }
      else
        flash.now[:success] = 'Error ignoring notification'
        format.js {render :action => "error"}
        format.xml  { render :xml => @notification.errors, :status => :unprocessable_entity }
      end
    end
  end

  def destroy
    @notification = Notification.find(params[:id])
    @notification.destroy

    respond_to do |format|
      format.html { redirect_to(notifications_url) }
      format.xml  { head :ok }
    end
  end

end


================================================
FILE: app/controllers/projects_controller.rb
================================================
# BetterMeans - Work 2.0
# Copyright (C) 2006-2011  See readme for details and license#

class ProjectsController < ApplicationController

  menu_item :overview
  menu_item :activity, :only => :activity
  menu_item :dashboard, :only => :dashboard
  menu_item :files, :only => [:list_files, :add_file]
  menu_item :settings, :only => :settings
  menu_item :team, :only => :team
  menu_item :credits, :only => :credits

  ssl_required :all

  before_filter :find_project, :except => [ :index, :list, :copy, :activity, :update_scale, :add, :index_active, :index_latest ]
  before_filter :find_optional_project, :only => [:activity, :add]

  #BUGBUG: why aren't these actions being authorized!!! archive can be removed, unarchive doesn't seem to work when removed from here
  before_filter :authorize, :except => [ :index, :index_latest, :index_active, :list, :add, :copy, :archive, :unarchive, :destroy, :activity, :dashboard, :dashdata, :new_dashdata, :mypris, :update_scale, :community_members, :community_members_array, :issue_search, :hourly_types, :join]

  before_filter :authorize_global, :only => :add
  before_filter :require_admin, :only => [ :copy ]
  accept_key_auth :activity

  after_filter :only => [:add, :edit, :archive, :unarchive, :destroy] do |controller|
    if controller.request.post?
      controller.send :expire_action, :controller => 'welcome', :action => 'robots.txt'
    end
  end

  helper :sort
  include SortHelper
  helper :issues
  helper IssuesHelper
  helper :queries
  include QueriesHelper
  include ProjectsHelper

  log_activity_streams :current_user, :name, :edited, :@project, :name, :edit, :workstreams, {:object_description_method => :description}

  def index
    @latest_enterprises = Project.latest_public
    @active_enterprises = Project.most_active_public
  end

  def index_latest
    limit = 10
    @latest_enterprises = Project.latest_public(limit, params[:offset].to_i)

    respond_to do |wants|
      wants.js do
        render :update do |page|
          page.replace "project_index_bottom_latest", :partial => "project_list", :locals => {
                                              :projects => @latest_enterprises,
                                              :offset => Integer(params[:offset]) + limit,
                                              :index_type => 'latest'}
          page.call "display_sparks"
        end
      end
    end
  end

  def index_active
    limit = 10
    @active_enterprises = Project.most_active_public(limit, params[:offset].to_i)

    respond_to do |wants|
      wants.js do
        render :update do |page|
          page.replace "project_index_bottom_active", :partial => "project_list", :locals => {
                                              :projects => @active_enterprises,
                                              :offset => Integer(params[:offset]) + limit,
                                              :index_type => 'active'}
          page.call "display_sparks"
        end
      end
    end
  end

  def map
  end

  # Add a new project
  #TODO too much logic here, needs to move to model somehow
  def add
    @project = Project.new(params[:project])
    @parent = Project.find(params[:parent_id]) unless params[:parent_id] == "" || params[:parent_id].nil?

    if request.get?
      @project.enabled_module_names = Setting.default_projects_modules
      @project.dpp = 100

      if @parent
        @project.is_public = @parent.is_public
        @project.volunteer = @parent.volunteer
      end
    else
      @project.enabled_module_names = params[:enabled_modules]
      @project.is_public = params[:project][:is_public] || false
      @project.volunteer = params[:project][:volunteer] || false
      @project.homepage = url_for(:controller => 'projects', :action => 'wiki', :id => @project)


      if validate_parent_id && @project.save
        LogActivityStreams.write_single_activity_stream(User.current, :name, @project, :name, :created, :workstreams, 0, nil,{:object_description_method => :description})


        if @parent.nil?
          # Add current user as a admin and core team member
          r = Role.core_member
          r2 = Role.administrator
          m = Member.new(:user => User.current, :roles => [r,r2])
          @project.all_members << m
          @project.update_attribute(:owner_id, User.current.id)

        else
          @project.set_parent!(@parent.id)
          @project.set_owner
          @project.refresh_active_members
          User.current.add_to_project(@project, Role.active)
        end


        flash.now[:success] = l(:notice_successful_create)
        redirect_to :controller => 'projects', :action => 'dashboard', :id => @project.id
      else
        redirect_with_flash :error, "Couldn't create project", :controller => "my", :action => "projects"
      end
    end
  end

  def copy
    @trackers = Tracker.all
    @root_projects = Project.find(:all,
                                  :conditions => "parent_id IS NULL AND status = #{Project::STATUS_ACTIVE}",
                                  :order => 'name')
    @source_project = Project.find(params[:id])
    if request.get?
      @project = Project.copy_from(@source_project)
      if @project
        @project.identifier = Project.next_identifier if Setting.sequential_project_identifiers?
      else
        redirect_to :controller => 'admin', :action => 'projects'
      end
    else
      @project = Project.new(params[:project])
      @project.enabled_module_names = params[:enabled_modules]
      if validate_parent_id && @project.copy(@source_project, :only => params[:only])
        @project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id')
        flash.now[:success] = l(:notice_successful_create)
        redirect_to :controller => 'admin', :action => 'projects'
      end
    end
  rescue ActiveRecord::RecordNotFound
    redirect_to :controller => 'admin', :action => 'projects'
  end

  def reset_invitation_token
    @project.invitation_token = Token.generate_token_value
    @project.save

    respond_to do |wants|
      wants.js do
        render :update do |page|
          page.replace "generic-invitation", :partial => 'invitations/generic_invitation', :locals => {:project => @project}
          page.visual_effect :highlight, "generic-link", :duration => 6
          page.visual_effect :highlight, "generic-invitation", :duration => 2
          page.call '$.jGrowl', l(:notice_successful_update)
        end
      end
    end
  end

  def join
    #check token
    if params[:token] != @project.invitation_token
      render_error(l(:error_old_invite))
      return
    else
      #add as contributor
      if @project.root?
        unless User.current.community_member_of? @project
          User.current.add_to_project @project, Role.contributor
          msg = "Invitation accepted. You are now a contributor of #{@project.name}"
          redirect_with_flash :success, msg, :controller => :projects, :action => :show, :id => @project.id
        else
          msg = "You're already on the #{@project.name} team. Invitation ignored"
          redirect_with_flash :error, msg, :controller => :projects, :action => :show, :id => @project.id
        end
      end
    end
  end

  # Show @project
  def overview
    if params[:jump]
      # try to redirect to the requested menu item
      redirect_to_project_menu_item(@project, params[:jump]) && return
    end

    @subprojects = @project.descendants.active
    @news = @project.news.find(:all, :conditions => " (created_at > '#{Time.now.advance :days => (Setting::DAYS_FOR_LATEST_NEWS * -1)}')", :limit => 5, :include => [ :author, :project ], :order => "#{News.table_name}.created_at DESC")
    @trackers = @project.rolled_up_trackers

    cond = @project.project_condition(Setting.display_subprojects_issues?)

    @open_issues_by_tracker = Issue.visible.count(:group => :tracker,
                                            :include => [:project, :status, :tracker],
                                            :conditions => ["(#{cond}) AND #{IssueStatus.table_name}.is_closed=?", false])
    @total_issues_by_tracker = Issue.visible.count(:group => :tracker,
                                            :include => [:project, :status, :tracker],
                                            :conditions => cond)

    @key = User.current.rss_key

    @motions = @project.motions.viewable_by(User.current.position_for(@project)).allactive
  end


  def hourly_types
    render :json => @project.hourly_types.inject({}) { |hash, hourly_type|
      hash[hourly_type.id] = hourly_type.name
      hash
    }.to_json
  end

  def community_members
    render :json => @project.root.all_members.inject({}) { |hash, member|
      hash[member.user_id] = member.name
      hash
    }.to_json
  end

  def community_members_array
    array = []
    @project.root.member_users.each {|m| array.push({:label => "#{m.user.name} (@#{m.user.login})", :value => m.user.login, :mail_hash => m.user.mail_hash })}
    @project.member_users.each {|m| array.push({:label => "#{m.user.name} (@#{m.user.login})", :value => m.user.login, :mail_hash => m.user.mail_hash }) }
    render :json => array.sort{|x,y| x[:label] <=> y[:label]}.uniq.to_json
  end

  def issue_search
    term = params[:searchTerm]
    render :json => Issue.find(:all, :conditions => "project_id = #{@project.id} AND (subject ilike '%#{term}%' OR CAST(id as varchar) ilike '%#{term}%')").to_json(:only => [:id, :subject, :description])
  end

  def all_tags
    render :json => @project.all_tags(params[:term]).to_json
  end


  def dashboard
    @credit_base = @project.dpp
    @show_issue_id = params[:show_issue_id] #Optional parameter to start the dashboard off showing an issue
    @show_retro_id = params[:show_retro_id] #Optional parameter to start the dashboard off showing a retrospective
  end

  #TODO: optimize this query, it's WAY too heavy, and we need fewer columns, and it's executing hundreds of queries!
  def dashdata

    if params[:include_subworkstreams]
      project_ids = [@project.sub_project_array_visible_to(User.current).join(",")]
    else
      project_ids = [@project.id]
    end

    if params[:status_ids]
      conditions = "project_id in (#{project_ids}) AND (retro_id < 0 OR retro_id is null) AND status_id in (#{params[:status_ids]})"
    else
      conditions = "project_id in (#{project_ids}) AND (retro_id < 0 OR retro_id is null)"
    end

    render :json => Issue.find(:all, :conditions => conditions)  \
                         .to_json(:include => { :journals =>    { :only => [:id, :notes, :created_at, :user_id], :include => {:user => { :only => [:firstname, :lastname, :login] }}},
                                                :issue_votes => { :include => {:user => { :only => [:firstname, :lastname, :login] }}},
                                                :status =>      { :only => :name },
                                                :attachments => { :only => [:id, :filename]},
                                                :todos =>       { :only => [:id, :subject, :completed_on, :owner_login] },
                                                :tracker =>     { :only => [:name,:id] },
                                                :author =>      { :only => [:firstname, :lastname, :login, :mail_hash] },
                                                :assigned_to => { :only => [:firstname, :lastname, :login] }
                                                },
                                                :except => :tags)
  end

  # Checks to see if any items have changed in this project (in the last params[:seconds]).
  # If it has, returns only items that have changed
  def new_dashdata
    if @project.last_item_updated_on.nil?
      @project.last_item_updated_on = DateTime.now
      @project.save
    end

    if params[:include_subworkstreams]
      if @project.last_item_sub_updated_on.nil?
        @project.last_item_sub_updated_on = DateTime.now
        @project.save
      end

      project_ids = [@project.sub_project_array_visible_to(User.current).join(",")]
      total_count = (@project.issue_count + @project.issue_count_sub).to_s
      last_update = @project.last_item_sub_updated_on
    else
      project_ids = [@project.id]
      total_count = @project.issue_count.to_s
      last_update = @project.last_item_updated_on
    end

    seconds_ago = params[:seconds].to_f.round

    if (last_update.advance(:seconds => seconds_ago) > DateTime.now)
      conditions = "project_id in (#{project_ids}) AND " +
        "updated_at >= '#{@project.last_item_updated_on.advance(:seconds => -1 * seconds_ago)}'"

      render :json => Issue.find(:all, :conditions => conditions).to_json(
        :include => {
          :journals => {
            :only => [:id, :notes, :created_at, :user_id],
            :include => {
              :user => { :only => [:firstname, :lastname, :login] }
            }
          },
          :issue_votes => { :include => {:user => { :only => [:firstname, :lastname, :login] }}},
          :status =>      { :only => :name },
          :attachments => { :only => [:id, :filename]},
          :todos =>       { :only => [:id, :subject, :completed_on, :owner_login] },
          :tracker =>     { :only => [:name,:id] },
          :author =>      { :only => [:firstname, :lastname, :login, :mail_hash] },
          :assigned_to => { :only => [:firstname, :lastname, :login] }
        },
        :except => :tags
      )
    elsif params[:issuecount] != total_count
      render :json =>  Issue.find(:all,
        :conditions => "project_id in (#{project_ids}) AND (retro_id < 0 OR retro_id is null)"
      ).collect {|i| i.id}
    else
      render :text => 'no'
    end
  end

  def update_scale
    render :update do |page|
      page.replace 'point_scale', :partial => 'point_scale', :locals => {:dpp => params[:dpp] }
      page["point_scale"].visual_effect :highlight
    end
  end

  #TODO: remove this function, we're no longer using it??
  #Returns my priorities for issues belonging to this project
  def mypris
    render :json => Issue.find(:all, :conditions => "project_id = #{@project.id} AND id IN (SELECT DISTINCT issue_id FROM #{Pri.table_name} where user_id = #{User.current.id})", :select => "id").to_json
  end

  def settings
    @member ||= @project.all_members.new
    @trackers = Tracker.all
    @wiki ||= @project.wiki
    @allow_logo_selection = true
  end

  # Edit @project
  def edit
    if request.post?
      old_attributes = @project.attributes
      @project.attributes = params[:project]
      @project.is_public = params[:project][:is_public] || false
      @project.volunteer = params[:project][:volunteer] || false


      if (old_attributes["is_public"] != (params[:project]["is_public"] == "1"))
        description = (params[:project]["is_public"] == "1") ? "publicised" : "privatized"
          LogActivityStreams.write_single_activity_stream(User.current, :name, @project, :name, description, :workstreams, 0, nil,{})
      end

      if validate_parent_id && @project.save
        @project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id')
        @project.refresh_active_members
        flash.now[:success] = l(:notice_successful_update)
        redirect_to :action => 'settings', :id => @project
      else
        settings
        render :action => 'settings'
      end
    end
  end

  def modules
    @project.enabled_module_names = params[:enabled_modules]
    @project.attributes = params[:project]
    @project.save
    redirect_with_flash :notice, l(:notice_successful_update), :action => 'settings', :id => @project, :tab => 'modules'
  end

  def archive
    if @project.active? && request.post? && @project.archive
      project_id_override = @project.parent ? @project.parent.id : @project.id #archived projects don't show up in activity stream, so we log the activity to its parent if it exists
      LogActivityStreams.write_single_activity_stream(User.current, :name, @project, :name, l(:label_archived), :workstreams, 0, nil,{:project_id => project_id_override})
      redirect_with_flash :notice, l(:notice_successful_update), :controller => "my", :action => 'projects'
    else
      render_error(l(:error_general))
    end
  end

  def unarchive
    if !@project.active? && request.post? && @project.unarchive
      LogActivityStreams.write_single_activity_stream(User.current, :name, @project, :name, l(:label_unarchived), :workstreams, 0, nil,{})

      respond_to do |wants|

        wants.js do
          @my_projects = User.current.owned_projects

          render :update do |page|
            page.replace params[:table_id], :partial => 'my/my_projects', :locals => {:my_projects => @my_projects, :table_id => params[:table_id]}
            page.call '$.jGrowl', l(:notice_successful_update)
            page.call 'display_sparks'
          end
        end
      end
    else
      respond_to do |wants|
        wants.js do
          render :update do |page|
            page.call '$.jGrowl', l(:error_general)
          end
        end
      end
    end
  end

  # Delete @project
  def destroy
    @project_to_destroy = @project
    if request.post?
      project_id_override = @project.parent ? @project.parent.id : @project.id #deleted projects don't show up in activity stream, so we log the activity to its parent if it exists
      LogActivityStreams.write_single_activity_stream(User.current, :name, @project, :name, l(:label_deleted), :workstreams, 0, nil,{:project_id => project_id_override})
      if @project_to_destroy.destroy
        redirect_with_flash :notice, l(:notice_successful_delete), :controller => "welcome", :action => 'index'
      else
        render_error(l(:error_general))
      end
    end
    # hide project in layout
    @project = nil
  end

  #move project
  def move
    redirect_to(:action => 'settings') and return if @project.root?

    #TODO @project.allowed_parents should be used but it isn't working correctly currently
    @allowed_projects = []
    disallowed_projects = @project.self_and_descendants
    @project.root.self_and_descendants.each {|p| @allowed_projects << p if p.visible_to(User.current) && !disallowed_projects.include?(p) }

    if request.post?
      if (parent = Project.find params[:parent_id]) && @allowed_projects.include?(parent)
        @project.move_to_child_of(parent)
        flash[:success] = l(:notice_successful_update)
        LogActivityStreams.write_single_activity_stream(User.current, :name, @project, :name, l(:label_moved), :workstreams, 0, nil,{:project_id => @project.id})
        redirect_to @project
      else
        render_403 and return
      end
    end
  end

  def add_file
    if request.post?
      container = @project
      attachments = attach_files(container, params[:attachments])
      if !attachments.empty? && Setting.notified_events.include?('file_added')
        Mailer.deliver_attachments_added(attachments)
      end
      redirect_to :controller => 'projects', :action => 'list_files', :id => @project
      return
    end
  end

  def list_files
    sort_init 'filename', 'asc'
    sort_update 'filename' => "#{Attachment.table_name}.filename",
                'created_at' => "#{Attachment.table_name}.created_at",
                'size' => "#{Attachment.table_name}.filesize",
                'downloads' => "#{Attachment.table_name}.downloads"

    @containers = [ Project.find(@project.id, :include => :attachments, :order => sort_clause)]
    render :layout => !request.xhr?
  end

  def team
      @days = Setting.activity_days_default.to_i
      @hide_view_team_link = true #hides the link to this page from the active box
  end

  def credits
    @credits = @project.fetch_credits(params[:with_subprojects])

    @credits_pages, @creditss = @project.fetch_credits(params[:with_subprojects])


    @active_credits = @credits.find_all{|credit| credit.enabled == true && credit.settled_on.nil? == true }.group_by{|credit| credit.owner_id}
    @oustanding_credits = @credits.find_all{|credit| credit.settled_on.nil? == true }.group_by{|credit| credit.owner_id}
    @total_credits = @credits.group_by{|credit| credit.owner_id}
  end

  #params that can be passed: length, with_subprojects, and author
  def activity

  rescue ActiveRecord::RecordNotFound
    render_404
  end

  private

  def find_project
    if (params[:show_issue_id])
      @project = Issue.find(params[:show_issue_id]).project
    else
      @project = Project.find(params[:id])
    end
    render_message l(:text_project_locked) if @project.locked?

  rescue ActiveRecord::RecordNotFound
    render_404
  end

  def find_optional_project
    return true unless params[:id]
    @project = Project.find(params[:id])
    authorize
  rescue ActiveRecord::RecordNotFound
    render_404
  end

  def retrieve_selected_tracker_ids(selectable_trackers, default_trackers=nil)
    if ids = params[:tracker_ids]
      @selected_tracker_ids = (ids.is_a? Array) ? ids.collect { |id| id.to_i.to_s } : ids.split('/').collect { |id| id.to_i.to_s }
    else
      @selected_tracker_ids = (default_trackers || selectable_trackers).collect {|t| t.id.to_s }
    end
  end

  # Validates parent_id param according to user's permissions
  # TODO: move it to Project model in a validation that depends on User.current
  def validate_parent_id
    return true if User.current.admin?
    parent_id = params[:project] && params[:project][:parent_id]
    if parent_id || @project.new_record?
      parent = parent_id.blank? ? nil : Project.find_by_id(parent_id.to_i)
      unless @project.allowed_parents.include?(parent)
        @project.errors.add :parent_id, :invalid
        return false
      end
    end
    true
  end

end


================================================
FILE: app/controllers/queries_controller.rb
================================================
# BetterMeans - Work 2.0
# Copyright (C) 2006-2011  See readme for details and license#

class QueriesController < ApplicationController
  menu_item :issues
  before_filter :find_query, :except => :new
  before_filter :find_optional_project, :only => :new

  def new
    @query = Query.new(params[:query])
    @query.project = params[:query_is_for_all] ? nil : @project
    @query.user = User.current
    @query.is_public = false unless User.current.allowed_to?(:manage_public_queries, @project) || User.current.admin?
    @query.column_names = nil if params[:default_columns]

    params[:fields].each do |field|
      @query.add_filter(field, params[:operators][field], params[:values][field])
    end if params[:fields]
    @query.group_by ||= params[:group_by]

    if request.post? && params[:confirm] && @query.save
      flash.now[:success] = l(:notice_successful_create)
      redirect_to :controller => 'issues', :action => 'index', :project_id => @project, :query_id => @query
      return
    end
    render :layout => false if request.xhr?
  end

  def edit
    if request.post?
      @query.filters = {}
      params[:fields].each do |field|
        @query.add_filter(field, params[:operators][field], params[:values][field])
      end if params[:fields]
      @query.attributes = params[:query]
      @query.project = nil if params[:query_is_for_all]
      @query.is_public = false unless User.current.allowed_to?(:manage_public_queries, @project) || User.current.admin?
      @query.column_names = nil if params[:default_columns]

      if @query.save
        flash.now[:success] = l(:notice_successful_update)
        redirect_to :controller => 'issues', :action => 'index', :project_id => @project, :query_id => @query
      end
    end
  end

  def destroy
    @query.destroy if request.post?
    redirect_to :controller => 'issues', :action => 'index', :project_id => @project, :set_filter => 1
  end

  private

  def find_query
    @query = Query.find(params[:id])
    @project = @query.project
    render_403 unless @query.editable_by?(User.current)
  rescue ActiveRecord::RecordNotFound
    render_404
  end

  def find_optional_project
    @project = Project.find(params[:project_id]) if params[:project_id]
    User.current.allowed_to?(:save_queries, @project, :global => true)
  rescue ActiveRecord::RecordNotFound
    render_404
  end

end


================================================
FILE: app/controllers/quotes_controller.rb
================================================
class QuotesController < ApplicationController
  ssl_required :all

  def index
    @quotes = Quote.all

    respond_to do |format|
      format.html
      format.xml  { render :xml => @quotes }
    end
  end

  def show
    @quote = Quote.find(params[:id])

    respond_to do |format|
      format.html
      format.xml  { render :xml => @quote }
    end
  end

  def new
    @quote = Quote.new

    respond_to do |format|
      format.html
      format.xml  { render :xml => @quote }
    end
  end

  def edit
    @quote = Quote.find(params[:id])
  end

  def create
    @quote = Quote.new(params[:quote])
    @quote.user_id = User.current.id

    respond_to do |format|
      if @quote.save
        flash.now[:success] = 'Quote was successfully created.'
        format.html { redirect_to(@quote) }
        format.xml  { render :xml => @quote, :status => :created, :location => @quote }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @quote.errors, :status => :unprocessable_entity }
      end
    end
  end

  def update
    @quote = Quote.find(params[:id])

    respond_to do |format|
      if @quote.update_attributes(params[:quote])
        flash.now[:success] = 'Quote was successfully updated.'
        format.html { redirect_to(@quote) }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @quote.errors, :status => :unprocessable_entity }
      end
    end
  end

  def destroy
    @quote = Quote.find(params[:id])
    @quote.destroy

    respond_to do |format|
      format.html { redirect_to(quotes_url) }
      format.xml  { head :ok }
    end
  end
end


================================================
FILE: app/controllers/recurly_notifications_controller.rb
================================================
# BetterMeans - Work 2.0
# Copyright (C) 2006-2011  See readme for details and license#

class RecurlyNotificationsController < ApplicationController
  def listen
    logger.info { "params #{params.inspect}" }
    if params[:updated_subscription_notification]
      update_subscription(params[:updated_subscription_notification],true)
    end

    if params[:new_subscription_notification]
      update_subscription(params[:new_subscription_notification],true)
    end

    if params[:expired_subscription_notification]
      update_subscription(params[:expired_subscription_notification],false)
    end

    render :nothing => true
  end

  private

  def update_subscription(params,active_subscription)
    account = params["account"]
    subscription = params["subscription"]
    begin
      user = User.find(account["account_code"])

      if active_subscription
        user.plan_id = Plan.find_by_code(subscription["plan"]["plan_code"]).id
        user.active_subscription = true
      else
        user.plan_id = Plan.find(Plan::FREE_CODE).id
        user.active_subscription = false
      end
      user.save
      logger.info { "saved for user #{user.name} new plan #{user.plan_id}" }
    rescue Exception => e
      logger.info { e.inspect }
    end

  end
end


================================================
FILE: app/controllers/reports_controller.rb
================================================
# BetterMeans - Work 2.0
# Copyright (C) 2006-2011  See readme for details and license#

class ReportsController < ApplicationController
  menu_item :issues
  before_filter :find_project, :authorize

  def issue_report
    @statuses = IssueStatus.find(:all, :order => 'position')

    case params[:detail]
    when "tracker"
      @field = "tracker_id"
      @rows = @project.trackers
      @data = issues_by_tracker
      @report_title = l(:field_tracker)
      render :template => "reports/issue_report_details"
    when "assigned_to"
      @field = "assigned_to_id"
      @rows = @project.all_members.collect { |m| m.user }
      @data = issues_by_assigned_to
      @report_title = l(:field_assigned_to)
      render :template => "reports/issue_report_details"
    when "author"
      @field = "author_id"
      @rows = @project.all_members.collect { |m| m.user }
      @data = issues_by_author
      @report_title = l(:field_author)
      render :template => "reports/issue_report_details"
    when "subproject"
      @field = "project_id"
      @rows = @project.descendants.active
      @data = issues_by_subproject
      @report_title = l(:field_subproject)
      render :template => "reports/issue_report_details"
    else
      @trackers = @project.trackers
      @categories = @project.issue_categories
      @assignees = @project.all_members.collect { |m| m.user }
      @authors = @project.all_members.collect { |m| m.user }
      @subprojects = @project.descendants.active
      issues_by_tracker
      issues_by_assigned_to
      issues_by_author
      issues_by_subproject

      render :template => "reports/issue_report"
    end
  end

  private

  # Find project of id params[:id]
  def find_project
    @project = Project.find(params[:id])
  rescue ActiveRecord::RecordNotFound
    render_404
  end

  def issues_by_tracker
    @issues_by_tracker ||=
        ActiveRecord::Base.connection.select_all("select    s.id as status_id,
                                                  s.is_closed as closed,
                                                  t.id as tracker_id,
                                                  count(i.id) as total
                                                from
                                                  #{Issue.table_name} i, #{IssueStatus.table_name} s, #{Tracker.table_name} t
                                                where
                                                  i.status_id=s.id
                                                  and i.tracker_id=t.id
                                                  and i.project_id=#{@project.id}
                                                group by s.id, s.is_closed, t.id")
  end

  def issues_by_assigned_to
    @issues_by_assigned_to ||=
      ActiveRecord::Base.connection.select_all("select    s.id as status_id,
                                                  s.is_closed as closed,
                                                  a.id as assigned_to_id,
                                                  count(i.id) as total
                                                from
                                                  #{Issue.table_name} i, #{IssueStatus.table_name} s, #{User.table_name} a
                                                where
                                                  i.status_id=s.id
                                                  and i.assigned_to_id=a.id
                                                  and i.project_id=#{@project.id}
                                                group by s.id, s.is_closed, a.id")
  end

  def issues_by_author
    @issues_by_author ||=
      ActiveRecord::Base.connection.select_all("select    s.id as status_id,
                                                  s.is_closed as closed,
                                                  a.id as author_id,
                                                  count(i.id) as total
                                                from
                                                  #{Issue.table_name} i, #{IssueStatus.table_name} s, #{User.table_name} a
                                                where
                                                  i.status_id=s.id
                                                  and i.author_id=a.id
                                                  and i.project_id=#{@project.id}
                                                group by s.id, s.is_closed, a.id")
  end

  def issues_by_subproject
    @issues_by_subproject ||=
      ActiveRecord::Base.connection.select_all("select    s.id as status_id,
                                                  s.is_closed as closed,
                                                  i.project_id as project_id,
                                                  count(i.id) as total
                                                from
                                                  #{Issue.table_name} i, #{IssueStatus.table_name} s
                                                where
                                                  i.status_id=s.id
                                                  and i.project_id IN (#{@project.descendants.active.collect{|p| p.id}.join(',')})
                                                group by s.id, s.is_closed, i.project_id") if @project.descendants.active.any?
    @issues_by_subproject ||= []
  end

end


================================================
FILE: app/controllers/reputations_controller.rb
================================================
class ReputationsController < ApplicationController
  ssl_required :all

  def index
    @reputations = Reputation.all

    respond_to do |format|
      format.html
      format.xml  { render :xml => @reputations }
    end
  end

  def show
    @reputation = Reputation.find(params[:id])

    respond_to do |format|
      format.html
      format.xml  { render :xml => @reputation }
    end
  end

  def new
    @reputation = Reputation.new

    respond_to do |format|
      format.html
      format.xml  { render :xml => @reputation }
    end
  end

  def edit
    @reputation = Reputation.find(params[:id])
  end

  def create
    @reputation = Reputation.new(params[:reputation])

    respond_to do |format|
      if @reputation.save
        flash.now[:success] = 'Reputation was successfully created.'
        format.html { redirect_to(@reputation) }
        format.xml  { render :xml => @reputation, :status => :created, :location => @reputation }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @reputation.errors, :status => :unprocessable_entity }
      end
    end
  end

  def update
    @reputation = Reputation.find(params[:id])

    respond_to do |format|
      if @reputation.update_attributes(params[:reputation])
        flash.now[:success] = 'Reputation was successfully updated.'
        format.html { redirect_to(@reputation) }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @reputation.errors, :status => :unprocessable_entity }
      end
    end
  end

  def destroy
    @reputation = Reputation.find(params[:id])
    @reputation.destroy

    respond_to do |format|
      format.html { redirect_to(reputations_url) }
      format.xml  { head :ok }
    end
  end
end


================================================
FILE: app/controllers/retro_ratings_controller.rb
================================================
class RetroRatingsController < ApplicationController
  ssl_required :all

  def index
    @retro_ratings = RetroRating.all

    respond_to do |format|
      format.html
      format.xml  { render :xml => @retro_ratings }
    end
  end

  def show
    @retro_rating = RetroRating.find(params[:id])

    respond_to do |format|
      format.html
      format.xml  { render :xml => @retro_rating }
    end
  end

  def new
    @retro_rating = RetroRating.new

    respond_to do |format|
      format.html
      format.xml  { render :xml => @retro_rating }
    end
  end

  def edit
    @retro_rating = RetroRating.find(params[:id])
  end

  def create
    @retro_ratings = params[:retro_ratings].values.collect { |retro_rating| RetroRating.new(retro_rating) }

    #Archive notification for this retrospective
    @retro_id = params[:retro_ratings].values[0]["retro_id"]
    @rater_id = params[:retro_ratings].values[0]["rater_id"]
    Notification.update_all "state = #{Notification::STATE_ARCHIVED}" , ["variation = 'retro_started' AND source_id = ? AND recipient_id = ?", @retro_id, @rater_id]


    #TODO: security: make sure to only create ratings if current user is same as rater_id (and user is actually on those teams!)
    respond_to do |format|
      if @retro_ratings.all?(&:valid?)
        RetroRating.delete_all(:rater_id => @retro_ratings[0].rater_id , :retro_id => @retro_ratings[0].retro_id)
        @retro_ratings.each(&:save!)
        format.html { redirect_to(@retro_rating) }
        format.xml  { render :xml => @retro_rating, :status => :created, :location => @retro_rating }
        format.js  { render :json => @retro_ratings.to_json}
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @retro_rating.errors, :status => :unprocessable_entity }
      end
    end
  end

  def update
    @retro_rating = RetroRating.find(params[:id])

    respond_to do |format|
      if @retro_rating.update_attributes(params[:retro_rating])
        flash.now[:success] = 'RetroRating was successfully updated.'
        format.html { redirect_to(@retro_rating) }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @retro_rating.errors, :status => :unprocessable_entity }
      end
    end
  end

  def destroy
    @retro_rating = RetroRating.find(params[:id])
    @retro_rating.destroy

    respond_to do |format|
      format.html { redirect_to(retro_ratings_url) }
      format.xml  { head :ok }
    end
  end

end


================================================
FILE: app/controllers/retros_controller.rb
================================================
class RetrosController < ApplicationController
  before_filter :find_retro, :only => [:show]
  before_filter :find_project, :only => [:index, :index_json, :dashdata, :new, :edit, :create, :update, :destroy, :show_multiple]
  before_filter :authorize
  ssl_required :all

  def index
    @retros = Retro.all

    respond_to do |format|
      format.html
      format.xml  { render :xml => @retros }
    end
  end

  def index_json
    render :json => Retro.find(:all, :conditions => {:project_id => @project.id}).to_json
  end

  def dashdata
    render :json => Issue.find(:all, :conditions => {:retro_id => params[:id]}).to_json(:include => {:journals => {:include => :user}, :issue_votes => {:include => :user}, :status => {:only => :name}, :todos => {:only => [:id, :subject, :completed_on]}, :tracker => {:only => [:name,:id]}, :author => {:only => [:firstname, :lastname, :login]}, :assigned_to => {:only => [:firstname, :lastname, :login]}})
  end

  def show

    @retro = Retro.find(params[:id])
    @team_hash = {}
    @final_hash = {}
    @user_retro_hash = {}

    new_user_retro = {"issues" => [],
                    "total_points" => 0,
                    "percentage_points" => 0,
                    "given_percentage" => 0,
                    "self_bias" => nil,
                    "scale_bias" => nil,
                    "journals" => [],
                    "total_journals" => 0,
                    "votes" => [],
                    "total_votes" => 0,
                    "total_ideas" => 0
                    }

    #Calculating oustanding points for entire retrospective
    @total_points = 0
    @total_ideas = @retro.issues.length

    @max_range = 0
    @pie_data_points = []
    @pie_labels_points = []
    @max_points = 0

    #Calculating team size for issues (to distribute total points amongst team)
    issue_team_sizes = Hash.new
    @retro.issues.each {|issue| issue_team_sizes[issue.id] = 1}

    @retro.issues.each do |issue|
      issue.issue_votes.each do |issue_vote|
          next if issue_vote.vote_type != IssueVote::JOIN_VOTE_TYPE
          #Incrementing team size for the issue
          issue_team_sizes[issue_vote.issue_id] += 1 if issue_vote.user_id != issue.assigned_to_id
      end
    end

    #Adding users that have issues assigned to them and calculating total points for each user
    issue_group = @retro.issues.group_by{|issue| issue.assigned_to_id}
    issue_group.each_value {|issues| @total_points += issues.collect(&:points).sum }
    issue_group.keys.sort.each do |assigned_to_id|
      next if (@user_retro_hash.has_key? assigned_to_id)  || assigned_to_id == User.sysadmin.id
      @user_retro_hash.store assigned_to_id, new_us
Download .txt
gitextract_i_av7aco/

├── .gitignore
├── .gitmodules
├── .rspec
├── .rvmrc
├── Gemfile
├── Guardfile
├── README.md
├── Rakefile
├── app/
│   ├── controllers/
│   │   ├── account_controller.rb
│   │   ├── activity_stream_preferences_controller.rb
│   │   ├── activity_stream_preferences_module.rb
│   │   ├── activity_streams_controller.rb
│   │   ├── activity_streams_module.rb
│   │   ├── admin_controller.rb
│   │   ├── application_controller.rb
│   │   ├── attachments_controller.rb
│   │   ├── auth_sources_controller.rb
│   │   ├── boards_controller.rb
│   │   ├── comments_controller.rb
│   │   ├── credit_distributions_controller.rb
│   │   ├── credit_transfers_controller.rb
│   │   ├── credits_controller.rb
│   │   ├── documents_controller.rb
│   │   ├── email_updates_controller.rb
│   │   ├── enterprises_controller.rb
│   │   ├── enumerations_controller.rb
│   │   ├── help_controller.rb
│   │   ├── help_sections_controller.rb
│   │   ├── home_controller.rb
│   │   ├── hourly_types_controller.rb
│   │   ├── invitations_controller.rb
│   │   ├── issue_invitations_controller.rb
│   │   ├── issue_relations_controller.rb
│   │   ├── issue_statuses_controller.rb
│   │   ├── issue_votes_controller.rb
│   │   ├── issues_controller.rb
│   │   ├── journals_controller.rb
│   │   ├── mail_handler_controller.rb
│   │   ├── mails_controller.rb
│   │   ├── members_controller.rb
│   │   ├── messages_controller.rb
│   │   ├── motion_votes_controller.rb
│   │   ├── motions_controller.rb
│   │   ├── my_controller.rb
│   │   ├── news_controller.rb
│   │   ├── notifications_controller.rb
│   │   ├── projects_controller.rb
│   │   ├── queries_controller.rb
│   │   ├── quotes_controller.rb
│   │   ├── recurly_notifications_controller.rb
│   │   ├── reports_controller.rb
│   │   ├── reputations_controller.rb
│   │   ├── retro_ratings_controller.rb
│   │   ├── retros_controller.rb
│   │   ├── roles_controller.rb
│   │   ├── search_controller.rb
│   │   ├── settings_controller.rb
│   │   ├── shares_controller.rb
│   │   ├── todos_controller.rb
│   │   ├── trackers_controller.rb
│   │   ├── users_controller.rb
│   │   ├── votes_controller.rb
│   │   ├── watchers_controller.rb
│   │   ├── welcome_controller.rb
│   │   ├── wiki_controller.rb
│   │   ├── wikis_controller.rb
│   │   └── workflows_controller.rb
│   ├── helpers/
│   │   ├── admin_helper.rb
│   │   ├── application_helper.rb
│   │   ├── attachments_helper.rb
│   │   ├── groups_helper.rb
│   │   ├── issue_relations_helper.rb
│   │   ├── issues_helper.rb
│   │   ├── journals_helper.rb
│   │   ├── messages_helper.rb
│   │   ├── motions_helper.rb
│   │   ├── my_helper.rb
│   │   ├── news_helper.rb
│   │   ├── projects_helper.rb
│   │   ├── queries_helper.rb
│   │   ├── reports_helper.rb
│   │   ├── retros_helper.rb
│   │   ├── search_helper.rb
│   │   ├── settings_helper.rb
│   │   ├── sort_helper.rb
│   │   ├── users_helper.rb
│   │   ├── watchers_helper.rb
│   │   └── wiki_helper.rb
│   ├── models/
│   │   ├── activity_stream.rb
│   │   ├── activity_stream_preference.rb
│   │   ├── activity_stream_total.rb
│   │   ├── attachment.rb
│   │   ├── auth_source.rb
│   │   ├── auth_source_ldap.rb
│   │   ├── board.rb
│   │   ├── comment.rb
│   │   ├── credit.rb
│   │   ├── credit_distribution.rb
│   │   ├── credit_transfer.rb
│   │   ├── daily_digest.rb
│   │   ├── document.rb
│   │   ├── document_observer.rb
│   │   ├── email_update.rb
│   │   ├── enabled_module.rb
│   │   ├── enterprise.rb
│   │   ├── enumeration.rb
│   │   ├── help_section.rb
│   │   ├── hourly_type.rb
│   │   ├── invitation.rb
│   │   ├── issue.rb
│   │   ├── issue_observer.rb
│   │   ├── issue_relation.rb
│   │   ├── issue_status.rb
│   │   ├── issue_vote.rb
│   │   ├── journal.rb
│   │   ├── journal_detail.rb
│   │   ├── journal_observer.rb
│   │   ├── mail.rb
│   │   ├── mail_handler.rb
│   │   ├── mailer.rb
│   │   ├── member.rb
│   │   ├── member_role.rb
│   │   ├── message.rb
│   │   ├── message_observer.rb
│   │   ├── motion.rb
│   │   ├── motion_vote.rb
│   │   ├── news.rb
│   │   ├── news_observer.rb
│   │   ├── notification.rb
│   │   ├── open_id_authentication_association.rb
│   │   ├── open_id_authentication_nonces.rb
│   │   ├── personal_welcome.rb
│   │   ├── plan.rb
│   │   ├── plugin_schema_info.rb
│   │   ├── project.rb
│   │   ├── query.rb
│   │   ├── quote.rb
│   │   ├── reputation.rb
│   │   ├── retro.rb
│   │   ├── retro_rating.rb
│   │   ├── role.rb
│   │   ├── setting.rb
│   │   ├── share.rb
│   │   ├── todo.rb
│   │   ├── token.rb
│   │   ├── track.rb
│   │   ├── tracker.rb
│   │   ├── user.rb
│   │   ├── user_preference.rb
│   │   ├── watcher.rb
│   │   ├── wiki.rb
│   │   ├── wiki_content.rb
│   │   ├── wiki_content_observer.rb
│   │   ├── wiki_page.rb
│   │   ├── wiki_redirect.rb
│   │   └── workflow.rb
│   └── views/
│       ├── account/
│       │   ├── login.html.erb
│       │   ├── lost_password.html.erb
│       │   ├── password_recovery.html.erb
│       │   └── register.html.erb
│       ├── activity_stream_preferences/
│       │   └── index.html.erb
│       ├── activity_streams/
│       │   ├── _activity_comment.html.erb
│       │   ├── _activity_stream.html.erb
│       │   ├── _activity_stream_feed.atom.builder
│       │   ├── _activity_stream_group.erb
│       │   ├── _activity_stream_list.html.erb
│       │   ├── _activity_stream_sub.html.erb
│       │   ├── _indirect_object.html.erb
│       │   ├── _table_header.html.erb
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── admin/
│       │   ├── _menu.html.erb
│       │   ├── _no_data.html.erb
│       │   ├── index.html.erb
│       │   ├── info.html.erb
│       │   ├── plugins.html.erb
│       │   ├── projects.html.erb
│       │   └── user_stats.html.erb
│       ├── attachments/
│       │   ├── _form.html.erb
│       │   ├── _links.html.erb
│       │   ├── _table.erb
│       │   ├── diff.html.erb
│       │   └── file.html.erb
│       ├── auth_sources/
│       │   ├── _form.html.erb
│       │   ├── edit.html.erb
│       │   ├── list.html.erb
│       │   └── new.html.erb
│       ├── boards/
│       │   ├── _form.html.erb
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── common/
│       │   ├── 403.html.erb
│       │   ├── 404.html.erb
│       │   ├── _calendar.html.erb
│       │   ├── _diff.html.erb
│       │   ├── _file.html.erb
│       │   ├── _main_menu_home.html.erb
│       │   ├── _preview.html.erb
│       │   ├── _tabs.html.erb
│       │   └── feed.atom.rxml
│       ├── credit_distributions/
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── credit_transfers/
│       │   ├── _credit_transfer_history.html.erb
│       │   ├── _eligible_recipients.erb
│       │   ├── _new_credit_transfer.html.erb
│       │   └── index.html.erb
│       ├── credits/
│       │   ├── _credit_breakdown.html.erb
│       │   ├── _credit_history.html.erb
│       │   ├── _credit_queue.html.erb
│       │   ├── _my_credits.html.erb
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── documents/
│       │   ├── _document.html.erb
│       │   ├── _form.html.erb
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── email_updates/
│       │   └── new.html.erb
│       ├── enterprises/
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── enumerations/
│       │   ├── _form.html.erb
│       │   ├── destroy.html.erb
│       │   ├── edit.html.erb
│       │   ├── list.html.erb
│       │   └── new.html.erb
│       ├── help/
│       │   └── show.html.erb
│       ├── help_sections/
│       │   ├── _show.html.erb
│       │   ├── _show_popup.html.erb
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── home/
│       │   ├── _footer.html.erb
│       │   ├── _header.html.erb
│       │   ├── about.html.erb
│       │   ├── apps.html.erb
│       │   ├── contact.html.erb
│       │   ├── elements.html.erb
│       │   ├── features_original.html.erb
│       │   ├── how.html.erb
│       │   ├── hq.html.erb
│       │   ├── index.html.erb
│       │   ├── library.html.erb
│       │   ├── old_index.html.erb
│       │   ├── old_index2.html.erb
│       │   ├── old_inviteonline.html.erb
│       │   ├── open_enterprise_governance_model.html.erb
│       │   ├── pricing.html.erb
│       │   ├── privacy.html.erb
│       │   ├── services.html.erb
│       │   ├── signup.html.erb
│       │   ├── tour.html.erb
│       │   ├── user_agreement.html.erb
│       │   ├── webdesign.html.erb
│       │   ├── what.html.erb
│       │   └── why.html.erb
│       ├── hourly_types/
│       │   ├── _form.html.erb
│       │   ├── edit.html.erb
│       │   └── new.html.erb
│       ├── invitations/
│       │   ├── _generic_invitation.html.erb
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── issue_relations/
│       │   └── _form.html.erb
│       ├── issue_statuses/
│       │   ├── _form.html.erb
│       │   ├── edit.html.erb
│       │   ├── list.html.erb
│       │   └── new.html.erb
│       ├── issue_votes/
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── issues/
│       │   ├── _action_menu.html.erb
│       │   ├── _attributes.html.erb
│       │   ├── _edit.html.erb
│       │   ├── _form.html.erb
│       │   ├── _form_add_team_member.html.erb
│       │   ├── _form_update.html.erb
│       │   ├── _history.html.erb
│       │   ├── _joined_by.html.erb
│       │   ├── _list.html.erb
│       │   ├── _list_simple.html.erb
│       │   ├── _list_very_simple.html.erb
│       │   ├── _relations.html.erb
│       │   ├── _sidebar.html.erb
│       │   ├── calendar.html.erb
│       │   ├── changes.rxml
│       │   ├── context_menu.html.erb
│       │   ├── edit.html.erb
│       │   ├── gantt.html.erb
│       │   ├── index.html.erb
│       │   ├── move.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── journals/
│       │   ├── _notes_form.html.erb
│       │   ├── edit.rjs
│       │   └── update.rjs
│       ├── layouts/
│       │   ├── _account_menu.html.erb
│       │   ├── activescaffold.html.erb
│       │   ├── admin.html.erb
│       │   ├── base.html.erb
│       │   ├── blank.html.erb
│       │   ├── gooey.html.erb
│       │   ├── help_sections.html.erb
│       │   ├── issue_blank.html.erb
│       │   ├── mailer.text.html.erb
│       │   ├── mailer.text.plain.erb
│       │   └── static.html.erb
│       ├── mailer/
│       │   ├── _issue_text_html.html.erb
│       │   ├── _issue_text_plain.html.erb
│       │   ├── account_activated.text.html.html.erb
│       │   ├── account_activated.text.plain.html.erb
│       │   ├── account_activation_request.text.html.html.erb
│       │   ├── account_activation_request.text.plain.html.erb
│       │   ├── account_information.text.html.html.erb
│       │   ├── account_information.text.plain.html.erb
│       │   ├── attachments_added.text.html.html.erb
│       │   ├── attachments_added.text.plain.html.erb
│       │   ├── daily_digest.text.html.html.erb
│       │   ├── daily_digest.text.plain.html.erb
│       │   ├── document_added.text.html.html.erb
│       │   ├── document_added.text.plain.html.erb
│       │   ├── email_update_activation.text.html.html.erb
│       │   ├── email_update_activation.text.plain.html.erb
│       │   ├── invitation_add.text.html.html.erb
│       │   ├── invitation_add.text.plain.html.erb
│       │   ├── invitation_remind.text.html.html.erb
│       │   ├── invitation_remind.text.plain.html.erb
│       │   ├── issue_add.text.html.html.erb
│       │   ├── issue_add.text.plain.html.erb
│       │   ├── issue_edit.text.html.html.erb
│       │   ├── issue_edit.text.plain.html.erb
│       │   ├── lost_password.text.html.html.erb
│       │   ├── lost_password.text.plain.html.erb
│       │   ├── message_posted.text.html.html.erb
│       │   ├── message_posted.text.plain.html.erb
│       │   ├── news_added.text.html.html.erb
│       │   ├── news_added.text.plain.html.erb
│       │   ├── personal_welcome.text.html.html.erb
│       │   ├── personal_welcome.text.plain.html.erb
│       │   ├── register.text.html.html.erb
│       │   ├── register.text.plain.html.erb
│       │   ├── reminder.text.html.html.erb
│       │   ├── reminder.text.plain.html.erb
│       │   ├── test.text.html.html.erb
│       │   ├── test.text.plain.html.erb
│       │   ├── wiki_content_added.text.html.html.erb
│       │   ├── wiki_content_added.text.plain.html.erb
│       │   ├── wiki_content_updated.text.html.html.erb
│       │   └── wiki_content_updated.text.plain.html.erb
│       ├── mails/
│       │   ├── _inbox.html.erb
│       │   ├── _sent.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── members/
│       │   └── autocomplete_for_member.html.erb
│       ├── messages/
│       │   ├── _form.html.erb
│       │   ├── _motion_topic.html.erb
│       │   ├── edit.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── motion_votes/
│       │   ├── _vote.html.erb
│       │   ├── cast_vote.js.rjs
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── motions/
│       │   ├── _motions.html.erb
│       │   ├── edit.html.erb
│       │   ├── eligible_users.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── my/
│       │   ├── _belong_to_projects.html.erb
│       │   ├── _billing_form.html.erb
│       │   ├── _block.html.erb
│       │   ├── _my_projects.html.erb
│       │   ├── _plan_description.html.erb
│       │   ├── _plan_descriptions.html.erb
│       │   ├── _project_list.html.erb
│       │   ├── _sidebar.html.erb
│       │   ├── _usage_stats.html.erb
│       │   ├── account.html.erb
│       │   ├── blocks/
│       │   │   ├── _calendar.html.erb
│       │   │   ├── _documents.html.erb
│       │   │   ├── _issuesassignedtome.html.erb
│       │   │   ├── _issuesreportedbyme.html.erb
│       │   │   ├── _issueswatched.html.erb
│       │   │   └── _news.html.erb
│       │   ├── issues.html.erb
│       │   ├── page.html.erb
│       │   ├── page_layout.html.erb
│       │   ├── password.html.erb
│       │   ├── projects.html.erb
│       │   └── upgrade.html.erb
│       ├── news/
│       │   ├── _form.html.erb
│       │   ├── _news.html.erb
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── notifications/
│       │   ├── _credits_distributed.erb
│       │   ├── _credits_transferred.html.erb
│       │   ├── _invitation.erb
│       │   ├── _issue_joined.html.erb
│       │   ├── _issue_left.html.erb
│       │   ├── _issue_team_member_added.html.erb
│       │   ├── _issue_team_member_removed.html.erb
│       │   ├── _mention.html.erb
│       │   ├── _message.html.erb
│       │   ├── _motion_started.erb
│       │   ├── _new_role.erb
│       │   ├── _retro_ended.erb
│       │   ├── _retro_started.erb
│       │   ├── _trial_expired.html.erb
│       │   ├── _unresponded.html.erb
│       │   ├── _usage_over.html.erb
│       │   ├── edit.html.erb
│       │   ├── error.js.rjs
│       │   ├── hide.js.rjs
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── projects/
│       │   ├── _active_member_box.html.erb
│       │   ├── _active_member_box_simple.html.erb
│       │   ├── _clearance_member_box.html.erb
│       │   ├── _dashboard_javascript_variables.html.erb
│       │   ├── _edit.html.erb
│       │   ├── _form.html.erb
│       │   ├── _member_box.html.erb
│       │   ├── _point_scale.html.erb
│       │   ├── _project_list.html.erb
│       │   ├── _project_summary.html.erb
│       │   ├── _projects_list_simple.html.erb
│       │   ├── _subprojects.html.erb
│       │   ├── _team_link.html.erb
│       │   ├── _team_list.html.erb
│       │   ├── _team_list_member.html.erb
│       │   ├── activity.html.erb
│       │   ├── add.html.erb
│       │   ├── add_file.html.erb
│       │   ├── copy.html.erb
│       │   ├── core_vote.js.rjs
│       │   ├── credits.html.erb
│       │   ├── dashboard.html.erb
│       │   ├── index.html.erb
│       │   ├── list_files.html.erb
│       │   ├── list_members.html.erb
│       │   ├── map.html.erb
│       │   ├── move.html.erb
│       │   ├── overview.html.erb
│       │   ├── settings/
│       │   │   ├── _boards.html.erb
│       │   │   ├── _hourly_types.html.erb
│       │   │   ├── _members.html.erb
│       │   │   ├── _modules.html.erb
│       │   │   ├── _select_new_member.html.erb
│       │   │   └── _wiki.html.erb
│       │   ├── settings.html.erb
│       │   ├── show.png.flexi
│       │   ├── team.html.erb
│       │   └── team_update.js.rjs
│       ├── queries/
│       │   ├── _columns.html.erb
│       │   ├── _filters.html.erb
│       │   ├── _form.html.erb
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   └── new.html.erb
│       ├── quotes/
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── reports/
│       │   ├── _details.html.erb
│       │   ├── _simple.html.erb
│       │   ├── issue_report.html.erb
│       │   └── issue_report_details.html.erb
│       ├── reputations/
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── retro_ratings/
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── retros/
│       │   ├── _issue_details.html.erb
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   ├── show.html.erb
│       │   └── show_multiple.html.erb
│       ├── roles/
│       │   ├── _form.html.erb
│       │   ├── edit.html.erb
│       │   ├── list.html.erb
│       │   ├── new.html.erb
│       │   └── report.html.erb
│       ├── search/
│       │   └── index.html.erb
│       ├── settings/
│       │   ├── _authentication.html.erb
│       │   ├── _display.html.erb
│       │   ├── _general.html.erb
│       │   ├── _issues.html.erb
│       │   ├── _mail_handler.html.erb
│       │   ├── _notifications.html.erb
│       │   ├── _projects.html.erb
│       │   ├── edit.html.erb
│       │   └── plugin.html.erb
│       ├── shares/
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── todos/
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   ├── new.html.erb
│       │   └── show.html.erb
│       ├── trackers/
│       │   ├── _form.html.erb
│       │   ├── edit.html.erb
│       │   ├── list.html.erb
│       │   └── new.html.erb
│       ├── users/
│       │   ├── _activity.html.erb
│       │   ├── _form.html.erb
│       │   ├── _general.html.erb
│       │   ├── _general_info.html.erb
│       │   ├── _membership.html.erb
│       │   ├── _memberships.html.erb
│       │   ├── _reputation.html.erb
│       │   ├── add.html.erb
│       │   ├── edit.html.erb
│       │   ├── index.html.erb
│       │   └── show.html.erb
│       ├── watchers/
│       │   └── _watchers.html.erb
│       ├── welcome/
│       │   ├── _list_workstreams.html.erb
│       │   ├── index.html.erb
│       │   └── robots.html.erb
│       ├── wiki/
│       │   ├── _content.html.erb
│       │   ├── _sidebar.html.erb
│       │   ├── annotate.html.erb
│       │   ├── destroy.html.erb
│       │   ├── diff.html.erb
│       │   ├── edit.html.erb
│       │   ├── export.html.erb
│       │   ├── export_multiple.html.erb
│       │   ├── history.html.erb
│       │   ├── rename.html.erb
│       │   ├── show.html.erb
│       │   ├── special_date_index.html.erb
│       │   └── special_page_index.html.erb
│       ├── wikis/
│       │   └── destroy.html.erb
│       └── workflows/
│           ├── _action_menu.html.erb
│           ├── copy.html.erb
│           ├── edit.html.erb
│           └── index.html.erb
├── config/
│   ├── additional_environment.rb.example
│   ├── boot.rb
│   ├── database.yml.example
│   ├── email.yml.example
│   ├── environment.rb
│   ├── environments/
│   │   ├── cucumber.rb
│   │   ├── demo.rb
│   │   ├── development.rb
│   │   ├── production.rb
│   │   ├── selenium.rb
│   │   ├── test.rb
│   │   ├── test_pgsql.rb
│   │   └── test_sqlite3.rb
│   ├── exceptional.yml
│   ├── initializers/
│   │   ├── 10-patches.rb
│   │   ├── 20-mime_types.rb
│   │   ├── 30-redmine.rb
│   │   ├── 40-email.rb
│   │   ├── activity_streams.rb
│   │   ├── admin_data.rb
│   │   ├── aws_s3.rb
│   │   ├── backtrace_silencers.rb
│   │   ├── bigdecimal-segfault-fix.rb
│   │   ├── hash.rb
│   │   ├── inflections.rb
│   │   ├── recurly_config.rb
│   │   └── timeout.rb
│   ├── locales/
│   │   └── en.yml
│   ├── preinitializer.rb
│   ├── rails_best_practices.yml
│   ├── routes.rb
│   ├── s3.yml
│   ├── selenium.yml
│   └── settings.yml
├── cucumber.yml
├── db/
│   ├── migrate/
│   │   ├── 20110320055526_acts_as_taggable_on_migration.rb
│   │   ├── 20110329230314_add_projectid_to_taggable.rb
│   │   └── 20110330041648_add_tags_to_issue.rb
│   ├── schema.rb
│   └── seeds.rb
├── deploy
├── doc/
│   ├── COPYING
│   ├── INSTALL
│   ├── README_FOR_APP
│   └── RUNNING_TESTS
├── extra/
│   ├── mail_handler/
│   │   └── rdm-mailhandler.rb
│   └── sample_plugin/
│       ├── README
│       ├── app/
│       │   ├── controllers/
│       │   │   └── example_controller.rb
│       │   ├── models/
│       │   │   └── meeting.rb
│       │   └── views/
│       │       ├── example/
│       │       │   ├── say_goodbye.html.erb
│       │       │   └── say_hello.html.erb
│       │       ├── my/
│       │       │   └── blocks/
│       │       │       └── _sample_block.html.erb
│       │       └── settings/
│       │           └── _sample_plugin_settings.html.erb
│       ├── assets/
│       │   └── stylesheets/
│       │       └── example.css
│       ├── config/
│       │   └── locales/
│       │       ├── en.yml
│       │       └── fr.yml
│       ├── db/
│       │   └── migrate/
│       │       └── 001_create_meetings.rb
│       └── init.rb
├── lib/
│   ├── activity_streams/
│   │   ├── log_activity_streams.rb
│   │   └── routes.rb
│   ├── activity_streams.rb
│   ├── ar_condition.rb
│   ├── diff.rb
│   ├── faster_csv.rb
│   ├── float.rb
│   ├── generators/
│   │   ├── redmine_plugin/
│   │   │   ├── USAGE
│   │   │   ├── redmine_plugin_generator.rb
│   │   │   └── templates/
│   │   │       ├── README.rdoc
│   │   │       ├── en.yml
│   │   │       ├── en_rails_i18n.yml
│   │   │       ├── init.rb.erb
│   │   │       └── test_helper.rb.erb
│   │   ├── redmine_plugin_controller/
│   │   │   ├── USAGE
│   │   │   ├── redmine_plugin_controller_generator.rb
│   │   │   └── templates/
│   │   │       ├── controller.rb.erb
│   │   │       ├── functional_test.rb.erb
│   │   │       ├── helper.rb.erb
│   │   │       └── view.html.erb
│   │   └── redmine_plugin_model/
│   │       ├── USAGE
│   │       ├── redmine_plugin_model_generator.rb
│   │       └── templates/
│   │           ├── fixtures.yml
│   │           ├── migration.rb.erb
│   │           ├── model.rb.erb
│   │           └── unit_test.rb.erb
│   ├── mention.rb
│   ├── redcloth3.rb
│   ├── redmine/
│   │   ├── about.rb
│   │   ├── access_control.rb
│   │   ├── access_keys.rb
│   │   ├── activity/
│   │   │   └── fetcher.rb
│   │   ├── activity.rb
│   │   ├── core_ext/
│   │   │   ├── string/
│   │   │   │   ├── conversions.rb
│   │   │   │   └── inflections.rb
│   │   │   └── string.rb
│   │   ├── core_ext.rb
│   │   ├── default_data/
│   │   │   └── loader.rb
│   │   ├── export/
│   │   │   └── pdf.rb
│   │   ├── helpers/
│   │   │   ├── calendar.rb
│   │   │   └── gantt.rb
│   │   ├── i18n.rb
│   │   ├── imap.rb
│   │   ├── info.rb
│   │   ├── menu_manager.rb
│   │   ├── mime_type.rb
│   │   ├── platform.rb
│   │   ├── plugin.rb
│   │   ├── search.rb
│   │   ├── themes.rb
│   │   ├── unified_diff.rb
│   │   ├── utils.rb
│   │   ├── version.rb
│   │   ├── views/
│   │   │   ├── my_page/
│   │   │   │   └── block.rb
│   │   │   └── other_formats_builder.rb
│   │   ├── wiki_formatting/
│   │   │   ├── macros.rb
│   │   │   └── textile/
│   │   │       ├── formatter.rb
│   │   │       └── helper.rb
│   │   └── wiki_formatting.rb
│   ├── redmine.rb
│   ├── string.rb
│   ├── tabular_form_builder.rb
│   └── tasks/
│       ├── autoaccept_commitrequests.rake
│       ├── backup.rake
│       ├── bootstrap.rake
│       ├── cleanup.rake
│       ├── close_retros.rake
│       ├── cron.rake
│       ├── cucumber.rake
│       ├── custom.rake
│       ├── deprecated.rake
│       ├── email.rake
│       ├── extract_fixtures.rake
│       ├── fetch_changesets.rake
│       ├── initializers.rake
│       ├── load_default_data.rake
│       ├── locales.rake
│       ├── metrics.rake
│       ├── migrate_from_mantis.rake
│       ├── migrate_from_trac.rake
│       ├── migrate_plugins.rake
│       ├── plugins.rake
│       ├── reek.rake
│       ├── reminder.rake
│       ├── remove_problem_type.rake
│       ├── reset_all_passwords.rake
│       ├── rspec.rake
│       ├── steak.rake
│       ├── testing.rake
│       ├── update_item_statuses.rake
│       └── watchers.rake
├── public/
│   ├── .htaccess
│   ├── 404.html
│   ├── 500.html
│   ├── help/
│   │   ├── wiki_syntax.html
│   │   └── wiki_syntax_detailed.html
│   ├── images/
│   │   ├── gallery/
│   │   │   └── index.sof
│   │   ├── inner-background.psd
│   │   └── static/
│   │       ├── HomePageMain.psd
│   │       ├── Untitled-1.psd
│   │       ├── Untitled-2.psd
│   │       ├── call-us.psd
│   │       ├── col-img3.psd
│   │       ├── index.sof
│   │       ├── landingmockup.psd
│   │       ├── pricings-buttom.psd
│   │       ├── thanks.psd
│   │       └── videotemplate.psd
│   ├── javascripts/
│   │   ├── application.js
│   │   ├── calendar/
│   │   │   ├── calendar-setup.js
│   │   │   ├── calendar.js
│   │   │   └── lang/
│   │   │       ├── calendar-bg.js
│   │   │       ├── calendar-bs.js
│   │   │       ├── calendar-ca.js
│   │   │       ├── calendar-cs.js
│   │   │       ├── calendar-da.js
│   │   │       ├── calendar-de.js
│   │   │       ├── calendar-en.js
│   │   │       ├── calendar-es.js
│   │   │       ├── calendar-fi.js
│   │   │       ├── calendar-fr.js
│   │   │       ├── calendar-gl.js
│   │   │       ├── calendar-he.js
│   │   │       ├── calendar-hu.js
│   │   │       ├── calendar-id.js
│   │   │       ├── calendar-it.js
│   │   │       ├── calendar-ja.js
│   │   │       ├── calendar-ko.js
│   │   │       ├── calendar-lt.js
│   │   │       ├── calendar-mk.js
│   │   │       ├── calendar-nl.js
│   │   │       ├── calendar-no.js
│   │   │       ├── calendar-pl.js
│   │   │       ├── calendar-pt-br.js
│   │   │       ├── calendar-pt.js
│   │   │       ├── calendar-ro.js
│   │   │       ├── calendar-ru.js
│   │   │       ├── calendar-sk.js
│   │   │       ├── calendar-sl.js
│   │   │       ├── calendar-sr.js
│   │   │       ├── calendar-sv.js
│   │   │       ├── calendar-th.js
│   │   │       ├── calendar-tr.js
│   │   │       ├── calendar-uk.js
│   │   │       ├── calendar-vi.js
│   │   │       ├── calendar-zh-tw.js
│   │   │       └── calendar-zh.js
│   │   ├── context_menu.js
│   │   ├── controls.js
│   │   ├── dashboard.js
│   │   ├── dragdrop.js
│   │   ├── effects.js
│   │   ├── enterprise_map.js
│   │   ├── fancybox/
│   │   │   ├── index.sof
│   │   │   ├── jquery.fancybox-1.3.0.css
│   │   │   ├── jquery.fancybox-1.3.0.pack.js
│   │   │   └── jquery.mousewheel-3.0.2.pack.js
│   │   ├── fileuploader.js
│   │   ├── hoverIntent.js
│   │   ├── issue.js
│   │   ├── jQuery.bubbletip-1.0.4.js
│   │   ├── jScrollPane
│   │   ├── jScrollPane.js
│   │   ├── jit-yc.js
│   │   ├── jit.js
│   │   ├── jquery-ui.js
│   │   ├── jquery.autocomplete.js
│   │   ├── jquery.autocomplete.pack.js
│   │   ├── jquery.easing-1.3.pack.js
│   │   ├── jquery.em.js
│   │   ├── jquery.fancybox-1.3.0.js
│   │   ├── jquery.fancybox-1.3.0.pack.js
│   │   ├── jquery.fancybox-1.3.4.js
│   │   ├── jquery.fancybox-1.3.4.pack.js
│   │   ├── jquery.fileupload-ui.js
│   │   ├── jquery.fileupload.js
│   │   ├── jquery.jgrowl_minimized.js
│   │   ├── jquery.js
│   │   ├── jquery.mousewheel-3.0.2.pack.js
│   │   ├── jquery.mousewheel-3.0.4.pack.js
│   │   ├── jquery.mousewheel.js
│   │   ├── jquery.scrollTo-min.js
│   │   ├── jquery.tagsinput.js
│   │   ├── jquery.ui.autocomplete.ext.js
│   │   ├── jquery.ui.autocomplete.js
│   │   ├── jquery.ui.position.js
│   │   ├── jrails.js
│   │   ├── json2.js
│   │   ├── jstoolbar/
│   │   │   ├── jstoolbar.js
│   │   │   ├── lang/
│   │   │   │   ├── jstoolbar-bg.js
│   │   │   │   ├── jstoolbar-bs.js
│   │   │   │   ├── jstoolbar-ca.js
│   │   │   │   ├── jstoolbar-cs.js
│   │   │   │   ├── jstoolbar-da.js
│   │   │   │   ├── jstoolbar-de.js
│   │   │   │   ├── jstoolbar-en.js
│   │   │   │   ├── jstoolbar-es.js
│   │   │   │   ├── jstoolbar-fi.js
│   │   │   │   ├── jstoolbar-fr.js
│   │   │   │   ├── jstoolbar-gl.js
│   │   │   │   ├── jstoolbar-he.js
│   │   │   │   ├── jstoolbar-hu.js
│   │   │   │   ├── jstoolbar-id.js
│   │   │   │   ├── jstoolbar-it.js
│   │   │   │   ├── jstoolbar-ja.js
│   │   │   │   ├── jstoolbar-ko.js
│   │   │   │   ├── jstoolbar-lt.js
│   │   │   │   ├── jstoolbar-mk.js
│   │   │   │   ├── jstoolbar-nl.js
│   │   │   │   ├── jstoolbar-no.js
│   │   │   │   ├── jstoolbar-pl.js
│   │   │   │   ├── jstoolbar-pt-br.js
│   │   │   │   ├── jstoolbar-pt.js
│   │   │   │   ├── jstoolbar-ro.js
│   │   │   │   ├── jstoolbar-ru.js
│   │   │   │   ├── jstoolbar-sk.js
│   │   │   │   ├── jstoolbar-sl.js
│   │   │   │   ├── jstoolbar-sr.js
│   │   │   │   ├── jstoolbar-sv.js
│   │   │   │   ├── jstoolbar-th.js
│   │   │   │   ├── jstoolbar-tr.js
│   │   │   │   ├── jstoolbar-uk.js
│   │   │   │   ├── jstoolbar-vi.js
│   │   │   │   ├── jstoolbar-zh-tw.js
│   │   │   │   └── jstoolbar-zh.js
│   │   │   └── textile.js
│   │   ├── lightbox.js
│   │   ├── prototype.js
│   │   ├── repository_navigation.js
│   │   ├── retro.js
│   │   ├── select_list_move.js
│   │   ├── static/
│   │   │   ├── Quicksand_Book_400.font.js
│   │   │   ├── css_browser_selector.js
│   │   │   ├── cufon-yui.js
│   │   │   ├── execute.js
│   │   │   ├── hoverIntent.js
│   │   │   ├── index.sof
│   │   │   ├── jquery-galleryview-1.1/
│   │   │   │   ├── index.sof
│   │   │   │   ├── jquery.galleryview-1.1.js
│   │   │   │   └── jquery.timers-1.1.2.js
│   │   │   ├── jquery.easing.1.3.js
│   │   │   ├── jquery.scroll.pack.js
│   │   │   ├── jquery.send.js
│   │   │   └── superfish.js
│   │   ├── store.js
│   │   ├── superfish.js
│   │   ├── supersubs.js
│   │   ├── textile-editor-config.js
│   │   └── textile-editor.js
│   ├── maintenance/
│   │   └── index.html
│   ├── stylesheets/
│   │   ├── bubbletip-IE.css
│   │   ├── bubbletip.css
│   │   ├── calendar.css
│   │   ├── context_menu.css
│   │   ├── csshover.htc
│   │   ├── custom.css
│   │   ├── dashboard.css
│   │   ├── enterprise_map.css
│   │   ├── fileuploader.css
│   │   ├── gt-fixed.css
│   │   ├── gt-rounded-corners.css
│   │   ├── gt-styles.css
│   │   ├── headerandfooter.css
│   │   ├── issue.css
│   │   ├── jScrollPane.css
│   │   ├── jquery-ui-1.7.2.custom.css
│   │   ├── jquery-ui-1.8.8.custom.css
│   │   ├── jquery.autocomplete.css
│   │   ├── jquery.fancybox-1.3.0.css
│   │   ├── jquery.fancybox-1.3.4.css
│   │   ├── jquery.fileupload-ui.css
│   │   ├── jquery.tagsinput.css
│   │   ├── jquery.ui.autocomplete.css
│   │   ├── jstoolbar.css
│   │   ├── lightbox.css
│   │   ├── oldapplication.css
│   │   ├── override.css
│   │   ├── reset-fonts.css
│   │   ├── scaffold.css
│   │   ├── scm.css
│   │   ├── static/
│   │   │   ├── index.sof
│   │   │   ├── print.css
│   │   │   ├── screen.css
│   │   │   ├── style.css
│   │   │   └── superfish.css
│   │   └── textile-editor.css
│   └── themes/
│       ├── README
│       └── bettermeans/
│           └── stylesheets/
│               └── application.css
├── script/
│   ├── about
│   ├── autospec
│   ├── breakpointer
│   ├── console
│   ├── cucumber
│   ├── dbconsole
│   ├── delayed_job
│   ├── destroy
│   ├── generate
│   ├── performance/
│   │   ├── benchmarker
│   │   ├── profiler
│   │   └── request
│   ├── plugin
│   ├── process/
│   │   ├── inspector
│   │   ├── reaper
│   │   ├── spawner
│   │   └── spinner
│   ├── runner
│   ├── server
│   └── spec
├── spec/
│   ├── acceptance/
│   │   ├── acceptance_helper.rb
│   │   ├── support/
│   │   │   ├── helpers.rb
│   │   │   └── paths.rb
│   │   └── user_login_spec.rb
│   ├── controllers/
│   │   ├── account_controller_spec.rb
│   │   └── projects/
│   │       ├── index_active_spec.rb
│   │       ├── index_latest_spec.rb
│   │       ├── index_spec.rb
│   │       ├── move_spec.rb
│   │       └── new_dash_data_spec.rb
│   ├── factories.rb
│   ├── lib/
│   │   └── hash_spec.rb
│   ├── models/
│   │   └── project_spec.rb
│   ├── rcov.opts
│   ├── routing/
│   │   ├── accounts_routing_spec.rb
│   │   ├── activity_stream_preferences_routing_spec.rb
│   │   ├── activity_streams_routing_spec.rb
│   │   ├── admin_routing_spec.rb
│   │   ├── attachments_routing_spec.rb
│   │   ├── auth_sources_routing_spec.rb
│   │   ├── boards_routing_spec.rb
│   │   ├── comments_routing_spec.rb
│   │   ├── credit_distributions_routing_spec.rb
│   │   ├── credit_transfers_routing_spec.rb
│   │   ├── credits_routing_spec.rb
│   │   ├── documents_routing_spec.rb
│   │   ├── email_updates_routing_spec.rb
│   │   ├── enterprises_routing_spec.rb
│   │   ├── enumerations_routing_spec.rb
│   │   ├── help_routing_spec.rb
│   │   ├── help_sections_routing_spec.rb
│   │   ├── home_routing_spec.rb
│   │   ├── hourly_types_routing_spec.rb
│   │   ├── invitations_routing_spec.rb
│   │   ├── issue_invitations_routing_spec.rb
│   │   ├── issue_relations_routing_spec.rb
│   │   ├── issue_statuses_routing_spec.rb
│   │   ├── issue_votes_routing_spec.rb
│   │   ├── issues_routing_spec.rb
│   │   ├── journals_routing_spec.rb
│   │   ├── mail_handler_routing_spec.rb
│   │   ├── mails_routing_spec.rb
│   │   ├── members_routing_spec.rb
│   │   ├── messages_routing_spec.rb
│   │   ├── motion_votes_routing_spec.rb
│   │   ├── motions_routing_spec.rb
│   │   ├── my_routing_spec.rb
│   │   ├── news_routing_spec.rb
│   │   ├── notifications_routing_spec.rb
│   │   ├── projects_routing_spec.rb
│   │   ├── queries_routing_spec.rb
│   │   ├── quotes_routing_spec.rb
│   │   ├── recurly_notifications_routing_spec.rb
│   │   ├── reports_routing_spec.rb
│   │   ├── reputations_routing_spec.rb
│   │   ├── retro_ratings_routing_spec.rb
│   │   ├── retros_routing_spec.rb
│   │   ├── roles_routing_spec.rb
│   │   ├── search_routing_spec.rb
│   │   ├── settings_routing_spec.rb
│   │   ├── shares_routing_spec.rb
│   │   ├── todos_routing_spec.rb
│   │   ├── trackers_routing_spec.rb
│   │   ├── users_routing_spec.rb
│   │   ├── votes_routing_spec.rb
│   │   ├── watchers_routing_spec.rb
│   │   ├── welcome_routing_spec.rb
│   │   ├── wiki_routing_spec.rb
│   │   ├── wikis_routing_spec.rb
│   │   └── workflows_routing_spec.rb
│   ├── spec.opts
│   └── spec_helper.rb
└── vendor/
    └── plugins/
        ├── acts-as-taggable-on/
        │   ├── .rspec
        │   ├── CHANGELOG
        │   ├── Gemfile
        │   ├── MIT-LICENSE
        │   ├── README.rdoc
        │   ├── Rakefile
        │   ├── VERSION
        │   ├── acts-as-taggable-on.gemspec
        │   ├── generators/
        │   │   └── acts_as_taggable_on_migration/
        │   │       ├── acts_as_taggable_on_migration_generator.rb
        │   │       └── templates/
        │   │           └── migration.rb
        │   ├── lib/
        │   │   ├── acts-as-taggable-on.rb
        │   │   ├── acts_as_taggable_on/
        │   │   │   ├── acts_as_tagger.rb
        │   │   │   ├── compatibility/
        │   │   │   │   ├── Gemfile
        │   │   │   │   └── active_record_backports.rb
        │   │   │   ├── tag.rb
        │   │   │   ├── tag_list.rb
        │   │   │   ├── taggable/
        │   │   │   │   ├── cache.rb
        │   │   │   │   ├── collection.rb
        │   │   │   │   ├── core.rb
        │   │   │   │   ├── ownership.rb
        │   │   │   │   └── related.rb
        │   │   │   ├── taggable.rb
        │   │   │   ├── tagging.rb
        │   │   │   └── tags_helper.rb
        │   │   └── generators/
        │   │       └── acts_as_taggable_on/
        │   │           └── migration/
        │   │               ├── migration_generator.rb
        │   │               └── templates/
        │   │                   └── active_record/
        │   │                       └── migration.rb
        │   ├── rails/
        │   │   └── init.rb
        │   ├── spec/
        │   │   ├── acts_as_taggable_on/
        │   │   │   ├── acts_as_taggable_on_spec.rb
        │   │   │   ├── acts_as_tagger_spec.rb
        │   │   │   ├── tag_list_spec.rb
        │   │   │   ├── tag_spec.rb
        │   │   │   ├── taggable_spec.rb
        │   │   │   ├── tagger_spec.rb
        │   │   │   ├── tagging_spec.rb
        │   │   │   └── tags_helper_spec.rb
        │   │   ├── bm.rb
        │   │   ├── database.yml.sample
        │   │   ├── models.rb
        │   │   ├── schema.rb
        │   │   └── spec_helper.rb
        │   └── uninstall.rb
        ├── acts_as_attachable/
        │   ├── init.rb
        │   └── lib/
        │       └── acts_as_attachable.rb
        ├── acts_as_event/
        │   ├── init.rb
        │   └── lib/
        │       └── acts_as_event.rb
        ├── acts_as_list/
        │   ├── README
        │   ├── init.rb
        │   ├── lib/
        │   │   └── active_record/
        │   │       └── acts/
        │   │           └── list.rb
        │   └── test/
        │       └── list_test.rb
        ├── acts_as_searchable/
        │   ├── init.rb
        │   └── lib/
        │       └── acts_as_searchable.rb
        ├── acts_as_tree/
        │   ├── README
        │   ├── Rakefile
        │   ├── init.rb
        │   ├── lib/
        │   │   └── active_record/
        │   │       └── acts/
        │   │           └── tree.rb
        │   └── test/
        │       ├── abstract_unit.rb
        │       ├── acts_as_tree_test.rb
        │       ├── database.yml
        │       ├── fixtures/
        │       │   ├── mixin.rb
        │       │   └── mixins.yml
        │       └── schema.rb
        ├── acts_as_versioned/
        │   ├── CHANGELOG
        │   ├── MIT-LICENSE
        │   ├── README
        │   ├── RUNNING_UNIT_TESTS
        │   ├── Rakefile
        │   ├── init.rb
        │   ├── lib/
        │   │   └── acts_as_versioned.rb
        │   └── test/
        │       ├── abstract_unit.rb
        │       ├── database.yml
        │       ├── fixtures/
        │       │   ├── authors.yml
        │       │   ├── landmark.rb
        │       │   ├── landmark_versions.yml
        │       │   ├── landmarks.yml
        │       │   ├── locked_pages.yml
        │       │   ├── locked_pages_revisions.yml
        │       │   ├── migrations/
        │       │   │   └── 1_add_versioned_tables.rb
        │       │   ├── page.rb
        │       │   ├── page_versions.yml
        │       │   ├── pages.yml
        │       │   └── widget.rb
        │       ├── migration_test.rb
        │       ├── schema.rb
        │       └── versioned_test.rb
        ├── acts_as_watchable/
        │   ├── init.rb
        │   └── lib/
        │       └── acts_as_watchable.rb
        ├── admin_data/
        │   ├── History.txt
        │   ├── README.md
        │   ├── Rakefile
        │   ├── app/
        │   │   ├── controllers/
        │   │   │   └── admin_data/
        │   │   │       ├── base_controller.rb
        │   │   │       ├── diagnostic_controller.rb
        │   │   │       ├── feed_controller.rb
        │   │   │       ├── main_controller.rb
        │   │   │       ├── migration_controller.rb
        │   │   │       ├── search_controller.rb
        │   │   │       └── validate_model_controller.rb
        │   │   └── views/
        │   │       ├── admin_data/
        │   │       │   ├── diagnostic/
        │   │       │   │   ├── index.html.erb
        │   │       │   │   └── missing_index.html.erb
        │   │       │   ├── feed/
        │   │       │   │   └── index.rss.builder
        │   │       │   ├── main/
        │   │       │   │   ├── all_models.html.erb
        │   │       │   │   ├── association/
        │   │       │   │   │   ├── _association_info.html.erb
        │   │       │   │   │   ├── _belongs_to_info.html.erb
        │   │       │   │   │   ├── _has_many_info.html.erb
        │   │       │   │   │   └── _has_one_info.html.erb
        │   │       │   │   ├── edit.html.erb
        │   │       │   │   ├── misc/
        │   │       │   │   │   ├── _form.html.erb
        │   │       │   │   │   └── _modify_record.html.erb
        │   │       │   │   ├── new.html.erb
        │   │       │   │   ├── show.html.erb
        │   │       │   │   └── table_structure.html.erb
        │   │       │   ├── migration/
        │   │       │   │   ├── index.html.erb
        │   │       │   │   └── jstest.html.erb
        │   │       │   ├── search/
        │   │       │   │   ├── _search_base.html.erb
        │   │       │   │   ├── advance_search.html.erb
        │   │       │   │   ├── quick_search.html.erb
        │   │       │   │   └── search/
        │   │       │   │       ├── _advance_search_form.html.erb
        │   │       │   │       ├── _errors.html.erb
        │   │       │   │       ├── _listing.html.erb
        │   │       │   │       ├── _search_form.html.erb
        │   │       │   │       ├── _sortby.html.erb
        │   │       │   │       └── _title.html.erb
        │   │       │   ├── shared/
        │   │       │   │   ├── _breadcrum.html.erb
        │   │       │   │   ├── _drop_down_klasses.html.erb
        │   │       │   │   ├── _flash_message.html.erb
        │   │       │   │   ├── _header.html.erb
        │   │       │   │   ├── _powered_by.html.erb
        │   │       │   │   └── _secondary_navigation.html.erb
        │   │       │   └── validate_model/
        │   │       │       ├── _bad.html.erb
        │   │       │       ├── tid.html.erb
        │   │       │       └── validate.html.erb
        │   │       └── layouts/
        │   │           └── admin_data.html.erb
        │   ├── config/
        │   │   └── routes.rb
        │   ├── doc/
        │   │   └── git.txt
        │   ├── init.rb
        │   ├── lib/
        │   │   ├── admin_data/
        │   │   │   ├── chelper.rb
        │   │   │   ├── compatibility.rb
        │   │   │   ├── helpers.rb
        │   │   │   ├── rake_util.rb
        │   │   │   ├── search.rb
        │   │   │   ├── settings.rb
        │   │   │   └── util.rb
        │   │   ├── admin_data_date_validation.rb
        │   │   ├── css/
        │   │   │   ├── app.css
        │   │   │   ├── base.css
        │   │   │   ├── header.css
        │   │   │   ├── rounded.css
        │   │   │   ├── themes/
        │   │   │   │   └── drastic-dark/
        │   │   │   │       └── style.css
        │   │   │   ├── umbrella.css
        │   │   │   └── vendor/
        │   │   │       ├── jquery-ui-1.7.2.custom.css
        │   │   │       └── qunit.css
        │   │   └── js/
        │   │       ├── advance_search/
        │   │       │   ├── act_on_result.js
        │   │       │   ├── adv_search.js
        │   │       │   ├── advance_search.js
        │   │       │   ├── advance_search_structure.js
        │   │       │   ├── ajaxify_advance_search.js
        │   │       │   ├── build_first_row.js
        │   │       │   ├── event_bindings.js
        │   │       │   ├── global_ajax_setting.js
        │   │       │   └── trigger_submit_on_domready.js
        │   │       ├── misc/
        │   │       │   ├── drop_down_change.js
        │   │       │   ├── js_util.js
        │   │       │   └── quick_search_input_focus.js
        │   │       ├── test/
        │   │       │   ├── act_on_result.js
        │   │       │   ├── advance_search.js
        │   │       │   ├── ajaxify_advance_search.js
        │   │       │   ├── build_first_row.js
        │   │       │   └── event_bindings.js
        │   │       ├── validate_model/
        │   │       │   ├── ajaxify_form.js
        │   │       │   └── select_all.js
        │   │       └── vendor/
        │   │           ├── jack.js
        │   │           ├── jquery-1.4.1.js
        │   │           ├── jquery.ba-isjquery.js
        │   │           ├── jquery.form.js
        │   │           ├── jquery.lint.js
        │   │           ├── log.js
        │   │           └── qunit.js
        │   ├── tasks/
        │   │   ├── admin_data_tasks.rake
        │   │   └── validate_models_bg.rake
        │   └── test/
        │       ├── factories/
        │       │   ├── article.rb
        │       │   ├── car.rb
        │       │   ├── city.rb
        │       │   ├── comment.rb
        │       │   ├── door.rb
        │       │   └── engine.rb
        │       ├── functional/
        │       │   ├── base_controller_test.rb
        │       │   ├── feed_controller_test.rb
        │       │   ├── main_controller_test.rb
        │       │   ├── migration_controller_test.rb
        │       │   └── search_controller_test.rb
        │       ├── helper/
        │       │   └── view_helper_test.rb
        │       ├── misc_tests/
        │       │   ├── date_validation_test.rb
        │       │   ├── settings_test.rb
        │       │   └── util_test.rb
        │       ├── rails_root/
        │       │   ├── Rakefile
        │       │   ├── app/
        │       │   │   ├── controllers/
        │       │   │   │   ├── application_controller.rb
        │       │   │   │   └── articles_controller.rb
        │       │   │   └── models/
        │       │   │       ├── article.rb
        │       │   │       ├── city.rb
        │       │   │       ├── comment.rb
        │       │   │       ├── tech_magazine.rb
        │       │   │       └── vehicle/
        │       │   │           ├── car.rb
        │       │   │           ├── door.rb
        │       │   │           └── engine.rb
        │       │   ├── config/
        │       │   │   ├── boot.rb
        │       │   │   ├── database.yml
        │       │   │   ├── environment.rb
        │       │   │   ├── environments/
        │       │   │   │   ├── development.rb
        │       │   │   │   └── test.rb
        │       │   │   ├── initializers/
        │       │   │   │   └── new_rails_defaults.rb
        │       │   │   └── routes.rb
        │       │   ├── db/
        │       │   │   ├── migrate/
        │       │   │   │   └── 20090809061114_create_tables.rb
        │       │   │   └── schema.rb
        │       │   ├── public/
        │       │   │   └── tmp/
        │       │   │       └── response.txt
        │       │   └── script/
        │       │       ├── about
        │       │       ├── console
        │       │       ├── dbconsole
        │       │       ├── destroy
        │       │       ├── generate
        │       │       ├── performance/
        │       │       │   ├── benchmarker
        │       │       │   └── profiler
        │       │       ├── plugin
        │       │       ├── runner
        │       │       └── server
        │       └── test_helper.rb
        ├── annotate_models/
        │   ├── History.txt
        │   ├── README.rdoc
        │   ├── Rakefile
        │   ├── VERSION.yml
        │   ├── annotate.gemspec
        │   ├── bin/
        │   │   └── annotate
        │   ├── lib/
        │   │   ├── annotate/
        │   │   │   ├── annotate_models.rb
        │   │   │   ├── annotate_routes.rb
        │   │   │   └── tasks/
        │   │   │       ├── migrate.rake
        │   │   │       └── migrate.rake~HEAD
        │   │   └── annotate.rb
        │   ├── spec/
        │   │   ├── annotate/
        │   │   │   ├── annotate_models_spec.rb
        │   │   │   └── annotate_routes_spec.rb
        │   │   ├── annotate_spec.rb
        │   │   ├── spec.opts
        │   │   └── spec_helper.rb
        │   └── todo.txt
        ├── auto_complete/
        │   ├── README
        │   ├── Rakefile
        │   ├── init.rb
        │   ├── lib/
        │   │   ├── auto_complete.rb
        │   │   └── auto_complete_macros_helper.rb
        │   └── test/
        │       └── auto_complete_test.rb
        ├── awesome_nested_set/
        │   ├── MIT-LICENSE
        │   ├── README.rdoc
        │   ├── Rakefile
        │   ├── awesome_nested_set.gemspec
        │   ├── init.rb
        │   ├── lib/
        │   │   ├── awesome_nested_set/
        │   │   │   ├── compatability.rb
        │   │   │   ├── helper.rb
        │   │   │   └── named_scope.rb
        │   │   └── awesome_nested_set.rb
        │   ├── rails/
        │   │   └── init.rb
        │   └── test/
        │       ├── awesome_nested_set/
        │       │   └── helper_test.rb
        │       ├── awesome_nested_set_test.rb
        │       ├── db/
        │       │   ├── database.yml
        │       │   └── schema.rb
        │       ├── fixtures/
        │       │   ├── categories.yml
        │       │   ├── category.rb
        │       │   ├── departments.yml
        │       │   └── notes.yml
        │       └── test_helper.rb
        ├── classic_pagination/
        │   ├── CHANGELOG
        │   ├── README
        │   ├── Rakefile
        │   ├── init.rb
        │   ├── install.rb
        │   ├── lib/
        │   │   ├── pagination.rb
        │   │   └── pagination_helper.rb
        │   └── test/
        │       ├── fixtures/
        │       │   ├── companies.yml
        │       │   ├── company.rb
        │       │   ├── developer.rb
        │       │   ├── developers.yml
        │       │   ├── developers_projects.yml
        │       │   ├── project.rb
        │       │   ├── projects.yml
        │       │   ├── replies.yml
        │       │   ├── reply.rb
        │       │   ├── schema.sql
        │       │   ├── topic.rb
        │       │   └── topics.yml
        │       ├── helper.rb
        │       ├── pagination_helper_test.rb
        │       └── pagination_test.rb
        ├── coderay-0.7.6.227/
        │   ├── FOLDERS
        │   ├── LICENSE
        │   ├── README
        │   ├── bin/
        │   │   ├── coderay
        │   │   └── coderay_stylesheet
        │   └── lib/
        │       ├── coderay/
        │       │   ├── duo.rb
        │       │   ├── encoder.rb
        │       │   ├── encoders/
        │       │   │   ├── _map.rb
        │       │   │   ├── count.rb
        │       │   │   ├── debug.rb
        │       │   │   ├── div.rb
        │       │   │   ├── html/
        │       │   │   │   ├── css.rb
        │       │   │   │   ├── numerization.rb
        │       │   │   │   └── output.rb
        │       │   │   ├── html.rb
        │       │   │   ├── null.rb
        │       │   │   ├── page.rb
        │       │   │   ├── span.rb
        │       │   │   ├── statistic.rb
        │       │   │   ├── text.rb
        │       │   │   ├── tokens.rb
        │       │   │   ├── xml.rb
        │       │   │   └── yaml.rb
        │       │   ├── helpers/
        │       │   │   ├── file_type.rb
        │       │   │   ├── gzip_simple.rb
        │       │   │   ├── plugin.rb
        │       │   │   └── word_list.rb
        │       │   ├── scanner.rb
        │       │   ├── scanners/
        │       │   │   ├── _map.rb
        │       │   │   ├── c.rb
        │       │   │   ├── debug.rb
        │       │   │   ├── delphi.rb
        │       │   │   ├── html.rb
        │       │   │   ├── java.rb
        │       │   │   ├── javascript.rb
        │       │   │   ├── nitro_xhtml.rb
        │       │   │   ├── php.rb
        │       │   │   ├── plaintext.rb
        │       │   │   ├── rhtml.rb
        │       │   │   ├── ruby/
        │       │   │   │   └── patterns.rb
        │       │   │   ├── ruby.rb
        │       │   │   ├── scheme.rb
        │       │   │   └── xml.rb
        │       │   ├── style.rb
        │       │   ├── styles/
        │       │   │   ├── _map.rb
        │       │   │   ├── cycnus.rb
        │       │   │   └── murphy.rb
        │       │   ├── token_classes.rb
        │       │   └── tokens.rb
        │       └── coderay.rb
        ├── default_value_for/
        │   ├── LICENSE.TXT
        │   ├── README.rdoc
        │   ├── Rakefile
        │   ├── init.rb
        │   └── test.rb
        ├── delayed_job/
        │   ├── MIT-LICENSE
        │   ├── README.textile
        │   ├── Rakefile
        │   ├── VERSION
        │   ├── contrib/
        │   │   └── delayed_job.monitrc
        │   ├── delayed_job.gemspec
        │   ├── generators/
        │   │   └── delayed_job/
        │   │       ├── delayed_job_generator.rb
        │   │       └── templates/
        │   │           ├── migration.rb
        │   │           └── script
        │   ├── init.rb
        │   ├── lib/
        │   │   ├── delayed/
        │   │   │   ├── command.rb
        │   │   │   ├── job.rb
        │   │   │   ├── message_sending.rb
        │   │   │   ├── performable_method.rb
        │   │   │   ├── recipes.rb
        │   │   │   ├── tasks.rb
        │   │   │   └── worker.rb
        │   │   └── delayed_job.rb
        │   ├── recipes/
        │   │   └── delayed_job.rb
        │   ├── spec/
        │   │   ├── delayed_method_spec.rb
        │   │   ├── job_spec.rb
        │   │   ├── sample_jobs.rb
        │   │   ├── spec_helper.rb
        │   │   ├── story_spec.rb
        │   │   └── worker_spec.rb
        │   └── tasks/
        │       └── jobs.rake
        ├── engines/
        │   ├── .gitignore
        │   ├── CHANGELOG
        │   ├── MIT-LICENSE
        │   ├── README
        │   ├── Rakefile
        │   ├── about.yml
        │   ├── boot.rb
        │   ├── generators/
        │   │   └── plugin_migration/
        │   │       ├── USAGE
        │   │       ├── plugin_migration_generator.rb
        │   │       └── templates/
        │   │           └── plugin_migration.erb
        │   ├── init.rb
        │   ├── lib/
        │   │   ├── engines/
        │   │   │   ├── assets.rb
        │   │   │   ├── plugin/
        │   │   │   │   ├── list.rb
        │   │   │   │   ├── loader.rb
        │   │   │   │   ├── locator.rb
        │   │   │   │   └── migrator.rb
        │   │   │   ├── plugin.rb
        │   │   │   ├── rails_extensions/
        │   │   │   │   ├── asset_helpers.rb
        │   │   │   │   ├── dependencies.rb
        │   │   │   │   ├── form_tag_helpers.rb
        │   │   │   │   ├── migrations.rb
        │   │   │   │   └── rails.rb
        │   │   │   ├── tasks/
        │   │   │   │   ├── engines.rake
        │   │   │   │   └── engines.rake~HEAD
        │   │   │   └── testing.rb
        │   │   └── engines.rb
        │   └── test/
        │       ├── app/
        │       │   ├── controllers/
        │       │   │   ├── app_and_plugin_controller.rb
        │       │   │   └── namespace/
        │       │   │       └── app_and_plugin_controller.rb
        │       │   ├── helpers/
        │       │   │   └── mail_helper.rb
        │       │   ├── models/
        │       │   │   ├── app_and_plugin_model.rb
        │       │   │   └── notify_mail.rb
        │       │   ├── things/
        │       │   │   └── thing.rb
        │       │   └── views/
        │       │       ├── app_and_plugin/
        │       │       │   └── a_view.html.erb
        │       │       ├── namespace/
        │       │       │   └── app_and_plugin/
        │       │       │       └── a_view.html.erb
        │       │       ├── notify_mail/
        │       │       │   ├── implicit_multipart.text.html.erb
        │       │       │   ├── implicit_multipart.text.plain.erb
        │       │       │   ├── multipart_html.html.erb
        │       │       │   ├── multipart_plain.html.erb
        │       │       │   └── signup.text.plain.erb
        │       │       └── plugin_mail/
        │       │           ├── mail_from_plugin_with_application_template.text.plain.erb
        │       │           └── multipart_from_plugin_with_application_template_plain.html.erb
        │       ├── functional/
        │       │   ├── controller_loading_test.rb
        │       │   ├── exception_notification_compatibility_test.rb
        │       │   ├── locale_loading_test.rb
        │       │   ├── routes_test.rb
        │       │   ├── view_helpers_test.rb
        │       │   └── view_loading_test.rb
        │       ├── lib/
        │       │   ├── app_and_plugin_lib_model.rb
        │       │   ├── engines_test_helper.rb
        │       │   └── render_information.rb
        │       ├── plugins/
        │       │   ├── alpha_plugin/
        │       │   │   ├── app/
        │       │   │   │   ├── controllers/
        │       │   │   │   │   ├── alpha_plugin_controller.rb
        │       │   │   │   │   ├── app_and_plugin_controller.rb
        │       │   │   │   │   ├── namespace/
        │       │   │   │   │   │   ├── alpha_plugin_controller.rb
        │       │   │   │   │   │   ├── app_and_plugin_controller.rb
        │       │   │   │   │   │   └── shared_plugin_controller.rb
        │       │   │   │   │   └── shared_plugin_controller.rb
        │       │   │   │   ├── models/
        │       │   │   │   │   ├── alpha_plugin_model.rb
        │       │   │   │   │   ├── app_and_plugin_model.rb
        │       │   │   │   │   └── shared_plugin_model.rb
        │       │   │   │   └── views/
        │       │   │   │       ├── alpha_plugin/
        │       │   │   │       │   └── a_view.html.erb
        │       │   │   │       ├── app_and_plugin/
        │       │   │   │       │   └── a_view.html.erb
        │       │   │   │       ├── layouts/
        │       │   │   │       │   └── plugin_layout.erb
        │       │   │   │       ├── namespace/
        │       │   │   │       │   ├── alpha_plugin/
        │       │   │   │       │   │   └── a_view.html.erb
        │       │   │   │       │   ├── app_and_plugin/
        │       │   │   │       │   │   └── a_view.html.erb
        │       │   │   │       │   └── shared_plugin/
        │       │   │   │       │       └── a_view.html.erb
        │       │   │   │       └── shared_plugin/
        │       │   │   │           └── a_view.html.erb
        │       │   │   ├── lib/
        │       │   │   │   ├── alpha_plugin_lib_model.rb
        │       │   │   │   └── app_and_plugin_lib_model.rb
        │       │   │   └── locales/
        │       │   │       └── en.yml
        │       │   ├── beta_plugin/
        │       │   │   ├── app/
        │       │   │   │   ├── controllers/
        │       │   │   │   │   ├── app_and_plugin_controller.rb
        │       │   │   │   │   ├── namespace/
        │       │   │   │   │   │   └── shared_plugin_controller.rb
        │       │   │   │   │   └── shared_plugin_controller.rb
        │       │   │   │   ├── models/
        │       │   │   │   │   └── shared_plugin_model.rb
        │       │   │   │   └── views/
        │       │   │   │       ├── namespace/
        │       │   │   │       │   └── shared_plugin/
        │       │   │   │       │       └── a_view.html.erb
        │       │   │   │       └── shared_plugin/
        │       │   │   │           └── a_view.html.erb
        │       │   │   ├── init.rb
        │       │   │   └── locales/
        │       │   │       └── en.yml
        │       │   ├── not_a_plugin/
        │       │   │   └── public/
        │       │   │       └── should_not_be_copied.txt
        │       │   ├── test_assets/
        │       │   │   ├── app/
        │       │   │   │   ├── controllers/
        │       │   │   │   │   └── assets_controller.rb
        │       │   │   │   └── views/
        │       │   │   │       ├── assets/
        │       │   │   │       │   └── index.html.erb
        │       │   │   │       └── layouts/
        │       │   │   │           └── assets.html.erb
        │       │   │   ├── init.rb
        │       │   │   └── public/
        │       │   │       ├── file.txt
        │       │   │       └── subfolder/
        │       │   │           └── file_in_subfolder.txt
        │       │   ├── test_assets_with_assets_directory/
        │       │   │   ├── assets/
        │       │   │   │   ├── file.txt
        │       │   │   │   └── subfolder/
        │       │   │   │       └── file_in_subfolder.txt
        │       │   │   └── init.rb
        │       │   ├── test_assets_with_no_subdirectory/
        │       │   │   ├── assets/
        │       │   │   │   └── file.txt
        │       │   │   └── init.rb
        │       │   ├── test_code_mixing/
        │       │   │   ├── app/
        │       │   │   │   └── things/
        │       │   │   │       └── thing.rb
        │       │   │   └── init.rb
        │       │   ├── test_load_path/
        │       │   │   └── init.rb
        │       │   ├── test_migration/
        │       │   │   ├── db/
        │       │   │   │   └── migrate/
        │       │   │   │       ├── 001_create_tests.rb
        │       │   │   │       ├── 002_create_others.rb
        │       │   │   │       └── 003_create_extras.rb
        │       │   │   └── init.rb
        │       │   ├── test_plugin_mailing/
        │       │   │   ├── app/
        │       │   │   │   ├── models/
        │       │   │   │   │   └── plugin_mail.rb
        │       │   │   │   └── views/
        │       │   │   │       └── plugin_mail/
        │       │   │   │           ├── mail_from_plugin.erb
        │       │   │   │           ├── multipart_from_plugin_html.html.erb
        │       │   │   │           ├── multipart_from_plugin_plain.html.erb
        │       │   │   │           ├── multipart_from_plugin_with_application_template_html.html.erb
        │       │   │   │           └── multipart_from_plugin_with_application_template_plain.html.erb
        │       │   │   └── init.rb
        │       │   ├── test_routing/
        │       │   │   ├── app/
        │       │   │   │   └── controllers/
        │       │   │   │       ├── namespace/
        │       │   │   │       │   └── test_routing_controller.rb
        │       │   │   │       └── test_routing_controller.rb
        │       │   │   ├── config/
        │       │   │   │   └── routes.rb
        │       │   │   └── init.rb
        │       │   └── test_testing/
        │       │       ├── app/
        │       │       │   └── README.txt
        │       │       ├── init.rb
        │       │       └── test/
        │       │           ├── fixtures/
        │       │           │   └── testing_fixtures.yml
        │       │           └── unit/
        │       │               └── override_test.rb
        │       └── unit/
        │           ├── action_mailer_test.rb
        │           ├── arbitrary_code_mixing_test.rb
        │           ├── assets_test.rb
        │           ├── backwards_compat_test.rb
        │           ├── load_path_test.rb
        │           ├── migration_test.rb
        │           ├── model_and_lib_test.rb
        │           ├── plugins_test.rb
        │           ├── test_testing/
        │           │   └── override_test.rb
        │           └── testing_test.rb
        ├── exceptional/
        │   ├── History.txt
        │   ├── Manifest
        │   ├── README
        │   ├── Rakefile
        │   ├── bin/
        │   │   └── ginger
        │   ├── exceptional.gemspec
        │   ├── exceptional.yml
        │   ├── ginger_scenarios.rb
        │   ├── init.rb
        │   ├── install.rb
        │   ├── lib/
        │   │   ├── exceptional/
        │   │   │   ├── api.rb
        │   │   │   ├── bootstrap.rb
        │   │   │   ├── config.rb
        │   │   │   ├── exception_data.rb
        │   │   │   ├── integration/
        │   │   │   │   └── rails.rb
        │   │   │   ├── log.rb
        │   │   │   ├── remote.rb
        │   │   │   └── version.rb
        │   │   └── exceptional.rb
        │   └── spec/
        │       ├── api_spec.rb
        │       ├── bootstrap_spec.rb
        │       ├── config_spec.rb
        │       ├── exception_data_spec.rb
        │       ├── exceptional_rescue_from_spec.rb
        │       ├── exceptional_spec.rb
        │       ├── log_spec.rb
        │       ├── remote_spec.rb
        │       └── spec_helper.rb
        ├── googlecharts/
        │   ├── History.txt
        │   ├── License.txt
        │   ├── Manifest.txt
        │   ├── README
        │   ├── README.markdown
        │   ├── README.txt
        │   ├── Rakefile
        │   ├── VERSION
        │   ├── config/
        │   │   ├── hoe.rb
        │   │   └── requirements.rb
        │   ├── lib/
        │   │   ├── gchart/
        │   │   │   ├── aliases.rb
        │   │   │   ├── tasks/
        │   │   │   │   ├── deployment.rake
        │   │   │   │   ├── environment.rake
        │   │   │   │   ├── rspec.rake
        │   │   │   │   └── website.rake
        │   │   │   ├── theme.rb
        │   │   │   └── version.rb
        │   │   ├── gchart.rb
        │   │   ├── googlecharts.rb
        │   │   └── themes.yml
        │   ├── script/
        │   │   ├── destroy
        │   │   ├── generate
        │   │   └── txt2html
        │   ├── setup.rb
        │   ├── spec/
        │   │   ├── fixtures/
        │   │   │   ├── another_test_theme.yml
        │   │   │   └── test_theme.yml
        │   │   ├── gchart_spec.rb
        │   │   ├── spec_helper.rb
        │   │   └── theme_spec.rb
        │   └── website/
        │       ├── index.html
        │       ├── index.txt
        │       ├── javascripts/
        │       │   └── rounded_corners_lite.inc.js
        │       ├── stylesheets/
        │       │   └── screen.css
        │       └── template.rhtml
        ├── gravatar/
        │   ├── .gitignore
        │   ├── MIT-LICENSE
        │   ├── README.rdoc
        │   ├── Rakefile
        │   ├── about.yml
        │   ├── init.rb
        │   ├── lib/
        │   │   └── gravatar.rb
        │   └── spec/
        │       └── gravatar_spec.rb
        ├── jrails/
        │   ├── CHANGELOG
        │   ├── LICENSE
        │   ├── README.rdoc
        │   ├── Rakefile
        │   ├── VERSION.yml
        │   ├── bin/
        │   │   └── jrails
        │   ├── init.rb
        │   ├── install.rb
        │   ├── javascripts/
        │   │   ├── jquery-ui.js
        │   │   ├── jquery.js
        │   │   ├── jrails.js
        │   │   └── sources/
        │   │       └── jrails.js
        │   ├── jrails.gemspec
        │   ├── lib/
        │   │   ├── jquery_selector_assertions.rb
        │   │   ├── jrails.rb
        │   │   └── tasks/
        │   │       └── jrails.rake
        │   └── rails/
        │       └── init.rb
        ├── open_id_authentication/
        │   ├── CHANGELOG
        │   ├── README
        │   ├── Rakefile
        │   ├── generators/
        │   │   ├── open_id_authentication_tables/
        │   │   │   ├── open_id_authentication_tables_generator.rb
        │   │   │   └── templates/
        │   │   │       └── migration.rb
        │   │   └── upgrade_open_id_authentication_tables/
        │   │       ├── templates/
        │   │       │   └── migration.rb
        │   │       └── upgrade_open_id_authentication_tables_generator.rb
        │   ├── init.rb
        │   ├── lib/
        │   │   ├── open_id_authentication/
        │   │   │   ├── association.rb
        │   │   │   ├── db_store.rb
        │   │   │   ├── mem_cache_store.rb
        │   │   │   ├── nonce.rb
        │   │   │   ├── request.rb
        │   │   │   ├── tasks/
        │   │   │   │   └── open_id_authentication_tasks.rake
        │   │   │   └── timeout_fixes.rb
        │   │   └── open_id_authentication.rb
        │   └── test/
        │       ├── mem_cache_store_test.rb
        │       ├── normalize_test.rb
        │       ├── open_id_authentication_test.rb
        │       ├── status_test.rb
        │       └── test_helper.rb
        ├── pickle/
        │   ├── History.txt
        │   ├── License.txt
        │   ├── README.rdoc
        │   ├── Rakefile
        │   ├── Todo.txt
        │   ├── VERSION
        │   ├── features/
        │   │   ├── app/
        │   │   │   ├── app.rb
        │   │   │   ├── blueprints.rb
        │   │   │   ├── factories.rb
        │   │   │   └── views/
        │   │   │       └── notifier/
        │   │   │           ├── email.erb
        │   │   │           └── user_email.erb
        │   │   ├── email/
        │   │   │   └── email.feature
        │   │   ├── generator/
        │   │   │   └── generators.feature
        │   │   ├── path/
        │   │   │   ├── models_page.feature
        │   │   │   └── named_route_page.feature
        │   │   ├── pickle/
        │   │   │   ├── create_from_active_record.feature
        │   │   │   ├── create_from_factory_girl.feature
        │   │   │   └── create_from_machinist.feature
        │   │   ├── step_definitions/
        │   │   │   ├── email_steps.rb
        │   │   │   ├── extra_email_steps.rb
        │   │   │   ├── fork_steps.rb
        │   │   │   ├── generator_steps.rb
        │   │   │   ├── path_steps.rb
        │   │   │   └── pickle_steps.rb
        │   │   └── support/
        │   │       ├── env.rb
        │   │       └── paths.rb
        │   ├── garlic.rb
        │   ├── init.rb
        │   ├── lib/
        │   │   ├── pickle/
        │   │   │   ├── adapter.rb
        │   │   │   ├── config.rb
        │   │   │   ├── email/
        │   │   │   │   ├── parser.rb
        │   │   │   │   └── world.rb
        │   │   │   ├── email.rb
        │   │   │   ├── parser/
        │   │   │   │   └── matchers.rb
        │   │   │   ├── parser.rb
        │   │   │   ├── path/
        │   │   │   │   └── world.rb
        │   │   │   ├── path.rb
        │   │   │   ├── session/
        │   │   │   │   └── parser.rb
        │   │   │   ├── session.rb
        │   │   │   ├── version.rb
        │   │   │   └── world.rb
        │   │   └── pickle.rb
        │   ├── pickle.gemspec
        │   ├── rails_generators/
        │   │   └── pickle/
        │   │       ├── pickle_generator.rb
        │   │       └── templates/
        │   │           ├── email_steps.rb
        │   │           ├── env.rb
        │   │           ├── paths.rb
        │   │           └── pickle_steps.rb
        │   └── spec/
        │       ├── lib/
        │       │   ├── pickle_adapter_spec.rb
        │       │   ├── pickle_config_spec.rb
        │       │   ├── pickle_email_parser_spec.rb
        │       │   ├── pickle_email_spec.rb
        │       │   ├── pickle_parser_matchers_spec.rb
        │       │   ├── pickle_parser_spec.rb
        │       │   ├── pickle_path_spec.rb
        │       │   ├── pickle_session_spec.rb
        │       │   └── pickle_spec.rb
        │       └── spec_helper.rb
        ├── prepend_engine_views/
        │   └── init.rb
        ├── redmine_s3/
        │   ├── README.rdoc
        │   ├── config/
        │   │   ├── locales/
        │   │   │   └── en.yml
        │   │   └── s3.yml.example
        │   ├── init.rb
        │   ├── lang/
        │   │   └── en.yml
        │   ├── lib/
        │   │   ├── S3.rb
        │   │   ├── redmine_s3/
        │   │   │   └── connection.rb
        │   │   └── s3_helper.rb
        │   └── test/
        │       └── test_helper.rb
        ├── rfpdf/
        │   ├── CHANGELOG
        │   ├── MIT-LICENSE
        │   ├── README
        │   ├── init.rb
        │   ├── lib/
        │   │   ├── rfpdf/
        │   │   │   ├── bookmark.rb
        │   │   │   ├── chinese.rb
        │   │   │   ├── errors.rb
        │   │   │   ├── fpdf.rb
        │   │   │   ├── fpdf_eps.rb
        │   │   │   ├── japanese.rb
        │   │   │   ├── korean.rb
        │   │   │   ├── makefont.rb
        │   │   │   ├── rfpdf.rb
        │   │   │   └── view.rb
        │   │   └── rfpdf.rb
        │   └── test/
        │       └── test_helper.rb
        ├── ruby-net-ldap-0.0.4/
        │   ├── COPYING
        │   ├── ChangeLog
        │   ├── LICENCE
        │   ├── README
        │   ├── lib/
        │   │   └── net/
        │   │       ├── ber.rb
        │   │       ├── ldap/
        │   │       │   ├── dataset.rb
        │   │       │   ├── entry.rb
        │   │       │   ├── filter.rb
        │   │       │   ├── pdu.rb
        │   │       │   └── psw.rb
        │   │       ├── ldap.rb
        │   │       └── ldif.rb
        │   └── tests/
        │       ├── testber.rb
        │       ├── testdata.ldif
        │       ├── testem.rb
        │       ├── testfilter.rb
        │       ├── testldap.rb
        │       ├── testldif.rb
        │       └── testpsw.rb
        ├── seed_dump/
        │   ├── CHANGELOG.rdoc
        │   ├── MIT-LICENSE
        │   ├── README.rdoc
        │   ├── Rakefile
        │   ├── VERSION
        │   ├── lib/
        │   │   ├── seed_dump/
        │   │   │   └── railtie.rb
        │   │   ├── seed_dump.rb
        │   │   └── tasks/
        │   │       └── seed_dump.rake
        │   ├── seed_dump.gemspec
        │   └── test/
        │       ├── seed_dump_test.rb
        │       └── test_helper.rb
        ├── selenium-on-rails/
        │   ├── CHANGELOG
        │   ├── LICENSE-2.0.txt
        │   ├── README.md
        │   ├── Rakefile
        │   ├── doc/
        │   │   ├── classes/
        │   │   │   ├── SeleniumController.html
        │   │   │   ├── SeleniumHelper.html
        │   │   │   ├── SeleniumOnRails/
        │   │   │   │   ├── FixtureLoader.html
        │   │   │   │   ├── PartialsSupport.html
        │   │   │   │   ├── Paths.html
        │   │   │   │   ├── RSelenese.html
        │   │   │   │   ├── Renderer.html
        │   │   │   │   ├── Selenese.html
        │   │   │   │   ├── SuiteRenderer.html
        │   │   │   │   ├── TestBuilder.html
        │   │   │   │   ├── TestBuilderAccessors.html
        │   │   │   │   ├── TestBuilderActions.html
        │   │   │   │   ├── TestBuilderUserAccessors.html
        │   │   │   │   └── TestBuilderUserActions.html
        │   │   │   ├── SeleniumOnRails.html
        │   │   │   └── SeleniumOnRailsConfig.html
        │   │   ├── files/
        │   │   │   ├── CHANGELOG.html
        │   │   │   ├── README.html
        │   │   │   └── lib/
        │   │   │       ├── controllers/
        │   │   │       │   └── selenium_controller_rb.html
        │   │   │       ├── selenium_helper_rb.html
        │   │   │       ├── selenium_on_rails/
        │   │   │       │   ├── acceptance_test_runner_rb.html
        │   │   │       │   ├── fixture_loader_rb.html
        │   │   │       │   ├── partials_support_rb.html
        │   │   │       │   ├── paths_rb.html
        │   │   │       │   ├── renderer_rb.html
        │   │   │       │   ├── rselenese_rb.html
        │   │   │       │   ├── selenese_rb.html
        │   │   │       │   ├── suite_renderer_rb.html
        │   │   │       │   ├── test_builder_accessors_rb.html
        │   │   │       │   ├── test_builder_actions_rb.html
        │   │   │       │   └── test_builder_rb.html
        │   │   │       ├── selenium_on_rails_config_rb.html
        │   │   │       └── selenium_on_rails_rb.html
        │   │   ├── fr_class_index.html
        │   │   ├── fr_file_index.html
        │   │   ├── fr_method_index.html
        │   │   ├── index.html
        │   │   └── rdoc-style.css
        │   ├── generators/
        │   │   └── selenium/
        │   │       ├── USAGE
        │   │       ├── selenium_generator.rb
        │   │       └── templates/
        │   │           ├── rhtml.html.erb
        │   │           ├── rselenese.html.erb
        │   │           └── selenese.html.erb
        │   ├── init.rb
        │   ├── lib/
        │   │   ├── controllers/
        │   │   │   ├── selenium_controller.rb
        │   │   │   └── switch_environment_controller.rb
        │   │   ├── selenium_helper.rb
        │   │   ├── selenium_on_rails/
        │   │   │   ├── acceptance_test_runner.rb
        │   │   │   ├── fixture_loader.rb
        │   │   │   ├── partials_support.rb
        │   │   │   ├── paths.rb
        │   │   │   ├── renderer.rb
        │   │   │   ├── rselenese.rb
        │   │   │   ├── selenese.rb
        │   │   │   ├── suite_renderer.rb
        │   │   │   ├── tasks/
        │   │   │   │   └── test_acceptance.rake
        │   │   │   ├── test_builder.rb
        │   │   │   ├── test_builder_accessors.rb
        │   │   │   ├── test_builder_actions.rb
        │   │   │   ├── test_builder_user_accessors.rb.example
        │   │   │   └── test_builder_user_actions.rb.example
        │   │   ├── selenium_on_rails.rb
        │   │   ├── selenium_on_rails_config.rb
        │   │   └── views/
        │   │       ├── layouts/
        │   │       │   └── layout.html.erb
        │   │       ├── record.html.erb
        │   │       ├── selenium_helper.rb
        │   │       ├── setup.html.erb
        │   │       └── test_suite.html.erb
        │   ├── log/
        │   │   └── default.yml
        │   ├── routes.rb
        │   ├── selenium-core/
        │   │   ├── Blank.html
        │   │   ├── InjectedRemoteRunner.html
        │   │   ├── RemoteRunner.html
        │   │   ├── SeleniumLog.html
        │   │   ├── TestPrompt.html
        │   │   ├── TestRunner-splash.html
        │   │   ├── TestRunner.hta
        │   │   ├── TestRunner.html
        │   │   ├── domviewer/
        │   │   │   ├── domviewer.css
        │   │   │   ├── domviewer.html
        │   │   │   └── selenium-domviewer.js
        │   │   ├── iedoc-core.xml
        │   │   ├── iedoc.xml
        │   │   ├── lib/
        │   │   │   ├── cssQuery/
        │   │   │   │   ├── cssQuery-p.js
        │   │   │   │   └── src/
        │   │   │   │       ├── cssQuery-level2.js
        │   │   │   │       ├── cssQuery-level3.js
        │   │   │   │       ├── cssQuery-standard.js
        │   │   │   │       └── cssQuery.js
        │   │   │   ├── prototype.js
        │   │   │   ├── scriptaculous/
        │   │   │   │   ├── builder.js
        │   │   │   │   ├── controls.js
        │   │   │   │   ├── dragdrop.js
        │   │   │   │   ├── effects.js
        │   │   │   │   ├── scriptaculous.js
        │   │   │   │   ├── slider.js
        │   │   │   │   └── unittest.js
        │   │   │   └── snapsie.js
        │   │   ├── scripts/
        │   │   │   ├── find_matching_child.js
        │   │   │   ├── htmlutils.js
        │   │   │   ├── injection.html
        │   │   │   ├── selenium-api.js
        │   │   │   ├── selenium-browserbot.js
        │   │   │   ├── selenium-browserdetect.js
        │   │   │   ├── selenium-commandhandlers.js
        │   │   │   ├── selenium-executionloop.js
        │   │   │   ├── selenium-logging.js
        │   │   │   ├── selenium-remoterunner.js
        │   │   │   ├── selenium-testrunner.js
        │   │   │   ├── selenium-version.js
        │   │   │   ├── ui-doc.html
        │   │   │   ├── ui-element.js
        │   │   │   ├── ui-map-sample.js
        │   │   │   ├── user-extensions.js
        │   │   │   ├── user-extensions.js.sample
        │   │   │   └── xmlextras.js
        │   │   ├── selenium-test.css
        │   │   ├── selenium.css
        │   │   └── xpath/
        │   │       ├── dom.js
        │   │       ├── javascript-xpath-0.1.11.js
        │   │       ├── util.js
        │   │       ├── xmltoken.js
        │   │       └── xpath.js
        │   ├── selenium.yml
        │   ├── test/
        │   │   ├── fixtures/
        │   │   │   ├── config.yml
        │   │   │   └── selenium.yml
        │   │   ├── paths_test.rb
        │   │   ├── renderer_test.rb
        │   │   ├── rselenese_test.rb
        │   │   ├── selenese_test.rb
        │   │   ├── selenium_controller_test.rb
        │   │   ├── selenium_on_rails_config_test.rb
        │   │   ├── selenium_support_test.rb
        │   │   ├── setup_test.rb
        │   │   ├── suite_renderer_test.rb
        │   │   ├── switch_environment_controller_test.rb
        │   │   ├── test_builder_functions_authortest.rb
        │   │   └── test_helper.rb
        │   └── test_data/
        │       ├── _partial.rsel
        │       ├── backup.html~
        │       ├── own_layout.html
        │       ├── partials/
        │       │   ├── _html.html
        │       │   ├── _nesting.rsel
        │       │   ├── _rhtml.html.erb
        │       │   ├── _rsel.rsel
        │       │   ├── _sel.sel
        │       │   └── all_partials.rsel
        │       ├── rhtml.html.erb
        │       ├── rselenese.rsel
        │       ├── selenese.sel
        │       ├── suite_one/
        │       │   ├── subsuite/
        │       │   │   └── suite_one_subsuite_testcase.sel
        │       │   ├── suite_one_testcase1.sel
        │       │   └── suite_one_testcase2.sel
        │       └── suite_two/
        │           └── suite_two_testcase.sel
        ├── simple-private-messages/
        │   ├── MIT-LICENSE
        │   ├── README.rdoc
        │   ├── Rakefile
        │   ├── generators/
        │   │   ├── private_message_model/
        │   │   │   ├── USAGE
        │   │   │   ├── private_message_model_generator.rb
        │   │   │   └── templates/
        │   │   │       ├── migration.rb
        │   │   │       └── model.rb
        │   │   └── private_message_scaffold/
        │   │       ├── USAGE
        │   │       ├── private_message_scaffold_generator.rb
        │   │       └── templates/
        │   │           ├── controller.rb
        │   │           ├── view_index.html.erb
        │   │           ├── view_index_inbox.html.erb
        │   │           ├── view_index_sent.html.erb
        │   │           ├── view_new.html.erb
        │   │           └── view_show.html.erb
        │   ├── init.rb
        │   ├── lib/
        │   │   └── professionalnerd/
        │   │       └── simple_private_messages/
        │   │           ├── has_private_messages_extensions.rb
        │   │           ├── private_message_extensions.rb
        │   │           └── tasks/
        │   │               └── simple_private_messages_tasks.rake
        │   └── test/
        │       ├── database.yml
        │       ├── fixtures/
        │       │   ├── message.rb
        │       │   └── user.rb
        │       ├── schema.rb
        │       ├── test_helper.rb
        │       └── unit/
        │           ├── message_model.rb
        │           └── user_model.rb
        ├── textile-editor-helper/
        │   ├── CHANGELOG
        │   ├── MIT-LICENSE
        │   ├── README
        │   ├── Rakefile
        │   ├── assets/
        │   │   ├── javascripts/
        │   │   │   ├── textile-editor-config.js
        │   │   │   └── textile-editor.js
        │   │   └── stylesheets/
        │   │       └── textile-editor.css
        │   ├── init.rb
        │   ├── install.rb
        │   ├── lib/
        │   │   ├── tasks/
        │   │   │   └── textile_editor_helper_tasks.rake
        │   │   └── textile_editor_helper.rb
        │   └── test/
        │       ├── abstract_unit.rb
        │       └── textile_editor_helper_test.rb
        └── yaml_db/
            ├── README
            ├── Rakefile
            ├── about.yml
            ├── init.rb
            ├── lib/
            │   ├── tasks/
            │   │   └── yaml_db_tasks.rake
            │   └── yaml_db.rb
            └── spec/
                ├── base.rb
                ├── yaml_dump_spec.rb
                ├── yaml_load_spec.rb
                └── yaml_utils_spec.rb
Download .txt
Showing preview only (453K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (6068 symbols across 633 files)

FILE: app/controllers/account_controller.rb
  class AccountController (line 2) | class AccountController < ApplicationController
    method login (line 12) | def login
    method rpx_token (line 25) | def rpx_token
    method logout (line 32) | def logout
    method lost_password (line 40) | def lost_password
    method register (line 46) | def register
    method activate (line 60) | def activate
    method cancel (line 73) | def cancel
    method password_authentication (line 80) | def password_authentication(invitation_token=nil)
    method open_id_authenticate (line 94) | def open_id_authenticate(openid_url)
    method successful_authentication (line 135) | def successful_authentication(user, invitation_token = nil, msg=nil)
    method onthefly_creation_failed (line 159) | def onthefly_creation_failed(user, auth_source_options = { })
    method invalid_credentials (line 165) | def invalid_credentials
    method inactive_user (line 171) | def inactive_user
    method register_by_email_activation (line 179) | def register_by_email_activation(user, invitation_token = nil)
    method register_automatically (line 208) | def register_automatically(user, &block)
    method register_manually_by_administrator (line 226) | def register_manually_by_administrator(user, &block)
    method account_pending (line 236) | def account_pending
    method random_email (line 241) | def random_email
    method data (line 245) | def data
    method invitation (line 251) | def invitation
    method invitation_mail (line 260) | def invitation_mail
    method update_invitation (line 264) | def update_invitation
    method find_user_by_identifier (line 268) | def find_user_by_identifier
    method find_user_by_mail (line 275) | def find_user_by_mail
    method create_new_user (line 282) | def create_new_user
    method reactivate_user (line 292) | def reactivate_user
    method save_user_or_raise (line 299) | def save_user_or_raise
    method name (line 307) | def name
    method mail (line 311) | def mail
    method available_login (line 317) | def available_login
    method logout_user (line 323) | def logout_user
    method set_invitation_token (line 327) | def set_invitation_token
    method open_id_authenticate? (line 332) | def open_id_authenticate?
    method update_password (line 336) | def update_password
    method valid_user (line 349) | def valid_user
    method valid_token (line 363) | def valid_token
    method token (line 372) | def token
    method find_token (line 377) | def find_token(action)
    method send_mail (line 383) | def send_mail(token)
    method validate_token (line 389) | def validate_token
    method create_token (line 398) | def create_token
    method pick_plan (line 405) | def pick_plan
    method register_user (line 415) | def register_user
    method invite_to_login (line 432) | def invite_to_login
    method initialize_user_with_plan (line 442) | def initialize_user_with_plan
    method register_user_with_auth_source (line 453) | def register_user_with_auth_source
    method logout_and_invite (line 469) | def logout_and_invite
    method check_registration (line 477) | def check_registration
    method can_activate? (line 481) | def can_activate?
    method valid_register_token? (line 485) | def valid_register_token?
    method registered_user (line 490) | def registered_user

FILE: app/controllers/activity_stream_preferences_controller.rb
  class ActivityStreamPreferencesController (line 7) | class ActivityStreamPreferencesController < ApplicationController

FILE: app/controllers/activity_stream_preferences_module.rb
  type ActivityStreamPreferencesModule (line 11) | module ActivityStreamPreferencesModule
    function index (line 13) | def index
    function create (line 38) | def create
    function get_user_id (line 88) | def get_user_id
    function build_activities_hash (line 96) | def build_activities_hash

FILE: app/controllers/activity_streams_controller.rb
  class ActivityStreamsController (line 7) | class ActivityStreamsController < ApplicationController
    method index (line 13) | def index

FILE: app/controllers/activity_streams_module.rb
  type ActivityStreamsModule (line 9) | module ActivityStreamsModule
    function index (line 11) | def index
    function show (line 20) | def show
    function new (line 29) | def new
    function edit (line 38) | def edit
    function create (line 42) | def create
    function update (line 57) | def update
    function destroy (line 72) | def destroy

FILE: app/controllers/admin_controller.rb
  class AdminController (line 4) | class AdminController < ApplicationController
    method index (line 13) | def index
    method projects (line 17) | def projects
    method plugins (line 32) | def plugins
    method default_configuration (line 38) | def default_configuration
    method test_email (line 50) | def test_email
    method user_data_dump (line 64) | def user_data_dump
    method info (line 69) | def info

FILE: app/controllers/application_controller.rb
  class ApplicationController (line 8) | class ApplicationController < ActionController::Base
    method delete_broken_cookies (line 24) | def delete_broken_cookies
    method set_user_ip (line 42) | def set_user_ip
    method user_setup (line 46) | def user_setup
    method redirect_with_flash (line 53) | def redirect_with_flash(flash_type,msg,*params)
    method current_user (line 58) | def current_user
    method find_current_user (line 64) | def find_current_user
    method logged_user= (line 90) | def logged_user=(user)
    method check_if_login_required (line 104) | def check_if_login_required
    method set_localization (line 110) | def set_localization
    method data_admin_logged_in? (line 119) | def data_admin_logged_in?
    method require_login (line 124) | def require_login
    method require_admin (line 142) | def require_admin
    method deny_access (line 151) | def deny_access
    method authorize (line 156) | def authorize(ctrl = params[:controller], action = params[:action], gl...
    method authorize_global (line 163) | def authorize_global(ctrl = params[:controller], action = params[:acti...
    method check_project_privacy (line 169) | def check_project_privacy
    method redirect_back_or_default (line 183) | def redirect_back_or_default(default)
    method render_403 (line 201) | def render_403
    method render_404 (line 207) | def render_404
    method render_error (line 212) | def render_error(msg)
    method render_message (line 217) | def render_message(msg)
    method invalid_authenticity_token (line 222) | def invalid_authenticity_token
    method render_feed (line 226) | def render_feed(items, options={})
    method accept_key_auth (line 234) | def self.accept_key_auth(*actions)
    method accept_key_auth_actions (line 239) | def accept_key_auth_actions
    method attach_files_for_new_issue (line 243) | def attach_files_for_new_issue(issue,attachment_ids)
    method attach_files (line 250) | def attach_files(obj, attachments)
    method attach_temp_files (line 270) | def attach_temp_files(obj, attachments)
    method cleanup_newline (line 293) | def cleanup_newline(text)
    method simple_format_without_paragraph (line 299) | def simple_format_without_paragraph(text)
    method per_page_option (line 308) | def per_page_option
    method parse_qvalues (line 323) | def parse_qvalues(value)
    method filename_for_content_disposition (line 343) | def filename_for_content_disposition(name)
    method bp (line 348) | def bp

FILE: app/controllers/attachments_controller.rb
  class AttachmentsController (line 5) | class AttachmentsController < ApplicationController
    method create (line 18) | def create
    method redirect_to_s3 (line 34) | def redirect_to_s3
    method show (line 42) | def show
    method download (line 54) | def download
    method destroy (line 65) | def destroy
    method find_project (line 75) | def find_project
    method file_readable (line 85) | def file_readable
    method read_authorize (line 89) | def read_authorize
    method delete_authorize (line 93) | def delete_authorize

FILE: app/controllers/auth_sources_controller.rb
  class AuthSourcesController (line 4) | class AuthSourcesController < ApplicationController
    method index (line 10) | def index
    method list (line 19) | def list
    method new (line 24) | def new
    method create (line 28) | def create
    method edit (line 38) | def edit
    method update (line 42) | def update
    method test_connection (line 52) | def test_connection
    method destroy (line 63) | def destroy

FILE: app/controllers/boards_controller.rb
  class BoardsController (line 4) | class BoardsController < ApplicationController
    method index (line 16) | def index
    method show (line 25) | def show
    method new (line 47) | def new
    method edit (line 56) | def edit
    method destroy (line 62) | def destroy
    method find_project (line 69) | def find_project

FILE: app/controllers/comments_controller.rb
  class CommentsController (line 1) | class CommentsController < ApplicationController
    method index (line 13) | def index
    method create (line 20) | def create
    method find_issue (line 30) | def find_issue
    method find_project (line 34) | def find_project

FILE: app/controllers/credit_distributions_controller.rb
  class CreditDistributionsController (line 1) | class CreditDistributionsController < ApplicationController
    method index (line 6) | def index
    method show (line 15) | def show
    method new (line 24) | def new
    method edit (line 33) | def edit
    method create (line 37) | def create
    method update (line 52) | def update
    method destroy (line 67) | def destroy

FILE: app/controllers/credit_transfers_controller.rb
  class CreditTransfersController (line 5) | class CreditTransfersController < ApplicationController
    method index (line 9) | def index
    method create (line 27) | def create
    method eligible_recipients (line 45) | def eligible_recipients

FILE: app/controllers/credits_controller.rb
  class CreditsController (line 1) | class CreditsController < ApplicationController
    method index (line 9) | def index
    method show (line 23) | def show
    method new (line 32) | def new
    method edit (line 41) | def edit
    method create (line 45) | def create
    method update (line 60) | def update
    method disable (line 75) | def disable
    method enable (line 93) | def enable
    method update_credit_partials (line 111) | def update_credit_partials
    method destroy (line 127) | def destroy
    method find_credit (line 139) | def find_credit
    method self_authorize (line 145) | def self_authorize

FILE: app/controllers/documents_controller.rb
  class DocumentsController (line 4) | class DocumentsController < ApplicationController
    method index (line 18) | def index
    method show (line 35) | def show
    method new (line 39) | def new
    method edit (line 48) | def edit
    method destroy (line 55) | def destroy
    method add_attachment (line 60) | def add_attachment
    method find_project (line 68) | def find_project
    method find_document (line 75) | def find_document

FILE: app/controllers/email_updates_controller.rb
  class EmailUpdatesController (line 1) | class EmailUpdatesController < ApplicationController
    method new (line 5) | def new
    method create (line 14) | def create
    method activate (line 29) | def activate

FILE: app/controllers/enterprises_controller.rb
  class EnterprisesController (line 1) | class EnterprisesController < ApplicationController
    method index (line 4) | def index
    method show (line 13) | def show
    method new (line 22) | def new
    method edit (line 31) | def edit
    method create (line 35) | def create
    method update (line 50) | def update
    method destroy (line 65) | def destroy

FILE: app/controllers/enumerations_controller.rb
  class EnumerationsController (line 4) | class EnumerationsController < ApplicationController
    method index (line 10) | def index
    method list (line 19) | def list
    method new (line 22) | def new
    method create (line 30) | def create
    method edit (line 41) | def edit
    method update (line 45) | def update
    method destroy (line 56) | def destroy

FILE: app/controllers/help_controller.rb
  class HelpController (line 1) | class HelpController < ApplicationController
    method show (line 2) | def show

FILE: app/controllers/help_sections_controller.rb
  class HelpSectionsController (line 1) | class HelpSectionsController < ApplicationController
    method show (line 5) | def show
    method dont_show (line 17) | def dont_show
    method new (line 29) | def new
    method edit (line 38) | def edit
    method create (line 42) | def create
    method update (line 57) | def update
    method destroy (line 72) | def destroy

FILE: app/controllers/home_controller.rb
  class HomeController (line 1) | class HomeController < ApplicationController
    method index (line 4) | def index
    method show (line 12) | def show
    method robots (line 16) | def robots

FILE: app/controllers/hourly_types_controller.rb
  class HourlyTypesController (line 1) | class HourlyTypesController < ApplicationController
    method new (line 5) | def new
    method edit (line 14) | def edit
    method destroy (line 20) | def destroy
    method find_project (line 27) | def find_project

FILE: app/controllers/invitations_controller.rb
  class InvitationsController (line 1) | class InvitationsController < ApplicationController
    method index (line 6) | def index
    method show (line 19) | def show
    method new (line 28) | def new
    method edit (line 42) | def edit
    method create (line 46) | def create
    method accept (line 91) | def accept
    method resend (line 122) | def resend
    method destroy (line 149) | def destroy
    method find_project (line 166) | def find_project
    method valid_email? (line 173) | def valid_email?(email)

FILE: app/controllers/issue_invitations_controller.rb
  class IssueInvitationsController (line 4) | class IssueInvitationsController < ApplicationController
    method new (line 5) | def new
    method create (line 14) | def create

FILE: app/controllers/issue_relations_controller.rb
  class IssueRelationsController (line 6) | class IssueRelationsController < ApplicationController
    method new (line 10) | def new
    method destroy (line 31) | def destroy
    method find_project (line 45) | def find_project

FILE: app/controllers/issue_statuses_controller.rb
  class IssueStatusesController (line 4) | class IssueStatusesController < ApplicationController
    method index (line 13) | def index
    method list (line 18) | def list
    method new (line 23) | def new
    method create (line 27) | def create
    method edit (line 37) | def edit
    method update (line 41) | def update
    method destroy (line 51) | def destroy

FILE: app/controllers/issue_votes_controller.rb
  class IssueVotesController (line 1) | class IssueVotesController < ApplicationController
    method index (line 4) | def index
    method show (line 13) | def show
    method new (line 22) | def new
    method edit (line 31) | def edit
    method create (line 35) | def create
    method update (line 50) | def update
    method destroy (line 65) | def destroy

FILE: app/controllers/issues_controller.rb
  class IssuesController (line 4) | class IssuesController < ApplicationController
    method index (line 62) | def index
    method show (line 96) | def show
    method new (line 111) | def new
    method edit (line 193) | def edit
    method start (line 228) | def start
    method finish (line 241) | def finish
    method release (line 250) | def release
    method cancel (line 270) | def cancel
    method restart (line 275) | def restart
    method change_status (line 280) | def change_status
    method prioritize (line 299) | def prioritize
    method update_tags (line 310) | def update_tags
    method estimate (line 320) | def estimate
    method agree (line 344) | def agree
    method accept (line 373) | def accept
    method join (line 402) | def join
    method add_team_member (line 421) | def add_team_member
    method remove_team_member (line 444) | def remove_team_member
    method leave (line 465) | def leave
    method reply (line 485) | def reply
    method bulk_edit (line 505) | def bulk_edit
    method move (line 538) | def move
    method destroy (line 596) | def destroy
    method gantt (line 601) | def gantt
    method calendar (line 629) | def calendar
    method context_menu (line 653) | def context_menu
    method update_form (line 680) | def update_form
    method preview (line 693) | def preview
    method datadump (line 700) | def datadump
    method find_issue (line 707) | def find_issue
    method find_issues (line 717) | def find_issues
    method find_project (line 732) | def find_project
    method find_optional_project (line 739) | def find_optional_project
    method retrieve_query (line 748) | def retrieve_query
    method query_statement_invalid (line 782) | def query_statement_invalid(exception)

FILE: app/controllers/journals_controller.rb
  class JournalsController (line 5) | class JournalsController < ApplicationController
    method edit (line 9) | def edit
    method edit_from_dashboard (line 25) | def edit_from_dashboard
    method update_activity_stream (line 36) | def update_activity_stream(notes)
    method find_journal (line 44) | def find_journal

FILE: app/controllers/mail_handler_controller.rb
  class MailHandlerController (line 5) | class MailHandlerController < ActionController::Base
    method index (line 14) | def index
    method sendgrid (line 25) | def sendgrid
    method check_credential (line 49) | def check_credential

FILE: app/controllers/mails_controller.rb
  class MailsController (line 1) | class MailsController < ApplicationController
    method index (line 5) | def index
    method show (line 13) | def show
    method new (line 17) | def new
    method create (line 30) | def create
    method delete_selected (line 43) | def delete_selected
    method set_user (line 58) | def set_user

FILE: app/controllers/members_controller.rb
  class MembersController (line 4) | class MembersController < ApplicationController
    method new (line 10) | def new
    method edit (line 34) | def edit
    method destroy (line 48) | def destroy
    method autocomplete_for_member (line 58) | def autocomplete_for_member
    method find_project (line 65) | def find_project
    method find_member (line 71) | def find_member

FILE: app/controllers/messages_controller.rb
  class MessagesController (line 4) | class MessagesController < ApplicationController
    method show (line 29) | def show
    method new (line 37) | def new
    method reply (line 52) | def reply
    method edit (line 68) | def edit
    method destroy (line 83) | def destroy
    method quote (line 91) | def quote
    method preview (line 107) | def preview
    method find_message (line 116) | def find_message
    method guess_board (line 131) | def guess_board
    method find_board (line 140) | def find_board

FILE: app/controllers/motion_votes_controller.rb
  class MotionVotesController (line 1) | class MotionVotesController < ApplicationController
    method index (line 4) | def index
    method show (line 13) | def show
    method new (line 22) | def new
    method edit (line 31) | def edit
    method create (line 35) | def create
    method update (line 58) | def update
    method destroy (line 73) | def destroy

FILE: app/controllers/motions_controller.rb
  class MotionsController (line 1) | class MotionsController < ApplicationController
    method index (line 11) | def index
    method show (line 19) | def show
    method new (line 40) | def new
    method eligible_users (line 51) | def eligible_users
    method edit (line 72) | def edit
    method create (line 75) | def create
    method update (line 98) | def update
    method destroy (line 111) | def destroy
    method reply (line 121) | def reply
    method find_project (line 137) | def find_project
    method find_motion (line 144) | def find_motion
    method check_visibility_permission (line 152) | def check_visibility_permission

FILE: app/controllers/my_controller.rb
  class MyController (line 4) | class MyController < ApplicationController
    method index (line 26) | def index
    method page (line 32) | def page
    method projects (line 37) | def projects
    method issues (line 45) | def issues
    method account (line 71) | def account
    method upgrade (line 113) | def upgrade
    method password (line 216) | def password
    method reset_rss_key (line 237) | def reset_rss_key
    method reset_api_key (line 250) | def reset_api_key
    method page_layout (line 263) | def page_layout
    method add_block (line 273) | def add_block
    method remove_block (line 289) | def remove_block
    method order_blocks (line 303) | def order_blocks

FILE: app/controllers/news_controller.rb
  class NewsController (line 4) | class NewsController < ApplicationController
    method index (line 22) | def index
    method show (line 35) | def show
    method new (line 40) | def new
    method edit (line 51) | def edit
    method add_comment (line 58) | def add_comment
    method destroy_comment (line 70) | def destroy_comment
    method destroy (line 75) | def destroy
    method preview (line 80) | def preview
    method find_news (line 87) | def find_news
    method find_project (line 95) | def find_project
    method find_optional_project (line 102) | def find_optional_project

FILE: app/controllers/notifications_controller.rb
  class NotificationsController (line 1) | class NotificationsController < ApplicationController
    method index (line 3) | def index
    method show (line 14) | def show
    method new (line 23) | def new
    method edit (line 32) | def edit
    method create (line 36) | def create
    method update (line 51) | def update
    method hide (line 65) | def hide
    method destroy (line 80) | def destroy

FILE: app/controllers/projects_controller.rb
  class ProjectsController (line 4) | class ProjectsController < ApplicationController
    method index (line 42) | def index
    method index_latest (line 47) | def index_latest
    method index_active (line 64) | def index_active
    method map (line 81) | def map
    method add (line 86) | def add
    method copy (line 133) | def copy
    method reset_invitation_token (line 159) | def reset_invitation_token
    method join (line 175) | def join
    method overview (line 196) | def overview
    method hourly_types (line 221) | def hourly_types
    method community_members (line 228) | def community_members
    method community_members_array (line 235) | def community_members_array
    method issue_search (line 242) | def issue_search
    method all_tags (line 247) | def all_tags
    method dashboard (line 252) | def dashboard
    method dashdata (line 259) | def dashdata
    method new_dashdata (line 288) | def new_dashdata
    method update_scale (line 342) | def update_scale
    method mypris (line 351) | def mypris
    method settings (line 355) | def settings
    method edit (line 363) | def edit
    method modules (line 388) | def modules
    method archive (line 395) | def archive
    method unarchive (line 405) | def unarchive
    method destroy (line 433) | def destroy
    method move (line 449) | def move
    method add_file (line 469) | def add_file
    method list_files (line 481) | def list_files
    method team (line 492) | def team
    method credits (line 497) | def credits
    method activity (line 509) | def activity
    method find_project (line 517) | def find_project
    method find_optional_project (line 529) | def find_optional_project
    method retrieve_selected_tracker_ids (line 537) | def retrieve_selected_tracker_ids(selectable_trackers, default_tracker...
    method validate_parent_id (line 547) | def validate_parent_id

FILE: app/controllers/queries_controller.rb
  class QueriesController (line 4) | class QueriesController < ApplicationController
    method new (line 9) | def new
    method edit (line 29) | def edit
    method destroy (line 47) | def destroy
    method find_query (line 54) | def find_query
    method find_optional_project (line 62) | def find_optional_project

FILE: app/controllers/quotes_controller.rb
  class QuotesController (line 1) | class QuotesController < ApplicationController
    method index (line 4) | def index
    method show (line 13) | def show
    method new (line 22) | def new
    method edit (line 31) | def edit
    method create (line 35) | def create
    method update (line 51) | def update
    method destroy (line 66) | def destroy

FILE: app/controllers/recurly_notifications_controller.rb
  class RecurlyNotificationsController (line 4) | class RecurlyNotificationsController < ApplicationController
    method listen (line 5) | def listen
    method update_subscription (line 24) | def update_subscription(params,active_subscription)

FILE: app/controllers/reports_controller.rb
  class ReportsController (line 4) | class ReportsController < ApplicationController
    method issue_report (line 8) | def issue_report
    method find_project (line 54) | def find_project
    method issues_by_tracker (line 60) | def issues_by_tracker
    method issues_by_assigned_to (line 75) | def issues_by_assigned_to
    method issues_by_author (line 90) | def issues_by_author
    method issues_by_subproject (line 105) | def issues_by_subproject

FILE: app/controllers/reputations_controller.rb
  class ReputationsController (line 1) | class ReputationsController < ApplicationController
    method index (line 4) | def index
    method show (line 13) | def show
    method new (line 22) | def new
    method edit (line 31) | def edit
    method create (line 35) | def create
    method update (line 50) | def update
    method destroy (line 65) | def destroy

FILE: app/controllers/retro_ratings_controller.rb
  class RetroRatingsController (line 1) | class RetroRatingsController < ApplicationController
    method index (line 4) | def index
    method show (line 13) | def show
    method new (line 22) | def new
    method edit (line 31) | def edit
    method create (line 35) | def create
    method update (line 59) | def update
    method destroy (line 74) | def destroy

FILE: app/controllers/retros_controller.rb
  class RetrosController (line 1) | class RetrosController < ApplicationController
    method index (line 7) | def index
    method index_json (line 16) | def index_json
    method dashdata (line 20) | def dashdata
    method show (line 24) | def show
    method new (line 220) | def new
    method edit (line 229) | def edit
    method create (line 233) | def create
    method update (line 248) | def update
    method destroy (line 263) | def destroy
    method find_retro (line 275) | def find_retro
    method find_project (line 282) | def find_project

FILE: app/controllers/roles_controller.rb
  class RolesController (line 4) | class RolesController < ApplicationController
    method index (line 13) | def index
    method list (line 18) | def list
    method new (line 23) | def new
    method edit (line 38) | def edit
    method destroy (line 47) | def destroy
    method report (line 56) | def report

FILE: app/controllers/search_controller.rb
  class SearchController (line 4) | class SearchController < ApplicationController
    method index (line 11) | def index
    method find_optional_project (line 97) | def find_optional_project

FILE: app/controllers/settings_controller.rb
  class SettingsController (line 17) | class SettingsController < ApplicationController
    method index (line 22) | def index
    method edit (line 27) | def edit
    method plugin (line 48) | def plugin

FILE: app/controllers/shares_controller.rb
  class SharesController (line 1) | class SharesController < ApplicationController
    method index (line 4) | def index
    method show (line 14) | def show
    method new (line 23) | def new
    method edit (line 32) | def edit
    method create (line 36) | def create
    method update (line 51) | def update
    method destroy (line 66) | def destroy

FILE: app/controllers/todos_controller.rb
  class TodosController (line 1) | class TodosController < ApplicationController
    method index (line 7) | def index
    method show (line 16) | def show
    method new (line 25) | def new
    method edit (line 34) | def edit
    method create (line 38) | def create
    method update (line 55) | def update
    method destroy (line 71) | def destroy
    method find_issue (line 84) | def find_issue
    method find_project (line 88) | def find_project

FILE: app/controllers/trackers_controller.rb
  class TrackersController (line 4) | class TrackersController < ApplicationController
    method index (line 10) | def index
    method list (line 17) | def list
    method new (line 22) | def new
    method edit (line 37) | def edit
    method destroy (line 47) | def destroy

FILE: app/controllers/users_controller.rb
  class UsersController (line 4) | class UsersController < ApplicationController
    method index (line 12) | def index
    method show (line 36) | def show
    method add (line 57) | def add
    method edit (line 76) | def edit
    method edit_membership (line 102) | def edit_membership
    method destroy_membership (line 118) | def destroy_membership

FILE: app/controllers/votes_controller.rb
  class VotesController (line 3) | class VotesController < ApplicationController
    method index (line 13) | def index
    method show (line 20) | def show
    method new (line 29) | def new
    method edit (line 32) | def edit
    method create (line 35) | def create
    method update (line 65) | def update
    method destroy (line 68) | def destroy
    method find_votes_for_my_scope (line 80) | def find_votes_for_my_scope
    method must_own_vote (line 90) | def must_own_vote
    method ownership_violation (line 95) | def ownership_violation

FILE: app/controllers/watchers_controller.rb
  class WatchersController (line 4) | class WatchersController < ApplicationController
    method watch (line 14) | def watch
    method unwatch (line 22) | def unwatch
    method new (line 26) | def new
    method destroy (line 42) | def destroy
    method find_project (line 56) | def find_project
    method set_watcher (line 65) | def set_watcher(user, watching)

FILE: app/controllers/welcome_controller.rb
  class WelcomeController (line 4) | class WelcomeController < ApplicationController
    method index (line 10) | def index
    method robots (line 27) | def robots

FILE: app/controllers/wiki_controller.rb
  class WikiController (line 6) | class WikiController < ApplicationController
    method index (line 22) | def index
    method edit (line 53) | def edit
    method rename (line 92) | def rename
    method protect (line 103) | def protect
    method history (line 109) | def history
    method diff (line 122) | def diff
    method annotate (line 127) | def annotate
    method destroy (line 134) | def destroy
    method special (line 162) | def special
    method preview (line 187) | def preview
    method add_attachment (line 199) | def add_attachment
    method find_wiki (line 207) | def find_wiki
    method find_existing_page (line 218) | def find_existing_page
    method editable? (line 224) | def editable?(page = @page)
    method initial_page_content (line 229) | def initial_page_content(page)

FILE: app/controllers/wikis_controller.rb
  class WikisController (line 4) | class WikisController < ApplicationController
    method edit (line 10) | def edit
    method destroy (line 18) | def destroy
    method find_project (line 27) | def find_project

FILE: app/controllers/workflows_controller.rb
  class WorkflowsController (line 5) | class WorkflowsController < ApplicationController
    method index (line 11) | def index
    method edit (line 15) | def edit
    method copy (line 41) | def copy

FILE: app/helpers/admin_helper.rb
  type AdminHelper (line 4) | module AdminHelper
    function project_status_options_for_select (line 5) | def project_status_options_for_select(selected)
    function css_project_classes (line 10) | def css_project_classes(project)

FILE: app/helpers/application_helper.rb
  type ApplicationHelper (line 9) | module ApplicationHelper
    function help_section (line 17) | def help_section(name, popup=false)
    function authorize_for (line 37) | def authorize_for(controller, action)
    function link_to_if_authorized (line 43) | def link_to_if_authorized(name, options = {}, html_options = nil, *par...
    function link_to_if_anon (line 48) | def link_to_if_anon(name, options = {}, html_options = nil, *parameter...
    function link_to_remote_if_authorized (line 53) | def link_to_remote_if_authorized(name, options = {}, html_options = nil)
    function link_to_user (line 59) | def link_to_user(user, options={})
    function link_to_user_or_you (line 72) | def link_to_user_or_you(user, options={})
    function link_to_project (line 81) | def link_to_project(project, options={})
    function link_to_user_from_id (line 91) | def link_to_user_from_id(user_id, options={})
    function link_to_issue (line 103) | def link_to_issue(issue, options={})
    function link_to_issue_from_id (line 129) | def link_to_issue_from_id(issue_id, options={})
    function link_to_attachment (line 141) | def link_to_attachment(attachment, options={})
    function current_user (line 148) | def current_user
    function logged_in? (line 152) | def logged_in?
    function toggle_link (line 156) | def toggle_link(name, id, options={})
    function image_to_function (line 164) | def image_to_function(name, function, html_options = {})
    function prompt_to_remote (line 172) | def prompt_to_remote(name, text, param, url, html_options = {})
    function prompt_input_to_remote (line 185) | def prompt_input_to_remote(id, name, title, message, param, url, requi...
    function format_activity_title (line 190) | def format_activity_title(text)
    function format_activity_day (line 194) | def format_activity_day(date)
    function format_activity_description (line 198) | def format_activity_description(text)
    function make_expandable (line 202) | def make_expandable(newhtml,length=400)
    function due_date_distance_in_words (line 220) | def due_date_distance_in_words(date)
    function render_page_hierarchy (line 226) | def render_page_hierarchy(pages, node=nil)
    function render_flash_messages (line 243) | def render_flash_messages
    function render_global_messages (line 251) | def render_global_messages
    function render_tabs (line 262) | def render_tabs(tabs)
    function render_project_jump_box (line 271) | def render_project_jump_box
    function sub_workstream_project_box (line 298) | def sub_workstream_project_box(project)
    function project_tree_options_for_select (line 323) | def project_tree_options_for_select(projects, options = {})
    function project_tree (line 335) | def project_tree(projects, &block)
    function project_tree_sorted (line 346) | def project_tree_sorted(projects, &block)
    function sort2d (line 372) | def sort2d(ar)
    function traverse_sorted (line 380) | def traverse_sorted(ar, &block)
    function show_detail (line 388) | def show_detail(detail, no_html=false)
    function format_time_ago (line 448) | def format_time_ago(updated_at)
    function project_nested_ul (line 453) | def project_nested_ul(projects, &block)
    function users_check_box_tags (line 477) | def users_check_box_tags(name, users)
    function truncate_single_line (line 486) | def truncate_single_line(string, *args)
    function html_hours (line 490) | def html_hours(text)
    function authoring (line 494) | def authoring(created, author, options={})
    function time_tag (line 499) | def time_tag(time)
    function since_tag (line 508) | def since_tag(time)
    function syntax_highlight (line 513) | def syntax_highlight(name, content)
    function to_path_param (line 518) | def to_path_param(path)
    function pagination_links_full (line 522) | def pagination_links_full(paginator, count=nil, options={})
    function per_page_links (line 551) | def per_page_links(selected=nil)
    function reorder_links (line 564) | def reorder_links(name, url)
    function breadcrumb (line 571) | def breadcrumb(*args)
    function other_formats_links (line 576) | def other_formats_links(&block)
    function page_header_title (line 582) | def page_header_title
    function page_header_name (line 628) | def page_header_name
    function html_title (line 645) | def html_title(*args)
    function accesskey (line 658) | def accesskey(s)
    function textilizable (line 667) | def textilizable(*args)
    function simple_format_without_paragraph (line 840) | def simple_format_without_paragraph(text)
    function lang_options_for_select (line 847) | def lang_options_for_select(blank=true)
    function month_hash (line 852) | def month_hash
    function privacy (line 869) | def privacy(project)
    function volunteering (line 873) | def volunteering(project)
    function year_hash (line 877) | def year_hash
    function unit_for (line 881) | def unit_for(project)
    function country_hash (line 891) | def country_hash
    function label_tag_for (line 1141) | def label_tag_for(name, option_tags = nil, options = {})
    function labelled_tabular_form_for (line 1146) | def labelled_tabular_form_for(name, object, options, &proc)
    function back_url_hidden_field_tag (line 1152) | def back_url_hidden_field_tag
    function check_all_links (line 1158) | def check_all_links(form_name)
    function progress_bar (line 1164) | def progress_bar(pcts, options={})
    function context_menu_link (line 1180) | def context_menu_link(name, url, options={})
    function help_link (line 1196) | def help_link(name, options={})
    function help_bubble (line 1201) | def help_bubble(name, options={})
    function calendar_for (line 1218) | def calendar_for(field_id)
    function include_calendar_headers_tags (line 1224) | def include_calendar_headers_tags
    function content_for (line 1246) | def content_for(name, content = nil, &block)
    function has_content? (line 1252) | def has_content?(name)
    function avatar (line 1258) | def avatar(user, options = { })
    function render_journal_details (line 1269) | def render_journal_details(journal)
    function link_to_activity (line 1290) | def link_to_activity(as)
    function name_for_activity_stream (line 1294) | def name_for_activity_stream(as)
    function class_for_activity_stream (line 1298) | def class_for_activity_stream(as)
    function url_for_activity_stream (line 1302) | def url_for_activity_stream(as)
    function title_for_activity_stream (line 1317) | def title_for_activity_stream(as)
    function action_times (line 1330) | def action_times(count)
    function avatar_from_id (line 1339) | def avatar_from_id(user_id, options = { })
    function button (line 1343) | def button(text, cssclass)
    function tally_table (line 1347) | def tally_table(motion)
    function tame_bias (line 1364) | def tame_bias(number)
    function tame_scale (line 1373) | def tame_scale(number)
    function credit_activation_link (line 1383) | def credit_activation_link(credit, project_id, include_sub_workstreams)
    function login_protocol (line 1395) | def login_protocol
    function wiki_helper (line 1405) | def wiki_helper
    function link_to_remote_content_update (line 1411) | def link_to_remote_content_update(text, url_params)

FILE: app/helpers/attachments_helper.rb
  type AttachmentsHelper (line 4) | module AttachmentsHelper
    function link_to_attachments (line 8) | def link_to_attachments(container, options = {})
    function link_to_attachments_table (line 17) | def link_to_attachments_table(container, options = {})
    function to_utf8 (line 26) | def to_utf8(str)

FILE: app/helpers/groups_helper.rb
  type GroupsHelper (line 4) | module GroupsHelper
    function options_for_membership_project_select (line 6) | def options_for_membership_project_select(user, projects)
    function group_settings_tabs (line 14) | def group_settings_tabs

FILE: app/helpers/issue_relations_helper.rb
  type IssueRelationsHelper (line 4) | module IssueRelationsHelper
    function collection_for_relation_type_select (line 5) | def collection_for_relation_type_select

FILE: app/helpers/issues_helper.rb
  type IssuesHelper (line 4) | module IssuesHelper
    function render_issue_tooltip (line 7) | def render_issue_tooltip(issue)
    function sidebar_queries (line 18) | def sidebar_queries
    function tags (line 32) | def tags(issue, editable)
    function issues_to_csv (line 43) | def issues_to_csv(issues, project = nil)
    function collection_for_project_members_select (line 86) | def collection_for_project_members_select

FILE: app/helpers/journals_helper.rb
  type JournalsHelper (line 5) | module JournalsHelper
    function render_notes (line 6) | def render_notes(journal, editable, options={})
    function render_votes (line 25) | def render_votes(journal, options={})
    function link_to_in_place_notes_editor (line 51) | def link_to_in_place_notes_editor(text, field_id, url, options={})

FILE: app/helpers/messages_helper.rb
  type MessagesHelper (line 4) | module MessagesHelper
    function link_to_message (line 6) | def link_to_message(message)

FILE: app/helpers/motions_helper.rb
  type MotionsHelper (line 1) | module MotionsHelper
    function render_title_date (line 2) | def render_title_date

FILE: app/helpers/my_helper.rb
  type MyHelper (line 4) | module MyHelper
    function describe (line 5) | def describe(amount)
    function my_issues_tabs (line 9) | def my_issues_tabs
    function my_projects_tabs (line 45) | def my_projects_tabs
    function upgrade_options (line 87) | def upgrade_options(user)

FILE: app/helpers/news_helper.rb
  type NewsHelper (line 4) | module NewsHelper

FILE: app/helpers/projects_helper.rb
  type ProjectsHelper (line 4) | module ProjectsHelper
    function project_settings_tabs (line 5) | def project_settings_tabs
    function project_image (line 14) | def project_image(project)
    function nomination_links (line 21) | def nomination_links(member,project)
    function parent_project_select_tag (line 55) | def parent_project_select_tag(project)
    function render_project_hierarchy (line 72) | def render_project_hierarchy(projects)
    function render_new_item_jump_box (line 100) | def render_new_item_jump_box

FILE: app/helpers/queries_helper.rb
  type QueriesHelper (line 4) | module QueriesHelper
    function operators_for_select (line 6) | def operators_for_select(filter_type)
    function column_header (line 10) | def column_header(column)
    function column_content (line 16) | def column_content(column, issue)

FILE: app/helpers/reports_helper.rb
  type ReportsHelper (line 4) | module ReportsHelper
    function aggregate (line 6) | def aggregate(data, criteria)
    function aggregate_link (line 18) | def aggregate_link(data, criteria, *args)

FILE: app/helpers/retros_helper.rb
  type RetrosHelper (line 1) | module RetrosHelper
    function render_title_date (line 2) | def render_title_date
    function team_from_issue (line 11) | def team_from_issue(issue)
    function accuracy_display (line 15) | def accuracy_display(self_bias,magnitude)

FILE: app/helpers/search_helper.rb
  type SearchHelper (line 4) | module SearchHelper
    function highlight_tokens (line 5) | def highlight_tokens(text, tokens)
    function type_label (line 27) | def type_label(t)
    function project_select_tag (line 31) | def project_select_tag
    function render_results_by_type (line 39) | def render_results_by_type(results_by_type)

FILE: app/helpers/settings_helper.rb
  type SettingsHelper (line 4) | module SettingsHelper
    function administration_settings_tabs (line 5) | def administration_settings_tabs
    function setting_select (line 16) | def setting_select(setting, choices, options={})
    function setting_multiselect (line 24) | def setting_multiselect(setting, choices, options={})
    function setting_text_field (line 39) | def setting_text_field(setting, options={})
    function setting_text_area (line 44) | def setting_text_area(setting, options={})
    function setting_check_box (line 49) | def setting_check_box(setting, options={})
    function setting_label (line 55) | def setting_label(setting, options={})

FILE: app/helpers/sort_helper.rb
  type SortHelper (line 53) | module SortHelper
    class SortCriteria (line 54) | class SortCriteria
      method initialize (line 56) | def initialize
      method available_criteria= (line 60) | def available_criteria=(criteria)
      method from_param (line 67) | def from_param(param)
      method criteria= (line 72) | def criteria=(arg)
      method to_param (line 77) | def to_param
      method to_sql (line 81) | def to_sql
      method add! (line 90) | def add!(key, asc)
      method add (line 96) | def add(*args)
      method first_key (line 102) | def first_key
      method first_asc? (line 106) | def first_asc?
      method empty? (line 110) | def empty?
      method normalize! (line 116) | def normalize!
    function sort_name (line 126) | def sort_name
    function sort_init (line 138) | def sort_init(*args)
    function sort_update (line 153) | def sort_update(criteria)
    function sort_clear (line 163) | def sort_clear
    function sort_clause (line 170) | def sort_clause
    function sort_link (line 180) | def sort_link(column, caption, default_order)
    function sort_header_tag (line 220) | def sort_header_tag(column, options = {})

FILE: app/helpers/users_helper.rb
  type UsersHelper (line 4) | module UsersHelper
    function users_status_options_for_select (line 5) | def users_status_options_for_select(selected)
    function options_for_membership_project_select (line 14) | def options_for_membership_project_select(user, projects)
    function change_status_link (line 22) | def change_status_link(user)
    function user_settings_tabs (line 34) | def user_settings_tabs
    function reputation_value (line 42) | def reputation_value(reputation_type, reputation_value)
    function reputation_project (line 51) | def reputation_project(reputation)

FILE: app/helpers/watchers_helper.rb
  type WatchersHelper (line 4) | module WatchersHelper
    function watcher_tag (line 10) | def watcher_tag(object, user, options={:replace => 'watcher'})
    function watcher_link (line 19) | def watcher_link(object, user, options={:replace => 'watcher'})
    function watchers_list (line 35) | def watchers_list(object)

FILE: app/helpers/wiki_helper.rb
  type WikiHelper (line 4) | module WikiHelper
    function wiki_page_options_for_select (line 6) | def wiki_page_options_for_select(pages, selected = nil, parent = nil, ...
    function html_diff (line 19) | def html_diff(wdiff)

FILE: app/models/activity_stream.rb
  class ActivityStream (line 7) | class ActivityStream < ActiveRecord::Base
    method before_save (line 22) | def before_save
    method recent_actors (line 30) | def self.recent_actors(actor, location, limit=12)
    method recent_objects (line 55) | def self.recent_objects(object, location, limit=12)
    method preference_join (line 67) | def self.preference_join(location) # :nodoc:
    method fetch (line 77) | def self.fetch(user_id, project_id, with_subprojects, limit, max_creat...
    method soft_destroy (line 129) | def soft_destroy

FILE: app/models/activity_stream_preference.rb
  class ActivityStreamPreference (line 9) | class ActivityStreamPreference < ActiveRecord::Base

FILE: app/models/activity_stream_total.rb
  class ActivityStreamTotal (line 10) | class ActivityStreamTotal < ActiveRecord::Base

FILE: app/models/attachment.rb
  class Attachment (line 6) | class Attachment < ActiveRecord::Base
    method validate (line 27) | def validate
    method put_to_s3 (line 33) | def put_to_s3
    method delete_from_s3 (line 44) | def delete_from_s3
    method file= (line 52) | def file=(incoming_file)
    method file (line 64) | def file
    method before_save (line 70) | def before_save
    method after_destroy (line 91) | def after_destroy
    method diskfile (line 96) | def diskfile
    method increment_download (line 100) | def increment_download
    method project (line 104) | def project
    method visible? (line 108) | def visible?(user=User.current)
    method deletable? (line 112) | def deletable?(user=User.current)
    method image? (line 116) | def image?
    method is_text? (line 120) | def is_text?
    method is_diff? (line 124) | def is_diff?
    method readable? (line 129) | def readable?
    method sanitize_filename (line 135) | def sanitize_filename(value)
    method disk_filename (line 146) | def self.disk_filename(filename)

FILE: app/models/auth_source.rb
  class AuthSource (line 4) | class AuthSource < ActiveRecord::Base
    method authenticate (line 11) | def authenticate(login, password)
    method test_connection (line 14) | def test_connection
    method auth_method_name (line 17) | def auth_method_name
    method authenticate (line 22) | def self.authenticate(login, password)

FILE: app/models/auth_source_ldap.rb
  class AuthSourceLdap (line 7) | class AuthSourceLdap < AuthSource
    method after_initialize (line 16) | def after_initialize
    method authenticate (line 20) | def authenticate(login, password)
    method test_connection (line 51) | def test_connection
    method auth_method_name (line 58) | def auth_method_name
    method strip_ldap_attributes (line 64) | def strip_ldap_attributes
    method initialize_ldap_con (line 70) | def initialize_ldap_con(ldap_user, ldap_password)
    method get_attr (line 79) | def self.get_attr(entry, attr_name)

FILE: app/models/board.rb
  class Board (line 4) | class Board < ActiveRecord::Base
    method visible? (line 17) | def visible?(user=User.current)
    method to_s (line 21) | def to_s
    method reset_counters! (line 25) | def reset_counters!
    method reset_counters! (line 30) | def self.reset_counters!(board_id)

FILE: app/models/comment.rb
  class Comment (line 4) | class Comment < ActiveRecord::Base
    method send_mentions (line 12) | def send_mentions
    method title (line 16) | def title
    method mention (line 23) | def mention(mentioner_id, mentioned_id, mention_text)

FILE: app/models/credit.rb
  class Credit (line 1) | class Credit < ActiveRecord::Base
    method issue_day (line 15) | def issue_day
    method disable (line 19) | def disable
    method enable (line 24) | def enable
    method issue_shares (line 30) | def issue_shares
    method previously_issued (line 34) | def previously_issued
    method settled? (line 38) | def settled?
    method pay_out (line 42) | def pay_out(pay_amount)
    method round (line 61) | def self.round(x)
    method settle (line 67) | def self.settle(project,amount)
    method transfer (line 89) | def self.transfer(sender,recipient,project,amount, note)

FILE: app/models/credit_distribution.rb
  class CreditDistribution (line 1) | class CreditDistribution < ActiveRecord::Base
    method add_credits (line 11) | def add_credits

FILE: app/models/credit_transfer.rb
  class CreditTransfer (line 4) | class CreditTransfer < ActiveRecord::Base
    method send_notification (line 11) | def send_notification

FILE: app/models/daily_digest.rb
  class DailyDigest (line 4) | class DailyDigest < ActiveRecord::Base
    method deliver (line 8) | def self.deliver

FILE: app/models/document.rb
  class Document (line 4) | class Document < ActiveRecord::Base
    method size (line 17) | def size
    method visible? (line 27) | def visible?(user=User.current)
    method updated_at (line 31) | def updated_at
    method recipients (line 40) | def recipients

FILE: app/models/document_observer.rb
  class DocumentObserver (line 4) | class DocumentObserver < ActiveRecord::Observer
    method after_create (line 5) | def after_create(document)

FILE: app/models/email_update.rb
  class EmailUpdate (line 1) | class EmailUpdate < ActiveRecord::Base
    method before_create (line 4) | def before_create
    method send_activation (line 8) | def send_activation
    method accept (line 12) | def accept

FILE: app/models/enabled_module.rb
  class EnabledModule (line 4) | class EnabledModule < ActiveRecord::Base
    method module_enabled (line 14) | def module_enabled

FILE: app/models/enterprise.rb
  class Enterprise (line 1) | class Enterprise < ActiveRecord::Base

FILE: app/models/enumeration.rb
  class Enumeration (line 4) | class Enumeration < ActiveRecord::Base
    method default (line 19) | def default
    method default (line 28) | def self.default
    method option_name (line 41) | def option_name
    method opt (line 46) | def opt
    method before_save (line 51) | def before_save
    method objects_count (line 58) | def objects_count
    method in_use? (line 62) | def in_use?
    method is_override? (line 67) | def is_override?
    method destroy (line 75) | def destroy(reassign_to = nil)
    method <=> (line 82) | def <=>(enumeration)
    method to_s (line 86) | def to_s; name end
    method get_subclasses (line 92) | def self.get_subclasses
    method overridding_change? (line 97) | def self.overridding_change?(new, previous)
    method same_active_state? (line 107) | def self.same_active_state?(new, previous)
    method check_integrity (line 114) | def check_integrity

FILE: app/models/help_section.rb
  class HelpSection (line 1) | class HelpSection < ActiveRecord::Base

FILE: app/models/hourly_type.rb
  class HourlyType (line 1) | class HourlyType < ActiveRecord::Base
    method validate (line 9) | def validate
    method name_with_rates (line 14) | def name_with_rates

FILE: app/models/invitation.rb
  class Invitation (line 1) | class Invitation < ActiveRecord::Base
    method before_create (line 9) | def before_create
    method deliver (line 16) | def deliver(note="")
    method resend (line 34) | def resend(note="")
    method status_name (line 40) | def status_name
    method accept (line 51) | def accept(user=nil)

FILE: app/models/issue.rb
  class Issue (line 4) | class Issue < ActiveRecord::Base
    method visible? (line 81) | def visible?(usr=nil)
    method ready_for_open? (line 86) | def ready_for_open?
    method ready_for_canceled? (line 94) | def ready_for_canceled?
    method ready_for_accepted? (line 100) | def ready_for_accepted?
    method ready_for_rejected? (line 107) | def ready_for_rejected?
    method is_gift? (line 114) | def is_gift?
    method is_expense? (line 118) | def is_expense?
    method is_hourly? (line 122) | def is_hourly?
    method is_feature (line 126) | def is_feature
    method is_bug (line 130) | def is_bug
    method is_chore (line 134) | def is_chore
    method updated_status (line 138) | def updated_status
    method after_initialize (line 149) | def after_initialize
    method has_team? (line 157) | def has_team?
    method has_todos? (line 161) | def has_todos?
    method team_votes (line 165) | def team_votes
    method team_members (line 169) | def team_members
    method copy_from (line 174) | def copy_from(arg)
    method startable? (line 182) | def startable?
    method clone_recurring (line 190) | def clone_recurring
    method move_to (line 206) | def move_to(new_project, new_tracker = nil, options = {})
    method tracker_id= (line 240) | def tracker_id=(tid)
    method mention (line 247) | def mention(mentioner_id, mentioned_id, mention_text)
    method update_tags (line 258) | def update_tags(tags)
    method attributes_with_tracker_first= (line 265) | def attributes_with_tracker_first=(new_attributes, *args)
    method estimated_hours= (line 275) | def estimated_hours=(h)
    method validate (line 280) | def validate
    method init_journal (line 283) | def init_journal(user, notes = "")
    method closed? (line 295) | def closed?
    method reopened? (line 300) | def reopened?
    method editable? (line 311) | def editable?
    method overdue? (line 321) | def overdue?
    method assignable_users (line 326) | def assignable_users
    method blocked? (line 331) | def blocked?
    method new_statuses_allowed_to (line 336) | def new_statuses_allowed_to(user)
    method recipients (line 345) | def recipients
    method relations (line 360) | def relations
    method all_dependent_issues (line 364) | def all_dependent_issues
    method duplicates (line 374) | def duplicates
    method due_before (line 380) | def due_before
    method duration (line 389) | def duration
    method soonest_start (line 393) | def soonest_start
    method to_s (line 397) | def to_s
    method css_classes (line 402) | def css_classes
    method push_allowed? (line 413) | def push_allowed?(user)
    method update_estimate_total (line 421) | def update_estimate_total(binding)
    method update_pri_total (line 429) | def update_pri_total(binding)
    method update_agree_total (line 437) | def update_agree_total(binding)
    method update_accept_total (line 449) | def update_accept_total(binding)
    method update_status (line 462) | def update_status
    method set_points_from_hourly (line 506) | def set_points_from_hourly
    method give_credits (line 517) | def give_credits
    method to_dashboard (line 549) | def to_dashboard
    method dollar_amount (line 563) | def dollar_amount
    method points_from_credits (line 568) | def points_from_credits
    method size (line 574) | def size
    method after_create (line 584) | def after_create
    method update_last_item_stamp (line 588) | def update_last_item_stamp
    method attachment_removed (line 595) | def attachment_removed(obj)
    method after_save (line 603) | def after_save
    method create_journal (line 629) | def create_journal

FILE: app/models/issue_observer.rb
  class IssueObserver (line 4) | class IssueObserver < ActiveRecord::Observer
    method after_create (line 5) | def after_create(issue)

FILE: app/models/issue_relation.rb
  class IssueRelation (line 4) | class IssueRelation < ActiveRecord::Base
    method validate (line 28) | def validate
    method other_issue (line 36) | def other_issue(issue)
    method label_for (line 40) | def label_for(issue)
    method before_save (line 44) | def before_save
    method set_issue_to_dates (line 55) | def set_issue_to_dates
    method successor_soonest_start (line 63) | def successor_soonest_start
    method <=> (line 68) | def <=>(relation)
    method reverse_if_needed (line 74) | def reverse_if_needed

FILE: app/models/issue_status.rb
  class IssueStatus (line 4) | class IssueStatus < ActiveRecord::Base
    method after_save (line 14) | def after_save
    method default (line 19) | def self.default
    method assigned (line 23) | def self.assigned
    method done (line 27) | def self.done
    method inprogress (line 31) | def self.inprogress
    method newstatus (line 35) | def self.newstatus
    method open (line 39) | def self.open
    method canceled (line 43) | def self.canceled
    method estimate (line 47) | def self.estimate
    method accepted (line 51) | def self.accepted
    method rejected (line 55) | def self.rejected
    method archived (line 59) | def self.archived
    method new_statuses_allowed_to (line 67) | def new_statuses_allowed_to(roles, tracker)
    method find_new_statuses_allowed_to (line 78) | def find_new_statuses_allowed_to(roles, tracker)
    method new_status_allowed_to? (line 89) | def new_status_allowed_to?(status, roles, tracker)
    method <=> (line 97) | def <=>(status)
    method to_s (line 101) | def to_s; name end
    method check_integrity (line 105) | def check_integrity

FILE: app/models/issue_vote.rb
  class IssueVote (line 1) | class IssueVote < ActiveRecord::Base
    method project (line 13) | def project
    method update_issue_totals (line 17) | def update_issue_totals
    method remove_similar (line 30) | def remove_similar
    method set_binding (line 40) | def set_binding

FILE: app/models/journal.rb
  class Journal (line 4) | class Journal < ActiveRecord::Base
    method update_issue_timestamp (line 17) | def update_issue_timestamp
    method send_mentions (line 22) | def send_mentions
    method mention (line 26) | def mention(mentioner_id, mentioned_id, mention_text)
    method parse_relations (line 37) | def parse_relations
    method issue_id (line 41) | def issue_id
    method parse_relations_delayed (line 46) | def parse_relations_delayed
    method save (line 65) | def save(*args)
    method new_status (line 71) | def new_status
    method new_value_for (line 76) | def new_value_for(prop)
    method editable_by? (line 81) | def editable_by?(usr)
    method project (line 85) | def project
    method attachments (line 89) | def attachments

FILE: app/models/journal_detail.rb
  class JournalDetail (line 4) | class JournalDetail < ActiveRecord::Base
    method before_save (line 7) | def before_save

FILE: app/models/journal_observer.rb
  class JournalObserver (line 4) | class JournalObserver < ActiveRecord::Observer
    method after_create (line 5) | def after_create(journal)

FILE: app/models/mail.rb
  class Mail (line 4) | class Mail < ActiveRecord::Base

FILE: app/models/mail_handler.rb
  class MailHandler (line 4) | class MailHandler < ActiveRecord::Base
    class UnauthorizedAction (line 7) | class UnauthorizedAction < StandardError; end
    class MissingInformation (line 8) | class MissingInformation < StandardError; end
    method initialize (line 16) | def initialize(email, user,options = {})
    method receive (line 35) | def self.receive(email, options={})
    method receive (line 53) | def receive(email)
    method receive_from_api (line 88) | def self.receive_from_api(email,options ={})
    method dispatch (line 139) | def dispatch
    method receive_issue (line 170) | def receive_issue
    method target_project (line 198) | def target_project
    method receive_issue_reply (line 208) | def receive_issue_reply(issue_id)
    method receive_journal_reply (line 236) | def receive_journal_reply(journal_id)
    method receive_message_reply (line 244) | def receive_message_reply(message_id)
    method add_attachments (line 266) | def add_attachments(obj)
    method add_watchers (line 279) | def add_watchers(obj)
    method get_keyword (line 289) | def get_keyword(attr, options={})
    method plain_text_body (line 306) | def plain_text_body
    method cleaned_up_text_body (line 327) | def cleaned_up_text_body
    method full_sanitizer (line 331) | def self.full_sanitizer
    method create_user_from_email (line 336) | def self.create_user_from_email(email)
    method cleanup_body (line 355) | def cleanup_body(body)

FILE: app/models/mailer.rb
  class Mailer (line 4) | class Mailer < ActionMailer::Base
    method default_url_options (line 12) | def self.default_url_options
    method issue_add (line 23) | def issue_add(issue)
    method issue_edit (line 44) | def issue_edit(journal)
    method daily_digest (line 69) | def daily_digest(recipient,journals)
    method invitation_add (line 82) | def invitation_add(invitation,note)
    method invitation_remind (line 96) | def invitation_remind(invitation,note)
    method reminder (line 110) | def reminder(user, issues, days)
    method document_added (line 125) | def document_added(document)
    method attachments_added (line 139) | def attachments_added(attachments)
    method news_added (line 166) | def news_added(news)
    method message_posted (line 181) | def message_posted(message)
    method wiki_content_added (line 208) | def wiki_content_added(wiki_content)
    method wiki_content_updated (line 229) | def wiki_content_updated(wiki_content)
    method account_information (line 247) | def account_information(user, password)
    method account_activation_request (line 262) | def account_activation_request(user)
    method account_activated (line 276) | def account_activated(user)
    method lost_password (line 285) | def lost_password(token)
    method register (line 294) | def register(token)
    method personal_welcome (line 307) | def personal_welcome(user,project)
    method test (line 318) | def test(user)
    method deliver! (line 328) | def deliver!(mail = @mail)
    method email_update_activation (line 343) | def email_update_activation(email_update)
    method reminders (line 357) | def self.reminders(options={})
    method initialize_defaults (line 378) | def initialize_defaults(method_name)
    method redmine_headers (line 392) | def redmine_headers(h)
    method create_mail (line 397) | def create_mail
    method render_multipart (line 422) | def render_multipart(method_name, body)
    method controller_path (line 434) | def self.controller_path
    method message_id_for (line 439) | def self.message_id_for(object)
    method message_id (line 449) | def message_id(object)
    method references (line 453) | def references(object)
  type TMail (line 461) | module TMail
    class Mail (line 463) | class Mail
      method add_message_id (line 465) | def add_message_id( fqdn = nil )

FILE: app/models/member.rb
  class Member (line 4) | class Member < ActiveRecord::Base
    method name (line 16) | def name
    method name_and_id (line 20) | def name_and_id
    method role_ids= (line 25) | def role_ids=(arg)
    method <=> (line 41) | def <=>(member)
    method deletable? (line 46) | def deletable?
    method validate (line 52) | def validate
    method unwatch_from_permission_change (line 59) | def unwatch_from_permission_change

FILE: app/models/member_role.rb
  class MemberRole (line 4) | class MemberRole < ActiveRecord::Base
    method project (line 22) | def project
    method name (line 27) | def name
    method project_id (line 31) | def project_id
    method user_id (line 35) | def user_id
    method user (line 39) | def user
    method long_description (line 43) | def long_description
    method event_title (line 47) | def event_title
    method remove_member_if_empty (line 53) | def remove_member_if_empty
    method send_notification (line 60) | def send_notification
    method log_activity (line 69) | def log_activity
    method refresh_memberships (line 75) | def refresh_memberships
    method refresh_memberships_delayed (line 82) | def self.refresh_memberships_delayed(member_role)

FILE: app/models/message.rb
  class Message (line 4) | class Message < ActiveRecord::Base
    method project_id (line 30) | def project_id
    method visible? (line 34) | def visible?(user=User.current)
    method validate_on_create (line 38) | def validate_on_create
    method after_create (line 43) | def after_create
    method send_mentions (line 50) | def send_mentions
    method mention (line 54) | def mention(mentioner_id, mentioned_id, mention_text)
    method after_update (line 66) | def after_update
    method after_destroy (line 74) | def after_destroy
    method sticky= (line 78) | def sticky=(arg)
    method sticky? (line 82) | def sticky?
    method project (line 86) | def project
    method editable_by? (line 90) | def editable_by?(usr)
    method destroyable_by? (line 94) | def destroyable_by?(usr)
    method recipients (line 99) | def recipients
    method add_author_as_watcher (line 108) | def add_author_as_watcher

FILE: app/models/message_observer.rb
  class MessageObserver (line 4) | class MessageObserver < ActiveRecord::Observer
    method after_create (line 5) | def after_create(message)

FILE: app/models/motion.rb
  class Motion (line 1) | class Motion < ActiveRecord::Base
    method active? (line 51) | def active?
    method ended? (line 55) | def ended?
    method concerns_someone? (line 75) | def concerns_someone?
    method close (line 80) | def close
    method set_values (line 114) | def set_values
    method generate_title (line 126) | def generate_title
    method generate_description (line 150) | def generate_description
    method eligible_users (line 174) | def self.eligible_users(variation,project_id)
    method create_forum_topic (line 191) | def create_forum_topic
    method visibility_level_description (line 204) | def visibility_level_description
    method binding_level_description (line 208) | def binding_level_description
    method execute_action (line 212) | def execute_action
    method send_announce (line 235) | def send_announce
    method announce (line 239) | def announce
    method announce_passed (line 254) | def announce_passed

FILE: app/models/motion_vote.rb
  class MotionVote (line 1) | class MotionVote < ActiveRecord::Base
    method default (line 9) | def default
    method project (line 17) | def project
    method remove_similar_votes (line 21) | def remove_similar_votes
    method set_binding (line 25) | def set_binding
    method action_description (line 30) | def action_description
    method update_agree_total (line 44) | def update_agree_total
    method remove_notifications (line 58) | def remove_notifications

FILE: app/models/news.rb
  class News (line 5) | class News < ActiveRecord::Base
    method visible? (line 20) | def visible?(user=User.current)
    method recipients (line 25) | def recipients
    method latest (line 32) | def self.latest(user = User.current, count = 5)
    method send_mentions (line 36) | def send_mentions
    method mention (line 40) | def mention(mentioner_id, mentioned_id, mention_text)

FILE: app/models/news_observer.rb
  class NewsObserver (line 4) | class NewsObserver < ActiveRecord::Observer
    method after_create (line 5) | def after_create(news)

FILE: app/models/notification.rb
  class Notification (line 1) | class Notification < ActiveRecord::Base
    method mark_as_responded (line 18) | def mark_as_responded
    method mention? (line 25) | def mention?
    method unresponded? (line 30) | def self.unresponded?
    method unresponded_count (line 35) | def self.unresponded_count
    method unresponded (line 39) | def self.unresponded
    method remove_mention_duplicates (line 43) | def remove_mention_duplicates
    method recind (line 49) | def self.recind(variation, source_id, sender_id)
    method deactivate_all (line 58) | def self.deactivate_all(variation, source_id)
    method activate_all (line 62) | def self.activate_all(variation, source_id)

FILE: app/models/open_id_authentication_association.rb
  class OpenIdAuthenticationAssociation (line 1) | class OpenIdAuthenticationAssociation < ActiveRecord::Base

FILE: app/models/open_id_authentication_nonces.rb
  class OpenIdAuthenticationNonces (line 1) | class OpenIdAuthenticationNonces < ActiveRecord::Base

FILE: app/models/personal_welcome.rb
  class PersonalWelcome (line 4) | class PersonalWelcome < ActiveRecord::Base
    method deliver (line 7) | def self.deliver

FILE: app/models/plan.rb
  class Plan (line 1) | class Plan < ActiveRecord::Base
    method free? (line 4) | def free?
    method free (line 8) | def self.free

FILE: app/models/plugin_schema_info.rb
  class PluginSchemaInfo (line 1) | class PluginSchemaInfo < ActiveRecord::Base

FILE: app/models/project.rb
  class Project (line 4) | class Project < ActiveRecord::Base
    method project_id (line 142) | def project_id
    method all_tags (line 146) | def all_tags(term = '')
    method graph_data (line 150) | def graph_data
    method sub_project_array (line 162) | def sub_project_array
    method sub_project_array_visible_to (line 171) | def sub_project_array_visible_to(user)
    method graph_data2 (line 185) | def graph_data2
    method identifier= (line 196) | def identifier=(identifier)
    method identifier_frozen? (line 200) | def identifier_frozen?
    method latest_public (line 204) | def self.latest_public(count=10, offset=0)
    method most_active_public (line 217) | def self.most_active_public(count=10, offset=0)
    method most_active (line 232) | def self.most_active(user=nil, count=10, root=false, offset=0)
    method visible_to (line 242) | def visible_to(user)
    method visible_by (line 255) | def self.visible_by(user=nil)
    method fetch_credits (line 266) | def fetch_credits(with_subprojects)
    method allowed_to_condition (line 278) | def self.allowed_to_condition(user, permission, options={})
    method activities (line 313) | def activities(include_inactive=false)
    method project_condition (line 326) | def project_condition(with_subprojects)
    method find (line 332) | def self.find(*args)
    method active? (line 342) | def active?
    method archived? (line 346) | def archived?
    method locked? (line 350) | def locked?
    method lock (line 354) | def lock
    method unlock (line 358) | def unlock
    method enterprise? (line 362) | def enterprise?
    method archive (line 367) | def archive
    method unarchive (line 376) | def unarchive
    method allowed_parents (line 383) | def allowed_parents
    method set_allowed_parent! (line 397) | def set_allowed_parent!(p)
    method set_parent! (line 419) | def set_parent!(p)
    method rolled_up_trackers (line 456) | def rolled_up_trackers
    method users_by_role (line 465) | def users_by_role
    method active_members (line 476) | def active_members
    method clearance_members (line 481) | def clearance_members
    method contributor_list (line 486) | def contributor_list
    method member_list (line 491) | def member_list
    method core_member_list (line 496) | def core_member_list
    method active_binding_members_count (line 501) | def active_binding_members_count
    method binding_members_count (line 507) | def binding_members_count
    method role_and_above_count (line 512) | def role_and_above_count(position)
    method refresh_active_members (line 519) | def refresh_active_members
    method delete_all_members (line 576) | def delete_all_members
    method assignable_users (line 583) | def assignable_users
    method recipients (line 588) | def recipients
    method notified_users (line 593) | def notified_users
    method project (line 597) | def project
    method <=> (line 601) | def <=>(project)
    method to_s (line 605) | def to_s
    method name_with_ancestors (line 609) | def name_with_ancestors
    method short_description (line 627) | def short_description(length = 255)
    method allows_to? (line 635) | def allows_to?(action)
    method module_enabled? (line 643) | def module_enabled?(module_name)
    method credits_enabled? (line 648) | def credits_enabled?
    method enabled_module_names= (line 652) | def enabled_module_names=(module_names)
    method next_identifier (line 665) | def self.next_identifier
    method copy (line 693) | def copy(project, options={})
    method copy_from (line 713) | def self.copy_from(project)
    method team_points_for (line 731) | def team_points_for(user, options={})
    method highest_pri (line 736) | def highest_pri
    method before_validation_on_create (line 740) | def before_validation_on_create
    method after_create (line 756) | def after_create
    method set_owner (line 768) | def set_owner
    method ready_for_retro? (line 788) | def ready_for_retro?
    method start_new_retro (line 804) | def start_new_retro
    method start_retro_if_ready (line 815) | def start_retro_if_ready
    method refresh_activity_line (line 819) | def refresh_activity_line
    method activity_line_max (line 858) | def activity_line_max
    method activity_line_show (line 862) | def activity_line_show(length)
    method volunteer? (line 866) | def volunteer?
    method calculate_storage (line 870) | def calculate_storage
    method allowed_actions (line 884) | def allowed_actions
    method refresh_issue_count (line 888) | def refresh_issue_count
    method refresh_issue_count_sub (line 893) | def refresh_issue_count_sub
    method update_last_item (line 899) | def update_last_item
    method update_last_item_sub (line 904) | def update_last_item_sub
    method copy_wiki (line 912) | def copy_wiki(project)
    method copy_issues (line 927) | def copy_issues(project)
    method copy_members (line 967) | def copy_members(project)
    method copy_queries (line 978) | def copy_queries(project)
    method copy_boards (line 989) | def copy_boards(project)
    method allowed_permissions (line 998) | def allowed_permissions
    method archive! (line 1006) | def archive!

FILE: app/models/query.rb
  class QueryColumn (line 5) | class QueryColumn
    method initialize (line 9) | def initialize(name, options={})
    method caption (line 19) | def caption
    method sortable? (line 24) | def sortable?
    method value (line 28) | def value(issue)
  class Query (line 33) | class Query < ActiveRecord::Base
    class StatementInvalid (line 34) | class StatementInvalid < ::ActiveRecord::StatementInvalid
    method initialize (line 100) | def initialize(attributes = nil)
    method after_initialize (line 105) | def after_initialize
    method validate (line 110) | def validate
    method editable_by? (line 120) | def editable_by?(user)
    method available_filters (line 128) | def available_filters
    method add_filter (line 169) | def add_filter(field, operator, values)
    method add_short_filter (line 179) | def add_short_filter(field, expression)
    method has_filter? (line 185) | def has_filter?(field)
    method operator_for (line 189) | def operator_for(field)
    method values_for (line 193) | def values_for(field)
    method label_for (line 197) | def label_for(field)
    method available_columns (line 202) | def available_columns
    method groupable_columns (line 208) | def groupable_columns
    method columns (line 212) | def columns
    method column_names= (line 224) | def column_names=(names)
    method has_column? (line 236) | def has_column?(column)
    method has_default_columns? (line 240) | def has_default_columns?
    method sort_criteria= (line 244) | def sort_criteria=(arg)
    method sort_criteria (line 253) | def sort_criteria
    method sort_criteria_key (line 257) | def sort_criteria_key(arg)
    method sort_criteria_order (line 261) | def sort_criteria_order(arg)
    method group_by_sort_order (line 266) | def group_by_sort_order
    method grouped? (line 275) | def grouped?
    method group_by_column (line 279) | def group_by_column
    method group_by_statement (line 283) | def group_by_statement
    method project_statement (line 287) | def project_statement
    method statement (line 313) | def statement
    method issue_count (line 347) | def issue_count
    method issue_count_by_group (line 354) | def issue_count_by_group
    method issues (line 372) | def issues(options={})
    method journals (line 387) | def journals(options={})
    method sql_for_field (line 400) | def sql_for_field(field, operator, value, db_table, db_field)
    method date_range_clause (line 450) | def date_range_clause(table, field, from, to)

FILE: app/models/quote.rb
  class Quote (line 1) | class Quote < ActiveRecord::Base
    method random (line 4) | def self.random

FILE: app/models/reputation.rb
  class Reputation (line 1) | class Reputation < ActiveRecord::Base
    method calculate_all (line 8) | def self.calculate_all
    method calculate (line 13) | def self.calculate(variation)
    method calculate_moving_average (line 26) | def self.calculate_moving_average(variation,user_id)
    method create_or_update (line 39) | def self.create_or_update(variation,user_id,average,project_id)
    method bias_moving_average (line 55) | def self.bias_moving_average(variation,user_id,project_id)

FILE: app/models/retro.rb
  class Retro (line 4) | class Retro < ActiveRecord::Base
    method set_from_date (line 38) | def set_from_date
    method ended? (line 43) | def ended?
    method distribute_credits (line 48) | def distribute_credits
    method close (line 79) | def close
    method calculate_ratings (line 88) | def calculate_ratings
    method announce_start (line 156) | def announce_start
    method announce_close (line 182) | def announce_close
    method all_in? (line 201) | def all_in?

FILE: app/models/retro_rating.rb
  class RetroRating (line 4) | class RetroRating < ActiveRecord::Base

FILE: app/models/role.rb
  class Role (line 4) | class Role < ActiveRecord::Base
    method copy (line 30) | def copy(source_role)
    method permissions (line 46) | def permissions
    method permissions= (line 50) | def permissions=(perms)
    method add_permission! (line 55) | def add_permission!(*perms)
    method remove_permission! (line 66) | def remove_permission!(*perms)
    method has_permission? (line 74) | def has_permission?(perm)
    method <=> (line 78) | def <=>(role)
    method to_s (line 82) | def to_s
    method builtin? (line 87) | def builtin?
    method community_member? (line 92) | def community_member?
    method enterprise_member? (line 97) | def enterprise_member?
    method platform_member? (line 102) | def platform_member?
    method binding_member? (line 107) | def binding_member?
    method admin? (line 112) | def admin?
    method core_member? (line 117) | def core_member?
    method contributor? (line 122) | def contributor?
    method member? (line 127) | def member?
    method active? (line 132) | def active?
    method clearance? (line 137) | def clearance?
    method allowed_to? (line 146) | def allowed_to?(action)
    method setable_permissions (line 155) | def setable_permissions
    method find_all_givable (line 163) | def self.find_all_givable(level)
    method non_member (line 168) | def self.non_member
    method anonymous (line 173) | def self.anonymous
    method administrator (line 179) | def self.administrator
    method board (line 184) | def self.board
    method contributor (line 190) | def self.contributor
    method core_member (line 196) | def self.core_member
    method member (line 201) | def self.member
    method founder (line 206) | def self.founder
    method clearance (line 211) | def self.clearance
    method active (line 216) | def self.active
    method allowed_permissions (line 223) | def allowed_permissions
    method allowed_actions (line 227) | def allowed_actions
    method check_deletable (line 231) | def check_deletable

FILE: app/models/setting.rb
  class Setting (line 4) | class Setting < ActiveRecord::Base
    method value (line 182) | def value
    method value= (line 190) | def value=(value)
    method serialize_value (line 194) | def serialize_value
    method [] (line 200) | def self.[](name)
    method []= (line 205) | def self.[]=(name, v)
    method per_page_options_array (line 234) | def self.per_page_options_array
    method openid? (line 238) | def self.openid?
    method check_cache (line 245) | def self.check_cache
    method find_or_default (line 257) | def self.find_or_default(name)

FILE: app/models/share.rb
  class Share (line 1) | class Share < ActiveRecord::Base
    method set_expiration (line 20) | def self.set_expiration(owner,project,amount,expiration_date)

FILE: app/models/todo.rb
  class Todo (line 1) | class Todo < ActiveRecord::Base
    method update_issue_timestamp (line 8) | def update_issue_timestamp

FILE: app/models/token.rb
  class Token (line 4) | class Token < ActiveRecord::Base
    method before_create (line 12) | def before_create
    method expired? (line 17) | def expired?
    method destroy_expired (line 22) | def self.destroy_expired
    method generate_token_value (line 28) | def self.generate_token_value
    method delete_previous_tokens (line 33) | def delete_previous_tokens

FILE: app/models/track.rb
  class Track (line 4) | class Track < ActiveRecord::Base
    method log (line 12) | def self.log(code, ip="")

FILE: app/models/tracker.rb
  class Tracker (line 4) | class Tracker < ActiveRecord::Base
    method copy (line 8) | def copy(source_tracker)
    method to_s (line 21) | def to_s; name end
    method <=> (line 23) | def <=>(tracker)
    method all (line 27) | def self.all
    method no_credits (line 32) | def self.no_credits
    method gift? (line 37) | def gift?
    method expense? (line 41) | def expense?
    method recurring? (line 45) | def recurring?
    method hourly? (line 49) | def hourly?
    method feature? (line 53) | def feature?
    method bug? (line 57) | def bug?
    method chore? (line 61) | def chore?
    method issue_statuses (line 68) | def issue_statuses
    method check_integrity (line 85) | def check_integrity

FILE: app/models/user.rb
  class User (line 7) | class User < ActiveRecord::Base
    method <=> (line 111) | def <=>(user)
    method before_create (line 121) | def before_create
    method before_save (line 127) | def before_save
    method after_create (line 133) | def after_create
    method activate_invitations (line 138) | def activate_invitations
    method after_update (line 145) | def after_update
    method create_recurly_account (line 149) | def self.create_recurly_account(id)
    method update_recurly_account (line 163) | def self.update_recurly_account(id)
    method save_billing (line 181) | def save_billing(cc,ccverify,ip)
    method update_recurly_billing (line 185) | def self.update_recurly_billing(id,cc,ccverify,ip)
    method reload (line 238) | def reload(*args)
    method lock_workstreams? (line 243) | def lock_workstreams?
    method lock_workstreams (line 248) | def lock_workstreams
    method unlock_workstreams (line 254) | def unlock_workstreams
    method usage_over? (line 260) | def usage_over?
    method update_usage_over (line 265) | def update_usage_over
    method update_trial_expiration (line 291) | def update_trial_expiration
    method identity_url= (line 318) | def identity_url=(url)
    method try_to_login (line 332) | def self.try_to_login(login, password)
    method try_to_autologin (line 363) | def self.try_to_autologin(key)
    method name (line 376) | def name(formatter = nil)
    method active? (line 384) | def active?
    method reactivate (line 388) | def reactivate
    method registered? (line 402) | def registered?
    method lock (line 406) | def lock
    method cancel (line 411) | def cancel
    method cancel_account! (line 417) | def cancel_account!
    method canceled? (line 421) | def canceled?
    method locked? (line 425) | def locked?
    method check_password? (line 429) | def check_password?(clear_password)
    method random_password (line 436) | def random_password
    method pref (line 445) | def pref
    method time_zone (line 449) | def time_zone
    method wants_comments_in_reverse_order? (line 453) | def wants_comments_in_reverse_order?
    method rss_key (line 458) | def rss_key
    method api_key (line 464) | def api_key
    method notified_projects_ids (line 470) | def notified_projects_ids
    method notified_project_ids= (line 474) | def notified_project_ids=(ids)
    method find_by_rss_key (line 481) | def self.find_by_rss_key(key)
    method find_by_api_key (line 486) | def self.find_by_api_key(key)
    method find_by_mail (line 492) | def self.find_by_mail(mail)
    method find_by_login (line 497) | def self.find_by_login(login)
    method to_s (line 501) | def to_s
    method today (line 506) | def today
    method logged? (line 514) | def logged?
    method anonymous? (line 518) | def anonymous?
    method roles_for_project (line 523) | def roles_for_project(child_project)
    method community_member_of? (line 545) | def community_member_of?(project)
    method enterprise_member_of? (line 550) | def enterprise_member_of?(project)
    method admin_of? (line 555) | def admin_of?(project)
    method member_of? (line 561) | def member_of?(project)
    method core_member_of? (line 566) | def core_member_of?(project)
    method contributor_of? (line 571) | def contributor_of?(project)
    method binding_voter_of? (line 576) | def binding_voter_of?(project)
    method binding_voter_of_motion? (line 581) | def binding_voter_of_motion?(motion)
    method allowed_to_see_motion? (line 586) | def allowed_to_see_motion?(motion)
    method allowed_to_see_project? (line 594) | def allowed_to_see_project?(project)
    method position_for (line 605) | def position_for(project)
    method allowed_to? (line 613) | def allowed_to?(action, project, options={})
    method add_as_core (line 639) | def add_as_core(project, options={})
    method add_as_member (line 646) | def add_as_member(project, options={})
    method add_as_contributor (line 655) | def add_as_contributor(project, options={})
    method add_as_contributor_if_new (line 662) | def add_as_contributor_if_new(project, options={})
    method add_to_project (line 667) | def add_to_project(project, role, options={})
    method drop_from_project (line 683) | def drop_from_project(project, role, options={})
    method drop_from_core (line 691) | def drop_from_core(project, options={})
    method current= (line 695) | def self.current=(user)
    method current (line 699) | def self.current
    method anonymous (line 705) | def self.anonymous
    method sysadmin (line 714) | def self.sysadmin
    method public_project_total (line 719) | def public_project_total
    method private_project_total (line 723) | def private_project_total
    method public_contributor_total (line 727) | def public_contributor_total
    method private_contributor_total (line 733) | def private_contributor_total
    method project_storage_total (line 739) | def project_storage_total
    method belongs_to_projects (line 744) | def belongs_to_projects
    method recent_projects (line 749) | def recent_projects(max = 10)
    method recent_items (line 756) | def recent_items(max = 10)
    method find_available_login (line 764) | def self.find_available_login(array)
    method delete_autologin_tokens (line 773) | def delete_autologin_tokens
    method activate (line 777) | def activate
    method validate (line 783) | def validate
    method hash_password (line 793) | def self.hash_password(clear_password)
  class AnonymousUser (line 800) | class AnonymousUser < User
    method validate_on_create (line 802) | def validate_on_create
    method logged? (line 808) | def logged?; false end
    method admin (line 809) | def admin; false end
    method name (line 810) | def name(*args); I18n.t(:label_user_anonymous) end
    method mail (line 811) | def mail; nil end
    method time_zone (line 812) | def time_zone; nil end
    method rss_key (line 813) | def rss_key; nil end
    method delete_autologin_tokens (line 814) | def delete_autologin_tokens; nil end

FILE: app/models/user_preference.rb
  class UserPreference (line 4) | class UserPreference < ActiveRecord::Base
    method initialize (line 16) | def initialize(attributes = nil)
    method before_save (line 21) | def before_save
    method [] (line 25) | def [](attr_name)
    method []= (line 33) | def []=(attr_name, value)
    method comments_sorting (line 44) | def comments_sorting; self[:comments_sorting] end
    method comments_sorting= (line 45) | def comments_sorting=(order); self[:comments_sorting]=order end

FILE: app/models/watcher.rb
  class Watcher (line 4) | class Watcher < ActiveRecord::Base
    method prune (line 12) | def self.prune(options={})
    method validate (line 26) | def validate
    method prune_single_user (line 32) | def self.prune_single_user(user, options={})

FILE: app/models/wiki.rb
  class Wiki (line 4) | class Wiki < ActiveRecord::Base
    method visible? (line 14) | def visible?(user=User.current)
    method find_or_new_page (line 20) | def find_or_new_page(title)
    method find_page (line 26) | def find_page(title, options = {})
    method find_page (line 43) | def self.find_page(title, options = {})
    method titleize (line 58) | def self.titleize(title)

FILE: app/models/wiki_content.rb
  class WikiContent (line 6) | class WikiContent < ActiveRecord::Base
    method visible? (line 15) | def visible?(user=User.current)
    method project (line 19) | def project
    method recipients (line 24) | def recipients
    class Version (line 30) | class Version
      method text= (line 41) | def text=(plain)
      method text (line 58) | def text
      method project (line 68) | def project
      method previous (line 73) | def previous

FILE: app/models/wiki_content_observer.rb
  class WikiContentObserver (line 4) | class WikiContentObserver < ActiveRecord::Observer
    method after_create (line 5) | def after_create(wiki_content)
    method after_update (line 9) | def after_update(wiki_content)

FILE: app/models/wiki_page.rb
  class WikiPage (line 7) | class WikiPage < ActiveRecord::Base
    method project_id (line 30) | def project_id
    method visible? (line 34) | def visible?(user=User.current)
    method title= (line 38) | def title=(value)
    method before_save (line 44) | def before_save
    method before_destroy (line 61) | def before_destroy
    method pretty_title (line 66) | def pretty_title
    method content_for_version (line 70) | def content_for_version(version=nil)
    method diff (line 76) | def diff(version_to=nil, version_from=nil)
    method annotate (line 87) | def annotate(version=nil)
    method pretty_title (line 93) | def self.pretty_title(str)
    method project (line 97) | def project
    method text (line 101) | def text
    method editable_by? (line 106) | def editable_by?(usr)
    method attachments_deletable? (line 110) | def attachments_deletable?(usr=User.current)
    method parent_title (line 114) | def parent_title
    method parent_title= (line 118) | def parent_title=(t)
    method validate (line 126) | def validate
  class WikiDiff (line 133) | class WikiDiff
    method initialize (line 136) | def initialize(content_to, content_from)
  class WikiAnnotate (line 147) | class WikiAnnotate
    method initialize (line 150) | def initialize(content)

FILE: app/models/wiki_redirect.rb
  class WikiRedirect (line 4) | class WikiRedirect < ActiveRecord::Base

FILE: app/models/workflow.rb
  class Workflow (line 4) | class Workflow < ActiveRecord::Base
    method count_by_tracker_and_role (line 12) | def self.count_by_tracker_and_role
    method available_statuses (line 31) | def self.available_statuses(project, user=User.current)
    method copy (line 42) | def self.copy(source_tracker, source_role, target_trackers, target_roles)
    method copy_one (line 64) | def self.copy_one(source_tracker, source_role, target_tracker, target_...

FILE: config/boot.rb
  type Rails (line 7) | module Rails
    function boot! (line 9) | def boot!
    function booted? (line 16) | def booted?
    function pick_boot (line 20) | def pick_boot
    function vendor_rails? (line 24) | def vendor_rails?
    function preinitialize (line 28) | def preinitialize
    function preinitializer_path (line 32) | def preinitializer_path
    class Boot (line 37) | class Boot
      method run (line 38) | def run
    class VendorBoot (line 51) | class VendorBoot < Boot
      method load_initializer (line 52) | def load_initializer
    class GemBoot (line 59) | class GemBoot < Boot
      method load_initializer (line 60) | def load_initializer
      method load_rails_gem (line 66) | def load_rails_gem
      method rubygems_version (line 78) | def rubygems_version
      method gem_version (line 82) | def gem_version
      method load_rubygems (line 92) | def load_rubygems
      method parse_gem_version (line 105) | def parse_gem_version(text)
      method read_environment_rb (line 110) | def read_environment_rb

FILE: config/initializers/10-patches.rb
  type ActiveRecord (line 4) | module ActiveRecord
    class Base (line 5) | class Base
      method human_attribute_name (line 9) | def self.human_attribute_name(attr)
    class Errors (line 16) | class Errors
      method full_messages (line 17) | def full_messages(options = {})
  type ActiveRecord (line 15) | module ActiveRecord
    class Base (line 5) | class Base
      method human_attribute_name (line 9) | def self.human_attribute_name(attr)
    class Errors (line 16) | class Errors
      method full_messages (line 17) | def full_messages(options = {})
  type ActionView (line 37) | module ActionView
    type Helpers (line 38) | module Helpers
      type DateHelper (line 39) | module DateHelper
        function distance_of_date_in_words (line 41) | def distance_of_date_in_words(from_date, to_date = 0, options = {})
  type AsynchronousMailer (line 62) | module AsynchronousMailer

FILE: config/initializers/bigdecimal-segfault-fix.rb
  function BigDecimal (line 24) | def BigDecimal(initial, digits=0)

FILE: config/initializers/hash.rb
  class Hash (line 1) | class Hash
    method + (line 2) | def +(hash2)
    method to_array_conditions (line 12) | def to_array_conditions

FILE: db/migrate/20110320055526_acts_as_taggable_on_migration.rb
  class ActsAsTaggableOnMigration (line 1) | class ActsAsTaggableOnMigration < ActiveRecord::Migration
    method up (line 2) | def self.up
    method down (line 25) | def self.down

FILE: db/migrate/20110329230314_add_projectid_to_taggable.rb
  class AddProjectidToTaggable (line 1) | class AddProjectidToTaggable < ActiveRecord::Migration
    method up (line 2) | def self.up
    method down (line 6) | def self.down

FILE: db/migrate/20110330041648_add_tags_to_issue.rb
  class AddTagsToIssue (line 1) | class AddTagsToIssue < ActiveRecord::Migration
    method up (line 2) | def self.up
    method down (line 6) | def self.down

FILE: extra/mail_handler/rdm-mailhandler.rb
  type Net (line 58) | module Net
    class HTTPS (line 59) | class HTTPS < HTTP
      method post_form (line 60) | def self.post_form(url, params)
  class RedmineMailHandler (line 71) | class RedmineMailHandler
    method initialize (line 76) | def initialize
    method submit (line 121) | def submit(email)
    method debug (line 159) | def debug(msg)

FILE: extra/sample_plugin/app/controllers/example_controller.rb
  class ExampleController (line 2) | class ExampleController < ApplicationController
    method say_hello (line 9) | def say_hello
    method say_goodbye (line 13) | def say_goodbye
    method find_project (line 17) | def find_project

FILE: extra/sample_plugin/app/models/meeting.rb
  class Meeting (line 1) | class Meeting < ActiveRecord::Base

FILE: extra/sample_plugin/db/migrate/001_create_meetings.rb
  class CreateMeetings (line 3) | class CreateMeetings < ActiveRecord::Migration
    method up (line 4) | def self.up
    method down (line 12) | def self.down

FILE: lib/activity_streams/log_activity_streams.rb
  type LogActivityStreams (line 10) | module LogActivityStreams
    function write_single_activity_stream (line 12) | def self.write_single_activity_stream(actor,actor_name,object,object_n...
    function find_identical (line 65) | def self.find_identical(actor, object, verb, activity) # :nodoc:
    function included (line 74) | def self.included(controller) #:nodoc:
    type ClassMethods (line 79) | module ClassMethods #:nodoc:
      function log_activity_streams (line 84) | def log_activity_streams(actor_method, actor_name, verb, object_method,
    function activity_stream_location (line 101) | def activity_stream_location
    function write_activity_stream_log (line 109) | def write_activity_stream_log(actor_method, actor_name, verb, object_m...

FILE: lib/ar_condition.rb
  class ARCondition (line 5) | class ARCondition
    method initialize (line 8) | def initialize(condition=nil)
    method add (line 13) | def add(condition)
    method << (line 25) | def <<(condition)

FILE: lib/diff.rb
  type RedmineDiff (line 1) | module RedmineDiff
    class Diff (line 2) | class Diff
      method lcs (line 6) | def Diff.lcs(a, b)
      method makediff (line 56) | def makediff(a, b)
      method compactdiffs (line 85) | def compactdiffs
      method initialize (line 110) | def initialize(diffs_or_a, b = nil, isstring = nil)
      method match (line 122) | def match(ai, bi)
      method discarda (line 127) | def discarda(i, elem)
      method discardb (line 131) | def discardb(i, elem)
      method compact (line 135) | def compact
      method compact! (line 139) | def compact!
      method inspect (line 143) | def inspect
  type Diffable (line 150) | module Diffable
    function diff (line 151) | def diff(b)
    function reverse_hash (line 158) | def reverse_hash(range = (0...self.length))
    function replacenextlarger (line 171) | def replacenextlarger(value, high = nil)
    function patch (line 194) | def patch(diff)
  class Array (line 235) | class Array
  class String (line 239) | class String

FILE: lib/faster_csv.rb
  class FasterCSV (line 83) | class FasterCSV
    class Row (line 95) | class Row
      method initialize (line 112) | def initialize(headers, fields, header_row = false)
      method header_row? (line 133) | def header_row?
      method field_row? (line 138) | def field_row?
      method headers (line 143) | def headers
      method field (line 160) | def field(header_or_index, minimum_index = 0)
      method []= (line 183) | def []=(*args)
      method << (line 216) | def <<(arg)
      method push (line 235) | def push(*args)
      method delete (line 251) | def delete(header_or_index, minimum_index = 0)
      method delete_if (line 266) | def delete_if(&block)
      method fields (line 280) | def fields(*headers_and_or_indices)
      method index (line 310) | def index(header, minimum_index = 0)
      method header? (line 318) | def header?(name)
      method field? (line 327) | def field?(data)
      method each (line 341) | def each(&block)
      method == (line 351) | def ==(other)
      method to_hash (line 359) | def to_hash
      method to_csv (line 369) | def to_csv(options = Hash.new)
      method inspect (line 375) | def inspect
    class Table (line 393) | class Table
      method initialize (line 406) | def initialize(array_of_rows)
      method by_col (line 432) | def by_col
      method by_col! (line 442) | def by_col!
      method by_col_or_row (line 457) | def by_col_or_row
      method by_col_or_row! (line 469) | def by_col_or_row!
      method by_row (line 484) | def by_row
      method by_row! (line 494) | def by_row!
      method headers (line 504) | def headers
      method [] (line 520) | def [](index_or_header)
      method []= (line 545) | def []=(index_or_header, value)
      method values_at (line 583) | def values_at(*indices_or_headers)
      method << (line 604) | def <<(row_or_array)
      method push (line 621) | def push(*rows)
      method delete (line 632) | def delete(index_or_header)
      method delete_if (line 649) | def delete_if(&block)
      method each (line 672) | def each(&block)
      method == (line 683) | def ==(other)
      method to_a (line 691) | def to_a
      method to_csv (line 705) | def to_csv(options = Hash.new)
      method inspect (line 716) | def inspect
    class MalformedCSVError (line 722) | class MalformedCSVError < RuntimeError; end
    method build_csv_interface (line 850) | def self.build_csv_interface
    method dump (line 919) | def self.dump(ary_of_objs, io = "", options = Hash.new)
    method filter (line 988) | def self.filter(*args)
    method foreach (line 1022) | def self.foreach(path, options = Hash.new, &block)
    method generate (line 1043) | def self.generate(*args)
    method generate_line (line 1066) | def self.generate_line(row, options = Hash.new)
    method instance (line 1080) | def self.instance(data = $stdout, options = Hash.new)
    method load (line 1108) | def self.load(io_or_str, options = Hash.new)
    method open (line 1187) | def self.open(*args)
    method parse (line 1219) | def self.parse(*args, &block)
    method parse_line (line 1239) | def self.parse_line(line, options = Hash.new)
    method read (line 1247) | def self.read(path, options = Hash.new)
    method readlines (line 1252) | def self.readlines(*args)
    method table (line 1263) | def self.table(path, options = Hash.new)
    method initialize (line 1397) | def initialize(data, options = Hash.new)
    method rewind (line 1432) | def rewind
    method << (line 1449) | def <<(row)
    method convert (line 1488) | def convert(name = nil, &converter)
    method header_convert (line 1503) | def header_convert(name = nil, &converter)
    method each (line 1519) | def each
    method read (line 1530) | def read
    method header_row? (line 1541) | def header_row?
    method shift (line 1552) | def shift
    method inspect (line 1666) | def inspect
    method init_separators (line 1703) | def init_separators(options)
    method init_parsers (line 1783) | def init_parsers(options)
    method init_converters (line 1815) | def init_converters(options, field_name = :converters)
    method init_headers (line 1845) | def init_headers(options)
    method add_converter (line 1865) | def add_converter(var_name, const, name = nil, &converter)
    method convert_fields (line 1888) | def convert_fields(fields, headers = false)
    method parse_headers (line 1916) | def parse_headers(row = nil)
    method add_unconverted_fields (line 1950) | def add_unconverted_fields(row, fields)
  function FasterCSV (line 1963) | def FasterCSV(*args, &block)
    class Row (line 95) | class Row
      method initialize (line 112) | def initialize(headers, fields, header_row = false)
      method header_row? (line 133) | def header_row?
      method field_row? (line 138) | def field_row?
      method headers (line 143) | def headers
      method field (line 160) | def field(header_or_index, minimum_index = 0)
      method []= (line 183) | def []=(*args)
      method << (line 216) | def <<(arg)
      method push (line 235) | def push(*args)
      method delete (line 251) | def delete(header_or_index, minimum_index = 0)
      method delete_if (line 266) | def delete_if(&block)
      method fields (line 280) | def fields(*headers_and_or_indices)
      method index (line 310) | def index(header, minimum_index = 0)
      method header? (line 318) | def header?(name)
      method field? (line 327) | def field?(data)
      method each (line 341) | def each(&block)
      method == (line 351) | def ==(other)
      method to_hash (line 359) | def to_hash
      method to_csv (line 369) | def to_csv(options = Hash.new)
      method inspect (line 375) | def inspect
    class Table (line 393) | class Table
      method initialize (line 406) | def initialize(array_of_rows)
      method by_col (line 432) | def by_col
      method by_col! (line 442) | def by_col!
      method by_col_or_row (line 457) | def by_col_or_row
      method by_col_or_row! (line 469) | def by_col_or_row!
      method by_row (line 484) | def by_row
      method by_row! (line 494) | def by_row!
      method headers (line 504) | def headers
      method [] (line 520) | def [](index_or_header)
      method []= (line 545) | def []=(index_or_header, value)
      method values_at (line 583) | def values_at(*indices_or_headers)
      method << (line 604) | def <<(row_or_array)
      method push (line 621) | def push(*rows)
      method delete (line 632) | def delete(index_or_header)
      method delete_if (line 649) | def delete_if(&block)
      method each (line 672) | def each(&block)
      method == (line 683) | def ==(other)
      method to_a (line 691) | def to_a
      method to_csv (line 705) | def to_csv(options = Hash.new)
      method inspect (line 716) | def inspect
    class MalformedCSVError (line 722) | class MalformedCSVError < RuntimeError; end
    method build_csv_interface (line 850) | def self.build_csv_interface
    method dump (line 919) | def self.dump(ary_of_objs, io = "", options = Hash.new)
    method filter (line 988) | def self.filter(*args)
    method foreach (line 1022) | def self.foreach(path, options = Hash.new, &block)
    method generate (line 1043) | def self.generate(*args)
    method generate_line (line 1066) | def self.generate_line(row, options = Hash.new)
    method instance (line 1080) | def self.instance(data = $stdout, options = Hash.new)
    method load (line 1108) | def self.load(io_or_str, options = Hash.new)
    method open (line 1187) | def self.open(*args)
    method parse (line 1219) | def self.parse(*args, &block)
    method parse_line (line 1239) | def self.parse_line(line, options = Hash.new)
    method read (line 1247) | def self.read(path, options = Hash.new)
    method readlines (line 1252) | def self.readlines(*args)
    method table (line 1263) | def self.table(path, options = Hash.new)
    method initialize (line 1397) | def initialize(data, options = Hash.new)
    method rewind (line 1432) | def rewind
    method << (line 1449) | def <<(row)
    method convert (line 1488) | def convert(name = nil, &converter)
    method header_convert (line 1503) | def header_convert(name = nil, &converter)
    method each (line 1519) | def each
    method read (line 1530) | def read
    method header_row? (line 1541) | def header_row?
    method shift (line 1552) | def shift
    method inspect (line 1666) | def inspect
    method init_separators (line 1703) | def init_separators(options)
    method init_parsers (line 1783) | def init_parsers(options)
    method init_converters (line 1815) | def init_converters(options, field_name = :converters)
    method init_headers (line 1845) | def init_headers(options)
    method add_converter (line 1865) | def add_converter(var_name, const, name = nil, &converter)
    method convert_fields (line 1888) | def convert_fields(fields, headers = false)
    method parse_headers (line 1916) | def parse_headers(row = nil)
    method add_unconverted_fields (line 1950) | def add_unconverted_fields(row, fields)
  function FCSV (line 1968) | def FCSV(*args, &block)
  class Array (line 1972) | class Array
    method to_csv (line 1974) | def to_csv(options = Hash.new)
  class String (line 1979) | class String
    method parse_csv (line 1981) | def parse_csv(options = Hash.new)

FILE: lib/float.rb
  class Float (line 1) | class Float
    method round_to (line 2) | def round_to(x)
    method ceil_to (line 6) | def ceil_to(x)
    method floor_to (line 10) | def floor_to(x)

FILE: lib/generators/redmine_plugin/redmine_plugin_generator.rb
  class RedminePluginGenerator (line 1) | class RedminePluginGenerator < Rails::Generator::NamedBase
    method initialize (line 4) | def initialize(runtime_args, runtime_options = {})
    method manifest (line 11) | def manifest

FILE: lib/generators/redmine_plugin_controller/redmine_plugin_controller_generator.rb
  class RedminePluginControllerGenerator (line 4) | class RedminePluginControllerGenerator < ControllerGenerator
    method initialize (line 7) | def initialize(runtime_args, runtime_options = {})
    method destination_root (line 15) | def destination_root
    method manifest (line 19) | def manifest

FILE: lib/generators/redmine_plugin_model/redmine_plugin_model_generator.rb
  class RedminePluginModelGenerator (line 4) | class RedminePluginModelGenerator < ModelGenerator
    method initialize (line 7) | def initialize(runtime_args, runtime_options = {})
    method destination_root (line 15) | def destination_root
    method manifest (line 19) | def manifest

FILE: lib/mention.rb
  class Mention (line 4) | class Mention
    method parse (line 5) | def self.parse(object, mentioner_id)
    method send_mention (line 20) | def self.send_mention(object,mentioner_id, mentioned_login, mention_text)

FILE: lib/redcloth3.rb
  class RedCloth3 (line 167) | class RedCloth3 < String
    method initialize (line 254) | def initialize( string, restrictions = [] )
    method to_html (line 266) | def to_html( *rules )
    method htmlesc (line 438) | def htmlesc( str, mode=:Quotes )
    method pgl (line 450) | def pgl( text )
    method pba (line 461) | def pba( text_in, element = "" )
    method block_textile_table (line 504) | def block_textile_table( text )
    method block_textile_lists (line 537) | def block_textile_lists( text )
    method block_textile_quotes (line 583) | def block_textile_quotes( text )
    method inline_textile_code (line 610) | def inline_textile_code( text )
    method lT (line 618) | def lT( text )
    method hard_break (line 622) | def hard_break( text )
    method blocks (line 628) | def blocks( text, deep_code = false )
    method textile_bq (line 672) | def textile_bq( tag, atts, cite, content )
    method textile_p (line 679) | def textile_p( tag, atts, cite, content )
    method textile_fn_ (line 691) | def textile_fn_( tag, num, atts, cite, content )
    method block_textile_prefix (line 700) | def block_textile_prefix( text )
    method block_markdown_setext (line 715) | def block_markdown_setext( text )
    method block_markdown_atx (line 730) | def block_markdown_atx( text )
    method block_markdown_bq (line 741) | def block_markdown_bq( text )
    method block_markdown_rule (line 755) | def block_markdown_rule( text )
    method block_markdown_lists (line 762) | def block_markdown_lists( text )
    method inline_textile_span (line 765) | def inline_textile_span( text )
    method inline_textile_link (line 805) | def inline_textile_link( text )
    method inline_markdown_reflink (line 839) | def inline_markdown_reflink( text )
    method inline_markdown_link (line 871) | def inline_markdown_link( text )
    method refs (line 886) | def refs( text )
    method refs_textile (line 892) | def refs_textile( text )
    method refs_markdown (line 900) | def refs_markdown( text )
    method check_refs (line 909) | def check_refs( text )
    method inline_textile_image (line 927) | def inline_textile_image( text )
    method shelve (line 961) | def shelve( val )
    method retrieve (line 966) | def retrieve( text )
    method incoming_entities (line 972) | def incoming_entities( text )
    method no_textile (line 980) | def no_textile( text )
    method clean_white_space (line 987) | def clean_white_space( text )
    method flush_left (line 1001) | def flush_left( text )
    method footnote_ref (line 1013) | def footnote_ref( text )
    method glyphs_textile (line 1025) | def glyphs_textile( text, level = 0 )
    method rip_offtags (line 1052) | def rip_offtags( text )
    method smooth_offtags (line 1089) | def smooth_offtags( text )
    method inline (line 1096) | def inline( text )
    method h_align (line 1104) | def h_align( text )
    method v_align (line 1108) | def v_align( text )
    method textile_popup_help (line 1112) | def textile_popup_help( name, windowW, windowH )
    method clean_html (line 1151) | def clean_html( text, tags = BASIC_TAGS )
    method escape_html_tags (line 1178) | def escape_html_tags(text)

FILE: lib/redmine/about.rb
  type Redmine (line 1) | module Redmine
    class About (line 2) | class About
      method print_plugin_info (line 3) | def self.print_plugin_info

FILE: lib/redmine/access_control.rb
  type Redmine (line 4) | module Redmine
    type AccessControl (line 5) | module AccessControl
      function map (line 8) | def map
      function permissions (line 15) | def permissions
      function permission (line 21) | def permission(name)
      function allowed_actions (line 26) | def allowed_actions(permission_name)
      function public_permissions (line 31) | def public_permissions
      function members_only_permissions (line 35) | def members_only_permissions
      function loggedin_only_permissions (line 39) | def loggedin_only_permissions
      function available_project_modules (line 43) | def available_project_modules
      function modules_permissions (line 47) | def modules_permissions(modules)
      class Mapper (line 52) | class Mapper
        method initialize (line 53) | def initialize
        method permission (line 57) | def permission(name, hash, options={})
        method project_module (line 63) | def project_module(name, options={})
        method mapped_permissions (line 69) | def mapped_permissions
      class Permission (line 74) | class Permission
        method initialize (line 77) | def initialize(name, hash, options)
        method public? (line 93) | def public?
        method require_member? (line 97) | def require_member?
        method require_loggedin? (line 101) | def require_loggedin?

FILE: lib/redmine/access_keys.rb
  type Redmine (line 5) | module Redmine
    type AccessKeys (line 6) | module AccessKeys
      function key_for (line 14) | def self.key_for(action)

FILE: lib/redmine/activity.rb
  type Redmine (line 5) | module Redmine
    type Activity (line 6) | module Activity
      function map (line 15) | def map(&block)
      function register (line 20) | def register(event_type, options={})

FILE: lib/redmine/activity/fetcher.rb
  type Redmine (line 5) | module Redmine
    type Activity (line 6) | module Activity
      class Fetcher (line 8) | class Fetcher
        method initialize (line 14) | def initialize(user, options={})
        method event_types (line 24) | def event_types
        method scope_select (line 33) | def scope_select(&block)
        method scope= (line 39) | def scope=(s)
        method default_scope! (line 51) | def default_scope!
        method events (line 57) | def events(from = nil, to = nil, options={})
        method constantized_providers (line 77) | def constantized_providers(event_type)

FILE: lib/redmine/core_ext/string.rb
  class String (line 4) | class String #:nodoc:

FILE: lib/redmine/core_ext/string/conversions.rb
  type Redmine (line 5) | module Redmine #:nodoc:
    type CoreExtensions (line 6) | module CoreExtensions #:nodoc:
      type String (line 7) | module String #:nodoc:
        type Conversions (line 9) | module Conversions
          function to_hours (line 11) | def to_hours
          function to_a (line 29) | def to_a

FILE: lib/redmine/core_ext/string/inflections.rb
  type Redmine (line 4) | module Redmine #:nodoc:
    type CoreExtensions (line 5) | module CoreExtensions #:nodoc:
      type String (line 6) | module String #:nodoc:
        type Inflections (line 8) | module Inflections
          function with_leading_slash (line 9) | def with_leading_slash

FILE: lib/redmine/default_data/loader.rb
  type Redmine (line 4) | module Redmine
    type DefaultData (line 5) | module DefaultData
      class DataAlreadyLoaded (line 6) | class DataAlreadyLoaded < Exception; end
      type Loader (line 8) | module Loader
        function no_data? (line 14) | def no_data?
        function load (line 23) | def load(lang=nil)

FILE: lib/redmine/export/pdf.rb
  type Redmine (line 10) | module Redmine
    type Export (line 11) | module Export
      type PDF (line 12) | module PDF
        class IFPDF (line 16) | class IFPDF < FPDF
          method initialize (line 20) | def initialize(lang)
          method SetFontStyle (line 47) | def SetFontStyle(style, size)
          method SetTitle (line 51) | def SetTitle(txt)
          method textstring (line 63) | def textstring(s)
          method Cell (line 72) | def Cell(w,h=0,txt='',border=0,ln=0,align='',fill=0,link='')
          method Footer (line 87) | def Footer
        function issues_to_pdf (line 99) | def issues_to_pdf(issues, project, query)
        function issue_to_pdf (line 163) | def issue_to_pdf(issue)
        function gantt_to_pdf (line 280) | def gantt_to_pdf(gantt, project)

FILE: lib/redmine/helpers/calendar.rb
  type Redmine (line 4) | module Redmine
    type Helpers (line 5) | module Helpers
      class Calendar (line 8) | class Calendar
        method initialize (line 12) | def initialize(date, lang = current_language, period = :month)
        method events= (line 35) | def events=(events)
        method events_on (line 42) | def events_on(day)
        method month (line 47) | def month
        method first_wday (line 53) | def first_wday
        method last_wday (line 64) | def last_wday

FILE: lib/redmine/helpers/gantt.rb
  type Redmine (line 5) | module Redmine
    type Helpers (line 6) | module Helpers
      class Gantt (line 8) | class Gantt
        method initialize (line 11) | def initialize(options={})
        method events= (line 42) | def events=(e)
        method params (line 46) | def params
        method params_previous (line 50) | def params_previous
        method params_next (line 54) | def params_next
        method to_image (line 60) | def to_image(format='PNG')

FILE: lib/redmine/i18n.rb
  type Redmine (line 1) | module Redmine
    type I18n (line 2) | module I18n
      function included (line 3) | def self.included(base)
      function l (line 7) | def l(*args)
      function l_or_humanize (line 24) | def l_or_humanize(s, options={})
      function l_hours (line 29) | def l_hours(hours)
      function ll (line 34) | def ll(lang, str, value=nil)
      function format_date (line 38) | def format_date(date)
      function format_time (line 43) | def format_time(time, include_date = true)
      function local_time (line 52) | def local_time(time)
      function day_name (line 61) | def day_name(day)
      function month_name (line 65) | def month_name(month)
      function valid_languages (line 69) | def valid_languages
      function find_language (line 73) | def find_language(lang)
      function set_language_if_valid (line 78) | def set_language_if_valid(lang)
      function current_language (line 84) | def current_language

FILE: lib/redmine/imap.rb
  type Redmine (line 7) | module Redmine
    type IMAP (line 8) | module IMAP
      function check (line 10) | def check(imap_options={}, options={})
      function logger (line 42) | def logger

FILE: lib/redmine/info.rb
  type Redmine (line 1) | module Redmine
    type Info (line 2) | module Info
      function app_name (line 4) | def app_name; 'Redmine' end
      function url (line 5) | def url; 'http://www.redmine.org/' end
      function help_url (line 6) | def help_url; 'http://www.redmine.org/guide' end
      function versioned_name (line 7) | def versioned_name; "#{app_name} #{Redmine::VERSION}" end
      function issue (line 10) | def issue(issue_id)

FILE: lib/redmine/menu_manager.rb
  type TreeNodePatch (line 7) | module TreeNodePatch
    function included (line 8) | def self.included(base)
    type InstanceMethods (line 22) | module InstanceMethods
      function prepend (line 26) | def prepend(child)
      function add_at (line 39) | def add_at(child, position)
      function add_last (line 49) | def add_last(child)
      function add (line 63) | def add(child)
      function position (line 76) | def position
  type Redmine (line 83) | module Redmine
    type MenuManager (line 84) | module MenuManager
      class MenuError (line 85) | class MenuError < StandardError #:nodoc:
      type MenuController (line 88) | module MenuController
        function included (line 89) | def self.included(base)
        type ClassMethods (line 93) | module ClassMethods
          function menu_item (line 105) | def menu_item(id, options = {})
        function menu_items (line 115) | def menu_items
        function current_menu_item (line 120) | def current_menu_item
        function redirect_to_project_menu_item (line 127) | def redirect_to_project_menu_item(project, name)
      type MenuHelper (line 137) | module MenuHelper
        function current_menu_item (line 139) | def current_menu_item
        function render_main_menu (line 144) | def render_main_menu(project)
        function render_menu (line 148) | def render_menu(menu, project=nil)
        function render_menu_node (line 156) | def render_menu_node(node, project=nil)
        function render_menu_node_with_children (line 166) | def render_menu_node_with_children(node, project=nil)
        function render_unattached_children_menu (line 193) | def render_unattached_children_menu(node, project)
        function render_single_menu_node (line 209) | def render_single_menu_node(item, caption, url, selected)
        function render_unattached_menu_item (line 213) | def render_unattached_menu_item(menu_item, project)
        function menu_items_for (line 223) | def menu_items_for(menu, project=nil)
        function extract_node_details (line 237) | def extract_node_details(node, project=nil)
        function allowed_node? (line 255) | def allowed_node?(node, user, project)
      function map (line 271) | def map(menu_name)
      function items (line 281) | def items(menu_name)
      class Mapper (line 286) | class Mapper
        method initialize (line 287) | def initialize(menu, items)
        method push (line 308) | def push(name, url, options={})
        method delete (line 350) | def delete(name)
        method exists? (line 357) | def exists?(name)
        method find (line 361) | def find(name)
        method position_of (line 365) | def position_of(name)
      class MenuItem (line 374) | class MenuItem < Tree::TreeNode
        method initialize (line 378) | def initialize(name, url, options)
        method caption (line 396) | def caption(project=nil)
        method html_options (line 410) | def html_options(options={})

FILE: lib/redmine/mime_type.rb
  type Redmine (line 4) | module Redmine
    type MimeType (line 5) | module MimeType
      function of (line 42) | def self.of(name)
      function css_class_of (line 50) | def self.css_class_of(name)
      function main_mimetype_of (line 55) | def self.main_mimetype_of(name)
      function is_type? (line 62) | def self.is_type?(type, name)

FILE: lib/redmine/platform.rb
  type Redmine (line 5) | module Redmine
    type Platform (line 6) | module Platform
      function mswin? (line 8) | def mswin?

FILE: lib/redmine/plugin.rb
  type Redmine (line 4) | module Redmine #:nodoc:
    class PluginNotFound (line 6) | class PluginNotFound < StandardError; end
    class PluginRequirementError (line 7) | class PluginRequirementError < StandardError; end
    class Plugin (line 31) | class Plugin
      method def_field (line 37) | def def_field(*names)
      method register (line 51) | def self.register(id, &block)
      method all (line 63) | def self.all
      method find (line 69) | def self.find(id)
      method clear (line 75) | def self.clear
      method initialize (line 79) | def initialize(id)
      method <=> (line 83) | def <=>(plugin)
      method requires_redmine (line 98) | def requires_redmine(arg)
      method requires_redmine_plugin (line 132) | def requires_redmine_plugin(plugin_name, arg)
      method menu (line 163) | def menu(menu, item, url, options={})
      method delete_menu_item (line 169) | def delete_menu_item(menu, item)
      method permission (line 195) | def permission(name, actions, options = {})
      method project_module (line 210) | def project_module(name, &block)
      method activity_provider (line 238) | def activity_provider(*args)
      method wiki_format_provider (line 248) | def wiki_format_provider(name, formatter, helper)
      method configurable? (line 253) | def configurable?

FILE: lib/redmine/search.rb
  type Redmine (line 18) | module Redmine
    type Search (line 19) | module Search
      type Controller (line 20) | module Controller
        function included (line 21) | def self.included(base)
        type ClassMethods (line 25) | module ClassMethods
          function default_search_scope (line 34) | def default_search_scope(id, options = {})
        function default_search_scopes (line 44) | def default_search_scopes
        function default_search_scope (line 49) | def default_search_scope

FILE: lib/redmine/themes.rb
  type Redmine (line 4) | module Redmine
    type Themes (line 5) | module Themes
      function themes (line 8) | def self.themes
      function rescan (line 13) | def self.rescan
      function theme (line 18) | def self.theme(id)
      class Theme (line 23) | class Theme
        method initialize (line 26) | def initialize(path)
        method id (line 33) | def id; dir end
        method <=> (line 35) | def <=>(theme)
      function scan_themes (line 42) | def self.scan_themes
  type ApplicationHelper (line 52) | module ApplicationHelper
    function stylesheet_path (line 53) | def stylesheet_path(source)
    function path_to_stylesheet (line 59) | def path_to_stylesheet(source)

FILE: lib/redmine/unified_diff.rb
  type Redmine (line 5) | module Redmine
    class UnifiedDiff (line 7) | class UnifiedDiff < Array
      method initialize (line 8) | def initialize(diff, options={})
      method truncated? (line 31) | def truncated?; @truncated; end
    class DiffTable (line 35) | class DiffTable < Hash
      method initialize (line 40) | def initialize(type="inline")
      method add_line (line 51) | def add_line(line)
      method inspect (line 74) | def inspect
      method sbs? (line 84) | def sbs?(type, func)
      method escapeHTML (line 110) | def escapeHTML(line)
      method parse_line (line 114) | def parse_line(line, type="inline")
    class Diff (line 152) | class Diff
      method initialize (line 160) | def initialize()
      method inspect (line 169) | def inspect

FILE: lib/redmine/utils.rb
  type Redmine (line 17) | module Redmine
    type Utils (line 18) | module Utils
      function relative_url_root (line 21) | def relative_url_root
      function relative_url_root= (line 28) | def relative_url_root=(arg)

FILE: lib/redmine/version.rb
  type Redmine (line 3) | module Redmine
    type VERSION (line 4) | module VERSION #:nodoc:
      function revision (line 15) | def self.revision
      function to_a (line 40) | def self.to_a; ARRAY end
      function to_s (line 41) | def self.to_s; STRING end

FILE: lib/redmine/views/my_page/block.rb
  type Redmine (line 4) | module Redmine
    type Views (line 5) | module Views
      type MyPage (line 6) | module MyPage
        type Block (line 7) | module Block
          function additional_blocks (line 8) | def self.additional_blocks

FILE: lib/redmine/views/other_formats_builder.rb
  type Redmine (line 4) | module Redmine
    type Views (line 5) | module Views
      class OtherFormatsBuilder (line 6) | class OtherFormatsBuilder
        method initialize (line 7) | def initialize(view)
        method link_to (line 11) | def link_to(name, options={})

FILE: lib/redmine/wiki_formatting.rb
  type Redmine (line 5) | module Redmine
    type WikiFormatting (line 6) | module WikiFormatting
      function map (line 10) | def map
      function register (line 14) | def register(name, formatter, helper)
      function formatter_for (line 19) | def formatter_for(name)
      function helper_for (line 24) | def helper_for(name)
      function format_names (line 29) | def format_names
      function to_html (line 33) | def to_html(format, text, options = {}, &block)
      type NullFormatter (line 39) | module NullFormatter
        class Formatter (line 40) | class Formatter
          method initialize (line 45) | def initialize(text)
          method to_html (line 49) | def to_html(*args)
        type Helper (line 54) | module Helper
          function initial_page_content (line 55) | def initial_page_content(page)

FILE: lib/redmine/wiki_formatting/macros.rb
  type Redmine (line 4) | module Redmine
    type WikiFormatting (line 5) | module WikiFormatting
      type Macros (line 6) | module Macros
        type Definitions (line 7) | module Definitions
          function exec_macro (line 8) | def exec_macro(name, obj, args)
          function extract_macro_options (line 13) | def extract_macro_options(args, *keys)
        function register (line 39) | def register(&block)
        function macro (line 45) | def macro(name, &block)
        function desc (line 54) | def desc(txt)

FILE: lib/redmine/wiki_formatting/textile/formatter.rb
  type Redmine (line 8) | module Redmine
    type WikiFormatting (line 9) | module WikiFormatting
      type Textile (line 10) | module Textile
        class Formatter (line 11) | class Formatter < RedCloth3
          method initialize (line 16) | def initialize(*args)
          method to_html (line 23) | def to_html(*rules, &block)
          method hard_break (line 33) | def hard_break( text )
          method smooth_offtags (line 38) | def smooth_offtags( text )
          method textile_p_withtoc (line 53) | def textile_p_withtoc(tag, atts, cite, content)
          method inline_toc (line 77) | def inline_toc(text)
          method inline_macros (line 102) | def inline_macros(text)
          method inline_auto_link (line 138) | def inline_auto_link(text)
          method inline_auto_mailto (line 158) | def inline_auto_mailto(text)

FILE: lib/redmine/wiki_formatting/textile/helper.rb
  type Redmine (line 5) | module Redmine
    type WikiFormatting (line 6) | module WikiFormatting
      type Textile (line 7) | module Textile
        type Helper (line 8) | module Helper
          function initial_page_content (line 10) | def initial_page_content(page)

FILE: lib/string.rb
  class String (line 3) | class String
    method truncate_html (line 4) | def truncate_html(len = 30)
    method attrs_to_s (line 36) | def attrs_to_s(attrs)

FILE: lib/tabular_form_builder.rb
  class TabularFormBuilder (line 6) | class TabularFormBuilder < ActionView::Helpers::FormBuilder
    method initialize (line 9) | def initialize(object_name, object, template, options, proc)
    method select (line 23) | def select(field, choices, options = {}, html_options = {})
    method label_for_field (line 28) | def label_for_field(field, options = {})

FILE: lib/tasks/autoaccept_commitrequests.rake
  function helpers (line 6) | def helpers

FILE: lib/tasks/close_retros.rake
  function helpers (line 3) | def helpers

FILE: lib/tasks/deprecated.rake
  function deprecated_task (line 1) | def deprecated_task(name, new_name)

FILE: lib/tasks/migrate_from_mantis.rake
  type MantisMigrate (line 13) | module MantisMigrate
    class MantisUser (line 72) | class MantisUser < ActiveRecord::Base
      method firstname (line 75) | def firstname
      method lastname (line 81) | def lastname
      method email (line 88) | def email
      method username (line 97) | def username
    class MantisProject (line 102) | class MantisProject < ActiveRecord::Base
      method name (line 109) | def name
      method identifier (line 113) | def identifier
    class MantisVersion (line 118) | class MantisVersion < ActiveRecord::Base
      method version (line 121) | def version
      method description (line 125) | def description
    class MantisCategory (line 130) | class MantisCategory < ActiveRecord::Base
    class MantisProjectUser (line 134) | class MantisProjectUser < ActiveRecord::Base
    class MantisBug (line 138) | class MantisBug < ActiveRecord::Base
    class MantisBugText (line 146) | class MantisBugText < ActiveRecord::Base
      method full_description (line 151) | def full_description
    class MantisBugNote (line 159) | class MantisBugNote < ActiveRecord::Base
    class MantisBugNoteText (line 165) | class MantisBugNoteText < ActiveRecord::Base
    class MantisBugFile (line 169) | class MantisBugFile < ActiveRecord::Base
      method size (line 172) | def size
      method original_filename (line 176) | def original_filename
      method content_type (line 180) | def content_type
      method read (line 184) | def read(*args)
    class MantisBugRelationship (line 194) | class MantisBugRelationship < ActiveRecord::Base
    class MantisBugMonitor (line 198) | class MantisBugMonitor < ActiveRecord::Base
    class MantisNews (line 202) | class MantisNews < ActiveRecord::Base
    class MantisCustomField (line 206) | class MantisCustomField < ActiveRecord::Base
      method format (line 212) | def format
      method name (line 216) | def name
    class MantisCustomFieldProject (line 221) | class MantisCustomFieldProject < ActiveRecord::Base
    class MantisCustomFieldString (line 225) | class MantisCustomFieldString < ActiveRecord::Base
    function migrate (line 230) | def self.migrate
    function encoding (line 432) | def self.encoding(charset)
    function establish_connection (line 438) | def self.establish_connection(params)
    function encode (line 446) | def self.encode(text)

FILE: lib/tasks/migrate_from_trac.rake
  type TracMigrate (line 25) | module TracMigrate
    class ::Time (line 71) | class ::Time
      method now (line 74) | def now
      method fake (line 77) | def fake(time)
    class TracComponent (line 86) | class TracComponent < ActiveRecord::Base
    class TracMilestone (line 90) | class TracMilestone < ActiveRecord::Base
      method due (line 93) | def due
      method completed (line 101) | def completed
      method description (line 109) | def description
    class TracTicketCustom (line 115) | class TracTicketCustom < ActiveRecord::Base
    class TracAttachment (line 119) | class TracAttachment < ActiveRecord::Base
      method time (line 123) | def time; Time.at(read_attribute(:time)) end
      method original_filename (line 125) | def original_filename
      method content_type (line 129) | def content_type
      method exist? (line 133) | def exist?
      method open (line 137) | def open
      method read (line 144) | def read(*args)
      method description (line 148) | def description
      method trac_fullpath (line 153) | def trac_fullpath
    class TracTicket (line 160) | class TracTicket < ActiveRecord::Base
      method ticket_type (line 172) | def ticket_type
      method summary (line 176) | def summary
      method description (line 180) | def description
      method time (line 184) | def time; Time.at(read_attribute(:time)) end
      method changetime (line 185) | def changetime; Time.at(read_attribute(:changetime)) end
    class TracTicketChange (line 188) | class TracTicketChange < ActiveRecord::Base
      method time (line 191) | def time; Time.at(read_attribute(:time)) end
    class TracWikiPage (line 202) | class TracWikiPage < ActiveRecord::Base
      method columns (line 211) | def self.columns
      method time (line 216) | def time; Time.at(read_attribute(:time)) end
    class TracPermission (line 219) | class TracPermission < ActiveRecord::Base
    class TracSessionAttribute (line 223) | class TracSessionAttribute < ActiveRecord::Base
    function find_or_create_user (line 227) | def self.find_or_create_user(username, project_member = false)
    function convert_wiki_text (line 272) | def self.convert_wiki_text(text)
    function migrate (line 365) | def self.migrate
    function limit_for (line 596) | def self.limit_for(klass, attribute)
    function encoding (line 600) | def self.encoding(charset)
    function set_trac_directory (line 607) | def self.set_trac_directory(path)
    function trac_directory (line 617) | def self.trac_directory
    function set_trac_adapter (line 621) | def self.set_trac_adapter(adapter)
    function set_trac_db_host (line 632) | def self.set_trac_db_host(host)
    function set_trac_db_port (line 637) | def self.set_trac_db_port(port)
    function set_trac_db_name (line 642) | def self.set_trac_db_name(name)
    function set_trac_db_username (line 647) | def self.set_trac_db_username(username)
    function set_trac_db_password (line 651) | def self.set_trac_db_password(password)
    function set_trac_db_schema (line 655) | def self.set_trac_db_schema(schema)
    function trac_db_path (line 661) | def self.trac_db_path; "#{trac_directory}/db/trac.db" end
    function trac_attachments_directory (line 662) | def self.trac_attachments_directory; "#{trac_directory}/attachments" end
    function target_project_identifier (line 664) | def self.target_project_identifier(identifier)
    function connection_params (line 685) | def self.connection_params
    function establish_connection (line 701) | def self.establish_connection
    function encode (line 710) | def self.encode(text)
  function prompt (line 731) | def prompt(text, options = {}, &block)

FILE: lib/tasks/plugins.rake
  class PluginSourceAnnotationExtractor (line 5) | class PluginSourceAnnotationExtractor < SourceAnnotationExtractor
    method find_in (line 10) | def find_in(dir)

FILE: lib/tasks/rspec.rake
  type Spec (line 24) | module Spec
    type Rake (line 25) | module Rake
      class SpecTask (line 26) | class SpecTask
        method initialize (line 27) | def initialize(name)

FILE: lib/tasks/steak.rake
  type Spec (line 6) | module Spec
    type Rake (line 7) | module Rake
      class SpecTask (line 8) | class SpecTask
        method initialize (line 9) | def initialize(name)

FILE: public/javascripts/application.js
  function initialize (line 7) | function initialize(){
  function break_long_words (line 14) | function break_long_words(){
  function arm_fancybox (line 18) | function arm_fancybox(){
  function arm_checkboxes (line 43) | function arm_checkboxes(){
  function prep_jumpbox (line 58) | function prep_jumpbox(){
  function adjust_jumpbox_width (line 81) | function adjust_jumpbox_width(){
  function show_fancybox (line 88) | function show_fancybox(url,message){
  function checkAll (line 108) | function checkAll (id, checked) {
  function toggleCheckboxesBySelector (line 112) | function toggleCheckboxesBySelector(selector) {
  function showAndScrollTo (line 119) | function showAndScrollTo(id, focus) {
  function toggleRowGroup (line 125) | function toggleRowGroup(el) {
  function toggleFieldset (line 135) | function toggleFieldset(el) {
  function addFileField (line 143) | function addFileField() {
  function showTab (line 161) | function showTab(name) {
  function moveTabRight (line 169) | function moveTabRight(el) {
  function moveTabLeft (line 188) | function moveTabLeft(el) {
  function displayTabsButtons (line 199) | function displayTabsButtons() {
  function setPredecessorFieldsVisibility (line 218) | function setPredecessorFieldsVisibility() {
  function collapseScmEntry (line 227) | function collapseScmEntry(id) {
  function expandScmEntry (line 238) | function expandScmEntry(id) {
  function scmEntryClick (line 249) | function scmEntryClick(id) {
  function scmEntryLoaded (line 267) | function scmEntryLoaded(id) {
  function randomKey (line 273) | function randomKey(size) {
  function url_for (line 314) | function url_for(options){
  function h (line 335) | function h(s) {
  function text_only (line 349) | function text_only(text){
  function display_sparks (line 356) | function display_sparks(){
  function humane_date (line 398) | function humane_date(date_str){
  function promptToRemote (line 448) | function promptToRemote(text, param, url) {
  function send_remote (line 457) | function send_remote(url,param,note){
  function comment_prompt_to_remote (line 468) | function comment_prompt_to_remote(dataId,title,message,param,url,required){
  function show_tip (line 957) | function show_tip(){
  function create_wrapper (line 1011) | function create_wrapper(noTip){
  function _HideWrapper (line 1079) | function _HideWrapper() {
  function _Calculate (line 1108) | function _Calculate(firstTime) {
  function innerHighlight (line 1447) | function innerHighlight(node, pat) {
  function wbr (line 1616) | function wbr(string,length){
  function getCaretPosition (line 1685) | function getCaretPosition(e) {
  function setCaretPosition (line 1696) | function setCaretPosition(e, start, end) {
  function getWordBeforeCaretPosition (line 1708) | function getWordBeforeCaretPosition(e) {
  function getWordBeforeCaret (line 1717) | function getWordBeforeCaret(e) {
  function replaceWordBeforeCaret (line 1723) | function replaceWordBeforeCaret(e, word) {
  function bind_autocomplete_mentions (line 1837) | function bind_autocomplete_mentions(){
  function bind_relations_autocomplete (line 1846) | function bind_relations_autocomplete(projectId){
  function help_popup (line 1893) | function help_popup(){

FILE: public/javascripts/calendar/calendar-setup.js
  function param_default (line 63) | function param_default(pname, def) { if (typeof params[pname] == "undefi...
  function onSelect (line 105) | function onSelect(cal) {

FILE: public/javascripts/calendar/calendar.js
  function setMonth (line 618) | function setMonth(m) {
  function makeTimePart (line 847) | function makeTimePart(className, init, range_start, range_end) {
  function setVars (line 1002) | function setVars() {
  function prevMonth (line 1009) | function prevMonth() {
  function nextMonth (line 1014) | function nextMonth() {
  function fixPosition (line 1380) | function fixPosition(box) {
  function getVisib (line 1465) | function getVisib(obj){

FILE: public/javascripts/context_menu.js
  function toggleIssuesSelection (line 192) | function toggleIssuesSelection(el) {
  function window_size (line 207) | function window_size() {

FILE: public/javascripts/controls.js
  function addText (line 561) | function addText(mode, condition) {
  function fallback (line 857) | function fallback(name, expr) {

FILE: public/javascripts/dashboard.js
  function start (line 88) | function start(){
  function set_sub_toggle (line 118) | function set_sub_toggle(){
  function load_dashboard (line 141) | function load_dashboard(){
  function parse_xml (line 171) | function parse_xml(xml){
  function load_dashboard_data (line 181) | function load_dashboard_data(){
  function refresh_local_data (line 221) | function refresh_local_data(){
  function save_local_data (line 242) | function save_local_data(){
  function get_local_data (line 258) | function get_local_data(){
  function load_dashboard_data_for_statuses (line 290) | function load_dashboard_data_for_statuses(status_ids,name){
  function data_ready (line 345) | function data_ready(html,name){
  function replace_reloading_images_for_panels (line 375) | function replace_reloading_images_for_panels(){
  function enable_refresh_button (line 411) | function enable_refresh_button(){
  function disable_refresh_button (line 415) | function disable_refresh_button(){
  function retros_ready (line 419) | function retros_ready(html,load_remaining_panels){
  function insert_retros (line 424) | function insert_retros(){
  function add_retro (line 431) | function add_retro(rdataId,position,scroll){
  function make_text_boxes_toggle_keyboard_shortcuts (line 450) | function make_text_boxes_toggle_keyboard_shortcuts(){
  function prepare_page (line 481) | function prepare_page(){
  function start_timer (line 489) | function start_timer(){
  function stop_timer (line 502) | function stop_timer(timer){
  function prepare_item_lookup_array (line 507) | function prepare_item_lookup_array(){
  function display_panels (line 515) | function display_panels(){
  function wipe_panels (line 527) | function wipe_panels(){
  function sort_panels (line 532) | function sort_panels(){
  function add_items_to_panels (line 538) | function add_items_to_panels(last_item){
  function adjust_button_container_widths (line 547) | function adjust_button_container_widths(){
  function rdata_ready (line 569) | function rdata_ready(html,rdataId){
  function show_item_fancybox (line 588) | function show_item_fancybox(dataId){
  function show_details_flyover (line 601) | function show_details_flyover(dataId,callingElement,delayshow){
  function show_estimate_flyover (line 614) | function show_estimate_flyover(dataId,callingElement){
  function show_points_flyover (line 626) | function show_points_flyover(dataId,callingElement){
  function hide_bubbletips (line 638) | function hide_bubbletips(){
  function show_pri_flyover (line 643) | function show_pri_flyover(dataId,callingElement){
  function show_agree_flyover (line 656) | function show_agree_flyover(dataId,callingElement){
  function show_accept_flyover (line 669) | function show_accept_flyover(dataId,callingElement){
  function is_visible (line 687) | function is_visible(item){
  function is_startable (line 693) | function is_startable(item){
  function add_item (line 703) | function add_item(dataId,position,scroll,panelid){
  function generate_estimate_flyover (line 762) | function generate_estimate_flyover(dataId){
  function generate_points_flyover (line 854) | function generate_points_flyover(dataId){
  function prompt_for_number (line 873) | function prompt_for_number(message,default_data){
  function prompt_for_custom_estimate (line 886) | function prompt_for_custom_estimate(dataId,points){
  function generate_custom_estimate_button (line 893) | function generate_custom_estimate_button(dataId,user_estimate){
  function convert_points_to_complexity (line 910) | function convert_points_to_complexity(points){
  function generate_estimate_button (line 922) | function generate_estimate_button(points,credits, itemId, dataId, comment){
  function generate_pri_action (line 944) | function generate_pri_action(points, itemId, dataId){
  function pri_text (line 949) | function pri_text(points){
  function agree_text (line 964) | function agree_text(points){
  function accept_text (line 982) | function accept_text(points){
  function generate_pri_flyover (line 1000) | function generate_pri_flyover(dataId){
  function generate_flyover (line 1052) | function generate_flyover(dataId,type,title,you_voted,action_header,butt...
  function generate_agree_flyover (line 1112) | function generate_agree_flyover(dataId){
  function generate_accept_flyover (line 1172) | function generate_accept_flyover(dataId){
  function generate_details_flyover_description (line 1232) | function generate_details_flyover_description(item){
  function generate_comments_section (line 1254) | function generate_comments_section(dataId){
  function generate_comments (line 1279) | function generate_comments(dataId,blank_if_no_comments){
  function generate_comment (line 1323) | function generate_comment(author,note,created_at,itemId,last_comment,jou...
  function generate_todos (line 1344) | function generate_todos(dataId,blank_if_no_todos, item_editable){
  function generate_todo (line 1375) | function generate_todo(subject,completed_on,todoId,owner_login,dataId, i...
  function edit_todo (line 1421) | function edit_todo(todoId, dataId){
  function edit_comment (line 1439) | function edit_comment(journalId,dataId){
  function edit_comment_cancel (line 1457) | function edit_comment_cancel(journalId,dataId){
  function edit_comment_post (line 1463) | function edit_comment_post(journalId,dataId){
  function edit_todo_post (line 1499) | function edit_todo_post(todoId, dataId){
  function update_todo_buttons (line 1551) | function update_todo_buttons(todoId,show){
  function credits_to_points (line 1563) | function credits_to_points(credits,base){
  function has_current_user_estimated (line 1571) | function has_current_user_estimated(item){
  function generate_item_estimate_button (line 1584) | function generate_item_estimate_button(dataId,points){
  function add_new_link (line 1614) | function add_new_link(){
  function remove_new_link (line 1618) | function remove_new_link(){
  function generate_new_link (line 1623) | function generate_new_link(){
  function generate_item (line 1642) | function generate_item(dataId){
  function generate_tags (line 1692) | function generate_tags(tag_list){
  function generate_item_lightbox (line 1717) | function generate_item_lightbox(dataId){
  function update_lightbox_lock_version (line 1752) | function update_lightbox_lock_version(dataId){
  function generate_retro (line 1756) | function generate_retro(rdataId){
  function display_retro (line 1795) | function display_retro(rdataId){
  function generate_notice (line 1835) | function generate_notice(noticeHtml, noticeId){
  function is_cancelable (line 1856) | function is_cancelable(dataId){
  function buttons_for (line 1888) | function buttons_for(dataId,expanded){
  function is_part_of_team (line 1952) | function is_part_of_team(item){
  function agree_buttons_root (line 1964) | function agree_buttons_root(dataId,include_start_button,expanded){
  function accept_buttons_root (line 2076) | function accept_buttons_root(dataId,include_start_button,expanded){
  function pri_button (line 2128) | function pri_button(dataId){
  function generate_pri_button (line 2146) | function generate_pri_button(dataId,direction,pri){
  function votes_button (line 2154) | function votes_button(dataId,votes_total,user_voted){
  function dash_button (line 2183) | function dash_button(type,dataId,hide,options_param){
  function click_start (line 2218) | function click_start(dataId,source,data){
  function click_reject (line 2238) | function click_reject(dataId,source,data){
  function click_estimate (line 2248) | function click_estimate(dataId,source,data,comment){
  function click_estimate_from_flyover (line 2253) | function click_estimate_from_flyover(dataId,source,data,comment){
  function click_finish (line 2268) | function click_finish(dataId,source,data){
  function click_restart (line 2276) | function click_restart(dataId,source,data){
  function click_agree (line 2288) | function click_agree(dataId,source,data){
  function click_agree_root (line 2320) | function click_agree_root(dataId,source,data){
  function click_accept_root (line 2325) | function click_accept_root(dataId,source,data){
  function click_accept (line 2330) | function click_accept(dataId,source,data){
  function click_release (line 2348) | function click_release(dataId,source,data){
  function click_cancel (line 2356) | function click_cancel(dataId,source,data){
  function click_leave (line 2364) | function click_leave(dataId,source,data){
  function click_join (line 2372) | function click_join(dataId,source,data){
  function click_pri (line 2382) | function click_pri(dataId,source,points){
  function click_retro (line 2390) | function click_retro(dataId,source,data){
  function submit_comment_prompt (line 2400) | function submit_comment_prompt(dataId,data,action){
  function cancel_comment_prompt (line 2414) | function cancel_comment_prompt(dataId,source,data,action){
  function comment_prompt (line 2422) | function comment_prompt(dataId,source,data,action,required,message){
  function filter_select (line 2461) | function filter_select(){
  function show_added_by_me (line 2525) | function show_added_by_me(){
  function show_hide_touched (line 2538) | function show_hide_touched(show){
  function show_tag (line 2550) | function show_tag(tag){
  function hide_inactive (line 2567) | function hide_inactive(days){
  function show_unvoted (line 2581) | function show_unvoted(statuses,vote_type){
  function show_voted (line 2596) | function show_voted(statuses,vote_type,vote_value){
  function has_vote_type (line 2611) | function has_vote_type(item,vote_type,vote_value){
  function is_item_touched_by_user (line 2626) | function is_item_touched_by_user(item){
  function search_for (line 2642) | function search_for(text){
  function search_for_old (line 2690) | function search_for_old(text){
  function clear_filters (line 2719) | function clear_filters(){
  function send_item_action (line 2734) | function send_item_action(dataId,action,extradata){
  function show_comment (line 2770) | function show_comment(item){
  function resize (line 2780) | function resize(){
  function insert_panel (line 2789) | function insert_panel(position, name, title, visible){
  function generate_and_append_panel (line 2804) | function generate_and_append_panel(position,name,title, visible){
  function update_panel_counts (line 2829) | function update_panel_counts(){
  function update_panel_count (line 2841) | function update_panel_count(name, skip_button){
  function close_panel (line 2861) | function close_panel(name){
  function show_panel (line 2872) | function show_panel(name){
  function sort_panel (line 2880) | function sort_panel(name){
  function recalculate_widths (line 2938) | function recalculate_widths(){
  function expand_item (line 2945) | function expand_item(dataId){
  function collapse_item (line 3004) | function collapse_item(dataId,check_for_save){
  function save_new_item (line 3021) | function save_new_item(prioritize){
  function save_edit_item (line 3070) | function save_edit_item(dataId){
  function cancel_new_item (line 3111) | function cancel_new_item(dataId){
  function item_added (line 3119) | function item_added(item){
  function item_actioned (line 3132) | function item_actioned(item, dataId, action){
  function item_prioritized (line 3199) | function item_prioritized(item, dataId,action){
  function item_estimated (line 3211) | function item_estimated(item, dataId){
  function item_updated (line 3222) | function item_updated(item, dataId){
  function comment_added (line 3233) | function comment_added(item, dataId){
  function todo_added (line 3241) | function todo_added(item, dataId){
  function todo_updated (line 3246) | function todo_updated(item, dataId){
  function ensure_numericality_of_num_hours (line 3251) | function ensure_numericality_of_num_hours(num_hours) {
  function isNumeric (line 3264) | function isNumeric(form_value)
  function sortoptions (line 3272) | function sortoptions(sort)
  function generate_complexity_row (line 3282) | function generate_complexity_row(){
  function generate_complexity_dropdown (line 3308) | function generate_complexity_dropdown() {
  function new_item (line 3338) | function new_item(){
  function is_item_editable (line 3532) | function is_item_editable(dataId) {
  function is_item_todos_editable (line 3544) | function is_item_todos_editable(dataId) {
  function is_item_joinable (line 3558) | function is_item_joinable(item) {
  function is_item_estimatable (line 3562) | function is_item_estimatable(item) {
  function is_tracker_editable (line 3568) | function is_tracker_editable(dataId) {
  function generate_expense_amount_editor (line 3572) | function generate_expense_amount_editor(points,dataId){
  function generate_item_edit (line 3583) | function generate_item_edit(dataId){
  function generate_attachments_section (line 3736) | function generate_attachments_section(dataId){
  function generate_todo_section (line 3769) | function generate_todo_section(dataId){
  function generate_todo_section_lightbox (line 3801) | function generate_todo_section_lightbox(dataId){
  function post_comment (line 3830) | function post_comment(dataId,from_prompt,action){
  function post_todo (line 3900) | function post_todo(dataId){
  function update_todo (line 3949) | function update_todo(todoId, dataId){
  function delete_todo (line 3998) | function delete_todo(todoId, dataId){
  function update_todo_count (line 4031) | function update_todo_count(dataId){
  function full_screen (line 4041) | function full_screen(dataId,update){
  function show_issue_full (line 4047) | function show_issue_full(itemId,update){
  function show_retro_full (line 4066) | function show_retro_full(retroId){
  function timer_beat (line 4073) | function timer_beat(timer){
  function new_dash_data (line 4083) | function new_dash_data(){
  function new_dash_data_response (line 4128) | function new_dash_data_response(data){
  function is_user_logged_in (line 4193) | function is_user_logged_in(){
  function ask_for_login (line 4203) | function ask_for_login(){
  function handle_error (line 4208) | function handle_error (xhr, textStatus, errorThrown, dataId, action) {

FILE: public/javascripts/effects.js
  function codeForEvent (line 231) | function codeForEvent(options,eventName){
  function dispatch (line 248) | function dispatch(effect, eventName) {
  function parseColor (line 952) | function parseColor(color){

FILE: public/javascripts/enterprise_map.js
  function init (line 29) | function init() {
  function refresh_data (line 188) | function refresh_data(){

FILE: public/javascripts/fancybox/jquery.fancybox-1.3.0.pack.js
  function H (line 16) | function H(){v.hide();r.onerror=r.onload=null;F&&F.abort();l.empty()}
  function Q (line 16) | function Q(){b.fancybox('<p id="fancybox_error">The requested content ca...
  function B (line 16) | function B(){H();var a=q[s];e=b.extend({},b.fn.fancybox.defaults,typeof ...
  function U (line 21) | function U(){h=true;e.width=r.width;e.height=r.height;b("<img />").attr(...
  function G (line 21) | function G(){l.width(e.width);l.height(e.height);if(e.width=="auto")e.wi...
  function J (line 21) | function J(){v.hide();if(g.is(":visible")&&b.isFunction(c.onCleanup))if(...
  function M (line 24) | function M(a){var d=Math.round(k.width+(m.width-k.width)*a),
  function L (line 25) | function L(){i.css("overflow",overflow=c.scrolling=="auto"?c.type=="imag...
  function V (line 26) | function V(){var a=N(),d={},f=
  function S (line 28) | function S(){var a=e.orig?b(e.orig):false,d={};if(a&&a.length){a=Z(a);d=...
  function X (line 29) | function X(){b(document).unbind("keydown.fb").bind("keydown.fb",function...
  function Y (line 30) | function Y(){if(j.length-1>n){var a=j[n+1].href;if(typeof a!=="undefined...
  function $ (line 30) | function $(){if(v.is(":visible")){b("div",v).css("top",O*-40+"px");O=(O+...
  function N (line 30) | function N(){return[b(window).width(),b(window).height(),b(document).scr...
  function Z (line 30) | function Z(a){var d=a.offset();d.top+=parseFloat(a.css("paddingTop"))||
  function W (line 31) | function W(){b("#fancybox-title").remove();x=0;if(c.titleShow!=false){va...
  function aa (line 32) | function aa(a){if(a&&a.length)switch(c.titlePosition){case "inside":retu...
  function ba (line 33) | function ba(){if(!b("#fancybox-wrap").length){b("body").append(l=b('<div...
  function a (line 39) | function a(){y.fadeOut("fast");

FILE: public/javascripts/fancybox/jquery.mousewheel-3.0.2.pack.js
  function d (line 12) | function d(a){var f=[].slice.call(arguments,1),e=0;a=b.event.fix(a||wind...

FILE: public/javascripts/fileuploader.js
  function r (line 434) | function r(name, replacement){ message = message.replace(name, replaceme...

FILE: public/javascripts/jQuery.bubbletip-1.0.4.js
  function _Calculate (line 244) | function _Calculate() {

FILE: public/javascripts/jScrollPane.js
  function c (line 1) | function c(){var p=(F-u)/C.animateStep;if(p>1||p<-1){y(u+p)}else{y(F);n()}}

FILE: public/javascripts/jit-yc.js
  function C (line 24) | function C(L,K,J){if(J<0){J+=1}if(J>1){J-=1}if(J<1/6){return L+(K-L)*6*J...
  function D (line 24) | function D(G){var F={x:0,y:0};while(G&&!A(G)){F.x+=G.offsetLeft;F.y+=G.o...
  function C (line 24) | function C(G){var F={x:0,y:0};while(G&&!A(G)){F.x+=G.scrollLeft;F.y+=G.s...
  function A (line 24) | function A(F){return(/^(?:body|html)$/i).test(F.tagName)}
  function A (line 24) | function A(C,D){var E=document.createElement(C);for(var F in D){if(typeo...
  function D (line 24) | function D(V,U){var N=(V.x*U.y-V.y*U.x),J=N;var M=V.squaredNorm(),L=U.sq...
  function A (line 24) | function A(J,K){return(J<K)?((J+Math.PI>K)?false:true):((K+Math.PI>J)?tr...
  function G (line 24) | function G(S,N,K,Q,L){var P=N.Node;var M=N.multitree;if(P.overridable){v...
  function J (line 24) | function J(L,O,N,K){var M=(K=="left"||K=="right")?"y":"x";L.getPos(O)[M]...
  function E (line 24) | function E(L,M){var K=[];d.each(L,function(N){N=I.call(N);N[0]+=M;N[1]+=...
  function H (line 24) | function H(N,K){if(N.length==0){return K}if(K.length==0){return N}var M=...
  function C (line 24) | function C(K,L){L=L||[];if(K.length==0){return L}var M=K.pop();return C(...
  function F (line 24) | function F(N,L,O,K,M){if(N.length<=M||L.length<=M){return 0}var Q=N[M][1...
  function D (line 24) | function D(N,L,K){function M(Q,S,P){if(S.length<=P){return[]}var R=S[P],...
  function A (line 24) | function A(O,N,M){function K(R,T,Q){if(T.length<=Q){return[]}var S=T[Q],...
  function z (line 24) | function z(Q,O,L,R){var M=D(Q,O,L),P=A(Q,O,L);if(R=="left"){P=M}else{if(...
  function B (line 24) | function B(K,U,L,ab,Z){var N=ab.multitree;var T=["x","y"],Q=["width","he...
  function B (line 24) | function B(G){G=G||this.clickedNode;if(!this.config.constrained){return[...
  function z (line 24) | function z(E){var D=[],C=this.config;E=E||this.clickedNode;this.clickedN...
  function G (line 24) | function G(I){if(I==null||I.selected){return}I.selected=true;d.each(E.gr...
  function F (line 24) | function F(){if(this.config.multitree&&D.data.$orn){var L=D.data.$orn;va...

FILE: public/javascripts/jit.js
  function hue2rgb (line 375) | function hue2rgb(p, q, t) {
  function getOffsets (line 511) | function getOffsets(elem) {
  function getScrolls (line 524) | function getScrolls(elem) {
  function isBody (line 537) | function isBody(element) {
  function $E (line 2719) | function $E(tag, props) {
  function computeArcThroughTwoPoints (line 6333) | function computeArcThroughTwoPoints(p1, p2){
  function sense (line 6379) | function sense(angleBegin, angleEnd){
  function getBoundaries (line 7829) | function getBoundaries(graph, config, level, orn, prop) {
  function movetree (line 7853) | function movetree(node, prop, val, orn) {
  function moveextent (line 7859) | function moveextent(extent, val) {
  function merge (line 7871) | function merge(ps, qs) {
  function mergelist (line 7881) | function mergelist(ls, def) {
  function fit (line 7890) | function fit(ext1, ext2, subtreeOffset, siblingOffset, i) {
  function fitlistl (line 7900) | function fitlistl(es, subtreeOffset, siblingOffset) {
  function fitlistr (line 7912) | function fitlistr(es, subtreeOffset, siblingOffset) {
  function fitlist (line 7926) | function fitlist(es, subtreeOffset, siblingOffset, align) {
  function design (line 7942) | function design(graph, node, prop, config, orn) {
  function getNodesToHide (line 8118) | function getNodesToHide(node) {
  function getNodesToShow (line 8150) | function getNodesToShow(node) {
  function path (line 8402) | function path(node) {
  function $setRoot (line 8445) | function $setRoot() {

FILE: public/javascripts/jquery-ui.js
  function k (line 10) | function k(a){return!c(a).parents().andSelf().filter(function(){return c...
  function d (line 13) | function d(f,g,l,m){c.each(e,function(){g-=parseFloat(c.curCSS(f,"paddin...
  function a (line 384) | function a(f){return{position:f.position,offset:f.offset}}
  function b (line 385) | function b(f){return{originalPosition:f.originalPosition,originalSize:f....
  function u (line 443) | function u(){return++v}
  function w (line 443) | function w(){return++x}
  function e (line 445) | function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0]....
  function K (line 477) | function K(){this.debug=false;this._curInst=null;this._keyEvent=false;th...
  function E (line 480) | function E(a,b){d.extend(a,b);for(var c in b)if(b[c]==
  function n (line 571) | function n(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(...
  function s (line 572) | function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.n...
  function p (line 572) | function p(){var c=document.defaultView?document.defaultView.getComputed...
  function q (line 573) | function q(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a ...
  function u (line 573) | function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}
  function k (line 573) | function k(c,a,b,d){if(typeof c=="object"){d=
  function m (line 574) | function m(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(...

FILE: public/javascripts/jquery.autocomplete.js
  function findValueCallback (line 173) | function findValueCallback(q, data) {
  function selectCurrent (line 203) | function selectCurrent() {
  function onChange (line 239) | function onChange(crap, skipPrevCheck) {
  function trimWords (line 264) | function trimWords(value) {
  function lastWord (line 274) | function lastWord(value) {
  function autoFill (line 292) | function autoFill(q, sValue){
  function hideResults (line 303) | function hideResults() {
  function hideResultsNow (line 308) | function hideResultsNow() {
  function receiveData (line 333) | function receiveData(q, data) {
  function request (line 344) | function request(term, success, failure) {
  function parse (line 385) | function parse(data) {
  function stopLoading (line 402) | function stopLoading() {
  function matchSubset (line 440) | function matchSubset(s, sub) {
  function add (line 451) | function add(q, value) {
  function populate (line 461) | function populate(){
  function flush (line 516) | function flush(){
  function init (line 588) | function init() {
  function target (line 620) | function target(event) {
  function moveSelect (line 630) | function moveSelect(step) {
  function movePosition (line 647) | function movePosition(step) {
  function limitNumberOfItems (line 656) | function limitNumberOfItems(available) {
  function fillList (line 662) | function fillList() {

FILE: public/javascripts/jquery.fancybox-1.3.0.js
  function _cleanup (line 199) | function _cleanup() {
  function fancybox_abort (line 291) | function fancybox_abort() {
  function fancybox_error (line 301) | function fancybox_error() {
  function fancybox_start (line 310) | function fancybox_start() {
  function fancybox_process_image (line 483) | function fancybox_process_image() {
  function fancybox_process_inline (line 498) | function fancybox_process_inline() {
  function fancybox_show (line 508) | function fancybox_show() {
  function fancybox_draw (line 628) | function fancybox_draw(pos) {
  function _finish (line 653) | function _finish() {
  function fancybox_get_zoom_to (line 681) | function fancybox_get_zoom_to() {
  function fancybox_get_zoom_from (line 735) | function fancybox_get_zoom_from() {
  function fancybox_set_navigation (line 763) | function fancybox_set_navigation() {
  function fancybox_preload_images (line 804) | function fancybox_preload_images() {
  function fancybox_animate_loading (line 824) | function fancybox_animate_loading() {
  function fancybox_get_viewport (line 835) | function fancybox_get_viewport() {
  function fancybox_get_obj_pos (line 839) | function fancybox_get_obj_pos(obj) {
  function fancybox_process_title (line 854) | function fancybox_process_title() {
  function fancybox_format_title (line 899) | function fancybox_format_title(title) {
  function fancybox_init (line 919) | function fancybox_init() {

FILE: public/javascripts/jquery.fancybox-1.3.0.pack.js
  function H (line 16) | function H(){v.hide();r.onerror=r.onload=null;F&&F.abort();l.empty()}
  function Q (line 16) | function Q(){b.fancybox('<p id="fancybox_error">The requested content ca...
  function B (line 16) | function B(){H();var a=q[s];e=b.extend({},b.fn.fancybox.defaults,typeof ...
  function U (line 21) | function U(){h=true;e.width=r.width;e.height=r.height;b("<img />").attr(...
  function G (line 21) | function G(){l.width(e.width);l.height(e.height);if(e.width=="auto")e.wi...
  function J (line 21) | function J(){v.hide();if(g.is(":visible")&&b.isFunction(c.onCleanup))if(...
  function M (line 24) | function M(a){var d=Math.round(k.width+(m.width-k.width)*a),
  function L (line 25) | function L(){i.css("overflow",overflow=c.scrolling=="auto"?c.type=="imag...
  function V (line 26) | function V(){var a=N(),d={},f=
  function S (line 28) | function S(){var a=e.orig?b(e.orig):false,d={};if(a&&a.length){a=Z(a);d=...
  function X (line 29) | function X(){b(document).unbind("keydown.fb").bind("keydown.fb",function...
  function Y (line 30) | function Y(){if(j.length-1>n){var a=j[n+1].href;if(typeof a!=="undefined...
  function $ (line 30) | function $(){if(v.is(":visible")){b("div",v).css("top",O*-40+"px");O=(O+...
  function N (line 30) | function N(){return[b(window).width(),b(window).height(),b(document).scr...
  function Z (line 30) | function Z(a){var d=a.offset();d.top+=parseFloat(a.css("paddingTop"))||
  function W (line 31) | function W(){b("#fancybox-title").remove();x=0;if(c.titleShow!=false){va...
  function aa (line 32) | function aa(a){if(a&&a.length)switch(c.titlePosition){case "inside":retu...
  function ba (line 33) | function ba(){if(!b("#fancybox-wrap").length){b("body").append(l=b('<div...
  function a (line 39) | function a(){y.fadeOut("fast");

FILE: public/javascripts/jquery.fancybox-1.3.4.js
  function _cleanup (line 954) | function _cleanup() {

FILE: public/javascripts/jquery.fancybox-1.3.4.pack.js
  function a (line 39) | function a(){u.fadeOut("fast");n.empty().hide();f.hide();b.event.trigger...

FILE: public/javascripts/jquery.js
  function ka (line 16) | function ka(a,b,d){if(d===B&&a.nodeType===1){d=a.getAttribute("data-"+b)...
  function U (line 16) | function U(){return false}
  function ca (line 16) | function ca(){return true}
  function la (line 16) | function la(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}
  function Ka (line 16) | function Ka(a){var b,d,e,f,h,l,k,o,x,r,A,C=[];f=[];h=c.data(this,this.no...
  function Y (line 18) | function Y(a,b){return(a&&a!=="*"?a+".":"")+b.replace(La,
  function ma (line 19) | function ma(a,b,d){if(c.isFunction(b))return c.grep(a,function(f,h){retu...
  function na (line 19) | function na(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d...
  function Oa (line 20) | function Oa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"})...
  function oa (line 20) | function oa(a,b,d){var e=b==="width"?a.offsetWidth:a.offsetHeight;if(d==...
  function da (line 21) | function da(a,b,d,e){if(c.isArray(b)&&b.length)c.each(b,function(f,h){d|...
  function S (line 21) | function S(a,b){var d={};c.each(pa.concat.apply([],pa.slice(0,b)),functi...
  function qa (line 21) | function qa(a){if(!ea[a]){var b=c("<"+
  function fa (line 22) | function fa(a){return c.isWindow(a)?a:a.nodeType===9?a.defaultView||a.pa...
  function a (line 22) | function a(){if(!b.isReady){try{t.documentElement.doScroll("left")}catch...
  function d (line 72) | function d(e){e=c.event.fix(e);e.type=b;return c.event.trigger(e,null,e....
  function a (line 78) | function a(g,i,n,m,p,q){p=0;for(var u=m.length;p<u;p++){var y=m[p];if(y)...
  function b (line 78) | function b(g,i,n,m,p,q){p=0;for(var u=m.length;p<u;p++){var y=m[p];if(y)...
  function e (line 152) | function e(l){return f.step(l)}

FILE: public/javascripts/jquery.mousewheel-3.0.2.pack.js
  function d (line 12) | function d(a){var f=[].slice.call(arguments,1),e=0;a=b.event.fix(a||wind...

FILE: public/javascripts/jquery.mousewheel-3.0.4.pack.js
  function g (line 13) | function g(a){var b=a||window.event,i=[].slice.call(arguments,1),c=0,h=0...

FILE: public/javascripts/jquery.scrollTo-min.js
  function t (line 1) | function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}
  function p (line 1) | function p(a){return typeof a=='object'?a:{top:a,left:a}}

FILE: public/javascripts/jquery.tagsinput.js
  function update_issue_tags (line 83) | function update_issue_tags(tags){

FILE: public/javascripts/json2.js
  function f (line 168) | function f(n) {
  function quote (line 209) | function quote(string) {
  function str (line 227) | function str(key, holder) {
  function walk (line 410) | function walk(holder, key) {

FILE: public/javascripts/jstoolbar/jstoolbar.js
  function jsToolBar (line 25) | function jsToolBar(textarea) {
  function jsButton (line 69) | function jsButton(title, fn, scope, className) {
  function jsSpace (line 101) | function jsSpace(id) {
  function jsCombo (line 115) | function jsCombo(title, options, scope, fn, className) {

FILE: public/javascripts/lightbox.js
  function getBrowserInfo (line 18) | function getBrowserInfo() {
  function checkIt (line 46) | function checkIt(string) {
  function initialize (line 179) | function initialize(){
  function addLightboxMarkup (line 190) | function addLightboxMarkup() {
  function add_lightbox (line 206) | function add_lightbox(id) {
  function dismiss (line 214) | function dismiss() {

FILE: public/javascripts/prototype.js
  function klass (line 50) | function klass() {
  function $A (line 812) | function $A(iterable) {
  function $w (line 945) | function $w(string) {
  function $H (line 993) | function $H(object) {
  function toQueryPair (line 999) | function toQueryPair(key, value) {
  function $ (line 1513) | function $(element) {
  function stripAlpha (line 2289) | function stripAlpha(filter){
  function extend (line 2627) | function extend(tagName) {
  function copy (line 2634) | function copy(methods, destination, onlyIfAbsent) {
  function findDOMClass (line 2644) | function findDOMClass(tagName) {
  function $$ (line 3443) | function $$() {
  function getEventID (line 3935) | function getEventID(element) {
  function getDOMEventName (line 3941) | function getDOMEventName(eventName) {
  function getCacheForID (line 3946) | function getCacheForID(id) {
  function getWrappersForEventName (line 3950) | function getWrappersForEventName(id, eventName) {
  function createWrapper (line 3955) | function createWrapper(element, eventName, handler) {
  function findWrapper (line 3974) | function findWrapper(id, eventName, handler) {
  function destroyWrapper (line 3979) | function destroyWrapper(id, eventName, handler) {
  function destroyCache (line 3985) | function destroyCache() {
  function fireContentLoadedEvent (line 4102) | function fireContentLoadedEvent() {
  function iter (line 4251) | function iter(name) {

FILE: public/javascripts/retro.js
  function calculate_sum (line 63) | function calculate_sum(){
  function save_retro (line 82) | function save_retro(retroId){
  function saved (line 127) | function saved(){

FILE: public/javascripts/select_list_move.js
  function addOption (line 3) | function addOption(theSel, theText, theValue)
  function swapOptions (line 10) | function swapOptions(theSel, index1, index2)
  function deleteOption (line 21) | function deleteOption(theSel, theIndex)
  function moveOptions (line 30) | function moveOptions(theSelFrom, theSelTo)
  function moveOptionUp (line 59) | function moveOptionUp(theSel) {
  function moveOptionDown (line 67) | function moveOptionDown(theSel) {
  function selectAllOptions (line 75) | function selectAllOptions(id)

FILE: public/javascripts/static/css_browser_selector.js
  function css_browser_selector (line 8) | function css_browser_selector(u){var ua = u.toLowerCase(),is=function(t)...

FILE: public/javascripts/static/cufon-yui.js
  function C (line 7) | function C(K){return K.disabled||G(K.sheet,K.media||"screen")}
  function G (line 7) | function G(M,P){if(!n.recognizesMedia(P||"all")){return true}if(!M||M.di...
  function F (line 7) | function F(){if(document.createStyleSheet){return true}var L,K;for(K=0;L...
  function s (line 7) | function s(D){var C=this.face=D.face,B={"\u0020":1,"\u00a0":1,"\u3000":1...
  function f (line 7) | function f(){var C={},B={oblique:"italic",italic:"oblique"};this.add=fun...
  function r (line 7) | function r(){function D(F,G){if(F.contains){return F.contains(G)}return ...
  function u (line 7) | function u(){var C=[],D={};function B(H){var E=[],G;for(var F=0;G=H[F];+...
  function A (line 7) | function A(){var D={},B=0;function C(E){return E.cufid||(E.cufid=++B)}th...
  function a (line 7) | function a(B){var D={},C={};this.extend=function(E){for(var F in E){if(k...
  function q (line 7) | function q(C,B,D){if(C.addEventListener){C.addEventListener(B,D,false)}e...
  function v (line 7) | function v(C,B){var D=d.get(C);if(D.options){return C}if(B.hover&&B.hove...
  function j (line 7) | function j(B){var C={};return function(D){if(!k(C,D)){C[D]=B.apply(null,...
  function c (line 7) | function c(F,E){var B=n.quotedList(E.get("fontFamily").toLowerCase()),D;...
  function g (line 7) | function g(B){return document.getElementsByTagName(B)}
  function k (line 7) | function k(C,B){return C.hasOwnProperty(B)}
  function h (line 7) | function h(){var C={},B,F;for(var E=0,D=arguments.length;B=arguments[E],...
  function o (line 7) | function o(E,M,C,N,F,D){var K=document.createDocumentFragment(),H;if(M==...
  function l (line 7) | function l(D,M){var C=D.nodeName.toLowerCase();if(M.ignore[C]){return}va...
  function d (line 7) | function d(p,h){var n=0,m=0;var g=[],o=/([mrvxe])([^a-z]*)/g,k;generate:...
  function c (line 7) | function c(m,k){for(var j=0,h=m.length;j<h;++j){var g=m[j];k[g.m].apply(...
  function T (line 7) | function T(){var x=V.glyphs,ab,l=-1,g=-1,y;X.scale(G,1);while(y=Z[++l]){...
  function c (line 7) | function c(i,j){return a(i,/(?:em|ex|%)$|^[a-z-]+$/i.test(j)?"1em":j)}
  function a (line 7) | function a(l,m){if(m==="0"){return 0}if(/px$/i.test(m)){return parseFloa...
  function f (line 7) | function f(l,k,j,n){var i="computed"+n,m=k[i];if(isNaN(m)){m=k.get(n);k[...
  function d (line 7) | function d(p){var q=p.id;if(!g[q]){var n=p.stops,o=document.createElemen...

FILE: public/javascripts/static/jquery-galleryview-1.1/jquery.galleryview-1.1.js
  function showItem (line 41) | function showItem(i) {
  function showNextItem (line 119) | function showNextItem() {
  function showPrevItem (line 127) | function showPrevItem() {
  function getPos (line 136) | function getPos(el) {
  function enableFrameClicking (line 156) | function enableFrameClicking() {
  function buildPanels (line 173) | function buildPanels() {
  function buildFilmstrip (line 255) | function buildFilmstrip() {
  function mouseIsOverPanels (line 371) | function mouseIsOverPanels(x,y) {

FILE: public/javascripts/store.js
  function createStorage (line 27) | function createStorage() {

FILE: public/javascripts/textile-editor.js
  function TextileEditorButton (line 38) | function TextileEditorButton(id, display, tagStart, tagEnd, access, titl...
  function TextileEditorButtonSeparator (line 51) | function TextileEditorButtonSeparator(sve) {

FILE: spec/acceptance/support/helpers.rb
  type HelperMethods (line 1) | module HelperMethods

FILE: spec/acceptance/support/paths.rb
  type NavigationHelpers (line 1) | module NavigationHelpers
    function homepage (line 4) | def homepage

FILE: spec/controllers/projects/new_dash_data_spec.rb
  function given_the_project_last_had_an_item_updated_at (line 88) | def given_the_project_last_had_an_item_updated_at(_when)
  function given_the_time_now_is (line 92) | def given_the_time_now_is(what); DateTime.stub(:now).and_return what; end
  function given_project_has_issue_count (line 93) | def given_project_has_issue_count(how_many)

FILE: spec/models/project_spec.rb
  function initialize (line 5) | def initialize(admin = false, memberships = [])
  function admin? (line 9) | def admin?; @admin; end
  function memberships (line 10) | def memberships; @memberships end
  function fake_admin (line 64) | def fake_admin
  function fake_admin (line 82) | def fake_admin

FILE: spec/spec_helper.rb
  function login (line 33) | def login

FILE: vendor/plugins/acts-as-taggable-on/generators/acts_as_taggable_on_migration/acts_as_taggable_on_migration_generator.rb
  class ActsAsTaggableOnMigrationGenerator (line 1) | class ActsAsTaggableOnMigrationGenerator < Rails::Generator::Base
    method manifest (line 2) | def manifest

FILE: vendor/plugins/acts-as-taggable-on/generators/acts_as_taggable_on_migration/templates/migration.rb
  class ActsAsTaggableOnMigration (line 1) | class ActsAsTaggableOnMigration < ActiveRecord::Migration
    method up (line 2) | def self.up
    method down (line 25) | def self.down

FILE: vendor/plugins/acts-as-taggable-on/lib/acts_as_taggable_on/acts_as_tagger.rb
  type ActsAsTaggableOn (line 1) | module ActsAsTaggableOn
    type Tagger (line 2) | module Tagger
      function included (line 3) | def self.included(base)
      type ClassMethods (line 7) | module ClassMethods
        function acts_as_tagger (line 16) | def acts_as_tagger(opts={})
        function is_tagger? (line 27) | def is_tagger?
      type InstanceMethods (line 32) | module InstanceMethods
        function tag (line 43) | def tag(taggable, opts={})
        function is_tagger? (line 56) | def is_tagger?
      type SingletonMethods (line 61) | module SingletonMethods
        function is_tagger? (line 62) | def is_tagger?

FILE: vendor/plugins/acts-as-taggable-on/lib/acts_as_taggable_on/compatibility/active_record_backports.rb
  type ActsAsTaggableOn (line 1) | module ActsAsTaggableOn
    type ActiveRecord (line 2) | module ActiveRecord
      type Backports (line 3) | module Backports
        function included (line 4) | def self.included(base)

FILE: vendor/plugins/acts-as-taggable-on/lib/acts_as_taggable_on/tag.rb
  type ActsAsTaggableOn (line 1) | module ActsAsTaggableOn
    class Tag (line 2) | class Tag < ::ActiveRecord::Base
      method using_postgresql? (line 18) | def self.using_postgresql?
      method named (line 22) | def self.named(name)
      method named_any (line 26) | def self.named_any(list)
      method named_like (line 30) | def self.named_like(name)
      method named_like_any (line 34) | def self.named_like_any(list)
      method find_or_create_with_like_by_name (line 40) | def self.find_or_create_with_like_by_name(name)
      method find_or_create_all_with_like_by_name (line 44) | def self.find_or_create_all_with_like_by_name(*list)
      method == (line 61) | def ==(object)
      method to_s (line 65) | def to_s
      method count (line 69) | def count
      method like_operator (line 75) | def like_operator
      method comparable_name (line 79) | def comparable_name(str)

FILE: vendor/plugins/acts-as-taggable-on/lib/acts_as_taggable_on/tag_list.rb
  type ActsAsTaggableOn (line 1) | module ActsAsTaggableOn
    class TagList (line 2) | class TagList < Array
      method initialize (line 8) | def initialize(*args)
      method from (line 18) | def self.from(string)
      method add (line 40) | def add(*names)
      method remove (line 54) | def remove(*names)
      method to_s (line 67) | def to_s
      method clean! (line 79) | def clean!
      method extract_and_apply_options! (line 85) | def extract_and_apply_options!(args)

FILE: vendor/plugins/acts-as-taggable-on/lib/acts_as_taggable_on/taggable.rb
  type ActsAsTaggableOn (line 1) | module ActsAsTaggableOn
    type Taggable (line 2) | module Taggable
      function taggable? (line 3) | def taggable?
      function acts_as_taggable (line 14) | def acts_as_taggable
      function acts_as_taggable_on (line 27) | def acts_as_taggable_on(*tag_types)

FILE: vendor/plugins/acts-as-taggable-on/lib/acts_as_taggable_on/taggable/cache.rb
  type ActsAsTaggableOn::Taggable (line 1) | module ActsAsTaggableOn::Taggable
    type Cache (line 2) | module Cache
      function included (line 3) | def self.included(base)
      type ClassMethods (line 17) | module ClassMethods
        function initialize_acts_as_taggable_on_cache (line 18) | def initialize_acts_as_taggable_on_cache
        function acts_as_taggable_on (line 28) | def acts_as_taggable_on(*args)
        function caching_tag_list_on? (line 33) | def caching_tag_list_on?(context)
      type InstanceMethods (line 38) | module InstanceMethods
        function save_cached_tag_list (line 39) | def save_cached_tag_list

FILE: vendor/plugins/acts-as-taggable-on/lib/acts_as_taggable_on/taggable/collection.rb
  type ActsAsTaggableOn::Taggable (line 1) | module ActsAsTaggableOn::Taggable
    type Collection (line 2) | module Collection
      function included (line 3) | def self.included(base)
      type ClassMethods (line 9) | module ClassMethods
        function initialize_acts_as_taggable_on_collection (line 10) | def initialize_acts_as_taggable_on_collection
        function acts_as_taggable_on (line 32) | def acts_as_taggable_on(*args)
        function tag_counts_on (line 37) | def tag_counts_on(context, options = {})
        function all_tag_counts (line 53) | def all_tag_counts(options = {})
      type InstanceMethods (line 133) | module InstanceMethods
        function tag_counts_on (line 134) | def tag_counts_on(context, options={})

FILE: vendor/plugins/acts-as-taggable-on/lib/acts_as_taggable_on/taggable/core.rb
  type ActsAsTaggableOn::Taggable (line 1) | module ActsAsTaggableOn::Taggable
    type Core (line 2) | module Core
      function included (line 3) | def self.included(base)
      type ClassMethods (line 15) | module ClassMethods
        function initialize_acts_as_taggable_on_core (line 16) | def initialize_acts_as_taggable_on_core
        function acts_as_taggable_on (line 44) | def acts_as_taggable_on(*args)
        function grouped_column_names_for (line 50) | def grouped_column_names_for(object)
        function tagged_with (line 68) | def tagged_with(tags, options = {})
        function is_taggable? (line 126) | def is_taggable?
      type InstanceMethods (line 131) | module InstanceMethods
        function grouped_column_names_for (line 133) | def grouped_column_names_for(object)
        function custom_contexts (line 137) | def custom_contexts
        function is_taggable? (line 141) | def is_taggable?
        function add_custom_context (line 145) | def add_custom_context(value)
        function cached_tag_list_on (line 149) | def cached_tag_list_on(context)
        function tag_list_cache_set_on (line 153) | def tag_list_cache_set_on(context)
        function tag_list_cache_on (line 158) | def tag_list_cache_on(context)
        function tag_list_on (line 163) | def tag_list_on(context)
        function all_tags_list_on (line 168) | def all_tags_list_on(context)
        function all_tags_on (line 177) | def all_tags_on(context)
        function tags_on (line 196) | def tags_on(context)
        function set_tag_list_on (line 200) | def set_tag_list_on(context, new_list)
        function tagging_contexts (line 207) | def tagging_contexts
        function reload (line 211) | def reload(*args)
        function save_tags (line 220) | def save_tags

FILE: vendor/plugins/acts-as-taggable-on/lib/acts_as_taggable_on/taggable/ownership.rb
  type ActsAsTaggableOn::Taggable (line 1) | module ActsAsTaggableOn::Taggable
    type Ownership (line 2) | module Ownership
      function included (line 3) | def self.included(base)
      type ClassMethods (line 14) | module ClassMethods
        function acts_as_taggable_on (line 15) | def acts_as_taggable_on(*args)
        function initialize_acts_as_taggable_on_ownership (line 20) | def initialize_acts_as_taggable_on_ownership
      type InstanceMethods (line 31) | module InstanceMethods
        function owner_tags_on (line 32) | def owner_tags_on(owner, context)
        function cached_owned_tag_list_on (line 42) | def cached_owned_tag_list_on(context)
        function owner_tag_list_on (line 47) | def owner_tag_list_on(owner, context)
        function set_owner_tag_list_on (line 56) | def set_owner_tag_list_on(owner, context, new_list)
        function reload (line 65) | def reload(*args)
        function save_owned_tags (line 73) | def save_owned_tags

FILE: vendor/plugins/acts-as-taggable-on/lib/acts_as_taggable_on/taggable/related.rb
  type ActsAsTaggableOn::Taggable (line 1) | module ActsAsTaggableOn::Taggable
    type Related (line 2) | module Related
      function included (line 3) | def self.included(base)
      type ClassMethods (line 9) | module ClassMethods
        function initialize_acts_as_taggable_on_related (line 10) | def initialize_acts_as_taggable_on_related
        function acts_as_taggable_on (line 33) | def acts_as_taggable_on(*args)
      type InstanceMethods (line 39) | module InstanceMethods
        function matching_contexts_for (line 40) | def matching_contexts_for(search_context, result_context, klass, o...
        function related_tags_for (line 54) | def related_tags_for(context, klass, options = {})

FILE: vendor/plugins/acts-as-taggable-on/lib/acts_as_taggable_on/tagging.rb
  type ActsAsTaggableOn (line 1) | module ActsAsTaggableOn
    class Tagging (line 2) | class Tagging < ::ActiveRecord::Base #:nodoc:
      method before_save (line 25) | def before_save

FILE: vendor/plugins/acts-as-taggable-on/lib/acts_as_taggable_on/tags_helper.rb
  type ActsAsTaggableOn (line 1) | module ActsAsTaggableOn
    type TagsHelper (line 2) | module TagsHelper
      function tag_cloud (line 4) | def tag_cloud(tags, classes)

FILE: vendor/plugins/acts-as-taggable-on/lib/generators/acts_as_taggable_on/migration/migration_generator.rb
  type ActsAsTaggableOn (line 3) | module ActsAsTaggableOn
    class MigrationGenerator (line 4) | class MigrationGenerator < Rails::Generators::Base
      method orm (line 9) | def self.orm
      method source_root (line 13) | def self.source_root
      method orm_has_migration? (line 17) | def self.orm_has_migration?
      method next_migration_number (line 21) | def self.next_migration_number(path)
      method create_migration_file (line 25) | def create_migration_file

FILE: vendor/plugins/acts-as-taggable-on/lib/generators/acts_as_taggable_on/migration/templates/active_record/migration.rb
  class ActsAsTaggableOnMigration (line 1) | class ActsAsTaggableOnMigration < ActiveRecord::Migration
    method up (line 2) | def self.up
    method down (line 24) | def self.down

FILE: vendor/plugins/acts-as-taggable-on/spec/acts_as_taggable_on/tags_helper_spec.rb
  class Helper (line 11) | class Helper

FILE: vendor/plugins/acts-as-taggable-on/spec/bm.rb
  class TaggableModel (line 42) | class TaggableModel < ActiveRecord::Base

FILE: vendor/plugins/acts-as-taggable-on/spec/models.rb
  class TaggableModel (line 1) | class TaggableModel < ActiveRecord::Base
  class CachedModel (line 9) | class CachedModel < ActiveRecord::Base
  class OtherTaggableModel (line 13) | class OtherTaggableModel < ActiveRecord::Base
  class InheritingTaggableModel (line 18) | class InheritingTaggableModel < TaggableModel
  class AlteredInheritingTaggableModel (line 21) | class AlteredInheritingTaggableModel < TaggableModel
  class TaggableUser (line 25) | class TaggableUser < ActiveRecord::Base
  class UntaggableModel (line 29) | class UntaggableModel < ActiveRecord::Base

FILE: vendor/plugins/acts-as-taggable-on/spec/spec_helper.rb
  class Array (line 23) | class Array
    method freq (line 24) | def freq
  function clean_database! (line 52) | def clean_database!

FILE: vendor/plugins/acts_as_attachable/lib/acts_as_attachable.rb
  type Redmine (line 5) | module Redmine
    type Acts (line 6) | module Acts
      type Attachable (line 7) | module Attachable
        function included (line 8) | def self.included(base)
        type ClassMethods (line 12) | module ClassMethods
          function acts_as_attachable (line 13) | def acts_as_attachable(options = {})
        type InstanceMethods (line 26) | module InstanceMethods
          function included (line 27) | def self.included(base)
          function attachments_visible? (line 31) | def attachments_visible?(user=User.current)
          function attachments_deletable? (line 35) | def attachments_deletable?(user=User.current)
          type ClassMethods (line 39) | module ClassMethods

FILE: vendor/plugins/acts_as_event/lib/acts_as_event.rb
  type Redmine (line 4) | module Redmine
    type Acts (line 5) | module Acts
      type Event (line 6) | module Event
        function included (line 7) | def self.included(base)
        type ClassMethods (line 11) | module ClassMethods
          function acts_as_event (line 12) | def acts_as_event(options = {})
        type InstanceMethods (line 27) | module InstanceMethods
          function included (line 28) | def self.included(base)
          function event_date (line 48) | def event_date
          function event_url (line 52) | def event_url(options = {})
          type ClassMethods (line 57) | module ClassMethods

FILE: vendor/plugins/acts_as_list/lib/active_record/acts/list.rb
  type ActiveRecord (line 1) | module ActiveRecord
    type Acts (line 2) | module Acts #:nodoc:
      type List (line 3) | module List #:nodoc:
        function included (line 4) | def self.included(base)
        type ClassMethods (line 25) | module ClassMethods
          function acts_as_list (line 33) | def acts_as_list(options = {})
        type InstanceMethods (line 76) | module InstanceMethods
          function insert_at (line 78) | def insert_at(position = 1)
          function move_lower (line 83) | def move_lower
          function move_higher (line 93) | def move_higher
          function move_to_bottom (line 104) | def move_to_bottom
          function move_to_top (line 114) | def move_to_top
          function move_to= (line 123) | def move_to=(pos)
          function remove_from_list (line 137) | def remove_from_list
          function increment_position (line 145) | def increment_position
          function decrement_position (line 151) | def decrement_position
          function first? (line 157) | def first?
          function last? (line 163) | def last?
          function higher_item (line 169) | def higher_item
          function lower_item (line 177) | def lower_item
          function in_list? (line 185) | def in_list?
          function add_to_list_top (line 190) | def add_to_list_top
          function add_to_list_bottom (line 194) | def add_to_list_bottom
          function scope_condition (line 199) | def scope_condition() "1" end
          function bottom_position_in_list (line 203) | def bottom_position_in_list(except = nil)
          function bottom_item (line 209) | def bottom_item(except = nil)
          function assume_bottom_position (line 216) | def assume_bottom_position
          function assume_top_position (line 221) | def assume_top_position
          function decrement_positions_on_higher_items (line 226) | def decrement_positions_on_higher_items(position)
          function decrement_positions_on_lower_items (line 233) | def decrement_positions_on_lower_items
          function increment_positions_on_higher_items (line 241) | def increment_positions_on_higher_items
          function increment_positions_on_lower_items (line 249) | def increment_positions_on_lower_items(position)
          function increment_positions_on_all_items (line 256) | def increment_positions_on_all_items
          function insert_at_position (line 262) | def insert_at_position(position)

FILE: vendor/plugins/acts_as_list/test/list_test.rb
  function setup_db (line 11) | def setup_db
  function teardown_db (line 22) | def teardown_db
  class Mixin (line 28) | class Mixin < ActiveRecord::Base
  class ListMixin (line 31) | class ListMixin < Mixin
    method table_name (line 34) | def self.table_name() "mixins" end
  class ListMixinSub1 (line 37) | class ListMixinSub1 < ListMixin
  class ListMixinSub2 (line 40) | class ListMixinSub2 < ListMixin
  class ListWithStringScopeMixin (line 43) | class ListWithStringScopeMixin < ActiveRecord::Base
    method table_name (line 46) | def self.table_name() "mixins" end
  class ListTest (line 50) | class ListTest < Test::Unit::TestCase
    method setup (line 52) | def setup
    method teardown (line 57) | def teardown
    method test_reordering (line 61) | def test_reordering
    method test_move_to_bottom_with_next_to_last_item (line 83) | def test_move_to_bottom_with_next_to_last_item
    method test_next_prev (line 89) | def test_next_prev
    method test_injection (line 96) | def test_injection
    method test_insert (line 102) | def test_insert
    method test_insert_at (line 124) | def test_insert_at
    method test_delete_middle (line 159) | def test_delete_middle
    method test_with_string_based_scope (line 178) | def test_with_string_based_scope
    method test_nil_scope (line 185) | def test_nil_scope
    method test_remove_from_list_should_then_fail_in_list? (line 192) | def test_remove_from_list_should_then_fail_in_list?
    method test_remove_from_list_should_set_position_to_nil (line 198) | def test_remove_from_list_should_set_position_to_nil
    method test_remove_before_destroy_does_not_shift_lower_items_twice (line 211) | def test_remove_before_destroy_does_not_shift_lower_items_twice
  class ListSubTest (line 226) | class ListSubTest < Test::Unit::TestCase
    method setup (line 228) | def setup
    method teardown (line 233) | def teardown
    method test_reordering (line 237) | def test_reordering
    method test_move_to_bottom_with_next_to_last_item (line 259) | def test_move_to_bottom_with_next_to_last_item
    method test_next_prev (line 265) | def test_next_prev
    method test_injection (line 272) | def test_injection
    method test_insert_at (line 278) | def test_insert_at
    method test_delete_middle (line 313) | def test_delete_middle

FILE: vendor/plugins/acts_as_searchable/lib/acts_as_searchable.rb
  type Redmine (line 4) | module Redmine
    type Acts (line 5) | module Acts
      type Searchable (line 6) | module Searchable
        function included (line 7) | def self.included(base)
        type ClassMethods (line 11) | module ClassMethods
          function acts_as_searchable (line 18) | def acts_as_searchable(options = {})
      
Condensed preview — 1916 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (8,815K chars).
[
  {
    "path": ".gitignore",
    "chars": 473,
    "preview": "/db/*.sqlite3\n/db/pgdump_full.sql\n/log/*.log\n/tmp/**/*\n/config/additional_environment.rb\n/config/database.yml\n/config/em"
  },
  {
    "path": ".gitmodules",
    "chars": 0,
    "preview": ""
  },
  {
    "path": ".rspec",
    "chars": 51,
    "preview": "--colour\n--format profile\n--loadby mtime\n--reverse\n"
  },
  {
    "path": ".rvmrc",
    "chars": 2308,
    "preview": "#!/usr/bin/env bash\n\n# This is an RVM Project .rvmrc file, used to automatically load the ruby\n# development environment"
  },
  {
    "path": "Gemfile",
    "chars": 1040,
    "preview": "source :rubygems\n\ngem 'rake', '0.8.7'\n\ngem 'rails', '2.3.14'\n\ngem 'ruby-debug', '0.10.4'\ngem 'rubytree', '0.7.0'\ngem 'rp"
  },
  {
    "path": "Guardfile",
    "chars": 1655,
    "preview": "# A sample Guardfile\n# More info at https://github.com/guard/guard#readme\nguard 'spork', :rspec_env => { 'RAILS_ENV' => "
  },
  {
    "path": "README.md",
    "chars": 1783,
    "preview": "BetterMeans\n-----------\n\nBetterMeans is giving birth to a new kind of company. An Open Enterprise.\n\nMore details can be "
  },
  {
    "path": "Rakefile",
    "chars": 307,
    "preview": "# Add your own tasks in files placed in lib/tasks ending in .rake,\n# for example lib/tasks/switchtower.rake, and they wi"
  },
  {
    "path": "app/controllers/account_controller.rb",
    "chars": 14056,
    "preview": "# TODO: rename this to something like SessionsController after integration specs are done\nclass AccountController < Appl"
  },
  {
    "path": "app/controllers/activity_stream_preferences_controller.rb",
    "chars": 355,
    "preview": "#--\n# Copyright (c) 2008 Matson Systems, Inc.\n# Released under the BSD license found in the file\n# LICENSE included with"
  },
  {
    "path": "app/controllers/activity_stream_preferences_module.rb",
    "chars": 3022,
    "preview": "#--\n# Copyright (c) 2008 Matson Systems, Inc.\n# Released under the BSD license found in the file\n# LICENSE included with"
  },
  {
    "path": "app/controllers/activity_streams_controller.rb",
    "chars": 1993,
    "preview": "#--\n# Copyright (c) 2008 Matson Systems, Inc.\n# Released under the BSD license found in the file\n# LICENSE included with"
  },
  {
    "path": "app/controllers/activity_streams_module.rb",
    "chars": 2801,
    "preview": "#--\n# Copyright (c) 2008 Matson Systems, Inc.\n# Released under the BSD license found in the file\n# LICENSE included with"
  },
  {
    "path": "app/controllers/admin_controller.rb",
    "chars": 2555,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass AdminController < Applica"
  },
  {
    "path": "app/controllers/application_controller.rb",
    "chars": 10753,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nrequire 'uri'\nrequire 'cgi'\nreq"
  },
  {
    "path": "app/controllers/attachments_controller.rb",
    "chars": 2909,
    "preview": "# Redmine - project management software\n# Copyright (C) 2006-2011  See readme for details and license\n#\n\nclass Attachmen"
  },
  {
    "path": "app/controllers/auth_sources_controller.rb",
    "chars": 1819,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass AuthSourcesController < A"
  },
  {
    "path": "app/controllers/boards_controller.rb",
    "chars": 2426,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass BoardsController < Applic"
  },
  {
    "path": "app/controllers/comments_controller.rb",
    "chars": 1098,
    "preview": "class CommentsController < ApplicationController\n  unloadable\n  before_filter :find_issue, :only => [:index, :create ]\n "
  },
  {
    "path": "app/controllers/credit_distributions_controller.rb",
    "chars": 2128,
    "preview": "class CreditDistributionsController < ApplicationController\n  before_filter :require_admin\n  ssl_required :all\n\n\n  def i"
  },
  {
    "path": "app/controllers/credit_transfers_controller.rb",
    "chars": 2324,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license\n#\n\nclass CreditTransfersControlle"
  },
  {
    "path": "app/controllers/credits_controller.rb",
    "chars": 4583,
    "preview": "class CreditsController < ApplicationController\n\n  before_filter :require_admin, :except => [:disable, :enable]\n  before"
  },
  {
    "path": "app/controllers/documents_controller.rb",
    "chars": 2799,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass DocumentsController < App"
  },
  {
    "path": "app/controllers/email_updates_controller.rb",
    "chars": 1283,
    "preview": "class EmailUpdatesController < ApplicationController\n  before_filter :require_login\n  ssl_required :all\n\n  def new\n    @"
  },
  {
    "path": "app/controllers/enterprises_controller.rb",
    "chars": 1818,
    "preview": "class EnterprisesController < ApplicationController\n  ssl_required :all\n\n  def index\n    @enterprises = Enterprise.all\n\n"
  },
  {
    "path": "app/controllers/enumerations_controller.rb",
    "chars": 1933,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass EnumerationsController < "
  },
  {
    "path": "app/controllers/help_controller.rb",
    "chars": 95,
    "preview": "class HelpController < ApplicationController\n  def show\n    @help_key = params[:key]\n  end\nend\n"
  },
  {
    "path": "app/controllers/help_sections_controller.rb",
    "chars": 2099,
    "preview": "class HelpSectionsController < ApplicationController\n  before_filter :authorize, :except => :dont_show\n  ssl_required :a"
  },
  {
    "path": "app/controllers/home_controller.rb",
    "chars": 429,
    "preview": "class HomeController < ApplicationController\n  ssl_required :index\n  layout 'static'\n  def index\n    if User.current.log"
  },
  {
    "path": "app/controllers/hourly_types_controller.rb",
    "chars": 1006,
    "preview": "class HourlyTypesController < ApplicationController\n  before_filter :find_project\n  ssl_required :all\n\n  def new\n    @ho"
  },
  {
    "path": "app/controllers/invitations_controller.rb",
    "chars": 5472,
    "preview": "class InvitationsController < ApplicationController\n  before_filter :find_project, :except => :accept\n  before_filter :a"
  },
  {
    "path": "app/controllers/issue_invitations_controller.rb",
    "chars": 623,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass IssueInvitationsControlle"
  },
  {
    "path": "app/controllers/issue_relations_controller.rb",
    "chars": 1541,
    "preview": "# Redmine - project management software\n# Copyright (C) 2006-2011  See readme for details and license\n#\n\n\nclass IssueRel"
  },
  {
    "path": "app/controllers/issue_statuses_controller.rb",
    "chars": 1438,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass IssueStatusesController <"
  },
  {
    "path": "app/controllers/issue_votes_controller.rb",
    "chars": 1808,
    "preview": "class IssueVotesController < ApplicationController\n  ssl_required :all\n\n  def index\n    @issue_votes = IssueVote.all\n\n  "
  },
  {
    "path": "app/controllers/issues_controller.rb",
    "chars": 32812,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass IssuesController < Applic"
  },
  {
    "path": "app/controllers/journals_controller.rb",
    "chars": 1771,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license\n#\n\nclass JournalsController < App"
  },
  {
    "path": "app/controllers/mail_handler_controller.rb",
    "chars": 1824,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license\n#\n\nclass MailHandlerController < "
  },
  {
    "path": "app/controllers/mails_controller.rb",
    "chars": 1400,
    "preview": "class MailsController < ApplicationController\n\n  before_filter :set_user\n\n  def index\n    if params[:mailbox] == \"sent\"\n"
  },
  {
    "path": "app/controllers/members_controller.rb",
    "chars": 2411,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass MembersController < Appli"
  },
  {
    "path": "app/controllers/messages_controller.rb",
    "chars": 5168,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass MessagesController < Appl"
  },
  {
    "path": "app/controllers/motion_votes_controller.rb",
    "chars": 2120,
    "preview": "class MotionVotesController < ApplicationController\n  ssl_required :all\n\n  def index\n    @motion_votes = MotionVote.all\n"
  },
  {
    "path": "app/controllers/motions_controller.rb",
    "chars": 4830,
    "preview": "class MotionsController < ApplicationController\n\n  before_filter :find_project, :only => [:new,:index,:create,:show, :ed"
  },
  {
    "path": "app/controllers/my_controller.rb",
    "chars": 11578,
    "preview": "# Redmine - project management software\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass MyControll"
  },
  {
    "path": "app/controllers/news_controller.rb",
    "chars": 3564,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass NewsController < Applicat"
  },
  {
    "path": "app/controllers/notifications_controller.rb",
    "chars": 2393,
    "preview": "class NotificationsController < ApplicationController\n  ssl_required :all\n  def index\n    @notifications = Notification."
  },
  {
    "path": "app/controllers/projects_controller.rb",
    "chars": 21827,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass ProjectsController < Appl"
  },
  {
    "path": "app/controllers/queries_controller.rb",
    "chars": 2367,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass QueriesController < Appli"
  },
  {
    "path": "app/controllers/quotes_controller.rb",
    "chars": 1695,
    "preview": "class QuotesController < ApplicationController\n  ssl_required :all\n\n  def index\n    @quotes = Quote.all\n\n    respond_to "
  },
  {
    "path": "app/controllers/recurly_notifications_controller.rb",
    "chars": 1271,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass RecurlyNotificationsContr"
  },
  {
    "path": "app/controllers/reports_controller.rb",
    "chars": 5417,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass ReportsController < Appli"
  },
  {
    "path": "app/controllers/reputations_controller.rb",
    "chars": 1818,
    "preview": "class ReputationsController < ApplicationController\n  ssl_required :all\n\n  def index\n    @reputations = Reputation.all\n\n"
  },
  {
    "path": "app/controllers/retro_ratings_controller.rb",
    "chars": 2542,
    "preview": "class RetroRatingsController < ApplicationController\n  ssl_required :all\n\n  def index\n    @retro_ratings = RetroRating.a"
  },
  {
    "path": "app/controllers/retros_controller.rb",
    "chars": 11830,
    "preview": "class RetrosController < ApplicationController\n  before_filter :find_retro, :only => [:show]\n  before_filter :find_proje"
  },
  {
    "path": "app/controllers/roles_controller.rb",
    "chars": 2029,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass RolesController < Applica"
  },
  {
    "path": "app/controllers/search_controller.rb",
    "chars": 3341,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass SearchController < Applic"
  },
  {
    "path": "app/controllers/settings_controller.rb",
    "chars": 2345,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n# This program is free software;"
  },
  {
    "path": "app/controllers/shares_controller.rb",
    "chars": 1739,
    "preview": "class SharesController < ApplicationController\n  ssl_required :all\n\n  def index\n    @shares = Share.all\n    @project = P"
  },
  {
    "path": "app/controllers/todos_controller.rb",
    "chars": 1995,
    "preview": "class TodosController < ApplicationController\n\n  before_filter :find_issue, :only => [:index, :create, :update, :destroy"
  },
  {
    "path": "app/controllers/trackers_controller.rb",
    "chars": 1578,
    "preview": "# Redmine - project management software\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass TrackersCo"
  },
  {
    "path": "app/controllers/users_controller.rb",
    "chars": 5038,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass UsersController < Applica"
  },
  {
    "path": "app/controllers/votes_controller.rb",
    "chars": 2746,
    "preview": "# An example controller for \"votes\" that are nested resources under users. See examples/routes.rb\n\nclass VotesController"
  },
  {
    "path": "app/controllers/watchers_controller.rb",
    "chars": 2534,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass WatchersController < Appl"
  },
  {
    "path": "app/controllers/welcome_controller.rb",
    "chars": 1413,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass WelcomeController < Appli"
  },
  {
    "path": "app/controllers/wiki_controller.rb",
    "chars": 8313,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nrequire 'diff'\n\nclass WikiContr"
  },
  {
    "path": "app/controllers/wikis_controller.rb",
    "chars": 950,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass WikisController < Applica"
  },
  {
    "path": "app/controllers/workflows_controller.rb",
    "chars": 2642,
    "preview": "# Redmine - project management software\n# Copyright (C) 2006-2011  See readme for details and license\n#\n\nclass Workflows"
  },
  {
    "path": "app/helpers/admin_helper.rb",
    "chars": 455,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nmodule AdminHelper\n  def projec"
  },
  {
    "path": "app/helpers/application_helper.rb",
    "chars": 50540,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nrequire 'coderay'\nrequire 'code"
  },
  {
    "path": "app/helpers/attachments_helper.rb",
    "chars": 1014,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nmodule AttachmentsHelper\n  # Di"
  },
  {
    "path": "app/helpers/groups_helper.rb",
    "chars": 802,
    "preview": "# Redmine - project management software\n# Copyright (C) 2006-2011  See readme for details and license#\n\nmodule GroupsHel"
  },
  {
    "path": "app/helpers/issue_relations_helper.rb",
    "chars": 309,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nmodule IssueRelationsHelper\n  d"
  },
  {
    "path": "app/helpers/issues_helper.rb",
    "chars": 3515,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nmodule IssuesHelper\n  include A"
  },
  {
    "path": "app/helpers/journals_helper.rb",
    "chars": 2233,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license\n#\n\nmodule JournalsHelper\n  def re"
  },
  {
    "path": "app/helpers/messages_helper.rb",
    "chars": 572,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nmodule MessagesHelper\n\n  def li"
  },
  {
    "path": "app/helpers/motions_helper.rb",
    "chars": 354,
    "preview": "module MotionsHelper\n  def render_title_date\n    end_date = @motion.ends_on\n    if (!@motion.active?)\n      logger.info "
  },
  {
    "path": "app/helpers/my_helper.rb",
    "chars": 4189,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nmodule MyHelper\n  def describe("
  },
  {
    "path": "app/helpers/news_helper.rb",
    "chars": 111,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nmodule NewsHelper\nend\n"
  },
  {
    "path": "app/helpers/projects_helper.rb",
    "chars": 6367,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nmodule ProjectsHelper\n  def pro"
  },
  {
    "path": "app/helpers/queries_helper.rb",
    "chars": 1222,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nmodule QueriesHelper\n\n  def ope"
  },
  {
    "path": "app/helpers/reports_helper.rb",
    "chars": 556,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nmodule ReportsHelper\n\n  def agg"
  },
  {
    "path": "app/helpers/retros_helper.rb",
    "chars": 648,
    "preview": "module RetrosHelper\n  def render_title_date\n    end_date = @retro.created_at.advance(:days => Setting::DEFAULT_RETROSPEC"
  },
  {
    "path": "app/helpers/search_helper.rb",
    "chars": 1955,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nmodule SearchHelper\n  def highl"
  },
  {
    "path": "app/helpers/settings_helper.rb",
    "chars": 2511,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nmodule SettingsHelper\n  def adm"
  },
  {
    "path": "app/helpers/sort_helper.rb",
    "chars": 6167,
    "preview": "# Helpers to sort tables using clickable column headers.\n#\n# Author:  Stuart Rackham <srackham@methods.co.nz>, March 200"
  },
  {
    "path": "app/helpers/users_helper.rb",
    "chars": 2299,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nmodule UsersHelper\n  def users_"
  },
  {
    "path": "app/helpers/watchers_helper.rb",
    "chars": 2095,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nmodule WatchersHelper\n\n  # Vali"
  },
  {
    "path": "app/helpers/wiki_helper.rb",
    "chars": 1584,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nmodule WikiHelper\n\n  def wiki_p"
  },
  {
    "path": "app/models/activity_stream.rb",
    "chars": 5210,
    "preview": "# Copyright (c) 2008 Matson Systems, Inc.\n# Released under the BSD license found in the file\n# LICENSE included with thi"
  },
  {
    "path": "app/models/activity_stream_preference.rb",
    "chars": 389,
    "preview": "# Copyright (c) 2008 Matson Systems, Inc.\n# Released under the BSD license found in the file\n# LICENSE included with thi"
  },
  {
    "path": "app/models/activity_stream_total.rb",
    "chars": 396,
    "preview": "# Copyright (c) 2008 Matson Systems, Inc.\n# Released under the BSD license found in the file\n# LICENSE included with thi"
  },
  {
    "path": "app/models/attachment.rb",
    "chars": 4348,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nrequire \"digest/md5\"\n\nclass Att"
  },
  {
    "path": "app/models/auth_source.rb",
    "chars": 917,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass AuthSource < ActiveRecord"
  },
  {
    "path": "app/models/auth_source_ldap.rb",
    "chars": 3121,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nrequire 'net/ldap'\nrequire 'ico"
  },
  {
    "path": "app/models/board.rb",
    "chars": 1424,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass Board < ActiveRecord::Bas"
  },
  {
    "path": "app/models/comment.rb",
    "chars": 1141,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass Comment < ActiveRecord::B"
  },
  {
    "path": "app/models/credit.rb",
    "chars": 4187,
    "preview": "class Credit < ActiveRecord::Base\n\n  default_value_for :issued_on do\n    Time.now\n  end\n\n  #Constants\n  ROUNDING_LEVEL ="
  },
  {
    "path": "app/models/credit_distribution.rb",
    "chars": 1075,
    "preview": "class CreditDistribution < ActiveRecord::Base\n  after_create :add_credits\n  belongs_to :project\n  belongs_to :retro\n  be"
  },
  {
    "path": "app/models/credit_transfer.rb",
    "chars": 791,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass CreditTransfer < ActiveRe"
  },
  {
    "path": "app/models/daily_digest.rb",
    "chars": 430,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass DailyDigest < ActiveRecor"
  },
  {
    "path": "app/models/document.rb",
    "chars": 1375,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass Document < ActiveRecord::"
  },
  {
    "path": "app/models/document_observer.rb",
    "chars": 286,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass DocumentObserver < Active"
  },
  {
    "path": "app/models/email_update.rb",
    "chars": 337,
    "preview": "class EmailUpdate < ActiveRecord::Base\n  belongs_to :user\n\n  def before_create\n    self.token = Token.generate_token_val"
  },
  {
    "path": "app/models/enabled_module.rb",
    "chars": 542,
    "preview": "# Redmine - project management software\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass EnabledMod"
  },
  {
    "path": "app/models/enterprise.rb",
    "chars": 492,
    "preview": "class Enterprise < ActiveRecord::Base\n    has_one :root_project, :class_name => 'Project', :conditions => \"parent_id is "
  },
  {
    "path": "app/models/enumeration.rb",
    "chars": 3021,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass Enumeration < ActiveRecor"
  },
  {
    "path": "app/models/help_section.rb",
    "chars": 62,
    "preview": "class HelpSection < ActiveRecord::Base\n  belongs_to :user\nend\n"
  },
  {
    "path": "app/models/hourly_type.rb",
    "chars": 626,
    "preview": "class HourlyType < ActiveRecord::Base\n  belongs_to :project\n  has_many :issues\n\n  validates_presence_of :name, :project,"
  },
  {
    "path": "app/models/invitation.rb",
    "chars": 2203,
    "preview": "class Invitation < ActiveRecord::Base\n  belongs_to :project\n  belongs_to :user\n  belongs_to :role\n\n  PENDING = 0\n  ACCEP"
  },
  {
    "path": "app/models/issue.rb",
    "chars": 23369,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass Issue < ActiveRecord::Bas"
  },
  {
    "path": "app/models/issue_observer.rb",
    "chars": 269,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass IssueObserver < ActiveRec"
  },
  {
    "path": "app/models/issue_relation.rb",
    "chars": 2936,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass IssueRelation < ActiveRec"
  },
  {
    "path": "app/models/issue_status.rb",
    "chars": 3249,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass IssueStatus < ActiveRecor"
  },
  {
    "path": "app/models/issue_vote.rb",
    "chars": 1274,
    "preview": "class IssueVote < ActiveRecord::Base\n  belongs_to :user\n  belongs_to :issue\n  before_create :remove_similar\n  before_sav"
  },
  {
    "path": "app/models/journal.rb",
    "chars": 3014,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass Journal < ActiveRecord::B"
  },
  {
    "path": "app/models/journal_detail.rb",
    "chars": 324,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass JournalDetail < ActiveRec"
  },
  {
    "path": "app/models/journal_observer.rb",
    "chars": 627,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass JournalObserver < ActiveR"
  },
  {
    "path": "app/models/mail.rb",
    "chars": 275,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass Mail < ActiveRecord::Base"
  },
  {
    "path": "app/models/mail_handler.rb",
    "chars": 12593,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass MailHandler < ActiveRecor"
  },
  {
    "path": "app/models/mailer.rb",
    "chars": 19347,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass Mailer < ActionMailer::Ba"
  },
  {
    "path": "app/models/member.rb",
    "chars": 1761,
    "preview": "# Redmine - project management software\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass Member < A"
  },
  {
    "path": "app/models/member_role.rb",
    "chars": 2665,
    "preview": "# Redmine - project management software\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass MemberRole"
  },
  {
    "path": "app/models/message.rb",
    "chars": 3708,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass Message < ActiveRecord::B"
  },
  {
    "path": "app/models/message_observer.rb",
    "chars": 283,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass MessageObserver < ActiveR"
  },
  {
    "path": "app/models/motion.rb",
    "chars": 9288,
    "preview": "class Motion < ActiveRecord::Base\n  include ActionController::UrlWriter\n  STATE_ACTIVE = 0\n  STATE_PASSED = 1\n  STATE_DE"
  },
  {
    "path": "app/models/motion_vote.rb",
    "chars": 2214,
    "preview": "class MotionVote < ActiveRecord::Base\n  belongs_to :user\n  belongs_to :motion\n  before_create :remove_similar_votes\n  be"
  },
  {
    "path": "app/models/news.rb",
    "chars": 2011,
    "preview": "# Redmine - project management software\n# Copyright (C) 2006-2011  See readme for details and license\n#\n\nclass News < Ac"
  },
  {
    "path": "app/models/news_observer.rb",
    "chars": 266,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass NewsObserver < ActiveReco"
  },
  {
    "path": "app/models/notification.rb",
    "chars": 2306,
    "preview": "class Notification < ActiveRecord::Base\n  serialize :params\n\n  belongs_to :recipient, :class_name => 'User', :foreign_ke"
  },
  {
    "path": "app/models/open_id_authentication_association.rb",
    "chars": 63,
    "preview": "class OpenIdAuthenticationAssociation < ActiveRecord::Base\nend\n"
  },
  {
    "path": "app/models/open_id_authentication_nonces.rb",
    "chars": 58,
    "preview": "class OpenIdAuthenticationNonces < ActiveRecord::Base\nend\n"
  },
  {
    "path": "app/models/personal_welcome.rb",
    "chars": 664,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass PersonalWelcome < ActiveR"
  },
  {
    "path": "app/models/plan.rb",
    "chars": 156,
    "preview": "class Plan < ActiveRecord::Base\n  FREE_CODE = 0\n\n  def free?\n    return self.code == FREE_CODE\n  end\n\n  def self.free\n  "
  },
  {
    "path": "app/models/plugin_schema_info.rb",
    "chars": 86,
    "preview": "class PluginSchemaInfo < ActiveRecord::Base\n  set_table_name 'plugin_schema_info'\nend\n"
  },
  {
    "path": "app/models/project.rb",
    "chars": 35034,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass Project < ActiveRecord::B"
  },
  {
    "path": "app/models/query.rb",
    "chars": 17030,
    "preview": "# Redmine - project management software\n# Copyright (C) 2006-2011  See readme for details and license\n#\n\nclass QueryColu"
  },
  {
    "path": "app/models/quote.rb",
    "chars": 133,
    "preview": "class Quote < ActiveRecord::Base\n  belongs_to :user\n\n  def self.random\n    Quote.find :first, :offset => rand(Quote.coun"
  },
  {
    "path": "app/models/reputation.rb",
    "chars": 2617,
    "preview": "class Reputation < ActiveRecord::Base\n  belongs_to :user\n  belongs_to :project\n\n  VARIATION_SELF_BIAS = 1\n  VARIATION_SC"
  },
  {
    "path": "app/models/retro.rb",
    "chars": 8061,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass Retro < ActiveRecord::Bas"
  },
  {
    "path": "app/models/retro_rating.rb",
    "chars": 854,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass RetroRating < ActiveRecor"
  },
  {
    "path": "app/models/role.rb",
    "chars": 6932,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass Role < ActiveRecord::Base"
  },
  {
    "path": "app/models/setting.rb",
    "chars": 8761,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass Setting < ActiveRecord::B"
  },
  {
    "path": "app/models/share.rb",
    "chars": 1433,
    "preview": "class Share < ActiveRecord::Base\n\n  default_value_for :issued_on do\n    Time.now\n  end\n\n  #Constants\n  VARIATION_FOUNDER"
  },
  {
    "path": "app/models/todo.rb",
    "chars": 328,
    "preview": "class Todo < ActiveRecord::Base\n  belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'\n  belongs_to :o"
  },
  {
    "path": "app/models/token.rb",
    "chars": 873,
    "preview": "# Redmine - project management software\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass Token < Ac"
  },
  {
    "path": "app/models/track.rb",
    "chars": 504,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass Track < ActiveRecord::Bas"
  },
  {
    "path": "app/models/tracker.rb",
    "chars": 1925,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass Tracker < ActiveRecord::B"
  },
  {
    "path": "app/models/user.rb",
    "chars": 27560,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\n\nrequire \"digest/sha1\"\n\nclass U"
  },
  {
    "path": "app/models/user_preference.rb",
    "chars": 1202,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass UserPreference < ActiveRe"
  },
  {
    "path": "app/models/watcher.rb",
    "chars": 1365,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass Watcher < ActiveRecord::B"
  },
  {
    "path": "app/models/wiki.rb",
    "chars": 2144,
    "preview": "# Redmine - project management software\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass Wiki < Act"
  },
  {
    "path": "app/models/wiki_content.rb",
    "chars": 2326,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nrequire 'zlib'\n\nclass WikiConte"
  },
  {
    "path": "app/models/wiki_content_observer.rb",
    "chars": 506,
    "preview": "# Redmine - project management software\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass WikiConten"
  },
  {
    "path": "app/models/wiki_page.rb",
    "chars": 5759,
    "preview": "# Redmine - project management software\n# Copyright (C) 2006-2011  See readme for details and license#\n\nrequire 'diff'\nr"
  },
  {
    "path": "app/models/wiki_redirect.rb",
    "chars": 261,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass WikiRedirect < ActiveReco"
  },
  {
    "path": "app/models/workflow.rb",
    "chars": 3280,
    "preview": "# BetterMeans - Work 2.0\n# Copyright (C) 2006-2011  See readme for details and license#\n\nclass Workflow < ActiveRecord::"
  },
  {
    "path": "app/views/account/login.html.erb",
    "chars": 3832,
    "preview": "<div id=\"inner-page\">\n  <div class=\"container\">\n   <%= render :partial => '/home/header', :locals => {:page => 'login'} "
  },
  {
    "path": "app/views/account/lost_password.html.erb",
    "chars": 404,
    "preview": "<h2><%=l(:label_password_lost)%></h2>\n\n<div class=\"gt-content-box padded\">\n<% form_tag({:action=> \"lost_password\"}, :cla"
  },
  {
    "path": "app/views/account/password_recovery.html.erb",
    "chars": 688,
    "preview": "<h2><%=l(:label_password_lost)%></h2>\n\n<%= error_messages_for 'user' %>\n\n<% form_tag({:token => @token.value}) do %>\n<di"
  },
  {
    "path": "app/views/account/register.html.erb",
    "chars": 2498,
    "preview": "<div id=\"inner-page\">\n  <div class=\"container\">\n   <%= render :partial => '/home/header', :locals => {:page => 'register"
  },
  {
    "path": "app/views/activity_stream_preferences/index.html.erb",
    "chars": 1664,
    "preview": "<% html_title('Configure Your Activity Stream Access') %>\n\n<script type='text/javascript'>\nfunction all_clicked(checkbox"
  },
  {
    "path": "app/views/activity_streams/_activity_comment.html.erb",
    "chars": 754,
    "preview": "<tr id=\"input_comment_<%= as.object_id %>\" class=\"hidden\">\n  <td class=\"gt-avatar\" id=\"gravatar_for_comment_<%= as.objec"
  },
  {
    "path": "app/views/activity_streams/_activity_stream.html.erb",
    "chars": 1629,
    "preview": "<tr class=\"gt-activity-header\">\n  <td colspan=\"2\">\n    <h4 class=\"long-words\">\n    <%= link_to as.actor_name, {:controll"
  },
  {
    "path": "app/views/activity_streams/_activity_stream_feed.atom.builder",
    "chars": 903,
    "preview": "\nthis_url = \"http://#{request.host_with_port}/feeds/your_activities/#{@user.activity_stream_token}\"\n\natom_feed(:url => t"
  },
  {
    "path": "app/views/activity_streams/_activity_stream_group.erb",
    "chars": 818,
    "preview": "<%= render :partial => 'activity_streams/activity_stream', :locals => {:as => asg[0], :refresh_link => refresh_link} %>\n"
  },
  {
    "path": "app/views/activity_streams/_activity_stream_list.html.erb",
    "chars": 4213,
    "preview": "   <% activities_by_item = ActivityStream.fetch(user_id,project_id, with_subprojects, limit, max_created_at) %>\n    <%li"
  },
  {
    "path": "app/views/activity_streams/_activity_stream_sub.html.erb",
    "chars": 579,
    "preview": "<tr>\n  <td class=\"gt-avatar\">\n    <%= avatar(as.actor_email, :size => \"24\") %>\n\n    </td>\n    <td>\n    <span class=\"auth"
  },
  {
    "path": "app/views/activity_streams/_indirect_object.html.erb",
    "chars": 277,
    "preview": "<% if as.indirect_object_type.to_s == \"Journal\" && as.indirect_object_phrase == \"GENERATEDETAILS\" %>\n  <%= render_journa"
  },
  {
    "path": "app/views/activity_streams/_table_header.html.erb",
    "chars": 43,
    "preview": "<tr>\n<th>Date</th>\n<th>Activity</th>\n</tr>\n"
  },
  {
    "path": "app/views/activity_streams/edit.html.erb",
    "chars": 817,
    "preview": "<h1>Editing activity_stream</h1>\n\n<% form_for(@activity_stream) do |f| %>\n  <%= f.error_messages %>\n\n  <p>\n    <%= f.lab"
  },
  {
    "path": "app/views/activity_streams/index.html.erb",
    "chars": 320,
    "preview": "<% @page_header_name = l(:label_browse_activity) %>\n<div class = \"clear\">\n<h2>All Site ActivityStreams</h2>\n\n<% @grouped"
  },
  {
    "path": "app/views/activity_streams/new.html.erb",
    "chars": 771,
    "preview": "<h1>New activity_stream</h1>\n\n<% form_for(@activity_stream) do |f| %>\n  <%= f.error_messages %>\n\n  <p>\n    <%= f.label :"
  },
  {
    "path": "app/views/activity_streams/show.html.erb",
    "chars": 566,
    "preview": "<p>\n  <b>Activity:</b>\n  <%=h @activity_stream.activity %>\n</p>\n\n<p>\n  <b>Actor:</b>\n  <%=h @activity_stream.actor_id %>"
  },
  {
    "path": "app/views/admin/_menu.html.erb",
    "chars": 1535,
    "preview": "<div id=\"admin-menu\">\n  <ul>\n    <li><%= link_to l(:label_project_plural), {:controller => 'admin', :action => 'projects"
  },
  {
    "path": "app/views/admin/_no_data.html.erb",
    "chars": 435,
    "preview": "<div class=\"nodata\">\n<% form_tag({:action => 'default_configuration'}) do %>\n    <%= simple_format(l(:text_no_configurat"
  },
  {
    "path": "app/views/admin/index.html.erb",
    "chars": 214,
    "preview": "<h2><%=l(:label_administration)%></h2>\n\n<div id=\"admin-index\">\n  <%= render :partial => 'no_data' if @no_configuration_d"
  },
  {
    "path": "app/views/admin/info.html.erb",
    "chars": 466,
    "preview": "<h2><%=l(:label_information_plural)%></h2>\n\n<p><strong><%= Redmine::Info.versioned_name %></strong> (<%= @db_adapter_nam"
  },
  {
    "path": "app/views/admin/plugins.html.erb",
    "chars": 938,
    "preview": "<h2><%= l(:label_plugins) %></h2>\n\n<% if @plugins.any? %>\n<table class=\"gt-table plugins\">\n    <% @plugins.each do |plug"
  },
  {
    "path": "app/views/admin/projects.html.erb",
    "chars": 2363,
    "preview": "<div class=\"contextual\">\n<%= link_to l(:label_project_new), {:controller => 'projects', :action => 'add'}, :class => 'ic"
  },
  {
    "path": "app/views/admin/user_stats.html.erb",
    "chars": 1028,
    "preview": "<%= javascript_include_tag 'raphael.min', 'g.raphael.min', 'g.line.min', 'g.bar.min' %>\n\n<div class=\"gt-content-box padd"
  },
  {
    "path": "app/views/attachments/_form.html.erb",
    "chars": 704,
    "preview": "<div id=\"attachments_form_link\">\n  <a href=\"#\" class=\"icon icon-attachment\" onclick=\"$('#attachments_form_details').show"
  },
  {
    "path": "app/views/attachments/_links.html.erb",
    "chars": 882,
    "preview": "<div class=\"attachments\">\n<% for attachment in attachments %>\n<p><%= link_to_attachment attachment, :class => 'icon icon"
  },
  {
    "path": "app/views/attachments/_table.erb",
    "chars": 902,
    "preview": "<table class=\"attachments\">\n<% for attachment in attachments %>\n<tr>\n  <td>\n<%= link_to_attachment attachment, :class =>"
  },
  {
    "path": "app/views/attachments/diff.html.erb",
    "chars": 662,
    "preview": "<h2><%=h @attachment.filename %></h2>\n\n<div class=\"attachments\">\n<p><%= h(\"#{@attachment.description} - \") unless @attac"
  },
  {
    "path": "app/views/attachments/file.html.erb",
    "chars": 677,
    "preview": "<h2><%=h @attachment.filename %></h2>\n\n<div class=\"attachments\">\n<p><%= h(\"#{@attachment.description} - \") unless @attac"
  },
  {
    "path": "app/views/auth_sources/_form.html.erb",
    "chars": 2150,
    "preview": "<%= error_messages_for 'auth_source' %>\n\n<div class=\"gt-content-box\">\n<p><label for=\"auth_source_name\"><%=l(:field_name)"
  },
  {
    "path": "app/views/auth_sources/edit.html.erb",
    "chars": 283,
    "preview": "<h2><%=l(:label_auth_source)%> (<%= @auth_source.auth_method_name %>)</h2>\n\n<% form_tag({:action => 'update', :id => @au"
  },
  {
    "path": "app/views/auth_sources/list.html.erb",
    "chars": 1289,
    "preview": "<div class=\"contextual\">\n<%= link_to l(:label_auth_source_new), {:action => 'new'}, :class => 'icon icon-add' %>\n</div>\n"
  },
  {
    "path": "app/views/auth_sources/new.html.erb",
    "chars": 267,
    "preview": "<h2><%=l(:label_auth_source_new)%> (<%= @auth_source.auth_method_name %>)</h2>\n\n<% form_tag({:action => 'create'}, :clas"
  },
  {
    "path": "app/views/boards/_form.html.erb",
    "chars": 195,
    "preview": "<%= error_messages_for 'board' %>\n\n<div class=\"gt-content-box\">\n<p><%= f.text_field :name, :required => true %></p>\n<p><"
  },
  {
    "path": "app/views/boards/edit.html.erb",
    "chars": 313,
    "preview": "<h2><%= l(:label_board) %></h2>\n\n<% labelled_tabular_form_for :board, @board, :url => {:action => 'edit', :id => @board}"
  },
  {
    "path": "app/views/boards/index.html.erb",
    "chars": 953,
    "preview": "<%= help_section \"project_discussion\" %>\n<h2><%= l(:label_board_plural) %></h2>\n\n<table class=\"gt-table boards\">\n  <thea"
  },
  {
    "path": "app/views/boards/new.html.erb",
    "chars": 307,
    "preview": "<h2><%= l(:label_board_new) %></h2>\n\n<% labelled_tabular_form_for :board, @board, :url => {:action => 'new'} do |f| %>\n "
  },
  {
    "path": "app/views/boards/show.html.erb",
    "chars": 3397,
    "preview": "<%= help_section \"project_discussion\" %>\n<%= breadcrumb link_to(l(:label_board_plural), {:controller => 'boards', :actio"
  },
  {
    "path": "app/views/common/403.html.erb",
    "chars": 130,
    "preview": "<h2>403</h2>\n\n<p><%= l(:notice_not_authorized) %></p>\n<p><a href=\"javascript:history.back()\">Back</a></p>\n\n<% html_title"
  },
  {
    "path": "app/views/common/404.html.erb",
    "chars": 129,
    "preview": "<h2>404</h2>\n<p><%= l(:notice_file_not_found) %></p>\n<p><a href=\"javascript:history.back()\">Back</a></p>\n\n<% html_title "
  },
  {
    "path": "app/views/common/_calendar.html.erb",
    "chars": 1209,
    "preview": "<table class=\"cal\">\n<thead>\n<tr><td></td><% 7.times do |i| %><th><%= day_name( (calendar.first_wday+i)%7 ) %></th><% end"
  },
  {
    "path": "app/views/common/_diff.html.erb",
    "chars": 2513,
    "preview": "<% diff = Redmine::UnifiedDiff.new(diff, :type => diff_type, :max_lines => Setting.diff_max_lines_displayed.to_i) -%>\n<%"
  },
  {
    "path": "app/views/common/_file.html.erb",
    "chars": 368,
    "preview": "<div class=\"autoscroll\">\n<table class=\"filecontent CodeRay\">\n<tbody>\n<% line_num = 1 %>\n<% syntax_highlight(filename, to"
  },
  {
    "path": "app/views/common/_main_menu_home.html.erb",
    "chars": 814,
    "preview": "<ul>\n  <li>\n    <%= link_to l(:label_my_page), {:controller => \"welcome\", :action => \"index\"}, :class => (active_page =="
  }
]

// ... and 1716 more files (download for full content)

About this extraction

This page contains the full source code of the Bettermeans/bettermeans GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1916 files (7.9 MB), approximately 2.2M tokens, and a symbol index with 6068 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!