lib/adhearsion/voip/asterisk/config_manager.rb in adhearsion-0.8.3 vs lib/adhearsion/voip/asterisk/config_manager.rb in adhearsion-0.8.4

- old
+ new

@@ -1,68 +1,68 @@ 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