shalmaneser-lib 1.2.rc5 → 1.2.rc6
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 +4 -4
- data/lib/definitions.rb +4 -4
- data/lib/salsa_tiger_xml/graph_node.rb +266 -265
- data/lib/salsa_tiger_xml/reg_xml.rb +3 -4
- data/lib/salsa_tiger_xml/salsa_tiger_sentence.rb +3 -5
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f300c7da721047a8cae71a1b9a9a4d42b9d25d5b
|
4
|
+
data.tar.gz: ed1cdf9daaa109828b6c6d04873748d79bacb026
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 398654afcbd1a630e9465b652fe7714c8439f89603838e41b3770cbbff83eaf1887e4cd7fd54bec9c5426fe7289d549a9e33c34da8d924ce97bec6e4bdc02734
|
7
|
+
data.tar.gz: 8ff8af846f337aff5a32b474b5c112a462878ecfc65a20bad81483d176922d8cd826a136116a117a4ab31675bd85bf277d3ad2fec94b42011a3e056de3f860c5
|
data/lib/definitions.rb
CHANGED
@@ -2,18 +2,18 @@ module Shalmaneser
|
|
2
2
|
LICENSE = 'GPL-2.0'
|
3
3
|
module Frappe
|
4
4
|
PROGRAM_NAME = 'Frappe'
|
5
|
-
VERSION = '1.2.
|
5
|
+
VERSION = '1.2.rc6'
|
6
6
|
end
|
7
7
|
module Fred
|
8
8
|
PROGRAM_NAME = 'Fred'
|
9
|
-
VERSION = '1.2.
|
9
|
+
VERSION = '1.2.rc6'
|
10
10
|
end
|
11
11
|
module Rosy
|
12
12
|
PROGRAM_NAME = 'Rosy'
|
13
|
-
VERSION = '1.2.
|
13
|
+
VERSION = '1.2.rc6'
|
14
14
|
end
|
15
15
|
module Shalmaneser
|
16
16
|
PROGRAM_NAME = 'Shalmaneser'
|
17
|
-
VERSION = '1.2.
|
17
|
+
VERSION = '1.2.rc6'
|
18
18
|
end
|
19
19
|
end
|
@@ -1,347 +1,348 @@
|
|
1
1
|
module STXML
|
2
|
-
# GraphNode: describes one node in a graph.
|
3
|
-
#
|
4
|
-
# A node may have an arbitrary number of parents (sources of incoming edges)
|
5
|
-
# and an arbitrary number of children (targets of outgoing edges)
|
6
|
-
#
|
7
|
-
# All edges are labeled and directed
|
8
|
-
#
|
9
|
-
# The add_parent, add_child, remove_parent, remove_child methods
|
10
|
-
# take care of both ends of an edge
|
11
|
-
# (i.e. n1.add_child(n2, label) also adds n1 as parent of n2 with edge label 'label'
|
12
|
-
#
|
13
|
-
# It is possible to create a 'pointer' rather than an edge:
|
14
|
-
# n1.add_child(n2, label, pointer_insteadof_edge => true)
|
15
|
-
# will create an edge from n1 to n2 labeled 'label' that is
|
16
|
-
# listed under the outgoing edges of n1, but not among
|
17
|
-
# the incoming edges of n2
|
18
|
-
# The same option is available for add_parent, remove_parent, remove_child.
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
2
|
+
# GraphNode: describes one node in a graph.
|
3
|
+
#
|
4
|
+
# A node may have an arbitrary number of parents (sources of incoming edges)
|
5
|
+
# and an arbitrary number of children (targets of outgoing edges)
|
6
|
+
#
|
7
|
+
# All edges are labeled and directed
|
8
|
+
#
|
9
|
+
# The add_parent, add_child, remove_parent, remove_child methods
|
10
|
+
# take care of both ends of an edge
|
11
|
+
# (i.e. n1.add_child(n2, label) also adds n1 as parent of n2 with edge label 'label'
|
12
|
+
#
|
13
|
+
# It is possible to create a 'pointer' rather than an edge:
|
14
|
+
# n1.add_child(n2, label, pointer_insteadof_edge => true)
|
15
|
+
# will create an edge from n1 to n2 labeled 'label' that is
|
16
|
+
# listed under the outgoing edges of n1, but not among
|
17
|
+
# the incoming edges of n2
|
18
|
+
# The same option is available for add_parent, remove_parent, remove_child.
|
19
|
+
# @note AB: This class is used only for subclassing.
|
20
|
+
# @abstract
|
21
|
+
class GraphNode
|
22
|
+
|
23
|
+
def initialize(id)
|
24
|
+
@id = id
|
25
|
+
@children = []
|
26
|
+
@parents = []
|
27
|
+
@features = {}
|
28
|
+
end
|
28
29
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
30
|
+
# for Marshalling:
|
31
|
+
# Dump just IDs instead of actual nodes from Parents and Children lists.
|
32
|
+
# Otherwise the Marshaller will go crazy following
|
33
|
+
# all the links to objects mentioned.
|
34
|
+
# After loading: replace IDs by actual objects with a little help
|
35
|
+
# from the caller.
|
36
|
+
# @deprecated This method seams to be useless.
|
37
|
+
def _dump(depth)
|
38
|
+
@id.to_s +
|
39
|
+
"QQSEPVALUESQQ" +
|
40
|
+
Marshal.dump(@features) +
|
41
|
+
"QQSEPVALUESQQ" +
|
42
|
+
@children.map { |label_child|
|
42
43
|
label_child[0] + "QQSEPQQ" + label_child[1].id
|
43
44
|
}.join("QQPAIRQQ") +
|
44
|
-
|
45
|
-
|
45
|
+
"QQSEPVALUESQQ" +
|
46
|
+
@parents.map { |label_parent|
|
46
47
|
label_parent[0] + "QQSEPQQ" + label_parent[1].id
|
47
|
-
|
48
|
-
|
48
|
+
}.join("QQPAIRQQ")
|
49
|
+
end
|
49
50
|
|
50
|
-
|
51
|
-
|
51
|
+
def self._load(string)
|
52
|
+
id, _features_s, _children_s, _parents_s = string.split("QQSEPVALUESQQ")
|
52
53
|
|
53
|
-
|
54
|
-
|
54
|
+
result = GraphNode.new(id)
|
55
|
+
result.fill_from_pickle(string)
|
55
56
|
|
56
|
-
|
57
|
-
|
57
|
+
result
|
58
|
+
end
|
58
59
|
|
59
|
-
|
60
|
-
|
60
|
+
def fill_from_pickle(string)
|
61
|
+
_id, features_s, children_s, parents_s = string.split("QQSEPVALUESQQ")
|
61
62
|
|
62
|
-
|
63
|
+
@features = Marshal.load(features_s)
|
63
64
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
65
|
+
if children_s.nil? || children_s.empty?
|
66
|
+
@children = []
|
67
|
+
else
|
68
|
+
@children = children_s.split("QQPAIRQQ").map do |pair|
|
69
|
+
pair.split("QQSEPQQ")
|
70
|
+
end
|
69
71
|
end
|
70
|
-
end
|
71
72
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
73
|
+
if parents_s.nil? || parents_s.empty?
|
74
|
+
@parents = []
|
75
|
+
else
|
76
|
+
@parents = parents_s.split("QQPAIRQQ").map { |pair|
|
77
|
+
pair.split("QQSEPQQ")
|
78
|
+
}
|
79
|
+
end
|
78
80
|
end
|
79
|
-
end
|
80
81
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
82
|
+
def recover_from_dump(node_by_id)
|
83
|
+
@children = @children.map { |label_id| [label_id[0], node_by_id.call(label_id[1])] }
|
84
|
+
@parents = @parents.map { |label_id| [label_id[0], node_by_id.call(label_id[1])] }
|
85
|
+
end
|
85
86
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
87
|
+
# ID-related things
|
88
|
+
def ==(other)
|
89
|
+
if other.is_a?(GraphNode)
|
90
|
+
@id == other.id
|
91
|
+
else
|
92
|
+
false
|
93
|
+
end
|
92
94
|
end
|
93
|
-
end
|
94
95
|
|
95
|
-
|
96
|
-
|
97
|
-
|
96
|
+
def id
|
97
|
+
@id
|
98
|
+
end
|
98
99
|
|
99
|
-
|
100
|
-
|
101
|
-
|
100
|
+
def chid(newid)
|
101
|
+
@id = newid
|
102
|
+
end
|
102
103
|
|
103
|
-
|
104
|
+
# setting and retrieving features
|
104
105
|
|
105
|
-
|
106
|
-
|
107
|
-
|
106
|
+
def get_f(feature)
|
107
|
+
@features[feature]
|
108
|
+
end
|
108
109
|
|
109
|
-
|
110
|
-
|
111
|
-
|
110
|
+
def set_f(feature, value)
|
111
|
+
@features[feature] = value
|
112
|
+
end
|
112
113
|
|
113
|
-
|
114
|
-
|
115
|
-
|
114
|
+
def add_f(feature, value)
|
115
|
+
unless @features[feature].nil?
|
116
|
+
raise "Feature " + feature + "already set."
|
117
|
+
end
|
118
|
+
set_f(feature, value)
|
116
119
|
end
|
117
|
-
set_f(feature, value)
|
118
|
-
end
|
119
120
|
|
120
|
-
|
121
|
+
# ancestors
|
121
122
|
|
122
|
-
|
123
|
-
|
124
|
-
|
123
|
+
def parents
|
124
|
+
@parents.map { |label| label[1] }
|
125
|
+
end
|
125
126
|
|
126
|
-
|
127
|
-
|
128
|
-
|
127
|
+
def parent_labels
|
128
|
+
@parents.map { |label_parent| label_parent[0] }
|
129
|
+
end
|
129
130
|
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
131
|
+
def parent_label(parent)
|
132
|
+
@parents.each do |label_parent|
|
133
|
+
if label_parent[1] == parent
|
134
|
+
return label_parent[0]
|
135
|
+
end
|
134
136
|
end
|
135
|
-
end
|
136
137
|
|
137
|
-
|
138
|
-
|
138
|
+
nil
|
139
|
+
end
|
139
140
|
|
140
|
-
|
141
|
-
|
142
|
-
|
141
|
+
def parents_with_edgelabel
|
142
|
+
@parents
|
143
|
+
end
|
143
144
|
|
144
|
-
|
145
|
-
|
146
|
-
|
145
|
+
def each_parent
|
146
|
+
@parents.each { |label_parent| yield label_parent[1] }
|
147
|
+
end
|
147
148
|
|
148
|
-
|
149
|
-
|
150
|
-
|
149
|
+
def each_parent_with_edgelabel
|
150
|
+
@parents.each { |label_parent| yield label_parent}
|
151
|
+
end
|
151
152
|
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
153
|
+
def parents_by_edgelabels(labels)
|
154
|
+
@parents.select { |label_parent|
|
155
|
+
labels.include? label_parent[0]
|
156
|
+
}.map { |label_parent|
|
157
|
+
label_parent[1]
|
158
|
+
}
|
159
|
+
end
|
159
160
|
|
160
|
-
|
161
|
-
|
161
|
+
def add_parent(parent, edgelabel, varhash = {})
|
162
|
+
@parents << [edgelabel, parent]
|
162
163
|
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
164
|
+
# and vice versa: add self as child to parent
|
165
|
+
unless varhash["pointer_insteadof_edge"]
|
166
|
+
unless parent.children_with_edgelabel.include? [edgelabel, self]
|
167
|
+
parent.add_child(self, edgelabel)
|
168
|
+
end
|
167
169
|
end
|
168
170
|
end
|
169
|
-
end
|
170
171
|
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
172
|
+
def remove_parent(parent, edgelabel, varhash={})
|
173
|
+
@parents = @parents.reject { |label_child|
|
174
|
+
label_child.first == edgelabel and
|
175
|
+
label_child.last == parent
|
176
|
+
}
|
176
177
|
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
178
|
+
# and vice versa: remove self as child from parent
|
179
|
+
unless varhash["pointer_insteadof_edge"]
|
180
|
+
if parent.children_with_edgelabel.include? [edgelabel, self]
|
181
|
+
parent.remove_child(self, edgelabel)
|
182
|
+
end
|
181
183
|
end
|
182
184
|
end
|
183
|
-
end
|
184
185
|
|
185
|
-
|
186
|
-
|
187
|
-
|
186
|
+
def indeg
|
187
|
+
@parents.length
|
188
|
+
end
|
188
189
|
|
189
|
-
|
190
|
-
|
191
|
-
|
190
|
+
def ancestors
|
191
|
+
ancestors_noduplicates([], [])
|
192
|
+
end
|
192
193
|
|
193
|
-
|
194
|
-
|
195
|
-
|
194
|
+
def ancestors_by_edgelabels(labels)
|
195
|
+
ancestors_noduplicates([], labels)
|
196
|
+
end
|
196
197
|
|
197
|
-
|
198
|
+
# descendants
|
198
199
|
|
199
|
-
|
200
|
-
|
201
|
-
|
200
|
+
def children
|
201
|
+
@children.map { |label_child| label_child[1] }
|
202
|
+
end
|
202
203
|
|
203
|
-
|
204
|
-
|
205
|
-
|
204
|
+
def child_labels
|
205
|
+
@children.map { |label_child| label_child[0] }
|
206
|
+
end
|
206
207
|
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
208
|
+
def child_label(child)
|
209
|
+
@children.each { |label_child|
|
210
|
+
if label_child[1] == child
|
211
|
+
return label_child[0]
|
212
|
+
end
|
213
|
+
}
|
213
214
|
|
214
|
-
|
215
|
-
|
215
|
+
nil
|
216
|
+
end
|
216
217
|
|
217
|
-
|
218
|
-
|
219
|
-
|
218
|
+
def children_with_edgelabel
|
219
|
+
@children
|
220
|
+
end
|
220
221
|
|
221
|
-
|
222
|
-
|
223
|
-
|
222
|
+
def each_child
|
223
|
+
@children.each { |label_child| yield label_child[1]}
|
224
|
+
end
|
224
225
|
|
225
|
-
|
226
|
-
|
227
|
-
|
226
|
+
def each_child_with_edgelabel
|
227
|
+
@children.each { |label_child| yield label_child }
|
228
|
+
end
|
228
229
|
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
230
|
+
def children_by_edgelabels(labels)
|
231
|
+
return @children.select { |label_child|
|
232
|
+
labels.include? label_child[0]
|
233
|
+
}.map { |label_child|
|
234
|
+
label_child[1]
|
235
|
+
}
|
236
|
+
end
|
236
237
|
|
237
|
-
|
238
|
-
|
238
|
+
def add_child(child, edgelabel, varhash = {})
|
239
|
+
@children << [edgelabel, child]
|
239
240
|
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
241
|
+
# and vice versa: add self as parent to child
|
242
|
+
unless varhash["pointer_insteadof_edge"]
|
243
|
+
unless child.parents_with_edgelabel.include? [edgelabel, self]
|
244
|
+
child.add_parent(self, edgelabel)
|
245
|
+
end
|
244
246
|
end
|
245
247
|
end
|
246
|
-
end
|
247
248
|
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
249
|
+
def remove_child(child, edgelabel, varhash={})
|
250
|
+
@children = @children.reject { |label_child|
|
251
|
+
label_child.first == edgelabel and
|
252
|
+
label_child.last == child
|
253
|
+
}
|
253
254
|
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
255
|
+
# and vice versa: remove self as parent from child
|
256
|
+
unless varhash["pointer_insteadof_edge"]
|
257
|
+
if child.parents_with_edgelabel.include? [edgelabel, self]
|
258
|
+
child.remove_parent(self, edgelabel)
|
259
|
+
end
|
258
260
|
end
|
259
261
|
end
|
260
|
-
end
|
261
262
|
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
263
|
+
def change_child_label(child, oldlabel, newlabel, varhash={})
|
264
|
+
if @children.include? [oldlabel, child]
|
265
|
+
remove_child(child,oldlabel, varhash)
|
266
|
+
add_child(child, newlabel, varhash)
|
267
|
+
end
|
266
268
|
end
|
267
|
-
end
|
268
269
|
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
def set_children(list, varhash={})
|
276
|
-
#### CAUTION: set_children must be called with an "internal format" list of parents:
|
277
|
-
#### instead of using [node, edgelabel], use [edgelabel, node]
|
278
|
-
remove_all_children(varhash)
|
270
|
+
def remove_all_children(varhash={})
|
271
|
+
each_child_with_edgelabel { |label, child|
|
272
|
+
remove_child(child, label, varhash)
|
273
|
+
}
|
274
|
+
end
|
279
275
|
|
280
|
-
|
281
|
-
|
276
|
+
def set_children(list, varhash={})
|
277
|
+
#### CAUTION: set_children must be called with an "internal format" list of parents:
|
278
|
+
#### instead of using [node, edgelabel], use [edgelabel, node]
|
279
|
+
remove_all_children(varhash)
|
282
280
|
|
283
|
-
|
284
|
-
|
285
|
-
end
|
281
|
+
@children = list
|
282
|
+
end
|
286
283
|
|
287
|
-
|
288
|
-
|
289
|
-
if outdeg == 0
|
290
|
-
arr << self
|
284
|
+
def outdeg
|
285
|
+
return @children.length
|
291
286
|
end
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
arr
|
287
|
+
|
288
|
+
def yield_nodes
|
289
|
+
arr = []
|
290
|
+
if outdeg == 0
|
291
|
+
arr << self
|
297
292
|
end
|
298
|
-
|
299
|
-
|
300
|
-
|
293
|
+
each_child { |c|
|
294
|
+
if c.outdeg == 0
|
295
|
+
arr << c
|
296
|
+
else
|
297
|
+
arr.concat c.yield_nodes
|
298
|
+
end
|
299
|
+
}
|
300
|
+
return arr
|
301
|
+
end
|
301
302
|
|
302
|
-
|
303
|
-
|
304
|
-
|
303
|
+
def descendants
|
304
|
+
descendants_noduplicates([], [])
|
305
|
+
end
|
305
306
|
|
306
|
-
|
307
|
-
|
308
|
-
|
307
|
+
def descendants_by_edgelabels(labels)
|
308
|
+
return descendants_noduplicates([], labels)
|
309
|
+
end
|
309
310
|
|
310
|
-
|
311
|
+
protected
|
311
312
|
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
313
|
+
def descendants_noduplicates(nodes, labels)
|
314
|
+
each_child_with_edgelabel { |l_c|
|
315
|
+
if labels.empty? or labels.include? l_c[0]
|
316
|
+
unless nodes.include? l_c[1]
|
317
|
+
nodes = l_c[1].descendants_noduplicates(nodes << l_c[1], labels)
|
318
|
+
end
|
317
319
|
end
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
end
|
320
|
+
}
|
321
|
+
return nodes
|
322
|
+
end
|
322
323
|
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
324
|
+
def ancestors_noduplicates(nodes, labels)
|
325
|
+
each_parent_with_edgelabel { |l_p|
|
326
|
+
if labels.empty? or labels.include? l_p[0]
|
327
|
+
unless nodes.include? l_p[1]
|
328
|
+
nodes = l_p[1].ancestors_noduplicates(nodes << l_p[1], labels)
|
329
|
+
end
|
328
330
|
end
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
end
|
331
|
+
}
|
332
|
+
return nodes
|
333
|
+
end
|
333
334
|
|
334
|
-
|
335
|
-
|
335
|
+
#### CAUTION: set_parents must be called with an "internal format" list of parents:
|
336
|
+
#### instead of using [node, edgelabel], use [edgelabel, node]
|
336
337
|
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
338
|
+
def set_parents(list, varhash={})
|
339
|
+
each_parent_with_edgelabel { |label, parent|
|
340
|
+
remove_parent(parent, label, varhash)
|
341
|
+
}
|
341
342
|
|
342
|
-
|
343
|
-
|
344
|
-
|
343
|
+
list.each { |label, parent|
|
344
|
+
add_parent(label, parent)
|
345
|
+
}
|
346
|
+
end
|
345
347
|
end
|
346
348
|
end
|
347
|
-
end
|
@@ -5,11 +5,10 @@ module STXML
|
|
5
5
|
|
6
6
|
# SalsaTigerRegXML: take control of the data structure, no underlying xml
|
7
7
|
# representation anymore, re-generation of xml on demand
|
8
|
-
|
9
8
|
class RegXML
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
# string representing a single XML element
|
10
|
+
# boolean: xml element (false) or text (true)
|
11
|
+
def initialize(string, i_am_text = false)
|
13
12
|
|
14
13
|
unless string.class == String
|
15
14
|
raise "First argument to RegXML.new must be string. I got #{string.class}"
|
@@ -96,12 +96,10 @@ module STXML
|
|
96
96
|
# text: optional parameter, a string, arbitrary text commenting
|
97
97
|
# on the flag, used mainly with INTERESTING
|
98
98
|
class SalsaTigerSentence < XMLNode
|
99
|
-
|
99
|
+
# @param [String] sentence_id Identificator for a new sentence.
|
100
|
+
def self.empty_sentence(sentence_id)
|
100
101
|
sentence_id = sentence_id.gsub(/'/, "'")
|
101
|
-
sent_string = "<s id=\'#{sentence_id}\'>\n" +
|
102
|
-
"<graph/>\n" +
|
103
|
-
"<sem/>\n" +
|
104
|
-
"</s>"
|
102
|
+
sent_string = "<s id=\'#{sentence_id}\'>\n" + "<graph/>\n" + "<sem/>\n" + "</s>"
|
105
103
|
|
106
104
|
SalsaTigerSentence.new(sent_string)
|
107
105
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shalmaneser-lib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.rc6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrei Beliankou
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-01-
|
11
|
+
date: 2016-01-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pastel
|
@@ -113,7 +113,7 @@ require_paths:
|
|
113
113
|
- lib
|
114
114
|
required_ruby_version: !ruby/object:Gem::Requirement
|
115
115
|
requirements:
|
116
|
-
- -
|
116
|
+
- - ">="
|
117
117
|
- !ruby/object:Gem::Version
|
118
118
|
version: '2.0'
|
119
119
|
required_rubygems_version: !ruby/object:Gem::Requirement
|