anvl 0.1.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.3
1
+ 0.2.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{anvl}
8
- s.version = "0.1.3"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Chris Beer"]
12
- s.date = %q{2010-12-09}
12
+ s.date = %q{2010-12-12}
13
13
  s.email = %q{chris@cbeer.info}
14
14
  s.extra_rdoc_files = [
15
15
  "LICENSE.txt",
@@ -25,8 +25,13 @@ Gem::Specification.new do |s|
25
25
  "VERSION",
26
26
  "anvl.gemspec",
27
27
  "lib/anvl.rb",
28
+ "lib/anvl/document.rb",
29
+ "lib/anvl/element.rb",
30
+ "lib/anvl/erc.rb",
28
31
  "test/helper.rb",
29
- "test/test_anvl.rb"
32
+ "test/test_anvl.rb",
33
+ "test/test_element.rb",
34
+ "test/test_erc.rb"
30
35
  ]
31
36
  s.homepage = %q{http://github.com/cbeer/anvl}
32
37
  s.licenses = ["MIT"]
@@ -35,7 +40,9 @@ Gem::Specification.new do |s|
35
40
  s.summary = %q{Ruby implementation of A Name-Value Language (ANVL)}
36
41
  s.test_files = [
37
42
  "test/helper.rb",
38
- "test/test_anvl.rb"
43
+ "test/test_anvl.rb",
44
+ "test/test_element.rb",
45
+ "test/test_erc.rb"
39
46
  ]
40
47
 
41
48
  if s.respond_to? :specification_version then
@@ -1,115 +1,6 @@
1
+ require 'anvl/element'
2
+ require 'anvl/document'
1
3
  module ANVL
2
- class Document # < Hash
3
-
4
- def self.parse str
5
- anvl = ANVL::Document.new str
6
- anvl
7
- end
8
-
9
- attr_reader :entries
10
-
11
- def initialize obj = nil
12
- @entries = Hash.new { |h,k| h[k] = [] }
13
-
14
- case obj
15
- when Hash
16
- obj.each do |key, value|
17
- @entries[key.to_sym] = value
18
- end
19
- when String
20
- lines = obj.gsub(/\s?\n\s+/, ' ').split("\n")
21
-
22
- lines.each_with_index do |str, i|
23
- case str
24
- when /^#/
25
- parse_comment str, i
26
- when /:/
27
- parse_entry str, i
28
- else # something is wrong..
29
- nil
30
- end
31
- end
32
-
33
- end if obj
34
-
35
- add_entries_methods
36
-
37
- gc!
38
- end
39
-
40
- def to_s
41
- gc!
42
- @entries.map do |key, value|
43
- if value.is_a? Array
44
- value.map do |v|
45
- "#{key}: #{v.to_s.gsub(/\n/, "\n ")}"
46
- end
47
- else
48
- "#{key}: #{value.to_s.gsub(/\n/, "\n ")}"
49
- end
50
- end.join "\n"
51
- end
52
-
53
- def to_h
54
- gc!
55
- @entries
56
- end
57
-
58
- def [] key
59
- return @entries[key]
60
- end
61
-
62
- def []= key, value
63
- value = [value] unless value.is_a? Array
64
- @entries[key] = value
65
- end
66
-
67
- def push hash
68
- hash.each do |key, value|
69
- @entries[key] = [@entries[key]] unless @entries[key].is_a? Array
70
- if value.is_a? Array
71
- value.each do |v|
72
- @entries[key] << v
73
- end
74
- else
75
- @entries[key] << value
76
- end
77
- end
78
- gc!
79
- @entries
80
- end
81
- alias_method :'<<', :push
82
-
83
- private
84
-
85
- def parse_comment str, line=0
86
-
87
- end
88
-
89
- def parse_entry str, line=0
90
- key, value = str.split ":", 2
91
- @entries[key.to_sym] << value.strip
92
- end
93
-
94
- def add_entries_methods
95
- @entries.public_methods(false).reject { |x| self.respond_to? x }.each do |meth|
96
- (class << self; self; end).class_eval do
97
- define_method meth do |*args|
98
- @entries.send meth, *args
99
- end
100
- end
101
- end
102
- end
103
-
104
- def gc!
105
- @entries.delete_if { |key, value| value.nil? or (value.is_a? Array and value.empty?) }
106
-
107
- @entries.each do |key, value|
108
- @entries[key] = value.first if value.is_a? Array and value.length == 1
109
- end
110
- end
111
- end
112
-
113
4
  def self.parse *args
114
5
  Document.parse *args
115
6
  end
@@ -0,0 +1,130 @@
1
+ module ANVL
2
+ class Document # < Hash
3
+ def self.parse str
4
+ anvl = self.new str
5
+ anvl
6
+ end
7
+
8
+ attr_reader :entries
9
+
10
+ def initialize obj = nil
11
+ @entries = Array.new
12
+
13
+ case obj
14
+ when Hash
15
+ self.push obj
16
+
17
+ when String
18
+ lines = obj.gsub(/\s?\n\s+/, ' ').split("\n")
19
+
20
+ lines.each_with_index do |str, i|
21
+ case str
22
+ when /^#/
23
+ parse_comment str, i
24
+ when /:/
25
+ parse_entry str, i
26
+ else # something is wrong..
27
+ nil
28
+ end
29
+ end
30
+
31
+ end if obj
32
+
33
+ add_entries_methods
34
+
35
+ gc!
36
+ end
37
+
38
+ def to_s
39
+ gc!
40
+ @entries.map do |obj|
41
+ obj.to_anvl
42
+ end.join "\n"
43
+ end
44
+
45
+ def to_h
46
+ gc!
47
+ h = {}
48
+
49
+ @entries.map do |obj|
50
+ h[(obj.display_label || obj.label).to_sym] ||= []
51
+ h[(obj.display_label || obj.label).to_sym] << obj.to_s
52
+ end
53
+
54
+ h.each do |label, value|
55
+ h[label] = value.first if value.length == 1
56
+ end
57
+
58
+ h
59
+ end
60
+
61
+ def [] display_label, args = {}
62
+ v = @entries.select { |x| x =~ display_label }
63
+ v &&= v.map { |x| x.to_s } unless args[:raw]
64
+ v &&= v.first if v.length == 1
65
+ v
66
+ end
67
+ alias_method :fetch, :[]
68
+
69
+ def []= display_label, value, append = false
70
+ label = convert_label display_label
71
+ value = [value] unless value.is_a? Array
72
+ @entries.delete_if { |x| x =~ label } unless append
73
+ value.each do |v|
74
+ case v
75
+ when Hash
76
+ @entries << element_class.new({ :document => self, :label => label, :value => v }.merge(v))
77
+ else
78
+ @entries << element_class.new({ :document => self, :label => label, :value => v })
79
+ end
80
+ end
81
+ end
82
+
83
+ alias_method :store, :[]=
84
+
85
+ def push hash
86
+ hash.each do |label, value|
87
+ self.store label, value, true
88
+ end
89
+ gc!
90
+ @entries
91
+ end
92
+ alias_method :'<<', :push
93
+
94
+ protected
95
+ def element_class
96
+ ANVL::Element
97
+ end
98
+
99
+ def parse_comment str, line=0
100
+
101
+ end
102
+
103
+ def parse_entry str, line=0
104
+ label, value = str.split ":", 2
105
+ self.store label, value, true
106
+ end
107
+
108
+ def add_entries_methods
109
+ @entries.reject { |x| self.respond_to? x[:label] }.each do |obj|
110
+ (class << self; self; end).class_eval do
111
+ define_method obj.label do |*args|
112
+ @entries[obj.label]
113
+ end
114
+ end
115
+ end
116
+ end
117
+
118
+ def gc!
119
+ end
120
+
121
+ def format_value str = ''
122
+ str = str.to_s
123
+ str &&= str.gsub(/\n/, "\n ")
124
+ end
125
+
126
+ def convert_label label
127
+ label.to_s
128
+ end
129
+ end
130
+ end
@@ -0,0 +1,61 @@
1
+ module ANVL
2
+ class Element
3
+ attr_reader :document, :label, :display_label, :value
4
+ def initialize args
5
+ @document = args[:document]
6
+ @display_label = args[:display_label] || convert_label(args[:label])
7
+ @label = convert_label(args[:label])
8
+ @value = args[:value].to_s.strip
9
+ end
10
+
11
+ def [] key
12
+ self.send key.to_sym
13
+ end
14
+
15
+ def to_s
16
+ str = @value
17
+ str &&= str.gsub(/\s*\n\s+/, ' ')
18
+
19
+ str
20
+ end
21
+
22
+ def to_anvl
23
+ "#{@display_label || @label}:#{format_value_for_anvl}"
24
+ end
25
+
26
+ def <=> obj
27
+ @value <=> obj
28
+ end
29
+
30
+ def == obj
31
+ case obj
32
+ when String
33
+ return @value == obj if obj.is_a? String
34
+ when Element
35
+ @label == obj.label && @value = obj.display_label
36
+ else
37
+ false
38
+ end
39
+ end
40
+
41
+ def =~ str
42
+ str = str.to_s
43
+ str == @label or str == @display_label or convert_label(str) == @label
44
+ end
45
+
46
+ def push value
47
+ @document.store @display_label, value, true
48
+ end
49
+ alias_method :'<<', :push
50
+
51
+ private
52
+ def format_value_for_anvl
53
+ " " + @value.gsub(/\n/, "\n ")
54
+ end
55
+
56
+ def convert_label label
57
+ label
58
+ end
59
+
60
+ end
61
+ end
@@ -0,0 +1,109 @@
1
+ require 'anvl'
2
+ module ANVL
3
+ class Erc < Document
4
+ STORY_TO_OFFSET = { 'erc' => 0, 'about-erc' => 10, 'support-erc' => 20, 'meta-erc' => 30 }
5
+
6
+ LABEL_TO_SYN = {
7
+ 'who' => 'h1', 'what' => 'h2', 'when' => 'h3', 'where' => 'h4', 'how' => 'h5',
8
+ 'about-who' => 'h11', 'about-what' => 'h12', 'about-when' => 'h13', 'about-where' => 'h14', 'about-how' => 'h15',
9
+ 'support-who' => 'h21', 'support-what' => 'h22', 'support-when' => 'h23', 'support-where' => 'h24',
10
+ 'meta-who' => 'h31', 'meta-what' => 'h32', 'meta-when' => 'h33', 'meta-where' => 'h34'
11
+ }
12
+
13
+ SYN_TO_KERNEL = LABEL_TO_SYN.invert
14
+
15
+
16
+ class Element < ANVL::Element
17
+ def to_s
18
+ str = super
19
+ str &&= format_initial_comma_to_recover_word_order str
20
+ str &&= decode_element_value_encoding str
21
+ str
22
+ end
23
+
24
+ def =~ str
25
+ bool = super
26
+
27
+ label = convert_label str
28
+ bool ||= (label =~ Regexp.new("\\(#{Regexp.escape(@label)}\\)"))
29
+ end
30
+
31
+ private
32
+ def format_value_for_anvl
33
+ super.sub(/^\s+([,;\|])/, '\1')
34
+ end
35
+
36
+ def format_initial_comma_to_recover_word_order str, sort_point = ','
37
+ return str unless str[0, 1] == sort_point
38
+ arr = str.split(sort_point)
39
+ arr.shift
40
+
41
+ insig = nil
42
+ if str[-1,1] == sort_point
43
+ insig = arr.pop.strip
44
+ end
45
+
46
+ word = arr.pop
47
+ arr = [arr.join ","]
48
+ arr.unshift word
49
+ arr.unshift insig
50
+
51
+ arr.compact.map(&:strip).reject { |x| x.empty?}.join " "
52
+ end
53
+
54
+ def decode_element_value_encoding str
55
+ h = { '%sp' => ' ', '%ex' => '!', '%dq' => '"', '%ns' => '#', '%do' => '$', '%pe' => '%', '%am' => '&', '%sq' => '\'', '%op' => '(', '%cp' => ')', '%as' => '*', '%pl' => '+', '%co' => ',', '%sl' => '/', '%cn' => ':', '%sc' => ';', '%lt' => '<', '%eq' => '=', '%gt' => '>', '%qu' => '?', '%at' => '@', '%ox' => '[', '%ls' => '\\', '%cx' => ']', '%vb' => '|', '%nu' => "\0", '%%' => '%' }
56
+ s = str.dup
57
+ h.each do |key, value|
58
+ s.gsub! key, value
59
+ end
60
+ s
61
+ end
62
+
63
+ def convert_label label
64
+ str = label.to_s.downcase.gsub(' ', '_')
65
+
66
+ str = ANVL::Erc::LABEL_TO_SYN[str] if ANVL::Erc::LABEL_TO_SYN[str]
67
+
68
+ str
69
+ end
70
+
71
+ end
72
+
73
+ def []= display_label, value, append = false
74
+ if value[0,1] != '|' and STORY_TO_OFFSET[display_label] and !value.strip.empty?
75
+ process_abbr_form display_label, value
76
+ elsif value[0,1] != ';' and value =~ /;/
77
+ value.split(';').each do |v|
78
+ self.store display_label, v, true
79
+ end
80
+ else
81
+ super
82
+ end
83
+ end
84
+ alias_method :store, :[]=
85
+
86
+ def complete?
87
+ !(self.fetch(:h1).empty? or self.fetch(:h2).empty? or self.fetch(:h3).empty? or self.fetch(:h4).empty?) ||
88
+ !(self.fetch(:h11).empty? or self.fetch(:h12).empty? or self.fetch(:h13).empty? or self.fetch(:h14).empty?) ||
89
+ !(self.fetch(:h21).empty? or self.fetch(:h22).empty? or self.fetch(:h23).empty? or self.fetch(:h24).empty?) ||
90
+ !(self.fetch(:h31).empty? or self.fetch(:h32).empty? or self.fetch(:h33).empty? or self.fetch(:h34).empty?)
91
+ end
92
+
93
+ protected
94
+
95
+ def element_class
96
+ ANVL::Erc::Element
97
+ end
98
+
99
+ def process_abbr_form display_label, value
100
+ offset = STORY_TO_OFFSET[display_label]
101
+ elements = value.split('|')
102
+ elements.each_with_index do |e, i|
103
+ next if e.strip.empty?
104
+ self.store "h#{offset + i + 1}", e.strip
105
+ end
106
+ end
107
+
108
+ end
109
+ end
@@ -38,7 +38,8 @@ a: 2'
38
38
  assert_equal({:a => 'a' }, h.to_h)
39
39
  h[:a] = ['a', 'b']
40
40
  assert_equal({:a => ['a', 'b'] }, h.to_h)
41
- h[:a] << 'c'
41
+ h[:a].inspect
42
+ h.store :a, 'c', true
42
43
  assert_equal({:a => ['a', 'b', 'c'] }, h.to_h)
43
44
  assert_equal(['a', 'b', 'c'], h[:a])
44
45
 
@@ -49,10 +50,10 @@ a: 2'
49
50
  assert_equal({:a => ['a', 'b', 'c', 'd'] }, h.to_h)
50
51
 
51
52
  h << { :c => 1 }
52
- assert_equal(1, h[:c])
53
+ assert_equal("1", h[:c])
53
54
 
54
55
  h << { :c => 2 }
55
- assert_equal([1, 2], h[:c])
56
+ assert_equal(["1", "2"], h[:c])
56
57
 
57
58
  str = h.to_s
58
59
  assert_match(/^a: a$/, str)
@@ -76,9 +77,33 @@ a: 2'
76
77
 
77
78
  def test_fmt_first_draft
78
79
  str = ANVL.to_anvl({:entry => [""], :who => ['Gilbert, W.S. | Sullivan, Arthur'], :what => ["The Yeomen of the Guard"], :"when/created" => [1888]})
80
+ h = ANVL.parse({:entry => [""], :who => ['Gilbert, W.S. | Sullivan, Arthur'], :what => ["The Yeomen of the Guard"], :"when/created" => [1888]})
79
81
  assert_match(/entry:/, str)
80
82
  assert_match(/who: Gilbert, W.S. | Sullivan, Arthur/, str)
81
83
  assert_match(/what: The Yeomen of the Guard/, str)
82
84
  assert_match(/when\/created: 1888/, str)
83
85
  end
86
+
87
+ def test_display_label
88
+ h = ANVL::Document.new
89
+ h['a'] = {:display_label => 'A', :value => '123' }
90
+ assert_equal("123", h['a'])
91
+
92
+ assert_match(/A:/, h.to_s)
93
+ end
94
+
95
+ def test_str_vs_sym
96
+ str = 'erc:
97
+ who: Lederberg, Joshua
98
+ what: Studies of Human Families for Genetic Linkage
99
+ when: 1974
100
+ where: http://profiles.nlm.nih.gov/BB/AA/TT/tt.pdf
101
+ note: This is an arbitrary note inside a
102
+ small descriptive record.'
103
+ h = ANVL::Document.parse str
104
+
105
+ assert_equal("Lederberg, Joshua", h['who'])
106
+ assert_equal("Lederberg, Joshua", h[:who])
107
+ end
108
+
84
109
  end
@@ -0,0 +1,23 @@
1
+ require 'helper'
2
+
3
+ class TestErcElement < Test::Unit::TestCase
4
+ def test_basic
5
+ h = ANVL::Erc::Element.new :label => 'abc', :value => '123'
6
+ assert_equal('123', h.to_s)
7
+ assert_equal('abc: 123', h.to_anvl)
8
+ end
9
+
10
+ def test_initial_comma_to_recover_natural_word_order
11
+ h = ANVL::Erc::Element.new :label => 'abc', :value => ', van Gogh, Vincent'
12
+ assert_equal('Vincent van Gogh', h.to_s)
13
+ assert_equal('abc:, van Gogh, Vincent', h.to_anvl)
14
+
15
+ h = ANVL::Erc::Element.new :label => 'abc', :value => ', Howell, III, PhD, 1922-1987, Thurston'
16
+ assert_equal('Thurston Howell, III, PhD, 1922-1987', h.to_s)
17
+ assert_equal('abc:, Howell, III, PhD, 1922-1987, Thurston', h.to_anvl)
18
+
19
+ h = ANVL::Erc::Element.new :label => 'abc', :value => ', McCartney, Paul, Sir,'
20
+ assert_equal('Sir Paul McCartney', h.to_s)
21
+ assert_equal('abc:, McCartney, Paul, Sir,', h.to_anvl)
22
+ end
23
+ end
@@ -0,0 +1,134 @@
1
+ require 'helper'
2
+ require 'anvl/erc'
3
+
4
+ class TestErc < Test::Unit::TestCase
5
+ def test_parse_empty
6
+ h = ANVL::Erc.parse ''
7
+ assert_equal(0, h.entries.length)
8
+ end
9
+
10
+ def test_basic
11
+ str = 'erc:
12
+ who: Gibbon, Edward
13
+ what: The Decline and Fall of the Roman Empire
14
+ when: 1781
15
+ where: http://www.ccel.org/g/gibbon/decline/'
16
+
17
+ h = ANVL::Erc.parse str
18
+ assert_equal("", h[:erc])
19
+ assert_equal("Gibbon, Edward", h[:who])
20
+ assert_equal("The Decline and Fall of the Roman Empire", h[:what])
21
+ assert_equal("1781", h[:when])
22
+ assert_equal("http://www.ccel.org/g/gibbon/decline/", h[:where])
23
+ end
24
+
25
+ def test_complete
26
+ str = 'erc:
27
+ what: The Digital Dilemma
28
+ where: http://books.nap.edu/html/digital%5Fdilemma
29
+ '
30
+
31
+ h = ANVL::Erc.parse str
32
+ assert_equal(false, h.complete?)
33
+
34
+ h[:who] = '---'
35
+ h[:when] = '---'
36
+ assert(h.complete?)
37
+ end
38
+
39
+ def test_complete_meta
40
+ str = 'meta-erc: NLM | pm9546494 | 19980418
41
+ | http://ark.nlm.nih.gov/12025/pm9546494??'
42
+ h = ANVL::Erc.parse str
43
+ assert(h.complete?)
44
+ end
45
+
46
+ def test_missing_about
47
+ str = 'about-erc: | Bispectrum ; Nonlinearity ; Epilepsy
48
+ ; Cooperativity ; Subdural ; Hippocampus'
49
+ h = ANVL::Erc.parse str
50
+ assert_contains(h['about-what'], 'Bispectrum')
51
+ assert_contains(h['about-what'], 'Nonlinearity')
52
+ assert_contains(h['about-what'], 'Epilepsy')
53
+ assert_contains(h['about-what'], 'Cooperativity')
54
+ assert_contains(h['about-what'], 'Subdural')
55
+ assert_contains(h['about-what'], 'Hippocampus')
56
+ end
57
+
58
+ def test_abbr
59
+ str = 'erc: Gibbon, Edward | The Decline and Fall of the Roman Empire
60
+ | 1781 | http://www.ccel.org/g/gibbon/decline/'
61
+
62
+ h = ANVL::Erc.parse str
63
+ assert_equal("Gibbon, Edward", h[:who])
64
+ assert_equal("The Decline and Fall of the Roman Empire", h[:what])
65
+ assert_equal("1781", h[:when])
66
+ assert_equal("http://www.ccel.org/g/gibbon/decline/", h[:where])
67
+ end
68
+
69
+ def test_multiple_values
70
+ str = 'erc:
71
+ who: Smith, J; Wong, D; Khan, H'
72
+ h = ANVL::Erc.parse str
73
+
74
+ assert_contains(h[:who], 'Smith, J')
75
+ assert_contains(h[:who], 'Wong, D')
76
+ assert_contains(h[:who], 'Khan, H')
77
+ end
78
+
79
+ def test_intl
80
+ str = 'erc:
81
+ who: Lederberg, Joshua
82
+ h2: Studies of Human Families for Genetic Linkage'
83
+ h = ANVL::Erc.parse str
84
+ assert_equal("Lederberg, Joshua", h[:who])
85
+ assert_equal("Lederberg, Joshua", h['who'])
86
+ assert_equal("Lederberg, Joshua", h[:h1])
87
+ assert_equal("Lederberg, Joshua", h['wer(h1)'])
88
+ assert_equal("Studies of Human Families for Genetic Linkage", h[:h2])
89
+ assert_equal("Studies of Human Families for Genetic Linkage", h[:what])
90
+ assert_equal("Studies of Human Families for Genetic Linkage", h['was(h2)'])
91
+ end
92
+
93
+ def test_label_structure
94
+ str = 'erc:'
95
+ h = ANVL::Erc.parse str
96
+
97
+ h['marc_856'] = 'abc'
98
+
99
+ assert_equal("abc", h['marc_856'])
100
+ h['MARC 856'] = '123'
101
+
102
+ assert_equal("123", h['marc_856'])
103
+ end
104
+
105
+ def test_initial_comma
106
+ str = 'erc:
107
+ who:, van Gogh, Vincent
108
+ who:, Howell, III, PhD, 1922-1987, Thurston
109
+ who:, Acme Rocket Factory, Inc., The
110
+ who:, Mao Tse Tung
111
+ who:, McCartney, Pat, Ms,
112
+ who:, McCartney, Paul, Sir,
113
+ who:, McCartney, Petra, Dr,
114
+ what:, Health and Human Services, United States Government
115
+ Department of, The,'
116
+
117
+ h = ANVL::Erc.parse str
118
+ assert_contains(h[:who], "Vincent van Gogh")
119
+ assert_contains(h[:who], "Thurston Howell, III, PhD, 1922-1987")
120
+ assert_contains(h[:who], "The Acme Rocket Factory, Inc.")
121
+ assert_contains(h[:who], "Mao Tse Tung")
122
+ assert_contains(h[:who], "Ms Pat McCartney")
123
+ assert_contains(h[:who], "Sir Paul McCartney")
124
+ assert_contains(h[:who], "Dr Petra McCartney")
125
+ assert_equal(h[:what], "The United States Government Department of Health and Human Services")
126
+ end
127
+
128
+ def test_value_encoding
129
+ str = 'erc:
130
+ who: %sp%ex%dq'
131
+ h = ANVL::Erc.parse str
132
+ assert_contains(" !\"", h[:who])
133
+ end
134
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: anvl
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 3
10
- version: 0.1.3
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Chris Beer
@@ -15,10 +15,13 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-12-09 00:00:00 -05:00
18
+ date: 2010-12-12 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
+ type: :development
23
+ prerelease: false
24
+ name: shoulda
22
25
  version_requirements: &id001 !ruby/object:Gem::Requirement
23
26
  none: false
24
27
  requirements:
@@ -28,11 +31,11 @@ dependencies:
28
31
  segments:
29
32
  - 0
30
33
  version: "0"
31
- name: shoulda
32
34
  requirement: *id001
35
+ - !ruby/object:Gem::Dependency
33
36
  type: :development
34
37
  prerelease: false
35
- - !ruby/object:Gem::Dependency
38
+ name: bundler
36
39
  version_requirements: &id002 !ruby/object:Gem::Requirement
37
40
  none: false
38
41
  requirements:
@@ -44,11 +47,11 @@ dependencies:
44
47
  - 0
45
48
  - 0
46
49
  version: 1.0.0
47
- name: bundler
48
50
  requirement: *id002
51
+ - !ruby/object:Gem::Dependency
49
52
  type: :development
50
53
  prerelease: false
51
- - !ruby/object:Gem::Dependency
54
+ name: jeweler
52
55
  version_requirements: &id003 !ruby/object:Gem::Requirement
53
56
  none: false
54
57
  requirements:
@@ -60,11 +63,11 @@ dependencies:
60
63
  - 5
61
64
  - 1
62
65
  version: 1.5.1
63
- name: jeweler
64
66
  requirement: *id003
67
+ - !ruby/object:Gem::Dependency
65
68
  type: :development
66
69
  prerelease: false
67
- - !ruby/object:Gem::Dependency
70
+ name: rcov
68
71
  version_requirements: &id004 !ruby/object:Gem::Requirement
69
72
  none: false
70
73
  requirements:
@@ -74,10 +77,7 @@ dependencies:
74
77
  segments:
75
78
  - 0
76
79
  version: "0"
77
- name: rcov
78
80
  requirement: *id004
79
- type: :development
80
- prerelease: false
81
81
  description:
82
82
  email: chris@cbeer.info
83
83
  executables: []
@@ -97,8 +97,13 @@ files:
97
97
  - VERSION
98
98
  - anvl.gemspec
99
99
  - lib/anvl.rb
100
+ - lib/anvl/document.rb
101
+ - lib/anvl/element.rb
102
+ - lib/anvl/erc.rb
100
103
  - test/helper.rb
101
104
  - test/test_anvl.rb
105
+ - test/test_element.rb
106
+ - test/test_erc.rb
102
107
  has_rdoc: true
103
108
  homepage: http://github.com/cbeer/anvl
104
109
  licenses:
@@ -136,3 +141,5 @@ summary: Ruby implementation of A Name-Value Language (ANVL)
136
141
  test_files:
137
142
  - test/helper.rb
138
143
  - test/test_anvl.rb
144
+ - test/test_element.rb
145
+ - test/test_erc.rb