Sha256: b3b41c9216f92659efbe283ddde8e897d680fc614275fb0f93266fd642957fa4

Contents?: true

Size: 1.36 KB

Versions: 16

Compression:

Stored size: 1.36 KB

Contents

module Adhearsion
  module VoIP
    module CallRouting
      class Rule
        attr_reader :patterns, :providers, :options
        
        def initialize(*args, &block)
          @options   = args.pop
          @patterns  = Array(args)
          @providers = Array(options[:to])
        end
      end
      
      class RuleSet < Array
        def [](index)
          case index
          when String
            detect do |rule|
              rule.patterns.any? do |pattern|
                index =~ pattern
              end
            end
          else
            super
          end
        end
      end
      
      class Router
        class << self
          attr_accessor :rules
          
          def define(&block)
            returning new do |router|
              router.define(&block)
              rules.concat router.rules
            end
          end
          
          def calculate_route_for(end_point)
            if rule = rules[end_point.to_s]
              rule.providers
            end
          end
        end
        
        self.rules ||= RuleSet.new
        
        attr_reader :rules
        def initialize
          @rules = []
        end
        
        def define(&block)
          instance_eval(&block)
        end
        
        def route(*args, &block)
          rules << Rule.new(*args, &block)
        end
      end
    end
  end
end

Version data entries

16 entries across 16 versions & 7 rubygems

Version Path
eric-adhearsion-0.7.999 lib/adhearsion/voip/call_routing.rb
eric-adhearsion-0.8.0 lib/adhearsion/voip/call_routing.rb
jicksta-adhearsion-0.7.999 lib/adhearsion/voip/call_routing.rb
jicksta-adhearsion-0.8.0 lib/adhearsion/voip/call_routing.rb
jicksta-adhearsion-0.8.2 lib/adhearsion/voip/call_routing.rb
jicksta-adhearsion-0.8.3 lib/adhearsion/voip/call_routing.rb
kenwiesner-adhearsioncw-0.8.3 lib/adhearsion/voip/call_routing.rb
mtrudel-adhearsion-0.8.3 lib/adhearsion/voip/call_routing.rb
sant0sk1-adhearsion-0.7.999 lib/adhearsion/voip/call_routing.rb
sevenscale-adhearsion-0.7.1000 lib/adhearsion/voip/call_routing.rb
sevenscale-adhearsion-0.7.1003 lib/adhearsion/voip/call_routing.rb
sevenscale-adhearsion-0.8.0 lib/adhearsion/voip/call_routing.rb
adhearsion-0.8.3 lib/adhearsion/voip/call_routing.rb
adhearsion-0.8.1 lib/adhearsion/voip/call_routing.rb
adhearsion-0.8.2 lib/adhearsion/voip/call_routing.rb
adhearsion-0.8.0 lib/adhearsion/voip/call_routing.rb