Merge branch 'master' into ticket-show-page
This commit is contained in:
commit
121192d21a
66 changed files with 2647 additions and 1492 deletions
|
|
@ -172,11 +172,15 @@ linters:
|
||||||
- "app/views/users/edit.html.haml"
|
- "app/views/users/edit.html.haml"
|
||||||
- "app/views/users/show.html.haml"
|
- "app/views/users/show.html.haml"
|
||||||
- "app/views/admin/cfps/index.html.haml"
|
- "app/views/admin/cfps/index.html.haml"
|
||||||
|
- "app/views/tracks/_form.html.haml"
|
||||||
|
- "app/views/tracks/index.html.haml"
|
||||||
|
- "app/views/tracks/show.html.haml"
|
||||||
|
|
||||||
# Offense count: 223
|
# Offense count: 223
|
||||||
InstanceVariables:
|
InstanceVariables:
|
||||||
exclude:
|
exclude:
|
||||||
- "app/views/admin/campaigns/_form.html.haml"
|
- "app/views/admin/campaigns/_form.html.haml"
|
||||||
|
- "app/views/admin/cfps/_booths_cfp.html.haml"
|
||||||
- "app/views/admin/cfps/_form.html.haml"
|
- "app/views/admin/cfps/_form.html.haml"
|
||||||
- "app/views/admin/conferences/_todo_list.html.haml"
|
- "app/views/admin/conferences/_todo_list.html.haml"
|
||||||
- "app/views/admin/difficulty_levels/_form.html.haml"
|
- "app/views/admin/difficulty_levels/_form.html.haml"
|
||||||
|
|
@ -231,6 +235,7 @@ linters:
|
||||||
- "app/views/schedules/_schedule_item.html.haml"
|
- "app/views/schedules/_schedule_item.html.haml"
|
||||||
- "app/views/schedules/_schedule_tabs.html.haml"
|
- "app/views/schedules/_schedule_tabs.html.haml"
|
||||||
- "app/views/admin/cfps/_events_cfp.html.haml"
|
- "app/views/admin/cfps/_events_cfp.html.haml"
|
||||||
|
- "app/views/tracks/_form.html.haml"
|
||||||
|
|
||||||
# Offense count: 32
|
# Offense count: 32
|
||||||
IdNames:
|
IdNames:
|
||||||
|
|
@ -330,6 +335,8 @@ linters:
|
||||||
- "app/views/shared/_object_changes.html.haml"
|
- "app/views/shared/_object_changes.html.haml"
|
||||||
- "app/views/tickets/_ticket.html.haml"
|
- "app/views/tickets/_ticket.html.haml"
|
||||||
- "app/views/tickets/index.html.haml"
|
- "app/views/tickets/index.html.haml"
|
||||||
|
- "app/views/tracks/index.html.haml"
|
||||||
|
- "app/views/tracks/show.html.haml"
|
||||||
|
|
||||||
# Offense count: 23
|
# Offense count: 23
|
||||||
ClassesBeforeIds:
|
ClassesBeforeIds:
|
||||||
|
|
|
||||||
|
|
@ -30,3 +30,4 @@ Metrics/BlockLength:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'spec/models/conference_spec.rb'
|
- 'spec/models/conference_spec.rb'
|
||||||
- 'spec/features/ability_spec.rb'
|
- 'spec/features/ability_spec.rb'
|
||||||
|
- 'spec/models/ability_spec.rb'
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
# This configuration was generated by
|
# This configuration was generated by
|
||||||
# `rubocop --auto-gen-config`
|
# `rubocop --auto-gen-config`
|
||||||
# on 2017-05-06 17:45:40 +0530 using RuboCop version 0.48.1.
|
# on 2017-07-14 12:03:16 +0000 using RuboCop version 0.49.1.
|
||||||
# The point is for the user to remove these configuration records
|
# The point is for the user to remove these configuration records
|
||||||
# one by one as the offenses are removed from the code base.
|
# one by one as the offenses are removed from the code base.
|
||||||
# Note that changes in the inspected code, or installation of new
|
# Note that changes in the inspected code, or installation of new
|
||||||
# versions of RuboCop, may require this file to be generated again.
|
# versions of RuboCop, may require this file to be generated again.
|
||||||
|
|
||||||
# Offense count: 13
|
# Offense count: 15
|
||||||
# Cop supports --auto-correct.
|
# Cop supports --auto-correct.
|
||||||
# Configuration parameters: Include, TreatCommentsAsGroupSeparators.
|
# Configuration parameters: Include, TreatCommentsAsGroupSeparators.
|
||||||
# Include: **/Gemfile, **/gems.rb
|
# Include: **/Gemfile, **/gems.rb
|
||||||
|
|
@ -14,29 +14,271 @@ Bundler/OrderedGems:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'Gemfile'
|
- 'Gemfile'
|
||||||
|
|
||||||
# Offense count: 29
|
# Offense count: 1
|
||||||
Lint/AmbiguousBlockAssociation:
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
|
||||||
|
# SupportedStyles: with_first_parameter, with_fixed_indentation
|
||||||
|
Layout/AlignParameters:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'app/models/comment.rb'
|
- 'Vagrantfile'
|
||||||
- 'app/models/event.rb'
|
|
||||||
- 'app/models/event_schedule.rb'
|
# Offense count: 9
|
||||||
- 'app/models/ticket_purchase.rb'
|
# Cop supports --auto-correct.
|
||||||
- 'app/models/user.rb'
|
Layout/ClosingParenthesisIndentation:
|
||||||
- 'spec/controllers/admin/conferences_controller_spec.rb'
|
Exclude:
|
||||||
- 'spec/controllers/admin/event_schedules_controller_spec.rb'
|
- 'app/controllers/conference_registrations_controller.rb'
|
||||||
- 'spec/controllers/admin/registration_periods_controller_spec.rb'
|
- 'spec/support/omniauth_macros.rb'
|
||||||
- 'spec/controllers/proposals_controller_spec.rb'
|
|
||||||
- 'spec/controllers/schedules_controller_spec.rb'
|
# Offense count: 14
|
||||||
- 'spec/models/user_spec.rb'
|
# Cop supports --auto-correct.
|
||||||
- 'spec/controllers/admin/users_controller_spec.rb'
|
Layout/CommentIndentation:
|
||||||
|
Exclude:
|
||||||
|
- 'app/controllers/admin/comments_controller.rb'
|
||||||
|
- 'app/controllers/admin/difficulty_levels_controller.rb'
|
||||||
|
- 'app/models/conference.rb'
|
||||||
|
- 'app/models/program.rb'
|
||||||
|
- 'app/models/track.rb'
|
||||||
|
- 'spec/features/volunteers_spec.rb'
|
||||||
|
|
||||||
# Offense count: 1
|
# Offense count: 1
|
||||||
# Cop supports --auto-correct.
|
# Cop supports --auto-correct.
|
||||||
# Configuration parameters: EnforcedStyleAlignWith, SupportedStylesAlignWith.
|
Layout/EmptyLineAfterMagicComment:
|
||||||
# SupportedStylesAlignWith: either, start_of_block, start_of_line
|
|
||||||
Lint/BlockAlignment:
|
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'lib/tasks/demo_data_for_development.rake'
|
- 'spec/models/conference_spec.rb'
|
||||||
|
|
||||||
|
# Offense count: 104
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||||
|
# SupportedStyles: empty_lines, no_empty_lines
|
||||||
|
Layout/EmptyLinesAroundBlockBody:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Layout/EmptyLinesAroundExceptionHandlingKeywords:
|
||||||
|
Exclude:
|
||||||
|
- 'app/models/payment.rb'
|
||||||
|
|
||||||
|
# Offense count: 9
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: AllowForAlignment, ForceEqualSignAlignment.
|
||||||
|
Layout/ExtraSpacing:
|
||||||
|
Exclude:
|
||||||
|
- 'Guardfile'
|
||||||
|
- 'app/controllers/application_controller.rb'
|
||||||
|
- 'config.ru'
|
||||||
|
- 'db/migrate/20140623101032_create_ahoy_events.rb'
|
||||||
|
- 'db/migrate/20140701123203_add_events_per_week_to_conference.rb'
|
||||||
|
- 'db/migrate/20140719160903_create_delayed_jobs.rb'
|
||||||
|
- 'spec/models/conference_spec.rb'
|
||||||
|
|
||||||
|
# Offense count: 42
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
|
||||||
|
# SupportedStyles: consistent, special_for_inner_method_call, special_for_inner_method_call_in_parentheses
|
||||||
|
Layout/FirstParameterIndentation:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 2
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
|
||||||
|
# SupportedStyles: special_inside_parentheses, consistent, align_brackets
|
||||||
|
Layout/IndentArray:
|
||||||
|
Exclude:
|
||||||
|
- 'app/models/conference.rb'
|
||||||
|
|
||||||
|
# Offense count: 2
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: IndentationWidth.
|
||||||
|
Layout/IndentAssignment:
|
||||||
|
Exclude:
|
||||||
|
- 'app/helpers/format_helper.rb'
|
||||||
|
- 'app/models/conference.rb'
|
||||||
|
|
||||||
|
# Offense count: 3
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
|
||||||
|
# SupportedStyles: special_inside_parentheses, consistent, align_braces
|
||||||
|
Layout/IndentHash:
|
||||||
|
Exclude:
|
||||||
|
- 'app/models/user.rb'
|
||||||
|
- 'db/migrate/20140701123203_add_events_per_week_to_conference.rb'
|
||||||
|
|
||||||
|
# Offense count: 3
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||||
|
# SupportedStyles: normal, rails
|
||||||
|
Layout/IndentationConsistency:
|
||||||
|
Exclude:
|
||||||
|
- 'app/controllers/users_controller.rb'
|
||||||
|
- 'app/models/event.rb'
|
||||||
|
- 'spec/controllers/subscriptions_controller_spec.rb'
|
||||||
|
|
||||||
|
# Offense count: 4
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Layout/LeadingCommentSpace:
|
||||||
|
Exclude:
|
||||||
|
- 'Guardfile'
|
||||||
|
- 'app/models/comment.rb'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||||
|
# SupportedStyles: symmetrical, new_line, same_line
|
||||||
|
Layout/MultilineArrayBraceLayout:
|
||||||
|
Exclude:
|
||||||
|
- 'app/controllers/conference_registrations_controller.rb'
|
||||||
|
|
||||||
|
# Offense count: 5
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Layout/MultilineBlockLayout:
|
||||||
|
Exclude:
|
||||||
|
- 'app/serializers/conference_serializer.rb'
|
||||||
|
|
||||||
|
# Offense count: 6
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||||
|
# SupportedStyles: symmetrical, new_line, same_line
|
||||||
|
Layout/MultilineHashBraceLayout:
|
||||||
|
Exclude:
|
||||||
|
- 'app/serializers/conference_serializer.rb'
|
||||||
|
- 'spec/models/event_spec.rb'
|
||||||
|
|
||||||
|
# Offense count: 40
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||||
|
# SupportedStyles: symmetrical, new_line, same_line
|
||||||
|
Layout/MultilineMethodCallBraceLayout:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 55
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
|
||||||
|
# SupportedStyles: aligned, indented, indented_relative_to_receiver
|
||||||
|
Layout/MultilineMethodCallIndentation:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 23
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
|
||||||
|
# SupportedStyles: aligned, indented
|
||||||
|
Layout/MultilineOperationIndentation:
|
||||||
|
Exclude:
|
||||||
|
- 'app/controllers/admin/events_controller.rb'
|
||||||
|
- 'app/controllers/application_controller.rb'
|
||||||
|
- 'app/models/conference.rb'
|
||||||
|
- 'app/models/event.rb'
|
||||||
|
- 'db/migrate/20140701123203_add_events_per_week_to_conference.rb'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Layout/SpaceAfterComma:
|
||||||
|
Exclude:
|
||||||
|
- 'lib/tasks/data_demo.rake'
|
||||||
|
|
||||||
|
# Offense count: 3
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||||
|
# SupportedStyles: space, no_space
|
||||||
|
Layout/SpaceAroundEqualsInParameterDefault:
|
||||||
|
Exclude:
|
||||||
|
- 'app/helpers/format_helper.rb'
|
||||||
|
- 'app/models/event.rb'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: AllowForAlignment.
|
||||||
|
Layout/SpaceAroundOperators:
|
||||||
|
Exclude:
|
||||||
|
- 'lib/tasks/data.rake'
|
||||||
|
|
||||||
|
# Offense count: 416
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||||
|
# SupportedStyles: space, no_space
|
||||||
|
Layout/SpaceBeforeBlockBraces:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Layout/SpaceBeforeComma:
|
||||||
|
Exclude:
|
||||||
|
- 'lib/tasks/data_demo.rake'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: AllowForAlignment.
|
||||||
|
Layout/SpaceBeforeFirstArg:
|
||||||
|
Exclude:
|
||||||
|
- 'spec/controllers/admin/roles_controller_spec.rb'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Layout/SpaceBeforeSemicolon:
|
||||||
|
Exclude:
|
||||||
|
- 'Guardfile'
|
||||||
|
|
||||||
|
# Offense count: 51
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles, EnforcedStyleForEmptyBraces, SupportedStylesForEmptyBraces, SpaceBeforeBlockParameters.
|
||||||
|
# SupportedStyles: space, no_space
|
||||||
|
# SupportedStylesForEmptyBraces: space, no_space
|
||||||
|
Layout/SpaceInsideBlockBraces:
|
||||||
|
Exclude:
|
||||||
|
- 'app/controllers/admin/comments_controller.rb'
|
||||||
|
- 'app/controllers/admin/events_controller.rb'
|
||||||
|
- 'app/controllers/admin/questions_controller.rb'
|
||||||
|
- 'app/helpers/application_helper.rb'
|
||||||
|
- 'app/models/program.rb'
|
||||||
|
- 'app/models/ticket.rb'
|
||||||
|
- 'app/models/user.rb'
|
||||||
|
- 'lib/tasks/events_registrations.rake'
|
||||||
|
- 'spec/controllers/admin/event_schedules_controller_spec.rb'
|
||||||
|
- 'spec/controllers/admin/schedules_controller_spec.rb'
|
||||||
|
- 'spec/features/splashpage_spec.rb'
|
||||||
|
- 'spec/models/ability_spec.rb'
|
||||||
|
- 'spec/models/user_spec.rb'
|
||||||
|
|
||||||
|
# Offense count: 19
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles, EnforcedStyleForEmptyBraces, SupportedStylesForEmptyBraces.
|
||||||
|
# SupportedStyles: space, no_space, compact
|
||||||
|
# SupportedStylesForEmptyBraces: space, no_space
|
||||||
|
Layout/SpaceInsideHashLiteralBraces:
|
||||||
|
Exclude:
|
||||||
|
- 'app/controllers/admin/conferences_controller.rb'
|
||||||
|
- 'app/controllers/api/v1/speakers_controller.rb'
|
||||||
|
- 'app/models/conference.rb'
|
||||||
|
- 'app/models/event_type.rb'
|
||||||
|
- 'app/models/user.rb'
|
||||||
|
- 'spec/models/event_spec.rb'
|
||||||
|
- 'spec/models/payment_spec.rb'
|
||||||
|
|
||||||
|
# Offense count: 2
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Layout/SpaceInsidePercentLiteralDelimiters:
|
||||||
|
Exclude:
|
||||||
|
- 'Gemfile'
|
||||||
|
|
||||||
|
# Offense count: 2
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||||
|
# SupportedStyles: final_newline, final_blank_line
|
||||||
|
Layout/TrailingBlankLines:
|
||||||
|
Exclude:
|
||||||
|
- 'lib/tasks/event_attatchments.rake'
|
||||||
|
- 'lib/tasks/roles.rake'
|
||||||
|
|
||||||
|
# Offense count: 13
|
||||||
|
Lint/AmbiguousBlockAssociation:
|
||||||
|
Exclude:
|
||||||
|
- 'spec/controllers/admin/conferences_controller_spec.rb'
|
||||||
|
- 'spec/controllers/admin/event_schedules_controller_spec.rb'
|
||||||
|
- 'spec/controllers/admin/registration_periods_controller_spec.rb'
|
||||||
|
- 'spec/controllers/admin/users_controller_spec.rb'
|
||||||
|
- 'spec/controllers/proposals_controller_spec.rb'
|
||||||
|
- 'spec/controllers/schedules_controller_spec.rb'
|
||||||
|
- 'spec/models/user_spec.rb'
|
||||||
|
|
||||||
# Offense count: 2
|
# Offense count: 2
|
||||||
Lint/DuplicatedKey:
|
Lint/DuplicatedKey:
|
||||||
|
|
@ -50,6 +292,12 @@ Lint/IneffectiveAccessModifier:
|
||||||
- 'app/models/commercial.rb'
|
- 'app/models/commercial.rb'
|
||||||
- 'app/models/conference.rb'
|
- 'app/models/conference.rb'
|
||||||
|
|
||||||
|
# Offense count: 2
|
||||||
|
Lint/ScriptPermission:
|
||||||
|
Exclude:
|
||||||
|
- 'Guardfile'
|
||||||
|
- 'Rakefile'
|
||||||
|
|
||||||
# Offense count: 1
|
# Offense count: 1
|
||||||
# Cop supports --auto-correct.
|
# Cop supports --auto-correct.
|
||||||
# Configuration parameters: IgnoreEmptyBlocks, AllowUnusedKeywordArguments.
|
# Configuration parameters: IgnoreEmptyBlocks, AllowUnusedKeywordArguments.
|
||||||
|
|
@ -57,192 +305,40 @@ Lint/UnusedBlockArgument:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'lib/tasks/user.rake'
|
- 'lib/tasks/user.rake'
|
||||||
|
|
||||||
# Offense count: 108
|
# Offense count: 114
|
||||||
Metrics/AbcSize:
|
Metrics/AbcSize:
|
||||||
Max: 75
|
Max: 86
|
||||||
Exclude:
|
|
||||||
- 'app/controllers/admin/conferences_controller.rb'
|
|
||||||
|
|
||||||
# Offense count: 202
|
# Offense count: 233
|
||||||
# Configuration parameters: CountComments, ExcludedMethods.
|
# Configuration parameters: CountComments, ExcludedMethods.
|
||||||
Metrics/BlockLength:
|
Metrics/BlockLength:
|
||||||
Max: 487
|
Max: 471
|
||||||
|
|
||||||
# Offense count: 21
|
# Offense count: 23
|
||||||
Metrics/CyclomaticComplexity:
|
Metrics/CyclomaticComplexity:
|
||||||
Max: 12
|
Max: 12
|
||||||
|
|
||||||
# Offense count: 1991
|
# Offense count: 2353
|
||||||
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
|
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
|
||||||
# URISchemes: http, https
|
# URISchemes: http, https
|
||||||
Metrics/LineLength:
|
Metrics/LineLength:
|
||||||
Max: 619
|
Max: 619
|
||||||
|
|
||||||
# Offense count: 115
|
# Offense count: 120
|
||||||
# Configuration parameters: CountComments.
|
# Configuration parameters: CountComments.
|
||||||
Metrics/MethodLength:
|
Metrics/MethodLength:
|
||||||
Max: 56
|
Max: 56
|
||||||
|
|
||||||
# Offense count: 2
|
# Offense count: 3
|
||||||
# Configuration parameters: CountComments.
|
# Configuration parameters: CountComments.
|
||||||
Metrics/ModuleLength:
|
Metrics/ModuleLength:
|
||||||
Max: 472
|
Max: 159
|
||||||
Exclude:
|
|
||||||
- 'app/helpers/application_helper.rb'
|
|
||||||
|
|
||||||
|
# Offense count: 15
|
||||||
# Offense count: 14
|
|
||||||
Metrics/PerceivedComplexity:
|
Metrics/PerceivedComplexity:
|
||||||
Max: 15
|
Max: 16
|
||||||
|
|
||||||
# Offense count: 11
|
# Offense count: 20
|
||||||
# Cop supports --auto-correct.
|
|
||||||
# Configuration parameters: EnforcedStyle, SupportedStyles, Include.
|
|
||||||
# SupportedStyles: action, filter
|
|
||||||
# Include: app/controllers/**/*.rb
|
|
||||||
Rails/ActionFilter:
|
|
||||||
Exclude:
|
|
||||||
- 'app/controllers/admin/base_controller.rb'
|
|
||||||
- 'app/controllers/admin/registrations_controller.rb'
|
|
||||||
- 'app/controllers/application_controller.rb'
|
|
||||||
- 'app/controllers/conference_registrations_controller.rb'
|
|
||||||
- 'app/controllers/subscriptions_controller.rb'
|
|
||||||
- 'app/controllers/ticket_purchases_controller.rb'
|
|
||||||
- 'app/controllers/tickets_controller.rb'
|
|
||||||
- 'app/controllers/users/omniauth_callbacks_controller.rb'
|
|
||||||
|
|
||||||
# Offense count: 7
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
# Configuration parameters: NilOrEmpty, NotPresent, UnlessPresent.
|
|
||||||
Rails/Blank:
|
|
||||||
Exclude:
|
|
||||||
- 'app/models/program.rb'
|
|
||||||
- 'app/models/user.rb'
|
|
||||||
- 'spec/factories/event_schedule.rb'
|
|
||||||
|
|
||||||
# Offense count: 139
|
|
||||||
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
|
||||||
# SupportedStyles: strict, flexible
|
|
||||||
Rails/Date:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Offense count: 3
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
# Configuration parameters: Whitelist.
|
|
||||||
# Whitelist: find_by_sql
|
|
||||||
Rails/DynamicFindBy:
|
|
||||||
Exclude:
|
|
||||||
- 'app/controllers/admin/events_controller.rb'
|
|
||||||
- 'db/migrate/20140701123203_add_events_per_week_to_conference.rb'
|
|
||||||
|
|
||||||
# Offense count: 4
|
|
||||||
Rails/FilePath:
|
|
||||||
Exclude:
|
|
||||||
- 'spec/features/lodgings_spec.rb'
|
|
||||||
- 'spec/features/sponsor_spec.rb'
|
|
||||||
- 'spec/spec_helper.rb'
|
|
||||||
|
|
||||||
# Offense count: 6
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
# Configuration parameters: Include.
|
|
||||||
# Include: app/models/**/*.rb
|
|
||||||
Rails/FindBy:
|
|
||||||
Exclude:
|
|
||||||
- 'app/models/conference.rb'
|
|
||||||
- 'app/models/event.rb'
|
|
||||||
- 'app/models/openid.rb'
|
|
||||||
- 'app/models/ticket_purchase.rb'
|
|
||||||
- 'app/models/user.rb'
|
|
||||||
|
|
||||||
# Offense count: 7
|
|
||||||
# Configuration parameters: Include.
|
|
||||||
# Include: app/models/**/*.rb
|
|
||||||
Rails/HasAndBelongsToMany:
|
|
||||||
Exclude:
|
|
||||||
- 'app/models/conference.rb'
|
|
||||||
- 'app/models/qanswer.rb'
|
|
||||||
- 'app/models/question.rb'
|
|
||||||
- 'app/models/registration.rb'
|
|
||||||
- 'app/models/vchoice.rb'
|
|
||||||
|
|
||||||
# Offense count: 170
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
# Configuration parameters: Include.
|
|
||||||
# Include: spec/**/*, test/**/*
|
|
||||||
Rails/HttpPositionalArguments:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Offense count: 2
|
|
||||||
Rails/OutputSafety:
|
|
||||||
Exclude:
|
|
||||||
- 'app/helpers/format_helper.rb'
|
|
||||||
- 'app/models/commercial.rb'
|
|
||||||
- 'app/helpers/application_helper.rb'
|
|
||||||
|
|
||||||
# Offense count: 10
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
Rails/PluralizationGrammar:
|
|
||||||
Exclude:
|
|
||||||
- 'spec/models/conference_spec.rb'
|
|
||||||
|
|
||||||
# Offense count: 22
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
# Configuration parameters: NotNilAndNotEmpty, NotBlank, UnlessBlank.
|
|
||||||
Rails/Present:
|
|
||||||
Exclude:
|
|
||||||
- 'app/helpers/users_helper.rb'
|
|
||||||
- 'app/models/campaign.rb'
|
|
||||||
- 'app/models/cfp.rb'
|
|
||||||
- 'app/models/email_settings.rb'
|
|
||||||
- 'app/models/event.rb'
|
|
||||||
- 'app/models/program.rb'
|
|
||||||
- 'app/models/venue.rb'
|
|
||||||
|
|
||||||
# Offense count: 52
|
|
||||||
# Configuration parameters: Include.
|
|
||||||
# Include: db/migrate/*.rb
|
|
||||||
Rails/ReversibleMigration:
|
|
||||||
Exclude:
|
|
||||||
- 'db/migrate/20140530082708_remove_color_defaults.rb'
|
|
||||||
- 'db/migrate/20140605125153_update_event_states.rb'
|
|
||||||
- 'db/migrate/20140610173021_change_person_id_to_user_id_in_registrations.rb'
|
|
||||||
- 'db/migrate/20140611123926_change_person_id_to_user_id_in_votes.rb'
|
|
||||||
- 'db/migrate/20140623150541_drop_person_and_event_person_tables.rb'
|
|
||||||
- 'db/migrate/20140731165107_move_conference_contact_details_to_contact.rb'
|
|
||||||
- 'db/migrate/20140801164901_move_conference_media_to_commercial.rb'
|
|
||||||
- 'db/migrate/20140801170430_move_event_media_to_commercial.rb'
|
|
||||||
- 'db/migrate/20140820093735_migrating_supporter_registrations_to_ticket_users.rb'
|
|
||||||
- 'db/migrate/20140821103643_split_ticket_price_in_price_and_currency.rb'
|
|
||||||
- 'db/migrate/20140825093132_move_splashpage_attributes_from_conference_to_splashpage.rb'
|
|
||||||
- 'db/migrate/20140930092923_move_sponsor_email_to_contact.rb'
|
|
||||||
- 'db/migrate/20141117222919_drop_splash_descriptions_and_photo.rb'
|
|
||||||
- 'db/migrate/20141130182139_drop_table_event_attachments.rb'
|
|
||||||
|
|
||||||
# Offense count: 5
|
|
||||||
# Configuration parameters: Blacklist.
|
|
||||||
# Blacklist: decrement!, decrement_counter, increment!, increment_counter, toggle!, touch, update_all, update_attribute, update_column, update_columns, update_counters
|
|
||||||
Rails/SkipsModelValidations:
|
|
||||||
Exclude:
|
|
||||||
- 'app/controllers/payments_controller.rb'
|
|
||||||
- 'app/models/revision_observer.rb'
|
|
||||||
- 'db/migrate/20140730104658_migrate_roles_for_cancancan.rb'
|
|
||||||
- 'lib/tasks/user.rake'
|
|
||||||
|
|
||||||
# Offense count: 46
|
|
||||||
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
|
||||||
# SupportedStyles: strict, flexible
|
|
||||||
Rails/TimeZone:
|
|
||||||
Exclude:
|
|
||||||
- 'app/models/comment.rb'
|
|
||||||
- 'app/models/conference.rb'
|
|
||||||
- 'lib/tasks/dump_db.rake'
|
|
||||||
- 'spec/controllers/admin/comments_controller_spec.rb'
|
|
||||||
- 'spec/controllers/admin/programs_controller_spec.rb'
|
|
||||||
- 'spec/factories/users.rb'
|
|
||||||
- 'spec/models/campaign_spec.rb'
|
|
||||||
- 'spec/models/conference_spec.rb'
|
|
||||||
|
|
||||||
# Offense count: 18
|
|
||||||
Style/AccessorMethodName:
|
Style/AccessorMethodName:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'app/controllers/admin/events_controller.rb'
|
- 'app/controllers/admin/events_controller.rb'
|
||||||
|
|
@ -254,33 +350,17 @@ Style/AccessorMethodName:
|
||||||
|
|
||||||
# Offense count: 1
|
# Offense count: 1
|
||||||
# Cop supports --auto-correct.
|
# Cop supports --auto-correct.
|
||||||
# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
|
|
||||||
# SupportedStyles: with_first_parameter, with_fixed_indentation
|
|
||||||
Style/AlignParameters:
|
|
||||||
Exclude:
|
|
||||||
- 'Vagrantfile'
|
|
||||||
|
|
||||||
# Offense count: 2
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||||
# SupportedStyles: is_a?, kind_of?
|
# SupportedStyles: is_a?, kind_of?
|
||||||
Style/ClassCheck:
|
Style/ClassCheck:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'app/models/email_settings.rb'
|
- 'app/models/email_settings.rb'
|
||||||
- 'app/models/revision_observer.rb'
|
|
||||||
|
|
||||||
# Offense count: 1
|
# Offense count: 1
|
||||||
Style/ClassVars:
|
Style/ClassVars:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'spec/support/kneet_connections.rb'
|
- 'spec/support/kneet_connections.rb'
|
||||||
|
|
||||||
# Offense count: 9
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
Style/ClosingParenthesisIndentation:
|
|
||||||
Exclude:
|
|
||||||
- 'app/controllers/conference_registrations_controller.rb'
|
|
||||||
- 'spec/support/omniauth_macros.rb'
|
|
||||||
|
|
||||||
# Offense count: 2
|
# Offense count: 2
|
||||||
# Cop supports --auto-correct.
|
# Cop supports --auto-correct.
|
||||||
Style/ColonMethodCall:
|
Style/ColonMethodCall:
|
||||||
|
|
@ -288,42 +368,20 @@ Style/ColonMethodCall:
|
||||||
- 'app/models/commercial.rb'
|
- 'app/models/commercial.rb'
|
||||||
- 'app/models/contact.rb'
|
- 'app/models/contact.rb'
|
||||||
|
|
||||||
# Offense count: 14
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
Style/CommentIndentation:
|
|
||||||
Exclude:
|
|
||||||
- 'app/controllers/admin/comments_controller.rb'
|
|
||||||
- 'app/controllers/admin/difficulty_levels_controller.rb'
|
|
||||||
- 'app/models/conference.rb'
|
|
||||||
- 'app/models/program.rb'
|
|
||||||
- 'app/models/track.rb'
|
|
||||||
- 'spec/features/volunteers_spec.rb'
|
|
||||||
|
|
||||||
# Offense count: 3
|
# Offense count: 3
|
||||||
# Cop supports --auto-correct.
|
# Cop supports --auto-correct.
|
||||||
# Configuration parameters: EnforcedStyle, SupportedStyles, SingleLineConditionsOnly, IncludeTernaryExpressions.
|
# Configuration parameters: EnforcedStyle, SupportedStyles, SingleLineConditionsOnly, IncludeTernaryExpressions.
|
||||||
# SupportedStyles: assign_to_condition, assign_inside_condition
|
# SupportedStyles: assign_to_condition, assign_inside_condition
|
||||||
Style/ConditionalAssignment:
|
Style/ConditionalAssignment:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'app/controllers/admin/volunteers_controller.rb'
|
|
||||||
- 'app/controllers/conference_registrations_controller.rb'
|
|
||||||
- 'app/helpers/format_helper.rb'
|
- 'app/helpers/format_helper.rb'
|
||||||
- 'app/models/conference.rb'
|
|
||||||
- 'app/models/ticket_purchase.rb'
|
|
||||||
- 'app/models/user.rb'
|
|
||||||
- 'db/migrate/20140610165551_migrate_data_person_to_user.rb'
|
- 'db/migrate/20140610165551_migrate_data_person_to_user.rb'
|
||||||
- 'db/migrate/20140820124117_undo_wrong_migration20140801080705_add_users_to_events.rb'
|
- 'db/migrate/20140820124117_undo_wrong_migration20140801080705_add_users_to_events.rb'
|
||||||
|
|
||||||
# Offense count: 436
|
# Offense count: 464
|
||||||
Style/Documentation:
|
Style/Documentation:
|
||||||
Enabled: false
|
Enabled: false
|
||||||
|
|
||||||
# Offense count: 1
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
Style/ElseAlignment:
|
|
||||||
Exclude:
|
|
||||||
- 'app/helpers/format_helper.rb'
|
|
||||||
|
|
||||||
# Offense count: 2
|
# Offense count: 2
|
||||||
# Cop supports --auto-correct.
|
# Cop supports --auto-correct.
|
||||||
Style/EmptyCaseCondition:
|
Style/EmptyCaseCondition:
|
||||||
|
|
@ -331,25 +389,6 @@ Style/EmptyCaseCondition:
|
||||||
- 'app/helpers/format_helper.rb'
|
- 'app/helpers/format_helper.rb'
|
||||||
- 'app/helpers/versions_helper.rb'
|
- 'app/helpers/versions_helper.rb'
|
||||||
|
|
||||||
# Offense count: 1
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
Style/EmptyLineAfterMagicComment:
|
|
||||||
Exclude:
|
|
||||||
- 'spec/models/conference_spec.rb'
|
|
||||||
|
|
||||||
# Offense count: 109
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
|
||||||
# SupportedStyles: empty_lines, no_empty_lines
|
|
||||||
Style/EmptyLinesAroundBlockBody:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Offense count: 1
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
Style/EmptyLinesAroundExceptionHandlingKeywords:
|
|
||||||
Exclude:
|
|
||||||
- 'app/models/payment.rb'
|
|
||||||
|
|
||||||
# Offense count: 1
|
# Offense count: 1
|
||||||
# Cop supports --auto-correct.
|
# Cop supports --auto-correct.
|
||||||
Style/EmptyLiteral:
|
Style/EmptyLiteral:
|
||||||
|
|
@ -371,19 +410,6 @@ Style/EmptyMethod:
|
||||||
- 'db/migrate/20130206192339_rename_attending_social_events_with_partner.rb'
|
- 'db/migrate/20130206192339_rename_attending_social_events_with_partner.rb'
|
||||||
- 'db/migrate/20130216122155_set_registration_defaults_to_false.rb'
|
- 'db/migrate/20130216122155_set_registration_defaults_to_false.rb'
|
||||||
|
|
||||||
# Offense count: 9
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
# Configuration parameters: AllowForAlignment, ForceEqualSignAlignment.
|
|
||||||
Style/ExtraSpacing:
|
|
||||||
Exclude:
|
|
||||||
- 'Guardfile'
|
|
||||||
- 'app/controllers/application_controller.rb'
|
|
||||||
- 'config.ru'
|
|
||||||
- 'db/migrate/20140623101032_create_ahoy_events.rb'
|
|
||||||
- 'db/migrate/20140701123203_add_events_per_week_to_conference.rb'
|
|
||||||
- 'db/migrate/20140719160903_create_delayed_jobs.rb'
|
|
||||||
- 'spec/models/conference_spec.rb'
|
|
||||||
|
|
||||||
# Offense count: 2
|
# Offense count: 2
|
||||||
# Configuration parameters: ExpectMatchingDefinition, Regex, IgnoreExecutableScripts, AllowedAcronyms.
|
# Configuration parameters: ExpectMatchingDefinition, Regex, IgnoreExecutableScripts, AllowedAcronyms.
|
||||||
# AllowedAcronyms: CLI, DSL, ACL, API, ASCII, CPU, CSS, DNS, EOF, GUID, HTML, HTTP, HTTPS, ID, IP, JSON, LHS, QPS, RAM, RHS, RPC, SLA, SMTP, SQL, SSH, TCP, TLS, TTL, UDP, UI, UID, UUID, URI, URL, UTF8, VM, XML, XMPP, XSRF, XSS
|
# AllowedAcronyms: CLI, DSL, ACL, API, ASCII, CPU, CSS, DNS, EOF, GUID, HTML, HTTP, HTTPS, ID, IP, JSON, LHS, QPS, RAM, RHS, RPC, SLA, SMTP, SQL, SSH, TCP, TLS, TTL, UDP, UI, UID, UUID, URI, URL, UTF8, VM, XML, XMPP, XSRF, XSS
|
||||||
|
|
@ -392,14 +418,7 @@ Style/FileName:
|
||||||
- 'Gemfile'
|
- 'Gemfile'
|
||||||
- 'Vagrantfile'
|
- 'Vagrantfile'
|
||||||
|
|
||||||
# Offense count: 42
|
# Offense count: 24
|
||||||
# Cop supports --auto-correct.
|
|
||||||
# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
|
|
||||||
# SupportedStyles: consistent, special_for_inner_method_call, special_for_inner_method_call_in_parentheses
|
|
||||||
Style/FirstParameterIndentation:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Offense count: 23
|
|
||||||
# Configuration parameters: MinBodyLength.
|
# Configuration parameters: MinBodyLength.
|
||||||
Style/GuardClause:
|
Style/GuardClause:
|
||||||
Enabled: false
|
Enabled: false
|
||||||
|
|
@ -432,59 +451,6 @@ Style/IfUnlessModifier:
|
||||||
- 'spec/controllers/admin/conferences_controller_spec.rb'
|
- 'spec/controllers/admin/conferences_controller_spec.rb'
|
||||||
- 'spec/support/flash.rb'
|
- 'spec/support/flash.rb'
|
||||||
|
|
||||||
# Offense count: 2
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
|
|
||||||
# SupportedStyles: special_inside_parentheses, consistent, align_brackets
|
|
||||||
Style/IndentArray:
|
|
||||||
Exclude:
|
|
||||||
- 'app/models/conference.rb'
|
|
||||||
|
|
||||||
# Offense count: 2
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
# Configuration parameters: IndentationWidth.
|
|
||||||
Style/IndentAssignment:
|
|
||||||
Exclude:
|
|
||||||
- 'app/helpers/format_helper.rb'
|
|
||||||
- 'app/models/conference.rb'
|
|
||||||
|
|
||||||
# Offense count: 3
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
|
|
||||||
# SupportedStyles: special_inside_parentheses, consistent, align_braces
|
|
||||||
Style/IndentHash:
|
|
||||||
Exclude:
|
|
||||||
- 'app/models/user.rb'
|
|
||||||
- 'db/migrate/20140701123203_add_events_per_week_to_conference.rb'
|
|
||||||
|
|
||||||
# Offense count: 3
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
|
||||||
# SupportedStyles: normal, rails
|
|
||||||
Style/IndentationConsistency:
|
|
||||||
Exclude:
|
|
||||||
- 'app/controllers/users_controller.rb'
|
|
||||||
- 'app/models/event.rb'
|
|
||||||
- 'spec/controllers/subscriptions_controller_spec.rb'
|
|
||||||
|
|
||||||
# Offense count: 6
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
# Configuration parameters: Width, IgnoredPatterns.
|
|
||||||
Style/IndentationWidth:
|
|
||||||
Exclude:
|
|
||||||
- 'app/helpers/format_helper.rb'
|
|
||||||
- 'app/serializers/conference_serializer.rb'
|
|
||||||
- 'db/migrate/20140701123203_add_events_per_week_to_conference.rb'
|
|
||||||
- 'lib/tasks/demo_data_for_development.rake'
|
|
||||||
- 'spec/models/ability_spec.rb'
|
|
||||||
|
|
||||||
# Offense count: 4
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
Style/LeadingCommentSpace:
|
|
||||||
Exclude:
|
|
||||||
- 'Guardfile'
|
|
||||||
- 'app/models/comment.rb'
|
|
||||||
|
|
||||||
# Offense count: 8
|
# Offense count: 8
|
||||||
# Cop supports --auto-correct.
|
# Cop supports --auto-correct.
|
||||||
Style/LineEndConcatenation:
|
Style/LineEndConcatenation:
|
||||||
|
|
@ -503,29 +469,6 @@ Style/MethodDefParentheses:
|
||||||
- 'app/models/user.rb'
|
- 'app/models/user.rb'
|
||||||
- 'lib/tasks/demo_data_for_development.rake'
|
- 'lib/tasks/demo_data_for_development.rake'
|
||||||
|
|
||||||
# Offense count: 1
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
|
||||||
# SupportedStyles: symmetrical, new_line, same_line
|
|
||||||
Style/MultilineArrayBraceLayout:
|
|
||||||
Exclude:
|
|
||||||
- 'app/controllers/conference_registrations_controller.rb'
|
|
||||||
|
|
||||||
# Offense count: 5
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
Style/MultilineBlockLayout:
|
|
||||||
Exclude:
|
|
||||||
- 'app/serializers/conference_serializer.rb'
|
|
||||||
|
|
||||||
# Offense count: 6
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
|
||||||
# SupportedStyles: symmetrical, new_line, same_line
|
|
||||||
Style/MultilineHashBraceLayout:
|
|
||||||
Exclude:
|
|
||||||
- 'app/serializers/conference_serializer.rb'
|
|
||||||
- 'spec/models/event_spec.rb'
|
|
||||||
|
|
||||||
# Offense count: 7
|
# Offense count: 7
|
||||||
# Cop supports --auto-correct.
|
# Cop supports --auto-correct.
|
||||||
Style/MultilineIfModifier:
|
Style/MultilineIfModifier:
|
||||||
|
|
@ -536,33 +479,6 @@ Style/MultilineIfModifier:
|
||||||
- 'app/models/event.rb'
|
- 'app/models/event.rb'
|
||||||
- 'app/models/registration_period.rb'
|
- 'app/models/registration_period.rb'
|
||||||
|
|
||||||
# Offense count: 40
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
|
||||||
# SupportedStyles: symmetrical, new_line, same_line
|
|
||||||
Style/MultilineMethodCallBraceLayout:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Offense count: 55
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
|
|
||||||
# SupportedStyles: aligned, indented, indented_relative_to_receiver
|
|
||||||
Style/MultilineMethodCallIndentation:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Offense count: 27
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
|
|
||||||
# SupportedStyles: aligned, indented
|
|
||||||
Style/MultilineOperationIndentation:
|
|
||||||
Exclude:
|
|
||||||
- 'app/controllers/admin/events_controller.rb'
|
|
||||||
- 'app/controllers/application_controller.rb'
|
|
||||||
- 'app/models/ability.rb'
|
|
||||||
- 'app/models/conference.rb'
|
|
||||||
- 'app/models/event.rb'
|
|
||||||
- 'db/migrate/20140701123203_add_events_per_week_to_conference.rb'
|
|
||||||
|
|
||||||
# Offense count: 2
|
# Offense count: 2
|
||||||
# Cop supports --auto-correct.
|
# Cop supports --auto-correct.
|
||||||
Style/MutableConstant:
|
Style/MutableConstant:
|
||||||
|
|
@ -631,23 +547,21 @@ Style/ParenthesesAroundCondition:
|
||||||
- 'app/controllers/application_controller.rb'
|
- 'app/controllers/application_controller.rb'
|
||||||
- 'app/helpers/format_helper.rb'
|
- 'app/helpers/format_helper.rb'
|
||||||
|
|
||||||
# Offense count: 17
|
# Offense count: 14
|
||||||
# Cop supports --auto-correct.
|
# Cop supports --auto-correct.
|
||||||
# Configuration parameters: PreferredDelimiters.
|
# Configuration parameters: PreferredDelimiters.
|
||||||
Style/PercentLiteralDelimiters:
|
Style/PercentLiteralDelimiters:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'Gemfile'
|
- 'Gemfile'
|
||||||
- 'app/controllers/admin/users_controller.rb'
|
- 'app/controllers/admin/users_controller.rb'
|
||||||
- 'app/models/ability.rb'
|
- 'app/models/cfp.rb'
|
||||||
- 'app/models/comment.rb'
|
- 'app/models/comment.rb'
|
||||||
- 'app/models/commercial.rb'
|
- 'app/models/commercial.rb'
|
||||||
- 'app/models/conference.rb'
|
- 'app/models/conference.rb'
|
||||||
- 'app/models/contact.rb'
|
- 'app/models/contact.rb'
|
||||||
- 'app/models/registration.rb'
|
- 'app/models/registration.rb'
|
||||||
- 'app/models/subscription.rb'
|
- 'app/models/subscription.rb'
|
||||||
- 'app/models/cfp.rb'
|
|
||||||
- 'app/uploaders/picture_uploader.rb'
|
- 'app/uploaders/picture_uploader.rb'
|
||||||
- 'spec/models/ability_spec.rb'
|
|
||||||
- 'spec/models/program_spec.rb'
|
- 'spec/models/program_spec.rb'
|
||||||
|
|
||||||
# Offense count: 2
|
# Offense count: 2
|
||||||
|
|
@ -676,12 +590,6 @@ Style/PreferredHashMethods:
|
||||||
Style/RaiseArgs:
|
Style/RaiseArgs:
|
||||||
EnforcedStyle: compact
|
EnforcedStyle: compact
|
||||||
|
|
||||||
# Offense count: 1
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
Style/RedundantBegin:
|
|
||||||
Exclude:
|
|
||||||
- 'app/models/revision_observer.rb'
|
|
||||||
|
|
||||||
# Offense count: 1
|
# Offense count: 1
|
||||||
# Cop supports --auto-correct.
|
# Cop supports --auto-correct.
|
||||||
Style/RedundantParentheses:
|
Style/RedundantParentheses:
|
||||||
|
|
@ -722,96 +630,6 @@ Style/SingleLineMethods:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'Guardfile'
|
- 'Guardfile'
|
||||||
|
|
||||||
# Offense count: 1
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
Style/SpaceAfterComma:
|
|
||||||
Exclude:
|
|
||||||
- 'lib/tasks/data_demo.rake'
|
|
||||||
|
|
||||||
# Offense count: 2
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
|
||||||
# SupportedStyles: space, no_space
|
|
||||||
Style/SpaceAroundEqualsInParameterDefault:
|
|
||||||
Exclude:
|
|
||||||
- 'app/helpers/format_helper.rb'
|
|
||||||
- 'app/models/event.rb'
|
|
||||||
|
|
||||||
# Offense count: 1
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
# Configuration parameters: AllowForAlignment.
|
|
||||||
Style/SpaceAroundOperators:
|
|
||||||
Exclude:
|
|
||||||
- 'lib/tasks/data.rake'
|
|
||||||
|
|
||||||
# Offense count: 319
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
|
||||||
# SupportedStyles: space, no_space
|
|
||||||
Style/SpaceBeforeBlockBraces:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Offense count: 1
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
Style/SpaceBeforeComma:
|
|
||||||
Exclude:
|
|
||||||
- 'lib/tasks/data_demo.rake'
|
|
||||||
|
|
||||||
# Offense count: 1
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
Style/SpaceBeforeSemicolon:
|
|
||||||
Exclude:
|
|
||||||
- 'Guardfile'
|
|
||||||
|
|
||||||
# Offense count: 2
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
Style/SpaceInsideArrayPercentLiteral:
|
|
||||||
Exclude:
|
|
||||||
- 'spec/models/ability_spec.rb'
|
|
||||||
|
|
||||||
# Offense count: 62
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
# Configuration parameters: EnforcedStyle, SupportedStyles, EnforcedStyleForEmptyBraces, SupportedStylesForEmptyBraces, SpaceBeforeBlockParameters.
|
|
||||||
# SupportedStyles: space, no_space
|
|
||||||
# SupportedStylesForEmptyBraces: space, no_space
|
|
||||||
Style/SpaceInsideBlockBraces:
|
|
||||||
Exclude:
|
|
||||||
- 'app/controllers/admin/comments_controller.rb'
|
|
||||||
- 'app/controllers/admin/events_controller.rb'
|
|
||||||
- 'app/controllers/admin/questions_controller.rb'
|
|
||||||
- 'app/helpers/application_helper.rb'
|
|
||||||
- 'app/models/program.rb'
|
|
||||||
- 'app/models/ticket.rb'
|
|
||||||
- 'app/models/user.rb'
|
|
||||||
- 'lib/tasks/events_registrations.rake'
|
|
||||||
- 'spec/controllers/admin/event_schedules_controller_spec.rb'
|
|
||||||
- 'spec/controllers/admin/schedules_controller_spec.rb'
|
|
||||||
- 'spec/features/splashpage_spec.rb'
|
|
||||||
- 'spec/models/ability_spec.rb'
|
|
||||||
- 'spec/models/user_spec.rb'
|
|
||||||
|
|
||||||
# Offense count: 25
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
# Configuration parameters: EnforcedStyle, SupportedStyles, EnforcedStyleForEmptyBraces, SupportedStylesForEmptyBraces.
|
|
||||||
# SupportedStyles: space, no_space, compact
|
|
||||||
# SupportedStylesForEmptyBraces: space, no_space
|
|
||||||
Style/SpaceInsideHashLiteralBraces:
|
|
||||||
Exclude:
|
|
||||||
- 'app/controllers/admin/conferences_controller.rb'
|
|
||||||
- 'app/controllers/api/v1/speakers_controller.rb'
|
|
||||||
- 'app/models/ability.rb'
|
|
||||||
- 'app/models/conference.rb'
|
|
||||||
- 'app/models/event_type.rb'
|
|
||||||
- 'app/models/user.rb'
|
|
||||||
- 'spec/models/event_spec.rb'
|
|
||||||
- 'spec/models/payment_spec.rb'
|
|
||||||
|
|
||||||
# Offense count: 2
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
Style/SpaceInsidePercentLiteralDelimiters:
|
|
||||||
Exclude:
|
|
||||||
- 'Gemfile'
|
|
||||||
|
|
||||||
# Offense count: 16
|
# Offense count: 16
|
||||||
# Cop supports --auto-correct.
|
# Cop supports --auto-correct.
|
||||||
# Configuration parameters: EnforcedStyle, SupportedStyles, ConsistentQuotesInMultiline.
|
# Configuration parameters: EnforcedStyle, SupportedStyles, ConsistentQuotesInMultiline.
|
||||||
|
|
@ -833,14 +651,14 @@ Style/StringLiteralsInInterpolation:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'lib/tasks/dump_db.rake'
|
- 'lib/tasks/dump_db.rake'
|
||||||
|
|
||||||
# Offense count: 60
|
# Offense count: 73
|
||||||
# Cop supports --auto-correct.
|
# Cop supports --auto-correct.
|
||||||
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
# Configuration parameters: EnforcedStyle, MinSize, SupportedStyles.
|
||||||
# SupportedStyles: percent, brackets
|
# SupportedStyles: percent, brackets
|
||||||
Style/SymbolArray:
|
Style/SymbolArray:
|
||||||
Enabled: false
|
Enabled: false
|
||||||
|
|
||||||
# Offense count: 10
|
# Offense count: 11
|
||||||
# Cop supports --auto-correct.
|
# Cop supports --auto-correct.
|
||||||
# Configuration parameters: IgnoredMethods.
|
# Configuration parameters: IgnoredMethods.
|
||||||
# IgnoredMethods: respond_to, define_method
|
# IgnoredMethods: respond_to, define_method
|
||||||
|
|
@ -850,6 +668,7 @@ Style/SymbolProc:
|
||||||
- 'app/controllers/admin/questions_controller.rb'
|
- 'app/controllers/admin/questions_controller.rb'
|
||||||
- 'app/helpers/application_helper.rb'
|
- 'app/helpers/application_helper.rb'
|
||||||
- 'app/models/ability.rb'
|
- 'app/models/ability.rb'
|
||||||
|
- 'app/models/admin_ability.rb'
|
||||||
- 'db/migrate/20140730104658_migrate_roles_for_cancancan.rb'
|
- 'db/migrate/20140730104658_migrate_roles_for_cancancan.rb'
|
||||||
- 'spec/controllers/admin/conferences_controller_spec.rb'
|
- 'spec/controllers/admin/conferences_controller_spec.rb'
|
||||||
- 'spec/support/flash.rb'
|
- 'spec/support/flash.rb'
|
||||||
|
|
@ -862,15 +681,6 @@ Style/TernaryParentheses:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'app/helpers/format_helper.rb'
|
- 'app/helpers/format_helper.rb'
|
||||||
|
|
||||||
# Offense count: 2
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
|
||||||
# SupportedStyles: final_newline, final_blank_line
|
|
||||||
Style/TrailingBlankLines:
|
|
||||||
Exclude:
|
|
||||||
- 'lib/tasks/event_attatchments.rake'
|
|
||||||
- 'lib/tasks/roles.rake'
|
|
||||||
|
|
||||||
# Offense count: 23
|
# Offense count: 23
|
||||||
# Cop supports --auto-correct.
|
# Cop supports --auto-correct.
|
||||||
# Configuration parameters: EnforcedStyleForMultiline, SupportedStylesForMultiline.
|
# Configuration parameters: EnforcedStyleForMultiline, SupportedStylesForMultiline.
|
||||||
|
|
@ -881,12 +691,6 @@ Style/TrailingCommaInLiteral:
|
||||||
- 'db/migrate/20140701123203_add_events_per_week_to_conference.rb'
|
- 'db/migrate/20140701123203_add_events_per_week_to_conference.rb'
|
||||||
- 'spec/models/conference_spec.rb'
|
- 'spec/models/conference_spec.rb'
|
||||||
|
|
||||||
# Offense count: 1
|
|
||||||
# Cop supports --auto-correct.
|
|
||||||
Style/TrailingWhitespace:
|
|
||||||
Exclude:
|
|
||||||
- 'Gemfile'
|
|
||||||
|
|
||||||
# Offense count: 3
|
# Offense count: 3
|
||||||
# Cop supports --auto-correct.
|
# Cop supports --auto-correct.
|
||||||
Style/UnneededInterpolation:
|
Style/UnneededInterpolation:
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ dist: trusty
|
||||||
language: ruby
|
language: ruby
|
||||||
cache: bundler
|
cache: bundler
|
||||||
rvm:
|
rvm:
|
||||||
- 2.2.3
|
- 2.4.0
|
||||||
before_install:
|
before_install:
|
||||||
- "echo 'gem: --no-ri --no-rdoc' > ~/.gemrc"
|
- "echo 'gem: --no-ri --no-rdoc' > ~/.gemrc"
|
||||||
- "echo `phantomjs -v`"
|
- "echo `phantomjs -v`"
|
||||||
|
|
|
||||||
1
CODE_OF_CONDUCT.md
Normal file
1
CODE_OF_CONDUCT.md
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
OSEM is part of the openSUSE project. We follow all the [openSUSE Guiding Principles!](http://en.opensuse.org/openSUSE:Guiding_principles) If you think someone doesn't do that, please let us know at maintainers@osem.io
|
||||||
101
CONTRIBUTING.md
101
CONTRIBUTING.md
|
|
@ -71,59 +71,6 @@ You can access the app [localhost:3000](http://localhost:3000). Whatever you cha
|
||||||
* If you are already a contributor and you get a positive review, you can merge your pull-request yourself
|
* If you are already a contributor and you get a positive review, you can merge your pull-request yourself
|
||||||
* If you are not already a contributor please request a merge via the pull-request comments
|
* If you are not already a contributor please request a merge via the pull-request comments
|
||||||
|
|
||||||
### Getting Started
|
|
||||||
|
|
||||||
* When you get involved with OSEM for the first time, you can choose issues labeled as [Junior]( https://github.com/openSUSE/osem/issues?q=is%3Aissue+is%3Aopen+label%3AJunior)
|
|
||||||
* Leave a comment on the issue that you want to work on it
|
|
||||||
* We expect you to work on it and show progress by either opening a PR or commenting on the issue
|
|
||||||
* If you change your mind, and do not want to work on the issue any more, please be fair to others and leave a comment to let us know
|
|
||||||
* Do **not** work on issues that are assigned to others. If you are uncertain, ask and wait for a **contributor** to reply
|
|
||||||
* Avoid working on issues that have no label
|
|
||||||
* If you have opened a new issue, please wait for a contributor to add relevant labels
|
|
||||||
* If an issue is a feature, we should first have a rough idea on how we want to implement it
|
|
||||||
* If there is already such a discussion on the issue, you can go ahead and pick this up
|
|
||||||
* If not, please first leave a comment on how you want to implement it and wait for contributors' feedback
|
|
||||||
|
|
||||||
### Commits
|
|
||||||
* Commit title should be short and descriptive
|
|
||||||
* title (or summary line) is the first line of the commit message
|
|
||||||
* that says what the commit is doing
|
|
||||||
* in no more than 50 characters
|
|
||||||
* starting with a word like 'Fix' or 'Add' or 'Change'
|
|
||||||
* **without** a period (.) at the end
|
|
||||||
* followed by a blank line
|
|
||||||
* Commit messages are
|
|
||||||
* up to 72 characters
|
|
||||||
* with break lines
|
|
||||||
* Reference the issue(s) the commit closes
|
|
||||||
* https://help.github.com/articles/closing-issues-via-commit-messages
|
|
||||||
* If you haven't done so since the beginning, you should reference the issue when you squash your commits
|
|
||||||
|
|
||||||
### Pull Requests workflow
|
|
||||||
Please open a pull request (PR) only when you have finished coding, and your changes are ready to be reviewed for merging.
|
|
||||||
|
|
||||||
* Title
|
|
||||||
* Include a comprehensive title about what this PR is doing
|
|
||||||
* Referencing the issue number on the PR title is not giving any information about what this PR is about
|
|
||||||
* The title should be short (50 characters maximum); you can add more information in the description
|
|
||||||
* Description
|
|
||||||
* Add a couple of lines about what is the problem you are trying to solve and how you have addressed it
|
|
||||||
* Add bullet points about the new things you are introducing, if applicable
|
|
||||||
* Reference the issue(s) you are solving
|
|
||||||
* Add a screenshot of your change, if you are working on something that changes how the app looks like
|
|
||||||
* Automated checks
|
|
||||||
* We automatically run the [test suite](https://github.com/openSUSE/osem/blob/master/CONTRIBUTING.md#test-suite) and security checks on every PR
|
|
||||||
* Check back later to see if all checks were successful, if not, address them or leave a comment to ask for help
|
|
||||||
* Pushing new changes to your PR
|
|
||||||
* Always add **new** commits; this tremendously helps reviewers
|
|
||||||
* Do not squash commits, unless explicitly requested by the reviewer
|
|
||||||
* Take care of your PR
|
|
||||||
* Make sure you check the status of your PR regularly
|
|
||||||
* Address your reviews, make the necessary changes, ask if something is not clear to you
|
|
||||||
* Rebase against newest changes, when needed; we cannot properly review PRs that are not rebased
|
|
||||||
|
|
||||||
Reviewing your PR might take some time, as we are all volunteers. Please be responsive and respectful.
|
|
||||||
|
|
||||||
### Coding Style
|
### Coding Style
|
||||||
We are using [rubocop](https://github.com/bbatsov/rubocop) as a style checker. It is checking code style each time the test suite runs. You can run it locally with
|
We are using [rubocop](https://github.com/bbatsov/rubocop) as a style checker. It is checking code style each time the test suite runs. You can run it locally with
|
||||||
|
|
||||||
|
|
@ -141,16 +88,6 @@ We are using [rspec](http://rspec.info/)+[capybara](http://jnicklas.github.io/ca
|
||||||
vagrant exec bundle exec rspec
|
vagrant exec bundle exec rspec
|
||||||
```
|
```
|
||||||
|
|
||||||
### Review App of your PR
|
|
||||||
|
|
||||||
OSEM uses [Review Apps](https://devcenter.heroku.com/articles/github-integration-review-apps) on Heroku.
|
|
||||||
|
|
||||||
* The review app can be manually created by a maintainer, and when that happens you will see a relevant message in the PR
|
|
||||||
|
|
||||||
* Please help reviewers by adding the necessary data relevant to your PR,
|
|
||||||
eg. if your PR is doing something related to conference registrations, go to the review app and make sure there is a conference with registrations.
|
|
||||||
|
|
||||||
|
|
||||||
### Email Notifications
|
### Email Notifications
|
||||||
**Note**: We use [letter_opener](https://github.com/ryanb/letter_opener) in development environment. You can check out your mails by visiting [localhost:3000/letter_opener](http://localhost:3000/letter_opener).
|
**Note**: We use [letter_opener](https://github.com/ryanb/letter_opener) in development environment. You can check out your mails by visiting [localhost:3000/letter_opener](http://localhost:3000/letter_opener).
|
||||||
|
|
||||||
|
|
@ -181,44 +118,6 @@ OSEM_GITHUB_SECRET='sample'
|
||||||
|
|
||||||
If you don't already have a `.env` file you can use the `dotenv.example` as a template.
|
If you don't already have a `.env` file you can use the `dotenv.example` as a template.
|
||||||
|
|
||||||
## Labels for issues and PRs
|
|
||||||
...and what they mean!
|
|
||||||
|
|
||||||
1. **Bug**
|
|
||||||
* A bug in the application, something is wrong and needs to be fixed!
|
|
||||||
* Ideally the issue includes details on how to reproduce the bug
|
|
||||||
* Reproduce the bug in master branch, and send a PR that solves it
|
|
||||||
2. **Design**
|
|
||||||
* Related to the looks and/or usability of the application; needs attention from someone who understands front-end and UX
|
|
||||||
* If you are good with graphics and design, give it a shot!
|
|
||||||
3. **Documentation**
|
|
||||||
* Related to the documentation of our application, eg our INSTALL.md file or a wiki page with instructions on how to use the app, or part of it.
|
|
||||||
* If you are working on a documentation issue, make sure you are covering all cases.
|
|
||||||
4. **Epic**
|
|
||||||
* We may, or may not, solve this, thus it is epic. It's bigger than a feature request, because it fundamentally changes or affects the app, or a significant part of it.
|
|
||||||
* Do **not** work on this without prior discussion with the maintainers, it's called epic for a reason!
|
|
||||||
5. **Feature**
|
|
||||||
* This is a new feature for something new in the app!
|
|
||||||
* If an issue is labeled *Feature*, don't work on the issue, unless the maintainers have decided on how to proceed
|
|
||||||
* Ideally, leave a comment with your proposed solution in the issue and wait for feedback
|
|
||||||
6. **Grooming**
|
|
||||||
* This is working, but could look better, thus needs some attention and grooming.
|
|
||||||
7. **Hacktoberfest**
|
|
||||||
* This is for the issues included in the coding event of Hacktoberfest. You can ignore it, when the event is not on
|
|
||||||
8. **in progress**
|
|
||||||
9. **Junior**
|
|
||||||
* For new comers! RoR beginners or people unfamiliar with the application. Where you must start if you are interested in a mentoring program we participate in.
|
|
||||||
10. **need feedback**
|
|
||||||
* Maintainers' attention is needed to decide if this is something we want in the app, and/or how it should be implemented
|
|
||||||
11. **Operation**
|
|
||||||
12. **ready**
|
|
||||||
13. **Refactorization**
|
|
||||||
* Our code needs to be re-written; to avoid code duplication, or make the code more readable, or do things in a simpler way!
|
|
||||||
14. **Research**
|
|
||||||
* Ideas to explore; and think if there is anything we want to include in our app.
|
|
||||||
15. **GSoC**
|
|
||||||
* To group all the issues and PRs related to Google Summer of Code together.
|
|
||||||
|
|
||||||
## Code of Conduct
|
## Code of Conduct
|
||||||
OSEM is part of the openSUSE project. We follow all the [openSUSE Guiding Principles!](http://en.opensuse.org/openSUSE:Guiding_principles) If you think someone doesn't do that, please let us know at maintainers@osem.io
|
OSEM is part of the openSUSE project. We follow all the [openSUSE Guiding Principles!](http://en.opensuse.org/openSUSE:Guiding_principles) If you think someone doesn't do that, please let us know at maintainers@osem.io
|
||||||
|
|
||||||
|
|
|
||||||
8
Gemfile
8
Gemfile
|
|
@ -6,7 +6,7 @@ if Gem::Version.new(Bundler::VERSION) < Gem::Version.new('1.8.4')
|
||||||
end
|
end
|
||||||
|
|
||||||
# as web framework
|
# as web framework
|
||||||
gem 'rails', '~> 4.2'
|
gem 'rails', '~> 4.2.8'
|
||||||
|
|
||||||
# enables serving assets in production and setting your logger to standard out
|
# enables serving assets in production and setting your logger to standard out
|
||||||
# both of which are required to run an application on a twelve-factor provider
|
# both of which are required to run an application on a twelve-factor provider
|
||||||
|
|
@ -201,11 +201,11 @@ gem 'selectize-rails'
|
||||||
# Use guard and spring for testing in development
|
# Use guard and spring for testing in development
|
||||||
group :development do
|
group :development do
|
||||||
# to launch specs when files are modified
|
# to launch specs when files are modified
|
||||||
gem 'guard-rspec', '~> 4.2.8'
|
gem 'guard-rspec'
|
||||||
gem 'spring-commands-rspec'
|
gem 'spring-commands-rspec'
|
||||||
gem 'haml_lint', '~> 0.24.0'
|
gem 'haml_lint', '~> 0.24.0'
|
||||||
# for static code analisys
|
# for static code analisys
|
||||||
gem 'rubocop', '~> 0.48.1', require: false
|
gem 'rubocop', '~> 0.49.0', require: false
|
||||||
# as database
|
# as database
|
||||||
gem 'sqlite3'
|
gem 'sqlite3'
|
||||||
# to open mails
|
# to open mails
|
||||||
|
|
@ -220,7 +220,7 @@ end
|
||||||
|
|
||||||
group :test do
|
group :test do
|
||||||
# as test framework
|
# as test framework
|
||||||
gem 'rspec-rails'
|
gem 'rspec-rails', '~> 3.5', '>= 3.5.2'
|
||||||
gem 'database_cleaner'
|
gem 'database_cleaner'
|
||||||
gem 'capybara'
|
gem 'capybara'
|
||||||
gem 'poltergeist'
|
gem 'poltergeist'
|
||||||
|
|
|
||||||
229
Gemfile.lock
229
Gemfile.lock
|
|
@ -12,40 +12,39 @@ GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
remote: https://rails-assets.org/
|
remote: https://rails-assets.org/
|
||||||
specs:
|
specs:
|
||||||
actionmailer (4.2.7.1)
|
actionmailer (4.2.9)
|
||||||
actionpack (= 4.2.7.1)
|
actionpack (= 4.2.9)
|
||||||
actionview (= 4.2.7.1)
|
actionview (= 4.2.9)
|
||||||
activejob (= 4.2.7.1)
|
activejob (= 4.2.9)
|
||||||
mail (~> 2.5, >= 2.5.4)
|
mail (~> 2.5, >= 2.5.4)
|
||||||
rails-dom-testing (~> 1.0, >= 1.0.5)
|
rails-dom-testing (~> 1.0, >= 1.0.5)
|
||||||
actionpack (4.2.7.1)
|
actionpack (4.2.9)
|
||||||
actionview (= 4.2.7.1)
|
actionview (= 4.2.9)
|
||||||
activesupport (= 4.2.7.1)
|
activesupport (= 4.2.9)
|
||||||
rack (~> 1.6)
|
rack (~> 1.6)
|
||||||
rack-test (~> 0.6.2)
|
rack-test (~> 0.6.2)
|
||||||
rails-dom-testing (~> 1.0, >= 1.0.5)
|
rails-dom-testing (~> 1.0, >= 1.0.5)
|
||||||
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
||||||
actionview (4.2.7.1)
|
actionview (4.2.9)
|
||||||
activesupport (= 4.2.7.1)
|
activesupport (= 4.2.9)
|
||||||
builder (~> 3.1)
|
builder (~> 3.1)
|
||||||
erubis (~> 2.7.0)
|
erubis (~> 2.7.0)
|
||||||
rails-dom-testing (~> 1.0, >= 1.0.5)
|
rails-dom-testing (~> 1.0, >= 1.0.5)
|
||||||
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
rails-html-sanitizer (~> 1.0, >= 1.0.3)
|
||||||
active_model_serializers (0.9.4)
|
active_model_serializers (0.9.4)
|
||||||
activemodel (>= 3.2)
|
activemodel (>= 3.2)
|
||||||
activejob (4.2.7.1)
|
activejob (4.2.9)
|
||||||
activesupport (= 4.2.7.1)
|
activesupport (= 4.2.9)
|
||||||
globalid (>= 0.3.0)
|
globalid (>= 0.3.0)
|
||||||
activemodel (4.2.7.1)
|
activemodel (4.2.9)
|
||||||
activesupport (= 4.2.7.1)
|
activesupport (= 4.2.9)
|
||||||
builder (~> 3.1)
|
builder (~> 3.1)
|
||||||
activerecord (4.2.7.1)
|
activerecord (4.2.9)
|
||||||
activemodel (= 4.2.7.1)
|
activemodel (= 4.2.9)
|
||||||
activesupport (= 4.2.7.1)
|
activesupport (= 4.2.9)
|
||||||
arel (~> 6.0)
|
arel (~> 6.0)
|
||||||
activesupport (4.2.7.1)
|
activesupport (4.2.9)
|
||||||
i18n (~> 0.7)
|
i18n (~> 0.7)
|
||||||
json (~> 1.7, >= 1.7.7)
|
|
||||||
minitest (~> 5.1)
|
minitest (~> 5.1)
|
||||||
thread_safe (~> 0.3, >= 0.3.4)
|
thread_safe (~> 0.3, >= 0.3.4)
|
||||||
tzinfo (~> 1.1)
|
tzinfo (~> 1.1)
|
||||||
|
|
@ -58,7 +57,8 @@ GEM
|
||||||
awesome_nested_set (>= 2.0)
|
awesome_nested_set (>= 2.0)
|
||||||
acts_as_list (0.4.0)
|
acts_as_list (0.4.0)
|
||||||
activerecord (>= 3.0)
|
activerecord (>= 3.0)
|
||||||
addressable (2.3.6)
|
addressable (2.5.1)
|
||||||
|
public_suffix (~> 2.0, >= 2.0.2)
|
||||||
ahoy_matey (1.0.0)
|
ahoy_matey (1.0.0)
|
||||||
addressable
|
addressable
|
||||||
browser (>= 0.4.0)
|
browser (>= 0.4.0)
|
||||||
|
|
@ -67,7 +67,7 @@ GEM
|
||||||
request_store
|
request_store
|
||||||
user_agent_parser
|
user_agent_parser
|
||||||
uuidtools
|
uuidtools
|
||||||
arel (6.0.3)
|
arel (6.0.4)
|
||||||
ast (2.3.0)
|
ast (2.3.0)
|
||||||
autoprefixer-rails (5.1.9)
|
autoprefixer-rails (5.1.9)
|
||||||
execjs
|
execjs
|
||||||
|
|
@ -88,10 +88,8 @@ GEM
|
||||||
bootstrap3-datetimepicker-rails (3.0.3)
|
bootstrap3-datetimepicker-rails (3.0.3)
|
||||||
momentjs-rails (>= 2.8.1)
|
momentjs-rails (>= 2.8.1)
|
||||||
browser (0.6.0)
|
browser (0.6.0)
|
||||||
builder (3.2.2)
|
builder (3.2.3)
|
||||||
byebug (3.1.2)
|
byebug (9.0.6)
|
||||||
columnize (~> 0.8)
|
|
||||||
debugger-linecache (~> 1.2)
|
|
||||||
cancancan (1.13.1)
|
cancancan (1.13.1)
|
||||||
capybara (2.6.2)
|
capybara (2.6.2)
|
||||||
addressable
|
addressable
|
||||||
|
|
@ -109,11 +107,6 @@ GEM
|
||||||
activesupport (>= 3.2.0)
|
activesupport (>= 3.2.0)
|
||||||
carrierwave
|
carrierwave
|
||||||
fastimage
|
fastimage
|
||||||
celluloid (0.15.2)
|
|
||||||
timers (~> 1.1.0)
|
|
||||||
celluloid-io (0.15.0)
|
|
||||||
celluloid (>= 0.15.0)
|
|
||||||
nio4r (>= 0.5.0)
|
|
||||||
chart-js-rails (0.0.6)
|
chart-js-rails (0.0.6)
|
||||||
railties (> 3.1)
|
railties (> 3.1)
|
||||||
chronic (0.10.2)
|
chronic (0.10.2)
|
||||||
|
|
@ -123,7 +116,7 @@ GEM
|
||||||
aws_cf_signer
|
aws_cf_signer
|
||||||
rest-client
|
rest-client
|
||||||
cocoon (1.2.6)
|
cocoon (1.2.6)
|
||||||
coderay (1.1.0)
|
coderay (1.1.1)
|
||||||
coffee-rails (4.1.1)
|
coffee-rails (4.1.1)
|
||||||
coffee-script (>= 2.2.0)
|
coffee-script (>= 2.2.0)
|
||||||
railties (>= 4.0.0, < 5.1.x)
|
railties (>= 4.0.0, < 5.1.x)
|
||||||
|
|
@ -131,7 +124,6 @@ GEM
|
||||||
coffee-script-source
|
coffee-script-source
|
||||||
execjs
|
execjs
|
||||||
coffee-script-source (1.10.0)
|
coffee-script-source (1.10.0)
|
||||||
columnize (0.8.9)
|
|
||||||
countable-rails (0.0.1)
|
countable-rails (0.0.1)
|
||||||
railties (>= 3.1)
|
railties (>= 3.1)
|
||||||
countries (1.2.5)
|
countries (1.2.5)
|
||||||
|
|
@ -146,14 +138,13 @@ GEM
|
||||||
term-ansicolor (~> 1.3)
|
term-ansicolor (~> 1.3)
|
||||||
thor (~> 0.19.1)
|
thor (~> 0.19.1)
|
||||||
tins (~> 1.6.0)
|
tins (~> 1.6.0)
|
||||||
crack (0.4.2)
|
crack (0.4.3)
|
||||||
safe_yaml (~> 1.0.0)
|
safe_yaml (~> 1.0.0)
|
||||||
currencies (0.4.2)
|
currencies (0.4.2)
|
||||||
daemons (1.1.9)
|
daemons (1.1.9)
|
||||||
dante (0.2.0)
|
dante (0.2.0)
|
||||||
database_cleaner (1.3.0)
|
database_cleaner (1.3.0)
|
||||||
debug_inspector (0.0.2)
|
debug_inspector (0.0.2)
|
||||||
debugger-linecache (1.2.0)
|
|
||||||
delayed_job (4.1.1)
|
delayed_job (4.1.1)
|
||||||
activesupport (>= 3.0, < 5.0)
|
activesupport (>= 3.0, < 5.0)
|
||||||
delayed_job_active_record (4.1.0)
|
delayed_job_active_record (4.1.0)
|
||||||
|
|
@ -167,7 +158,7 @@ GEM
|
||||||
warden (~> 1.2.3)
|
warden (~> 1.2.3)
|
||||||
devise_ichain_authenticatable (0.3.1)
|
devise_ichain_authenticatable (0.3.1)
|
||||||
devise (>= 2.2)
|
devise (>= 2.2)
|
||||||
diff-lcs (1.2.5)
|
diff-lcs (1.3)
|
||||||
docile (1.1.5)
|
docile (1.1.5)
|
||||||
domain_name (0.5.20160310)
|
domain_name (0.5.20160310)
|
||||||
unf (>= 0.0.5, < 1.0.0)
|
unf (>= 0.0.5, < 1.0.0)
|
||||||
|
|
@ -188,27 +179,32 @@ GEM
|
||||||
multipart-post (>= 1.2, < 3)
|
multipart-post (>= 1.2, < 3)
|
||||||
fastimage (2.0.0)
|
fastimage (2.0.0)
|
||||||
addressable (~> 2)
|
addressable (~> 2)
|
||||||
ffi (1.9.3)
|
ffi (1.9.18)
|
||||||
font-awesome-rails (4.1.0.0)
|
font-awesome-rails (4.1.0.0)
|
||||||
railties (>= 3.2, < 5.0)
|
railties (>= 3.2, < 5.0)
|
||||||
formatador (0.2.4)
|
formatador (0.2.5)
|
||||||
formtastic (3.1.3)
|
formtastic (3.1.3)
|
||||||
actionpack (>= 3.2.13)
|
actionpack (>= 3.2.13)
|
||||||
formtastic-bootstrap (3.1.1)
|
formtastic-bootstrap (3.1.1)
|
||||||
formtastic (>= 3.0)
|
formtastic (>= 3.0)
|
||||||
geocoder (1.2.2)
|
geocoder (1.2.2)
|
||||||
globalid (0.3.6)
|
globalid (0.4.0)
|
||||||
activesupport (>= 4.1.0)
|
activesupport (>= 4.2.0)
|
||||||
gravtastic (3.2.6)
|
gravtastic (3.2.6)
|
||||||
guard (2.6.0)
|
guard (2.14.1)
|
||||||
formatador (>= 0.2.4)
|
formatador (>= 0.2.4)
|
||||||
listen (~> 2.7)
|
listen (>= 2.7, < 4.0)
|
||||||
lumberjack (~> 1.0)
|
lumberjack (~> 1.0)
|
||||||
|
nenv (~> 0.1)
|
||||||
|
notiffany (~> 0.0)
|
||||||
pry (>= 0.9.12)
|
pry (>= 0.9.12)
|
||||||
|
shellany (~> 0.0)
|
||||||
thor (>= 0.18.1)
|
thor (>= 0.18.1)
|
||||||
guard-rspec (4.2.8)
|
guard-compat (1.2.1)
|
||||||
|
guard-rspec (4.7.3)
|
||||||
guard (~> 2.1)
|
guard (~> 2.1)
|
||||||
rspec (>= 2.14, < 4.0)
|
guard-compat (~> 1.1)
|
||||||
|
rspec (>= 2.99.0, < 4.0)
|
||||||
haml (4.0.5)
|
haml (4.0.5)
|
||||||
tilt
|
tilt
|
||||||
haml-rails (0.5.3)
|
haml-rails (0.5.3)
|
||||||
|
|
@ -222,6 +218,7 @@ GEM
|
||||||
rake (>= 10, < 13)
|
rake (>= 10, < 13)
|
||||||
rubocop (>= 0.47.0)
|
rubocop (>= 0.47.0)
|
||||||
sysexits (~> 1.1)
|
sysexits (~> 1.1)
|
||||||
|
hashdiff (0.3.4)
|
||||||
hashie (2.1.1)
|
hashie (2.1.1)
|
||||||
hike (1.2.3)
|
hike (1.2.3)
|
||||||
hoptoad_notifier (2.4.11)
|
hoptoad_notifier (2.4.11)
|
||||||
|
|
@ -232,8 +229,8 @@ GEM
|
||||||
domain_name (~> 0.5)
|
domain_name (~> 0.5)
|
||||||
i18n (0.7.0)
|
i18n (0.7.0)
|
||||||
i18n_data (0.7.0)
|
i18n_data (0.7.0)
|
||||||
inversion (0.12.3)
|
inversion (1.0.0)
|
||||||
loggability (~> 0.4)
|
loggability (~> 0.12)
|
||||||
iso-639 (0.2.5)
|
iso-639 (0.2.5)
|
||||||
jquery-datatables-rails (2.2.3)
|
jquery-datatables-rails (2.2.3)
|
||||||
jquery-rails
|
jquery-rails
|
||||||
|
|
@ -256,26 +253,25 @@ GEM
|
||||||
actionmailer (>= 3.2)
|
actionmailer (>= 3.2)
|
||||||
letter_opener (~> 1.0)
|
letter_opener (~> 1.0)
|
||||||
railties (>= 3.2)
|
railties (>= 3.2)
|
||||||
listen (2.7.2)
|
listen (3.1.5)
|
||||||
celluloid (>= 0.15.2)
|
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||||
celluloid-io (>= 0.15.0)
|
rb-inotify (~> 0.9, >= 0.9.7)
|
||||||
rb-fsevent (>= 0.9.3)
|
ruby_dep (~> 1.2)
|
||||||
rb-inotify (>= 0.9)
|
loggability (0.14.0)
|
||||||
loggability (0.11.0)
|
|
||||||
loofah (2.0.3)
|
loofah (2.0.3)
|
||||||
nokogiri (>= 1.5.9)
|
nokogiri (>= 1.5.9)
|
||||||
lumberjack (1.0.5)
|
lumberjack (1.0.12)
|
||||||
mail (2.6.3)
|
mail (2.6.6)
|
||||||
mime-types (>= 1.16, < 3)
|
mime-types (>= 1.16, < 4)
|
||||||
method_source (0.8.2)
|
method_source (0.8.2)
|
||||||
mime-types (2.99.1)
|
mime-types (2.99.3)
|
||||||
mimemagic (0.3.2)
|
mimemagic (0.3.2)
|
||||||
mina (0.3.8)
|
mina (0.3.8)
|
||||||
open4 (~> 1.3.4)
|
open4 (~> 1.3.4)
|
||||||
rake
|
rake
|
||||||
mini_magick (4.5.1)
|
mini_magick (4.5.1)
|
||||||
mini_portile2 (2.2.0)
|
mini_portile2 (2.2.0)
|
||||||
minitest (5.10.1)
|
minitest (5.10.2)
|
||||||
momentjs-rails (2.8.1)
|
momentjs-rails (2.8.1)
|
||||||
railties (>= 3.1)
|
railties (>= 3.1)
|
||||||
monetize (1.4.0)
|
monetize (1.4.0)
|
||||||
|
|
@ -288,14 +284,17 @@ GEM
|
||||||
monetize (~> 1.4.0)
|
monetize (~> 1.4.0)
|
||||||
money (~> 6.7)
|
money (~> 6.7)
|
||||||
railties (>= 3.0)
|
railties (>= 3.0)
|
||||||
multi_json (1.11.2)
|
multi_json (1.12.1)
|
||||||
multi_xml (0.5.5)
|
multi_xml (0.5.5)
|
||||||
multipart-post (2.0.0)
|
multipart-post (2.0.0)
|
||||||
mysql2 (0.4.2)
|
mysql2 (0.4.2)
|
||||||
|
nenv (0.3.0)
|
||||||
netrc (0.11.0)
|
netrc (0.11.0)
|
||||||
nio4r (1.2.1)
|
|
||||||
nokogiri (1.8.0)
|
nokogiri (1.8.0)
|
||||||
mini_portile2 (~> 2.2.0)
|
mini_portile2 (~> 2.2.0)
|
||||||
|
notiffany (0.1.1)
|
||||||
|
nenv (~> 0.1)
|
||||||
|
shellany (~> 0.0)
|
||||||
oauth2 (0.9.4)
|
oauth2 (0.9.4)
|
||||||
faraday (>= 0.8, < 0.10)
|
faraday (>= 0.8, < 0.10)
|
||||||
jwt (~> 1.0)
|
jwt (~> 1.0)
|
||||||
|
|
@ -327,6 +326,7 @@ GEM
|
||||||
activerecord (>= 3.0, < 6.0)
|
activerecord (>= 3.0, < 6.0)
|
||||||
activesupport (>= 3.0, < 6.0)
|
activesupport (>= 3.0, < 6.0)
|
||||||
request_store (~> 1.1)
|
request_store (~> 1.1)
|
||||||
|
parallel (1.11.2)
|
||||||
parser (2.4.0.0)
|
parser (2.4.0.0)
|
||||||
ast (~> 2.2)
|
ast (~> 2.2)
|
||||||
pdf-core (0.2.5)
|
pdf-core (0.2.5)
|
||||||
|
|
@ -350,26 +350,27 @@ GEM
|
||||||
prawn_rails (0.0.11)
|
prawn_rails (0.0.11)
|
||||||
prawn (>= 0.11.1)
|
prawn (>= 0.11.1)
|
||||||
railties (>= 3.0.0)
|
railties (>= 3.0.0)
|
||||||
pry (0.9.12.6)
|
pry (0.10.4)
|
||||||
coderay (~> 1.0)
|
coderay (~> 1.1.0)
|
||||||
method_source (~> 0.8)
|
method_source (~> 0.8.1)
|
||||||
slop (~> 3.4)
|
slop (~> 3.4)
|
||||||
rack (1.6.4)
|
public_suffix (2.0.5)
|
||||||
|
rack (1.6.8)
|
||||||
rack-openid (1.3.1)
|
rack-openid (1.3.1)
|
||||||
rack (>= 1.1.0)
|
rack (>= 1.1.0)
|
||||||
ruby-openid (>= 2.1.8)
|
ruby-openid (>= 2.1.8)
|
||||||
rack-test (0.6.3)
|
rack-test (0.6.3)
|
||||||
rack (>= 1.0)
|
rack (>= 1.0)
|
||||||
rails (4.2.7.1)
|
rails (4.2.9)
|
||||||
actionmailer (= 4.2.7.1)
|
actionmailer (= 4.2.9)
|
||||||
actionpack (= 4.2.7.1)
|
actionpack (= 4.2.9)
|
||||||
actionview (= 4.2.7.1)
|
actionview (= 4.2.9)
|
||||||
activejob (= 4.2.7.1)
|
activejob (= 4.2.9)
|
||||||
activemodel (= 4.2.7.1)
|
activemodel (= 4.2.9)
|
||||||
activerecord (= 4.2.7.1)
|
activerecord (= 4.2.9)
|
||||||
activesupport (= 4.2.7.1)
|
activesupport (= 4.2.9)
|
||||||
bundler (>= 1.3.0, < 2.0)
|
bundler (>= 1.3.0, < 2.0)
|
||||||
railties (= 4.2.7.1)
|
railties (= 4.2.9)
|
||||||
sprockets-rails
|
sprockets-rails
|
||||||
rails-assets-bootstrap (3.3.6)
|
rails-assets-bootstrap (3.3.6)
|
||||||
rails-assets-jquery (>= 1.9.1, < 3)
|
rails-assets-jquery (>= 1.9.1, < 3)
|
||||||
|
|
@ -404,23 +405,23 @@ GEM
|
||||||
rails_stdout_logging
|
rails_stdout_logging
|
||||||
rails_serve_static_assets (0.0.4)
|
rails_serve_static_assets (0.0.4)
|
||||||
rails_stdout_logging (0.0.3)
|
rails_stdout_logging (0.0.3)
|
||||||
railties (4.2.7.1)
|
railties (4.2.9)
|
||||||
actionpack (= 4.2.7.1)
|
actionpack (= 4.2.9)
|
||||||
activesupport (= 4.2.7.1)
|
activesupport (= 4.2.9)
|
||||||
rake (>= 0.8.7)
|
rake (>= 0.8.7)
|
||||||
thor (>= 0.18.1, < 2.0)
|
thor (>= 0.18.1, < 2.0)
|
||||||
rainbow (2.2.1)
|
rainbow (2.2.2)
|
||||||
rake (10.5.0)
|
rake
|
||||||
rb-fsevent (0.9.4)
|
rake (12.0.0)
|
||||||
rb-inotify (0.9.4)
|
rb-fsevent (0.10.2)
|
||||||
ffi (>= 0.5.0)
|
rb-inotify (0.9.10)
|
||||||
rdoc (4.1.1)
|
ffi (>= 0.5.0, < 2)
|
||||||
json (~> 1.4)
|
rdoc (5.1.0)
|
||||||
rdoc-generator-fivefish (0.1.0)
|
rdoc-generator-fivefish (0.3.0)
|
||||||
inversion (~> 0.12)
|
inversion (~> 1.0)
|
||||||
loggability (~> 0.6)
|
loggability (~> 0.12)
|
||||||
rdoc (~> 4.0)
|
rdoc (~> 5.0)
|
||||||
yajl-ruby (~> 1.1)
|
yajl-ruby (~> 1.3)
|
||||||
redcarpet (3.2.3)
|
redcarpet (3.2.3)
|
||||||
referer-parser (0.2.1)
|
referer-parser (0.2.1)
|
||||||
request_store (1.1.0)
|
request_store (1.1.0)
|
||||||
|
|
@ -433,31 +434,33 @@ GEM
|
||||||
rolify (5.1.0)
|
rolify (5.1.0)
|
||||||
rqrcode (0.10.1)
|
rqrcode (0.10.1)
|
||||||
chunky_png (~> 1.0)
|
chunky_png (~> 1.0)
|
||||||
rspec (3.0.0)
|
rspec (3.6.0)
|
||||||
rspec-core (~> 3.0.0)
|
rspec-core (~> 3.6.0)
|
||||||
rspec-expectations (~> 3.0.0)
|
rspec-expectations (~> 3.6.0)
|
||||||
rspec-mocks (~> 3.0.0)
|
rspec-mocks (~> 3.6.0)
|
||||||
rspec-activemodel-mocks (1.0.1)
|
rspec-activemodel-mocks (1.0.1)
|
||||||
activemodel (>= 3.0)
|
activemodel (>= 3.0)
|
||||||
activesupport (>= 3.0)
|
activesupport (>= 3.0)
|
||||||
rspec-mocks (>= 2.99, < 4.0)
|
rspec-mocks (>= 2.99, < 4.0)
|
||||||
rspec-core (3.0.2)
|
rspec-core (3.6.0)
|
||||||
rspec-support (~> 3.0.0)
|
rspec-support (~> 3.6.0)
|
||||||
rspec-expectations (3.0.2)
|
rspec-expectations (3.6.0)
|
||||||
diff-lcs (>= 1.2.0, < 2.0)
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
rspec-support (~> 3.0.0)
|
rspec-support (~> 3.6.0)
|
||||||
rspec-mocks (3.0.2)
|
rspec-mocks (3.6.0)
|
||||||
rspec-support (~> 3.0.0)
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
rspec-rails (3.0.0)
|
rspec-support (~> 3.6.0)
|
||||||
|
rspec-rails (3.6.0)
|
||||||
actionpack (>= 3.0)
|
actionpack (>= 3.0)
|
||||||
activesupport (>= 3.0)
|
activesupport (>= 3.0)
|
||||||
railties (>= 3.0)
|
railties (>= 3.0)
|
||||||
rspec-core (~> 3.0.0)
|
rspec-core (~> 3.6.0)
|
||||||
rspec-expectations (~> 3.0.0)
|
rspec-expectations (~> 3.6.0)
|
||||||
rspec-mocks (~> 3.0.0)
|
rspec-mocks (~> 3.6.0)
|
||||||
rspec-support (~> 3.0.0)
|
rspec-support (~> 3.6.0)
|
||||||
rspec-support (3.0.2)
|
rspec-support (3.6.0)
|
||||||
rubocop (0.48.1)
|
rubocop (0.49.1)
|
||||||
|
parallel (~> 1.10)
|
||||||
parser (>= 2.3.3.1, < 3.0)
|
parser (>= 2.3.3.1, < 3.0)
|
||||||
powerpack (~> 0.1)
|
powerpack (~> 0.1)
|
||||||
rainbow (>= 1.99.1, < 3.0)
|
rainbow (>= 1.99.1, < 3.0)
|
||||||
|
|
@ -466,6 +469,7 @@ GEM
|
||||||
ruby-oembed (0.8.14)
|
ruby-oembed (0.8.14)
|
||||||
ruby-openid (2.5.0)
|
ruby-openid (2.5.0)
|
||||||
ruby-progressbar (1.8.1)
|
ruby-progressbar (1.8.1)
|
||||||
|
ruby_dep (1.5.0)
|
||||||
rubyzip (1.2.1)
|
rubyzip (1.2.1)
|
||||||
safe_yaml (1.0.4)
|
safe_yaml (1.0.4)
|
||||||
sass (3.2.19)
|
sass (3.2.19)
|
||||||
|
|
@ -475,6 +479,7 @@ GEM
|
||||||
sprockets (~> 2.8, < 2.12)
|
sprockets (~> 2.8, < 2.12)
|
||||||
sprockets-rails (~> 2.0)
|
sprockets-rails (~> 2.0)
|
||||||
selectize-rails (0.12.4)
|
selectize-rails (0.12.4)
|
||||||
|
shellany (0.0.1)
|
||||||
shoulda-matchers (2.8.0)
|
shoulda-matchers (2.8.0)
|
||||||
activesupport (>= 3.0.0)
|
activesupport (>= 3.0.0)
|
||||||
simplecov (0.11.2)
|
simplecov (0.11.2)
|
||||||
|
|
@ -508,11 +513,10 @@ GEM
|
||||||
sysexits (1.2.0)
|
sysexits (1.2.0)
|
||||||
term-ansicolor (1.3.2)
|
term-ansicolor (1.3.2)
|
||||||
tins (~> 1.0)
|
tins (~> 1.0)
|
||||||
thor (0.19.1)
|
thor (0.19.4)
|
||||||
thread_safe (0.3.6)
|
thread_safe (0.3.6)
|
||||||
tilt (1.4.1)
|
tilt (1.4.1)
|
||||||
timecop (0.7.1)
|
timecop (0.7.1)
|
||||||
timers (1.1.0)
|
|
||||||
tins (1.6.0)
|
tins (1.6.0)
|
||||||
transitions (0.1.12)
|
transitions (0.1.12)
|
||||||
ttfunk (1.1.1)
|
ttfunk (1.1.1)
|
||||||
|
|
@ -525,7 +529,7 @@ GEM
|
||||||
unf (0.1.4)
|
unf (0.1.4)
|
||||||
unf_ext
|
unf_ext
|
||||||
unf_ext (0.0.7.2)
|
unf_ext (0.0.7.2)
|
||||||
unicode-display_width (1.2.1)
|
unicode-display_width (1.3.0)
|
||||||
unicode_utils (1.4.0)
|
unicode_utils (1.4.0)
|
||||||
unobtrusive_flash (3.1.0)
|
unobtrusive_flash (3.1.0)
|
||||||
railties
|
railties
|
||||||
|
|
@ -538,9 +542,10 @@ GEM
|
||||||
binding_of_caller (>= 0.7.2)
|
binding_of_caller (>= 0.7.2)
|
||||||
railties (>= 4.0)
|
railties (>= 4.0)
|
||||||
sprockets-rails (>= 2.0, < 4.0)
|
sprockets-rails (>= 2.0, < 4.0)
|
||||||
webmock (1.20.4)
|
webmock (3.0.1)
|
||||||
addressable (>= 2.3.6)
|
addressable (>= 2.3.6)
|
||||||
crack (>= 0.3.2)
|
crack (>= 0.3.2)
|
||||||
|
hashdiff
|
||||||
websocket-driver (0.6.3)
|
websocket-driver (0.6.3)
|
||||||
websocket-extensions (>= 0.1.0)
|
websocket-extensions (>= 0.1.0)
|
||||||
websocket-extensions (0.1.2)
|
websocket-extensions (0.1.2)
|
||||||
|
|
@ -549,7 +554,7 @@ GEM
|
||||||
chronic (>= 0.6.3)
|
chronic (>= 0.6.3)
|
||||||
xpath (2.0.0)
|
xpath (2.0.0)
|
||||||
nokogiri (~> 1.3)
|
nokogiri (~> 1.3)
|
||||||
yajl-ruby (1.2.0)
|
yajl-ruby (1.3.0)
|
||||||
|
|
||||||
PLATFORMS
|
PLATFORMS
|
||||||
ruby
|
ruby
|
||||||
|
|
@ -590,7 +595,7 @@ DEPENDENCIES
|
||||||
formtastic (~> 3.1.1)
|
formtastic (~> 3.1.1)
|
||||||
formtastic-bootstrap
|
formtastic-bootstrap
|
||||||
gravtastic
|
gravtastic
|
||||||
guard-rspec (~> 4.2.8)
|
guard-rspec
|
||||||
haml-rails
|
haml-rails
|
||||||
haml_lint (~> 0.24.0)
|
haml_lint (~> 0.24.0)
|
||||||
hoptoad_notifier (~> 2.3)
|
hoptoad_notifier (~> 2.3)
|
||||||
|
|
@ -617,7 +622,7 @@ DEPENDENCIES
|
||||||
poltergeist
|
poltergeist
|
||||||
prawn-qrcode (~> 0.2.2.1)
|
prawn-qrcode (~> 0.2.2.1)
|
||||||
prawn_rails
|
prawn_rails
|
||||||
rails (~> 4.2)
|
rails (~> 4.2.8)
|
||||||
rails-assets-bootstrap-markdown!
|
rails-assets-bootstrap-markdown!
|
||||||
rails-assets-date.format!
|
rails-assets-date.format!
|
||||||
rails-assets-holderjs!
|
rails-assets-holderjs!
|
||||||
|
|
@ -637,8 +642,8 @@ DEPENDENCIES
|
||||||
rolify
|
rolify
|
||||||
rqrcode
|
rqrcode
|
||||||
rspec-activemodel-mocks
|
rspec-activemodel-mocks
|
||||||
rspec-rails
|
rspec-rails (~> 3.5, >= 3.5.2)
|
||||||
rubocop (~> 0.48.1)
|
rubocop (~> 0.49.0)
|
||||||
ruby-oembed
|
ruby-oembed
|
||||||
sass-rails (>= 4.0.2)
|
sass-rails (>= 4.0.2)
|
||||||
selectize-rails
|
selectize-rails
|
||||||
|
|
|
||||||
|
|
@ -20,14 +20,6 @@
|
||||||
color: black;
|
color: black;
|
||||||
background-color: #eeeeee;
|
background-color: #eeeeee;
|
||||||
}
|
}
|
||||||
input[type=text],
|
|
||||||
input[type=password] {
|
|
||||||
text-align: center;
|
|
||||||
padding: 5px;
|
|
||||||
display: block;
|
|
||||||
margin: auto;
|
|
||||||
width: 255px;
|
|
||||||
}
|
|
||||||
.btn-group {
|
.btn-group {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,12 @@ module Admin
|
||||||
class BaseController < ApplicationController
|
class BaseController < ApplicationController
|
||||||
before_filter :verify_user_admin
|
before_filter :verify_user_admin
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def current_ability
|
||||||
|
@current_ability ||= AdminAbility.new(current_user)
|
||||||
|
end
|
||||||
|
|
||||||
def verify_user_admin
|
def verify_user_admin
|
||||||
if (current_user.nil?)
|
if (current_user.nil?)
|
||||||
redirect_to sign_in_path
|
redirect_to sign_in_path
|
||||||
|
|
@ -9,7 +15,8 @@ module Admin
|
||||||
end
|
end
|
||||||
unless (current_user.has_role? :organizer, :any) || (current_user.has_role? :cfp, :any) ||
|
unless (current_user.has_role? :organizer, :any) || (current_user.has_role? :cfp, :any) ||
|
||||||
(current_user.has_role? :info_desk, :any) || (current_user.has_role? :organization_admin, :any) ||
|
(current_user.has_role? :info_desk, :any) || (current_user.has_role? :organization_admin, :any) ||
|
||||||
(current_user.has_role? :volunteers_coordinator, :any) || current_user.is_admin
|
(current_user.has_role? :volunteers_coordinator, :any) ||
|
||||||
|
(current_user.has_role? :track_organizer, :any) || current_user.is_admin
|
||||||
raise CanCan::AccessDenied.new('You are not authorized to access this page.')
|
raise CanCan::AccessDenied.new('You are not authorized to access this page.')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
module Admin
|
module Admin
|
||||||
class RegistrationPeriodsController < ApplicationController
|
class RegistrationPeriodsController < Admin::BaseController
|
||||||
load_and_authorize_resource :conference, find_by: :short_title
|
load_and_authorize_resource :conference, find_by: :short_title
|
||||||
load_and_authorize_resource through: :conference, singleton: true
|
load_and_authorize_resource through: :conference, singleton: true
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,14 +8,26 @@ module Admin
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@roles = Role.where(resource: @conference)
|
@roles = Role.where(resource: @conference)
|
||||||
|
tracks = @conference.program.tracks.where.not(submitter: nil)
|
||||||
|
@roles += Role.where(resource: tracks)
|
||||||
authorize! :index, @role
|
authorize! :index, @role
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
|
@url = if @track
|
||||||
|
toggle_user_track_admin_conference_role_path(@conference.short_title, @role.name, @track)
|
||||||
|
else
|
||||||
|
toggle_user_admin_conference_role_path(@conference.short_title, @role.name)
|
||||||
|
end
|
||||||
@users = @role.users
|
@users = @role.users
|
||||||
end
|
end
|
||||||
|
|
||||||
def edit
|
def edit
|
||||||
|
@url = if @track
|
||||||
|
track_admin_conference_role_path(@conference.short_title, @role.name, @track)
|
||||||
|
else
|
||||||
|
admin_conference_role_path(@conference.short_title, @role.name)
|
||||||
|
end
|
||||||
@users = @role.users
|
@users = @role.users
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -23,7 +35,13 @@ module Admin
|
||||||
role_name = @role.name
|
role_name = @role.name
|
||||||
|
|
||||||
if @role.update_attributes(role_params)
|
if @role.update_attributes(role_params)
|
||||||
redirect_to admin_conference_role_path(@conference.short_title, @role.name),
|
url = if @track
|
||||||
|
track_admin_conference_role_path(@conference.short_title, @role.name, @track)
|
||||||
|
else
|
||||||
|
admin_conference_role_path(@conference.short_title, @role.name)
|
||||||
|
end
|
||||||
|
|
||||||
|
redirect_to url,
|
||||||
notice: 'Successfully updated role ' + @role.name
|
notice: 'Successfully updated role ' + @role.name
|
||||||
else
|
else
|
||||||
@role.name = role_name
|
@role.name = role_name
|
||||||
|
|
@ -36,8 +54,14 @@ module Admin
|
||||||
user = User.find_by(email: user_params[:email])
|
user = User.find_by(email: user_params[:email])
|
||||||
state = user_params[:state]
|
state = user_params[:state]
|
||||||
|
|
||||||
|
url = if @track
|
||||||
|
track_admin_conference_role_path(@conference.short_title, @role.name, @track)
|
||||||
|
else
|
||||||
|
admin_conference_role_path(@conference.short_title, @role.name)
|
||||||
|
end
|
||||||
|
|
||||||
unless user
|
unless user
|
||||||
redirect_to admin_conference_role_path(@conference.short_title, @role.name),
|
redirect_to url,
|
||||||
error: 'Could not find user. Please provide a valid email!'
|
error: 'Could not find user. Please provide a valid email!'
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
@ -49,17 +73,23 @@ module Admin
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if @role.resource_type == 'Conference'
|
||||||
|
role_resource = @conference
|
||||||
|
elsif @role.resource_type == 'Track'
|
||||||
|
role_resource = @track
|
||||||
|
end
|
||||||
|
|
||||||
# Remove user
|
# Remove user
|
||||||
if state == 'false'
|
if state == 'false'
|
||||||
if user.remove_role @role.name, @conference
|
if user.remove_role @role.name, role_resource
|
||||||
flash[:notice] = "Successfully removed role #{@role.name} from user #{user.email}"
|
flash[:notice] = "Successfully removed role #{@role.name} from user #{user.email}"
|
||||||
else
|
else
|
||||||
flash[:error] = "Could not remove role #{@role.name} from user #{user.email}"
|
flash[:error] = "Could not remove role #{@role.name} from user #{user.email}"
|
||||||
end
|
end
|
||||||
elsif user.has_role? @role.name, @conference
|
elsif user.has_role? @role.name, role_resource
|
||||||
flash[:error] = "User #{user.email} already has the role #{@role.name}"
|
flash[:error] = "User #{user.email} already has the role #{@role.name}"
|
||||||
# Add user
|
# Add user
|
||||||
elsif user.add_role @role.name, @conference
|
elsif user.add_role @role.name, role_resource
|
||||||
flash[:notice] = "Successfully added role #{@role.name} to user #{user.email}"
|
flash[:notice] = "Successfully added role #{@role.name} to user #{user.email}"
|
||||||
else
|
else
|
||||||
flash[:error] = "Coud not add role #{@role.name} to #{user.email}"
|
flash[:error] = "Coud not add role #{@role.name} to #{user.email}"
|
||||||
|
|
@ -67,7 +97,7 @@ module Admin
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.js
|
format.js
|
||||||
format.html { redirect_to admin_conference_role_path(@conference.short_title, @role.name) }
|
format.html { redirect_to url }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -77,8 +107,13 @@ module Admin
|
||||||
# Set 'organizer' as default role, when there is no other selection
|
# Set 'organizer' as default role, when there is no other selection
|
||||||
@selection = params[:id] ? params[:id].parameterize.underscore : 'organizer'
|
@selection = params[:id] ? params[:id].parameterize.underscore : 'organizer'
|
||||||
|
|
||||||
|
if @selection == 'track_organizer'
|
||||||
|
@track = @conference.program.tracks.find_by(short_name: params[:track_name])
|
||||||
|
@role = Role.find_by(name: @selection, resource: @track)
|
||||||
|
else
|
||||||
@role = Role.find_by(name: @selection, resource: @conference)
|
@role = Role.find_by(name: @selection, resource: @conference)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def role_params
|
def role_params
|
||||||
params.require(:role).permit(:name, :description, user_ids: [])
|
params.require(:role).permit(:name, :description, user_ids: [])
|
||||||
|
|
|
||||||
|
|
@ -50,10 +50,19 @@ module Admin
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def toggle_cfp_inclusion
|
||||||
|
@track.cfp_active = !@track.cfp_active
|
||||||
|
if @track.save
|
||||||
|
head :ok
|
||||||
|
else
|
||||||
|
head :unprocessable_entity
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def track_params
|
def track_params
|
||||||
params.require(:track).permit(:name, :description, :color, :short_name)
|
params.require(:track).permit(:name, :description, :color, :short_name, :cfp_active)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -13,10 +13,10 @@ module Admin
|
||||||
|
|
||||||
def show
|
def show
|
||||||
if can_manage_volunteers?(@conference)
|
if can_manage_volunteers?(@conference)
|
||||||
if @conference.use_vpositions
|
@volunteers = if @conference.use_vpositions
|
||||||
@volunteers = @conference.registrations.joins(:vchoices).uniq
|
@conference.registrations.joins(:vchoices).uniq
|
||||||
else
|
else
|
||||||
@volunteers = @conference.registrations.where(volunteer: true)
|
@conference.registrations.where(volunteer: true)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
authorize! :index, :volunteer
|
authorize! :index, :volunteer
|
||||||
|
|
|
||||||
|
|
@ -38,11 +38,11 @@ class ConferenceRegistrationsController < ApplicationController
|
||||||
def create
|
def create
|
||||||
@registration = @conference.registrations.new(registration_params)
|
@registration = @conference.registrations.new(registration_params)
|
||||||
|
|
||||||
if current_user.nil?
|
@user = if current_user.nil?
|
||||||
# @user variable needs to be set so that _sign_up_form_embedded works properly
|
# @user variable needs to be set so that _sign_up_form_embedded works properly
|
||||||
@user = @registration.build_user(user_params)
|
@registration.build_user(user_params)
|
||||||
else
|
else
|
||||||
@user = current_user
|
current_user
|
||||||
end
|
end
|
||||||
|
|
||||||
@registration.user = @user
|
@registration.user = @user
|
||||||
|
|
|
||||||
|
|
@ -13,5 +13,15 @@ class PhysicalTicketController < ApplicationController
|
||||||
@file_name = "ticket_for_#{@conference.short_title}"
|
@file_name = "ticket_for_#{@conference.short_title}"
|
||||||
@user = @physical_ticket.user
|
@user = @physical_ticket.user
|
||||||
@ticket_layout = @conference.ticket_layout.to_sym
|
@ticket_layout = @conference.ticket_layout.to_sym
|
||||||
|
respond_to do |format|
|
||||||
|
format.html
|
||||||
|
format.pdf do
|
||||||
|
pdf = TicketPdf.new(@conference, @user, @physical_ticket, @ticket_layout, @file_name)
|
||||||
|
send_data pdf.render,
|
||||||
|
filename: @file_name,
|
||||||
|
type: 'application/pdf',
|
||||||
|
disposition: 'attachment'
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
47
app/controllers/tracks_controller.rb
Normal file
47
app/controllers/tracks_controller.rb
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
class TracksController < ApplicationController
|
||||||
|
load_resource :conference, find_by: :short_title
|
||||||
|
load_resource :program, through: :conference, singleton: true
|
||||||
|
load_and_authorize_resource through: :program, find_by: :short_name
|
||||||
|
|
||||||
|
def index
|
||||||
|
@tracks = current_user.tracks.where(program: @program)
|
||||||
|
end
|
||||||
|
|
||||||
|
def show; end
|
||||||
|
|
||||||
|
def new
|
||||||
|
@track = @program.tracks.new(color: @conference.next_color_for_collection(:tracks))
|
||||||
|
end
|
||||||
|
|
||||||
|
def edit; end
|
||||||
|
|
||||||
|
def create
|
||||||
|
@track = @program.tracks.new(track_params)
|
||||||
|
@track.submitter = current_user
|
||||||
|
@track.state = 'new'
|
||||||
|
@track.cfp_active = false
|
||||||
|
if @track.save
|
||||||
|
redirect_to conference_program_tracks_path(conference_id: @conference.short_title),
|
||||||
|
notice: 'Track request successfully created.'
|
||||||
|
else
|
||||||
|
flash.now[:error] = "Creating Track request failed: #{@track.errors.full_messages.join('. ')}."
|
||||||
|
render :new
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def update
|
||||||
|
if @track.update_attributes(track_params)
|
||||||
|
redirect_to conference_program_tracks_path(conference_id: @conference.short_title),
|
||||||
|
notice: 'Track request successfully updated.'
|
||||||
|
else
|
||||||
|
flash.now[:error] = "Track request update failed: #{@track.errors.full_messages.join('. ')}."
|
||||||
|
render :edit
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def track_params
|
||||||
|
params.require(:track).permit(:name, :description, :color, :short_name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -102,7 +102,6 @@ module FormatHelper
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# rubocop:disable Lint/EndAlignment
|
|
||||||
def word_pluralize(count, singular, plural = nil)
|
def word_pluralize(count, singular, plural = nil)
|
||||||
word = if (count == 1 || count =~ /^1(\.0+)?$/)
|
word = if (count == 1 || count =~ /^1(\.0+)?$/)
|
||||||
singular
|
singular
|
||||||
|
|
|
||||||
|
|
@ -3,27 +3,13 @@ class Ability
|
||||||
|
|
||||||
# Initializes the ability class
|
# Initializes the ability class
|
||||||
def initialize(user)
|
def initialize(user)
|
||||||
# Order Abilities
|
|
||||||
# (Check https://github.com/CanCanCommunity/cancancan/wiki/Ability-Precedence)
|
|
||||||
# Check roles of user, using rolify. Role name is *case sensitive*
|
|
||||||
# user.is_organizer? or user.has_role? :organizer
|
|
||||||
# user.is_cfp_of? Conference or user.has_role? :cfp, Conference
|
|
||||||
# user.is_info_desk_of? Conference
|
|
||||||
# user.is_volunteers_coordinator_of? Conference
|
|
||||||
# user.is_attendee_of? Conference
|
|
||||||
# The following is wrong because a user will only have 'cfp' role for a specific conference
|
|
||||||
# user.is_cfp? # This is always false
|
|
||||||
|
|
||||||
user ||= User.new
|
user ||= User.new
|
||||||
|
|
||||||
# This is what sets up the different abilities
|
|
||||||
if user.new_record?
|
if user.new_record?
|
||||||
not_signed_in
|
not_signed_in
|
||||||
# Checks if the user does not have any role and is not an admin
|
|
||||||
elsif user.roles.any? || user.is_admin
|
|
||||||
signed_in_with_roles(user)
|
|
||||||
else
|
else
|
||||||
signed_in(user)
|
signed_in(user)
|
||||||
|
common_abilities_for_admins(user) if user.roles.any? || user.is_admin?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -74,7 +60,6 @@ class Ability
|
||||||
def signed_in(user)
|
def signed_in(user)
|
||||||
# Abilities from not_signed_in user are also inherited
|
# Abilities from not_signed_in user are also inherited
|
||||||
not_signed_in
|
not_signed_in
|
||||||
|
|
||||||
can :manage, User, id: user.id
|
can :manage, User, id: user.id
|
||||||
|
|
||||||
can :manage, Registration, user_id: user.id
|
can :manage, Registration, user_id: user.id
|
||||||
|
|
@ -106,198 +91,38 @@ class Ability
|
||||||
can [:destroy], Openid
|
can [:destroy], Openid
|
||||||
end
|
end
|
||||||
|
|
||||||
# Abilities for signed in users with roles
|
# Abilities for users with roles wandering around in non-admin views.
|
||||||
def signed_in_with_roles(user)
|
def common_abilities_for_admins(user)
|
||||||
# Abilities from not_signed_in and signed_in are also inherited
|
|
||||||
signed_in(user)
|
|
||||||
|
|
||||||
signed_in_with_organization_admin_role(user) if user.has_role? :organization_admin, :any
|
|
||||||
signed_in_with_organizer_role(user) if user.has_role? :organizer, :any
|
|
||||||
signed_in_with_cfp_role(user) if user.has_role? :cfp, :any
|
|
||||||
signed_in_with_info_desk_role(user) if user.has_role? :info_desk, :any
|
|
||||||
signed_in_with_volunteers_coordinator_role(user) if user.has_role? :volunteers_coordinator, :any
|
|
||||||
|
|
||||||
# for users with any role
|
|
||||||
can :access, Admin
|
can :access, Admin
|
||||||
can [:show], Conference
|
can :manage, :all if user.is_admin?
|
||||||
can :index, Commercial, commercialable_type: 'Conference'
|
|
||||||
cannot [:edit, :update, :destroy], Question, global: true
|
|
||||||
# for admins
|
|
||||||
can :manage, :all if user.is_admin
|
|
||||||
|
|
||||||
# even admin cannot create new users with ICHAIN enabled
|
conf_ids_for_organizer = Conference.with_role(:organizer, user).pluck(:id)
|
||||||
cannot [:new, :create], User if ENV['OSEM_ICHAIN_ENABLED'] == 'true'
|
|
||||||
|
|
||||||
cannot :revert_object, PaperTrail::Version do |version|
|
|
||||||
(version.event == 'create' && %w(Conference User Event).include?(version.item_type))
|
|
||||||
end
|
|
||||||
|
|
||||||
cannot :revert_attribute, PaperTrail::Version do |version|
|
|
||||||
version.event != 'update' || version.item.nil?
|
|
||||||
end
|
|
||||||
|
|
||||||
cannot :destroy, Program
|
|
||||||
# Do not delete venue, when there are rooms being used
|
|
||||||
cannot :destroy, Venue do |venue|
|
|
||||||
venue.conference.program.events.where.not(room_id: nil).any?
|
|
||||||
end
|
|
||||||
|
|
||||||
# Can't create cfp if there are no available cfp types
|
|
||||||
cannot [:new, :create], Cfp do |cfp|
|
|
||||||
cfp.program.remaining_cfp_types.empty?
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def signed_in_with_organization_admin_role(user)
|
|
||||||
org_ids_for_organization_admin = Organization.with_role(:organization_admin, user).pluck(:id)
|
|
||||||
conf_ids_for_organization_admin = Conference.where(organization_id: org_ids_for_organization_admin).pluck(:id)
|
|
||||||
|
|
||||||
can [:read, :update, :destroy], Organization, id: org_ids_for_organization_admin
|
|
||||||
can :new, Conference
|
|
||||||
can :manage, Conference, organization_id: org_ids_for_organization_admin
|
|
||||||
can [:index, :show], Role
|
|
||||||
can [:edit, :update], Role do |role|
|
|
||||||
role.resource_type == 'Organization' && (org_ids_for_organization_admin.include? role.resource_id)
|
|
||||||
end
|
|
||||||
signed_in_with_organizer_role(user, conf_ids_for_organization_admin)
|
|
||||||
end
|
|
||||||
|
|
||||||
def signed_in_with_organizer_role(user, conf_ids_for_organization_admin = [])
|
|
||||||
# ids of all the conferences for which the user has the 'organizer' role and
|
|
||||||
# conferences that belong to organizations for which user is 'organization_admin'
|
|
||||||
conf_ids = conf_ids_for_organization_admin.concat(Conference.with_role(:organizer, user).pluck(:id)).uniq
|
|
||||||
can :manage, Resource, conference_id: conf_ids
|
|
||||||
can [:read, :update, :destroy], Conference, id: conf_ids
|
|
||||||
can :manage, Splashpage, conference_id: conf_ids
|
|
||||||
can :manage, Contact, conference_id: conf_ids
|
|
||||||
can :manage, EmailSettings, conference_id: conf_ids
|
|
||||||
can :manage, Campaign, conference_id: conf_ids
|
|
||||||
can :manage, Target, conference_id: conf_ids
|
|
||||||
can :manage, Commercial, commercialable_type: 'Conference',
|
|
||||||
commercialable_id: conf_ids
|
|
||||||
can :manage, Registration, conference_id: conf_ids
|
|
||||||
can :manage, RegistrationPeriod, conference_id: conf_ids
|
|
||||||
can :manage, Question, conference_id: conf_ids
|
|
||||||
can :manage, Question do |question|
|
|
||||||
!(question.conferences.pluck(:id) & conf_ids).empty?
|
|
||||||
end
|
|
||||||
can :manage, Vposition, conference_id: conf_ids
|
|
||||||
can :manage, Vday, conference_id: conf_ids
|
|
||||||
can :manage, Program, conference_id: conf_ids
|
|
||||||
can :manage, Schedule, program: { conference_id: conf_ids }
|
|
||||||
can :manage, EventSchedule, schedule: { program: { conference_id: conf_ids } }
|
|
||||||
can :manage, Cfp, program: { conference_id: conf_ids}
|
|
||||||
can :manage, Event, program: { conference_id: conf_ids}
|
|
||||||
can :manage, EventType, program: { conference_id: conf_ids}
|
|
||||||
can :manage, Track, program: { conference_id: conf_ids}
|
|
||||||
can :manage, DifficultyLevel, program: { conference_id: conf_ids}
|
|
||||||
can :manage, Commercial, commercialable_type: 'Event',
|
|
||||||
commercialable_id: Event.where(program_id: Program.where(conference_id: conf_ids).pluck(:id)).pluck(:id)
|
|
||||||
can :manage, Venue, conference_id: conf_ids
|
|
||||||
can :manage, Commercial, commercialable_type: 'Venue',
|
|
||||||
commercialable_id: Venue.where(conference_id: conf_ids).pluck(:id)
|
|
||||||
can :manage, Lodging, conference_id: conf_ids
|
|
||||||
can :manage, Room, venue: { conference_id: conf_ids}
|
|
||||||
can :manage, Sponsor, conference_id: conf_ids
|
|
||||||
can :manage, SponsorshipLevel, conference_id: conf_ids
|
|
||||||
can :manage, Ticket, conference_id: conf_ids
|
|
||||||
can :index, Comment, commentable_type: 'Event',
|
|
||||||
commentable_id: Event.where(program_id: Program.where(conference_id: conf_ids).pluck(:id)).pluck(:id)
|
|
||||||
|
|
||||||
# Abilities for Role (Conference resource)
|
|
||||||
can [:index, :show], Role do |role|
|
|
||||||
role.resource_type == 'Conference'
|
|
||||||
end
|
|
||||||
|
|
||||||
can [:edit, :update, :toggle_user], Role do |role|
|
|
||||||
role.resource_type == 'Conference' && (conf_ids.include? role.resource_id)
|
|
||||||
end
|
|
||||||
|
|
||||||
can [:index, :revert_object, :revert_attribute], PaperTrail::Version do |version|
|
|
||||||
version.item_type == 'User' || (conf_ids.include? version.conference_id)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def signed_in_with_cfp_role(user)
|
|
||||||
# ids of all the conferences for which the user has the 'cfp' role
|
|
||||||
conf_ids_for_cfp = Conference.with_role(:cfp, user).pluck(:id)
|
conf_ids_for_cfp = Conference.with_role(:cfp, user).pluck(:id)
|
||||||
|
|
||||||
can [:index, :show, :update], Resource, conference_id: conf_ids_for_cfp
|
|
||||||
can :manage, Event, program: { conference_id: conf_ids_for_cfp }
|
|
||||||
can :manage, EventType, program: { conference_id: conf_ids_for_cfp }
|
|
||||||
can :manage, Track, program: { conference_id: conf_ids_for_cfp }
|
|
||||||
can :manage, DifficultyLevel, program: { conference_id: conf_ids_for_cfp }
|
|
||||||
can :manage, EmailSettings, conference_id: conf_ids_for_cfp
|
|
||||||
can :manage, Schedule, program: { conference_id: conf_ids_for_cfp }
|
|
||||||
can :manage, Room, venue: { conference_id: conf_ids_for_cfp }
|
|
||||||
can :show, Venue, conference_id: conf_ids_for_cfp
|
|
||||||
can :show, Commercial, commercialable_type: 'Venue', commercialable_id: Venue.where(conference_id: conf_ids_for_cfp).pluck(:id)
|
|
||||||
can :manage, Cfp, program: { conference_id: conf_ids_for_cfp }
|
|
||||||
can :manage, Program, conference_id: conf_ids_for_cfp
|
|
||||||
can :manage, Commercial, commercialable_type: 'Event',
|
|
||||||
commercialable_id: Event.where(program_id: Program.where(conference_id: conf_ids_for_cfp).pluck(:id)).pluck(:id)
|
|
||||||
can :index, Comment, commentable_type: 'Event',
|
|
||||||
commentable_id: Event.where(program_id: Program.where(conference_id: conf_ids_for_cfp).pluck(:id)).pluck(:id)
|
|
||||||
|
|
||||||
# Abilities for Role (Conference resource)
|
|
||||||
can [:index, :show], Role do |role|
|
|
||||||
role.resource_type == 'Conference'
|
|
||||||
end
|
|
||||||
# Can add or remove users from role, when user has that same role for the conference
|
|
||||||
# Eg. If you are member of the CfP team, you can add more CfP team members (add users to the role 'CfP')
|
|
||||||
can :toggle_user, Role do |role|
|
|
||||||
role.resource_type == 'Conference' && role.name == 'cfp' &&
|
|
||||||
(Conference.with_role(:cfp, user).pluck(:id).include? role.resource_id)
|
|
||||||
end
|
|
||||||
|
|
||||||
can [:index, :revert_object, :revert_attribute], PaperTrail::Version, item_type: 'Event', conference_id: conf_ids_for_cfp
|
|
||||||
can [:index, :revert_object, :revert_attribute], PaperTrail::Version, item_type: 'Vote', conference_id: conf_ids_for_cfp
|
|
||||||
can [:index, :revert_object, :revert_attribute], PaperTrail::Version do |version|
|
|
||||||
version.item_type == 'Commercial' && conf_ids_for_cfp.include?(version.conference_id) &&
|
|
||||||
(version.object.to_s.include?('Event') || version.object_changes.to_s.include?('Event'))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def signed_in_with_info_desk_role(user)
|
|
||||||
# ids of all the conferences for which the user has the 'info_desk' role
|
|
||||||
conf_ids_for_info_desk = Conference.with_role(:info_desk, user).pluck(:id)
|
conf_ids_for_info_desk = Conference.with_role(:info_desk, user).pluck(:id)
|
||||||
|
|
||||||
can [:index, :show, :update], Resource, conference_id: conf_ids_for_info_desk
|
if conf_ids_for_organizer
|
||||||
|
# To access splashpage of their conference if it is not public
|
||||||
|
can :show, Conference, id: conf_ids_for_organizer
|
||||||
|
# To access conference/proposals/registrations
|
||||||
|
can :manage, Registration, conference_id: conf_ids_for_organizer
|
||||||
|
# To access conference/proposals
|
||||||
|
can :manage, Event, program: { conference_id: conf_ids_for_organizer }
|
||||||
|
# To access comment link in menu bar
|
||||||
|
can :index, Comment, commentable_type: 'Event',
|
||||||
|
commentable_id: Event.where(program_id: Program.where(conference_id: conf_ids_for_organizer).pluck(:id)).pluck(:id)
|
||||||
|
end
|
||||||
|
|
||||||
|
if conf_ids_for_cfp
|
||||||
|
# To access comment link in menu bar
|
||||||
|
can :index, Comment, commentable_type: 'Event',
|
||||||
|
commentable_id: Event.where(program_id: Program.where(conference_id: conf_ids_for_cfp).pluck(:id)).pluck(:id)
|
||||||
|
# To access conference/proposals
|
||||||
|
can :manage, Event, program: { conference_id: conf_ids_for_cfp }
|
||||||
|
end
|
||||||
|
|
||||||
|
if conf_ids_for_info_desk
|
||||||
|
# To access conference/proposals/registrations
|
||||||
can :manage, Registration, conference_id: conf_ids_for_info_desk
|
can :manage, Registration, conference_id: conf_ids_for_info_desk
|
||||||
can :manage, Question, conference_id: conf_ids_for_info_desk
|
|
||||||
can :manage, Question do |question|
|
|
||||||
!(question.conferences.pluck(:id) & conf_ids_for_info_desk).empty?
|
|
||||||
end
|
|
||||||
|
|
||||||
# Abilities for Role (Conference resource)
|
|
||||||
can [:index, :show], Role do |role|
|
|
||||||
role.resource_type == 'Conference'
|
|
||||||
end
|
|
||||||
# Can add or remove users from role, when user has that same role for the conference
|
|
||||||
# Eg. If you are member of the CfP team, you can add more CfP team members (add users to the role 'CfP')
|
|
||||||
can :toggle_user, Role do |role|
|
|
||||||
role.resource_type == 'Conference' && role.name == 'info_desk' &&
|
|
||||||
(Conference.with_role(:info_desk, user).pluck(:id).include? role.resource_id)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def signed_in_with_volunteers_coordinator_role(user)
|
|
||||||
# ids of all the conferences for which the user has the 'volunteers_coordinator' role
|
|
||||||
conf_ids_for_volunteers_coordinator = Conference.with_role(:volunteers_coordinator, user).pluck(:id)
|
|
||||||
|
|
||||||
can [:index, :show, :update], Resource, conference_id: conf_ids_for_volunteers_coordinator
|
|
||||||
can :manage, Vposition, conference_id: conf_ids_for_volunteers_coordinator
|
|
||||||
can :manage, Vday, conference_id: conf_ids_for_volunteers_coordinator
|
|
||||||
|
|
||||||
# Abilities for Role (Conference resource)
|
|
||||||
can [:index, :show], Role do |role|
|
|
||||||
role.resource_type == 'Conference'
|
|
||||||
end
|
|
||||||
# Can add or remove users from role, when user has that same role for the conference
|
|
||||||
# Eg. If you are member of the CfP team, you can add more CfP team members (add users to the role 'CfP')
|
|
||||||
can :toggle_user, Role do |role|
|
|
||||||
role.resource_type == 'Conference' && role.name == 'volunteers_coordinator' &&
|
|
||||||
(Conference.with_role(:volunteers_coordinator, user).pluck(:id).include? role.resource_id)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
286
app/models/admin_ability.rb
Normal file
286
app/models/admin_ability.rb
Normal file
|
|
@ -0,0 +1,286 @@
|
||||||
|
class AdminAbility
|
||||||
|
include CanCan::Ability
|
||||||
|
|
||||||
|
def initialize(user)
|
||||||
|
# Order Abilities
|
||||||
|
# (Check https://github.com/CanCanCommunity/cancancan/wiki/Ability-Precedence)
|
||||||
|
# Check roles of user, using rolify. Role name is *case sensitive*
|
||||||
|
# user.is_organizer? or user.has_role? :organizer
|
||||||
|
# user.is_cfp_of? Conference or user.has_role? :cfp, Conference
|
||||||
|
# user.is_info_desk_of? Conference
|
||||||
|
# user.is_volunteers_coordinator_of? Conference
|
||||||
|
# user.is_attendee_of? Conference
|
||||||
|
# The following is wrong because a user will only have 'cfp' role for a specific conference
|
||||||
|
# user.is_cfp? # This is always false
|
||||||
|
|
||||||
|
user ||= User.new
|
||||||
|
signed_in_with_roles(user)
|
||||||
|
end
|
||||||
|
|
||||||
|
def common_abilities_for_roles(user)
|
||||||
|
can :manage, User, id: user.id
|
||||||
|
can :manage, Registration, user_id: user.id
|
||||||
|
|
||||||
|
can :index, Conference
|
||||||
|
can :show, Registration, &:new_record?
|
||||||
|
|
||||||
|
can [:new, :create], Registration do |registration|
|
||||||
|
conference = registration.conference
|
||||||
|
conference.registration_open? && !conference.registration_limit_exceeded? || conference.program.speakers.confirmed.include?(user)
|
||||||
|
end
|
||||||
|
|
||||||
|
can :index, Organization
|
||||||
|
can :index, Ticket
|
||||||
|
can :manage, TicketPurchase, user_id: user.id
|
||||||
|
can [:new, :create], Payment, user_id: user.id
|
||||||
|
|
||||||
|
can [:create, :destroy], Subscription, user_id: user.id
|
||||||
|
|
||||||
|
can [:new, :create], Event do |event|
|
||||||
|
event.program.cfp_open? && event.new_record?
|
||||||
|
end
|
||||||
|
|
||||||
|
can [:update, :show, :delete, :index], Event do |event|
|
||||||
|
event.users.include?(user)
|
||||||
|
end
|
||||||
|
|
||||||
|
# can manage the commercials of their own events
|
||||||
|
can :manage, Commercial, commercialable_type: 'Event', commercialable_id: user.events.pluck(:id)
|
||||||
|
|
||||||
|
can [:destroy], Openid
|
||||||
|
can :access, Admin
|
||||||
|
can :index, Commercial, commercialable_type: 'Conference'
|
||||||
|
cannot [:edit, :update, :destroy], Question, global: true
|
||||||
|
# for admins
|
||||||
|
can :manage, :all if user.is_admin
|
||||||
|
# even admin cannot create new users with ICHAIN enabled
|
||||||
|
cannot [:new, :create], User if ENV['OSEM_ICHAIN_ENABLED'] == 'true'
|
||||||
|
cannot :revert_object, PaperTrail::Version do |version|
|
||||||
|
(version.event == 'create' && %w[Conference User Event].include?(version.item_type))
|
||||||
|
end
|
||||||
|
cannot :revert_attribute, PaperTrail::Version do |version|
|
||||||
|
version.event != 'update' || version.item.nil?
|
||||||
|
end
|
||||||
|
# Can't create cfp if there are no available cfp types
|
||||||
|
cannot [:new, :create], Cfp do |cfp|
|
||||||
|
cfp.program.remaining_cfp_types.empty?
|
||||||
|
end
|
||||||
|
cannot :destroy, Program
|
||||||
|
# Do not delete venue, when there are rooms being used
|
||||||
|
cannot :destroy, Venue do |venue|
|
||||||
|
venue.conference.program.events.where.not(room_id: nil).any?
|
||||||
|
end
|
||||||
|
|
||||||
|
# Prevent requests for tracks from being destroyed
|
||||||
|
cannot :destroy, Track do |track|
|
||||||
|
track.self_organized?
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Abilities for signed in users with roles
|
||||||
|
def signed_in_with_roles(user)
|
||||||
|
signed_in_with_organization_admin_role(user) if user.has_role? :organization_admin, :any
|
||||||
|
signed_in_with_organizer_role(user) if user.has_role? :organizer, :any
|
||||||
|
signed_in_with_cfp_role(user) if user.has_role? :cfp, :any
|
||||||
|
signed_in_with_info_desk_role(user) if user.has_role? :info_desk, :any
|
||||||
|
signed_in_with_volunteers_coordinator_role(user) if user.has_role? :volunteers_coordinator, :any
|
||||||
|
signed_in_with_track_organizer_role(user) if user.has_role? :track_organizer, :any
|
||||||
|
common_abilities_for_roles(user)
|
||||||
|
end
|
||||||
|
|
||||||
|
def signed_in_with_organization_admin_role(user)
|
||||||
|
org_ids_for_organization_admin = Organization.with_role(:organization_admin, user).pluck(:id)
|
||||||
|
conf_ids_for_organization_admin = Conference.where(organization_id: org_ids_for_organization_admin).pluck(:id)
|
||||||
|
|
||||||
|
can [:read, :update, :destroy], Organization, id: org_ids_for_organization_admin
|
||||||
|
can :new, Conference
|
||||||
|
can :manage, Conference, organization_id: org_ids_for_organization_admin
|
||||||
|
can [:index, :show], Role
|
||||||
|
can [:edit, :update], Role do |role|
|
||||||
|
role.resource_type == 'Organization' && (org_ids_for_organization_admin.include? role.resource_id)
|
||||||
|
end
|
||||||
|
signed_in_with_organizer_role(user, conf_ids_for_organization_admin)
|
||||||
|
end
|
||||||
|
|
||||||
|
def signed_in_with_organizer_role(user, conf_ids_for_organization_admin = [])
|
||||||
|
# ids of all the conferences for which the user has the 'organizer' role and
|
||||||
|
# conferences that belong to organizations for which user is 'organization_admin'
|
||||||
|
conf_ids = conf_ids_for_organization_admin.concat(Conference.with_role(:organizer, user).pluck(:id)).uniq
|
||||||
|
# ids of all the tracks that belong to the programs of the above conferences
|
||||||
|
track_ids = Track.joins(:program).where('programs.conference_id IN (?)', conf_ids).pluck(:id)
|
||||||
|
|
||||||
|
can :manage, Resource, conference_id: conf_ids
|
||||||
|
can [:read, :update, :destroy], Conference, id: conf_ids
|
||||||
|
can :manage, Splashpage, conference_id: conf_ids
|
||||||
|
can :manage, Contact, conference_id: conf_ids
|
||||||
|
can :manage, EmailSettings, conference_id: conf_ids
|
||||||
|
can :manage, Campaign, conference_id: conf_ids
|
||||||
|
can :manage, Target, conference_id: conf_ids
|
||||||
|
can :manage, Commercial, commercialable_type: 'Conference',
|
||||||
|
commercialable_id: conf_ids
|
||||||
|
can :manage, Registration, conference_id: conf_ids
|
||||||
|
can :manage, RegistrationPeriod, conference_id: conf_ids
|
||||||
|
can :manage, Question, conference_id: conf_ids
|
||||||
|
can :manage, Question do |question|
|
||||||
|
!(question.conferences.pluck(:id) & conf_ids).empty?
|
||||||
|
end
|
||||||
|
can :manage, Vposition, conference_id: conf_ids
|
||||||
|
can :manage, Vday, conference_id: conf_ids
|
||||||
|
can :manage, Program, conference_id: conf_ids
|
||||||
|
can :manage, Schedule, program: { conference_id: conf_ids }
|
||||||
|
can :manage, EventSchedule, schedule: { program: { conference_id: conf_ids } }
|
||||||
|
can :manage, Cfp, program: { conference_id: conf_ids }
|
||||||
|
can :manage, Event, program: { conference_id: conf_ids }
|
||||||
|
can :manage, EventType, program: { conference_id: conf_ids }
|
||||||
|
can :manage, Track, program: { conference_id: conf_ids }
|
||||||
|
can :manage, DifficultyLevel, program: { conference_id: conf_ids }
|
||||||
|
can :manage, Commercial, commercialable_type: 'Event',
|
||||||
|
commercialable_id: Event.where(program_id: Program.where(conference_id: conf_ids).pluck(:id)).pluck(:id)
|
||||||
|
can :manage, Venue, conference_id: conf_ids
|
||||||
|
can :manage, Commercial, commercialable_type: 'Venue',
|
||||||
|
commercialable_id: Venue.where(conference_id: conf_ids).pluck(:id)
|
||||||
|
can :manage, Lodging, conference_id: conf_ids
|
||||||
|
can :manage, Room, venue: { conference_id: conf_ids }
|
||||||
|
can :manage, Sponsor, conference_id: conf_ids
|
||||||
|
can :manage, SponsorshipLevel, conference_id: conf_ids
|
||||||
|
can :manage, Ticket, conference_id: conf_ids
|
||||||
|
can :index, Comment, commentable_type: 'Event',
|
||||||
|
commentable_id: Event.where(program_id: Program.where(conference_id: conf_ids).pluck(:id)).pluck(:id)
|
||||||
|
|
||||||
|
# Abilities for Role (Conference resource)
|
||||||
|
can [:index, :show], Role do |role|
|
||||||
|
role.resource_type == 'Conference' || role.resource_type == 'Track'
|
||||||
|
end
|
||||||
|
|
||||||
|
can [:edit, :update, :toggle_user], Role do |role|
|
||||||
|
role.resource_type == 'Conference' && (conf_ids.include? role.resource_id) ||
|
||||||
|
role.resource_type == 'Track' && (track_ids.include? role.resource_id)
|
||||||
|
end
|
||||||
|
|
||||||
|
can [:index, :revert_object, :revert_attribute], PaperTrail::Version do |version|
|
||||||
|
version.item_type == 'User' || (conf_ids.include? version.conference_id)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def signed_in_with_cfp_role(user)
|
||||||
|
# ids of all the conferences for which the user has the 'cfp' role
|
||||||
|
conf_ids_for_cfp = Conference.with_role(:cfp, user).pluck(:id)
|
||||||
|
|
||||||
|
can :show, Conference do |conf|
|
||||||
|
conf_ids_for_cfp.include?(conf.id)
|
||||||
|
end
|
||||||
|
can [:index, :show, :update], Resource, conference_id: conf_ids_for_cfp
|
||||||
|
can :manage, Event, program: { conference_id: conf_ids_for_cfp }
|
||||||
|
can :manage, EventType, program: { conference_id: conf_ids_for_cfp }
|
||||||
|
can :manage, Track, program: { conference_id: conf_ids_for_cfp }
|
||||||
|
can :manage, DifficultyLevel, program: { conference_id: conf_ids_for_cfp }
|
||||||
|
can :manage, EmailSettings, conference_id: conf_ids_for_cfp
|
||||||
|
can :manage, Schedule, program: { conference_id: conf_ids_for_cfp }
|
||||||
|
can :manage, Room, venue: { conference_id: conf_ids_for_cfp }
|
||||||
|
can :show, Venue, conference_id: conf_ids_for_cfp
|
||||||
|
can :show, Commercial, commercialable_type: 'Venue', commercialable_id: Venue.where(conference_id: conf_ids_for_cfp).pluck(:id)
|
||||||
|
can :manage, Cfp, program: { conference_id: conf_ids_for_cfp }
|
||||||
|
can :manage, Program, conference_id: conf_ids_for_cfp
|
||||||
|
can :manage, Commercial, commercialable_type: 'Event',
|
||||||
|
commercialable_id: Event.where(program_id: Program.where(conference_id: conf_ids_for_cfp).pluck(:id)).pluck(:id)
|
||||||
|
can :index, Comment, commentable_type: 'Event',
|
||||||
|
commentable_id: Event.where(program_id: Program.where(conference_id: conf_ids_for_cfp).pluck(:id)).pluck(:id)
|
||||||
|
|
||||||
|
# Abilities for Role (Conference resource)
|
||||||
|
can [:index, :show], Role do |role|
|
||||||
|
role.resource_type == 'Conference' || role.resource_type == 'Track'
|
||||||
|
end
|
||||||
|
# Can add or remove users from role, when user has that same role for the conference
|
||||||
|
# Eg. If you are member of the CfP team, you can add more CfP team members (add users to the role 'CfP')
|
||||||
|
can :toggle_user, Role do |role|
|
||||||
|
role.resource_type == 'Conference' && role.name == 'cfp' &&
|
||||||
|
(Conference.with_role(:cfp, user).pluck(:id).include? role.resource_id)
|
||||||
|
end
|
||||||
|
|
||||||
|
can [:index, :revert_object, :revert_attribute], PaperTrail::Version, item_type: 'Event', conference_id: conf_ids_for_cfp
|
||||||
|
can [:index, :revert_object, :revert_attribute], PaperTrail::Version, item_type: 'Vote', conference_id: conf_ids_for_cfp
|
||||||
|
can [:index, :revert_object, :revert_attribute], PaperTrail::Version do |version|
|
||||||
|
version.item_type == 'Commercial' && conf_ids_for_cfp.include?(version.conference_id) &&
|
||||||
|
(version.object.to_s.include?('Event') || version.object_changes.to_s.include?('Event'))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def signed_in_with_info_desk_role(user)
|
||||||
|
# ids of all the conferences for which the user has the 'info_desk' role
|
||||||
|
conf_ids_for_info_desk = Conference.with_role(:info_desk, user).pluck(:id)
|
||||||
|
|
||||||
|
can :show, Conference do |conf|
|
||||||
|
conf_ids_for_info_desk.include?(conf.id)
|
||||||
|
end
|
||||||
|
can [:index, :show, :update], Resource, conference_id: conf_ids_for_info_desk
|
||||||
|
can :manage, Registration, conference_id: conf_ids_for_info_desk
|
||||||
|
can :manage, Question, conference_id: conf_ids_for_info_desk
|
||||||
|
can :manage, Question do |question|
|
||||||
|
!(question.conferences.pluck(:id) & conf_ids_for_info_desk).empty?
|
||||||
|
end
|
||||||
|
|
||||||
|
# Abilities for Role (Conference resource)
|
||||||
|
can [:index, :show], Role do |role|
|
||||||
|
role.resource_type == 'Conference' || role.resource_type == 'Track'
|
||||||
|
end
|
||||||
|
# Can add or remove users from role, when user has that same role for the conference
|
||||||
|
# Eg. If you are member of the CfP team, you can add more CfP team members (add users to the role 'CfP')
|
||||||
|
can :toggle_user, Role do |role|
|
||||||
|
role.resource_type == 'Conference' && role.name == 'info_desk' &&
|
||||||
|
(Conference.with_role(:info_desk, user).pluck(:id).include? role.resource_id)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def signed_in_with_volunteers_coordinator_role(user)
|
||||||
|
# ids of all the conferences for which the user has the 'volunteers_coordinator' role
|
||||||
|
conf_ids_for_volunteers_coordinator = Conference.with_role(:volunteers_coordinator, user).pluck(:id)
|
||||||
|
|
||||||
|
can :show, Conference do |conf|
|
||||||
|
conf_ids_for_volunteers_coordinator.include?(conf.id)
|
||||||
|
end
|
||||||
|
can [:index, :show, :update], Resource, conference_id: conf_ids_for_volunteers_coordinator
|
||||||
|
can :manage, Vposition, conference_id: conf_ids_for_volunteers_coordinator
|
||||||
|
can :manage, Vday, conference_id: conf_ids_for_volunteers_coordinator
|
||||||
|
|
||||||
|
# Abilities for Role (Conference resource)
|
||||||
|
can [:index, :show], Role do |role|
|
||||||
|
role.resource_type == 'Conference' || role.resource_type == 'Track'
|
||||||
|
end
|
||||||
|
# Can add or remove users from role, when user has that same role for the conference
|
||||||
|
# Eg. If you are member of the CfP team, you can add more CfP team members (add users to the role 'CfP')
|
||||||
|
can :toggle_user, Role do |role|
|
||||||
|
role.resource_type == 'Conference' && role.name == 'volunteers_coordinator' &&
|
||||||
|
(Conference.with_role(:volunteers_coordinator, user).pluck(:id).include? role.resource_id)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def signed_in_with_track_organizer_role(user)
|
||||||
|
# ids of all the conferences for which the user has the 'track organizer' role
|
||||||
|
conf_ids_for_track_organizer = Track.with_role(:track_organizer, user).joins(:program).pluck(:conference_id)
|
||||||
|
# ids of all the tracks for which the user has the 'track_organizer' role
|
||||||
|
track_ids_for_track_organizer = Track.with_role(:track_organizer, user).pluck(:id)
|
||||||
|
|
||||||
|
can :show, Conference do |conf|
|
||||||
|
conf_ids_for_track_organizer.include?(conf.id)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Show Program in the admin sidebar
|
||||||
|
can :show, Program, conference_id: conf_ids_for_track_organizer
|
||||||
|
|
||||||
|
# Show Tracks in the admin sidebar
|
||||||
|
can :update, Track do |track|
|
||||||
|
track.new_record? && conf_ids_for_track_organizer.include?(track.program.conference_id)
|
||||||
|
end
|
||||||
|
|
||||||
|
can :manage, Track, id: track_ids_for_track_organizer
|
||||||
|
|
||||||
|
# Show Roles in the admin sidebar and allow authorization of the index action
|
||||||
|
can [:index, :show], Role do |role|
|
||||||
|
role.resource_type == 'Conference' || role.resource_type == 'Track'
|
||||||
|
end
|
||||||
|
|
||||||
|
can :toggle_user, Role do |role|
|
||||||
|
role.resource_type == 'Track' && track_ids_for_track_organizer.include?(role.resource_id)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
# cannot delete program if there are events submitted
|
# cannot delete program if there are events submitted
|
||||||
|
|
||||||
class Cfp < ActiveRecord::Base
|
class Cfp < ActiveRecord::Base
|
||||||
TYPES = %w(events).freeze
|
TYPES = %w(events booths).freeze
|
||||||
|
|
||||||
scope :for_events, (-> { find_by(cfp_type: 'events') })
|
scope :for_events, (-> { find_by(cfp_type: 'events') })
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,8 @@ class Conference < ActiveRecord::Base
|
||||||
resourcify :roles, dependent: :delete_all
|
resourcify :roles, dependent: :delete_all
|
||||||
|
|
||||||
default_scope { order('start_date DESC') }
|
default_scope { order('start_date DESC') }
|
||||||
|
scope :upcoming, (-> { where('end_date >= ?', Date.current) })
|
||||||
|
scope :past, (-> { where('end_date < ?', Date.current) })
|
||||||
|
|
||||||
belongs_to :organization
|
belongs_to :organization
|
||||||
|
|
||||||
|
|
@ -561,10 +563,10 @@ class Conference < ActiveRecord::Base
|
||||||
# ====Returns
|
# ====Returns
|
||||||
# * +hash+ -> track => {color, value}
|
# * +hash+ -> track => {color, value}
|
||||||
def tracks_distribution(state = nil)
|
def tracks_distribution(state = nil)
|
||||||
if state
|
tracks_grouped = if state
|
||||||
tracks_grouped = program.events.select(:track_id).where('state = ?', state).group(:track_id)
|
program.events.select(:track_id).where('state = ?', state).group(:track_id)
|
||||||
else
|
else
|
||||||
tracks_grouped = program.events.select(:track_id).group(:track_id)
|
program.events.select(:track_id).group(:track_id)
|
||||||
end
|
end
|
||||||
tracks_counted = tracks_grouped.count
|
tracks_counted = tracks_grouped.count
|
||||||
|
|
||||||
|
|
@ -999,10 +1001,10 @@ class Conference < ActiveRecord::Base
|
||||||
# ====Returns
|
# ====Returns
|
||||||
# * +hash+ -> object_type => {color, value}
|
# * +hash+ -> object_type => {color, value}
|
||||||
def calculate_event_distribution(group_by_id, association_symbol, state = nil)
|
def calculate_event_distribution(group_by_id, association_symbol, state = nil)
|
||||||
if state
|
grouped = if state
|
||||||
grouped = program.events.select(group_by_id).where('state = ?', 'confirmed').group(group_by_id)
|
program.events.select(group_by_id).where('state = ?', 'confirmed').group(group_by_id)
|
||||||
else
|
else
|
||||||
grouped = program.events.select(group_by_id).group(group_by_id)
|
program.events.select(group_by_id).group(group_by_id)
|
||||||
end
|
end
|
||||||
counted = grouped.count
|
counted = grouped.count
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,10 +29,10 @@ class TicketPurchase < ActiveRecord::Base
|
||||||
conference.tickets.each do |ticket|
|
conference.tickets.each do |ticket|
|
||||||
quantity = purchases[ticket.id.to_s].to_i
|
quantity = purchases[ticket.id.to_s].to_i
|
||||||
# if the user bought the ticket and is still unpaid, just update the quantity
|
# if the user bought the ticket and is still unpaid, just update the quantity
|
||||||
if ticket.bought?(user) && ticket.unpaid?(user)
|
purchase = if ticket.bought?(user) && ticket.unpaid?(user)
|
||||||
purchase = update_quantity(conference, quantity, ticket, user)
|
update_quantity(conference, quantity, ticket, user)
|
||||||
else
|
else
|
||||||
purchase = purchase_ticket(conference, quantity, ticket, user)
|
purchase_ticket(conference, quantity, ticket, user)
|
||||||
end
|
end
|
||||||
|
|
||||||
if purchase && !purchase.save
|
if purchase && !purchase.save
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
class Track < ActiveRecord::Base
|
class Track < ActiveRecord::Base
|
||||||
include RevisionCount
|
include RevisionCount
|
||||||
|
|
||||||
|
resourcify :roles, dependent: :delete_all
|
||||||
|
|
||||||
belongs_to :program
|
belongs_to :program
|
||||||
|
belongs_to :submitter, class_name: 'User'
|
||||||
has_many :events, dependent: :nullify
|
has_many :events, dependent: :nullify
|
||||||
|
|
||||||
has_paper_trail only: [:name, :description, :color], meta: { conference_id: :conference_id }
|
has_paper_trail only: [:name, :description, :color], meta: { conference_id: :conference_id }
|
||||||
|
|
@ -14,13 +18,31 @@ class Track < ActiveRecord::Base
|
||||||
uniqueness: {
|
uniqueness: {
|
||||||
scope: :program
|
scope: :program
|
||||||
}
|
}
|
||||||
|
validates :state, presence: true, if: :self_organized?
|
||||||
|
validates :cfp_active, inclusion: { in: [true, false] }, if: :self_organized?
|
||||||
|
|
||||||
before_validation :capitalize_color
|
before_validation :capitalize_color
|
||||||
|
|
||||||
|
after_create :create_organizer_role, if: :self_organized?
|
||||||
|
|
||||||
def conference
|
def conference
|
||||||
program.conference
|
program.conference
|
||||||
end
|
end
|
||||||
|
|
||||||
|
##
|
||||||
|
# Checks if the track is self-organized
|
||||||
|
# ====Returns
|
||||||
|
# * +true+ -> If the track has a submitter
|
||||||
|
# * +false+ -> if the track doesn't have a submitter
|
||||||
|
def self_organized?
|
||||||
|
return true if submitter
|
||||||
|
false
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_param
|
||||||
|
short_name
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def generate_guid
|
def generate_guid
|
||||||
|
|
@ -38,4 +60,10 @@ class Track < ActiveRecord::Base
|
||||||
def conference_id
|
def conference_id
|
||||||
program.conference_id
|
program.conference_id
|
||||||
end
|
end
|
||||||
|
|
||||||
|
##
|
||||||
|
# Creates the role of the track organizer
|
||||||
|
def create_organizer_role
|
||||||
|
Role.where(name: 'track_organizer', resource: self).first_or_create(description: 'For the organizers of the Track')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -30,10 +30,10 @@ class User < ActiveRecord::Base
|
||||||
# :lockable, :timeoutable and :omniauthable
|
# :lockable, :timeoutable and :omniauthable
|
||||||
devise_modules = []
|
devise_modules = []
|
||||||
|
|
||||||
if ENV['OSEM_ICHAIN_ENABLED'] == 'true'
|
devise_modules += if ENV['OSEM_ICHAIN_ENABLED'] == 'true'
|
||||||
devise_modules += [:ichain_authenticatable, :ichain_registerable, :omniauthable, omniauth_providers: []]
|
[:ichain_authenticatable, :ichain_registerable, :omniauthable, omniauth_providers: []]
|
||||||
else
|
else
|
||||||
devise_modules += [:database_authenticatable, :registerable,
|
[:database_authenticatable, :registerable,
|
||||||
:recoverable, :rememberable, :trackable, :validatable, :confirmable,
|
:recoverable, :rememberable, :trackable, :validatable, :confirmable,
|
||||||
:omniauthable, omniauth_providers: [:suse, :google, :facebook, :github]]
|
:omniauthable, omniauth_providers: [:suse, :google, :facebook, :github]]
|
||||||
end
|
end
|
||||||
|
|
@ -55,6 +55,7 @@ class User < ActiveRecord::Base
|
||||||
has_many :votes, dependent: :destroy
|
has_many :votes, dependent: :destroy
|
||||||
has_many :voted_events, through: :votes, source: :events
|
has_many :voted_events, through: :votes, source: :events
|
||||||
has_many :subscriptions, dependent: :destroy
|
has_many :subscriptions, dependent: :destroy
|
||||||
|
has_many :tracks, foreign_key: 'submitter_id'
|
||||||
accepts_nested_attributes_for :roles
|
accepts_nested_attributes_for :roles
|
||||||
|
|
||||||
scope :admin, -> { where(is_admin: true) }
|
scope :admin, -> { where(is_admin: true) }
|
||||||
|
|
|
||||||
81
app/pdfs/ticket_pdf.rb
Normal file
81
app/pdfs/ticket_pdf.rb
Normal file
|
|
@ -0,0 +1,81 @@
|
||||||
|
class TicketPdf < Prawn::Document
|
||||||
|
def initialize(conference, user, physical_ticket, ticket_layout, file_name)
|
||||||
|
super(page_layout: ticket_layout, page_size: 'A4', filename: file_name)
|
||||||
|
@user = user
|
||||||
|
@physical_ticket = physical_ticket
|
||||||
|
@conference = conference
|
||||||
|
|
||||||
|
@left = bounds.left
|
||||||
|
@right = bounds.right
|
||||||
|
@mid_vertical = (bounds.top - bounds.bottom) / 2
|
||||||
|
@mid_horizontal = (bounds.right - bounds.left) / 2
|
||||||
|
@x = 0
|
||||||
|
|
||||||
|
draw_first_square
|
||||||
|
draw_second_square
|
||||||
|
draw_third_square
|
||||||
|
draw_fourth_square
|
||||||
|
end
|
||||||
|
|
||||||
|
def draw_first_square
|
||||||
|
move_down @mid_vertical
|
||||||
|
dash(2, space: 1)
|
||||||
|
stroke_horizontal_rule
|
||||||
|
stroke_vertical_line bounds.top, bounds.bottom, at: @mid_horizontal
|
||||||
|
move_up @mid_vertical
|
||||||
|
draw_text 'TICKET HOLDER', at: [@x, cursor - 30], size: 17
|
||||||
|
dash(2, space: 0)
|
||||||
|
stroke_rectangle [@x, cursor - 50], 230, 150
|
||||||
|
move_down 80
|
||||||
|
draw_text 'NAME', at: [@x + 10, cursor], size: 13
|
||||||
|
fill_color '808080'
|
||||||
|
draw_text @user.name.to_s, at: [@x + 10, cursor - 25], size: 20
|
||||||
|
fill_color '000000'
|
||||||
|
draw_text 'EMAIL', at: [@x + 10, cursor - 50], size: 13
|
||||||
|
fill_color '808080'
|
||||||
|
draw_text @user.email.to_s, at: [@x + 10, cursor - 75], size: 20
|
||||||
|
fill_color '000000'
|
||||||
|
move_up 20
|
||||||
|
end
|
||||||
|
|
||||||
|
def draw_second_square
|
||||||
|
if @conference.picture?
|
||||||
|
if 7 * @conference.picture.image[:width] > 12 * @conference.picture.image[:height]
|
||||||
|
image "#{Rails.root}/public#{@conference.picture_url}", at: [@mid_horizontal + 30, cursor], width: 120
|
||||||
|
else
|
||||||
|
image "#{Rails.root}/public#{@conference.picture_url}", at: [@mid_horizontal + 30, cursor], height: 70
|
||||||
|
end
|
||||||
|
else
|
||||||
|
image "#{Rails.root}/public/img/osem-logo.png", at: [@mid_horizontal + 30, cursor], height: 70
|
||||||
|
end
|
||||||
|
move_down 70
|
||||||
|
draw_text @conference.title.to_s, at: [@mid_horizontal + 30, cursor - 30], size: 12
|
||||||
|
draw_text @conference.organization.name.to_s, at: [@mid_horizontal + 30, cursor - 50], size: 12
|
||||||
|
draw_text @conference.venue.name.to_s, at: [@mid_horizontal + 30, cursor - 70]
|
||||||
|
move_up 130
|
||||||
|
move_down @mid_vertical
|
||||||
|
end
|
||||||
|
|
||||||
|
def draw_third_square
|
||||||
|
draw_text 'EVENT', at: [@x, cursor - 40], size: 15
|
||||||
|
fill_color '808080'
|
||||||
|
draw_text @conference.title.to_s, at: [@x, cursor - 60], size: 12
|
||||||
|
draw_text @conference.start_date.strftime('%B %d, %Y').to_s, at: [@x, cursor - 80], size: 12
|
||||||
|
move_down 80
|
||||||
|
fill_color '000000'
|
||||||
|
draw_text 'TICKET', at: [@x, cursor - 30], size: 15
|
||||||
|
fill_color '808080'
|
||||||
|
draw_text @physical_ticket.ticket.title.to_s, at: [@x, cursor - 50], size: 12
|
||||||
|
move_down 50
|
||||||
|
fill_color '000000'
|
||||||
|
draw_text 'TICKET REF.', at: [@x, cursor - 30], size: 15
|
||||||
|
fill_color '808080'
|
||||||
|
draw_text @physical_ticket.ticket_purchase.id.to_s, at: [@x, cursor - 50], size: 12
|
||||||
|
move_down 50
|
||||||
|
fill_color '000000'
|
||||||
|
draw_text 'Powered By OSEM', at: [(@mid_horizontal - @left - 100) / 2, cursor - 100], size: 11
|
||||||
|
move_up 180
|
||||||
|
end
|
||||||
|
|
||||||
|
def draw_fourth_square; end
|
||||||
|
end
|
||||||
12
app/views/admin/cfps/_booths_cfp.html.haml
Normal file
12
app/views/admin/cfps/_booths_cfp.html.haml
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
%dt
|
||||||
|
Start Date
|
||||||
|
%dd
|
||||||
|
= @cfp.start_date.strftime('%A, %B %e. %Y')
|
||||||
|
%dt
|
||||||
|
End Date
|
||||||
|
%dd
|
||||||
|
= @cfp.end_date.strftime('%A, %B %e. %Y')
|
||||||
|
%dt
|
||||||
|
Days Left
|
||||||
|
%dd
|
||||||
|
= pluralize(@cfp.remaining_days, 'day')
|
||||||
|
|
@ -1,6 +1,23 @@
|
||||||
.text-center
|
.text-center
|
||||||
%h4 #{title}
|
%h4 #{title}
|
||||||
%canvas.doughnut_chart{ 'data-chart' => data.to_json }
|
%canvas.doughnut_chart{ id: "dough_#{title}", 'data-chart' => data.to_json }
|
||||||
- if data
|
- if data
|
||||||
- data.each do |key, value|
|
- data.each do |key, value|
|
||||||
%span{ 'style' => "border-bottom: 3px solid #{value['color']}" } #{key}: #{value['value']}
|
%span{ 'style' => "border-bottom: 3px solid #{value['color']}" } #{key}: #{value['value']}
|
||||||
|
|
||||||
|
:javascript
|
||||||
|
$(document).ready( function(){
|
||||||
|
|
||||||
|
var d = $("#dough_#{title}");
|
||||||
|
var dt = d.get(0).getContext('2d');
|
||||||
|
|
||||||
|
$(window).resize( respondCanvas );
|
||||||
|
|
||||||
|
function respondCanvas(){
|
||||||
|
dt.canvas.width = 150;
|
||||||
|
dt.canvas.height = 150;
|
||||||
|
}
|
||||||
|
|
||||||
|
respondCanvas();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
|
||||||
|
|
@ -27,3 +27,21 @@
|
||||||
%span{ 'style' => "border-bottom: 3px solid #{conference[:color]};", 'data-chart' => "#{name}" }
|
%span{ 'style' => "border-bottom: 3px solid #{conference[:color]};", 'data-chart' => "#{name}" }
|
||||||
%input{ 'type' => 'checkbox', 'name' => "#{conference[:short_title]}" }
|
%input{ 'type' => 'checkbox', 'name' => "#{conference[:short_title]}" }
|
||||||
#{conference[:short_title]}
|
#{conference[:short_title]}
|
||||||
|
|
||||||
|
:javascript
|
||||||
|
$(document).ready( function(){
|
||||||
|
|
||||||
|
var c = $("#line_chart_#{name}");
|
||||||
|
var ct = c.get(0).getContext('2d');
|
||||||
|
var container = $(c).parent();
|
||||||
|
|
||||||
|
$(window).resize( respondCanvas );
|
||||||
|
|
||||||
|
function respondCanvas(){
|
||||||
|
c.attr('width', $(container).width() );
|
||||||
|
c.attr('height', $(container).height() );
|
||||||
|
}
|
||||||
|
|
||||||
|
respondCanvas();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
|
||||||
|
|
@ -20,9 +20,9 @@
|
||||||
%td
|
%td
|
||||||
= organization.name
|
= organization.name
|
||||||
%td
|
%td
|
||||||
= organization.conferences.count
|
= organization.conferences.upcoming.count
|
||||||
%td
|
%td
|
||||||
= organization.conferences.count
|
= organization.conferences.past.count
|
||||||
%td
|
%td
|
||||||
.btn-group
|
.btn-group
|
||||||
= link_to 'Edit', edit_admin_organization_path(organization),
|
= link_to 'Edit', edit_admin_organization_path(organization),
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
.text-muted
|
.text-muted
|
||||||
= @role.description
|
= @role.description
|
||||||
|
|
||||||
= semantic_form_for @role, url: admin_conference_role_path(@conference.short_title, @role.name) do |f|
|
= semantic_form_for @role, url: @url do |f|
|
||||||
.row
|
.row
|
||||||
.col-md-5
|
.col-md-5
|
||||||
= f.input :description
|
= f.input :description
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
- if ( can? :toggle_user, @role )
|
- if ( can? :toggle_user, @role )
|
||||||
%td.text-right
|
%td.text-right
|
||||||
= hidden_field_tag "role[user_ids][]", nil
|
= hidden_field_tag "role[user_ids][]", nil
|
||||||
= check_box_tag @conference.short_title, @role.id, (@role.user_ids.include? user.id), method: :post, url: "/admin/conferences/#{@conference.short_title}/roles/#{@role.name}/toggle_user?user[email]=#{user.email}&user[state]=", class: 'switch-checkbox', data: { size: 'small', off_color: 'warning', on_text: 'Yes', off_text: 'No' }
|
= check_box_tag @conference.short_title, @role.id, (@role.user_ids.include? user.id), method: :post, url: "#{@url}?user[email]=#{user.email}&user[state]=", class: 'switch-checkbox', data: { size: 'small', off_color: 'warning', on_text: 'Yes', off_text: 'No' }
|
||||||
%td= user.id
|
%td= user.id
|
||||||
%td= user.name
|
%td= user.name
|
||||||
%td= user.email
|
%td= user.email
|
||||||
|
|
|
||||||
|
|
@ -19,13 +19,24 @@
|
||||||
%tr
|
%tr
|
||||||
%td= role.id
|
%td= role.id
|
||||||
%td= role.name.titleize
|
%td= role.name.titleize
|
||||||
%td= role.description
|
%td
|
||||||
|
= role.description
|
||||||
|
- if role.resource_type == 'Track'
|
||||||
|
= link_to role.resource.name, admin_conference_program_track_path(@conference.short_title, role.resource)
|
||||||
%td
|
%td
|
||||||
= role.users.pluck(:name).first(5).join ', '
|
= role.users.pluck(:name).first(5).join ', '
|
||||||
- if role.users.count > 5
|
- if role.users.count > 5
|
||||||
|
- if role.resource_type == 'Track'
|
||||||
|
= link_to '...', track_admin_conference_role_path(@conference.short_title, role.name, role.resource)
|
||||||
|
- else
|
||||||
= link_to '...', admin_conference_role_path(@conference.short_title, role.name)
|
= link_to '...', admin_conference_role_path(@conference.short_title, role.name)
|
||||||
%td
|
%td
|
||||||
.btn-group
|
.btn-group
|
||||||
|
- if role.resource_type == 'Track'
|
||||||
|
= link_to 'Users', track_admin_conference_role_path(@conference.short_title, role.name, role.resource), class: 'btn btn-success'
|
||||||
|
- if can? :edit, role
|
||||||
|
= link_to 'Edit', track_edit_admin_conference_role_path(@conference.short_title, role.name, role.resource), class: 'btn btn-primary'
|
||||||
|
- else
|
||||||
= link_to 'Users', admin_conference_role_path(@conference.short_title, role.name), class: 'btn btn-success'
|
= link_to 'Users', admin_conference_role_path(@conference.short_title, role.name), class: 'btn btn-success'
|
||||||
- if can? :edit, role
|
- if can? :edit, role
|
||||||
= link_to 'Edit', edit_admin_conference_role_path(@conference.short_title, role.name), class: 'btn btn-primary'
|
= link_to 'Edit', edit_admin_conference_role_path(@conference.short_title, role.name), class: 'btn btn-primary'
|
||||||
|
|
|
||||||
|
|
@ -6,14 +6,20 @@
|
||||||
Role
|
Role
|
||||||
= @role.name.titleize
|
= @role.name.titleize
|
||||||
- if can? :edit, @role
|
- if can? :edit, @role
|
||||||
|
- if @track
|
||||||
|
= link_to 'Edit', track_edit_admin_conference_role_path(@conference.short_title, @role.name, @track), class: 'btn btn-primary pull-right'
|
||||||
|
- else
|
||||||
= link_to 'Edit', edit_admin_conference_role_path(@conference.short_title, @role.name), class: 'btn btn-primary pull-right'
|
= link_to 'Edit', edit_admin_conference_role_path(@conference.short_title, @role.name), class: 'btn btn-primary pull-right'
|
||||||
.text-muted
|
.text-muted
|
||||||
= @role.description
|
= @role.description
|
||||||
|
- if @track
|
||||||
|
= link_to @track.name, admin_conference_program_track_path(@conference.short_title, @track)
|
||||||
|
|
||||||
|
|
||||||
.row.col-md-3
|
.row.col-md-3
|
||||||
- if ( can? :toggle_user, @role ) && !@role.new_record?
|
- if ( can? :toggle_user, @role ) && !@role.new_record?
|
||||||
|
|
||||||
= semantic_form_for :user, url: toggle_user_admin_conference_role_path(@conference.short_title, @role.name), method: :post do |u|
|
= semantic_form_for :user, url: @url, method: :post do |u|
|
||||||
|
|
||||||
= u.label 'Add user by email: '
|
= u.label 'Add user by email: '
|
||||||
.input-group
|
.input-group
|
||||||
|
|
|
||||||
|
|
@ -8,9 +8,11 @@
|
||||||
Track
|
Track
|
||||||
.row
|
.row
|
||||||
.col-md-12
|
.col-md-12
|
||||||
= semantic_form_for(@track, url: (@track.new_record? ? admin_conference_program_tracks_path : admin_conference_program_track_path(@conference.short_title, @track.short_name))) do |f|
|
= semantic_form_for(@track, url: (@track.new_record? ? admin_conference_program_tracks_path : admin_conference_program_track_path(@conference.short_title, @track))) do |f|
|
||||||
= f.input :name
|
= f.input :name
|
||||||
= f.input :short_name, hint: "A short and unique handle for the track, using only letters, numbers, underscores, and dashes. This will be used to identify the track in URLs etc. Example: 'my_awesome_track'", input_html: { required: 'required', pattern: '[a-zA-Z0-9_-]+', title: 'Only letters, numbers, underscores, and dashes.' }
|
= f.input :short_name, hint: "A short and unique handle for the track, using only letters, numbers, underscores, and dashes. This will be used to identify the track in URLs etc. Example: 'my_awesome_track'", input_html: { required: 'required', pattern: '[a-zA-Z0-9_-]+', title: 'Only letters, numbers, underscores, and dashes.' }
|
||||||
= f.input :color, input_html: {size: 6, type: 'color'}, required: true
|
= f.input :color, input_html: {size: 6, type: 'color'}, required: true
|
||||||
= f.input :description, input_html: {rows: 2, data: { provide: 'markdown-editable' } }, hint: markdown_hint
|
= f.input :description, input_html: {rows: 2, data: { provide: 'markdown-editable' } }, hint: markdown_hint
|
||||||
|
- if @track.self_organized?
|
||||||
|
= f.input :cfp_active, label: 'Allow event submitters to select this track for their proposal'
|
||||||
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary' }
|
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary' }
|
||||||
|
|
|
||||||
|
|
@ -11,27 +11,53 @@
|
||||||
%th Name
|
%th Name
|
||||||
%th Short name
|
%th Short name
|
||||||
%th Description
|
%th Description
|
||||||
|
%th Submitter
|
||||||
%th Color
|
%th Color
|
||||||
|
%th State
|
||||||
|
%th Included in the Cfp
|
||||||
%th Actions
|
%th Actions
|
||||||
%tbody
|
%tbody
|
||||||
- @tracks.each do |track|
|
- @tracks.each do |track|
|
||||||
%tr
|
%tr
|
||||||
%td
|
%td
|
||||||
= link_to(admin_conference_program_track_path(@conference.short_title, track.short_name)) do
|
= link_to(admin_conference_program_track_path(@conference.short_title, track)) do
|
||||||
= track.name
|
= track.name
|
||||||
%td
|
%td
|
||||||
= track.short_name
|
= track.short_name
|
||||||
%td
|
%td
|
||||||
%p
|
%p
|
||||||
= truncate(track.description)
|
= truncate(track.description)
|
||||||
|
%td
|
||||||
|
- if track.self_organized?
|
||||||
|
= link_to track.submitter.name, admin_user_path(track.submitter)
|
||||||
|
- else
|
||||||
|
N/A
|
||||||
%td
|
%td
|
||||||
%span.label{style: "background-color: #{track.color}; color: #{ contrast_color(track.color) }"}
|
%span.label{style: "background-color: #{track.color}; color: #{ contrast_color(track.color) }"}
|
||||||
= track.color
|
= track.color
|
||||||
|
%td
|
||||||
|
- if track.self_organized?
|
||||||
|
= track.state
|
||||||
|
- else
|
||||||
|
N/A
|
||||||
|
%td
|
||||||
|
- if track.self_organized?
|
||||||
|
= check_box_tag "#{@conference.short_title}_#{track.short_name}", track.id, track.cfp_active,
|
||||||
|
class: 'switch-checkbox', method: :patch,
|
||||||
|
url: toggle_cfp_inclusion_admin_conference_program_track_path(@conference.short_title, id: track.short_name)+"?included=",
|
||||||
|
data: { size: 'small',
|
||||||
|
on_color: 'success',
|
||||||
|
off_color: 'warning',
|
||||||
|
on_text: 'Yes',
|
||||||
|
off_text: 'No' }
|
||||||
|
- else
|
||||||
|
%i.fa.fa-check
|
||||||
%td
|
%td
|
||||||
.btn-group{role: "group"}
|
.btn-group{role: "group"}
|
||||||
= link_to 'Edit', edit_admin_conference_program_track_path(@conference.short_title, track.short_name),
|
= link_to 'Edit', edit_admin_conference_program_track_path(@conference.short_title, track),
|
||||||
method: :get, class: 'btn btn-primary'
|
method: :get, class: 'btn btn-primary'
|
||||||
= link_to 'Delete', admin_conference_program_track_path(@conference.short_title, track.short_name),
|
- if can? :destroy, track
|
||||||
|
= link_to 'Delete', admin_conference_program_track_path(@conference.short_title, track),
|
||||||
method: :delete, class: 'btn btn-danger',
|
method: :delete, class: 'btn btn-danger',
|
||||||
data: { confirm: "Do you really want to delete #{track.name}? Attention: This track will be removed from all Events that have it set" }
|
data: { confirm: "Do you really want to delete #{track.name}? Attention: This track will be removed from all Events that have it set" }
|
||||||
.row
|
.row
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
%span.fa.fa-cog
|
%span.fa.fa-cog
|
||||||
Manage
|
Manage
|
||||||
= conference.short_title
|
= conference.short_title
|
||||||
- if (current_user.is_admin) || (current_user.has_role? :organizer, :any)
|
- if can? :new, Conference.new
|
||||||
%li
|
%li
|
||||||
= link_to(new_admin_conference_path) do
|
= link_to(new_admin_conference_path) do
|
||||||
%span.fa.fa-plus
|
%span.fa.fa-plus
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
%span.fa.fa-cog
|
%span.fa.fa-cog
|
||||||
Manage
|
Manage
|
||||||
= conference.short_title
|
= conference.short_title
|
||||||
- if can? :create, Conference
|
- if can? :new, Conference.new
|
||||||
%li
|
%li
|
||||||
= link_to(new_admin_conference_path) do
|
= link_to(new_admin_conference_path) do
|
||||||
%span.fa.fa-plus
|
%span.fa.fa-plus
|
||||||
|
|
|
||||||
|
|
@ -60,13 +60,13 @@
|
||||||
.dropdown-menu
|
.dropdown-menu
|
||||||
- if ENV['OSEM_ICHAIN_ENABLED'] == 'true'
|
- if ENV['OSEM_ICHAIN_ENABLED'] == 'true'
|
||||||
= form_tag User.ichain_login_url do
|
= form_tag User.ichain_login_url do
|
||||||
= text_field_tag 'username', nil, id: 'user_ichain_email_dd', placeholder: 'Username'
|
= text_field_tag 'username', nil, id: 'user_ichain_email_dd', class: 'form-control', placeholder: 'Username'
|
||||||
= password_field_tag 'password', nil, id: 'user_ichain_password_dd', placeholder: 'Password'
|
= password_field_tag 'password', nil, id: 'user_ichain_password_dd', class: 'form-control', placeholder: 'Password'
|
||||||
%button.btn.btn-success.btn-block Sign in
|
%button.btn.btn-success.btn-block Sign in
|
||||||
- else
|
- else
|
||||||
= form_tag new_user_session_path do
|
= form_tag new_user_session_path do
|
||||||
= text_field_tag 'user[login]', nil, id: 'user_login_dd', placeholder: 'Username / E-Mail'
|
= text_field_tag 'user[login]', nil, id: 'user_login_dd', class: 'form-control', placeholder: 'Username / E-Mail'
|
||||||
= password_field_tag 'user[password]', nil, id: 'user_password_dd', placeholder: 'Password'
|
= password_field_tag 'user[password]', nil, id: 'user_password_dd', class: 'form-control', placeholder: 'Password'
|
||||||
%p.text-right
|
%p.text-right
|
||||||
%small
|
%small
|
||||||
%label{for: 'user_remember_me'} Remember me
|
%label{for: 'user_remember_me'} Remember me
|
||||||
|
|
|
||||||
|
|
@ -28,10 +28,10 @@
|
||||||
= link_to(admin_conferences_path()) do
|
= link_to(admin_conferences_path()) do
|
||||||
%span.fa.fa-home
|
%span.fa.fa-home
|
||||||
Administration
|
Administration
|
||||||
- if can? :create, Conference
|
- if can? :new, Conference.new
|
||||||
=link_to(new_admin_conference_path) do
|
=link_to(new_admin_conference_path) do
|
||||||
%span.fa.fa-plus
|
%span.fa.fa-plus
|
||||||
Create Conference
|
New Conference
|
||||||
-if @conference and @conference.id and can? :show, @conference
|
-if @conference and @conference.id and can? :show, @conference
|
||||||
%li
|
%li
|
||||||
= link_to(admin_conference_path(@conference.short_title)) do
|
= link_to(admin_conference_path(@conference.short_title)) do
|
||||||
|
|
|
||||||
|
|
@ -1,62 +0,0 @@
|
||||||
prawn_document(filename: @file_name, page_layout: @ticket_layout, :page_size =>'A4' ) do |pdf|
|
|
||||||
# Vertical Layout
|
|
||||||
top = pdf.bounds.top
|
|
||||||
bottom = pdf.bounds.bottom
|
|
||||||
left = pdf.bounds.left
|
|
||||||
right = pdf.bounds.right
|
|
||||||
mid_vertical = (pdf.bounds.top-pdf.bounds.bottom)/2
|
|
||||||
mid_horizontal = (pdf.bounds.right-pdf.bounds.left)/2
|
|
||||||
x = 0
|
|
||||||
|
|
||||||
pdf.move_down mid_vertical
|
|
||||||
pdf.dash(2, :space => 1)
|
|
||||||
pdf.stroke_horizontal_rule
|
|
||||||
pdf.stroke_vertical_line pdf.bounds.top, pdf.bounds.bottom, :at => mid_horizontal
|
|
||||||
pdf.move_up mid_vertical
|
|
||||||
pdf.draw_text "TICKET HOLDER", :at => [x,pdf.cursor-30], :size => 17
|
|
||||||
pdf.dash(2, :space => 0)
|
|
||||||
pdf.stroke_rectangle [x, pdf.cursor-50], 230, 150
|
|
||||||
pdf.move_down 80
|
|
||||||
pdf.draw_text "NAME", :at => [x+10,pdf.cursor], :size => 13
|
|
||||||
pdf.fill_color "808080"
|
|
||||||
pdf.draw_text "#{@user.name}", :at => [x+10,pdf.cursor-25], size: 20
|
|
||||||
pdf.fill_color "000000"
|
|
||||||
pdf.draw_text "EMAIL", :at => [x+10,pdf.cursor-50], :size => 13
|
|
||||||
pdf.fill_color "808080"
|
|
||||||
pdf.draw_text "#{@user.email}", :at => [x+10,pdf.cursor-75], size: 20
|
|
||||||
pdf.fill_color "000000"
|
|
||||||
pdf.move_up 20
|
|
||||||
if @conference.picture?
|
|
||||||
if 7 * @conference.picture.image[:width] > 12 * @conference.picture.image[:height]
|
|
||||||
pdf.image "#{Rails.root}/public#{@conference.picture_url}", :at => [mid_horizontal+30, pdf.cursor], :width => 120
|
|
||||||
else
|
|
||||||
pdf.image "#{Rails.root}/public#{@conference.picture_url}", :at => [mid_horizontal+30, pdf.cursor], :height => 70
|
|
||||||
end
|
|
||||||
else
|
|
||||||
pdf.image "#{Rails.root}/public/img/osem-logo.png", :at => [mid_horizontal+30, pdf.cursor], :height => 70
|
|
||||||
end
|
|
||||||
pdf.move_down 70
|
|
||||||
pdf.draw_text "#{@conference.title}", :at => [mid_horizontal+30,pdf.cursor-30], :size => 12
|
|
||||||
pdf.draw_text "#{@conference.organization.name}", :at => [mid_horizontal+30,pdf.cursor-50], :size => 12
|
|
||||||
pdf.draw_text "#{@conference.venue.name}", :at => [mid_horizontal+30,pdf.cursor-70]
|
|
||||||
pdf.move_up 130
|
|
||||||
pdf.move_down mid_vertical
|
|
||||||
pdf.draw_text "EVENT", :at => [x,pdf.cursor-40], :size => 15
|
|
||||||
pdf.fill_color "808080"
|
|
||||||
pdf.draw_text "#{@conference.title}", :at => [x,pdf.cursor-60], size: 12
|
|
||||||
pdf.draw_text "#{@conference.start_date.strftime('%B %d, %Y')}", :at => [x,pdf.cursor-80], size: 12
|
|
||||||
pdf.move_down 80
|
|
||||||
pdf.fill_color "000000"
|
|
||||||
pdf.draw_text "TICKET", :at => [x,pdf.cursor-30], :size => 15
|
|
||||||
pdf.fill_color "808080"
|
|
||||||
pdf.draw_text "#{@physical_ticket.ticket.title}", :at => [x,pdf.cursor-50], size: 12
|
|
||||||
pdf.move_down 50
|
|
||||||
pdf.fill_color "000000"
|
|
||||||
pdf.draw_text "TICKET REF.", :at => [x,pdf.cursor-30], :size => 15
|
|
||||||
pdf.fill_color "808080"
|
|
||||||
pdf.draw_text "#{@physical_ticket.ticket_purchase.id}", :at => [x,pdf.cursor-50], size: 12
|
|
||||||
pdf.move_down 50
|
|
||||||
pdf.fill_color "000000"
|
|
||||||
pdf.draw_text "Powered By OSEM", :at => [(mid_horizontal-left-100)/2,pdf.cursor-100], :size => 11
|
|
||||||
pdf.move_up 180
|
|
||||||
end
|
|
||||||
17
app/views/tracks/_form.html.haml
Normal file
17
app/views/tracks/_form.html.haml
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
.container
|
||||||
|
.row
|
||||||
|
.col-md-12
|
||||||
|
.page-header
|
||||||
|
%h1
|
||||||
|
- if @track.new_record?
|
||||||
|
New
|
||||||
|
= @track.name
|
||||||
|
Track
|
||||||
|
.row
|
||||||
|
.col-md-12
|
||||||
|
= semantic_form_for(@track, url: (@track.new_record? ? conference_program_tracks_path : conference_program_track_path(@conference.short_title, @track))) do |f|
|
||||||
|
= f.input :name
|
||||||
|
= f.input :short_name, hint: "A short and unique handle for the track, using only letters, numbers, underscores, and dashes. This will be used to identify the track in URLs etc. Example: 'my_awesome_track'", input_html: { required: 'required', pattern: '[a-zA-Z0-9_-]+', title: 'Only letters, numbers, underscores, and dashes.' }
|
||||||
|
= f.input :color, input_html: {size: 6, type: 'color'}, required: true
|
||||||
|
= f.input :description, input_html: {rows: 2, data: { provide: 'markdown-editable' } }, required: true, hint: markdown_hint
|
||||||
|
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary' }
|
||||||
43
app/views/tracks/index.html.haml
Normal file
43
app/views/tracks/index.html.haml
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
.container
|
||||||
|
.row
|
||||||
|
.col-md-12.page-header
|
||||||
|
%h1
|
||||||
|
Track requests for
|
||||||
|
%span.notranslate
|
||||||
|
= @conference.title
|
||||||
|
|
||||||
|
- if @tracks.any?
|
||||||
|
.row
|
||||||
|
.col-md-12
|
||||||
|
%table.table.table-hover#tracks
|
||||||
|
%thead
|
||||||
|
%th Name
|
||||||
|
%th Short name
|
||||||
|
%th Description
|
||||||
|
%th Color
|
||||||
|
%th State
|
||||||
|
%th Actions
|
||||||
|
%tbody
|
||||||
|
- @tracks.each do |track|
|
||||||
|
%tr
|
||||||
|
%td
|
||||||
|
= link_to(conference_program_track_path(@conference.short_title, track)) do
|
||||||
|
= track.name
|
||||||
|
%td
|
||||||
|
= track.short_name
|
||||||
|
%td
|
||||||
|
%p
|
||||||
|
= truncate(track.description)
|
||||||
|
%td
|
||||||
|
%span.label{style: "background-color: #{track.color}; color: #{ contrast_color(track.color) }"}
|
||||||
|
= track.color
|
||||||
|
%td
|
||||||
|
= track.state
|
||||||
|
%td
|
||||||
|
= link_to 'Edit', edit_conference_program_track_path(@conference.short_title, track),
|
||||||
|
method: :get, class: 'btn btn-primary'
|
||||||
|
|
||||||
|
.row
|
||||||
|
.col-md-12
|
||||||
|
- if can? :create, @track
|
||||||
|
= link_to "New Track request", new_conference_program_track_path(@conference.short_title), class: 'btn btn-success pull-right'
|
||||||
26
app/views/tracks/show.html.haml
Normal file
26
app/views/tracks/show.html.haml
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
.container
|
||||||
|
.row
|
||||||
|
.col-md-12
|
||||||
|
.page-header
|
||||||
|
%h1
|
||||||
|
= @track.name
|
||||||
|
Track
|
||||||
|
.row
|
||||||
|
.col-md-8
|
||||||
|
%dl.dl-horizontal
|
||||||
|
%dt
|
||||||
|
Color:
|
||||||
|
%dd
|
||||||
|
%span.label{style: "background-color: #{@track.color}; color: #{ contrast_color(@track.color) }"}
|
||||||
|
= @track.color
|
||||||
|
%dt
|
||||||
|
State:
|
||||||
|
%dd
|
||||||
|
= @track.state
|
||||||
|
%dt
|
||||||
|
Description
|
||||||
|
%dd
|
||||||
|
= @track.description
|
||||||
|
.row
|
||||||
|
.col-md-12.text-right
|
||||||
|
= link_to 'Edit Track request', edit_conference_program_track_path(@conference.short_title, @track), class: 'btn btn-primary'
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
pushd /vagrant
|
pushd /vagrant
|
||||||
|
|
||||||
echo -e "\ninstalling required software packages...\n"
|
echo -e "\ninstalling required software packages...\n"
|
||||||
zypper -q -n install update-alternatives ruby2.2-devel make gcc gcc-c++ \
|
zypper -q -n install update-alternatives ruby2.4-devel make gcc gcc-c++ \
|
||||||
libxml2-devel libxslt-devel nodejs screen mariadb \
|
libxml2-devel libxslt-devel nodejs screen mariadb \
|
||||||
libmysqld-devel sqlite3-devel ImageMagick
|
libmysqld-devel sqlite3-devel ImageMagick
|
||||||
|
|
||||||
|
|
@ -10,7 +10,7 @@ echo -e "\ndisabling versioned gem binary names...\n"
|
||||||
echo 'install: --no-format-executable' >> /etc/gemrc
|
echo 'install: --no-format-executable' >> /etc/gemrc
|
||||||
|
|
||||||
echo -e "\ninstalling bundler...\n"
|
echo -e "\ninstalling bundler...\n"
|
||||||
gem.ruby2.2 install bundler
|
gem.ruby2.4 install bundler
|
||||||
|
|
||||||
echo -e "\ninstalling your bundle...\n"
|
echo -e "\ninstalling your bundle...\n"
|
||||||
su - vagrant -c "cd /vagrant/; bundle install --quiet"
|
su - vagrant -c "cd /vagrant/; bundle install --quiet"
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,11 @@ Osem::Application.routes.draw do
|
||||||
resource :registration_period
|
resource :registration_period
|
||||||
resource :program do
|
resource :program do
|
||||||
resources :cfps
|
resources :cfps
|
||||||
resources :tracks
|
resources :tracks do
|
||||||
|
member do
|
||||||
|
patch :toggle_cfp_inclusion
|
||||||
|
end
|
||||||
|
end
|
||||||
resources :event_types
|
resources :event_types
|
||||||
resources :difficulty_levels
|
resources :difficulty_levels
|
||||||
resources :events do
|
resources :events do
|
||||||
|
|
@ -82,9 +86,15 @@ Osem::Application.routes.draw do
|
||||||
resources :campaigns, except: [:show]
|
resources :campaigns, except: [:show]
|
||||||
resources :emails, only: [:show, :update, :index]
|
resources :emails, only: [:show, :update, :index]
|
||||||
resources :physical_ticket, only: [:index]
|
resources :physical_ticket, only: [:index]
|
||||||
resources :roles, except: [ :new, :create ] do
|
resources :roles, only: [:edit]
|
||||||
|
resources :roles, except: [ :new, :create, :edit ] do
|
||||||
member do
|
member do
|
||||||
post :toggle_user
|
post :toggle_user
|
||||||
|
get ':track_name' => 'roles#show', as: 'track'
|
||||||
|
get ':track_name/edit' => 'roles#edit', as: 'track_edit'
|
||||||
|
patch ':track_name' => 'roles#update'
|
||||||
|
put ':track_name' => 'roles#update'
|
||||||
|
post ':track_name/toggle_user' => 'roles#toggle_user', as: 'toggle_user_track'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -120,6 +130,7 @@ Osem::Application.routes.draw do
|
||||||
patch '/restart' => 'proposals#restart'
|
patch '/restart' => 'proposals#restart'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
resources :tracks, except: :destroy
|
||||||
end
|
end
|
||||||
|
|
||||||
# TODO: change conference_registrations to singular resource
|
# TODO: change conference_registrations to singular resource
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
class AddStateCfpActiveAndSubmitterReferenceToTracks < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
add_column :tracks, :state, :string
|
||||||
|
add_column :tracks, :cfp_active, :boolean
|
||||||
|
add_column :tracks, :submitter_id, :integer
|
||||||
|
add_index :tracks, :submitter_id
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -491,8 +491,13 @@ ActiveRecord::Schema.define(version: 20170711102511) do
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at"
|
||||||
t.integer "program_id"
|
t.integer "program_id"
|
||||||
t.string "short_name", null: false
|
t.string "short_name", null: false
|
||||||
|
t.string "state"
|
||||||
|
t.boolean "cfp_active"
|
||||||
|
t.integer "submitter_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
add_index "tracks", ["submitter_id"], name: "index_tracks_on_submitter_id"
|
||||||
|
|
||||||
create_table "users", force: :cascade do |t|
|
create_table "users", force: :cascade do |t|
|
||||||
t.string "email", default: "", null: false
|
t.string "email", default: "", null: false
|
||||||
t.string "encrypted_password", default: "", null: false
|
t.string "encrypted_password", default: "", null: false
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ describe Admin::RolesController do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'POST #toggle' do
|
describe 'POST #toggle' do
|
||||||
before:each do
|
before :each do
|
||||||
sign_in admin
|
sign_in admin
|
||||||
post :toggle_user, conference_id: conference.short_title,
|
post :toggle_user, conference_id: conference.short_title,
|
||||||
user: { email: 'user1@osem.io' },
|
user: { email: 'user1@osem.io' },
|
||||||
|
|
|
||||||
256
spec/controllers/admin/tracks_controller_spec.rb
Normal file
256
spec/controllers/admin/tracks_controller_spec.rb
Normal file
|
|
@ -0,0 +1,256 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe Admin::TracksController do
|
||||||
|
let(:admin) { create(:admin) }
|
||||||
|
|
||||||
|
let(:conference) { create(:conference) }
|
||||||
|
let!(:track) { create(:track, program: conference.program, color: '#800080') }
|
||||||
|
let!(:self_organized_track) { create(:track, :self_organized, program: conference.program) }
|
||||||
|
|
||||||
|
before :each do
|
||||||
|
sign_in(admin)
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'GET #index' do
|
||||||
|
before :each do
|
||||||
|
get :index, conference_id: conference.short_title
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'assigns @tracks with the correct values' do
|
||||||
|
expect(assigns(:tracks).length).to eq 2
|
||||||
|
expect(assigns(:tracks).include?(track)).to eq true
|
||||||
|
expect(assigns(:tracks).include?(self_organized_track)).to eq true
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'renders the index template' do
|
||||||
|
expect(response).to render_template :index
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'GET #show' do
|
||||||
|
before :each do
|
||||||
|
get :show, conference_id: conference.short_title, id: track.short_name
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'assigns the correct track' do
|
||||||
|
expect(assigns(:track)).to eq track
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'renders the show template' do
|
||||||
|
expect(response).to render_template :show
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'GET #new' do
|
||||||
|
before :each do
|
||||||
|
get :new, conference_id: conference.short_title
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'assigns a new track with the correct conference' do
|
||||||
|
expect(assigns(:track)).to be_a Track
|
||||||
|
expect(assigns(:track).new_record?).to eq true
|
||||||
|
expect(assigns(:track).program_id).to eq conference.program.id
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'renders the new template' do
|
||||||
|
expect(response).to render_template :new
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'POST #create' do
|
||||||
|
context 'saves successfuly' do
|
||||||
|
before :each do
|
||||||
|
post :create, track: attributes_for(:track), conference_id: conference.short_title
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'assigns a new track with the correct conference' do
|
||||||
|
expect(assigns(:track)).to be_a Track
|
||||||
|
expect(assigns(:track).new_record?).to eq false
|
||||||
|
expect(assigns(:track).program_id).to eq conference.program.id
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'redirects to admin tracks index path' do
|
||||||
|
expect(response).to redirect_to admin_conference_program_tracks_path(conference_id: conference.short_title)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'shows success message in flash notice' do
|
||||||
|
expect(flash[:notice]).to match('Track successfully created.')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'creates new track' do
|
||||||
|
expect(Track.find(assigns(:track).id)).to be_a Track
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'save fails' do
|
||||||
|
before :each do
|
||||||
|
allow_any_instance_of(Track).to receive(:save).and_return(false)
|
||||||
|
post :create, track: attributes_for(:track, short_name: 'my_track'), conference_id: conference.short_title
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'assigns a new track with the correct conference' do
|
||||||
|
expect(assigns(:track)).to be_a Track
|
||||||
|
expect(assigns(:track).new_record?).to eq true
|
||||||
|
expect(assigns(:track).program_id).to eq conference.program.id
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'renders the new template' do
|
||||||
|
expect(response).to render_template :new
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'shows error in flash message' do
|
||||||
|
expect(flash[:error]).to match("Creating Track failed: #{assigns(:track).errors.full_messages.join('. ')}.")
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not create a new track' do
|
||||||
|
expect(conference.program.tracks.find_by(short_name: 'my_track')).to eq nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'GET #edit' do
|
||||||
|
before :each do
|
||||||
|
get :edit, conference_id: conference.short_title, id: track.short_name
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'assigns the correct track' do
|
||||||
|
expect(assigns(:track)).to eq track
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'renders the show template' do
|
||||||
|
expect(response).to render_template :edit
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'PATCH #update' do
|
||||||
|
context 'updates successfully' do
|
||||||
|
before :each do
|
||||||
|
patch :update, track: attributes_for(:track, color: '#FF0000'),
|
||||||
|
conference_id: conference.short_title,
|
||||||
|
id: track.short_name
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'assigns the correct track' do
|
||||||
|
expect(assigns(:track)).to eq track
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'redirects to admin tracks index path' do
|
||||||
|
expect(response).to redirect_to admin_conference_program_tracks_path(conference_id: conference.short_title)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'shows success message in flash notice' do
|
||||||
|
expect(flash[:notice]).to match('Track successfully updated.')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'updates the track' do
|
||||||
|
track.reload
|
||||||
|
expect(track.color).to eq '#FF0000'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'update fails' do
|
||||||
|
before :each do
|
||||||
|
allow_any_instance_of(Track).to receive(:save).and_return(false)
|
||||||
|
patch :update, track: attributes_for(:track, color: '#FF0000'),
|
||||||
|
conference_id: conference.short_title,
|
||||||
|
id: track.short_name
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'assigns the correct track' do
|
||||||
|
expect(assigns(:track)).to eq track
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'renders edit template' do
|
||||||
|
expect(response).to render_template :edit
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'shows error in flash message' do
|
||||||
|
expect(flash[:error]).to match("Track update failed: #{assigns(:track).errors.full_messages.join('. ')}.")
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not update the track' do
|
||||||
|
track.reload
|
||||||
|
expect(track.color).to eq '#800080'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'DELETE #destroy' do
|
||||||
|
context 'deletes successfully' do
|
||||||
|
before :each do
|
||||||
|
delete :destroy, conference_id: conference.short_title, id: track.short_name
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'redirects to admin tracks index path' do
|
||||||
|
expect(response).to redirect_to admin_conference_program_tracks_path(conference_id: conference.short_title)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'shows success message in flash notice' do
|
||||||
|
expect(flash[:notice]).to match('Track successfully deleted.')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'deletes the track' do
|
||||||
|
expect(Track.find_by(id: track)).to eq nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'delete fails' do
|
||||||
|
before :each do
|
||||||
|
allow_any_instance_of(Track).to receive(:destroy).and_return(false)
|
||||||
|
delete :destroy, conference_id: conference.short_title, id: track.short_name
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'assigns the correct track' do
|
||||||
|
expect(assigns(:track)).to eq track
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'redirects to admin tracks index path' do
|
||||||
|
expect(response).to redirect_to admin_conference_program_tracks_path(conference_id: conference.short_title)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'shows error in flash message' do
|
||||||
|
expect(flash[:error]).to match("Track couldn't be deleted. #{track.errors.full_messages.join('. ')}.")
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not delete the track' do
|
||||||
|
expect(Track.find(track.id)).to eq track
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'PATCH #toggle_cfp_inclusion' do
|
||||||
|
context 'cfp_active is false' do
|
||||||
|
before :each do
|
||||||
|
self_organized_track.cfp_active = false
|
||||||
|
self_organized_track.save!
|
||||||
|
patch :toggle_cfp_inclusion, conference_id: conference.short_title, id: self_organized_track.short_name
|
||||||
|
self_organized_track.reload
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'assigns the correct track' do
|
||||||
|
expect(assigns(:track)).to eq self_organized_track
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'becomes true' do
|
||||||
|
expect(self_organized_track.cfp_active).to eq true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'cfp_active is true' do
|
||||||
|
before :each do
|
||||||
|
self_organized_track.cfp_active = true
|
||||||
|
self_organized_track.save!
|
||||||
|
patch :toggle_cfp_inclusion, conference_id: conference.short_title, id: self_organized_track.short_name
|
||||||
|
self_organized_track.reload
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'assigns the correct track' do
|
||||||
|
expect(assigns(:track)).to eq self_organized_track
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'becomes false' do
|
||||||
|
expect(self_organized_track.cfp_active).to eq false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
179
spec/controllers/tracks_controller_spec.rb
Normal file
179
spec/controllers/tracks_controller_spec.rb
Normal file
|
|
@ -0,0 +1,179 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe TracksController do
|
||||||
|
# A regular user should be used when the track requests have been enabled
|
||||||
|
let(:user) { create(:admin) }
|
||||||
|
|
||||||
|
let(:conference) { create(:conference) }
|
||||||
|
let!(:regular_track) { create(:track, program: conference.program) }
|
||||||
|
let!(:self_organized_track) { create(:track, :self_organized, program: conference.program, submitter: user, color: '#800080') }
|
||||||
|
|
||||||
|
before :each do
|
||||||
|
sign_in(user)
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'GET #index' do
|
||||||
|
before :each do
|
||||||
|
get :index, conference_id: conference.short_title
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'assigns @tracks with the correct values' do
|
||||||
|
expect(assigns(:tracks).length).to eq 1
|
||||||
|
expect(assigns(:tracks).include?(regular_track)).to eq false
|
||||||
|
expect(assigns(:tracks).include?(self_organized_track)).to eq true
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'renders the index template' do
|
||||||
|
expect(response).to render_template :index
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'GET #show' do
|
||||||
|
before :each do
|
||||||
|
get :show, conference_id: conference.short_title, id: self_organized_track.short_name
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'assigns the correct track' do
|
||||||
|
expect(assigns(:track)).to eq self_organized_track
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'renders the show template' do
|
||||||
|
expect(response).to render_template :show
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'GET #new' do
|
||||||
|
before :each do
|
||||||
|
get :new, conference_id: conference.short_title
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'assigns a new track with the correct conference' do
|
||||||
|
expect(assigns(:track)).to be_a Track
|
||||||
|
expect(assigns(:track).new_record?).to eq true
|
||||||
|
expect(assigns(:track).program_id).to eq conference.program.id
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'renders the new template' do
|
||||||
|
expect(response).to render_template :new
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'POST #create' do
|
||||||
|
context 'saves successfuly' do
|
||||||
|
before :each do
|
||||||
|
post :create, track: attributes_for(:track, short_name: 'my_track'), conference_id: conference.short_title
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'redirects to tracks index path' do
|
||||||
|
expect(response).to redirect_to conference_program_tracks_path(conference_id: conference.short_title)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'shows success message in flash notice' do
|
||||||
|
expect(flash[:notice]).to match('Track request successfully created.')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'creates new track' do
|
||||||
|
expect(assigns(:track).new_record?).to eq false
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'the new tracks has the correct attributes' do
|
||||||
|
expect(assigns(:track).program_id).to eq conference.program.id
|
||||||
|
expect(assigns(:track).submitter).to eq user
|
||||||
|
expect(assigns(:track).state).to eq 'new'
|
||||||
|
expect(assigns(:track).cfp_active).to eq false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'save fails' do
|
||||||
|
before :each do
|
||||||
|
allow_any_instance_of(Track).to receive(:save).and_return(false)
|
||||||
|
post :create, track: attributes_for(:track, short_name: 'my_track'), conference_id: conference.short_title
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'assigns a new track with the correct conference' do
|
||||||
|
expect(assigns(:track)).to be_a Track
|
||||||
|
expect(assigns(:track).new_record?).to eq true
|
||||||
|
expect(assigns(:track).program_id).to eq conference.program.id
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'renders the new template' do
|
||||||
|
expect(response).to render_template :new
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'shows error in flash message' do
|
||||||
|
expect(flash[:error]).to match("Creating Track request failed: #{assigns(:track).errors.full_messages.join('. ')}.")
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not create a new track' do
|
||||||
|
expect(conference.program.tracks.find_by(short_name: 'my_track')).to eq nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'GET #edit' do
|
||||||
|
before :each do
|
||||||
|
get :edit, conference_id: conference.short_title, id: self_organized_track.short_name
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'assigns the correct track' do
|
||||||
|
expect(assigns(:track)).to eq self_organized_track
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'renders the show template' do
|
||||||
|
expect(response).to render_template :edit
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'PATCH #update' do
|
||||||
|
context 'updates successfully' do
|
||||||
|
before :each do
|
||||||
|
patch :update, track: attributes_for(:track, color: '#FF0000'),
|
||||||
|
conference_id: conference.short_title,
|
||||||
|
id: self_organized_track.short_name
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'assigns the correct track' do
|
||||||
|
expect(assigns(:track)).to eq self_organized_track
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'redirects to tracks index path' do
|
||||||
|
expect(response).to redirect_to conference_program_tracks_path(conference_id: conference.short_title)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'shows success message in flash notice' do
|
||||||
|
expect(flash[:notice]).to match('Track request successfully updated.')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'updates the track' do
|
||||||
|
self_organized_track.reload
|
||||||
|
expect(self_organized_track.color).to eq '#FF0000'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'update fails' do
|
||||||
|
before :each do
|
||||||
|
allow_any_instance_of(Track).to receive(:save).and_return(false)
|
||||||
|
patch :update, track: attributes_for(:track, color: '#FF0000'),
|
||||||
|
conference_id: conference.short_title,
|
||||||
|
id: self_organized_track.short_name
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'assigns the correct track' do
|
||||||
|
expect(assigns(:track)).to eq self_organized_track
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'renders edit template' do
|
||||||
|
expect(response).to render_template :edit
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'shows error in flash message' do
|
||||||
|
expect(flash[:error]).to match("Track request update failed: #{assigns(:track).errors.full_messages.join('. ')}.")
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not update the track' do
|
||||||
|
self_organized_track.reload
|
||||||
|
expect(self_organized_track.color).to eq '#800080'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
FactoryGirl.define do
|
FactoryGirl.define do
|
||||||
factory :cfp do
|
factory :cfp do
|
||||||
start_date { 1.day.ago }
|
start_date { 1.day.ago }
|
||||||
end_date { 6.days.from_now }
|
end_date { 2.days.from_now }
|
||||||
cfp_type 'events'
|
cfp_type 'events'
|
||||||
|
|
||||||
program
|
program
|
||||||
|
|
|
||||||
|
|
@ -5,5 +5,11 @@ FactoryGirl.define do
|
||||||
color { Faker::Color.hex_color }
|
color { Faker::Color.hex_color }
|
||||||
short_name { SecureRandom.urlsafe_base64(5) }
|
short_name { SecureRandom.urlsafe_base64(5) }
|
||||||
program
|
program
|
||||||
|
|
||||||
|
trait :self_organized do
|
||||||
|
association :submitter, factory: :user
|
||||||
|
state 'new'
|
||||||
|
cfp_active false
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,7 @@ feature 'Has correct abilities' do
|
||||||
expect(page).to_not have_link('Goals', href: "/admin/conferences/#{conference.short_title}/targets")
|
expect(page).to_not have_link('Goals', href: "/admin/conferences/#{conference.short_title}/targets")
|
||||||
expect(page).to have_link('Roles', href: "/admin/conferences/#{conference.short_title}/roles")
|
expect(page).to have_link('Roles', href: "/admin/conferences/#{conference.short_title}/roles")
|
||||||
expect(page).to have_link('Resources', href: "/admin/conferences/#{conference.short_title}/resources")
|
expect(page).to have_link('Resources', href: "/admin/conferences/#{conference.short_title}/resources")
|
||||||
|
expect(page).to_not have_link('New Conference', href: '/admin/conferences/new')
|
||||||
|
|
||||||
visit admin_conference_venue_rooms_path(conference.short_title)
|
visit admin_conference_venue_rooms_path(conference.short_title)
|
||||||
expect(current_path).to eq(admin_conference_venue_rooms_path(conference.short_title))
|
expect(current_path).to eq(admin_conference_venue_rooms_path(conference.short_title))
|
||||||
|
|
@ -59,16 +60,32 @@ feature 'Has correct abilities' do
|
||||||
visit edit_admin_conference_program_path(conference.short_title)
|
visit edit_admin_conference_program_path(conference.short_title)
|
||||||
expect(current_path).to eq(edit_admin_conference_program_path(conference.short_title))
|
expect(current_path).to eq(edit_admin_conference_program_path(conference.short_title))
|
||||||
|
|
||||||
|
# Only event type exists
|
||||||
|
visit new_admin_conference_program_cfp_path(conference.short_title)
|
||||||
|
expect(current_path).to eq(new_admin_conference_program_cfp_path(conference.short_title))
|
||||||
|
|
||||||
|
# Both event and booth exists
|
||||||
|
cfb = create(:cfp, cfp_type: 'booths', program: conference.program)
|
||||||
visit new_admin_conference_program_cfp_path(conference.short_title)
|
visit new_admin_conference_program_cfp_path(conference.short_title)
|
||||||
expect(current_path).to eq root_path
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit edit_admin_conference_program_cfp_path(conference.short_title, conference.program.cfp)
|
||||||
|
expect(current_path).to eq(edit_admin_conference_program_cfp_path(conference.short_title, conference.program.cfp))
|
||||||
|
|
||||||
conference.program.cfp.destroy!
|
conference.program.cfp.destroy!
|
||||||
visit new_admin_conference_program_cfp_path(conference.short_title)
|
visit new_admin_conference_program_cfp_path(conference.short_title)
|
||||||
expect(current_path).to eq new_admin_conference_program_cfp_path(conference.short_title)
|
expect(current_path).to eq new_admin_conference_program_cfp_path(conference.short_title)
|
||||||
create(:cfp, program: conference.program)
|
|
||||||
|
|
||||||
visit edit_admin_conference_program_cfp_path(conference.short_title, conference.program.cfp)
|
# Only booth exists
|
||||||
expect(current_path).to eq(edit_admin_conference_program_cfp_path(conference.short_title, conference.program.cfp))
|
visit new_admin_conference_program_cfp_path(conference.short_title)
|
||||||
|
expect(current_path).to eq(new_admin_conference_program_cfp_path(conference.short_title))
|
||||||
|
|
||||||
|
visit edit_admin_conference_program_cfp_path(conference.short_title, cfb)
|
||||||
|
expect(current_path). to eq(edit_admin_conference_program_cfp_path(conference.short_title, cfb))
|
||||||
|
|
||||||
|
cfb.destroy
|
||||||
|
visit new_admin_conference_program_cfp_path(conference.short_title)
|
||||||
|
expect(current_path).to eq(new_admin_conference_program_cfp_path(conference.short_title))
|
||||||
|
|
||||||
create(:event, program: conference.program)
|
create(:event, program: conference.program)
|
||||||
visit edit_admin_conference_program_event_path(conference.short_title, conference.program.events.first)
|
visit edit_admin_conference_program_event_path(conference.short_title, conference.program.events.first)
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,7 @@ feature 'Has correct abilities' do
|
||||||
expect(page).to have_link('Registrations', href: "/admin/conferences/#{conference.short_title}/registrations")
|
expect(page).to have_link('Registrations', href: "/admin/conferences/#{conference.short_title}/registrations")
|
||||||
expect(page).to have_link('Questions', href: "/admin/conferences/#{conference.short_title}/questions")
|
expect(page).to have_link('Questions', href: "/admin/conferences/#{conference.short_title}/questions")
|
||||||
expect(page).to_not have_link('E-Mails', href: "/admin/conferences/#{conference.short_title}/emails")
|
expect(page).to_not have_link('E-Mails', href: "/admin/conferences/#{conference.short_title}/emails")
|
||||||
|
expect(page).to_not have_link('New Conference', href: '/admin/conferences/new')
|
||||||
|
|
||||||
visit admin_organizations_path
|
visit admin_organizations_path
|
||||||
expect(current_path).to eq(admin_organizations_path)
|
expect(current_path).to eq(admin_organizations_path)
|
||||||
|
|
|
||||||
|
|
@ -55,6 +55,7 @@ feature 'Has correct abilities' do
|
||||||
expect(page).to have_link('E-Mails', href: "/admin/conferences/#{conference.short_title}/emails")
|
expect(page).to have_link('E-Mails', href: "/admin/conferences/#{conference.short_title}/emails")
|
||||||
expect(page).to have_link('Roles', href: "/admin/conferences/#{conference.short_title}/roles")
|
expect(page).to have_link('Roles', href: "/admin/conferences/#{conference.short_title}/roles")
|
||||||
expect(page).to have_link('Resources', href: "/admin/conferences/#{conference.short_title}/resources")
|
expect(page).to have_link('Resources', href: "/admin/conferences/#{conference.short_title}/resources")
|
||||||
|
expect(page).to have_link('New Conference', href: '/admin/conferences/new')
|
||||||
|
|
||||||
visit edit_admin_conference_path(conference.short_title)
|
visit edit_admin_conference_path(conference.short_title)
|
||||||
expect(current_path).to eq(edit_admin_conference_path(conference.short_title))
|
expect(current_path).to eq(edit_admin_conference_path(conference.short_title))
|
||||||
|
|
@ -101,16 +102,32 @@ feature 'Has correct abilities' do
|
||||||
visit edit_admin_conference_program_path(conference.short_title)
|
visit edit_admin_conference_program_path(conference.short_title)
|
||||||
expect(current_path).to eq(edit_admin_conference_program_path(conference.short_title))
|
expect(current_path).to eq(edit_admin_conference_program_path(conference.short_title))
|
||||||
|
|
||||||
|
# Only event exists
|
||||||
|
visit new_admin_conference_program_cfp_path(conference.short_title)
|
||||||
|
expect(current_path).to eq(new_admin_conference_program_cfp_path(conference.short_title))
|
||||||
|
|
||||||
|
# Both event and booth exists
|
||||||
|
cfb = create(:cfp, cfp_type: 'booths', program: conference.program)
|
||||||
visit new_admin_conference_program_cfp_path(conference.short_title)
|
visit new_admin_conference_program_cfp_path(conference.short_title)
|
||||||
expect(current_path).to eq root_path
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit edit_admin_conference_program_cfp_path(conference.short_title, conference.program.cfp)
|
||||||
|
expect(current_path).to eq(edit_admin_conference_program_cfp_path(conference.short_title, conference.program.cfp))
|
||||||
|
|
||||||
conference.program.cfp.destroy!
|
conference.program.cfp.destroy!
|
||||||
visit new_admin_conference_program_cfp_path(conference.short_title)
|
visit new_admin_conference_program_cfp_path(conference.short_title)
|
||||||
expect(current_path).to eq new_admin_conference_program_cfp_path(conference.short_title)
|
expect(current_path).to eq new_admin_conference_program_cfp_path(conference.short_title)
|
||||||
create(:cfp, program: conference.program)
|
|
||||||
|
|
||||||
visit edit_admin_conference_program_cfp_path(conference.short_title, conference.program.cfp)
|
# Only booth exists
|
||||||
expect(current_path).to eq(edit_admin_conference_program_cfp_path(conference.short_title, conference.program.cfp))
|
visit new_admin_conference_program_cfp_path(conference.short_title)
|
||||||
|
expect(current_path).to eq(new_admin_conference_program_cfp_path(conference.short_title))
|
||||||
|
|
||||||
|
visit edit_admin_conference_program_cfp_path(conference.short_title, cfb)
|
||||||
|
expect(current_path). to eq(edit_admin_conference_program_cfp_path(conference.short_title, cfb))
|
||||||
|
|
||||||
|
cfb.destroy
|
||||||
|
visit new_admin_conference_program_cfp_path(conference.short_title)
|
||||||
|
expect(current_path).to eq(new_admin_conference_program_cfp_path(conference.short_title))
|
||||||
|
|
||||||
visit admin_conference_program_events_path(conference.short_title)
|
visit admin_conference_program_events_path(conference.short_title)
|
||||||
expect(current_path).to eq(admin_conference_program_events_path(conference.short_title))
|
expect(current_path).to eq(admin_conference_program_events_path(conference.short_title))
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,7 @@ feature 'Has correct abilities' do
|
||||||
expect(page).to have_link('E-Mails', href: "/admin/conferences/#{conference.short_title}/emails")
|
expect(page).to have_link('E-Mails', href: "/admin/conferences/#{conference.short_title}/emails")
|
||||||
expect(page).to have_link('Roles', href: "/admin/conferences/#{conference.short_title}/roles")
|
expect(page).to have_link('Roles', href: "/admin/conferences/#{conference.short_title}/roles")
|
||||||
expect(page).to have_link('Resources', href: "/admin/conferences/#{conference.short_title}/resources")
|
expect(page).to have_link('Resources', href: "/admin/conferences/#{conference.short_title}/resources")
|
||||||
|
expect(page).to_not have_link('New Conference', href: '/admin/conferences/new')
|
||||||
|
|
||||||
visit admin_conference_path(other_conference.short_title)
|
visit admin_conference_path(other_conference.short_title)
|
||||||
expect(page).to have_link('Add venue', href: "/admin/conferences/#{other_conference.short_title}/venue/new")
|
expect(page).to have_link('Add venue', href: "/admin/conferences/#{other_conference.short_title}/venue/new")
|
||||||
|
|
@ -107,16 +108,32 @@ feature 'Has correct abilities' do
|
||||||
visit edit_admin_conference_program_path(conference.short_title)
|
visit edit_admin_conference_program_path(conference.short_title)
|
||||||
expect(current_path).to eq(edit_admin_conference_program_path(conference.short_title))
|
expect(current_path).to eq(edit_admin_conference_program_path(conference.short_title))
|
||||||
|
|
||||||
|
# Only event type exists
|
||||||
|
visit new_admin_conference_program_cfp_path(conference.short_title)
|
||||||
|
expect(current_path).to eq(new_admin_conference_program_cfp_path(conference.short_title))
|
||||||
|
|
||||||
|
# Both event and booth exists
|
||||||
|
cfb = create(:cfp, cfp_type: 'booths', program: conference.program)
|
||||||
visit new_admin_conference_program_cfp_path(conference.short_title)
|
visit new_admin_conference_program_cfp_path(conference.short_title)
|
||||||
expect(current_path).to eq root_path
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit edit_admin_conference_program_cfp_path(conference.short_title, conference.program.cfp)
|
||||||
|
expect(current_path).to eq(edit_admin_conference_program_cfp_path(conference.short_title, conference.program.cfp))
|
||||||
|
|
||||||
conference.program.cfp.destroy!
|
conference.program.cfp.destroy!
|
||||||
visit new_admin_conference_program_cfp_path(conference.short_title)
|
visit new_admin_conference_program_cfp_path(conference.short_title)
|
||||||
expect(current_path).to eq new_admin_conference_program_cfp_path(conference.short_title)
|
expect(current_path).to eq new_admin_conference_program_cfp_path(conference.short_title)
|
||||||
create(:cfp, program: conference.program)
|
|
||||||
|
|
||||||
visit edit_admin_conference_program_cfp_path(conference.short_title, conference.program.cfp)
|
# Only booth exists
|
||||||
expect(current_path).to eq(edit_admin_conference_program_cfp_path(conference.short_title, conference.program.cfp))
|
visit new_admin_conference_program_cfp_path(conference.short_title)
|
||||||
|
expect(current_path).to eq(new_admin_conference_program_cfp_path(conference.short_title))
|
||||||
|
|
||||||
|
visit edit_admin_conference_program_cfp_path(conference.short_title, cfb)
|
||||||
|
expect(current_path). to eq(edit_admin_conference_program_cfp_path(conference.short_title, cfb))
|
||||||
|
|
||||||
|
cfb.destroy
|
||||||
|
visit new_admin_conference_program_cfp_path(conference.short_title)
|
||||||
|
expect(current_path).to eq(new_admin_conference_program_cfp_path(conference.short_title))
|
||||||
|
|
||||||
visit admin_conference_program_events_path(conference.short_title)
|
visit admin_conference_program_events_path(conference.short_title)
|
||||||
expect(current_path).to eq(admin_conference_program_events_path(conference.short_title))
|
expect(current_path).to eq(admin_conference_program_events_path(conference.short_title))
|
||||||
|
|
|
||||||
244
spec/features/track_organizer_ability_spec.rb
Normal file
244
spec/features/track_organizer_ability_spec.rb
Normal file
|
|
@ -0,0 +1,244 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
feature 'Has correct abilities' do
|
||||||
|
|
||||||
|
let(:organization) { create(:organization) }
|
||||||
|
let(:conference) { create(:full_conference, organization: organization) }
|
||||||
|
let(:self_organized_track) { create(:track, :self_organized, program: conference.program) }
|
||||||
|
let(:role_track_organizer) { Role.find_by(name: 'track_organizer', resource: self_organized_track) }
|
||||||
|
let(:user_track_organizer) { create(:user, role_ids: [role_track_organizer.id]) }
|
||||||
|
|
||||||
|
context 'when user is info desk' do
|
||||||
|
before do
|
||||||
|
sign_in user_track_organizer
|
||||||
|
end
|
||||||
|
|
||||||
|
scenario 'for organization and conference attributes' do
|
||||||
|
visit admin_conference_path(conference.short_title)
|
||||||
|
expect(current_path).to eq(admin_conference_path(conference.short_title))
|
||||||
|
|
||||||
|
expect(page).to have_selector('li.nav-header.nav-header-bigger a', text: 'Dashboard')
|
||||||
|
expect(page).to_not have_link('Basics', href: "/admin/conferences/#{conference.short_title}/edit")
|
||||||
|
expect(page).to have_text('Basics')
|
||||||
|
expect(page).to_not have_link('Contact', href: "/admin/conferences/#{conference.short_title}/contact/edit")
|
||||||
|
expect(page).to have_link('Commercials', href: "/admin/conferences/#{conference.short_title}/commercials")
|
||||||
|
expect(page).to_not have_link('Splashpage', href: "/admin/conferences/#{conference.short_title}/splashpage")
|
||||||
|
expect(page).to_not have_link('Venue', href: "/admin/conferences/#{conference.short_title}/venue")
|
||||||
|
expect(page).to_not have_link('Rooms', href: "/admin/conferences/#{conference.short_title}/venue/rooms")
|
||||||
|
expect(page).to_not have_link('Lodgings', href: "/admin/conferences/#{conference.short_title}/lodgings")
|
||||||
|
expect(page).to have_link('Program', href: "/admin/conferences/#{conference.short_title}/program")
|
||||||
|
expect(page).to_not have_link('Call for Papers', href: "/admin/conferences/#{conference.short_title}/program/cfps")
|
||||||
|
expect(page).to_not have_link('Events', href: "/admin/conferences/#{conference.short_title}/program/events")
|
||||||
|
expect(page).to have_link('Tracks', href: "/admin/conferences/#{conference.short_title}/program/tracks")
|
||||||
|
expect(page).to_not have_link('Event Types', href: "/admin/conferences/#{conference.short_title}/program/event_types")
|
||||||
|
expect(page).to_not have_link('Difficulty Levels', href: "/admin/conferences/#{conference.short_title}/program/difficulty_levels")
|
||||||
|
expect(page).to_not have_link('Schedules', href: "/admin/conferences/#{conference.short_title}/schedules")
|
||||||
|
expect(page).to_not have_link('Reports', href: "/admin/conferences/#{conference.short_title}/program/reports")
|
||||||
|
expect(page).to_not have_link('Registrations', href: "/admin/conferences/#{conference.short_title}/registrations")
|
||||||
|
expect(page).to_not have_link('Registration Period', href: "/admin/conferences/#{conference.short_title}/registration_period")
|
||||||
|
expect(page).to_not have_link('Questions', href: "/admin/conferences/#{conference.short_title}/questions")
|
||||||
|
expect(page).to_not have_text('Donations')
|
||||||
|
expect(page).to_not have_link('Sponsorship Levels', href: "/admin/conferences/#{conference.short_title}/sponsorship_levels")
|
||||||
|
expect(page).to_not have_link('Sponsors', href: "/admin/conferences/#{conference.short_title}/sponsors")
|
||||||
|
expect(page).to_not have_link('Tickets', href: "/admin/conferences/#{conference.short_title}/tickets")
|
||||||
|
expect(page).to_not have_text('Objectives')
|
||||||
|
expect(page).to_not have_link('Campaigns', href: "/admin/conferences/#{conference.short_title}/campaigns")
|
||||||
|
expect(page).to_not have_link('Goals', href: "/admin/conferences/#{conference.short_title}/targets")
|
||||||
|
expect(page).to_not have_link('E-Mails', href: "/admin/conferences/#{conference.short_title}/emails")
|
||||||
|
expect(page).to have_link('Roles', href: "/admin/conferences/#{conference.short_title}/roles")
|
||||||
|
expect(page).to_not have_link('Resources', href: "/admin/conferences/#{conference.short_title}/resources")
|
||||||
|
expect(page).to_not have_link('New Conference', href: '/admin/conferences/new')
|
||||||
|
|
||||||
|
visit edit_admin_conference_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit edit_admin_conference_contact_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit admin_conference_commercials_path(conference.short_title)
|
||||||
|
expect(current_path).to eq admin_conference_commercials_path(conference.short_title)
|
||||||
|
|
||||||
|
visit new_admin_conference_splashpage_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit edit_admin_conference_splashpage_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit new_admin_conference_venue_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
conference.venue = create(:venue)
|
||||||
|
visit edit_admin_conference_venue_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit admin_conference_venue_rooms_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
create(:room, venue: conference.venue)
|
||||||
|
visit edit_admin_conference_venue_room_path(conference.short_title, conference.venue.rooms.first)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit admin_conference_lodgings_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit new_admin_conference_lodging_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
create(:lodging, conference: conference)
|
||||||
|
visit edit_admin_conference_lodging_path(conference.short_title, conference.lodgings.first)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit new_admin_conference_program_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit edit_admin_conference_program_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit new_admin_conference_program_cfp_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit edit_admin_conference_program_cfp_path(conference.short_title, conference.program.cfp)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit admin_conference_program_events_path(conference.short_title)
|
||||||
|
expect(current_path).to eq admin_conference_program_events_path(conference.short_title)
|
||||||
|
|
||||||
|
create(:event, program: conference.program)
|
||||||
|
visit edit_admin_conference_program_event_path(conference.short_title, conference.program.events.first)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit admin_conference_program_event_types_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit new_admin_conference_program_event_type_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit edit_admin_conference_program_event_type_path(conference.short_title, conference.program.event_types.first)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit admin_conference_program_difficulty_levels_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit new_admin_conference_program_difficulty_level_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit edit_admin_conference_program_difficulty_level_path(conference.short_title, conference.program.difficulty_levels.first)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit admin_conference_schedules_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
create(:schedule, program: conference.program)
|
||||||
|
visit admin_conference_schedule_path(conference.short_title, conference.program.schedules.first)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit admin_conference_program_reports_path(conference.short_title)
|
||||||
|
expect(current_path).to eq admin_conference_program_reports_path(conference.short_title)
|
||||||
|
|
||||||
|
visit admin_conference_registrations_path(conference.short_title)
|
||||||
|
expect(current_path).to eq admin_conference_registrations_path(conference.short_title)
|
||||||
|
|
||||||
|
create(:registration, user: create(:user), conference: conference)
|
||||||
|
visit edit_admin_conference_registration_path(conference.short_title, conference.registrations.first)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit new_admin_conference_registration_period_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
create(:registration_period, conference: conference)
|
||||||
|
visit edit_admin_conference_registration_period_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit admin_conference_questions_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit admin_conference_sponsorship_levels_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit new_admin_conference_sponsorship_level_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
create(:sponsorship_level, conference: conference)
|
||||||
|
visit edit_admin_conference_sponsorship_level_path(conference.short_title, conference.sponsorship_levels.first)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit admin_conference_sponsors_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit new_admin_conference_sponsor_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
create(:sponsor, conference: conference, sponsorship_level: conference.sponsorship_levels.first)
|
||||||
|
visit edit_admin_conference_sponsor_path(conference.short_title, conference.sponsors.first)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit admin_conference_tickets_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit new_admin_conference_ticket_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
create(:ticket, conference: conference)
|
||||||
|
visit edit_admin_conference_ticket_path(conference.short_title, conference.tickets.first)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit admin_conference_campaigns_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit new_admin_conference_campaign_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
create(:campaign, conference: conference)
|
||||||
|
visit edit_admin_conference_campaign_path(conference.short_title, conference.campaigns.first)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit admin_conference_targets_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit new_admin_conference_target_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
create(:target, conference: conference)
|
||||||
|
visit edit_admin_conference_target_path(conference.short_title, conference.targets.first)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit admin_conference_program_tracks_path(conference.short_title)
|
||||||
|
expect(current_path).to eq admin_conference_program_tracks_path(conference.short_title)
|
||||||
|
|
||||||
|
visit new_admin_conference_program_track_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
other_track = create(:track, program: conference.program)
|
||||||
|
visit admin_conference_program_track_path(conference.short_title, other_track)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit edit_admin_conference_program_track_path(conference.short_title, other_track)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit admin_conference_program_track_path(conference.short_title, self_organized_track)
|
||||||
|
expect(current_path).to eq admin_conference_program_track_path(conference.short_title, self_organized_track)
|
||||||
|
|
||||||
|
visit edit_admin_conference_program_track_path(conference.short_title, self_organized_track)
|
||||||
|
expect(current_path).to eq edit_admin_conference_program_track_path(conference.short_title, self_organized_track)
|
||||||
|
|
||||||
|
visit admin_conference_roles_path(conference.short_title)
|
||||||
|
expect(current_path).to eq admin_conference_roles_path(conference.short_title)
|
||||||
|
|
||||||
|
visit admin_conference_emails_path(conference.short_title)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit admin_conference_resources_path(conference.short_title)
|
||||||
|
expect(current_path).to eq admin_conference_resources_path(conference.short_title)
|
||||||
|
|
||||||
|
visit new_admin_conference_resource_path(conference.short_title)
|
||||||
|
expect(current_path).to eq new_admin_conference_resource_path(conference.short_title)
|
||||||
|
|
||||||
|
create(:resource, conference: conference)
|
||||||
|
visit edit_admin_conference_resource_path(conference.short_title, conference.resources.first)
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
|
||||||
|
visit admin_revision_history_path
|
||||||
|
expect(current_path).to eq root_path
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -11,14 +11,8 @@ describe 'User' do
|
||||||
|
|
||||||
let!(:organization) { create(:organization) }
|
let!(:organization) { create(:organization) }
|
||||||
let!(:my_conference) { create(:full_conference, organization: organization) }
|
let!(:my_conference) { create(:full_conference, organization: organization) }
|
||||||
let(:my_venue) { my_conference.venue || create(:venue, conference: my_conference) }
|
|
||||||
let(:my_registration) { create(:registration, conference: my_conference, user: admin) }
|
|
||||||
|
|
||||||
let(:other_registration) { create(:registration, conference: conference_public) }
|
|
||||||
let(:my_event) { create(:event_full, program: my_conference.program) }
|
|
||||||
let(:my_room) { create(:room, venue: my_conference.venue) }
|
let(:my_room) { create(:room, venue: my_conference.venue) }
|
||||||
let!(:my_event_scheduled) { create(:event_full, program: my_conference.program, room_id: my_room.id) }
|
|
||||||
let(:other_event) { create(:event_full, program: conference_public.program) }
|
|
||||||
|
|
||||||
let(:conference_not_public) { create(:conference, splashpage: create(:splashpage, public: false)) }
|
let(:conference_not_public) { create(:conference, splashpage: create(:splashpage, public: false)) }
|
||||||
let(:conference_public) { create(:full_conference, splashpage: create(:splashpage, public: true)) }
|
let(:conference_public) { create(:full_conference, splashpage: create(:splashpage, public: true)) }
|
||||||
|
|
@ -28,7 +22,6 @@ describe 'User' do
|
||||||
|
|
||||||
let(:commercial_event_confirmed) { create(:commercial, commercialable: event_confirmed) }
|
let(:commercial_event_confirmed) { create(:commercial, commercialable: event_confirmed) }
|
||||||
let(:commercial_event_unconfirmed) { create(:commercial, commercialable: event_unconfirmed) }
|
let(:commercial_event_unconfirmed) { create(:commercial, commercialable: event_unconfirmed) }
|
||||||
let(:resource) { create(:resource, conference: my_conference)}
|
|
||||||
let(:registration) { create(:registration) }
|
let(:registration) { create(:registration) }
|
||||||
|
|
||||||
let(:program_with_cfp) { create(:program, :with_cfp) }
|
let(:program_with_cfp) { create(:program, :with_cfp) }
|
||||||
|
|
@ -38,11 +31,6 @@ describe 'User' do
|
||||||
let(:conference_with_closed_registration) { create(:conference) }
|
let(:conference_with_closed_registration) { create(:conference) }
|
||||||
let!(:closed_registration_period) { create(:registration_period, conference: conference_with_closed_registration, start_date: Date.current - 6.days, end_date: Date.current - 6.days) }
|
let!(:closed_registration_period) { create(:registration_period, conference: conference_with_closed_registration, start_date: Date.current - 6.days, end_date: Date.current - 6.days) }
|
||||||
|
|
||||||
let!(:my_schedule) { create(:schedule, program: my_conference.program) }
|
|
||||||
let!(:other_schedule) { create(:schedule, program: conference_public.program) }
|
|
||||||
|
|
||||||
let!(:my_event_schedule) { create(:event_schedule, schedule: my_schedule) }
|
|
||||||
let!(:other_event_schedule) { create(:event_schedule, schedule: other_schedule) }
|
|
||||||
# Test abilities for not signed in users
|
# Test abilities for not signed in users
|
||||||
context 'when user is not signed in' do
|
context 'when user is not signed in' do
|
||||||
it{ should be_able_to(:index, Organization)}
|
it{ should be_able_to(:index, Organization)}
|
||||||
|
|
@ -127,354 +115,5 @@ describe 'User' do
|
||||||
it{ should be_able_to(:manage, user_commercial) }
|
it{ should be_able_to(:manage, user_commercial) }
|
||||||
it{ should_not be_able_to(:manage, commercial_event_unconfirmed) }
|
it{ should_not be_able_to(:manage, commercial_event_unconfirmed) }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'user #is_admin?' do
|
|
||||||
let(:venue) { my_conference.venue }
|
|
||||||
let(:room) { create(:room, venue: venue) }
|
|
||||||
let!(:event) { create(:event_full, program: my_conference.program, room_id: room.id) }
|
|
||||||
let(:user) { create(:admin) }
|
|
||||||
it{ should be_able_to(:manage, :all) }
|
|
||||||
it{ should_not be_able_to(:destroy, my_conference.program) }
|
|
||||||
it{ should_not be_able_to(:destroy, my_venue) }
|
|
||||||
end
|
|
||||||
|
|
||||||
shared_examples 'user with any role' do
|
|
||||||
let!(:other_organization) { create(:organization) }
|
|
||||||
let!(:other_conference) { create(:conference, organization: other_organization) }
|
|
||||||
|
|
||||||
it{ should_not be_able_to(:update, Role.find_by(name: 'organization_admin', resource: other_organization)) }
|
|
||||||
it{ should_not be_able_to(:edit, Role.find_by(name: 'organization_admin', resource: other_organization)) }
|
|
||||||
it{ should_not be_able_to(:show, Role.find_by(name: 'organization_admin', resource: other_organization)) }
|
|
||||||
|
|
||||||
%w(organizer cfp info_desk volunteers_coordinator).each do |role|
|
|
||||||
it{ should_not be_able_to(:toggle_user, Role.find_by(name: role, resource: other_conference)) }
|
|
||||||
it{ should_not be_able_to(:update, Role.find_by(name: role, resource: other_conference)) }
|
|
||||||
it{ should_not be_able_to(:edit, Role.find_by(name: role, resource: other_conference)) }
|
|
||||||
it{ should be_able_to(:show, Role.find_by(name: role, resource: other_conference)) }
|
|
||||||
it{ should be_able_to(:index, Role.find_by(name: role, resource: other_conference)) }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
shared_examples 'user with non-organizer role' do |role_name|
|
|
||||||
%w(organizer cfp info_desk volunteers_coordinator).each do |role|
|
|
||||||
if role == role_name
|
|
||||||
it{ should be_able_to(:toggle_user, Role.find_by(name: role, resource: my_conference)) }
|
|
||||||
else
|
|
||||||
it{ should_not be_able_to(:toggle_user, Role.find_by(name: role, resource: my_conference)) }
|
|
||||||
end
|
|
||||||
it{ should_not be_able_to(:update, Role.find_by(name: role, resource: my_conference)) }
|
|
||||||
it{ should_not be_able_to(:edit, Role.find_by(name: role, resource: my_conference)) }
|
|
||||||
it{ should be_able_to(:show, Role.find_by(name: role, resource: my_conference)) }
|
|
||||||
it{ should be_able_to(:index, Role.find_by(name: role, resource: my_conference)) }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when user has the role organization_admin' do
|
|
||||||
let(:role) { Role.find_by(name: 'organization_admin', resource: organization) }
|
|
||||||
let(:user) { create(:user, role_ids: [role.id]) }
|
|
||||||
let(:other_organization) { create(:organization) }
|
|
||||||
let(:other_conference) { create(:conference, organization: other_organization) }
|
|
||||||
|
|
||||||
it{ should be_able_to(:manage, my_conference) }
|
|
||||||
it{ should be_able_to(:read, organization) }
|
|
||||||
it{ should be_able_to(:update, organization) }
|
|
||||||
it{ should be_able_to(:destroy, organization) }
|
|
||||||
it{ should be_able_to(:new, Conference.new) }
|
|
||||||
it{ should be_able_to(:create, Conference.new(organization_id: organization.id)) }
|
|
||||||
it{ should_not be_able_to(:manage, other_conference) }
|
|
||||||
it{ should_not be_able_to(:create, Conference.new(organization_id: other_organization.id)) }
|
|
||||||
it{ should_not be_able_to(:new, Organization.new) }
|
|
||||||
it{ should_not be_able_to(:create, Organization.new) }
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when user has the role organizer' do
|
|
||||||
let(:role) { Role.find_by(name: 'organizer', resource: my_conference) }
|
|
||||||
let(:user) { create(:user, role_ids: [role.id]) }
|
|
||||||
|
|
||||||
it{ should_not be_able_to(:destroy, my_conference.program) }
|
|
||||||
it 'when there is a room assigned to an event' do
|
|
||||||
should_not be_able_to(:destroy, my_venue)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'when there are no rooms used' do
|
|
||||||
my_event_scheduled.room_id = nil
|
|
||||||
my_event_scheduled.save!
|
|
||||||
my_event_scheduled.reload
|
|
||||||
should be_able_to(:destroy, my_venue)
|
|
||||||
end
|
|
||||||
|
|
||||||
it{ should_not be_able_to(:new, Organization.new)}
|
|
||||||
it{ should_not be_able_to(:create, Organization.new)}
|
|
||||||
it{ should_not be_able_to(:new, Conference.new)}
|
|
||||||
it{ should_not be_able_to(:create, Conference.new) }
|
|
||||||
it{ should be_able_to(:read, my_conference) }
|
|
||||||
it{ should be_able_to(:update, my_conference) }
|
|
||||||
it{ should be_able_to(:destroy, my_conference) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public) }
|
|
||||||
it{ should be_able_to(:manage, my_conference.splashpage) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.splashpage) }
|
|
||||||
it{ should be_able_to(:manage, my_conference.contact) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.contact) }
|
|
||||||
it{ should be_able_to(:manage, my_conference.email_settings) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.email_settings) }
|
|
||||||
it{ should be_able_to(:manage, my_conference.campaigns.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.campaigns.first) }
|
|
||||||
it{ should be_able_to(:manage, my_conference.targets.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.targets.first) }
|
|
||||||
it{ should be_able_to(:manage, my_conference.commercials.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.commercials.first) }
|
|
||||||
it{ should be_able_to(:manage, my_conference.registration_period) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.registration_period) }
|
|
||||||
it{ should be_able_to(:manage, my_conference.questions.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.questions.first) }
|
|
||||||
it{ should be_able_to(:manage, my_conference.program.cfp) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.program.cfp) }
|
|
||||||
it{ should be_able_to(:manage, my_schedule) }
|
|
||||||
it{ should_not be_able_to(:manage, other_schedule) }
|
|
||||||
it{ should be_able_to(:manage, my_event_schedule) }
|
|
||||||
it{ should_not be_able_to(:manage, other_event_schedule) }
|
|
||||||
it{ should be_able_to(:manage, my_conference.venue) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.venue) }
|
|
||||||
it{ should be_able_to(:manage, my_conference.lodgings.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.lodgings.first) }
|
|
||||||
it{ should be_able_to(:manage, my_conference.sponsors.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.sponsors.first) }
|
|
||||||
it{ should be_able_to(:manage, my_conference.sponsorship_levels.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.sponsorship_levels.first) }
|
|
||||||
it{ should be_able_to(:manage, my_conference.tickets.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.tickets.first) }
|
|
||||||
|
|
||||||
it{ should be_able_to(:manage, my_registration) }
|
|
||||||
it{ should_not be_able_to(:manage, other_registration) }
|
|
||||||
|
|
||||||
it{ should be_able_to(:manage, my_event) }
|
|
||||||
it{ should_not be_able_to(:manage, other_event) }
|
|
||||||
it{ should be_able_to(:manage, my_event.event_type) }
|
|
||||||
it{ should_not be_able_to(:manage, other_event.event_type) }
|
|
||||||
it{ should be_able_to(:manage, my_event.track) }
|
|
||||||
it{ should_not be_able_to(:manage, other_event.track) }
|
|
||||||
it{ should be_able_to(:manage, my_event.difficulty_level) }
|
|
||||||
it{ should_not be_able_to(:manage, other_event.difficulty_level) }
|
|
||||||
it{ should be_able_to(:manage, my_event.commercials.first) }
|
|
||||||
it{ should_not be_able_to(:manage, other_event.commercials.first) }
|
|
||||||
it{ should be_able_to(:index, my_event.comment_threads.first) }
|
|
||||||
it{ should_not be_able_to(:index, other_event.comment_threads.first) }
|
|
||||||
|
|
||||||
it{ should be_able_to(:manage, resource)}
|
|
||||||
|
|
||||||
%w(organizer cfp info_desk volunteers_coordinator).each do |role|
|
|
||||||
it{ should be_able_to(:toggle_user, Role.find_by(name: role, resource: my_conference)) }
|
|
||||||
it{ should be_able_to(:edit, Role.find_by(name: role, resource: my_conference)) }
|
|
||||||
it{ should be_able_to(:update, Role.find_by(name: role, resource: my_conference)) }
|
|
||||||
it{ should be_able_to(:show, Role.find_by(name: role, resource: my_conference)) }
|
|
||||||
it{ should be_able_to(:index, Role.find_by(name: role, resource: my_conference)) }
|
|
||||||
end
|
|
||||||
|
|
||||||
it_behaves_like 'user with any role'
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when user has the role cfp' do
|
|
||||||
let(:role) { Role.find_by(name: 'cfp', resource: my_conference) }
|
|
||||||
let(:user) { create(:user, role_ids: [role.id]) }
|
|
||||||
|
|
||||||
it{ should_not be_able_to(:new, Conference.new) }
|
|
||||||
it{ should_not be_able_to(:create, Conference.new) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.splashpage) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.splashpage) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.contact) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.contact) }
|
|
||||||
it{ should be_able_to(:manage, my_conference.email_settings) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.email_settings) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.campaigns.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.campaigns.first) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.targets.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.targets.first) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.commercials.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.commercials.first) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.registration_period) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.registration_period) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.questions.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.questions.first) }
|
|
||||||
it{ should be_able_to(:manage, my_conference.program.cfp) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.program.cfp) }
|
|
||||||
it{ should be_able_to(:manage, my_schedule) }
|
|
||||||
it{ should_not be_able_to(:manage, other_schedule) }
|
|
||||||
it{ should_not be_able_to(:manage, my_event_schedule) }
|
|
||||||
it{ should_not be_able_to(:manage, other_event_schedule) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.venue) }
|
|
||||||
it{ should be_able_to(:show, my_conference.venue) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.venue) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.lodgings.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.lodgings.first) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.sponsors.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.sponsors.first) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.sponsorship_levels.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.sponsorship_levels.first) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.tickets.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.tickets.first) }
|
|
||||||
|
|
||||||
it{ should_not be_able_to(:manage, my_registration) }
|
|
||||||
it{ should_not be_able_to(:manage, other_registration) }
|
|
||||||
|
|
||||||
it{ should be_able_to(:manage, my_event) }
|
|
||||||
it{ should_not be_able_to(:manage, other_event) }
|
|
||||||
it{ should be_able_to(:manage, my_event.event_type) }
|
|
||||||
it{ should_not be_able_to(:manage, other_event.event_type) }
|
|
||||||
it{ should be_able_to(:manage, my_event.track) }
|
|
||||||
it{ should_not be_able_to(:manage, other_event.track) }
|
|
||||||
it{ should be_able_to(:manage, my_event.difficulty_level) }
|
|
||||||
it{ should_not be_able_to(:manage, other_event.difficulty_level) }
|
|
||||||
it{ should be_able_to(:manage, my_event.commercials.first) }
|
|
||||||
it{ should_not be_able_to(:manage, other_event.commercials.first) }
|
|
||||||
it{ should be_able_to(:index, my_event.comment_threads.first) }
|
|
||||||
it{ should_not be_able_to(:index, other_event.comment_threads.first) }
|
|
||||||
|
|
||||||
it{ should_not be_able_to(:manage, resource)}
|
|
||||||
it{ should be_able_to(:index, resource)}
|
|
||||||
it{ should be_able_to(:show, resource)}
|
|
||||||
it{ should be_able_to(:update, resource)}
|
|
||||||
|
|
||||||
it_behaves_like 'user with any role'
|
|
||||||
it_behaves_like 'user with non-organizer role', 'cfp'
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when user has the role info_desk' do
|
|
||||||
let(:role) { Role.find_by(name: 'info_desk', resource: my_conference) }
|
|
||||||
let(:user) { create(:user, role_ids: [role.id]) }
|
|
||||||
|
|
||||||
it{ should_not be_able_to(:new, Conference.new) }
|
|
||||||
it{ should_not be_able_to(:create, Conference.new) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.splashpage) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.splashpage) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.contact) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.contact) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.email_settings) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.email_settings) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.campaigns.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.campaigns.first) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.targets.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.targets.first) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.commercials.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.commercials.first) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.registration_period) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.registration_period) }
|
|
||||||
it{ should be_able_to(:manage, my_conference.questions.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.questions.first) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.program.cfp) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.program.cfp) }
|
|
||||||
it{ should_not be_able_to(:manage, my_schedule) }
|
|
||||||
it{ should_not be_able_to(:manage, other_schedule) }
|
|
||||||
it{ should_not be_able_to(:manage, my_event_schedule) }
|
|
||||||
it{ should_not be_able_to(:manage, other_event_schedule) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.venue) }
|
|
||||||
it{ should_not be_able_to(:show, my_conference.venue) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.venue) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.lodgings.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.lodgings.first) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.sponsors.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.sponsors.first) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.sponsorship_levels.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.sponsorship_levels.first) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.tickets.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.tickets.first) }
|
|
||||||
|
|
||||||
it{ should be_able_to(:manage, my_registration) }
|
|
||||||
it{ should_not be_able_to(:manage, other_registration) }
|
|
||||||
|
|
||||||
it{ should_not be_able_to(:manage, my_event) }
|
|
||||||
it{ should_not be_able_to(:manage, other_event) }
|
|
||||||
it{ should_not be_able_to(:manage, my_event.event_type) }
|
|
||||||
it{ should_not be_able_to(:manage, other_event.event_type) }
|
|
||||||
it{ should_not be_able_to(:manage, my_event.track) }
|
|
||||||
it{ should_not be_able_to(:manage, other_event.track) }
|
|
||||||
it{ should_not be_able_to(:manage, my_event.difficulty_level) }
|
|
||||||
it{ should_not be_able_to(:manage, other_event.difficulty_level) }
|
|
||||||
it{ should_not be_able_to(:manage, my_event.commercials.first) }
|
|
||||||
it{ should_not be_able_to(:manage, other_event.commercials.first) }
|
|
||||||
it{ should_not be_able_to(:index, my_event.comment_threads.first) }
|
|
||||||
it{ should_not be_able_to(:index, other_event.comment_threads.first) }
|
|
||||||
|
|
||||||
it{ should_not be_able_to(:manage, resource)}
|
|
||||||
it{ should be_able_to(:index, resource)}
|
|
||||||
it{ should be_able_to(:show, resource)}
|
|
||||||
it{ should be_able_to(:update, resource)}
|
|
||||||
|
|
||||||
it_behaves_like 'user with any role'
|
|
||||||
it_behaves_like 'user with non-organizer role', 'info_desk'
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when user has the role volunteers_coordinator' do
|
|
||||||
let(:role) { Role.find_by(name: 'volunteers_coordinator', resource: my_conference) }
|
|
||||||
let(:user) { create(:user, role_ids: [role.id]) }
|
|
||||||
|
|
||||||
it{ should_not be_able_to(:new, Conference.new) }
|
|
||||||
it{ should_not be_able_to(:create, Conference.new) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.splashpage) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.splashpage) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.contact) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.contact) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.email_settings) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.email_settings) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.campaigns.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.campaigns.first) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.targets.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.targets.first) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.commercials.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.commercials.first) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.registration_period) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.registration_period) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.questions.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.questions.first) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.program.cfp) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.program.cfp) }
|
|
||||||
it{ should_not be_able_to(:manage, my_schedule) }
|
|
||||||
it{ should_not be_able_to(:manage, other_schedule) }
|
|
||||||
it{ should_not be_able_to(:manage, my_event_schedule) }
|
|
||||||
it{ should_not be_able_to(:manage, other_event_schedule) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.venue) }
|
|
||||||
it{ should_not be_able_to(:show, my_conference.venue) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.venue) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.lodgings.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.lodgings.first) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.sponsors.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.sponsors.first) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.sponsorship_levels.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.sponsorship_levels.first) }
|
|
||||||
it{ should_not be_able_to(:manage, my_conference.tickets.first) }
|
|
||||||
it{ should_not be_able_to(:manage, conference_public.tickets.first) }
|
|
||||||
|
|
||||||
it{ should_not be_able_to(:manage, registration) }
|
|
||||||
it{ should_not be_able_to(:manage, other_registration) }
|
|
||||||
|
|
||||||
it{ should_not be_able_to(:manage, my_event) }
|
|
||||||
it{ should_not be_able_to(:manage, other_event) }
|
|
||||||
it{ should_not be_able_to(:manage, my_event.event_type) }
|
|
||||||
it{ should_not be_able_to(:manage, other_event.event_type) }
|
|
||||||
it{ should_not be_able_to(:manage, my_event.track) }
|
|
||||||
it{ should_not be_able_to(:manage, other_event.track) }
|
|
||||||
it{ should_not be_able_to(:manage, my_event.difficulty_level) }
|
|
||||||
it{ should_not be_able_to(:manage, other_event.difficulty_level) }
|
|
||||||
it{ should_not be_able_to(:manage, my_event.commercials.first) }
|
|
||||||
it{ should_not be_able_to(:manage, other_event.commercials.first) }
|
|
||||||
it{ should_not be_able_to(:index, my_event.comment_threads.first) }
|
|
||||||
it{ should_not be_able_to(:index, other_event.comment_threads.first) }
|
|
||||||
|
|
||||||
it{ should_not be_able_to(:manage, resource)}
|
|
||||||
it{ should be_able_to(:index, resource)}
|
|
||||||
it{ should be_able_to(:show, resource)}
|
|
||||||
it{ should be_able_to(:update, resource)}
|
|
||||||
|
|
||||||
it 'should be_able to :manage Vposition'
|
|
||||||
it 'should be_able to :manage Vday'
|
|
||||||
|
|
||||||
it_behaves_like 'user with any role'
|
|
||||||
it_behaves_like 'user with non-organizer role', 'volunteers_coordinator'
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
508
spec/models/admin_ability_spec.rb
Normal file
508
spec/models/admin_ability_spec.rb
Normal file
|
|
@ -0,0 +1,508 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
require 'cancan/matchers'
|
||||||
|
|
||||||
|
describe 'User with admin role' do
|
||||||
|
describe 'Abilities' do
|
||||||
|
let!(:admin) { create(:admin) }
|
||||||
|
|
||||||
|
# see https://github.com/CanCanCommunity/cancancan/wiki/Testing-Abilities
|
||||||
|
subject(:ability){ AdminAbility.new(user) }
|
||||||
|
let(:user){ nil }
|
||||||
|
|
||||||
|
let!(:organization) { create(:organization) }
|
||||||
|
let!(:my_conference) { create(:full_conference, organization: organization) }
|
||||||
|
let(:my_venue) { my_conference.venue || create(:venue, conference: my_conference) }
|
||||||
|
let(:my_registration) { create(:registration, conference: my_conference, user: admin) }
|
||||||
|
|
||||||
|
let(:other_registration) { create(:registration, conference: conference_public) }
|
||||||
|
let(:my_event) { create(:event_full, program: my_conference.program) }
|
||||||
|
let(:my_room) { create(:room, venue: my_conference.venue) }
|
||||||
|
let!(:my_event_scheduled) { create(:event_full, program: my_conference.program, room_id: my_room.id) }
|
||||||
|
let(:other_event) { create(:event_full, program: conference_public.program) }
|
||||||
|
|
||||||
|
let(:conference_not_public) { create(:conference, splashpage: create(:splashpage, public: false)) }
|
||||||
|
let(:conference_public) { create(:full_conference, splashpage: create(:splashpage, public: true)) }
|
||||||
|
|
||||||
|
let(:event_confirmed) { create(:event, state: 'confirmed') }
|
||||||
|
let(:event_unconfirmed) { create(:event) }
|
||||||
|
|
||||||
|
let(:commercial_event_confirmed) { create(:commercial, commercialable: event_confirmed) }
|
||||||
|
let(:commercial_event_unconfirmed) { create(:commercial, commercialable: event_unconfirmed) }
|
||||||
|
let(:resource) { create(:resource, conference: my_conference) }
|
||||||
|
let(:registration) { create(:registration) }
|
||||||
|
|
||||||
|
let(:program_with_cfp) { create(:program, :with_cfp) }
|
||||||
|
let(:program_without_cfp) { create(:program) }
|
||||||
|
let(:conference_with_open_registration) { create(:conference) }
|
||||||
|
let!(:open_registration_period) { create(:registration_period, conference: conference_with_open_registration, start_date: Date.current - 6.days) }
|
||||||
|
let(:conference_with_closed_registration) { create(:conference) }
|
||||||
|
let!(:closed_registration_period) { create(:registration_period, conference: conference_with_closed_registration, start_date: Date.current - 6.days, end_date: Date.current - 6.days) }
|
||||||
|
|
||||||
|
let!(:my_schedule) { create(:schedule, program: my_conference.program) }
|
||||||
|
let!(:other_schedule) { create(:schedule, program: conference_public.program) }
|
||||||
|
|
||||||
|
let!(:my_event_schedule) { create(:event_schedule, schedule: my_schedule) }
|
||||||
|
let!(:other_event_schedule) { create(:event_schedule, schedule: other_schedule) }
|
||||||
|
|
||||||
|
let!(:my_self_organized_track) { create(:track, :self_organized, program: my_conference.program) }
|
||||||
|
|
||||||
|
context 'user #is_admin?' do
|
||||||
|
let(:venue) { my_conference.venue }
|
||||||
|
let(:room) { create(:room, venue: venue) }
|
||||||
|
let!(:event) { create(:event_full, program: my_conference.program, room_id: room.id) }
|
||||||
|
let(:user) { create(:admin) }
|
||||||
|
it{ should be_able_to(:manage, :all) }
|
||||||
|
it{ should_not be_able_to(:destroy, my_conference.program) }
|
||||||
|
it{ should_not be_able_to(:destroy, my_venue) }
|
||||||
|
end
|
||||||
|
|
||||||
|
shared_examples 'user with any role' do
|
||||||
|
let!(:other_organization) { create(:organization) }
|
||||||
|
let!(:other_conference) { create(:conference, organization: other_organization) }
|
||||||
|
|
||||||
|
it{ should_not be_able_to(:update, Role.find_by(name: 'organization_admin', resource: other_organization)) }
|
||||||
|
it{ should_not be_able_to(:edit, Role.find_by(name: 'organization_admin', resource: other_organization)) }
|
||||||
|
it{ should_not be_able_to(:show, Role.find_by(name: 'organization_admin', resource: other_organization)) }
|
||||||
|
|
||||||
|
%w[organizer cfp info_desk volunteers_coordinator].each do |role|
|
||||||
|
it{ should_not be_able_to(:toggle_user, Role.find_by(name: role, resource: other_conference)) }
|
||||||
|
it{ should_not be_able_to(:update, Role.find_by(name: role, resource: other_conference)) }
|
||||||
|
it{ should_not be_able_to(:edit, Role.find_by(name: role, resource: other_conference)) }
|
||||||
|
it{ should be_able_to(:show, Role.find_by(name: role, resource: other_conference)) }
|
||||||
|
it{ should be_able_to(:index, Role.find_by(name: role, resource: other_conference)) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'accesses track organizers' do
|
||||||
|
before :each do
|
||||||
|
other_self_organized_track = create(:track, :self_organized)
|
||||||
|
@other_track_organizer_role = Role.find_by(name: 'track_organizer', resource: other_self_organized_track)
|
||||||
|
end
|
||||||
|
|
||||||
|
it{ should_not be_able_to(:toggle_user, @other_track_organizer_role) }
|
||||||
|
it{ should_not be_able_to(:update, @other_track_organizer_role) }
|
||||||
|
it{ should_not be_able_to(:edit, @other_track_organizer_role) }
|
||||||
|
it{ should be_able_to(:show, @other_track_organizer_role) }
|
||||||
|
it{ should be_able_to(:index, @other_track_organizer_role) }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
shared_examples 'user with non-organizer role' do |role_name|
|
||||||
|
%w[organizer cfp info_desk volunteers_coordinator].each do |role|
|
||||||
|
if role == role_name
|
||||||
|
it{ should be_able_to(:toggle_user, Role.find_by(name: role, resource: my_conference)) }
|
||||||
|
else
|
||||||
|
it{ should_not be_able_to(:toggle_user, Role.find_by(name: role, resource: my_conference)) }
|
||||||
|
end
|
||||||
|
it{ should_not be_able_to(:update, Role.find_by(name: role, resource: my_conference)) }
|
||||||
|
it{ should_not be_able_to(:edit, Role.find_by(name: role, resource: my_conference)) }
|
||||||
|
it{ should be_able_to(:show, Role.find_by(name: role, resource: my_conference)) }
|
||||||
|
it{ should be_able_to(:index, Role.find_by(name: role, resource: my_conference)) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'accesses track organizers' do
|
||||||
|
before :each do
|
||||||
|
@track_organizer_role = Role.find_by(name: 'track_organizer', resource: my_self_organized_track)
|
||||||
|
end
|
||||||
|
|
||||||
|
if role_name == 'track_organizer'
|
||||||
|
it{ should be_able_to(:toggle_user, @track_organizer_role) }
|
||||||
|
else
|
||||||
|
it{ should_not be_able_to(:toggle_user, @track_organizer_role) }
|
||||||
|
end
|
||||||
|
it{ should_not be_able_to(:update, @track_organizer_role) }
|
||||||
|
it{ should_not be_able_to(:edit, @track_organizer_role) }
|
||||||
|
it{ should be_able_to(:show, @track_organizer_role) }
|
||||||
|
it{ should be_able_to(:index, @track_organizer_role) }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when user has the role organization_admin' do
|
||||||
|
let(:role) { Role.find_by(name: 'organization_admin', resource: organization) }
|
||||||
|
let(:user) { create(:user, role_ids: [role.id]) }
|
||||||
|
let(:other_organization) { create(:organization) }
|
||||||
|
let(:other_conference) { create(:conference, organization: other_organization) }
|
||||||
|
|
||||||
|
it{ should be_able_to(:manage, my_conference) }
|
||||||
|
it{ should be_able_to(:read, organization) }
|
||||||
|
it{ should be_able_to(:update, organization) }
|
||||||
|
it{ should be_able_to(:destroy, organization) }
|
||||||
|
it{ should be_able_to(:new, Conference.new) }
|
||||||
|
it{ should be_able_to(:create, Conference.new(organization_id: organization.id)) }
|
||||||
|
it{ should_not be_able_to(:manage, other_conference) }
|
||||||
|
it{ should_not be_able_to(:create, Conference.new(organization_id: other_organization.id)) }
|
||||||
|
it{ should_not be_able_to(:new, Organization.new) }
|
||||||
|
it{ should_not be_able_to(:create, Organization.new) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when user has the role organizer' do
|
||||||
|
let(:role) { Role.find_by(name: 'organizer', resource: my_conference) }
|
||||||
|
let(:user) { create(:user, role_ids: [role.id]) }
|
||||||
|
|
||||||
|
it{ should_not be_able_to(:destroy, my_conference.program) }
|
||||||
|
it 'when there is a room assigned to an event' do
|
||||||
|
should_not be_able_to(:destroy, my_venue)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'when there are no rooms used' do
|
||||||
|
my_event_scheduled.room_id = nil
|
||||||
|
my_event_scheduled.save!
|
||||||
|
my_event_scheduled.reload
|
||||||
|
should be_able_to(:destroy, my_venue)
|
||||||
|
end
|
||||||
|
|
||||||
|
it{ should_not be_able_to(:new, Organization.new) }
|
||||||
|
it{ should_not be_able_to(:create, Organization.new) }
|
||||||
|
it{ should_not be_able_to(:new, Conference.new) }
|
||||||
|
it{ should_not be_able_to(:create, Conference.new) }
|
||||||
|
it{ should be_able_to(:read, my_conference) }
|
||||||
|
it{ should be_able_to(:update, my_conference) }
|
||||||
|
it{ should be_able_to(:destroy, my_conference) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public) }
|
||||||
|
it{ should be_able_to(:manage, my_conference.splashpage) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.splashpage) }
|
||||||
|
it{ should be_able_to(:manage, my_conference.contact) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.contact) }
|
||||||
|
it{ should be_able_to(:manage, my_conference.email_settings) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.email_settings) }
|
||||||
|
it{ should be_able_to(:manage, my_conference.campaigns.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.campaigns.first) }
|
||||||
|
it{ should be_able_to(:manage, my_conference.targets.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.targets.first) }
|
||||||
|
it{ should be_able_to(:manage, my_conference.commercials.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.commercials.first) }
|
||||||
|
it{ should be_able_to(:manage, my_conference.registration_period) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.registration_period) }
|
||||||
|
it{ should be_able_to(:manage, my_conference.questions.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.questions.first) }
|
||||||
|
it{ should be_able_to(:manage, my_conference.program.cfp) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.program.cfp) }
|
||||||
|
it{ should be_able_to(:manage, my_schedule) }
|
||||||
|
it{ should_not be_able_to(:manage, other_schedule) }
|
||||||
|
it{ should be_able_to(:manage, my_event_schedule) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event_schedule) }
|
||||||
|
it{ should be_able_to(:manage, my_conference.venue) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.venue) }
|
||||||
|
it{ should be_able_to(:manage, my_conference.lodgings.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.lodgings.first) }
|
||||||
|
it{ should be_able_to(:manage, my_conference.sponsors.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.sponsors.first) }
|
||||||
|
it{ should be_able_to(:manage, my_conference.sponsorship_levels.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.sponsorship_levels.first) }
|
||||||
|
it{ should be_able_to(:manage, my_conference.tickets.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.tickets.first) }
|
||||||
|
|
||||||
|
it{ should be_able_to(:manage, my_registration) }
|
||||||
|
it{ should_not be_able_to(:manage, other_registration) }
|
||||||
|
|
||||||
|
it{ should be_able_to(:manage, my_event) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event) }
|
||||||
|
it{ should be_able_to(:manage, my_event.event_type) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event.event_type) }
|
||||||
|
it{ should be_able_to(:manage, my_event.track) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event.track) }
|
||||||
|
it{ should be_able_to(:manage, my_event.difficulty_level) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event.difficulty_level) }
|
||||||
|
it{ should be_able_to(:manage, my_event.commercials.first) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event.commercials.first) }
|
||||||
|
it{ should be_able_to(:index, my_event.comment_threads.first) }
|
||||||
|
it{ should_not be_able_to(:index, other_event.comment_threads.first) }
|
||||||
|
|
||||||
|
it{ should be_able_to(:manage, resource) }
|
||||||
|
|
||||||
|
%w[organizer cfp info_desk volunteers_coordinator].each do |role|
|
||||||
|
it{ should be_able_to(:toggle_user, Role.find_by(name: role, resource: my_conference)) }
|
||||||
|
it{ should be_able_to(:edit, Role.find_by(name: role, resource: my_conference)) }
|
||||||
|
it{ should be_able_to(:update, Role.find_by(name: role, resource: my_conference)) }
|
||||||
|
it{ should be_able_to(:show, Role.find_by(name: role, resource: my_conference)) }
|
||||||
|
it{ should be_able_to(:index, Role.find_by(name: role, resource: my_conference)) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'can manage track organizers' do
|
||||||
|
before :each do
|
||||||
|
@track_organizer_role = Role.find_by(name: 'track_organizer', resource: my_self_organized_track)
|
||||||
|
end
|
||||||
|
|
||||||
|
it{ should be_able_to(:toggle_user, @track_organizer_role) }
|
||||||
|
it{ should be_able_to(:edit, @track_organizer_role) }
|
||||||
|
it{ should be_able_to(:update, @track_organizer_role) }
|
||||||
|
it{ should be_able_to(:show, @track_organizer_role) }
|
||||||
|
it{ should be_able_to(:index, @track_organizer_role) }
|
||||||
|
end
|
||||||
|
|
||||||
|
it_behaves_like 'user with any role'
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when user has the role cfp' do
|
||||||
|
let(:role) { Role.find_by(name: 'cfp', resource: my_conference) }
|
||||||
|
let(:user) { create(:user, role_ids: [role.id]) }
|
||||||
|
|
||||||
|
it{ should_not be_able_to(:new, Conference.new) }
|
||||||
|
it{ should_not be_able_to(:create, Conference.new) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.splashpage) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.splashpage) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.contact) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.contact) }
|
||||||
|
it{ should be_able_to(:manage, my_conference.email_settings) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.email_settings) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.campaigns.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.campaigns.first) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.targets.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.targets.first) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.commercials.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.commercials.first) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.registration_period) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.registration_period) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.questions.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.questions.first) }
|
||||||
|
it{ should be_able_to(:manage, my_conference.program.cfp) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.program.cfp) }
|
||||||
|
it{ should be_able_to(:manage, my_schedule) }
|
||||||
|
it{ should_not be_able_to(:manage, other_schedule) }
|
||||||
|
it{ should_not be_able_to(:manage, my_event_schedule) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event_schedule) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.venue) }
|
||||||
|
it{ should be_able_to(:show, my_conference.venue) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.venue) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.lodgings.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.lodgings.first) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.sponsors.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.sponsors.first) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.sponsorship_levels.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.sponsorship_levels.first) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.tickets.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.tickets.first) }
|
||||||
|
|
||||||
|
it{ should_not be_able_to(:manage, my_registration) }
|
||||||
|
it{ should_not be_able_to(:manage, other_registration) }
|
||||||
|
|
||||||
|
it{ should be_able_to(:manage, my_event) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event) }
|
||||||
|
it{ should be_able_to(:manage, my_event.event_type) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event.event_type) }
|
||||||
|
it{ should be_able_to(:manage, my_event.track) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event.track) }
|
||||||
|
it{ should be_able_to(:manage, my_event.difficulty_level) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event.difficulty_level) }
|
||||||
|
it{ should be_able_to(:manage, my_event.commercials.first) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event.commercials.first) }
|
||||||
|
it{ should be_able_to(:index, my_event.comment_threads.first) }
|
||||||
|
it{ should_not be_able_to(:index, other_event.comment_threads.first) }
|
||||||
|
|
||||||
|
it{ should_not be_able_to(:manage, resource) }
|
||||||
|
it{ should be_able_to(:index, resource) }
|
||||||
|
it{ should be_able_to(:show, resource) }
|
||||||
|
it{ should be_able_to(:update, resource) }
|
||||||
|
|
||||||
|
it_behaves_like 'user with any role'
|
||||||
|
it_behaves_like 'user with non-organizer role', 'cfp'
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when user has the role info_desk' do
|
||||||
|
let(:role) { Role.find_by(name: 'info_desk', resource: my_conference) }
|
||||||
|
let(:user) { create(:user, role_ids: [role.id]) }
|
||||||
|
|
||||||
|
it{ should_not be_able_to(:new, Conference.new) }
|
||||||
|
it{ should_not be_able_to(:create, Conference.new) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.splashpage) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.splashpage) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.contact) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.contact) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.email_settings) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.email_settings) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.campaigns.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.campaigns.first) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.targets.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.targets.first) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.commercials.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.commercials.first) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.registration_period) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.registration_period) }
|
||||||
|
it{ should be_able_to(:manage, my_conference.questions.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.questions.first) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.program.cfp) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.program.cfp) }
|
||||||
|
it{ should_not be_able_to(:manage, my_schedule) }
|
||||||
|
it{ should_not be_able_to(:manage, other_schedule) }
|
||||||
|
it{ should_not be_able_to(:manage, my_event_schedule) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event_schedule) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.venue) }
|
||||||
|
it{ should_not be_able_to(:show, my_conference.venue) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.venue) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.lodgings.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.lodgings.first) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.sponsors.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.sponsors.first) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.sponsorship_levels.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.sponsorship_levels.first) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.tickets.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.tickets.first) }
|
||||||
|
|
||||||
|
it{ should be_able_to(:manage, my_registration) }
|
||||||
|
it{ should_not be_able_to(:manage, other_registration) }
|
||||||
|
|
||||||
|
it{ should_not be_able_to(:manage, my_event) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event) }
|
||||||
|
it{ should_not be_able_to(:manage, my_event.event_type) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event.event_type) }
|
||||||
|
it{ should_not be_able_to(:manage, my_event.track) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event.track) }
|
||||||
|
it{ should_not be_able_to(:manage, my_event.difficulty_level) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event.difficulty_level) }
|
||||||
|
it{ should_not be_able_to(:manage, my_event.commercials.first) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event.commercials.first) }
|
||||||
|
it{ should_not be_able_to(:index, my_event.comment_threads.first) }
|
||||||
|
it{ should_not be_able_to(:index, other_event.comment_threads.first) }
|
||||||
|
|
||||||
|
it{ should_not be_able_to(:manage, resource) }
|
||||||
|
it{ should be_able_to(:index, resource) }
|
||||||
|
it{ should be_able_to(:show, resource) }
|
||||||
|
it{ should be_able_to(:update, resource) }
|
||||||
|
|
||||||
|
it_behaves_like 'user with any role'
|
||||||
|
it_behaves_like 'user with non-organizer role', 'info_desk'
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when user has the role volunteers_coordinator' do
|
||||||
|
let(:role) { Role.find_by(name: 'volunteers_coordinator', resource: my_conference) }
|
||||||
|
let(:user) { create(:user, role_ids: [role.id]) }
|
||||||
|
|
||||||
|
it{ should_not be_able_to(:new, Conference.new) }
|
||||||
|
it{ should_not be_able_to(:create, Conference.new) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.splashpage) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.splashpage) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.contact) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.contact) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.email_settings) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.email_settings) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.campaigns.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.campaigns.first) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.targets.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.targets.first) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.commercials.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.commercials.first) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.registration_period) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.registration_period) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.questions.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.questions.first) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.program.cfp) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.program.cfp) }
|
||||||
|
it{ should_not be_able_to(:manage, my_schedule) }
|
||||||
|
it{ should_not be_able_to(:manage, other_schedule) }
|
||||||
|
it{ should_not be_able_to(:manage, my_event_schedule) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event_schedule) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.venue) }
|
||||||
|
it{ should_not be_able_to(:show, my_conference.venue) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.venue) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.lodgings.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.lodgings.first) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.sponsors.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.sponsors.first) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.sponsorship_levels.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.sponsorship_levels.first) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.tickets.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.tickets.first) }
|
||||||
|
|
||||||
|
it{ should_not be_able_to(:manage, registration) }
|
||||||
|
it{ should_not be_able_to(:manage, other_registration) }
|
||||||
|
|
||||||
|
it{ should_not be_able_to(:manage, my_event) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event) }
|
||||||
|
it{ should_not be_able_to(:manage, my_event.event_type) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event.event_type) }
|
||||||
|
it{ should_not be_able_to(:manage, my_event.track) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event.track) }
|
||||||
|
it{ should_not be_able_to(:manage, my_event.difficulty_level) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event.difficulty_level) }
|
||||||
|
it{ should_not be_able_to(:manage, my_event.commercials.first) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event.commercials.first) }
|
||||||
|
it{ should_not be_able_to(:index, my_event.comment_threads.first) }
|
||||||
|
it{ should_not be_able_to(:index, other_event.comment_threads.first) }
|
||||||
|
|
||||||
|
it{ should_not be_able_to(:manage, resource) }
|
||||||
|
it{ should be_able_to(:index, resource) }
|
||||||
|
it{ should be_able_to(:show, resource) }
|
||||||
|
it{ should be_able_to(:update, resource) }
|
||||||
|
|
||||||
|
it 'should be_able to :manage Vposition'
|
||||||
|
it 'should be_able to :manage Vday'
|
||||||
|
|
||||||
|
it_behaves_like 'user with any role'
|
||||||
|
it_behaves_like 'user with non-organizer role', 'volunteers_coordinator'
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when user has the role track_organizer' do
|
||||||
|
let(:role) { Role.find_by(name: 'track_organizer', resource: my_self_organized_track) }
|
||||||
|
let(:user) { create(:user, role_ids: [role.id]) }
|
||||||
|
let(:new_track) { build(:track, program: my_conference.program) }
|
||||||
|
|
||||||
|
it{ should_not be_able_to(:new, Conference.new) }
|
||||||
|
it{ should_not be_able_to(:create, Conference.new) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.splashpage) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.splashpage) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.contact) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.contact) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.email_settings) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.email_settings) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.campaigns.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.campaigns.first) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.targets.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.targets.first) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.commercials.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.commercials.first) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.registration_period) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.registration_period) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.questions.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.questions.first) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.program.cfp) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.program.cfp) }
|
||||||
|
it{ should_not be_able_to(:manage, my_schedule) }
|
||||||
|
it{ should_not be_able_to(:manage, other_schedule) }
|
||||||
|
it{ should_not be_able_to(:manage, my_event_schedule) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event_schedule) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.venue) }
|
||||||
|
it{ should_not be_able_to(:show, my_conference.venue) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.venue) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.lodgings.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.lodgings.first) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.sponsors.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.sponsors.first) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.sponsorship_levels.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.sponsorship_levels.first) }
|
||||||
|
it{ should_not be_able_to(:manage, my_conference.tickets.first) }
|
||||||
|
it{ should_not be_able_to(:manage, conference_public.tickets.first) }
|
||||||
|
|
||||||
|
it{ should_not be_able_to(:manage, registration) }
|
||||||
|
it{ should_not be_able_to(:manage, other_registration) }
|
||||||
|
|
||||||
|
it{ should_not be_able_to(:manage, my_event) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event) }
|
||||||
|
it{ should_not be_able_to(:manage, my_event.event_type) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event.event_type) }
|
||||||
|
it{ should_not be_able_to(:manage, my_event.track) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event.track) }
|
||||||
|
it{ should_not be_able_to(:manage, my_event.difficulty_level) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event.difficulty_level) }
|
||||||
|
it{ should_not be_able_to(:manage, my_event.commercials.first) }
|
||||||
|
it{ should_not be_able_to(:manage, other_event.commercials.first) }
|
||||||
|
it{ should_not be_able_to(:index, my_event.comment_threads.first) }
|
||||||
|
it{ should_not be_able_to(:index, other_event.comment_threads.first) }
|
||||||
|
|
||||||
|
it{ should_not be_able_to(:manage, resource) }
|
||||||
|
|
||||||
|
it{ should be_able_to(:show, my_conference.program) }
|
||||||
|
it{ should be_able_to(:update, new_track) }
|
||||||
|
it{ should be_able_to(:manage, my_self_organized_track) }
|
||||||
|
|
||||||
|
it_behaves_like 'user with any role'
|
||||||
|
it_behaves_like 'user with non-organizer role', 'track_organizer'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -1687,4 +1687,21 @@ describe Conference do
|
||||||
expect{ room.save }.to change { subject.revision }.by(1)
|
expect{ room.save }.to change { subject.revision }.by(1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '.upcoming' do
|
||||||
|
let!(:upcoming_conference) { create(:conference) }
|
||||||
|
let!(:past_conference) { create(:conference, start_date: Date.current - 1.days, end_date: Date.current - 1.days) }
|
||||||
|
subject { Conference.upcoming }
|
||||||
|
|
||||||
|
it { is_expected.to eq [upcoming_conference] }
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '.past' do
|
||||||
|
let!(:upcoming_conference) { create(:conference) }
|
||||||
|
let!(:past_conference1) { create(:conference, start_date: Date.current - 1.days, end_date: Date.current - 1.days) }
|
||||||
|
let!(:past_conference2) { create(:conference, start_date: Date.current - 2.days, end_date: Date.current - 1.days) }
|
||||||
|
subject { Conference.past }
|
||||||
|
|
||||||
|
it { is_expected.to eq [past_conference1, past_conference2] }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -253,10 +253,28 @@ describe Program do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#remaining_cfp_types' do
|
describe '#remaining_cfp_types' do
|
||||||
it 'returns an array with the types for which a cfp doesn\'t exist' do
|
it 'returns an array with the types for which a cfp doesn\'t exist, when only the Event type does' do
|
||||||
expect(program.remaining_cfp_types).to eq(Cfp::TYPES)
|
expect(program.remaining_cfp_types).to eq(Cfp::TYPES)
|
||||||
create(:cfp, cfp_type: 'events', program: program, end_date: Date.current + 1)
|
create(:cfp, cfp_type: 'events', program: program)
|
||||||
|
expect(program.remaining_cfp_types).to eq(['booths'])
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns an array with the types for which a cfp doesn\'t exist, when only the Booth type does' do
|
||||||
|
expect(program.remaining_cfp_types).to eq(Cfp::TYPES)
|
||||||
|
create(:cfp, cfp_type: 'booths', program: program)
|
||||||
|
expect(program.remaining_cfp_types).to eq(['events'])
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns an empty array when all the cfp types exist' do
|
||||||
|
expect(program.remaining_cfp_types).to eq(Cfp::TYPES)
|
||||||
|
create(:cfp, cfp_type: 'events', program: program)
|
||||||
|
create(:cfp, cfp_type: 'booths', program: program)
|
||||||
expect(program.remaining_cfp_types).to eq([])
|
expect(program.remaining_cfp_types).to eq([])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'returns all the possible cfp types when there is no existed cfp type' do
|
||||||
|
expect(program.remaining_cfp_types).to eq(Cfp::TYPES)
|
||||||
|
expect(program.remaining_cfp_types). to eq(%w[events booths])
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
57
spec/models/track_spec.rb
Normal file
57
spec/models/track_spec.rb
Normal file
|
|
@ -0,0 +1,57 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe Track do
|
||||||
|
subject { create(:track) }
|
||||||
|
let(:track) { create(:track) }
|
||||||
|
let(:self_organized_track) { create(:track, :self_organized) }
|
||||||
|
|
||||||
|
describe 'association' do
|
||||||
|
it { is_expected.to belong_to(:program) }
|
||||||
|
it { is_expected.to belong_to(:submitter).class_name('User') }
|
||||||
|
it { is_expected.to have_many(:events) }
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'validation' do
|
||||||
|
it 'has a valid factory' do
|
||||||
|
expect(build(:track)).to be_valid
|
||||||
|
end
|
||||||
|
|
||||||
|
it { is_expected.to validate_presence_of(:name) }
|
||||||
|
it { is_expected.to allow_value('#ABCDEF').for(:color) }
|
||||||
|
it { is_expected.to allow_value('#124689').for(:color) }
|
||||||
|
it { is_expected.to validate_presence_of(:short_name) }
|
||||||
|
it { is_expected.to allow_value('My_track_name').for(:short_name) }
|
||||||
|
it { is_expected.to_not allow_value('My track name').for(:short_name) }
|
||||||
|
it { is_expected.to validate_uniqueness_of(:short_name).scoped_to(:program_id) }
|
||||||
|
|
||||||
|
context 'when self-organized' do
|
||||||
|
before :each do
|
||||||
|
allow(subject).to receive(:self_organized?).and_return(true)
|
||||||
|
end
|
||||||
|
|
||||||
|
it { is_expected.to validate_presence_of(:state) }
|
||||||
|
it { is_expected.to validate_inclusion_of(:cfp_active).in_array([true, false]) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when regular' do
|
||||||
|
before :each do
|
||||||
|
allow(subject).to receive(:self_organized?).and_return(false)
|
||||||
|
end
|
||||||
|
|
||||||
|
it { is_expected.to_not validate_presence_of(:state) }
|
||||||
|
it { is_expected.to_not validate_inclusion_of(:cfp_active) }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '#self_organized?' do
|
||||||
|
it 'returns true when it has a submitter' do
|
||||||
|
expect(self_organized_track.submitter).to be_a User
|
||||||
|
expect(self_organized_track.self_organized?).to eq true
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns false when it doesn\'t have a submitter' do
|
||||||
|
expect(track.submitter).to eq nil
|
||||||
|
expect(track.self_organized?).to eq false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
Loading…
Add table
Add a link
Reference in a new issue