backlog 0.37.2 → 0.41.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/History.txt +128 -0
- data/README.txt +4 -2
- data/bin/backlog +1 -1
- data/lib/array_helper.rb +4 -4
- data/{vendor/plugins → lib}/backlog_jira/README +0 -0
- data/{vendor/plugins → lib}/backlog_jira/Rakefile +0 -0
- data/{vendor/plugins → lib}/backlog_jira/generators/backlog_jira/backlog_jira_generator.rb +0 -0
- data/{vendor/plugins → lib}/backlog_jira/generators/backlog_jira/templates/migration.rb +0 -0
- data/{vendor/plugins → lib}/backlog_jira/generators/history_model/history_model_generator.rb +0 -0
- data/{vendor/plugins → lib}/backlog_jira/generators/history_model/templates/fixtures.yml +0 -0
- data/{vendor/plugins → lib}/backlog_jira/generators/history_model/templates/functional_test.rb +0 -0
- data/{vendor/plugins → lib}/backlog_jira/generators/history_model/templates/model.rb +0 -0
- data/{vendor/plugins → lib}/backlog_jira/generators/history_model/templates/unit_test.rb +0 -0
- data/lib/backlog_jira/init.rb +66 -0
- data/{vendor/plugins → lib}/backlog_jira/install.rb +0 -0
- data/{vendor/plugins → lib}/backlog_jira/lib/backlog_jira.rb +0 -0
- data/{vendor/plugins → lib}/backlog_jira/lib/tasks/backlog_jira_tasks.rake +0 -0
- data/{vendor/plugins → lib}/backlog_jira/test/backlog_jira_test.rb +0 -0
- data/{vendor/plugins → lib}/backlog_jira/uninstall.rb +0 -0
- data/lib/big_decimal_yaml_fix.rb +16 -25
- data/lib/tasks/backup.rake +18 -18
- data/lib/time_extras.rb +6 -6
- data/lib/user_system.rb +41 -38
- data/lib/version_from_history.rb +2 -2
- metadata +196 -749
- data/Capfile +0 -2
- data/Gemfile +0 -34
- data/Gemfile.lock +0 -139
- data/MODIFICATIONS.txt +0 -13
- data/Manifest.txt +0 -0
- data/README_LOGIN_SUGAR +0 -194
- data/Rakefile +0 -73
- data/Rakefile~ +0 -73
- data/Screenshot.png +0 -0
- data/app/controllers/absences_controller.rb +0 -67
- data/app/controllers/application_controller.rb +0 -185
- data/app/controllers/application_controller.rb.rails2 +0 -186
- data/app/controllers/customers_controller.rb +0 -51
- data/app/controllers/dashboard_controller.rb +0 -17
- data/app/controllers/estimates_controller.rb +0 -49
- data/app/controllers/groups_controller.rb +0 -65
- data/app/controllers/parties_controller.rb +0 -33
- data/app/controllers/periods_controller.rb +0 -242
- data/app/controllers/projects_controller.rb +0 -185
- data/app/controllers/public_holidays_controller.rb +0 -70
- data/app/controllers/search_controller.rb +0 -15
- data/app/controllers/task_files_controller.rb +0 -19
- data/app/controllers/tasks_controller.rb +0 -305
- data/app/controllers/user_controller.rb +0 -251
- data/app/controllers/welcome_controller.rb +0 -29
- data/app/controllers/work_locks_controller.rb +0 -88
- data/app/controllers/works_controller.rb +0 -383
- data/app/helpers/absences_helper.rb +0 -2
- data/app/helpers/application_helper.rb +0 -119
- data/app/helpers/application_helper.rb.rails2 +0 -118
- data/app/helpers/customers_helper.rb +0 -2
- data/app/helpers/dashboard_helper.rb +0 -2
- data/app/helpers/estimates_helper.rb +0 -2
- data/app/helpers/groups_helper.rb +0 -2
- data/app/helpers/parties_helper.rb +0 -2
- data/app/helpers/periods_helper.rb +0 -57
- data/app/helpers/projects_helper.rb +0 -74
- data/app/helpers/public_holidays_helper.rb +0 -2
- data/app/helpers/search_helper.rb +0 -2
- data/app/helpers/task_files_helper.rb +0 -2
- data/app/helpers/tasks_helper.rb +0 -2
- data/app/helpers/user_helper.rb +0 -53
- data/app/helpers/welcome_helper.rb +0 -2
- data/app/helpers/work_locks_helper.rb +0 -2
- data/app/helpers/works_helper.rb +0 -5
- data/app/mailers/user_notify.rb +0 -76
- data/app/models/absence.rb +0 -27
- data/app/models/chart.rb +0 -5
- data/app/models/clock.rb +0 -14
- data/app/models/configuration.rb +0 -2
- data/app/models/customer.rb +0 -2
- data/app/models/estimate.rb +0 -17
- data/app/models/group.rb +0 -16
- data/app/models/party.rb +0 -27
- data/app/models/period.rb +0 -251
- data/app/models/project.rb +0 -49
- data/app/models/public_holiday.rb +0 -13
- data/app/models/report_filter.rb +0 -29
- data/app/models/search_result.rb +0 -8
- data/app/models/sidebar.rb +0 -41
- data/app/models/task.rb +0 -425
- data/app/models/task_file.rb +0 -7
- data/app/models/task_notify.rb +0 -27
- data/app/models/user.rb +0 -146
- data/app/models/work.rb +0 -191
- data/app/models/work_lock.rb +0 -11
- data/app/models/work_lock_nagger.rb +0 -60
- data/app/models/work_lock_notify.rb +0 -43
- data/app/models/works_report_filter.rb +0 -27
- data/app/views/absences/_form.rhtml +0 -10
- data/app/views/absences/edit.rhtml +0 -9
- data/app/views/absences/list.rhtml +0 -25
- data/app/views/absences/new.rhtml +0 -8
- data/app/views/absences/show.rhtml +0 -8
- data/app/views/customers/_form.rhtml +0 -7
- data/app/views/customers/_name_list.rhtml +0 -5
- data/app/views/customers/edit.rhtml +0 -9
- data/app/views/customers/list.rhtml +0 -28
- data/app/views/customers/new.rhtml +0 -8
- data/app/views/customers/show.rhtml +0 -8
- data/app/views/dashboard/show.rhtml +0 -24
- data/app/views/display_notice.rjs +0 -1
- data/app/views/groups/_form.rhtml +0 -7
- data/app/views/groups/edit.rhtml +0 -57
- data/app/views/groups/list.rhtml +0 -26
- data/app/views/groups/new.rhtml +0 -7
- data/app/views/groups/set_member.rjs +0 -1
- data/app/views/layouts/_headers.rhtml +0 -24
- data/app/views/layouts/_left_top.rhtml +0 -33
- data/app/views/layouts/_notice.rhtml +0 -12
- data/app/views/layouts/_shortcuts.rhtml +0 -22
- data/app/views/layouts/_shortcuts_js.rhtml +0 -19
- data/app/views/layouts/mwrt002.html.erb +0 -44
- data/app/views/layouts/wide.rhtml +0 -23
- data/app/views/periods/_burn_down_chart.rhtml +0 -9
- data/app/views/periods/_form.rhtml +0 -74
- data/app/views/periods/_link.rhtml +0 -3
- data/app/views/periods/_show_active.rhtml +0 -61
- data/app/views/periods/_sidebar_block.rhtml +0 -11
- data/app/views/periods/_title.rhtml +0 -18
- data/app/views/periods/edit.rhtml +0 -10
- data/app/views/periods/finish_task.rjs +0 -4
- data/app/views/periods/move_task_to_period.rjs +0 -4
- data/app/views/periods/new.rhtml +0 -9
- data/app/views/periods/order.rjs +0 -0
- data/app/views/periods/reopen_task.rjs +0 -6
- data/app/views/periods/show.rhtml +0 -56
- data/app/views/projects/_buttons.rhtml +0 -4
- data/app/views/projects/_form.rhtml +0 -44
- data/app/views/projects/_name_list.rhtml +0 -5
- data/app/views/projects/edit.rhtml +0 -14
- data/app/views/projects/finish_task.rjs +0 -3
- data/app/views/projects/list.rhtml +0 -16
- data/app/views/projects/move_task_to_period.rjs +0 -3
- data/app/views/projects/new.rhtml +0 -11
- data/app/views/projects/reopen_task.rjs +0 -3
- data/app/views/projects/show.rhtml +0 -39
- data/app/views/public_holidays/_form.rhtml +0 -7
- data/app/views/public_holidays/edit.rhtml +0 -9
- data/app/views/public_holidays/list.rhtml +0 -25
- data/app/views/public_holidays/new.rhtml +0 -8
- data/app/views/public_holidays/show.rhtml +0 -8
- data/app/views/redirect.rjs +0 -1
- data/app/views/search/results.rhtml +0 -40
- data/app/views/task_notify/invite.en.html.erb +0 -13
- data/app/views/task_notify/invite.no.html.erb +0 -13
- data/app/views/tasks/_backlog_header.rhtml +0 -17
- data/app/views/tasks/_completed.rhtml +0 -18
- data/app/views/tasks/_fields_header.rhtml +0 -13
- data/app/views/tasks/_form.rhtml +0 -125
- data/app/views/tasks/_invite.rjs +0 -1
- data/app/views/tasks/_period_header.rhtml +0 -1
- data/app/views/tasks/_task.rhtml +0 -116
- data/app/views/tasks/_update.rjs +0 -2
- data/app/views/tasks/edit.rhtml +0 -81
- data/app/views/tasks/grab.rhtml +0 -9
- data/app/views/tasks/invite.rhtml +0 -9
- data/app/views/tasks/list.rhtml +0 -77
- data/app/views/tasks/list_started.rhtml +0 -62
- data/app/views/tasks/new.rhtml +0 -10
- data/app/views/tasks/notes.rhtml +0 -12
- data/app/views/tasks/start_work.rjs +0 -1
- data/app/views/tasks/update_estimate.rjs +0 -3
- data/app/views/user/_edit.rhtml +0 -31
- data/app/views/user/_password.rhtml +0 -21
- data/app/views/user/change_password.rhtml +0 -19
- data/app/views/user/delete.rhtml +0 -14
- data/app/views/user/edit.rhtml +0 -154
- data/app/views/user/forgot_password.rhtml +0 -19
- data/app/views/user/login.rhtml +0 -33
- data/app/views/user/logout.rhtml +0 -8
- data/app/views/user/set_group.rjs +0 -1
- data/app/views/user/signup.rhtml +0 -15
- data/app/views/user/toggle_work_lock_monitoring.rjs +0 -2
- data/app/views/user/welcome.rhtml +0 -8
- data/app/views/user_notify/change_password.en.html.erb +0 -10
- data/app/views/user_notify/change_password.no.html.erb +0 -10
- data/app/views/user_notify/forgot_password.en.html.erb +0 -11
- data/app/views/user_notify/forgot_password.no.html.erb +0 -11
- data/app/views/user_notify/monitoring.en.html.erb +0 -3
- data/app/views/user_notify/monitoring.no.html.erb +0 -3
- data/app/views/user_notify/monitoring_invitation.en.html.erb +0 -7
- data/app/views/user_notify/monitoring_invitation.no.html.erb +0 -7
- data/app/views/user_notify/signup.en.html.erb +0 -12
- data/app/views/user_notify/signup.no.html.erb +0 -12
- data/app/views/work_lock_notify/lock.en.html.erb +0 -7
- data/app/views/work_lock_notify/lock.no.html.erb +0 -7
- data/app/views/work_lock_notify/nag.en.html.erb +0 -6
- data/app/views/work_lock_notify/nag.no.html.erb +0 -7
- data/app/views/work_locks/_form.rhtml +0 -10
- data/app/views/work_locks/edit.rhtml +0 -9
- data/app/views/work_locks/list.rhtml +0 -25
- data/app/views/work_locks/new.rhtml +0 -8
- data/app/views/work_locks/show.rhtml +0 -8
- data/app/views/works/_buttons.rhtml +0 -2
- data/app/views/works/_description_list.rhtml +0 -5
- data/app/views/works/_form.rhtml +0 -107
- data/app/views/works/_new_row.rhtml +0 -141
- data/app/views/works/_row.rhtml +0 -115
- data/app/views/works/_row_field.rhtml +0 -17
- data/app/views/works/_task_id_list.rhtml +0 -5
- data/app/views/works/_weekly_work_sheet_buttons.rhtml +0 -22
- data/app/views/works/daily_work_sheet.rhtml +0 -108
- data/app/views/works/edit.rhtml +0 -11
- data/app/views/works/list.rhtml +0 -148
- data/app/views/works/list_excel.rhtml +0 -114
- data/app/views/works/new.rhtml +0 -12
- data/app/views/works/show.rhtml +0 -10
- data/app/views/works/timeliste.rhtml +0 -884
- data/app/views/works/update_new_row.rjs +0 -28
- data/app/views/works/update_row.rjs +0 -18
- data/app/views/works/update_time.rjs +0 -3
- data/app/views/works/weekly_work_sheet.rhtml +0 -64
- data/app/views/works/weekly_work_sheet_details.rhtml +0 -102
- data/backlog.gemspec +0 -44
- data/config.ru +0 -4
- data/config/application.rb +0 -11
- data/config/boot.rb +0 -13
- data/config/database.yml +0 -15
- data/config/database.yml~ +0 -17
- data/config/environment.rb +0 -100
- data/config/environments/development.rb +0 -30
- data/config/environments/development.rb.rails2 +0 -26
- data/config/environments/production.rb +0 -33
- data/config/environments/test.rb +0 -24
- data/config/environments/user_environment.rb +0 -21
- data/config/initializers/backtrace_silencers.rb +0 -7
- data/config/initializers/inflections.rb +0 -10
- data/config/initializers/jdbc.rb +0 -7
- data/config/initializers/mime_types.rb +0 -5
- data/config/initializers/secret_token.rb +0 -7
- data/config/initializers/session_store.rb +0 -8
- data/config/locales/en.yml +0 -200
- data/config/locales/no.yml +0 -193
- data/config/mime_types.yaml +0 -1
- data/config/routes.rb +0 -5
- data/config/war.rb +0 -27
- data/config/warble.rb +0 -84
- data/cruise_build.sh +0 -14
- data/cruise_config.rb +0 -5
- data/db/migrate/001_create_tasks.rb +0 -22
- data/db/migrate/003_add_estimation_points.rb +0 -16
- data/db/migrate/004_add_period.rb +0 -63
- data/db/migrate/005_add_field_work_started_at.rb +0 -9
- data/db/migrate/006_works_data_fix.rb +0 -13
- data/db/migrate/007_add_task_created_at.rb +0 -23
- data/db/migrate/008_add_backlog_options.rb +0 -13
- data/db/migrate/009_add_subtasks.rb +0 -29
- data/db/migrate/010_add_work_start.rb +0 -9
- data/db/migrate/011_login_sugar.rb +0 -21
- data/db/migrate/012_add_resolution.rb +0 -12
- data/db/migrate/013_create_estimates.rb +0 -20
- data/db/migrate/014_add_customer_option.rb +0 -11
- data/db/migrate/015_add_user_option.rb +0 -33
- data/db/migrate/016_add_invoicable_flag.rb +0 -11
- data/db/migrate/017_increase_backlog_name_limit.rb +0 -10
- data/db/migrate/018_create_groups.rb +0 -118
- data/db/migrate/019_remove_unique_index_for_period_position.rb +0 -9
- data/db/migrate/020_create_task_files.rb +0 -17
- data/db/migrate/021_create_work_accounts.rb +0 -111
- data/db/migrate/022_remove_track_done_flag.rb +0 -9
- data/db/migrate/023_add_indices_for_burn_down_chart.rb +0 -13
- data/db/migrate/024_add_sprint_option.rb +0 -10
- data/db/migrate/025_add_simple_auditing_of_tasks.rb +0 -11
- data/db/migrate/026_add_users_to_tasks.rb +0 -14
- data/db/migrate/027_create_work_locks.rb +0 -25
- data/db/migrate/028_create_absences.rb +0 -34
- data/db/migrate/029_add_work_comments.rb +0 -9
- data/db/migrate/030_create_public_holidays.rb +0 -11
- data/db/migrate/031_expand_work_done_precision.rb +0 -9
- data/db/migrate/20100720124707_merge_work_account_into_backlog.rb +0 -74
- data/db/migrate/20101006092700_rename_backlogs_to_projects.rb +0 -22
- data/db/migrate/20101006092700_rename_backlogs_to_projects.rb~ +0 -22
- data/db/schema.rb +0 -159
- data/db/seeds.rb +0 -7
- data/db/test.db +0 -0
- data/etc/backlog.conf +0 -32
- data/ext/mkrf_conf.rb +0 -26
- data/lib/class_table_inheritance.rb +0 -224
- data/lib/postgresql-8.2-504.jdbc4.jar +0 -0
- data/lib/tasks/jdbc.rake +0 -8
- data/lib/url_for_fix.rb +0 -30
- data/nbproject/private/config.properties +0 -0
- data/nbproject/private/private.properties +0 -1
- data/nbproject/private/private.xml +0 -4
- data/nbproject/private/rake-t.txt +0 -95
- data/nbproject/project.properties +0 -4
- data/nbproject/project.xml +0 -9
- data/public/404.html +0 -26
- data/public/422.html +0 -26
- data/public/500.html +0 -26
- data/public/Frav/303/246rsskjema.xls +0 -0
- data/public/applets/bsf.jar +0 -0
- data/public/applets/jruby.jar +0 -0
- data/public/favicon.ico +0 -0
- data/public/images/add.png +0 -0
- data/public/images/add.svg +0 -70
- data/public/images/ajax-loading.gif +0 -0
- data/public/images/appunti_architetto_franc_01.svg +0 -92
- data/public/images/arrow-down.gif +0 -0
- data/public/images/arrow-up.gif +0 -0
- data/public/images/arrow07_2.png +0 -0
- data/public/images/arrow07_4.png +0 -0
- data/public/images/arrow_down.png +0 -0
- data/public/images/arrow_down.svg +0 -59
- data/public/images/arrow_left.png +0 -0
- data/public/images/arrow_left.svg +0 -59
- data/public/images/arrow_right.png +0 -0
- data/public/images/arrow_right.svg +0 -59
- data/public/images/arrow_up.png +0 -0
- data/public/images/arrow_up.svg +0 -59
- data/public/images/black-70.png +0 -0
- data/public/images/black.png +0 -0
- data/public/images/blank.jpg +0 -0
- data/public/images/blank.png +0 -0
- data/public/images/cestino_pieno_architetto_01.svg +0 -470
- data/public/images/checkmark.png +0 -0
- data/public/images/checkmark_org.png +0 -0
- data/public/images/clipboard.png +0 -0
- data/public/images/clipboard.svg +0 -62
- data/public/images/construction_hammer_jon__01.svg +0 -116
- data/public/images/delete.png +0 -0
- data/public/images/email.png +0 -0
- data/public/images/email_grey.png +0 -0
- data/public/images/eraser.png +0 -0
- data/public/images/eraser_org.png +0 -0
- data/public/images/ernes_stop.png +0 -0
- data/public/images/ernes_stop_org.png +0 -0
- data/public/images/flag_red.png +0 -0
- data/public/images/flag_yellow.png +0 -0
- data/public/images/grab.png +0 -0
- data/public/images/grab_gray.png +0 -0
- data/public/images/group.png +0 -0
- data/public/images/hammer.png +0 -0
- data/public/images/header.jpg +0 -0
- data/public/images/nextlabel.gif +0 -0
- data/public/images/pagebak.jpg +0 -0
- data/public/images/paper3.svg +0 -54
- data/public/images/period.png +0 -0
- data/public/images/period_org.png +0 -0
- data/public/images/person.org.png +0 -0
- data/public/images/prevlabel.gif +0 -0
- data/public/images/question.svg +0 -56
- data/public/images/rails.png +0 -0
- data/public/images/refresh.png +0 -0
- data/public/images/rmagick.gif +0 -0
- data/public/images/rmagick_270.gif +0 -0
- data/public/images/tabella_architetto_franc_01.svg +0 -105
- data/public/images/task.png +0 -0
- data/public/images/text-x-generic.png +0 -0
- data/public/images/user group.png +0 -0
- data/public/images/user.png +0 -0
- data/public/images/view_fullscreen.png +0 -0
- data/public/images/work_account.png +0 -0
- data/public/javascripts/application.js +0 -2
- data/public/javascripts/builder.js +0 -136
- data/public/javascripts/controls.js +0 -965
- data/public/javascripts/dragdrop.js +0 -974
- data/public/javascripts/effects.js +0 -1123
- data/public/javascripts/lightwindow.js +0 -1921
- data/public/javascripts/prototype.js +0 -6001
- data/public/javascripts/rails.js +0 -175
- data/public/javascripts/ruby.js +0 -46
- data/public/javascripts/scriptaculous.js +0 -58
- data/public/javascripts/slider.js +0 -275
- data/public/javascripts/sound.js +0 -55
- data/public/javascripts/unittest.js +0 -568
- data/public/javascripts/zapatec/utils/transport.js +0 -2217
- data/public/javascripts/zapatec/utils/utils.js +0 -1799
- data/public/javascripts/zapatec/utils/zapatec.js +0 -90
- data/public/javascripts/zapatec/utils/zpeventdriven.js +0 -212
- data/public/javascripts/zapatec/utils/zpwidget.js +0 -729
- data/public/javascripts/zapatec/zpcal/lang/calendar-no.js +0 -124
- data/public/javascripts/zapatec/zpcal/src/calendar-core.js +0 -2878
- data/public/javascripts/zapatec/zpcal/src/calendar-date-core.js +0 -348
- data/public/javascripts/zapatec/zpcal/src/calendar-setup.js +0 -360
- data/public/javascripts/zapatec/zpcal/src/calendar.js +0 -35
- data/public/robots.txt +0 -5
- data/public/stylesheets/backlog.css +0 -135
- data/public/stylesheets/lightwindow.css +0 -376
- data/public/stylesheets/mwrt002.css +0 -54
- data/public/stylesheets/mwrt002MAC.css +0 -3
- data/public/stylesheets/mwrt002NN.css +0 -3
- data/public/stylesheets/scaffold.css +0 -74
- data/public/stylesheets/user.css +0 -74
- data/public/stylesheets/zpcal/themes/green.css +0 -153
- data/public/stylesheets/zpcal/themes/layouts/layout-2d.css +0 -134
- data/public/stylesheets/zpcal/themes/layouts/layout-common.css +0 -74
- data/public/stylesheets/zpcal/themes/menuarrow.gif +0 -0
- data/public/stylesheets/zpcal/themes/scroller-down.gif +0 -0
- data/public/stylesheets/zpcal/themes/scroller-up.gif +0 -0
- data/script/rails +0 -6
- data/test/client/login.rb +0 -23
- data/test/client/login_test.rb +0 -64
- data/test/client/setup.rb +0 -25
- data/test/fixtures/absences.yml +0 -11
- data/test/fixtures/configurations.yml +0 -5
- data/test/fixtures/customers.yml +0 -7
- data/test/fixtures/estimates.yml +0 -10
- data/test/fixtures/groups.yml +0 -6
- data/test/fixtures/groups_users.yml +0 -3
- data/test/fixtures/parties.yml +0 -32
- data/test/fixtures/periods.yml +0 -24
- data/test/fixtures/projects.yml +0 -8
- data/test/fixtures/public_holidays.yml +0 -7
- data/test/fixtures/task_files.yml +0 -13
- data/test/fixtures/tasks.yml +0 -82
- data/test/fixtures/users.yml +0 -59
- data/test/fixtures/work_lock_subscriptions.yml +0 -7
- data/test/fixtures/work_locks.yml +0 -11
- data/test/fixtures/works.yml +0 -47
- data/test/functional/absences_controller_test.rb +0 -93
- data/test/functional/customers_controller_test.rb +0 -93
- data/test/functional/dashboard_controller_test.rb +0 -18
- data/test/functional/estimates_controller_test.rb +0 -40
- data/test/functional/groups_controller_test.rb +0 -120
- data/test/functional/parties_controller_test.rb +0 -35
- data/test/functional/periods_controller_test.rb +0 -297
- data/test/functional/projects_controller_test.rb +0 -152
- data/test/functional/public_holidays_controller_test.rb +0 -93
- data/test/functional/search_controller_test.rb +0 -24
- data/test/functional/task_files_controller_test.rb +0 -29
- data/test/functional/tasks_controller_test.rb +0 -229
- data/test/functional/user_controller_test.rb +0 -261
- data/test/functional/welcome_controller_test.rb +0 -62
- data/test/functional/work_locks_controller_test.rb +0 -93
- data/test/functional/works_controller_test.rb +0 -220
- data/test/integration/user_system_test.rb +0 -95
- data/test/mocks/test/clock.rb +0 -14
- data/test/performance/browsing_test.rb +0 -9
- data/test/performance/common.rb +0 -91
- data/test/performance/jetty_test.rb +0 -15
- data/test/performance/server_test.rb +0 -17
- data/test/test_helper.rb +0 -119
- data/test/test_helper.rb~ +0 -121
- data/test/unit/absence_test.rb +0 -29
- data/test/unit/big_decimal_yaml_fix_test.rb +0 -15
- data/test/unit/configuration_test.rb +0 -10
- data/test/unit/customer_test.rb +0 -10
- data/test/unit/estimate_test.rb +0 -10
- data/test/unit/group_test.rb +0 -10
- data/test/unit/party_test.rb +0 -10
- data/test/unit/period_test.rb +0 -9
- data/test/unit/public_holiday_test.rb +0 -10
- data/test/unit/task_file_test.rb +0 -10
- data/test/unit/task_test.rb +0 -73
- data/test/unit/time_of_day_test.rb +0 -23
- data/test/unit/user_test.rb +0 -148
- data/test/unit/work_lock_subscription_test.rb +0 -10
- data/test/unit/work_lock_test.rb +0 -10
- data/test/unit/work_test.rb +0 -81
- data/vendor/plugins/acts_as_list/README +0 -23
- data/vendor/plugins/acts_as_list/init.rb +0 -3
- data/vendor/plugins/acts_as_list/lib/active_record/acts/list.rb +0 -256
- data/vendor/plugins/acts_as_list/test/list_test.rb +0 -332
- data/vendor/plugins/acts_as_tree/README +0 -26
- data/vendor/plugins/acts_as_tree/Rakefile +0 -22
- data/vendor/plugins/acts_as_tree/init.rb +0 -1
- data/vendor/plugins/acts_as_tree/lib/active_record/acts/tree.rb +0 -96
- data/vendor/plugins/acts_as_tree/test/abstract_unit.rb +0 -0
- data/vendor/plugins/acts_as_tree/test/acts_as_tree_test.rb +0 -219
- data/vendor/plugins/acts_as_tree/test/database.yml +0 -0
- data/vendor/plugins/acts_as_tree/test/fixtures/mixin.rb +0 -0
- data/vendor/plugins/acts_as_tree/test/fixtures/mixins.yml +0 -0
- data/vendor/plugins/acts_as_tree/test/schema.rb +0 -0
- data/vendor/plugins/assert_cookie/MIT-LICENSE +0 -7
- data/vendor/plugins/assert_cookie/README +0 -6
- data/vendor/plugins/assert_cookie/Rakefile +0 -21
- data/vendor/plugins/assert_cookie/init.rb +0 -1
- data/vendor/plugins/assert_cookie/lib/assert_cookie.rb +0 -73
- data/vendor/plugins/assert_cookie/meta.yml +0 -7
- data/vendor/plugins/assert_cookie/test/test_assert_cookie.rb +0 -124
- data/vendor/plugins/assert_cookie/test/test_helper.rb +0 -31
- data/vendor/plugins/auto_complete/README +0 -23
- data/vendor/plugins/auto_complete/Rakefile +0 -22
- data/vendor/plugins/auto_complete/init.rb +0 -2
- data/vendor/plugins/auto_complete/lib/auto_complete.rb +0 -47
- data/vendor/plugins/auto_complete/lib/auto_complete_macros_helper.rb +0 -143
- data/vendor/plugins/auto_complete/test/auto_complete_test.rb +0 -67
- data/vendor/plugins/backlog_jira/init.rb +0 -66
- data/vendor/plugins/dynamic_form/MIT-LICENSE +0 -20
- data/vendor/plugins/dynamic_form/README +0 -13
- data/vendor/plugins/dynamic_form/Rakefile +0 -10
- data/vendor/plugins/dynamic_form/dynamic_form.gemspec +0 -12
- data/vendor/plugins/dynamic_form/init.rb +0 -1
- data/vendor/plugins/dynamic_form/lib/action_view/helpers/dynamic_form.rb +0 -300
- data/vendor/plugins/dynamic_form/lib/action_view/locale/en.yml +0 -8
- data/vendor/plugins/dynamic_form/lib/dynamic_form.rb +0 -5
- data/vendor/plugins/dynamic_form/test/dynamic_form_i18n_test.rb +0 -42
- data/vendor/plugins/dynamic_form/test/dynamic_form_test.rb +0 -370
- data/vendor/plugins/dynamic_form/test/test_helper.rb +0 -9
- data/vendor/plugins/has_history/README +0 -12
- data/vendor/plugins/has_history/Rakefile +0 -22
- data/vendor/plugins/has_history/generators/history_migration/history_migration_generator.rb +0 -30
- data/vendor/plugins/has_history/generators/history_migration/templates/migration.rb +0 -14
- data/vendor/plugins/has_history/generators/history_model/history_model_generator.rb +0 -39
- data/vendor/plugins/has_history/generators/history_model/templates/fixtures.yml +0 -17
- data/vendor/plugins/has_history/generators/history_model/templates/functional_test.rb +0 -129
- data/vendor/plugins/has_history/generators/history_model/templates/migration.rb +0 -14
- data/vendor/plugins/has_history/generators/history_model/templates/model.rb +0 -4
- data/vendor/plugins/has_history/generators/history_model/templates/unit_test.rb +0 -75
- data/vendor/plugins/has_history/init.rb +0 -5
- data/vendor/plugins/has_history/install.rb +0 -1
- data/vendor/plugins/has_history/lib/has_history.rb +0 -178
- data/vendor/plugins/has_history/lib/tasks/has_history_tasks.rake +0 -4
- data/vendor/plugins/has_history/test/has_history_test.rb +0 -31
- data/vendor/plugins/has_history/test/ignorant_master.rb +0 -3
- data/vendor/plugins/has_history/test/ignorant_master_history.rb +0 -4
- data/vendor/plugins/has_history/test/lone_master.rb +0 -42
- data/vendor/plugins/has_history/test/paired_master.rb +0 -5
- data/vendor/plugins/has_history/test/paired_master_history.rb +0 -5
- data/vendor/plugins/has_history/test/test_helper.rb +0 -154
- data/vendor/plugins/has_history/uninstall.rb +0 -1
- data/vendor/plugins/prototype_legacy_helper/lib/prototype_legacy_helper.rb +0 -432
- data/vendor/plugins/prototype_legacy_helper/test/test_prototype_helper.rb +0 -297
- data/vendor/plugins/rails_time/MIT-LICENSE +0 -20
- data/vendor/plugins/rails_time/README +0 -28
- data/vendor/plugins/rails_time/init.rb +0 -2
- data/vendor/plugins/rails_time/lib/activerecord_time_extension.rb +0 -28
- data/vendor/plugins/rails_time/lib/time_of_day.rb +0 -88
- data/vendor/plugins/rails_time/test/database.yml +0 -18
- data/vendor/plugins/rails_time/test/debug.log +0 -1
- data/vendor/plugins/rails_time/test/rails_time_test.rb +0 -122
- data/vendor/plugins/rails_time/test/schema.rb +0 -10
- data/vendor/plugins/rails_time/test/test_helper.rb +0 -17
- data/vendor/plugins/verification/MIT-LICENSE +0 -20
- data/vendor/plugins/verification/README +0 -34
- data/vendor/plugins/verification/Rakefile +0 -22
- data/vendor/plugins/verification/init.rb +0 -3
- data/vendor/plugins/verification/lib/action_controller/verification.rb +0 -132
- data/vendor/plugins/verification/test/test_helper.rb +0 -18
- data/vendor/plugins/verification/test/verification_test.rb +0 -270
- data/vendor/plugins/will_paginate/LICENSE +0 -18
- data/vendor/plugins/will_paginate/README +0 -138
- data/vendor/plugins/will_paginate/Rakefile +0 -27
- data/vendor/plugins/will_paginate/init.rb +0 -4
- data/vendor/plugins/will_paginate/lib/will_paginate.rb +0 -61
- data/vendor/plugins/will_paginate/lib/will_paginate/collection.rb +0 -132
- data/vendor/plugins/will_paginate/lib/will_paginate/core_ext.rb +0 -80
- data/vendor/plugins/will_paginate/lib/will_paginate/finder.rb +0 -181
- data/vendor/plugins/will_paginate/lib/will_paginate/view_helpers.rb +0 -206
- data/vendor/plugins/will_paginate/test/array_pagination_test.rb +0 -131
- data/vendor/plugins/will_paginate/test/boot.rb +0 -23
- data/vendor/plugins/will_paginate/test/console +0 -9
- data/vendor/plugins/will_paginate/test/finder_test.rb +0 -290
- data/vendor/plugins/will_paginate/test/fixtures/admin.rb +0 -3
- data/vendor/plugins/will_paginate/test/fixtures/developer.rb +0 -11
- data/vendor/plugins/will_paginate/test/fixtures/developers_projects.yml +0 -13
- data/vendor/plugins/will_paginate/test/fixtures/project.rb +0 -15
- data/vendor/plugins/will_paginate/test/fixtures/projects.yml +0 -7
- data/vendor/plugins/will_paginate/test/fixtures/replies.yml +0 -34
- data/vendor/plugins/will_paginate/test/fixtures/reply.rb +0 -5
- data/vendor/plugins/will_paginate/test/fixtures/schema.rb +0 -38
- data/vendor/plugins/will_paginate/test/fixtures/topic.rb +0 -4
- data/vendor/plugins/will_paginate/test/fixtures/topics.yml +0 -30
- data/vendor/plugins/will_paginate/test/fixtures/user.rb +0 -2
- data/vendor/plugins/will_paginate/test/fixtures/users.yml +0 -35
- data/vendor/plugins/will_paginate/test/helper.rb +0 -25
- data/vendor/plugins/will_paginate/test/lib/activerecord_test_case.rb +0 -23
- data/vendor/plugins/will_paginate/test/lib/activerecord_test_connector.rb +0 -67
- data/vendor/plugins/will_paginate/test/lib/load_fixtures.rb +0 -13
- data/vendor/plugins/will_paginate/test/pagination_test.rb +0 -240
@@ -1,39 +0,0 @@
|
|
1
|
-
class HistoryModelGenerator < Rails::Generator::NamedBase
|
2
|
-
default_options :skip_migration => false
|
3
|
-
|
4
|
-
def manifest
|
5
|
-
record do |m|
|
6
|
-
# # Check for class naming collisions.
|
7
|
-
m.class_collisions class_path, "#{class_name}History"
|
8
|
-
# m.class_collisions class_path, "#{class_name}HistoryTest"
|
9
|
-
#
|
10
|
-
# # Model, test, and fixture directories.
|
11
|
-
m.directory File.join('app/models', class_path)
|
12
|
-
# m.directory File.join('test/unit', class_path)
|
13
|
-
# m.directory File.join('test/fixtures', class_path)
|
14
|
-
#
|
15
|
-
# # Model class, unit test, and fixtures.
|
16
|
-
m.template 'model.rb', File.join('app/models', class_path, "#{file_name}_history.rb")
|
17
|
-
# m.template 'unit_test.rb', File.join('test/unit', class_path, "#{file_name}_history_test.rb")
|
18
|
-
# m.template 'fixtures.yml', File.join('test/fixtures', class_path, "#{table_name}_history.yml")
|
19
|
-
|
20
|
-
m.dependency 'model', ["#{class_name}History"], :collision => :skip, :skip_migration => true
|
21
|
-
|
22
|
-
unless options[:skip_migration]
|
23
|
-
m.dependency 'history_migration', [class_name], :collision => :skip, :skip_migration => true
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
protected
|
29
|
-
def banner
|
30
|
-
"Usage: #{$0} generate ModelName"
|
31
|
-
end
|
32
|
-
|
33
|
-
def add_options!(opt)
|
34
|
-
opt.separator ''
|
35
|
-
opt.separator 'Options:'
|
36
|
-
opt.on("--skip-migration",
|
37
|
-
"Don't generate a migration file for this history model") { |v| options[:skip_migration] = v }
|
38
|
-
end
|
39
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
quentin:
|
2
|
-
id: 1
|
3
|
-
login: quentin
|
4
|
-
email: quentin@example.com
|
5
|
-
salt: 7e3041ebc2fc05a40c60028e2c4901a81035d3cd
|
6
|
-
crypted_password: 00742970dc9e6319f8019fd54864d3ea740f04b1 # test
|
7
|
-
#crypted_password: "ce2/iFrNtQ8=\n" # quentin, use only if you're using 2-way encryption
|
8
|
-
created_at: <%%= 5.days.ago.to_s :db %>
|
9
|
-
# activated_at: <%%= 5.days.ago.to_s :db %> # only if you're activating new signups
|
10
|
-
aaron:
|
11
|
-
id: 2
|
12
|
-
login: aaron
|
13
|
-
email: aaron@example.com
|
14
|
-
salt: 7e3041ebc2fc05a40c60028e2c4901a81035d3cd
|
15
|
-
crypted_password: 00742970dc9e6319f8019fd54864d3ea740f04b1 # test
|
16
|
-
# activation_code: aaronscode # only if you're activating new signups
|
17
|
-
created_at: <%%= 1.days.ago.to_s :db %>
|
@@ -1,129 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
-
require '<%= controller_file_name %>_controller'
|
3
|
-
|
4
|
-
# Re-raise errors caught by the controller.
|
5
|
-
class <%= controller_class_name %>Controller; def rescue_action(e) raise e end; end
|
6
|
-
|
7
|
-
class <%= controller_class_name %>ControllerTest < Test::Unit::TestCase
|
8
|
-
# Be sure to include AuthenticatedTestHelper in test/test_helper.rb instead
|
9
|
-
# Then, you can remove it from this and the units test.
|
10
|
-
include AuthenticatedTestHelper
|
11
|
-
|
12
|
-
fixtures :<%= table_name %>
|
13
|
-
|
14
|
-
def setup
|
15
|
-
@controller = <%= controller_class_name %>Controller.new
|
16
|
-
@request = ActionController::TestRequest.new
|
17
|
-
@response = ActionController::TestResponse.new
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_should_login_and_redirect
|
21
|
-
post :login, :login => 'quentin', :password => 'test'
|
22
|
-
assert session[:<%= file_name %>]
|
23
|
-
assert_response :redirect
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_should_fail_login_and_not_redirect
|
27
|
-
post :login, :login => 'quentin', :password => 'bad password'
|
28
|
-
assert_nil session[:<%= file_name %>]
|
29
|
-
assert_response :success
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_should_allow_signup
|
33
|
-
assert_difference <%= class_name %>, :count do
|
34
|
-
create_<%= file_name %>
|
35
|
-
assert_response :redirect
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_should_require_login_on_signup
|
40
|
-
assert_no_difference <%= class_name %>, :count do
|
41
|
-
create_<%= file_name %>(:login => nil)
|
42
|
-
assert assigns(:<%= file_name %>).errors.on(:login)
|
43
|
-
assert_response :success
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_should_require_password_on_signup
|
48
|
-
assert_no_difference <%= class_name %>, :count do
|
49
|
-
create_<%= file_name %>(:password => nil)
|
50
|
-
assert assigns(:<%= file_name %>).errors.on(:password)
|
51
|
-
assert_response :success
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def test_should_require_password_confirmation_on_signup
|
56
|
-
assert_no_difference <%= class_name %>, :count do
|
57
|
-
create_<%= file_name %>(:password_confirmation => nil)
|
58
|
-
assert assigns(:<%= file_name %>).errors.on(:password_confirmation)
|
59
|
-
assert_response :success
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
def test_should_require_email_on_signup
|
64
|
-
assert_no_difference <%= class_name %>, :count do
|
65
|
-
create_<%= file_name %>(:email => nil)
|
66
|
-
assert assigns(:<%= file_name %>).errors.on(:email)
|
67
|
-
assert_response :success
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
def test_should_logout
|
72
|
-
login_as :quentin
|
73
|
-
get :logout
|
74
|
-
assert_nil session[:<%= file_name %>]
|
75
|
-
assert_response :redirect
|
76
|
-
end
|
77
|
-
|
78
|
-
def test_should_remember_me
|
79
|
-
post :login, :login => 'quentin', :password => 'test', :remember_me => "1"
|
80
|
-
assert_not_nil @response.cookies["auth_token"]
|
81
|
-
end
|
82
|
-
|
83
|
-
def test_should_not_remember_me
|
84
|
-
post :login, :login => 'quentin', :password => 'test', :remember_me => "0"
|
85
|
-
assert_nil @response.cookies["auth_token"]
|
86
|
-
end
|
87
|
-
|
88
|
-
def test_should_delete_token_on_logout
|
89
|
-
login_as :quentin
|
90
|
-
get :logout
|
91
|
-
assert_equal @response.cookies["auth_token"], []
|
92
|
-
end
|
93
|
-
|
94
|
-
def test_should_login_with_cookie
|
95
|
-
<%= table_name %>(:quentin).remember_me
|
96
|
-
@request.cookies["auth_token"] = cookie_for(:quentin)
|
97
|
-
get :index
|
98
|
-
assert @controller.send(:logged_in?)
|
99
|
-
end
|
100
|
-
|
101
|
-
def test_should_fail_expired_cookie_login
|
102
|
-
<%= table_name %>(:quentin).remember_me
|
103
|
-
users(:quentin).update_attribute :remember_token_expires_at, 5.minutes.ago
|
104
|
-
@request.cookies["auth_token"] = cookie_for(:quentin)
|
105
|
-
get :index
|
106
|
-
assert !@controller.send(:logged_in?)
|
107
|
-
end
|
108
|
-
|
109
|
-
def test_should_fail_cookie_login
|
110
|
-
<%= table_name %>(:quentin).remember_me
|
111
|
-
@request.cookies["auth_token"] = auth_token('invalid_auth_token')
|
112
|
-
get :index
|
113
|
-
assert !@controller.send(:logged_in?)
|
114
|
-
end
|
115
|
-
|
116
|
-
protected
|
117
|
-
def create_<%= file_name %>(options = {})
|
118
|
-
post :signup, :<%= file_name %> => { :login => 'quire', :email => 'quire@example.com',
|
119
|
-
:password => 'quire', :password_confirmation => 'quire' }.merge(options)
|
120
|
-
end
|
121
|
-
|
122
|
-
def auth_token(token)
|
123
|
-
CGI::Cookie.new('name' => 'auth_token', 'value' => token)
|
124
|
-
end
|
125
|
-
|
126
|
-
def cookie_for(<%= file_name %>)
|
127
|
-
auth_token <%= table_name %>(<%= file_name %>).remember_token
|
128
|
-
end
|
129
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
class <%= migration_name %> < ActiveRecord::Migration
|
2
|
-
def self.up
|
3
|
-
create_table :<%= table_name %>, :force => true do |t|
|
4
|
-
# Remove the columns you don't want recorded.
|
5
|
-
<% for column in columns -%>
|
6
|
-
t.column :<%=column.name%>, :<%=column.type%><%=", :limit => #{column.limit}" unless column.limit.nil? %><%=", :null => #{column.null}" unless column.null %><%=", :default => #{column.default}" unless column.default.nil? %>
|
7
|
-
<% end -%>
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.down
|
12
|
-
drop_table "<%= table_name %>"
|
13
|
-
end
|
14
|
-
end
|
@@ -1,75 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../test_helper'
|
2
|
-
|
3
|
-
class <%= class_name %>Test < Test::Unit::TestCase
|
4
|
-
# Be sure to include AuthenticatedTestHelper in test/test_helper.rb instead.
|
5
|
-
# Then, you can remove it from this and the functional test.
|
6
|
-
include AuthenticatedTestHelper
|
7
|
-
fixtures :<%= table_name %>
|
8
|
-
|
9
|
-
def test_should_create_<%= file_name %>
|
10
|
-
assert_difference <%= class_name %>, :count do
|
11
|
-
<%= file_name %> = create_<%= file_name %>
|
12
|
-
assert !<%= file_name %>.new_record?, "#{<%= file_name %>.errors.full_messages.to_sentence}"
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_should_require_login
|
17
|
-
assert_no_difference <%= class_name %>, :count do
|
18
|
-
u = create_<%= file_name %>(:login => nil)
|
19
|
-
assert u.errors.on(:login)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_should_require_password
|
24
|
-
assert_no_difference <%= class_name %>, :count do
|
25
|
-
u = create_<%= file_name %>(:password => nil)
|
26
|
-
assert u.errors.on(:password)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def test_should_require_password_confirmation
|
31
|
-
assert_no_difference <%= class_name %>, :count do
|
32
|
-
u = create_<%= file_name %>(:password_confirmation => nil)
|
33
|
-
assert u.errors.on(:password_confirmation)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_should_require_email
|
38
|
-
assert_no_difference <%= class_name %>, :count do
|
39
|
-
u = create_<%= file_name %>(:email => nil)
|
40
|
-
assert u.errors.on(:email)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_should_reset_password
|
45
|
-
<%= table_name %>(:quentin).update_attributes(:password => 'new password', :password_confirmation => 'new password')
|
46
|
-
assert_equal <%= table_name %>(:quentin), <%= class_name %>.authenticate('quentin', 'new password')
|
47
|
-
end
|
48
|
-
|
49
|
-
def test_should_not_rehash_password
|
50
|
-
<%= table_name %>(:quentin).update_attributes(:login => 'quentin2')
|
51
|
-
assert_equal <%= table_name %>(:quentin), <%= class_name %>.authenticate('quentin2', 'test')
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_should_authenticate_<%= file_name %>
|
55
|
-
assert_equal <%= table_name %>(:quentin), <%= class_name %>.authenticate('quentin', 'test')
|
56
|
-
end
|
57
|
-
|
58
|
-
def test_should_set_remember_token
|
59
|
-
<%= table_name %>(:quentin).remember_me
|
60
|
-
assert_not_nil <%= table_name %>(:quentin).remember_token
|
61
|
-
assert_not_nil <%= table_name %>(:quentin).remember_token_expires_at
|
62
|
-
end
|
63
|
-
|
64
|
-
def test_should_unset_remember_token
|
65
|
-
<%= table_name %>(:quentin).remember_me
|
66
|
-
assert_not_nil <%= table_name %>(:quentin).remember_token
|
67
|
-
<%= table_name %>(:quentin).forget_me
|
68
|
-
assert_nil <%= table_name %>(:quentin).remember_token
|
69
|
-
end
|
70
|
-
|
71
|
-
protected
|
72
|
-
def create_<%= file_name %>(options = {})
|
73
|
-
<%= class_name %>.create({ :login => 'quire', :email => 'quire@example.com', :password => 'quire', :password_confirmation => 'quire' }.merge(options))
|
74
|
-
end
|
75
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
# Install hook code here
|
@@ -1,178 +0,0 @@
|
|
1
|
-
module HasHistory
|
2
|
-
# TODO (uwe)(2007-10-31): Allow different strategies: timestamped_master, separate_history_table, separate_history_table_with_last
|
3
|
-
|
4
|
-
# Adds a trigger to the model that saves a copy of the model in a history table.
|
5
|
-
#
|
6
|
-
# The default history model is called <ModelName>History, but can be overridden by the "class_name" option.
|
7
|
-
#
|
8
|
-
# All columns are copied unless excluded by the :except or :only options.
|
9
|
-
#
|
10
|
-
# The created_at field is never changed in the original model, and is therefore omitted in the history model.
|
11
|
-
#
|
12
|
-
# The updated_at column should preserve the original timestamps but changes meaning in the history table. It therefore is renamed to "valid_from".
|
13
|
-
#
|
14
|
-
# The original row is references by a foreign key column with default name "<lower case model name>_id".
|
15
|
-
# This can be overridden by the :foreign_key option.
|
16
|
-
#
|
17
|
-
# You can automagically generate the history model class at runtime by adding the :generate_model => true option.
|
18
|
-
# In that case, the following option is also available:
|
19
|
-
#
|
20
|
-
# * :allow_updates
|
21
|
-
#
|
22
|
-
# See HasHistory#acts_as_history for a description of this option.
|
23
|
-
#
|
24
|
-
# examples:
|
25
|
-
#
|
26
|
-
# class Person < ActiveRecord::Base
|
27
|
-
# has_history
|
28
|
-
# end
|
29
|
-
#
|
30
|
-
# class Person < ActiveRecord::Base
|
31
|
-
# has_history :class_name => 'PersonHistory'
|
32
|
-
# end
|
33
|
-
#
|
34
|
-
# class Person < ActiveRecord::Base
|
35
|
-
# has_history :except => :birthdate
|
36
|
-
# end
|
37
|
-
#
|
38
|
-
# class Person < ActiveRecord::Base
|
39
|
-
# has_history :except => [:birthdate, :social_security_no]
|
40
|
-
# end
|
41
|
-
#
|
42
|
-
# class Person < ActiveRecord::Base
|
43
|
-
# has_history :only => :weight
|
44
|
-
# end
|
45
|
-
#
|
46
|
-
# class Person < ActiveRecord::Base
|
47
|
-
# has_history :only => [:height, :weight]
|
48
|
-
# end
|
49
|
-
#
|
50
|
-
# class Person < ActiveRecord::Base
|
51
|
-
# has_history :foreign_key => :person_id
|
52
|
-
# end
|
53
|
-
#
|
54
|
-
# class Person < ActiveRecord::Base
|
55
|
-
# has_history :generate_model => true
|
56
|
-
# end
|
57
|
-
#
|
58
|
-
# class Person < ActiveRecord::Base
|
59
|
-
# has_history :generate_model => true, :allow_updates => true
|
60
|
-
# end
|
61
|
-
#
|
62
|
-
# class Person < ActiveRecord::Base
|
63
|
-
# has_history :generate_model => true, :allow_updates => true
|
64
|
-
# end
|
65
|
-
#
|
66
|
-
def has_history options = {}
|
67
|
-
options[:only] = [options[:only]] if options[:only].is_a? Symbol
|
68
|
-
options[:except] = [options[:except]] if options[:except].is_a? Symbol
|
69
|
-
history_model_class_name = (options[:class_name] && options[:class_name].to_s) || "#{name}History"
|
70
|
-
|
71
|
-
if options[:generate_model]
|
72
|
-
Object::class_eval <<-EOF
|
73
|
-
class #{history_model_class_name} < ActiveRecord::Base
|
74
|
-
acts_as_history :class_name => :#{table_name.singularize}, :allow_updates => #{options[:allow_updates].inspect}
|
75
|
-
end
|
76
|
-
EOF
|
77
|
-
end
|
78
|
-
|
79
|
-
history_model = history_model_class_name.constantize
|
80
|
-
foreign_key = options[:foreign_key] || "#{table_name.singularize}_id".to_sym
|
81
|
-
|
82
|
-
before_update do |record|
|
83
|
-
old_values = find(record.id).attributes.symbolize_keys
|
84
|
-
new_values = record.attributes.symbolize_keys
|
85
|
-
values = {foreign_key => record.id}.update(old_values)
|
86
|
-
old_values.delete(:updated_at)
|
87
|
-
new_values.delete(:updated_at)
|
88
|
-
unless new_values == old_values
|
89
|
-
values[:valid_from] = values.delete(:updated_at) if values[:updated_at]
|
90
|
-
values.delete(:id)
|
91
|
-
values.delete_if {|k,v| not history_model.column_names.include? k.to_s}
|
92
|
-
values.delete_if {|k,v| not options[:only].include? k} if options[:only]
|
93
|
-
values.delete_if {|k,v| options[:except].include? k} if options[:except]
|
94
|
-
history_model.create!(values)
|
95
|
-
end
|
96
|
-
end
|
97
|
-
if options[:order]
|
98
|
-
order = options[:order]
|
99
|
-
elsif history_model.columns.find {|c| c.name == 'valid_from'}
|
100
|
-
order = 'valid_from DESC'
|
101
|
-
else
|
102
|
-
order = 'id'
|
103
|
-
end
|
104
|
-
has_many history_model.table_name.pluralize.to_sym, :dependent => :destroy, :foreign_key => foreign_key, :order => order
|
105
|
-
end
|
106
|
-
|
107
|
-
# Adds a belongs_to relationship to a master model and blocks updates and destroy actions on this class.
|
108
|
-
#
|
109
|
-
# If the class name of the history model ends with "History", the default master model class name is automatically calculated (ie. PersonHistory => Person).
|
110
|
-
# If the history class name does not end in "History", or you want to use another class name, you must override it with the :class_name option.
|
111
|
-
#
|
112
|
-
# Normally the history model is blocked for updates, but updates can be enabled by the :allow_updates option.
|
113
|
-
#
|
114
|
-
# The original row is references by a foreign key column with default name "<lower case model name>_id".
|
115
|
-
# This can be overridden by the "foreign_key" option.
|
116
|
-
#
|
117
|
-
# If you would like to inject the update trigger in the master model from the history model, use the :inject_trigger => true option.
|
118
|
-
# If you do this, these additional options are available:
|
119
|
-
#
|
120
|
-
# * :only
|
121
|
-
# * :except
|
122
|
-
#
|
123
|
-
# See HasHistory#has_history for a description of these options.
|
124
|
-
#
|
125
|
-
# examples:
|
126
|
-
#
|
127
|
-
# class PersonHistory < ActiveRecord::Base
|
128
|
-
# acts_as_history
|
129
|
-
# end
|
130
|
-
#
|
131
|
-
# class PersonRecords < ActiveRecord::Base
|
132
|
-
# acts_as_history :class_name => 'Person'
|
133
|
-
# end
|
134
|
-
#
|
135
|
-
# class Person < ActiveRecord::Base
|
136
|
-
# acts_as_history :allow_updates => true
|
137
|
-
# end
|
138
|
-
#
|
139
|
-
# class Person < ActiveRecord::Base
|
140
|
-
# acts_as_history :inject_trigger => true, :except => :birthdate
|
141
|
-
# end
|
142
|
-
#
|
143
|
-
# class Person < ActiveRecord::Base
|
144
|
-
# acts_as_history :inject_trigger => true, :except => [:birthdate, :social_security_no]
|
145
|
-
# end
|
146
|
-
#
|
147
|
-
# class Person < ActiveRecord::Base
|
148
|
-
# acts_as_history :inject_trigger => true, :only => :weight
|
149
|
-
# end
|
150
|
-
#
|
151
|
-
# class Person < ActiveRecord::Base
|
152
|
-
# acts_as_history :inject_trigger => true, :only => [:height, :weight]
|
153
|
-
# end
|
154
|
-
#
|
155
|
-
# class Person < ActiveRecord::Base
|
156
|
-
# has_history :foreign_key => :person_id
|
157
|
-
# end
|
158
|
-
#
|
159
|
-
# class Person < ActiveRecord::Base
|
160
|
-
# has_history :generate_model => true
|
161
|
-
# end
|
162
|
-
#
|
163
|
-
def acts_as_history options = {}
|
164
|
-
model_name = options[:class_name] || (name =~ /(.*)History/ && $1.constantize.table_name.singularize.to_sym)
|
165
|
-
raise "Master model class name '#{$1}' is missing and cannot be deduced." if model_name.nil?
|
166
|
-
belongs_to model_name
|
167
|
-
unless options[:allow_updates]
|
168
|
-
validate_on_update do |record|
|
169
|
-
record.errors.add "History:", "You may not change history!"
|
170
|
-
end
|
171
|
-
before_destroy do |record|
|
172
|
-
record.errors.add :id, "You may not change history!"
|
173
|
-
false
|
174
|
-
end
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
|
-
end
|