Sha256: 55a6260b31824ac87893e4618b80f8f0581bd89c45901973d42d157f12ddceaf

Contents?: true

Size: 1.84 KB

Versions: 5

Compression:

Stored size: 1.84 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 execute(read_command)
          normalized_file.split(/^\[([-_\w]+)\]$/)[1..-1].enum_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

        def execute(command)
          %x[command]
        end

        def read_command
          "cat #{filename}"
        end

      end
    end
  end
end

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

Version data entries

5 entries across 5 versions & 2 rubygems

Version Path
adhearsion-1.0.0 lib/adhearsion/voip/asterisk/config_manager.rb
rene-adhearsion-0.8.6 lib/adhearsion/voip/asterisk/config_manager.rb
adhearsion-0.8.6 lib/adhearsion/voip/asterisk/config_manager.rb
adhearsion-0.8.5 lib/adhearsion/voip/asterisk/config_manager.rb
adhearsion-0.8.4 lib/adhearsion/voip/asterisk/config_manager.rb