fat_free_crm 0.11.4 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of fat_free_crm might be problematic. Click here for more details.
- checksums.yaml +15 -0
- data/.gitignore +2 -1
- data/.travis.yml +10 -17
- data/CHANGELOG +57 -4
- data/CONTRIBUTORS +6 -4
- data/Gemfile +24 -21
- data/Gemfile.lock +142 -111
- data/Guardfile +11 -31
- data/MIT-LICENSE +21 -0
- data/README.md +30 -39
- data/app/assets/javascripts/admin/fields.js.coffee +5 -18
- data/app/assets/javascripts/application.js.erb +3 -14
- data/app/assets/javascripts/crm.js +3 -15
- data/app/assets/javascripts/crm_chosen.js.coffee +21 -4
- data/app/assets/javascripts/crm_classes.js +3 -15
- data/app/assets/javascripts/crm_fields.js +3 -15
- data/app/assets/javascripts/crm_loginout.js +3 -15
- data/app/assets/javascripts/crm_textarea_autocomplete.js +3 -15
- data/app/assets/javascripts/datepicker.js.coffee +5 -0
- data/app/assets/javascripts/format_buttons.js.coffee +5 -0
- data/app/assets/javascripts/groups.js.coffee +5 -0
- data/app/assets/javascripts/jquery-noconflict.js +3 -15
- data/app/assets/javascripts/lists.js.coffee +6 -0
- data/app/assets/javascripts/search.js.coffee +5 -0
- data/app/assets/stylesheets/admin/fields.css.scss +10 -0
- data/app/assets/stylesheets/advanced_search.css.scss +5 -0
- data/app/assets/stylesheets/application.css.erb +3 -14
- data/app/assets/stylesheets/base.scss +3 -15
- data/app/assets/stylesheets/common.scss +3 -15
- data/app/assets/stylesheets/ffcrm_chosen.scss +5 -0
- data/app/assets/stylesheets/fields.scss +5 -0
- data/app/assets/stylesheets/format_buttons.css.scss +5 -0
- data/app/assets/stylesheets/groups.css.scss +5 -0
- data/app/assets/stylesheets/header.scss +3 -15
- data/app/assets/stylesheets/index_headers.css.scss +5 -0
- data/app/assets/stylesheets/lists.css.scss +5 -0
- data/app/assets/stylesheets/print.css.scss +3 -15
- data/app/assets/stylesheets/rails.scss +4 -16
- data/app/assets/stylesheets/safari.scss +3 -15
- data/app/assets/stylesheets/textarea_autocomplete.scss +5 -0
- data/app/controllers/admin/application_controller.rb +3 -15
- data/app/controllers/admin/field_groups_controller.rb +3 -15
- data/app/controllers/admin/fields_controller.rb +3 -15
- data/app/controllers/admin/groups_controller.rb +3 -15
- data/app/controllers/admin/plugins_controller.rb +3 -15
- data/app/controllers/admin/settings_controller.rb +3 -15
- data/app/controllers/admin/tags_controller.rb +3 -15
- data/app/controllers/admin/users_controller.rb +3 -15
- data/app/controllers/application_controller.rb +3 -15
- data/app/controllers/authentications_controller.rb +3 -15
- data/app/controllers/comments_controller.rb +6 -16
- data/app/controllers/emails_controller.rb +3 -15
- data/app/controllers/entities/accounts_controller.rb +4 -15
- data/app/controllers/entities/campaigns_controller.rb +4 -15
- data/app/controllers/entities/contacts_controller.rb +4 -15
- data/app/controllers/entities/leads_controller.rb +4 -15
- data/app/controllers/entities/opportunities_controller.rb +6 -16
- data/app/controllers/entities_controller.rb +3 -15
- data/app/controllers/home_controller.rb +3 -15
- data/app/controllers/lists_controller.rb +3 -15
- data/app/controllers/passwords_controller.rb +3 -15
- data/app/controllers/tasks_controller.rb +5 -16
- data/app/controllers/users_controller.rb +3 -15
- data/app/helpers/accounts_helper.rb +7 -17
- data/app/helpers/addresses_helper.rb +3 -15
- data/app/helpers/admin/application_helper.rb +3 -15
- data/app/helpers/admin/field_groups_helper.rb +3 -15
- data/app/helpers/admin/fields_helper.rb +3 -15
- data/app/helpers/admin/plugins_helper.rb +3 -15
- data/app/helpers/admin/settings_helper.rb +3 -15
- data/app/helpers/admin/tags_helper.rb +3 -15
- data/app/helpers/admin/users_helper.rb +3 -15
- data/app/helpers/application_helper.rb +12 -18
- data/app/helpers/authentications_helper.rb +3 -15
- data/app/helpers/campaigns_helper.rb +3 -15
- data/app/helpers/comments_helper.rb +3 -15
- data/app/helpers/contacts_helper.rb +3 -15
- data/app/helpers/emails_helper.rb +3 -15
- data/app/helpers/fields_helper.rb +3 -15
- data/app/helpers/groups_helper.rb +5 -0
- data/app/helpers/home_helper.rb +3 -15
- data/app/helpers/leads_helper.rb +3 -15
- data/app/helpers/lists_helper.rb +3 -15
- data/app/helpers/opportunities_helper.rb +3 -15
- data/app/helpers/passwords_helper.rb +3 -15
- data/app/helpers/tags_helper.rb +3 -15
- data/app/helpers/tasks_helper.rb +3 -15
- data/app/helpers/users_helper.rb +3 -15
- data/app/helpers/versions_helper.rb +3 -15
- data/app/inputs/{datepair_input.rb → date_pair_input.rb} +10 -21
- data/app/inputs/date_time_input.rb +13 -15
- data/app/inputs/datetime_pair_input.rb +26 -0
- data/app/inputs/text_input.rb +5 -15
- data/app/mailers/dropbox_mailer.rb +3 -15
- data/app/mailers/subscription_mailer.rb +9 -16
- data/app/mailers/user_mailer.rb +3 -15
- data/app/models/entities/account.rb +7 -17
- data/app/models/entities/account_contact.rb +6 -17
- data/app/models/entities/account_opportunity.rb +5 -15
- data/app/models/entities/campaign.rb +5 -15
- data/app/models/entities/contact.rb +15 -25
- data/app/models/entities/contact_opportunity.rb +5 -15
- data/app/models/entities/lead.rb +6 -16
- data/app/models/entities/opportunity.rb +6 -16
- data/app/models/fields/core_field.rb +5 -16
- data/app/models/fields/custom_field.rb +6 -16
- data/app/models/fields/custom_field_date_pair.rb +6 -21
- data/app/models/fields/custom_field_datetime_pair.rb +5 -19
- data/app/models/fields/custom_field_pair.rb +6 -16
- data/app/models/fields/field.rb +6 -17
- data/app/models/fields/field_group.rb +7 -17
- data/app/models/list.rb +4 -15
- data/app/models/observers/entity_observer.rb +5 -0
- data/app/models/observers/lead_observer.rb +3 -15
- data/app/models/observers/opportunity_observer.rb +3 -15
- data/app/models/observers/task_observer.rb +3 -15
- data/app/models/polymorphic/address.rb +5 -16
- data/app/models/polymorphic/avatar.rb +5 -16
- data/app/models/polymorphic/comment.rb +5 -15
- data/app/models/polymorphic/email.rb +5 -15
- data/app/models/polymorphic/tag.rb +6 -16
- data/app/models/polymorphic/tagging.rb +4 -15
- data/app/models/polymorphic/task.rb +6 -16
- data/app/models/setting.rb +5 -23
- data/app/models/users/ability.rb +9 -2
- data/app/models/users/authentication.rb +5 -16
- data/app/models/users/group.rb +7 -0
- data/app/models/users/permission.rb +5 -16
- data/app/models/users/preference.rb +4 -15
- data/app/models/users/user.rb +10 -19
- data/app/views/admin/fields/index.html.haml +2 -0
- data/app/views/comments/_edit.html.haml +0 -1
- data/app/views/comments/_new.html.haml +0 -1
- data/app/views/contacts/_contacts.html.haml +1 -1
- data/app/views/contacts/_sidebar_show.html.haml +19 -0
- data/app/views/contacts/_top_section.html.haml +3 -2
- data/app/views/entities/_search.html.haml +4 -3
- data/app/views/entities/contacts.js.rjs +1 -1
- data/app/views/entities/leads.js.rjs +1 -1
- data/app/views/entities/opportunities.js.rjs +1 -1
- data/app/views/fields/_edit_custom_field_group.html.haml +1 -1
- data/app/views/home/_task.html.haml +3 -1
- data/app/views/layouts/_footer.html.haml +1 -1
- data/app/views/leads/_leads.html.haml +1 -1
- data/app/views/leads/_sidebar_show.html.haml +7 -0
- data/app/views/leads/_top_section.html.haml +3 -2
- data/app/views/lists/_sidebar.html.haml +5 -5
- data/app/views/opportunities/_opportunities.html.haml +1 -1
- data/app/views/versions/_versions.html.haml +1 -1
- data/config/application.rb +11 -3
- data/config/boot.rb +5 -1
- data/config/deploy.example.rb +5 -0
- data/config/environment.rb +5 -0
- data/config/environments/development.rb +5 -0
- data/config/environments/production.rb +5 -0
- data/config/environments/staging.rb +5 -0
- data/config/environments/test.rb +6 -1
- data/config/initializers/action_mailer.rb +5 -0
- data/config/initializers/authlogic.rb +5 -0
- data/config/initializers/constants.rb +5 -0
- data/config/initializers/gravatar.rb +5 -0
- data/config/initializers/locale.rb +3 -15
- data/config/initializers/mime_types.rb +5 -0
- data/config/initializers/paginate_arrays.rb +5 -0
- data/config/initializers/paper_trail.rb +5 -0
- data/config/initializers/ransack.rb +6 -1
- data/config/initializers/relative_url_root.rb +3 -15
- data/config/initializers/sass.rb +5 -0
- data/config/initializers/secret_token.rb +6 -1
- data/config/initializers/simple_form.rb +5 -0
- data/config/initializers/views.rb +5 -0
- data/config/locales/de_fat_free_crm.yml +125 -7
- data/config/locales/en-US_fat_free_crm.yml +7 -2
- data/config/locales/th.rb +5 -0
- data/config/routes.rb +5 -0
- data/config/settings.default.yml +10 -18
- data/config/unicorn.rb +5 -0
- data/fat_free_crm.gemspec +6 -4
- data/lib/development_tasks/gem.rake +3 -15
- data/lib/development_tasks/license.rake +12 -32
- data/lib/development_tasks/rdoc.rake +3 -15
- data/lib/development_tasks/rspec.rake +3 -15
- data/lib/fat_free_crm.rb +6 -16
- data/lib/fat_free_crm/callback.rb +3 -15
- data/lib/fat_free_crm/comment_extensions.rb +5 -0
- data/lib/fat_free_crm/core_ext.rb +3 -15
- data/lib/fat_free_crm/core_ext/nil.rb +3 -15
- data/lib/fat_free_crm/core_ext/string.rb +3 -15
- data/lib/fat_free_crm/custom_fields.rb +12 -0
- data/lib/fat_free_crm/engine.rb +3 -15
- data/lib/fat_free_crm/errors.rb +3 -15
- data/lib/fat_free_crm/exceptions.rb +3 -15
- data/lib/fat_free_crm/export_csv.rb +35 -0
- data/lib/fat_free_crm/exportable.rb +3 -15
- data/lib/fat_free_crm/fields.rb +5 -17
- data/lib/fat_free_crm/gem_dependencies.rb +3 -15
- data/lib/fat_free_crm/gem_ext.rb +3 -15
- data/lib/fat_free_crm/gem_ext/action_controller/base.rb +3 -15
- data/lib/fat_free_crm/gem_ext/active_model/serializers/xml/serializer/attribute.rb +3 -15
- data/lib/fat_free_crm/gem_ext/active_record/schema_dumper.rb +3 -15
- data/lib/fat_free_crm/gem_ext/active_support/buffered_logger.rb +3 -15
- data/lib/fat_free_crm/gem_ext/authlogic/session/cookies.rb +3 -15
- data/lib/fat_free_crm/gem_ext/rails/engine.rb +3 -15
- data/lib/fat_free_crm/gem_ext/rails/text_helper.rb +3 -15
- data/lib/fat_free_crm/gem_ext/rake/task.rb +3 -15
- data/lib/fat_free_crm/gem_ext/simple_form/action_view_extensions/form_helper.rb +3 -15
- data/lib/fat_free_crm/i18n.rb +3 -15
- data/lib/fat_free_crm/load_settings.rb +20 -0
- data/lib/fat_free_crm/mail_processor/base.rb +20 -18
- data/lib/fat_free_crm/mail_processor/comment_replies.rb +3 -15
- data/lib/fat_free_crm/mail_processor/dropbox.rb +4 -16
- data/lib/fat_free_crm/permissions.rb +3 -15
- data/lib/fat_free_crm/plugin.rb +3 -15
- data/lib/fat_free_crm/plugin_dependencies.rb +3 -15
- data/lib/fat_free_crm/renderers.rb +6 -25
- data/lib/fat_free_crm/sortable.rb +3 -15
- data/lib/fat_free_crm/tabs.rb +3 -15
- data/lib/fat_free_crm/version.rb +5 -17
- data/lib/fat_free_crm/view_factory.rb +3 -15
- data/lib/missing_translation_detector.rb +50 -0
- data/lib/tasks/db/migrate.rake +3 -15
- data/lib/tasks/db/schema.rake +3 -15
- data/lib/tasks/ffcrm/comment_replies.rake +3 -15
- data/lib/tasks/ffcrm/config.rake +28 -16
- data/lib/tasks/ffcrm/demo.rake +3 -15
- data/lib/tasks/ffcrm/dropbox.rake +3 -15
- data/lib/tasks/ffcrm/missing_translations.rake +33 -0
- data/lib/tasks/ffcrm/settings.rake +3 -15
- data/lib/tasks/ffcrm/setup.rake +15 -24
- data/lib/tasks/ffcrm/update_data.rake +3 -15
- data/spec/controllers/admin/groups_controller_spec.rb +5 -0
- data/spec/controllers/admin/users_controller_spec.rb +5 -0
- data/spec/controllers/applications_controller_spec.rb +5 -0
- data/spec/controllers/authentications_controller_spec.rb +5 -0
- data/spec/controllers/comments_controller_spec.rb +5 -0
- data/spec/controllers/emails_controller_spec.rb +5 -0
- data/spec/controllers/entities/accounts_controller_spec.rb +5 -0
- data/spec/controllers/entities/campaigns_controller_spec.rb +5 -0
- data/spec/controllers/entities/contacts_controller_spec.rb +5 -0
- data/spec/controllers/entities/leads_controller_spec.rb +5 -0
- data/spec/controllers/entities/opportunities_controller_spec.rb +5 -0
- data/spec/controllers/entities_controller_spec.rb +5 -0
- data/spec/controllers/home_controller_spec.rb +5 -0
- data/spec/controllers/lists_controller_spec.rb +5 -0
- data/spec/controllers/passwords_controller_spec.rb +5 -0
- data/spec/controllers/tasks_controller_spec.rb +7 -6
- data/spec/controllers/users_controller_spec.rb +5 -0
- data/spec/factories/account_factories.rb +5 -0
- data/spec/factories/campaign_factories.rb +6 -1
- data/spec/factories/contact_factories.rb +6 -1
- data/spec/factories/field_factories.rb +6 -1
- data/spec/factories/lead_factories.rb +6 -1
- data/spec/factories/list_factories.rb +6 -1
- data/spec/factories/opportunity_factories.rb +16 -5
- data/spec/factories/sequences.rb +7 -1
- data/spec/factories/setting_factories.rb +6 -1
- data/spec/factories/shared_factories.rb +5 -0
- data/spec/factories/subscription_factories.rb +5 -0
- data/spec/factories/tag_factories.rb +6 -1
- data/spec/factories/task_factories.rb +6 -1
- data/spec/factories/user_factories.rb +5 -0
- data/spec/features/acceptance_helper.rb +9 -0
- data/spec/{acceptance → features}/accounts_spec.rb +14 -9
- data/spec/{acceptance → features}/admin/groups_spec.rb +5 -0
- data/spec/{acceptance → features}/admin/users_spec.rb +9 -4
- data/spec/{acceptance → features}/campaigns_spec.rb +14 -16
- data/spec/{acceptance → features}/contacts_spec.rb +13 -16
- data/spec/{acceptance → features}/dashboard_spec.rb +5 -0
- data/spec/{acceptance → features}/leads_spec.rb +11 -12
- data/spec/{acceptance → features}/opportunities_overview_spec.rb +5 -0
- data/spec/{acceptance → features}/opportunities_spec.rb +14 -16
- data/spec/features/support/browser.rb +18 -0
- data/spec/{acceptance → features}/support/headless.rb +5 -3
- data/spec/{acceptance → features}/support/helpers.rb +6 -1
- data/spec/features/support/maintain_sessions.rb +10 -0
- data/spec/{acceptance → features}/support/paths.rb +9 -4
- data/spec/{acceptance → features}/support/selector_helpers.rb +6 -1
- data/spec/{acceptance → features}/tasks_spec.rb +7 -5
- data/spec/helpers/accounts_helper_spec.rb +5 -0
- data/spec/helpers/admin/field_groups_helper_spec.rb +5 -0
- data/spec/helpers/admin/plugins_helper_spec.rb +5 -0
- data/spec/helpers/admin/settings_helper_spec.rb +5 -0
- data/spec/helpers/admin/users_helper_spec.rb +5 -0
- data/spec/helpers/application_helper_spec.rb +5 -0
- data/spec/helpers/authentications_helper_spec.rb +5 -0
- data/spec/helpers/campaigns_helper_spec.rb +5 -0
- data/spec/helpers/comments_helper_spec.rb +5 -0
- data/spec/helpers/contacts_helper_spec.rb +5 -0
- data/spec/helpers/emails_helper_spec.rb +5 -0
- data/spec/helpers/fields_helper_spec.rb +5 -0
- data/spec/helpers/groups_helper_spec.rb +6 -1
- data/spec/helpers/home_helper_spec.rb +5 -0
- data/spec/helpers/leads_helper_spec.rb +5 -0
- data/spec/helpers/lists_helper_spec.rb +6 -1
- data/spec/helpers/opportunities_helper_spec.rb +5 -0
- data/spec/helpers/passwords_helper_spec.rb +5 -0
- data/spec/helpers/tasks_helper_spec.rb +5 -0
- data/spec/helpers/users_helper_spec.rb +5 -0
- data/spec/lib/comment_extensions_spec.rb +5 -0
- data/spec/lib/core_ext/string_spec.rb +5 -0
- data/spec/lib/errors_spec.rb +5 -0
- data/spec/lib/fields_spec.rb +5 -0
- data/spec/lib/mail_processor/base_spec.rb +5 -0
- data/spec/lib/mail_processor/comment_replies_spec.rb +5 -0
- data/spec/lib/mail_processor/dropbox_spec.rb +5 -0
- data/spec/lib/mail_processor/sample_emails/dropbox.rb +5 -0
- data/spec/lib/permissions_spec.rb +5 -0
- data/spec/lib/view_factory_spec.rb +5 -0
- data/spec/mailers/subscription_mailer_spec.rb +19 -1
- data/spec/mailers/user_mailer_spec.rb +6 -1
- data/spec/models/entities/account_contact_spec.rb +5 -0
- data/spec/models/entities/account_opportunity_spec.rb +5 -0
- data/spec/models/entities/account_spec.rb +6 -1
- data/spec/models/entities/campaign_spec.rb +5 -0
- data/spec/models/entities/contact_opportunity_spec.rb +5 -0
- data/spec/models/entities/contact_spec.rb +5 -0
- data/spec/models/entities/lead_spec.rb +5 -0
- data/spec/models/entities/opportunity_spec.rb +15 -2
- data/spec/models/fields/custom_field_date_pair_spec.rb +3 -15
- data/spec/models/fields/custom_field_pair_spec.rb +3 -15
- data/spec/models/fields/custom_field_spec.rb +5 -0
- data/spec/models/fields/field_group_spec.rb +5 -0
- data/spec/models/fields/field_spec.rb +5 -0
- data/spec/models/list_spec.rb +5 -0
- data/spec/models/observers/entity_observer_spec.rb +5 -0
- data/spec/models/polymorphic/address_spec.rb +5 -0
- data/spec/models/polymorphic/avatar_spec.rb +5 -0
- data/spec/models/polymorphic/comment_spec.rb +5 -0
- data/spec/models/polymorphic/email_spec.rb +5 -0
- data/spec/models/polymorphic/task_spec.rb +5 -0
- data/spec/models/polymorphic/version_spec.rb +26 -22
- data/spec/models/setting_spec.rb +5 -0
- data/spec/models/users/authentication_spec.rb +5 -0
- data/spec/models/users/group_spec.rb +6 -1
- data/spec/models/users/permission_spec.rb +5 -0
- data/spec/models/users/preference_spec.rb +5 -0
- data/spec/models/users/user_spec.rb +6 -1
- data/spec/routing/accounts_routing_spec.rb +5 -0
- data/spec/routing/admin/users_routing_spec.rb +5 -0
- data/spec/routing/campaigns_routing_spec.rb +5 -0
- data/spec/routing/comments_routing_spec.rb +5 -0
- data/spec/routing/contacts_routing_spec.rb +5 -0
- data/spec/routing/emails_routing_spec.rb +5 -0
- data/spec/routing/leads_routing_spec.rb +5 -0
- data/spec/routing/opportunities_routing_spec.rb +5 -0
- data/spec/routing/tasks_routing_spec.rb +5 -0
- data/spec/routing/users_routing_spec.rb +5 -0
- data/spec/shared/controllers.rb +8 -3
- data/spec/shared/models.rb +110 -105
- data/spec/spec_helper.rb +40 -22
- data/spec/support/assert_select.rb +5 -0
- data/spec/support/auth_macros.rb +5 -0
- data/spec/support/macros.rb +5 -0
- data/spec/support/mail_processor_mocks.rb +5 -0
- data/spec/support/rjs_support.rb +6 -1
- data/spec/support/uploaded_file.rb +5 -0
- data/spec/views/accounts/_edit.haml_spec.rb +5 -0
- data/spec/views/accounts/_new.haml_spec.rb +5 -0
- data/spec/views/accounts/create.rjs_spec.rb +5 -0
- data/spec/views/accounts/destroy.rjs_spec.rb +5 -0
- data/spec/views/accounts/edit.rjs_spec.rb +5 -0
- data/spec/views/accounts/index.haml_spec.rb +5 -0
- data/spec/views/accounts/index.rjs_spec.rb +5 -0
- data/spec/views/accounts/new.rjs_spec.rb +5 -0
- data/spec/views/accounts/show.haml_spec.rb +5 -0
- data/spec/views/accounts/update.rjs_spec.rb +5 -0
- data/spec/views/admin/users/_create.haml_spec.rb +5 -0
- data/spec/views/admin/users/create.rjs_spec.rb +5 -0
- data/spec/views/admin/users/destroy.rjs_spec.rb +5 -0
- data/spec/views/admin/users/edit.rjs_spec.rb +5 -0
- data/spec/views/admin/users/index.haml_spec.rb +5 -0
- data/spec/views/admin/users/index.rjs_spec.rb +5 -0
- data/spec/views/admin/users/new.rjs_spec.rb +5 -0
- data/spec/views/admin/users/reactivate.rjs_spec.rb +5 -0
- data/spec/views/admin/users/show.haml_spec.rb +5 -0
- data/spec/views/admin/users/suspend.rjs_spec.rb +5 -0
- data/spec/views/admin/users/update.rjs_spec.rb +5 -0
- data/spec/views/application/auto_complete.haml_spec.rb +5 -0
- data/spec/views/authentications/new.haml_spec.rb +5 -0
- data/spec/views/campaigns/_edit.haml_spec.rb +8 -2
- data/spec/views/campaigns/_new.haml_spec.rb +5 -0
- data/spec/views/campaigns/create.rjs_spec.rb +5 -0
- data/spec/views/campaigns/destroy.rjs_spec.rb +5 -0
- data/spec/views/campaigns/edit.rjs_spec.rb +5 -0
- data/spec/views/campaigns/index.haml_spec.rb +5 -0
- data/spec/views/campaigns/index.rjs_spec.rb +5 -0
- data/spec/views/campaigns/new.rjs_spec.rb +5 -0
- data/spec/views/campaigns/show.haml_spec.rb +5 -0
- data/spec/views/campaigns/update.rjs_spec.rb +5 -0
- data/spec/views/comments/new.rjs_spec.rb +5 -0
- data/spec/views/contacts/_edit.haml_spec.rb +5 -0
- data/spec/views/contacts/_new.haml_spec.rb +5 -0
- data/spec/views/contacts/create.rjs_spec.rb +5 -0
- data/spec/views/contacts/destroy.rjs_spec.rb +5 -0
- data/spec/views/contacts/edit.rjs_spec.rb +5 -0
- data/spec/views/contacts/index.haml_spec.rb +5 -0
- data/spec/views/contacts/index.rjs_spec.rb +5 -0
- data/spec/views/contacts/new.rjs_spec.rb +5 -0
- data/spec/views/contacts/show.haml_spec.rb +5 -0
- data/spec/views/contacts/update.rjs_spec.rb +5 -0
- data/spec/views/home/index.haml_spec.rb +5 -0
- data/spec/views/home/index.rjs_spec.rb +5 -0
- data/spec/views/home/options.rjs_spec.rb +5 -0
- data/spec/views/leads/_convert.haml_spec.rb +5 -0
- data/spec/views/leads/_edit.haml_spec.rb +5 -0
- data/spec/views/leads/_new.haml_spec.rb +5 -0
- data/spec/views/leads/_sidebar_show.haml_spec.rb +5 -0
- data/spec/views/leads/convert.rjs_spec.rb +5 -0
- data/spec/views/leads/create.rjs_spec.rb +5 -0
- data/spec/views/leads/destroy.rjs_spec.rb +5 -0
- data/spec/views/leads/edit.rjs_spec.rb +5 -0
- data/spec/views/leads/index.haml_spec.rb +5 -0
- data/spec/views/leads/index.rjs_spec.rb +5 -0
- data/spec/views/leads/new.rjs_spec.rb +5 -0
- data/spec/views/leads/promote.rjs_spec.rb +5 -0
- data/spec/views/leads/reject.rjs_spec.rb +5 -0
- data/spec/views/leads/show.haml_spec.rb +5 -0
- data/spec/views/leads/update.rjs_spec.rb +5 -0
- data/spec/views/opportunities/_edit.haml_spec.rb +5 -0
- data/spec/views/opportunities/_new.haml_spec.rb +5 -0
- data/spec/views/opportunities/create.rjs_spec.rb +5 -0
- data/spec/views/opportunities/destroy.rjs_spec.rb +5 -0
- data/spec/views/opportunities/edit.rjs_spec.rb +5 -0
- data/spec/views/opportunities/index.haml_spec.rb +5 -0
- data/spec/views/opportunities/index.rjs_spec.rb +5 -0
- data/spec/views/opportunities/new.rjs_spec.rb +5 -0
- data/spec/views/opportunities/show.haml_spec.rb +5 -0
- data/spec/views/opportunities/update.rjs_spec.rb +5 -0
- data/spec/views/tasks/_edit.haml_spec.rb +5 -0
- data/spec/views/tasks/complete.rjs_spec.rb +5 -0
- data/spec/views/tasks/create.rjs_spec.rb +5 -0
- data/spec/views/tasks/destroy.rjs_spec.rb +5 -0
- data/spec/views/tasks/edit.rjs_spec.rb +5 -0
- data/spec/views/tasks/index.haml_spec.rb +5 -0
- data/spec/views/tasks/new.rjs_spec.rb +5 -0
- data/spec/views/tasks/update.rjs_spec.rb +5 -0
- data/spec/views/users/avatar.rjs_spec.rb +5 -0
- data/spec/views/users/change_password.rjs_spec.rb +5 -0
- data/spec/views/users/edit.rjs_spec.rb +5 -0
- data/spec/views/users/password.rjs_spec.rb +5 -0
- data/spec/views/users/update.rjs_spec.rb +5 -0
- data/spec/views/users/upload_avatar.rjs_spec.rb +5 -0
- metadata +45 -101
- data/LICENSE +0 -620
- data/app/inputs/datetimepair_input.rb +0 -37
- data/config/initializers/custom_fields.rb +0 -21
- data/lib/fat_free_crm/core_ext/array.rb +0 -75
- data/lib/fat_free_crm/syck_yaml.rb +0 -21
- data/spec/acceptance/acceptance_helper.rb +0 -8
- data/spec/acceptance/support/browser.rb +0 -13
- data/spec/acceptance/support/maintain_sessions.rb +0 -5
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
# encoding: utf-8
|
2
7
|
# == Schema Information
|
3
8
|
#
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
# == Schema Information
|
2
7
|
#
|
3
8
|
# Table name: versions
|
@@ -15,7 +20,7 @@
|
|
15
20
|
|
16
21
|
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
17
22
|
|
18
|
-
describe Version do
|
23
|
+
describe Version, :versioning => true do
|
19
24
|
|
20
25
|
before do
|
21
26
|
login
|
@@ -36,36 +41,37 @@ describe Version do
|
|
36
41
|
end
|
37
42
|
end
|
38
43
|
|
39
|
-
it "should
|
44
|
+
it "should not include view events" do
|
40
45
|
@versions = Version.for(current_user).exclude_events(:view)
|
41
|
-
@versions.map(&:event).sort.
|
46
|
+
@versions.map(&:event).sort.should_not include('view')
|
42
47
|
end
|
43
48
|
|
44
|
-
it "should
|
49
|
+
it "should exclude create, update and destroy events" do
|
45
50
|
@versions = Version.for(current_user).exclude_events(:create, :update, :destroy)
|
46
|
-
@versions.map(&:event).
|
51
|
+
@versions.map(&:event).should_not include('create')
|
52
|
+
@versions.map(&:event).should_not include('update')
|
53
|
+
@versions.map(&:event).should_not include('destroy')
|
47
54
|
end
|
48
55
|
|
49
|
-
it "should
|
56
|
+
it "should include only destroy events" do
|
50
57
|
@versions = Version.for(current_user).include_events(:destroy)
|
51
|
-
@versions.map(&:event).should == %w(destroy)
|
58
|
+
@versions.map(&:event).uniq.should == %w(destroy)
|
52
59
|
end
|
53
60
|
|
54
|
-
it "should
|
61
|
+
it "should include create and update events" do
|
55
62
|
@versions = Version.for(current_user).include_events(:create, :update)
|
56
|
-
@versions.map(&:event).sort.should == %w(create update)
|
63
|
+
@versions.map(&:event).uniq.sort.should == %w(create update)
|
57
64
|
end
|
58
65
|
|
59
|
-
it "should select versions for given user" do
|
66
|
+
it "should select all versions for a given user" do
|
60
67
|
@versions = Version.for(current_user)
|
61
|
-
@versions.map(&:
|
68
|
+
@versions.map(&:whodunnit).uniq.should == [current_user.id.to_s]
|
62
69
|
end
|
63
70
|
end
|
64
71
|
|
65
72
|
%w(account campaign contact lead opportunity task).each do |item|
|
66
73
|
describe "Create, update, and delete (#{item})" do
|
67
74
|
before :each do
|
68
|
-
PaperTrail.enabled = true
|
69
75
|
@item = FactoryGirl.create(item.to_sym, :user => current_user)
|
70
76
|
@conditions = {:item_id => @item.id, :item_type => @item.class.name, :whodunnit => PaperTrail.whodunnit}
|
71
77
|
end
|
@@ -104,7 +110,6 @@ describe Version do
|
|
104
110
|
|
105
111
|
describe "Recently viewed items (task)" do
|
106
112
|
before do
|
107
|
-
PaperTrail.enabled = true
|
108
113
|
@task = FactoryGirl.create(:task)
|
109
114
|
@conditions = {:item_id => @task.id, :item_type => @task.class.name}
|
110
115
|
end
|
@@ -112,7 +117,7 @@ describe Version do
|
|
112
117
|
it "creating a new task should not add it to recently viewed items list" do
|
113
118
|
@versions = Version.where(@conditions)
|
114
119
|
|
115
|
-
@versions.map(&:event).should
|
120
|
+
@versions.map(&:event).should include('create') # but not view
|
116
121
|
end
|
117
122
|
|
118
123
|
it "updating a new task should not add it to recently viewed items list" do
|
@@ -133,21 +138,21 @@ describe Version do
|
|
133
138
|
@task.update_attribute(:completed_at, 1.second.ago)
|
134
139
|
@versions = Version.where(@conditions)
|
135
140
|
|
136
|
-
@versions.map(&:event).
|
141
|
+
@versions.map(&:event).should include('complete')
|
137
142
|
end
|
138
143
|
|
139
144
|
it "should create 'reassigned' task event" do
|
140
145
|
@task.update_attribute(:assigned_to, current_user.id + 1)
|
141
146
|
@versions = Version.where(@conditions)
|
142
147
|
|
143
|
-
@versions.map(&:event).
|
148
|
+
@versions.map(&:event).should include('reassign')
|
144
149
|
end
|
145
150
|
|
146
151
|
it "should create 'rescheduled' task event" do
|
147
152
|
@task.update_attribute(:bucket, "due_tomorrow") # FactoryGirl creates :due_asap task
|
148
153
|
@versions = Version.where(@conditions)
|
149
154
|
|
150
|
-
@versions.map(&:event).
|
155
|
+
@versions.map(&:event).should include('reschedule')
|
151
156
|
end
|
152
157
|
end
|
153
158
|
|
@@ -161,7 +166,7 @@ describe Version do
|
|
161
166
|
@lead.update_attribute(:status, "rejected")
|
162
167
|
@versions = Version.where(@conditions)
|
163
168
|
|
164
|
-
@versions.map(&:event).
|
169
|
+
@versions.map(&:event).should include('reject')
|
165
170
|
end
|
166
171
|
end
|
167
172
|
|
@@ -169,7 +174,6 @@ describe Version do
|
|
169
174
|
before do
|
170
175
|
@user = FactoryGirl.create(:user)
|
171
176
|
Version.delete_all
|
172
|
-
PaperTrail.enabled = true
|
173
177
|
end
|
174
178
|
|
175
179
|
it "should not show the create/update versions if the item is private" do
|
@@ -237,11 +241,11 @@ describe Version do
|
|
237
241
|
|
238
242
|
describe "Exportable" do
|
239
243
|
before do
|
240
|
-
FactoryGirl.create(:version, :whodunnit => FactoryGirl.create(:user).id, :item => FactoryGirl.create(:account))
|
241
|
-
FactoryGirl.create(:version, :whodunnit => FactoryGirl.create(:user, :first_name => nil, :last_name => nil).id, :item => FactoryGirl.create(:account))
|
242
244
|
end
|
243
245
|
it_should_behave_like("exportable") do
|
244
|
-
|
246
|
+
v1 = FactoryGirl.create(:version, :whodunnit => FactoryGirl.create(:user).id, :item => FactoryGirl.create(:account))
|
247
|
+
v2 = FactoryGirl.create(:version, :whodunnit => FactoryGirl.create(:user, :first_name => nil, :last_name => nil).id, :item => FactoryGirl.create(:account))
|
248
|
+
let(:exported) { [v1,v2] }
|
245
249
|
end
|
246
250
|
end
|
247
251
|
end
|
data/spec/models/setting_spec.rb
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
# == Schema Information
|
2
7
|
#
|
3
8
|
# Table name: settings
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
7
|
|
3
8
|
describe Authentication do
|
@@ -1,5 +1,10 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
require 'spec_helper'
|
2
7
|
|
3
8
|
describe Group do
|
4
|
-
|
9
|
+
|
5
10
|
end
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
# == Schema Information
|
2
7
|
#
|
3
8
|
# Table name: permissions
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
# == Schema Information
|
2
7
|
#
|
3
8
|
# Table name: preferences
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
# == Schema Information
|
2
7
|
#
|
3
8
|
# Table name: users
|
@@ -122,7 +127,7 @@ describe User do
|
|
122
127
|
describe "have_assigned_opportunities" do
|
123
128
|
before :each do
|
124
129
|
@user1 = FactoryGirl.create(:user)
|
125
|
-
FactoryGirl.create(:
|
130
|
+
FactoryGirl.create(:opportunity, :assignee => @user1, :stage => 'analysis')
|
126
131
|
|
127
132
|
@user2 = FactoryGirl.create(:user)
|
128
133
|
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
7
|
|
3
8
|
describe AccountsController do
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
7
|
|
3
8
|
describe Admin::UsersController do
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
7
|
|
3
8
|
describe CampaignsController do
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
7
|
|
3
8
|
describe CommentsController do
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
7
|
|
3
8
|
describe ContactsController do
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
7
|
|
3
8
|
describe EmailsController do
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
7
|
|
3
8
|
describe LeadsController do
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
7
|
|
3
8
|
describe OpportunitiesController do
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
7
|
|
3
8
|
describe TasksController do
|
@@ -1,3 +1,8 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
7
|
|
3
8
|
describe UsersController do
|
data/spec/shared/controllers.rb
CHANGED
@@ -1,6 +1,11 @@
|
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
1
6
|
module SharedControllerSpecs
|
2
7
|
|
3
|
-
|
8
|
+
shared_examples "auto complete" do
|
4
9
|
before(:each) do
|
5
10
|
@query = "Hello"
|
6
11
|
end
|
@@ -27,7 +32,7 @@ module SharedControllerSpecs
|
|
27
32
|
end
|
28
33
|
end
|
29
34
|
|
30
|
-
|
35
|
+
shared_examples "attach" do
|
31
36
|
it "should attach existing asset to the parent asset of different type" do
|
32
37
|
xhr :put, :attach, :id => @model.id, :assets => @attachment.class.name.tableize, :asset_id => @attachment.id
|
33
38
|
@model.send(@attachment.class.name.tableize).should include(@attachment)
|
@@ -70,7 +75,7 @@ module SharedControllerSpecs
|
|
70
75
|
end
|
71
76
|
end
|
72
77
|
|
73
|
-
|
78
|
+
shared_examples "discard" do
|
74
79
|
it "should discard the attachment without deleting it" do
|
75
80
|
xhr :post, :discard, :id => @model.id, :attachment => @attachment.class.name, :attachment_id => @attachment.id
|
76
81
|
assigns[:attachment].should == @attachment.reload # The attachment should still exist.
|
data/spec/shared/models.rb
CHANGED
@@ -1,137 +1,142 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
# Copyright (c) 2008-2013 Michael Dvorkin and contributors.
|
2
|
+
#
|
3
|
+
# Fat Free CRM is freely distributable under the terms of MIT license.
|
4
|
+
# See MIT-LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
|
+
#------------------------------------------------------------------------------
|
6
|
+
require "cancan/matchers"
|
7
|
+
|
8
|
+
shared_examples "exportable" do
|
9
|
+
it "Model#export returns all records with extra attributes added" do
|
10
|
+
|
11
|
+
# User/assignee for the second record has no first/last name.
|
12
|
+
exported.size.should == 2
|
13
|
+
if exported[0].respond_to?(:user_id)
|
7
14
|
exported[0].user_id_full_name.should == "#{exported[0].user.first_name} #{exported[0].user.last_name}"
|
8
15
|
exported[1].user_id_full_name.should == "#{exported[1].user.email}"
|
16
|
+
end
|
9
17
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
end
|
18
|
+
if exported[0].respond_to?(:assigned_to)
|
19
|
+
if exported[0].assigned_to?
|
20
|
+
exported[0].assigned_to_full_name.should == "#{exported[0].assignee.first_name} #{exported[0].assignee.last_name}"
|
21
|
+
else
|
22
|
+
exported[0].assigned_to_full_name.should == ''
|
23
|
+
end
|
24
|
+
if exported[1].assigned_to?
|
25
|
+
exported[1].assigned_to_full_name.should == "#{exported[1].assignee.email}"
|
26
|
+
else
|
27
|
+
exported[1].assigned_to_full_name.should == ''
|
21
28
|
end
|
29
|
+
end
|
22
30
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
end
|
31
|
+
if exported[0].respond_to?(:completed_by)
|
32
|
+
if exported[0].completed_by?
|
33
|
+
exported[0].completed_by_full_name.should == "#{exported[0].completor.first_name} #{exported[0].completor.last_name}"
|
34
|
+
else
|
35
|
+
exported[0].completed_by_full_name.should == ''
|
36
|
+
end
|
37
|
+
if exported[1].completed_by?
|
38
|
+
exported[1].completed_by_full_name.should == "#{exported[1].completor.email}"
|
39
|
+
else
|
40
|
+
exported[1].completed_by_full_name.should == ''
|
34
41
|
end
|
35
42
|
end
|
36
43
|
end
|
44
|
+
end
|
37
45
|
|
38
|
-
|
46
|
+
shared_examples Ability do |klass|
|
39
47
|
|
40
|
-
|
48
|
+
subject { ability }
|
49
|
+
let(:ability){ Ability.new(user) }
|
50
|
+
let(:user){ FactoryGirl.create(:user) }
|
51
|
+
let(:factory){ klass.model_name.underscore }
|
41
52
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
let(:factory){ klass.model_name.underscore }
|
53
|
+
context "create" do
|
54
|
+
it{ should be_able_to(:create, klass) }
|
55
|
+
end
|
46
56
|
|
47
|
-
|
48
|
-
|
49
|
-
end
|
57
|
+
context "when public access" do
|
58
|
+
let(:asset){ FactoryGirl.create(factory, :access => 'Public') }
|
50
59
|
|
51
|
-
|
52
|
-
|
60
|
+
it{ should be_able_to(:manage, asset) }
|
61
|
+
end
|
53
62
|
|
54
|
-
|
55
|
-
|
63
|
+
context "when private access owner" do
|
64
|
+
let(:asset){ FactoryGirl.create(factory, :access => 'Private', :user_id => user.id) }
|
56
65
|
|
57
|
-
|
58
|
-
|
66
|
+
it{ should be_able_to(:manage, asset) }
|
67
|
+
end
|
59
68
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
context "when private access administrator" do
|
64
|
-
let(:asset){ FactoryGirl.create(factory, :access => 'Private') }
|
65
|
-
let(:user) { FactoryGirl.create(:user, :admin => true) }
|
69
|
+
context "when private access administrator" do
|
70
|
+
let(:asset){ FactoryGirl.create(factory, :access => 'Private') }
|
71
|
+
let(:user) { FactoryGirl.create(:user, :admin => true) }
|
66
72
|
|
67
|
-
|
68
|
-
|
73
|
+
it{ should be_able_to(:manage, asset) }
|
74
|
+
end
|
69
75
|
|
70
|
-
|
71
|
-
|
76
|
+
context "when private access not owner" do
|
77
|
+
let(:asset){ FactoryGirl.create(factory, :access => 'Private') }
|
72
78
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
context "when private access not owner but is assigned" do
|
77
|
-
let(:asset){ FactoryGirl.create(factory, :access => 'Private', :assigned_to => user.id) }
|
79
|
+
it{ should_not be_able_to(:manage, asset) }
|
80
|
+
end
|
78
81
|
|
79
|
-
|
80
|
-
|
82
|
+
context "when private access not owner but is assigned" do
|
83
|
+
let(:asset){ FactoryGirl.create(factory, :access => 'Private', :assigned_to => user.id) }
|
81
84
|
|
82
|
-
|
83
|
-
|
84
|
-
let(:permission){ Permission.new(:user => user) }
|
85
|
+
it{ should be_able_to(:manage, asset) }
|
86
|
+
end
|
85
87
|
|
86
|
-
|
87
|
-
|
88
|
+
context "when shared access with permission" do
|
89
|
+
let(:asset){ FactoryGirl.create(factory, :access => 'Shared', :permissions => [permission]) }
|
90
|
+
let(:permission){ Permission.new(:user => user) }
|
88
91
|
|
89
|
-
|
90
|
-
|
91
|
-
let(:permission){ Permission.new(:user => FactoryGirl.create(:user)) }
|
92
|
+
it{ should be_able_to(:manage, asset) }
|
93
|
+
end
|
92
94
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
context "when shared access with no permission but administrator" do
|
97
|
-
let(:asset){ FactoryGirl.create(factory, :access => 'Shared', :permissions => [permission]) }
|
98
|
-
let(:permission){ Permission.new(:user => FactoryGirl.create(:user)) }
|
99
|
-
let(:user) { FactoryGirl.create(:user, :admin => true) }
|
95
|
+
context "when shared access with no permission" do
|
96
|
+
let(:asset){ FactoryGirl.create(factory, :access => 'Shared', :permissions => [permission]) }
|
97
|
+
let(:permission){ Permission.new(:user => FactoryGirl.create(:user)) }
|
100
98
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
context "when shared access with no permission but assigned" do
|
105
|
-
let(:asset){ FactoryGirl.create(factory, :access => 'Shared', :permissions => [permission], :assigned_to => user.id) }
|
106
|
-
let(:permission){ Permission.new(:user => FactoryGirl.create(:user)) }
|
99
|
+
it{ should_not be_able_to(:manage, asset) }
|
100
|
+
end
|
107
101
|
|
108
|
-
|
109
|
-
|
102
|
+
context "when shared access with no permission but administrator" do
|
103
|
+
let(:asset){ FactoryGirl.create(factory, :access => 'Shared', :permissions => [permission]) }
|
104
|
+
let(:permission){ Permission.new(:user => FactoryGirl.create(:user)) }
|
105
|
+
let(:user) { FactoryGirl.create(:user, :admin => true) }
|
110
106
|
|
111
|
-
|
112
|
-
|
113
|
-
let(:permission){ Permission.new(:group => group) }
|
114
|
-
let(:group){ FactoryGirl.create(:group, :users => [user]) }
|
107
|
+
it{ should be_able_to(:manage, asset) }
|
108
|
+
end
|
115
109
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
let(:group1){ FactoryGirl.create(:group, :users => [user]) }
|
123
|
-
let(:group2){ FactoryGirl.create(:group, :users => [user]) }
|
124
|
-
|
125
|
-
it{ should be_able_to(:manage, asset) }
|
126
|
-
end
|
110
|
+
context "when shared access with no permission but assigned" do
|
111
|
+
let(:asset){ FactoryGirl.create(factory, :access => 'Shared', :permissions => [permission], :assigned_to => user.id) }
|
112
|
+
let(:permission){ Permission.new(:user => FactoryGirl.create(:user)) }
|
113
|
+
|
114
|
+
it{ should be_able_to(:manage, asset) }
|
115
|
+
end
|
127
116
|
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
117
|
+
context "when shared access with group permission" do
|
118
|
+
let(:asset){ FactoryGirl.create(factory, :access => 'Shared', :permissions => [permission]) }
|
119
|
+
let(:permission){ Permission.new(:group => group) }
|
120
|
+
let(:group){ FactoryGirl.create(:group, :users => [user]) }
|
132
121
|
|
133
|
-
|
134
|
-
|
135
|
-
|
122
|
+
it{ should be_able_to(:manage, asset) }
|
123
|
+
end
|
124
|
+
|
125
|
+
context "when shared access with several group permissions" do
|
126
|
+
let(:asset){ FactoryGirl.create(factory, :access => 'Shared', :permissions => permissions) }
|
127
|
+
let(:permissions){ [Permission.new(:group => group1), Permission.new(:group => group2)] }
|
128
|
+
let(:group1){ FactoryGirl.create(:group, :users => [user]) }
|
129
|
+
let(:group2){ FactoryGirl.create(:group, :users => [user]) }
|
130
|
+
|
131
|
+
it{ should be_able_to(:manage, asset) }
|
136
132
|
end
|
133
|
+
|
134
|
+
context "when shared access with no group permission" do
|
135
|
+
let(:asset){ FactoryGirl.create(factory, :access => 'Shared', :permissions => [permission]) }
|
136
|
+
let(:permission){ Permission.new(:group => group) }
|
137
|
+
let(:group){ FactoryGirl.create(:group) }
|
138
|
+
|
139
|
+
it{ should_not be_able_to(:manage, asset) }
|
140
|
+
end
|
141
|
+
|
137
142
|
end
|