Sha256: 2ef816d875a09f2d014190d0f1f110b056e292cab12c2f41b09738e04d501dd9

Contents?: true

Size: 1.13 KB

Versions: 4

Compression:

Stored size: 1.13 KB

Contents

require File.dirname(__FILE__) + "/notifier/base"

module Integrity
  class Notifier
    include DataMapper::Resource

    property :id,      Integer,  :serial => true
    property :name,    String,   :nullable => false
    property :enabled, Boolean,  :nullable => false, :default => false
    property :config,  Yaml,     :nullable => false, :lazy    => false

    belongs_to :project, :class_name => "Integrity::Project",
                         :child_key => [:project_id]

    validates_is_unique :name, :scope => :project_id
    validates_present :project_id

    def self.available
      @@_notifiers ||= {}
      @@_notifiers
    end

    def self.register(klass)
      raise ArgumentError unless valid?(klass)

      available[klass.to_s.split(":").last] = klass
    end

    def self.valid?(notifier)
      notifier.respond_to?(:to_haml) && notifier.respond_to?(:notify_of_build) &&
        notifier != Notifier::Base
    end
    private_class_method :valid?

    def notify_of_build(build)
      to_const.notify_of_build(build, config) if to_const
    end

    private
      def to_const
        self.class.available[name]
      end
  end
end

Version data entries

4 entries across 4 versions & 3 rubygems

Version Path
alphasights-integrity-0.1.10 lib/integrity/notifier.rb
integrity-integrity-0.1.10 lib/integrity/notifier.rb
integrity-0.1.11 lib/integrity/notifier.rb
integrity-0.1.10 lib/integrity/notifier.rb