Sha256: 76f11c05ea68c35a31a7ecebe147f189cee76e0e56c287236a69b97b7e54d5e9

Contents?: true

Size: 1.18 KB

Versions: 1

Compression:

Stored size: 1.18 KB

Contents

require 'active_support'
require 'active_support/core_ext/string'

require 'radiodan/logging'
require 'radiodan/player'
require 'radiodan/state'

class Radiodan
class Builder
  attr_reader :middleware, :player
    
  def initialize(&blk)
    @middleware = []
    @player = Player.new
    
    yield(self)
  end

  def use(klass, *config)
    @middleware << register(klass, *config)
  end
  
  def adapter(klass, *config)
    @player.adapter = register(klass, *config)
  end
  
  def state(options)
    @player.state = State.new(options) if @player
  end
  
  def log(log)
    Logging.output = log
  end
  
  def call_middleware!
    @middleware.each{ |m| m.call(@player) }
  end

  private
  def register(klass, *config)
    klass = klass.to_s

    begin
      radio_klass = Radiodan.const_get(klass.classify)
    rescue NameError => e
      klass_path ||= false
      raise if klass_path
      
      # attempt to require from middleware
      klass_path = Pathname.new("#{File.dirname(__FILE__)}/middleware/#{klass.underscore}.rb")
      require klass_path if klass_path.exist?
      
      retry
    end

    if config.empty?
      radio_klass.new
    else
      radio_klass.new(*config)
    end
  end
end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
radiodan-0.0.1 lib/radiodan/builder.rb