Sha256: 62c658f74ca6b9f78c7e39a2945829a03faf858778b9d7c58daa71a06c91109b

Contents?: true

Size: 1.84 KB

Versions: 6

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].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

        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

6 entries across 6 versions & 2 rubygems

Version Path
adhearsion-1.0.3 lib/adhearsion/voip/asterisk/config_manager.rb
adhearsion-1.0.2 lib/adhearsion/voip/asterisk/config_manager.rb
adhearsion-cw-1.0.2.3 lib/adhearsion/voip/asterisk/config_manager.rb
adhearsion-cw-1.0.2.2 lib/adhearsion/voip/asterisk/config_manager.rb
adhearsion-cw-1.0.2.1 lib/adhearsion/voip/asterisk/config_manager.rb
adhearsion-1.0.1 lib/adhearsion/voip/asterisk/config_manager.rb