thinp_xml 0.0.19 → 0.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MTU5MDBmODg4NjZkZjgzYzhmNjllMjYwMGIyYmNmZjgwNjE0Zjc0Ng==
4
+ ODJiYjEzNzNmYzhmYzMwMzY0MDcxNjE2NzYzYWQyODMxMTMxYjUyNQ==
5
5
  data.tar.gz: !binary |-
6
- NTljNWMxNzljNjJiOTY5MTljYWY3Zjg0NjIyY2QyYWI4MDhlNzVmYQ==
6
+ ODAwOWQxNWIwZGVhMWUyN2U3M2ZlOThjMDNiYTc2MWQ2ZTZkNWQ2ZQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZDk5NjM0Mzg4ZTAyN2U4OTNkNzk2YWMzZmJiMzhkYzhkOWRiNjAwOTQ1Mzhk
10
- MTkxMjU2MzJiOWJjMDVjMTYyNzUxYmQ4NGE3N2ViMzkzZmRlYzM0NTc5NTRk
11
- YmI5NzRkNjBjODU2NzhkMjQ2ZmY3NWY3MDUzOGYwMjRjMzVmNjk=
9
+ M2NhZjdjNzQ3ZGQ5Y2M4YTRhNjlmYjE4YThkNDc1NDNjNTNiNWFkNTFkODZk
10
+ ZjQ0MDEwMDlhYjNhYTE1NDE4NzZjZjg3OTRiZDgyYmNjZDkyYjA4NjIyMWEz
11
+ NmYyYjAzNDExYWU2NWM3MWI3ZDQwYzI1ODEwMjQ1NDY1NDMxZjI=
12
12
  data.tar.gz: !binary |-
13
- YjUwNDYzNDI0MTNmNWRhZDk0MTdkZTIzZDkyMWFlYzZiNTVhYTcwNzU0OTVk
14
- ZDBiNDJhZWIzOTk0ODIwOWE2NTZiNTNmYzQ2OTI3NjRiZTM0YmY0YjYyZWIx
15
- ZmNiYmQ4MGJjOTYzMWU4MWVmNTQ0ZGEwMzY4MWVjYjZkYjc3M2Y=
13
+ ZmEyNzVkNzYzZjFiMzBiNmMwZjY5NDg2NWQ2NDc3N2I4NzUzOGNhNGM4ZjEz
14
+ MWNkMzAyZTVmYmRiYjBmNzhhMjg3Nzk0ZTUyN2Q4NTM1NjAyNWM5YTQ5ZmQ4
15
+ ZDQ1NDAxMjVkYjRlZmFiYmM5N2ViM2UzNjM2ZDkxZTljMDEzNTY=
@@ -0,0 +1,90 @@
1
+ require 'thinp_xml/listener'
2
+ require 'thinp_xml/era/metadata'
3
+
4
+ require 'rexml/document'
5
+ require 'rexml/streamlistener'
6
+
7
+ #----------------------------------------------------------------
8
+
9
+ module EraXML
10
+ module EraParseDetail
11
+ class Listener
12
+ include ThinpXML::Base::ListenerUtils
13
+ include REXML::StreamListener
14
+
15
+ attr_reader :metadata
16
+
17
+ def initialize
18
+ @in_era_array = false
19
+ @in_writeset = false
20
+ @writesets = []
21
+ end
22
+
23
+ def tag_start(tag, args)
24
+ attr = to_hash(args)
25
+
26
+ case tag
27
+ when 'superblock'
28
+ @superblock = Superblock.new(*get_fields(attr, SUPERBLOCK_FIELDS))
29
+ @era_array = Array.new(attr[:nr_blocks].to_i, 0)
30
+
31
+ when 'writeset'
32
+ @in_writeset = true
33
+ @writeset_era = attr[:era].to_i
34
+ @current_writeset = Array.new(attr[:nr_bits].to_i, false)
35
+
36
+ when 'bit'
37
+ raise "bit when not in a bitset" unless @in_writeset
38
+ @current_writeset[attr[:block].to_i] = to_bool(attr[:value])
39
+
40
+ when 'era_array'
41
+ @in_era_array = true
42
+
43
+ when 'era'
44
+ raise "not in era array" unless @in_era_array
45
+ @era_array[attr[:block].to_i] = attr[:era].to_i
46
+
47
+ else
48
+ raise "unhandled tag '#{tag} #{attr.map {|x| x.inspect}.join(' ')}'"
49
+ end
50
+ end
51
+
52
+ def tag_end(tag)
53
+ case tag
54
+ when 'writeset'
55
+ @writesets << Writeset.new(@writeset_era,
56
+ @current_writeset.size,
57
+ @current_writeset)
58
+ @in_writeset = false
59
+
60
+ when 'era_array'
61
+ @in_era_array = false
62
+
63
+ when 'superblock'
64
+ @metadata = Metadata.new(@superblock, @writesets, @era_array)
65
+ end
66
+ end
67
+
68
+ def to_bool(str)
69
+ case str
70
+ when 'true'
71
+ true
72
+
73
+ when 'false'
74
+ false
75
+
76
+ else
77
+ raise "bad bool value: #{str}"
78
+ end
79
+ end
80
+ end
81
+ end
82
+
83
+ def read_xml(io)
84
+ l = EraParseDetail::Listener.new
85
+ REXML::Document.parse_stream(io, l)
86
+ l.metadata
87
+ end
88
+ end
89
+
90
+ #----------------------------------------------------------------
@@ -1,3 +1,3 @@
1
1
  module ThinpXml
