kvx 0.1.0

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.
Files changed (6) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +1 -0
  3. data.tar.gz.sig +1 -0
  4. data/lib/kvx.rb +168 -0
  5. metadata +107 -0
  6. metadata.gz.sig +1 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 817907abde6224e0927fadce5e3b6ff45bf170a5
4
+ data.tar.gz: 745afaaf9215927f7c19e739d39f9f27921e92dc
5
+ SHA512:
6
+ metadata.gz: 7b7bb78ebed825fdb6fbd24bc2ba7e06ad1f8484508c11ebe3a464f49eaa1ba1a3447380940d3f769b18408397a02e4337479ef336b932211d9f0657642b0d5e
7
+ data.tar.gz: 479af80eead59e44f79dee501438d036e9504db8af590981b97dd0793a0609d9a4a12358ab1be5ee646dc77a4cceda5c1feca5c13ac76d36a14a27eb6aecd6cc
@@ -0,0 +1 @@
1
+ 54y�0\F|[���a���-����1�X3o���|C�=߈ �e��1t�<���̙�03�Bf�'�l���!�����\������� eK\9�A�^̸{���~o����Xȃ�@�?'<T״R9-��9`����������������SQF'���+uO���~��$���`��wbL��X�;�^�7��D�d�)�$�t�)Y;K�u;�+��=��OQp`��d���p��j6�m�~�*��'�|
@@ -0,0 +1 @@
1
+ �{�J��O �q�Y�Ёng�s���6�]`�����6�E��J��{�>mc�T|w��(}r=x�����B���댱9r�)�B<V��v�s�����X @�����%��v��I�,�]WO(�1�i�4�N-�� ����n]yGl��Ҙ��!W������Ğ�!�Ys�d��[W#�B���G��Շ,��f�I>$�2U��q ^g��J1��]nj$y�D�~`�U�^��ϟ�B1�e��!��ign
@@ -0,0 +1,168 @@
1
+ !#/usr/bin/env ruby
2
+
3
+ # file: kvx.rb
4
+
5
+ require 'line-tree'
6
+ require 'rxfhelper'
7
+
8
+ ###
9
+ # Kvx does the following:
10
+ #
11
+ # * h -> xml
12
+ # * xml -> h
13
+ # * s -> h
14
+
15
+ class Kvx
16
+
17
+ attr_accessor :attributes
18
+ attr_reader :to_h
19
+
20
+ def initialize(x, attributes: {})
21
+
22
+ @attributes = attributes
23
+ h = {hash: :passthru, rexle: :hashify, string: :parse_to_h}
24
+ @to_h = method(h[x.class.to_s.downcase.to_sym]).call x
25
+
26
+ end
27
+
28
+ def parse(t=nil)
29
+ parse_to_h(t || @to_s)
30
+ end
31
+
32
+ def to_xml(options={pretty: true})
33
+
34
+ make_xml(@to_h)
35
+
36
+ a = [self.class.to_s.downcase, @attributes, '', *make_xml(@to_h)]
37
+ Rexle.new(a).xml(options)
38
+
39
+ end
40
+
41
+ private
42
+
43
+ def get_attributes(raw_attributes)
44
+
45
+ r1 = /([\w\-:]+\='[^']*)'/
46
+ r2 = /([\w\-:]+\="[^"]*)"/
47
+
48
+ r = raw_attributes.scan(/#{r1}|#{r2}/).map(&:compact)\
49
+ .flatten.inject(Attributes.new) do |r, x|
50
+ attr_name, raw_val = x.split(/=/,2)
51
+ val = attr_name != 'class' ? raw_val[1..-1] : raw_val[1..-1].split
52
+ r.merge(attr_name.to_sym => val)
53
+ end
54
+
55
+ return r
56
+ end
57
+
58
+ def hashify(e)
59
+
60
+ v = if e.has_elements? then
61
+ e.elements.inject({}) do |r, x|
62
+ r.merge hashify(x)
63
+ end
64
+ else
65
+ e.text
66
+ end
67
+
68
+ {e.name => v}
69
+ end
70
+
71
+ def make_xml(h)
72
+
73
+ h.map do |name, x|
74
+
75
+ value = x.is_a?(Hash) ? make_xml(x) : x
76
+ [name, {}, *value]
77
+
78
+ end
79
+ end
80
+
81
+ def parse_to_h(s, header_pattern=%r(^<\?kvx[\s\?]))
82
+
83
+ raw_txt, _ = RXFHelper.read(s)
84
+
85
+ # does the raw_txt contain header information?
86
+ a = s.strip.lines
87
+
88
+ txt = if a[0] =~ header_pattern then
89
+ raw_header = a.shift
90
+ @attributes.merge! get_attributes(raw_header)
91
+ @header = true
92
+ a.join
93
+ else
94
+ raw_txt
95
+ end
96
+
97
+ scan_to_h(txt)
98
+ end
99
+
100
+ def passthru(x)
101
+ x
102
+ end
103
+
104
+ def scan_to_h(txt)
105
+
106
+ raw_a = LineTree.new(txt.gsub(/(^-*$)|(#.*)/,'').strip,
107
+ ignore_blank_lines: false).to_a
108
+
109
+ # if there are any orphan lines which aren't nested underneath a
110
+ # label, they will be fixed using the following statement
111
+
112
+ a = raw_a.chunk {|x| x[0][/^\w+:|.*/]}.inject([]) do |r,y|
113
+ if r.last and !y.first[/\w+:/] then
114
+ r.last << y.last[-1]
115
+ else
116
+ r << y.last[-1]
117
+ end
118
+ r
119
+ end
120
+
121
+
122
+ @to_h = a.inject({}) do |r, line|
123
+
124
+ s = line.shift
125
+
126
+
127
+ if line.join.length > 0 then
128
+
129
+ r2 = if line[0][0][/^\w+: /] then
130
+
131
+ scan_to_h(line.join("\n"))
132
+
133
+ else
134
+
135
+ desc = pretty_print(line).split(/\n(?=\w+: )/)
136
+
137
+ txt2, remaining = desc
138
+
139
+ h = txt2.lines.inject([]) do |r, x|
140
+ x.chomp!
141
+ x.length > 0 ? r << x : r
142
+ end
143
+
144
+ r3 = {description: txt2, items: h}
145
+
146
+ if remaining then
147
+
148
+ r3.merge!(scan_to_h remaining + "\n ")
149
+ end
150
+
151
+ r3
152
+ end
153
+
154
+ r.merge({s[/[^:]+/].to_sym => r2})
155
+
156
+ else
157
+
158
+ value, name = s.split(': ',2).reverse
159
+ name ||= 'description'
160
+
161
+ r.merge({name.to_sym => value.to_s})
162
+ end
163
+
164
+ end
165
+
166
+ end
167
+
168
+ end
metadata ADDED
@@ -0,0 +1,107 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kvx
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - James Robertson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDljCCAn6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBIMRIwEAYDVQQDDAlnZW1t
14
+ YXN0ZXIxHjAcBgoJkiaJk/IsZAEZFg5qYW1lc3JvYmVydHNvbjESMBAGCgmSJomT
15
+ 8ixkARkWAmV1MB4XDTE1MDQyNDA5MDczNFoXDTE2MDQyMzA5MDczNFowSDESMBAG
16
+ A1UEAwwJZ2VtbWFzdGVyMR4wHAYKCZImiZPyLGQBGRYOamFtZXNyb2JlcnRzb24x
17
+ EjAQBgoJkiaJk/IsZAEZFgJldTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
18
+ ggEBAK0izGn06Va0d0sfDbEQMJ3LBiTQdGh3GIobtqGywNhH9RekBLvMI/0H++En
19
+ GV6v+Wm2Y1021px1bOS3JHgafBVDKtb5jy8iOPpWSCYdlM82Cq41SVRj9v69xA34
20
+ IfiGCUy3kRDbszJHcYfUyCZhoo4W1J8MqQveJof4ZK4y0uNXyEWQ1dv0lgxOiMsz
21
+ IsLl3GUWCsXj/jhcdbK9CpBNgdZgY3VAWSp5Sbi8m0P/n0EVWF+xrR4eLq1D7OS5
22
+ CmQdX48Tg+zlju3kjtyfmOPZEp2MArZB7QIrKh01f0wIN4gF1LPuoMSQUXcLRpDR
23
+ Vu5+fTFPsT9JEuT2HL6Dt4lWArsCAwEAAaOBijCBhzAJBgNVHRMEAjAAMAsGA1Ud
24
+ DwQEAwIEsDAdBgNVHQ4EFgQUSoHYBwkpURyGnWFlAlhDZkNxq3wwJgYDVR0RBB8w
25
+ HYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1h
26
+ c3RlckBqYW1lc3JvYmVydHNvbi5ldTANBgkqhkiG9w0BAQUFAAOCAQEAE7dkgKh8
27
+ Y9PLXnmkHuDgysXUFr1sg4iaw2hKMMdhfqf8tZ7BZ/Aj7ulPzvSdBr/4vgLW7cZr
28
+ f1O3oJ9fm6ghTXj1e47NnBGK+tTR/SFI3eN209fMqMf1H0Y9mHZLAXmI2HBqrfa1
29
+ o64578CD/hTaZw1mtH0ZztnbXM5QroQYaIr1AcfvwaU5yYctb1+TJwzIBnk47erO
30
+ 565H2oJZBZtV0VUphhzKWnXLu+KPvJm+C3rHHnBq9QIgAajrKtX0MPgRuIlT63Pw
31
+ Vo86eJaJUXJbywrm97pYB2utyzWPyxJihIh0eFuNbCk+XOWfv6vUEyuXMiCsiyrF
32
+ azRHJ6uLeQu4hw==
33
+ -----END CERTIFICATE-----
34
+ date: 2015-04-24 00:00:00.000000000 Z
35
+ dependencies:
36
+ - !ruby/object:Gem::Dependency
37
+ name: line-tree
38
+ requirement: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '0.5'
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: 0.5.0
46
+ type: :runtime
47
+ prerelease: false
48
+ version_requirements: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - "~>"
51
+ - !ruby/object:Gem::Version
52
+ version: '0.5'
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: 0.5.0
56
+ - !ruby/object:Gem::Dependency
57
+ name: rxfhelper
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '0.1'
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: 0.1.12
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - "~>"
71
+ - !ruby/object:Gem::Version
72
+ version: '0.1'
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 0.1.12
76
+ description:
77
+ email: james@r0bertson.co.uk
78
+ executables: []
79
+ extensions: []
80
+ extra_rdoc_files: []
81
+ files:
82
+ - lib/kvx.rb
83
+ homepage: https://github.com/jrobertson/kvx
84
+ licenses:
85
+ - MIT
86
+ metadata: {}
87
+ post_install_message:
88
+ rdoc_options: []
89
+ require_paths:
90
+ - lib
91
+ required_ruby_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ required_rubygems_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ requirements: []
102
+ rubyforge_project:
103
+ rubygems_version: 2.4.6
104
+ signing_key:
105
+ specification_version: 4
106
+ summary: kvx
107
+ test_files: []
@@ -0,0 +1 @@
1
+ �#�TY�cj����g�=��xF\-�ž�k��wO�s�=>�y��X*��#=/+F