synvert-core 1.13.1 → 1.14.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/Gemfile.lock +4 -4
- data/README.md +1 -0
- data/lib/synvert/core/rewriter/instance.rb +30 -24
- data/lib/synvert/core/rewriter.rb +21 -13
- data/lib/synvert/core/strategy.rb +7 -0
- data/lib/synvert/core/version.rb +1 -1
- data/lib/synvert/core.rb +2 -0
- data/spec/synvert/core/rewriter/instance_spec.rb +6 -2
- metadata +3 -3
- data/lib/synvert/core/rewriter/any_value.rb +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bf1187899f9eb743b73e0295ebac08014131dae4acd6e4d17475f9eb3cc71657
|
4
|
+
data.tar.gz: fcafcb32987582fc9f52e2735ee3001fc9bc7110aeea9da3b7f91cd307ddb064
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 623cc353b1d7e4963de14dfee389ad6044711c8f9284e55e24c83e7d652dc65c236cf32c1acc2cb40a615b549cd418fcf5f8b290bb3f87bd6f90bbc9b2341161
|
7
|
+
data.tar.gz: 98ba68a0638b04d2d21405c194117c7cc98ca8159d362cf847e6f39fe78a865939f179798db6f76305571dd01fd53253ee8ffd29d4f822e9cb56d239ad86408e
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## 1.14.1 (2022-10-26)
|
4
|
+
|
5
|
+
* Abstract AnyValue to NodeQuery
|
6
|
+
|
7
|
+
## 1.14.0 (2022-10-25)
|
8
|
+
|
9
|
+
* `insert_after` and `insert_before` accepts `to` option
|
10
|
+
* Add `configure` dsl to configure the strategy
|
11
|
+
|
3
12
|
## 1.13.1 (2022-10-17)
|
4
13
|
|
5
14
|
* Do not send hash to keyword arguments
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
synvert-core (1.
|
4
|
+
synvert-core (1.14.1)
|
5
5
|
activesupport (< 7.0.0)
|
6
6
|
erubis
|
7
7
|
node_mutation
|
@@ -50,10 +50,10 @@ GEM
|
|
50
50
|
method_source (1.0.0)
|
51
51
|
minitest (5.16.3)
|
52
52
|
nenv (0.3.0)
|
53
|
-
node_mutation (1.
|
53
|
+
node_mutation (1.7.1)
|
54
54
|
activesupport (< 7.0.0)
|
55
55
|
erubis
|
56
|
-
node_query (1.
|
56
|
+
node_query (1.10.0)
|
57
57
|
activesupport (< 7.0.0)
|
58
58
|
notiffany (0.1.3)
|
59
59
|
nenv (~> 0.1)
|
@@ -61,7 +61,7 @@ GEM
|
|
61
61
|
parallel (1.22.1)
|
62
62
|
parser (3.1.2.1)
|
63
63
|
ast (~> 2.4.1)
|
64
|
-
parser_node_ext (0.4.
|
64
|
+
parser_node_ext (0.4.1)
|
65
65
|
parser
|
66
66
|
pry (0.14.1)
|
67
67
|
coderay (~> 1.1)
|
data/README.md
CHANGED
@@ -59,6 +59,7 @@ Want to use the CLI, check out [synvert-ruby](https://github.com/xinminlabs/synv
|
|
59
59
|
|
60
60
|
DSLs are as follows
|
61
61
|
|
62
|
+
* [configure](./Synvert/Core/Rewriter.html#configure-instance_method) - configure the rewriter
|
62
63
|
* [description](./Synvert/Core/Rewriter.html#description-instance_method) - set description of the rewriter
|
63
64
|
* [if_ruby](./Synvert/Core/Rewriter.html#if_ruby-instance_method) - check if ruby version is greater than or equal to the specified ruby version
|
64
65
|
* [if_gem](./Synvert/Core/Rewriter.html#if_gem-instance_method) - compare version of specified gem
|
@@ -8,6 +8,7 @@ module Synvert::Core
|
|
8
8
|
# One instance can contain one or many {Synvert::Core::Rewriter::Scope} and {Synvert::Rewriter::Condition}.
|
9
9
|
class Rewriter::Instance
|
10
10
|
include Rewriter::Helper
|
11
|
+
|
11
12
|
# Initialize an Instance.
|
12
13
|
#
|
13
14
|
# @param rewriter [Synvert::Core::Rewriter]
|
@@ -18,6 +19,11 @@ module Synvert::Core
|
|
18
19
|
@actions = []
|
19
20
|
@file_patterns = file_patterns
|
20
21
|
@block = block
|
22
|
+
strategy = NodeMutation::Strategy::KEEP_RUNNING
|
23
|
+
if rewriter.options[:strategy] == Strategy::ALLOW_INSERT_AT_SAME_POSITION
|
24
|
+
strategy |= NodeMutation::Strategy::ALLOW_INSERT_AT_SAME_POSITION
|
25
|
+
end
|
26
|
+
NodeMutation.configure({ strategy: strategy })
|
21
27
|
rewriter.helpers.each { |helper| singleton_class.send(:define_method, helper[:name], &helper[:block]) }
|
22
28
|
end
|
23
29
|
|
@@ -85,7 +91,7 @@ module Synvert::Core
|
|
85
91
|
# DSL #
|
86
92
|
#######
|
87
93
|
|
88
|
-
#
|
94
|
+
# It creates a {Synvert::Core::Rewriter::WithinScope} to recursively find matching ast nodes,
|
89
95
|
# then continue operating on each matching ast node.
|
90
96
|
# @example
|
91
97
|
# # matches User.find_by_login('test')
|
@@ -109,7 +115,7 @@ module Synvert::Core
|
|
109
115
|
alias with_node within_node
|
110
116
|
alias find_node within_node
|
111
117
|
|
112
|
-
#
|
118
|
+
# It creates a {Synvert::Core::Rewriter::GotoScope} to go to a child node,
|
113
119
|
# then continue operating on the child node.
|
114
120
|
# @example
|
115
121
|
# # head status: 406
|
@@ -123,7 +129,7 @@ module Synvert::Core
|
|
123
129
|
Rewriter::GotoScope.new(self, child_node_name, &block).process
|
124
130
|
end
|
125
131
|
|
126
|
-
#
|
132
|
+
# It creates a {Synvert::Core::Rewriter::IfExistCondition} to check
|
127
133
|
# if matching nodes exist in the child nodes, if so, then continue operating on each matching ast node.
|
128
134
|
# @example
|
129
135
|
# # Klass.any_instance.stub(:message)
|
@@ -137,7 +143,7 @@ module Synvert::Core
|
|
137
143
|
Rewriter::IfExistCondition.new(self, nql_or_rules, &block).process
|
138
144
|
end
|
139
145
|
|
140
|
-
#
|
146
|
+
# It creates a {Synvert::Core::Rewriter::UnlessExistCondition} to check
|
141
147
|
# if matching nodes doesn't exist in the child nodes, if so, then continue operating on each matching ast node.
|
142
148
|
# @example
|
143
149
|
# # obj.stub(:message)
|
@@ -151,7 +157,7 @@ module Synvert::Core
|
|
151
157
|
Rewriter::UnlessExistCondition.new(self, nql_or_rules, &block).process
|
152
158
|
end
|
153
159
|
|
154
|
-
#
|
160
|
+
# It creates a {Synvert::Core::Rewriter::IfOnlyExistCondition} to check
|
155
161
|
# if current node has only one child node and the child node matches,
|
156
162
|
# if so, then continue operating on each matching ast node.
|
157
163
|
# @example
|
@@ -166,7 +172,7 @@ module Synvert::Core
|
|
166
172
|
Rewriter::IfOnlyExistCondition.new(self, nql_or_rules, &block).process
|
167
173
|
end
|
168
174
|
|
169
|
-
#
|
175
|
+
# It appends the code to the bottom of current node body.
|
170
176
|
# @example
|
171
177
|
# # def teardown
|
172
178
|
# # clean_something
|
@@ -184,7 +190,7 @@ module Synvert::Core
|
|
184
190
|
@current_mutation.append(@current_node, code)
|
185
191
|
end
|
186
192
|
|
187
|
-
#
|
193
|
+
# It prepends the code to the top of current node body.
|
188
194
|
# @example
|
189
195
|
# # def setup
|
190
196
|
# # do_something
|
@@ -202,7 +208,7 @@ module Synvert::Core
|
|
202
208
|
@current_mutation.prepend(@current_node, code)
|
203
209
|
end
|
204
210
|
|
205
|
-
#
|
211
|
+
# It inserts code.
|
206
212
|
# @example
|
207
213
|
# # open('http://test.com')
|
208
214
|
# # =>
|
@@ -217,7 +223,7 @@ module Synvert::Core
|
|
217
223
|
@current_mutation.insert(@current_node, code, at: at, to: to)
|
218
224
|
end
|
219
225
|
|
220
|
-
#
|
226
|
+
# It inserts the code next to the current node.
|
221
227
|
# @example
|
222
228
|
# # Synvert::Application.config.secret_token = "0447aa931d42918bfb934750bb78257088fb671186b5d1b6f9fddf126fc8a14d34f1d045cefab3900751c3da121a8dd929aec9bafe975f1cabb48232b4002e4e"
|
223
229
|
# # =>
|
@@ -227,12 +233,12 @@ module Synvert::Core
|
|
227
233
|
# insert_after "{{receiver}}.secret_key_base = \"#{SecureRandom.hex(64)}\""
|
228
234
|
# end
|
229
235
|
# @param code [String] code need to be inserted.
|
230
|
-
def insert_after(code)
|
236
|
+
def insert_after(code, to: nil)
|
231
237
|
column = ' ' * NodeMutation.adapter.get_start_loc(@current_node).column
|
232
|
-
@current_mutation.insert(@current_node, "\n#{column}#{code}", at: 'end')
|
238
|
+
@current_mutation.insert(@current_node, "\n#{column}#{code}", at: 'end', to: to)
|
233
239
|
end
|
234
240
|
|
235
|
-
#
|
241
|
+
# It inserts the code previous to the current node.
|
236
242
|
# @example
|
237
243
|
# # Synvert::Application.config.secret_token = "0447aa931d42918bfb934750bb78257088fb671186b5d1b6f9fddf126fc8a14d34f1d045cefab3900751c3da121a8dd929aec9bafe975f1cabb48232b4002e4e"
|
238
244
|
# # =>
|
@@ -242,12 +248,12 @@ module Synvert::Core
|
|
242
248
|
# insert_before "{{receiver}}.secret_key_base = \"#{SecureRandom.hex(64)}\""
|
243
249
|
# end
|
244
250
|
# @param code [String] code need to be inserted.
|
245
|
-
def insert_before(code)
|
251
|
+
def insert_before(code, to: nil)
|
246
252
|
column = ' ' * NodeMutation.adapter.get_start_loc(@current_node).column
|
247
|
-
@current_mutation.insert(@current_node, "#{code}\n#{column}", at: 'beginning')
|
253
|
+
@current_mutation.insert(@current_node, "#{code}\n#{column}", at: 'beginning', to: to)
|
248
254
|
end
|
249
255
|
|
250
|
-
#
|
256
|
+
# It replaces erb stmt code to expr code.
|
251
257
|
# @example
|
252
258
|
# # <% form_for post do |f| %>
|
253
259
|
# # <% end %>
|
@@ -261,7 +267,7 @@ module Synvert::Core
|
|
261
267
|
@current_mutation.actions << Rewriter::ReplaceErbStmtWithExprAction.new(@current_node).process
|
262
268
|
end
|
263
269
|
|
264
|
-
#
|
270
|
+
# It replaces the whole code of current node.
|
265
271
|
# @example
|
266
272
|
# # obj.stub(:foo => 1, :bar => 2)
|
267
273
|
# # =>
|
@@ -274,7 +280,7 @@ module Synvert::Core
|
|
274
280
|
@current_mutation.replace_with(@current_node, code)
|
275
281
|
end
|
276
282
|
|
277
|
-
#
|
283
|
+
# It replaces the code of specified child nodes.
|
278
284
|
# @example
|
279
285
|
# # assert(object.empty?)
|
280
286
|
# # =>
|
@@ -289,7 +295,7 @@ module Synvert::Core
|
|
289
295
|
@current_mutation.replace(@current_node, *selectors, with: with)
|
290
296
|
end
|
291
297
|
|
292
|
-
#
|
298
|
+
# It removes current node.
|
293
299
|
# @example
|
294
300
|
# with_node type: 'send', message: { in: %w[puts p] } do
|
295
301
|
# remove
|
@@ -300,7 +306,7 @@ module Synvert::Core
|
|
300
306
|
@current_mutation.remove(@current_node, **options)
|
301
307
|
end
|
302
308
|
|
303
|
-
#
|
309
|
+
# It deletes child nodes.
|
304
310
|
# @example
|
305
311
|
# # FactoryBot.create(...)
|
306
312
|
# # =>
|
@@ -315,7 +321,7 @@ module Synvert::Core
|
|
315
321
|
@current_mutation.delete(@current_node, *selectors, **options)
|
316
322
|
end
|
317
323
|
|
318
|
-
#
|
324
|
+
# It wraps current node with code.
|
319
325
|
# @example
|
320
326
|
# # class Foobar
|
321
327
|
# # end
|
@@ -332,12 +338,12 @@ module Synvert::Core
|
|
332
338
|
@current_mutation.wrap(@current_node, with: with)
|
333
339
|
end
|
334
340
|
|
335
|
-
#
|
341
|
+
# No operation.
|
336
342
|
def noop
|
337
343
|
@current_mutation.noop(@current_node)
|
338
344
|
end
|
339
345
|
|
340
|
-
#
|
346
|
+
# It creates a {Synvert::Core::Rewriter::Warning} to save warning message.
|
341
347
|
# @example
|
342
348
|
# within_files 'vendor/plugins' do
|
343
349
|
# warn 'Rails::Plugin is deprecated and will be removed in Rails 4.0. Instead of adding plugins to vendor/plugins use gems or bundler with path or git dependencies.'
|
@@ -350,9 +356,9 @@ module Synvert::Core
|
|
350
356
|
# Match any value but nil.
|
351
357
|
# @example
|
352
358
|
# type: 'hash', nothing_value: 'true', status_value: any_value
|
353
|
-
# @return [
|
359
|
+
# @return [NodeQuery::AnyValue]
|
354
360
|
def any_value
|
355
|
-
|
361
|
+
NodeQuery::AnyValue.new
|
356
362
|
end
|
357
363
|
|
358
364
|
private
|
@@ -30,8 +30,6 @@ module Synvert::Core
|
|
30
30
|
autoload :RubyVersion, 'synvert/core/rewriter/ruby_version'
|
31
31
|
autoload :GemSpec, 'synvert/core/rewriter/gem_spec'
|
32
32
|
|
33
|
-
autoload :AnyValue, 'synvert/core/rewriter/any_value'
|
34
|
-
|
35
33
|
class << self
|
36
34
|
# Register a rewriter with its group and name.
|
37
35
|
#
|
@@ -163,8 +161,18 @@ module Synvert::Core
|
|
163
161
|
# DSL #
|
164
162
|
#######
|
165
163
|
|
166
|
-
#
|
167
|
-
#
|
164
|
+
# Configure the rewriter
|
165
|
+
# @example
|
166
|
+
# configure({ strategy: 'allow_insert_at_same_position' })
|
167
|
+
# @param options [Hash]
|
168
|
+
# @option strategy [String] allow_insert_at_same_position
|
169
|
+
def configure(options)
|
170
|
+
if options[:strategy]
|
171
|
+
@options[:strategy] = options[:strategy]
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
# It sets description of the rewrite or get description.
|
168
176
|
# @example
|
169
177
|
# Synvert::Rewriter.new 'rspec', 'use_new_syntax' do
|
170
178
|
# description 'It converts rspec code to new syntax, it calls all rspec sub snippets.'
|
@@ -179,7 +187,7 @@ module Synvert::Core
|
|
179
187
|
end
|
180
188
|
end
|
181
189
|
|
182
|
-
#
|
190
|
+
# It checks if ruby version is greater than or equal to the specified ruby version.
|
183
191
|
# @example
|
184
192
|
# Synvert::Rewriter.new 'ruby', 'new_safe_navigation_operator' do
|
185
193
|
# if_ruby '2.3.0'
|
@@ -189,7 +197,7 @@ module Synvert::Core
|
|
189
197
|
@ruby_version = Rewriter::RubyVersion.new(version)
|
190
198
|
end
|
191
199
|
|
192
|
-
#
|
200
|
+
# It compares version of the specified gem.
|
193
201
|
# @example
|
194
202
|
# Synvert::Rewriter.new 'rails', 'upgrade_5_2_to_6_0' do
|
195
203
|
# if_gem 'rails', '>= 6.0'
|
@@ -200,7 +208,7 @@ module Synvert::Core
|
|
200
208
|
@gem_spec = Rewriter::GemSpec.new(name, version)
|
201
209
|
end
|
202
210
|
|
203
|
-
#
|
211
|
+
# It finds specified files.
|
204
212
|
# It creates a {Synvert::Core::Rewriter::Instance} to rewrite code.
|
205
213
|
# @example
|
206
214
|
# Synvert::Rewriter.new 'rspec', 'be_close_to_be_within' do
|
@@ -224,10 +232,10 @@ module Synvert::Core
|
|
224
232
|
end
|
225
233
|
end
|
226
234
|
|
227
|
-
#
|
235
|
+
# It finds a specifiled file.
|
228
236
|
alias within_file within_files
|
229
237
|
|
230
|
-
#
|
238
|
+
# It adds a new file.
|
231
239
|
# @example
|
232
240
|
# Synvert::Rewriter.new 'rails', 'add_application_record' do
|
233
241
|
# add_file 'app/models/application_record.rb', <<~EOS
|
@@ -251,7 +259,7 @@ module Synvert::Core
|
|
251
259
|
File.write(filepath, content)
|
252
260
|
end
|
253
261
|
|
254
|
-
#
|
262
|
+
# It removes a file.
|
255
263
|
# @example
|
256
264
|
# Synvert::Rewriter.new 'rails', 'upgrade_4_0_to_4_1' do
|
257
265
|
# remove_file 'config/initializers/secret_token.rb'
|
@@ -264,7 +272,7 @@ module Synvert::Core
|
|
264
272
|
File.delete(file_path) if File.exist?(file_path)
|
265
273
|
end
|
266
274
|
|
267
|
-
#
|
275
|
+
# It calls anther rewriter.
|
268
276
|
# @example
|
269
277
|
# Synvert::Rewriter.new 'minitest', 'better_syntax' do
|
270
278
|
# add_snippet 'minitest', 'assert_empty'
|
@@ -299,7 +307,7 @@ module Synvert::Core
|
|
299
307
|
@sub_snippets << rewriter
|
300
308
|
end
|
301
309
|
|
302
|
-
#
|
310
|
+
# It defines helper method for {Synvert::Core::Rewriter::Instance}.
|
303
311
|
# @example
|
304
312
|
# Synvert::Rewriter.new 'rails', 'convert_active_record_dirty_5_0_to_5_1' do
|
305
313
|
# helper_method :find_callbacks_and_convert do |callback_names, callback_changes|
|
@@ -316,7 +324,7 @@ module Synvert::Core
|
|
316
324
|
@helpers << { name: name, block: block }
|
317
325
|
end
|
318
326
|
|
319
|
-
#
|
327
|
+
# It sets todo of the rewriter.
|
320
328
|
# Or get todo.
|
321
329
|
# @example
|
322
330
|
# Synvert::Rewriter.new 'rails', 'upgrade_3_2_to_4_0' do
|
data/lib/synvert/core/version.rb
CHANGED
data/lib/synvert/core.rb
CHANGED
@@ -18,11 +18,13 @@ module Synvert
|
|
18
18
|
autoload :Rewriter, 'synvert/core/rewriter'
|
19
19
|
autoload :Engine, 'synvert/core/engine'
|
20
20
|
autoload :Utils, 'synvert/core/utils'
|
21
|
+
autoload :Strategy, 'synvert/core/strategy'
|
21
22
|
end
|
22
23
|
end
|
23
24
|
|
24
25
|
module Synvert
|
25
26
|
Rewriter = Core::Rewriter
|
27
|
+
Strategy = Core::Strategy
|
26
28
|
|
27
29
|
ALL_RUBY_FILES = %w[**/*.rb]
|
28
30
|
ALL_RAKE_FILES = %w[**/*.rake]
|
@@ -128,7 +128,7 @@ module Synvert::Core
|
|
128
128
|
instance.current_mutation = double
|
129
129
|
instance.current_node = double
|
130
130
|
expect(NodeMutation).to receive_message_chain(:adapter, :get_start_loc, :column).and_return(2)
|
131
|
-
expect(instance.current_mutation).to receive(:insert).with(instance.current_node, "\n Foobar", at: 'end')
|
131
|
+
expect(instance.current_mutation).to receive(:insert).with(instance.current_node, "\n Foobar", at: 'end', to: nil)
|
132
132
|
instance.insert_after 'Foobar'
|
133
133
|
end
|
134
134
|
|
@@ -136,7 +136,7 @@ module Synvert::Core
|
|
136
136
|
instance.current_mutation = double
|
137
137
|
instance.current_node = double
|
138
138
|
expect(NodeMutation).to receive_message_chain(:adapter, :get_start_loc, :column).and_return(2)
|
139
|
-
expect(instance.current_mutation).to receive(:insert).with(instance.current_node, "Foobar\n ", at: 'beginning')
|
139
|
+
expect(instance.current_mutation).to receive(:insert).with(instance.current_node, "Foobar\n ", at: 'beginning', to: nil)
|
140
140
|
instance.insert_before 'Foobar'
|
141
141
|
end
|
142
142
|
|
@@ -197,6 +197,10 @@ module Synvert::Core
|
|
197
197
|
instance.warn 'foobar'
|
198
198
|
end
|
199
199
|
|
200
|
+
it 'parses any_value' do
|
201
|
+
expect(instance.any_value).to be_instance_of NodeQuery::AnyValue
|
202
|
+
end
|
203
|
+
|
200
204
|
describe '#process' do
|
201
205
|
let(:rewriter) { Rewriter.new('foo', 'bar') }
|
202
206
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: synvert-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.14.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Huang
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-10-
|
11
|
+
date: 2022-10-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -133,7 +133,6 @@ files:
|
|
133
133
|
- lib/synvert/core/node_ext.rb
|
134
134
|
- lib/synvert/core/rewriter.rb
|
135
135
|
- lib/synvert/core/rewriter/action/replace_erb_stmt_with_expr_action.rb
|
136
|
-
- lib/synvert/core/rewriter/any_value.rb
|
137
136
|
- lib/synvert/core/rewriter/condition.rb
|
138
137
|
- lib/synvert/core/rewriter/condition/if_exist_condition.rb
|
139
138
|
- lib/synvert/core/rewriter/condition/if_only_exist_condition.rb
|
@@ -146,6 +145,7 @@ files:
|
|
146
145
|
- lib/synvert/core/rewriter/scope/goto_scope.rb
|
147
146
|
- lib/synvert/core/rewriter/scope/within_scope.rb
|
148
147
|
- lib/synvert/core/rewriter/warning.rb
|
148
|
+
- lib/synvert/core/strategy.rb
|
149
149
|
- lib/synvert/core/utils.rb
|
150
150
|
- lib/synvert/core/version.rb
|
151
151
|
- spec/spec_helper.rb
|