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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 925773238e9b659fbfec8c118b4a22f4f2fb909b
4
- data.tar.gz: da6bbfc8e3b8d33cc45ec17cd8c9c39044db86e2
3
+ metadata.gz: f300c7da721047a8cae71a1b9a9a4d42b9d25d5b
4
+ data.tar.gz: ed1cdf9daaa109828b6c6d04873748d79bacb026
5
5
  SHA512:
6
- metadata.gz: abeebd6acb3c45fe07bb13e5e281b711b30c296b0d4546fad9b8d0ce11dbc4617241efffaf56066b3bc49ac8216bf6ccae6f8a3bc12ad788129f111d63e609d2
7
- data.tar.gz: 1d1e18b0bd144fe5aaa3058fed3e6fe5e5d80648c43e6d3e175daaf97d1ce491dbf80e7aceec9be387a65d2d6dade1d6b5d7407302442446d46a7f9afb473c61
6
+ metadata.gz: 398654afcbd1a630e9465b652fe7714c8439f89603838e41b3770cbbff83eaf1887e4cd7fd54bec9c5426fe7289d549a9e33c34da8d924ce97bec6e4bdc02734
7
+ data.tar.gz: 8ff8af846f337aff5a32b474b5c112a462878ecfc65a20bad81483d176922d8cd826a136116a117a4ab31675bd85bf277d3ad2fec94b42011a3e056de3f860c5
@@ -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.rc5'
5
+ VERSION = '1.2.rc6'
6
6
  end
7
7
  module Fred
8
8
  PROGRAM_NAME = 'Fred'
9
- VERSION = '1.2.rc5'
9
+ VERSION = '1.2.rc6'
10
10
  end
11
11
  module Rosy
12
12
  PROGRAM_NAME = 'Rosy'
13
- VERSION = '1.2.rc5'
13
+ VERSION = '1.2.rc6'
14
14
  end
15
15
  module Shalmaneser
16
16
  PROGRAM_NAME = 'Shalmaneser'