2
- VERSION = "0.0.19"
2
+ VERSION = "0.0.20"
3
3
  end
@@ -0,0 +1,152 @@
1
+ require 'thinp_xml/era/parse'
2
+
3
+ include EraXML
4
+
5
+ #----------------------------------------------------------------
6
+
7
+ describe "EraXML::read_xml" do
8
+ it "should handle metadata with zero blocks" do
9
+ metadata = read_xml(StringIO.new(<<EOF))
10
+ <superblock uuid="" block_size="128" nr_blocks="0" current_era="0">
11
+ <era_array>
12
+ </era_array>
13
+ </superblock>
14
+ EOF
15
+
16
+ expect(metadata.superblock).to eq(Superblock.new("", 128, 0, 0))
17
+ expect(metadata.writesets).to eq([])
18
+ expect(metadata.era_array).to eq([])
19
+ end
20
+
21
+ it "should handle more complicated metadata" do
22
+ metadata = read_xml(StringIO.new(<<EOF))
23
+ <superblock uuid="blip blop" block_size="256" nr_blocks="32" current_era="100">
24
+ <writeset era="98" nr_bits="32">
25
+ <bit block="0" value="true"/>
26
+ <bit block="1" value="true"/>
27
+ <bit block="2" value="false"/>
28
+ <bit block="3" value="false"/>
29
+ <bit block="4" value="false"/>
30
+ <bit block="5" value="true"/>
31
+ <bit block="6" value="true"/>
32
+ <bit block="7" value="false"/>
33
+ <bit block="8" value="true"/>
34
+ <bit block="9" value="true"/>
35
+ <bit block="10" value="true"/>
36
+ <bit block="11" value="true"/>
37
+ <bit block="12" value="false"/>
38
+ <bit block="13" value="false"/>
39
+ <bit block="14" value="false"/>
40
+ <bit block="15" value="false"/>
41
+ <bit block="16" value="true"/>
42
+ <bit block="17" value="true"/>
43
+ <bit block="18" value="true"/>
44
+ <bit block="19" value="true"/>
45
+ <bit block="20" value="false"/>
46
+ <bit block="21" value="true"/>
47
+ <bit block="22" value="false"/>
48
+ <bit block="23" value="false"/>
49
+ <bit block="24" value="false"/>
50
+ <bit block="25" value="false"/>
51
+ <bit block="26" value="true"/>
52
+ <bit block="27" value="true"/>
53
+ <bit block="28" value="true"/>
54
+ <bit block="29" value="true"/>
55
+ <bit block="30" value="true"/>
56
+ <bit block="31" value="false"/>
57
+ </writeset>
58
+ <writeset era="99" nr_bits="32">
59
+ <bit block="0" value="false"/>
60
+ <bit block="1" value="true"/>
61
+ <bit block="2" value="false"/>
62
+ <bit block="3" value="false"/>
63
+ <bit block="4" value="false"/>
64
+ <bit block="5" value="true"/>
65
+ <bit block="6" value="true"/>
66
+ <bit block="7" value="true"/>
67
+ <bit block="8" value="false"/>
68
+ <bit block="9" value="false"/>
69
+ <bit block="10" value="true"/>
70
+ <bit block="11" value="true"/>
71
+ <bit block="12" value="true"/>
72
+ <bit block="13" value="false"/>
73
+ <bit block="14" value="true"/>
74
+ <bit block="15" value="true"/>
75
+ <bit block="16" value="false"/>
76
+ <bit block="17" value="true"/>
77
+ <bit block="18" value="false"/>
78
+ <bit block="19" value="false"/>
79
+ <bit block="20" value="false"/>
80
+ <bit block="21" value="false"/>
81
+ <bit block="22" value="true"/>
82
+ <bit block="23" value="true"/>
83
+ <bit block="24" value="false"/>
84
+ <bit block="25" value="false"/>
85
+ <bit block="26" value="false"/>
86
+ <bit block="27" value="false"/>
87
+ <bit block="28" value="true"/>
88
+ <bit block="29" value="true"/>
89
+ <bit block="30" value="false"/>
90
+ <bit block="31" value="true"/>
91
+ </writeset>
92
+ <era_array>
93
+ <era block="0" era="62"/>
94
+ <era block="1" era="27"/>
95
+ <era block="2" era="8"/>
96
+ <era block="3" era="19"/>
97
+ <era block="4" era="70"/>
98
+ <era block="5" era="69"/>
99
+ <era block="6" era="57"/>
100
+ <era block="7" era="33"/>
101
+ <era block="8" era="66"/>
102
+ <era block="9" era="42"/>
103
+ <era block="10" era="85"/>
104
+ <era block="11" era="68"/>
105
+ <era block="12" era="10"/>
106
+ <era block="13" era="12"/>
107
+ <era block="14" era="43"/>
108
+ <era block="15" era="68"/>
109
+ <era block="16" era="45"/>
110
+ <era block="17" era="7"/>
111
+ <era block="18" era="16"/>
112
+ <era block="19" era="73"/>
113
+ <era block="20" era="29"/>
114
+ <era block="21" era="16"/>
115
+ <era block="22" era="94"/>
116
+ <era block="23" era="91"/>
117
+ <era block="24" era="9"/>
118
+ <era block="25" era="80"/>
119
+ <era block="26" era="93"/>
120
+ <era block="27" era="96"/>
121
+ <era block="28" era="62"/>
122
+ <era block="29" era="75"/>
123
+ <era block="30" era="46"/>
124
+ <era block="31" era="14"/>
125
+ </era_array>
126
+ </superblock>
127
+ EOF
128
+
129
+ expect(metadata.superblock).to eq(Superblock.new("blip blop", 256, 32, 100))
130
+ expect(metadata.writesets.size).to eq(2)
131
+
132
+ expect(metadata.writesets[0].era).to eq(98)
133
+ expect(metadata.writesets[0].nr_bits).to eq(32)
134
+ expect(metadata.writesets[0].bits[4]).to eq(false)
135
+ expect(metadata.writesets[0].bits[6]).to eq(true)
136
+ expect(metadata.writesets[0].bits[16]).to eq(true)
137
+ expect(metadata.writesets[0].bits[31]).to eq(false)
138
+
139
+ expect(metadata.writesets[1].era).to eq(99)
140
+ expect(metadata.writesets[1].nr_bits).to eq(32)
141
+ expect(metadata.writesets[1].bits[4]).to eq(false)
142
+ expect(metadata.writesets[1].bits[6]).to eq(true)
143
+ expect(metadata.writesets[1].bits[16]).to eq(false)
144
+ expect(metadata.writesets[1].bits[31]).to eq(true)
145
+
146
+ expect(metadata.era_array[7]).to eq(33)
147
+ expect(metadata.era_array[12]).to eq(10)
148
+ expect(metadata.era_array[31]).to eq(14)
149
+ end
150
+ end
151
+
152
+ #----------------------------------------------------------------
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thinp_xml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.19
4
+ version: 0.0.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joe Thornber
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-01 00:00:00.000000000 Z
11
+ date: 2014-09-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ejt_command_line
@@ -149,6 +149,7 @@ files:
149
149
  - lib/thinp_xml/era/builder.rb
150
150
  - lib/thinp_xml/era/emit.rb
151
151
  - lib/thinp_xml/era/metadata.rb
152
+ - lib/thinp_xml/era/parse.rb
152
153
  - lib/thinp_xml/era_xml.rb
153
154
  - lib/thinp_xml/listener.rb
154
155
  - lib/thinp_xml/thinp/analysis.rb
@@ -164,6 +165,7 @@ files:
164
165
  - spec/cache_parse_spec.rb
165
166
  - spec/distribution_spec.rb
166
167
  - spec/era_builder_spec.rb
168
+ - spec/era_parse_spec.rb
167
169
  - thinp_xml.gemspec
168
170
  homepage: ''
169
171
  licenses:
@@ -203,3 +205,4 @@ test_files:
203
205
  - spec/cache_parse_spec.rb
204
206
  - spec/distribution_spec.rb
205
207
  - spec/era_builder_spec.rb
208
+ - spec/era_parse_spec.rb