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