17
- VERSION = '1.2.rc5'
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
- class GraphNode
21
-
22
- def initialize(id)
23
- @id = id
24
- @children = []
25
- @parents = []
26
- @features = {}
27
- end
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
- # for Marshalling:
30
- # Dump just IDs instead of actual nodes from Parents and Children lists.
31
- # Otherwise the Marshaller will go crazy following
32
- # all the links to objects mentioned.
33
- # After loading: replace IDs by actual objects with a little help
34
- # from the caller.
35
- # @deprecated This method seams to be useless.
36
- def _dump(depth)
37
- @id.to_s +
38
- "QQSEPVALUESQQ" +
39
- Marshal.dump(@features) +
40
- "QQSEPVALUESQQ" +
41
- @children.map { |label_child|
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
- "QQSEPVALUESQQ" +
45
- @parents.map { |label_parent|
45
+ "QQSEPVALUESQQ" +
46
+ @parents.map { |label_parent|
46
47
  label_parent[0] + "QQSEPQQ" + label_parent[1].id
47
- }.join("QQPAIRQQ")
48
- end
48
+ }.join("QQPAIRQQ")
49
+ end
49
50
 
50
- def self._load(string)
51
- id, _features_s, _children_s, _parents_s = string.split("QQSEPVALUESQQ")
51
+ def self._load(string)
52
+ id, _features_s, _children_s, _parents_s = string.split("QQSEPVALUESQQ")
52
53
 
53
- result = GraphNode.new(id)
54
- result.fill_from_pickle(string)
54
+ result = GraphNode.new(id)
55
+ result.fill_from_pickle(string)
55
56
 
56
- result
57
- end
57
+ result
58
+ end
58
59
 
59
- def fill_from_pickle(string)
60
- _id, features_s, children_s, parents_s = string.split("QQSEPVALUESQQ")
60
+ def fill_from_pickle(string)
61
+ _id, features_s, children_s, parents_s = string.split("QQSEPVALUESQQ")
61
62
 
62
- @features = Marshal.load(features_s)
63
+ @features = Marshal.load(features_s)
63
64
 
64
- if children_s.nil? || children_s.empty?
65
- @children = []
66
- else
67
- @children = children_s.split("QQPAIRQQ").map do |pair|
68
- pair.split("QQSEPQQ")
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
- if parents_s.nil? || parents_s.empty?
73
- @parents = []
74
- else
75
- @parents = parents_s.split("QQPAIRQQ").map { |pair|
76
- pair.split("QQSEPQQ")
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
- def recover_from_dump(node_by_id)
82
- @children = @children.map { |label_id| [label_id[0], node_by_id.call(label_id[1])] }
83
- @parents = @parents.map { |label_id| [label_id[0], node_by_id.call(label_id[1])] }
84
- end
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
- # ID-related things
87
- def ==(other)
88
- if other.is_a?(GraphNode)
89
- @id == other.id
90
- else
91
- false
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
- def id
96
- @id
97
- end
96
+ def id
97
+ @id
98
+ end
98
99
 
99
- def chid(newid)
100
- @id = newid
101
- end
100
+ def chid(newid)
101
+ @id = newid
102
+ end
102
103
 
103
- # setting and retrieving features
104
+ # setting and retrieving features
104
105
 
105
- def get_f(feature)
106
- @features[feature]
107
- end
106
+ def get_f(feature)
107
+ @features[feature]
108
+ end
108
109
 
109
- def set_f(feature, value)
110
- @features[feature] = value
111
- end
110
+ def set_f(feature, value)
111
+ @features[feature] = value
112
+ end
112
113
 
113
- def add_f(feature, value)
114
- unless @features[feature].nil?
115
- raise "Feature " + feature + "already set."
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
- # ancestors
121
+ # ancestors
121
122
 
122
- def parents
123
- @parents.map { |label| label[1] }
124
- end
123
+ def parents
124
+ @parents.map { |label| label[1] }
125
+ end
125
126
 
126
- def parent_labels
127
- @parents.map { |label_parent| label_parent[0] }
128
- end
127
+ def parent_labels
128
+ @parents.map { |label_parent| label_parent[0] }
129
+ end
129
130
 
130
- def parent_label(parent)
131
- @parents.each do |label_parent|
132
- if label_parent[1] == parent
133
- return label_parent[0]
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
- nil
138
- end
138
+ nil
139
+ end
139
140
 
140
- def parents_with_edgelabel
141
- @parents
142
- end
141
+ def parents_with_edgelabel
142
+ @parents
143
+ end
143
144
 
144
- def each_parent
145
- @parents.each { |label_parent| yield label_parent[1] }
146
- end
145
+ def each_parent
146
+ @parents.each { |label_parent| yield label_parent[1] }
147
+ end
147
148
 
148
- def each_parent_with_edgelabel
149
- @parents.each { |label_parent| yield label_parent}
150
- end
149
+ def each_parent_with_edgelabel
150
+ @parents.each { |label_parent| yield label_parent}
151
+ end
151
152
 
152
- def parents_by_edgelabels(labels)
153
- @parents.select { |label_parent|
154
- labels.include? label_parent[0]
155
- }.map { |label_parent|
156
- label_parent[1]
157
- }
158
- end
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
- def add_parent(parent, edgelabel, varhash = {})
161
- @parents << [edgelabel, parent]
161
+ def add_parent(parent, edgelabel, varhash = {})
162
+ @parents << [edgelabel, parent]
162
163
 
163
- # and vice versa: add self as child to parent
164
- unless varhash["pointer_insteadof_edge"]
165
- unless parent.children_with_edgelabel.include? [edgelabel, self]
166
- parent.add_child(self, edgelabel)
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
- def remove_parent(parent, edgelabel, varhash={})
172
- @parents = @parents.reject { |label_child|
173
- label_child.first == edgelabel and
174
- label_child.last == parent
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
- # and vice versa: remove self as child from parent
178
- unless varhash["pointer_insteadof_edge"]
179
- if parent.children_with_edgelabel.include? [edgelabel, self]
180
- parent.remove_child(self, edgelabel)
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
- def indeg
186
- @parents.length
187
- end
186
+ def indeg
187
+ @parents.length
188
+ end
188
189
 
189
- def ancestors
190
- ancestors_noduplicates([], [])
191
- end
190
+ def ancestors
191
+ ancestors_noduplicates([], [])
192
+ end
192
193
 
193
- def ancestors_by_edgelabels(labels)
194
- ancestors_noduplicates([], labels)
195
- end
194
+ def ancestors_by_edgelabels(labels)
195
+ ancestors_noduplicates([], labels)
196
+ end
196
197
 
197
- # descendants
198
+ # descendants
198
199
 
199
- def children
200
- @children.map { |label_child| label_child[1] }
201
- end
200
+ def children
201
+ @children.map { |label_child| label_child[1] }
202
+ end
202
203
 
203
- def child_labels
204
- @children.map { |label_child| label_child[0] }
205
- end
204
+ def child_labels
205
+ @children.map { |label_child| label_child[0] }
206
+ end
206
207
 
207
- def child_label(child)
208
- @children.each { |label_child|
209
- if label_child[1] == child
210
- return label_child[0]
211
- end
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
- nil
215
- end
215
+ nil
216
+ end
216
217
 
217
- def children_with_edgelabel
218
- @children
219
- end
218
+ def children_with_edgelabel
219
+ @children
220
+ end
220
221
 
221
- def each_child
222
- @children.each { |label_child| yield label_child[1]}
223
- end
222
+ def each_child
223
+ @children.each { |label_child| yield label_child[1]}
224
+ end
224
225
 
225
- def each_child_with_edgelabel
226
- @children.each { |label_child| yield label_child }
227
- end
226
+ def each_child_with_edgelabel
227
+ @children.each { |label_child| yield label_child }
228
+ end
228
229
 
229
- def children_by_edgelabels(labels)
230
- return @children.select { |label_child|
231
- labels.include? label_child[0]
232
- }.map { |label_child|
233
- label_child[1]
234
- }
235
- end
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
- def add_child(child, edgelabel, varhash = {})
238
- @children << [edgelabel, child]
238
+ def add_child(child, edgelabel, varhash = {})
239
+ @children << [edgelabel, child]
239
240
 
240
- # and vice versa: add self as parent to child
241
- unless varhash["pointer_insteadof_edge"]
242
- unless child.parents_with_edgelabel.include? [edgelabel, self]
243
- child.add_parent(self, edgelabel)
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
- def remove_child(child, edgelabel, varhash={})
249
- @children = @children.reject { |label_child|
250
- label_child.first == edgelabel and
251
- label_child.last == child
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
- # and vice versa: remove self as parent from child
255
- unless varhash["pointer_insteadof_edge"]
256
- if child.parents_with_edgelabel.include? [edgelabel, self]
257
- child.remove_parent(self, edgelabel)
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
- def change_child_label(child, oldlabel, newlabel, varhash={})
263
- if @children.include? [oldlabel, child]
264
- remove_child(child,oldlabel, varhash)
265
- add_child(child, newlabel, varhash)
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
- def remove_all_children(varhash={})
270
- each_child_with_edgelabel { |label, child|
271
- remove_child(child, label, varhash)
272
- }
273
- end
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
- @children = list
281
- end
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
- def outdeg
284
- return @children.length
285
- end
281
+ @children = list
282
+ end
286
283
 
287
- def yield_nodes
288
- arr = []
289
- if outdeg == 0
290
- arr << self
284
+ def outdeg
285
+ return @children.length
291
286
  end
292
- each_child { |c|
293
- if c.outdeg == 0
294
- arr << c
295
- else
296
- arr.concat c.yield_nodes
287
+
288
+ def yield_nodes
289
+ arr = []
290
+ if outdeg == 0
291
+ arr << self
297
292
  end
298
- }
299
- return arr
300
- end
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
- def descendants
303
- descendants_noduplicates([], [])
304
- end
303
+ def descendants
304
+ descendants_noduplicates([], [])
305
+ end
305
306
 
306
- def descendants_by_edgelabels(labels)
307
- return descendants_noduplicates([], labels)
308
- end
307
+ def descendants_by_edgelabels(labels)
308
+ return descendants_noduplicates([], labels)
309
+ end
309
310
 
310
- protected
311
+ protected
311
312
 
312
- def descendants_noduplicates(nodes, labels)
313
- each_child_with_edgelabel { |l_c|
314
- if labels.empty? or labels.include? l_c[0]
315
- unless nodes.include? l_c[1]
316
- nodes = l_c[1].descendants_noduplicates(nodes << l_c[1], labels)
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
- end
319
- }
320
- return nodes
321
- end
320
+ }
321
+ return nodes
322
+ end
322
323
 
323
- def ancestors_noduplicates(nodes, labels)
324
- each_parent_with_edgelabel { |l_p|
325
- if labels.empty? or labels.include? l_p[0]
326
- unless nodes.include? l_p[1]
327
- nodes = l_p[1].ancestors_noduplicates(nodes << l_p[1], labels)
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
- end
330
- }
331
- return nodes
332
- end
331
+ }
332
+ return nodes
333
+ end
333
334
 
334
- #### CAUTION: set_parents must be called with an "internal format" list of parents:
335
- #### instead of using [node, edgelabel], use [edgelabel, node]
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
- def set_parents(list, varhash={})
338
- each_parent_with_edgelabel { |label, parent|
339
- remove_parent(parent, label, varhash)
340
- }
338
+ def set_parents(list, varhash={})
339
+ each_parent_with_edgelabel { |label, parent|
340
+ remove_parent(parent, label, varhash)
341
+ }
341
342
 
342
- list.each { |label, parent|
343
- add_parent(label, parent)
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
- def initialize(string, # string representing a single XML element
12
- i_am_text = false) # boolean: xml element (false) or text (true)
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
- def self.empty_sentence(sentence_id) # string
99
+ # @param [String] sentence_id Identificator for a new sentence.
100
+ def self.empty_sentence(sentence_id)
100
101
  sentence_id = sentence_id.gsub(/'/, "&apos;")
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.rc5
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-13 00:00:00.000000000 Z
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