shalmaneser-lib 1.2.rc5 → 1.2.rc6
Sign up to get free protection for your applications and to get access to all the features.
- 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
|