Sha256: 49e2d68ea62d555c56fdb36e606505e583d0fd960ef57b6e6bcabe722d85aaf0

Contents?: true

Size: 1.62 KB

Versions: 1

Compression:

Stored size: 1.62 KB

Contents

require 'kriterion/object'

class Kriterion
  class Standard < Kriterion::Object
    @@standards = []

    attr_accessor :uuid
    attr_accessor :name
    attr_accessor :date
    attr_accessor :description
    attr_accessor :title
    attr_accessor :version
    attr_accessor :item_syntax
    attr_accessor :section_separator
    attr_accessor :sections
    attr_accessor :items

    def initialize(data)
      @uuid              = data['uuid'] || SecureRandom.uuid
      @name              = data['name']
      @date              = data['date']
      @description       = data['description']
      @title             = data['title']
      @version           = data['version']
      @item_syntax       = if data['item_syntax'].is_a? Regexp
                             data['item_syntax']
                           else
                             Regexp.new(data['item_syntax'])
                           end
      @section_separator = data['section_separator']
      @sections          = data['sections'] || []
      @items             = data['items'] || []
    end

    def self.get(name)
      # Reload all standards
      Kriterion::Standard.reload_all!

      results = @@standards.select { |s| s.name == name }

      case results.length
      when 0
        raise "No standards found with name: #{name}"
      when 1
        results.first
      else
        raise "Multiple standards found with #{name}"
      end
    end

    def self.reload_all!
      backend = Kriterion::Backend.get
      @@standards = backend.standards
    end

    def type
      :standard
    end

    def compliance
      super([items, sections].flatten)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
kriterion-0.0.1 lib/kriterion/standard.rb