Sha256: 8d31f514c9a8fedd159ff8c7d1c09c8692ccc54060151d77f2195eca1b1462f1

Contents?: true

Size: 1.44 KB

Versions: 6

Compression:

Stored size: 1.44 KB

Contents

module Integrity
  class Notifier
    include DataMapper::Resource
    
    property :id,      Serial
    property :name,    String,   :nullable => false
    property :config,  Yaml,     :nullable => false, :lazy => false
    
    belongs_to :project, :class_name => "Integrity::Project"
    
    validates_is_unique :name, :scope => :project_id
    validates_present :project_id
    
    def self.available
      @available ||= constants.map { |name| const_get(name) }.select { |notifier| valid_notifier?(notifier) }
    end
    
    def self.enable_notifiers(project, enabled, config={})
      all(:project_id => project).destroy!
      list_of_enabled_notifiers(enabled).each do |name|
        create! :project_id => project, :name => name, :config => config[name]
      end
      
    end
    
    def notify_of_build(build)
      to_const.notify_of_build(build, config)
    end
    
    private
      
      def to_const
        self.class.module_eval(name)
      end
      
      def self.list_of_enabled_notifiers(names)
        [*names].reject { |n| n.nil? }
      end
      private_class_method :list_of_enabled_notifiers

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

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

Dir["#{File.dirname(__FILE__)}/notifier/*.rb"].each &method(:require)

Version data entries

6 entries across 6 versions & 4 rubygems

Version Path
brycethornton-integrity-0.1.7.1 lib/integrity/notifier.rb
foca-integrity-0.1.6 lib/integrity/notifier.rb
foca-integrity-0.1.7 lib/integrity/notifier.rb
foca-integrity-0.1.8 lib/integrity/notifier.rb
myronmarston-integrity-0.1.7.1 lib/integrity/notifier.rb
integrity-0.1.8 lib/integrity/notifier.rb