ece517-p3/expertiza

View on GitHub
app/models/questionnaire.rb

Summary

Maintainability
A
0 mins
Test Coverage

Mass assignment is not restricted using attr_accessible
Open

class Questionnaire < ActiveRecord::Base
Severity: Critical
Found in app/models/questionnaire.rb by brakeman

This warning comes up if a model does not limit what attributes can be set through mass assignment.

In particular, this check looks for attr_accessible inside model definitions. If it is not found, this warning will be issued.

Brakeman also warns on use of attr_protected - especially since it was found to be vulnerable to bypass. Warnings for mass assignment on models using attr_protected will be reported, but at a lower confidence level.

Note that disabling mass assignment globally will suppress these warnings.

Assignment Branch Condition size for validate_questionnaire is too high. [16.31/15]
Open

  def validate_questionnaire
    errors.add(:max_question_score, "The maximum question score must be a positive integer.") if max_question_score < 1
    errors.add(:min_question_score, "The minimum question score must be less than the maximum") if min_question_score >= max_question_score

    results = Questionnaire.where("id <> ? and name = ? and instructor_id = ?", id, name, instructor_id)
Severity: Minor
Found in app/models/questionnaire.rb by rubocop

This cop checks that the ABC size of methods is not higher than the configured maximum. The ABC size is based on assignments, branches (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric

Specify an :inverse_of option.
Open

  has_one :questionnaire_node, foreign_key: 'node_object_id', dependent: :destroy
Severity: Minor
Found in app/models/questionnaire.rb by rubocop

This cop looks for has(one|many) and belongsto associations where ActiveRecord can't automatically determine the inverse association because of a scope or the options used. This can result in unnecessary queries in some circumstances. :inverse_of must be manually specified for associations to work in both ways, or set to false to opt-out.

Example:

# good
class Blog < ApplicationRecord
  has_many :posts
end

class Post < ApplicationRecord
  belongs_to :blog
end

Example:

# bad
class Blog < ApplicationRecord
  has_many :posts, -> { order(published_at: :desc) }
end

class Post < ApplicationRecord
  belongs_to :blog
end

# good
class Blog < ApplicationRecord
  has_many(:posts,
    -> { order(published_at: :desc) },
    inverse_of: :blog
  )
end

class Post < ApplicationRecord
  belongs_to :blog
end

# good
class Blog < ApplicationRecord
  with_options inverse_of: :blog do
    has_many :posts, -> { order(published_at: :desc) }
  end
end

class Post < ApplicationRecord
  belongs_to :blog
end

Example:

# bad
class Picture < ApplicationRecord
  belongs_to :imageable, polymorphic: true
end

class Employee < ApplicationRecord
  has_many :pictures, as: :imageable
end

class Product < ApplicationRecord
  has_many :pictures, as: :imageable
end

# good
class Picture < ApplicationRecord
  belongs_to :imageable, polymorphic: true
end

class Employee < ApplicationRecord
  has_many :pictures, as: :imageable, inverse_of: :imageable
end

class Product < ApplicationRecord
  has_many :pictures, as: :imageable, inverse_of: :imageable
end

Example:

# bad
# However, RuboCop can not detect this pattern...
class Physician < ApplicationRecord
  has_many :appointments
  has_many :patients, through: :appointments
end

class Appointment < ApplicationRecord
  belongs_to :physician
  belongs_to :patient
end

class Patient < ApplicationRecord
  has_many :appointments
  has_many :physicians, through: :appointments
end

# good
class Physician < ApplicationRecord
  has_many :appointments
  has_many :patients, through: :appointments
end

class Appointment < ApplicationRecord
  belongs_to :physician, inverse_of: :appointments
  belongs_to :patient, inverse_of: :appointments
end

class Patient < ApplicationRecord
  has_many :appointments
  has_many :physicians, through: :appointments
end

@see http://guides.rubyonrails.org/association_basics.html#bi-directional-associations @see http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#module-ActiveRecord::Associations::ClassMethods-label-Setting+Inverses

Trailing whitespace detected.
Open

                         'Teammate ReviewQuestionnaire',    
Severity: Minor
Found in app/models/questionnaire.rb by rubocop

Trailing whitespace detected.
Open

                         'AssignmentSurveyQuestionnaire',    
Severity: Minor
Found in app/models/questionnaire.rb by rubocop

Trailing whitespace detected.
Open

                         'CourseSurveyQuestionnaire',    
Severity: Minor
Found in app/models/questionnaire.rb by rubocop

Trailing whitespace detected.
Open

                         'Author FeedbackQuestionnaire',    
Severity: Minor
Found in app/models/questionnaire.rb by rubocop

Trailing whitespace detected.
Open

                         'AuthorFeedbackQuestionnaire',    
Severity: Minor
Found in app/models/questionnaire.rb by rubocop

Trailing whitespace detected.
Open

                         'GlobalSurveyQuestionnaire',    
Severity: Minor
Found in app/models/questionnaire.rb by rubocop

Trailing whitespace detected.
Open

                         'BookmarkratingQuestionnaire',    
Severity: Minor
Found in app/models/questionnaire.rb by rubocop

Trailing whitespace detected.
Open

                         'Course SurveyQuestionnaire',    
Severity: Minor
Found in app/models/questionnaire.rb by rubocop

Trailing whitespace detected.
Open

                         'Global SurveyQuestionnaire',    
Severity: Minor
Found in app/models/questionnaire.rb by rubocop

Trailing whitespace detected.
Open

                         'Assignment SurveyQuestionnaire',    
Severity: Minor
Found in app/models/questionnaire.rb by rubocop

Trailing whitespace detected.
Open

  QUESTIONNAIRE_TYPES = ['ReviewQuestionnaire',    
Severity: Minor
Found in app/models/questionnaire.rb by rubocop

Trailing whitespace detected.
Open

                         'MetareviewQuestionnaire',    
Severity: Minor
Found in app/models/questionnaire.rb by rubocop

Trailing whitespace detected.
Open

                         'TeammateReviewQuestionnaire',    
Severity: Minor
Found in app/models/questionnaire.rb by rubocop

Trailing whitespace detected.
Open

                         'SurveyQuestionnaire',    
Severity: Minor
Found in app/models/questionnaire.rb by rubocop

There are no issues that match your filters.

Category
Status