Sha256: a8300c20b55b9e850784d5b741fa460601011abaf8aa25619389f71f0ec436de

Contents?: true

Size: 1.15 KB

Versions: 1

Compression:

Stored size: 1.15 KB

Contents

module Leap
  class Committee
    include XmlSerializer

    attr_reader :name, :quorums
    
    def initialize(name)
      @name = name
      @quorums = []
    end
    
    def report(characteristics, considerations, options = {})
      quorums.grab do |quorum|
        next unless quorum.satisfied_by? characteristics and quorum.complies_with? Array.wrap(options[:comply])
        if conclusion = quorum.acknowledge(characteristics.slice(*quorum.characteristics), considerations.dup)
          ::Leap::Report.new self, quorum => conclusion
        end
      end
    end

    def as_json(*)
      {
        'name' => name.to_s,
        'quorums' => quorums.map(&:as_json)
      }
    end

    def to_xml(options = {})
      super options do |xml|
        xml.committee do |committee_block|
          committee_block.name name.to_s, :type => 'string'
          array_to_xml(committee_block, :quorums, quorums)
        end
      end
    end
    
    include ::Blockenspiel::DSL
    def quorum(name, options = {}, &blk)
      @quorums << ::Leap::Quorum.new(name, options, blk)
    end
    
    def default(options = {}, &blk)
      quorum 'default', options, &blk
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
leap-0.4.4 lib/leap/committee.rb