Sha256: b7a53c65cc7bbc7c4a60adb3c8a5f8e64b5ba4f7d37e5a7d0c7e68f01b8c5920

Contents?: true

Size: 1.79 KB

Versions: 8

Compression:

Stored size: 1.79 KB

Contents

require 'enumerator'
module Adhearsion
  module VoIP
    module Asterisk
      class ConfigurationManager

        class << self
          def normalize_configuration(file_contents)
            # cat sip.conf | sed -e 's/\s*;.*$//g' | sed -e '/^;.*$/d' | sed -e '/^\s*$/d'
            file_contents.split(/\n+/).map do |line|
              line.sub(/;.+$/, '').strip
            end.join("\n").squeeze("\n")
          end
        end

        attr_reader :filename

        def initialize(filename)
          @filename = filename
        end

        def sections
          @sections ||= read_configuration
        end

        def [](section_name)
          result = sections.find { |(name, *rest)| section_name == name }
          result.last if result
        end

        def delete_section(section_name)
          sections.reject! { |(name, *rest)| section_name == name }
        end

        def new_section(name, properties={})
          sections << [name, properties]
        end

        private

        def read_configuration
          normalized_file = self.class.normalize_configuration File.open(@filename, 'r'){|f| f.read}
          sections = normalized_file.split(/^\[([-_\w]+)\]$/)[1..-1]
          return [] if sections.nil?
          sections.each_slice(2).map do |(name,properties)|
            [name, hash_from_properties(properties)]
          end
        end

        def hash_from_properties(properties)
          properties.split(/\n+/).inject({}) do |property_hash,property|
            all, name, value = *property.match(/^\s*([^=]+?)\s*=\s*(.+)\s*$/)
            next property_hash unless name && value
            property_hash[name] = value
            property_hash
          end
        end
      end
    end
  end
end

# Read a file: cat a file
# Parse a file: separate into a two dimensional hash

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
adhearsion-1.2.6 lib/adhearsion/voip/asterisk/config_manager.rb
adhearsion-1.2.5 lib/adhearsion/voip/asterisk/config_manager.rb
adhearsion-1.2.4 lib/adhearsion/voip/asterisk/config_manager.rb
adhearsion-1.2.3 lib/adhearsion/voip/asterisk/config_manager.rb
adhearsion-1.2.1 lib/adhearsion/voip/asterisk/config_manager.rb
adhearsion-1.2.0 lib/adhearsion/voip/asterisk/config_manager.rb
adhearsion-1.1.1 lib/adhearsion/voip/asterisk/config_manager.rb
adhearsion-1.1.0 lib/adhearsion/voip/asterisk/config_manager.rb