lib/anvl.rb in anvl-0.1.3 vs lib/anvl.rb in anvl-0.2.0
- old
+ new
@@ -1,116 +1,7 @@
+require 'anvl/element'
+require 'anvl/document'
module ANVL
- class Document # < Hash
-
- def self.parse str
- anvl = ANVL::Document.new str
- anvl
- end
-
- attr_reader :entries
-
- def initialize obj = nil
- @entries = Hash.new { |h,k| h[k] = [] }
-
- case obj
- when Hash
- obj.each do |key, value|
- @entries[key.to_sym] = value
- end
- when String
- lines = obj.gsub(/\s?\n\s+/, ' ').split("\n")
-
- lines.each_with_index do |str, i|
- case str
- when /^#/
- parse_comment str, i
- when /:/
- parse_entry str, i
- else # something is wrong..
- nil
- end
- end
-
- end if obj
-
- add_entries_methods
-
- gc!
- end
-
- def to_s
- gc!
- @entries.map do |key, value|
- if value.is_a? Array
- value.map do |v|
- "#{key}: #{v.to_s.gsub(/\n/, "\n ")}"
- end
- else
- "#{key}: #{value.to_s.gsub(/\n/, "\n ")}"
- end
- end.join "\n"
- end
-
- def to_h
- gc!
- @entries
- end
-
- def [] key
- return @entries[key]
- end
-
- def []= key, value
- value = [value] unless value.is_a? Array
- @entries[key] = value
- end
-
- def push hash
- hash.each do |key, value|
- @entries[key] = [@entries[key]] unless @entries[key].is_a? Array
- if value.is_a? Array
- value.each do |v|
- @entries[key] << v
- end
- else
- @entries[key] << value
- end
- end
- gc!
- @entries
- end
- alias_method :'<<', :push
-
- private
-
- def parse_comment str, line=0
-
- end
-
- def parse_entry str, line=0
- key, value = str.split ":", 2
- @entries[key.to_sym] << value.strip
- end
-
- def add_entries_methods
- @entries.public_methods(false).reject { |x| self.respond_to? x }.each do |meth|
- (class << self; self; end).class_eval do
- define_method meth do |*args|
- @entries.send meth, *args
- end
- end
- end
- end
-
- def gc!
- @entries.delete_if { |key, value| value.nil? or (value.is_a? Array and value.empty?) }
-
- @entries.each do |key, value|
- @entries[key] = value.first if value.is_a? Array and value.length == 1
- end
- end
- end
-
def self.parse *args
Document.parse *args
end
def self.to_anvl *args