Sha256: 5b54f5511a81fb0eb5eab8b31e4ad5320539b2c8ea03543c846fa2fcacd82e97

Contents?: true

Size: 1.3 KB

Versions: 1

Compression:

Stored size: 1.3 KB

Contents

module Jobshop
  class Inspection::Report < ApplicationRecord
    self.primary_keys = [ :organization_id, :report_id ]

    after_initialize do
      self.report_id ||= SecureRandom.uuid if new_record?
    end

    after_create do
      self.class.connection.clear_query_cache
      @attributes = self.class.unscoped {
        self.class.find_by!(organization: organization, report_id: report_id)
      }.instance_variable_get(:@attributes)
      @new_record = false
      self
    end

    belongs_to :organization
    has_many :criteria, -> { includes(:criterion).order(:position) },
      foreign_key: [ :organization_id, :report_id ], inverse_of: :report
    has_many :tuples, -> { order(:position) },  inverse_of: :report,
      foreign_key: [ :organization_id, :report_id ]

    def ascii
      require "terminal-table"
      table = Terminal::Table.new do |t|
        t.title = "Inspection Report"
        t << [ "Feature" ].concat(criteria.map(&:criterion).map(&:name))
        t << [ "Specification" ].concat(criteria.map(&:criterion).map(&:specification))
        tuples.each do |tuple|
          results = criteria.map do |criterion|
            tuple.results.find_by(criterion: criterion)
          end
          t << [ tuple.position ].concat(results.map(&:value))
        end
      end

      puts table
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
jobshop-0.0.157 app/models/jobshop/inspection/report.rb