query.rb 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. module Blazer
  2. class Query < Record
  3. belongs_to :creator, Blazer::BELONGS_TO_OPTIONAL.merge(class_name: Blazer.user_class.to_s) if Blazer.user_class
  4. has_many :checks, dependent: :destroy
  5. has_many :dashboard_queries, dependent: :destroy
  6. has_many :dashboards, through: :dashboard_queries
  7. has_many :audits
  8. validates :statement, presence: true
  9. scope :named, -> { where("blazer_queries.name <> ''") }
  10. def to_param
  11. [id, name].compact.join("-").gsub("'", "").parameterize
  12. end
  13. def friendly_name
  14. name.to_s.sub(/\A[#\*]/, "").gsub(/\[.+\]/, "").strip
  15. end
  16. def viewable?(user)
  17. if Blazer.query_viewable
  18. Blazer.query_viewable.call(self, user)
  19. else
  20. true
  21. end
  22. end
  23. def editable?(user)
  24. editable = !persisted? || (name.present? && name.first != "*" && name.first != "#") || user == try(:creator)
  25. editable &&= viewable?(user)
  26. editable &&= Blazer.query_editable.call(self, user) if Blazer.query_editable
  27. editable
  28. end
  29. def variables
  30. Blazer.extract_vars(statement)
  31. end
  32. end
  33. end