synvert-core 1.21.5 → 1.21.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/main.yml +6 -5
- data/CHANGELOG.md +10 -0
- data/Gemfile +0 -1
- data/Gemfile.lock +8 -9
- data/lib/synvert/core/engine/erb.rb +6 -8
- data/lib/synvert/core/rewriter/instance.rb +4 -4
- data/lib/synvert/core/rewriter.rb +14 -5
- data/lib/synvert/core/snippet_not_found_error.rb +1 -1
- data/lib/synvert/core/strategy.rb +1 -1
- data/lib/synvert/core/utils.rb +8 -4
- data/lib/synvert/core/version.rb +1 -1
- data/lib/synvert/core.rb +3 -2
- data/spec/synvert/core/engine/erb_spec.rb +8 -5
- data/spec/synvert/core/rewriter/instance_spec.rb +64 -15
- data/spec/synvert/core/rewriter_spec.rb +21 -17
- data/spec/synvert/core/utils_spec.rb +19 -4
- data/synvert-core-ruby.gemspec +1 -2
- metadata +5 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0d33e2874a1d23b725a4d2bb62e8cfd03d71b9c82e22fbe9a349336ac19f6eab
|
4
|
+
data.tar.gz: 74a56b255b08c5f017fe0717dbd644cfc61983a06c6c7c0b0ec86f77d6566ff1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a98c6ded4885bebda395ad253cb826ce1e82ad06d734cc0bfbd00b592676c6dde8aac530d30d2d27beb3b7ca314519a782de91fa0e97905ea4c1fd62122eef98
|
7
|
+
data.tar.gz: ec1d2ac24a8f9066bb228363b961cc1e93da96f501cbfb166fb398cb21a3bd80d5ee496b261e0901289b6fed3d9749fdf04cd5b2db458853caf742ceca5c5691
|
data/.github/workflows/main.yml
CHANGED
@@ -11,10 +11,10 @@ jobs:
|
|
11
11
|
runs-on: ubuntu-latest
|
12
12
|
strategy:
|
13
13
|
matrix:
|
14
|
-
ruby-version: ['2.
|
14
|
+
ruby-version: ['2.7', '3.0', '3.1', '3.2']
|
15
15
|
|
16
16
|
steps:
|
17
|
-
- uses: actions/checkout@
|
17
|
+
- uses: actions/checkout@v3
|
18
18
|
- name: Set up Ruby
|
19
19
|
uses: ruby/setup-ruby@v1
|
20
20
|
with:
|
@@ -28,10 +28,11 @@ jobs:
|
|
28
28
|
needs: test
|
29
29
|
name: Update gh-pages to docs
|
30
30
|
steps:
|
31
|
-
- uses: actions/checkout@
|
32
|
-
- uses:
|
31
|
+
- uses: actions/checkout@v3
|
32
|
+
- uses: ruby/setup-ruby@v1
|
33
33
|
with:
|
34
|
-
ruby-version: '3.
|
34
|
+
ruby-version: '3.2'
|
35
|
+
bundler-cache: true
|
35
36
|
- name: Install required gem dependencies
|
36
37
|
run: gem install yard redcarpet github-markup --no-document
|
37
38
|
- name: Build YARD Ruby Documentation
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## 1.21.7 (2023-03-23)
|
4
|
+
|
5
|
+
* Polish `erb` engine
|
6
|
+
* Update `node_mutation` to 1.12.1
|
7
|
+
|
8
|
+
## 1.21.6 (2023-02-16)
|
9
|
+
|
10
|
+
* `RAILS_VIEW_FILES` do not check `haml` and `slim` files until we support them
|
11
|
+
* Add constants `ALL_FILES` and `ALL_ERB_FILES`
|
12
|
+
|
3
13
|
## 1.21.5 (2023-02-15)
|
4
14
|
|
5
15
|
* Rewrite erb engine, no need to decode
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,10 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
synvert-core (1.21.
|
4
|
+
synvert-core (1.21.7)
|
5
5
|
activesupport (< 7.0.0)
|
6
|
-
|
7
|
-
node_mutation (>= 1.9.2)
|
6
|
+
node_mutation (>= 1.12.1)
|
8
7
|
node_query (>= 1.12.0)
|
9
8
|
parallel
|
10
9
|
parser
|
@@ -13,7 +12,7 @@ PATH
|
|
13
12
|
GEM
|
14
13
|
remote: https://rubygems.org/
|
15
14
|
specs:
|
16
|
-
activesupport (6.1.7.
|
15
|
+
activesupport (6.1.7.3)
|
17
16
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
18
17
|
i18n (>= 1.6, < 2)
|
19
18
|
minitest (>= 5.1)
|
@@ -21,10 +20,10 @@ GEM
|
|
21
20
|
zeitwerk (~> 2.3)
|
22
21
|
ast (2.4.2)
|
23
22
|
coderay (1.1.3)
|
24
|
-
concurrent-ruby (1.2.
|
23
|
+
concurrent-ruby (1.2.2)
|
25
24
|
diff-lcs (1.5.0)
|
26
25
|
erubis (2.7.0)
|
27
|
-
fakefs (
|
26
|
+
fakefs (2.4.0)
|
28
27
|
ffi (1.15.5)
|
29
28
|
formatador (1.1.0)
|
30
29
|
guard (2.18.0)
|
@@ -48,16 +47,16 @@ GEM
|
|
48
47
|
rb-inotify (~> 0.9, >= 0.9.10)
|
49
48
|
lumberjack (1.2.8)
|
50
49
|
method_source (1.0.0)
|
51
|
-
minitest (5.
|
50
|
+
minitest (5.18.0)
|
52
51
|
nenv (0.3.0)
|
53
|
-
node_mutation (1.
|
52
|
+
node_mutation (1.12.1)
|
54
53
|
erubis
|
55
54
|
node_query (1.12.0)
|
56
55
|
notiffany (0.1.3)
|
57
56
|
nenv (~> 0.1)
|
58
57
|
shellany (~> 0.0)
|
59
58
|
parallel (1.22.1)
|
60
|
-
parser (3.2.1.
|
59
|
+
parser (3.2.1.1)
|
61
60
|
ast (~> 2.4.1)
|
62
61
|
parser_node_ext (1.0.0)
|
63
62
|
parser
|
@@ -1,19 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'erubis'
|
4
|
-
|
5
3
|
module Synvert::Core
|
6
4
|
module Engine
|
7
5
|
class Erb
|
8
6
|
class << self
|
9
|
-
#
|
7
|
+
# Encode erb string, leave only ruby code, replace other erb code with whitespace.
|
10
8
|
#
|
11
|
-
# @param source [String] erb
|
12
|
-
# @return [String] ruby
|
9
|
+
# @param source [String] erb code.
|
10
|
+
# @return [String] encoded ruby code.
|
13
11
|
def encode(source)
|
14
|
-
source.gsub(
|
15
|
-
.
|
16
|
-
.
|
12
|
+
source.gsub(/%>.*?<%=?/m) { |str| ' ' * str.size }
|
13
|
+
.sub(/^.*?<%=?/m) { |str| ' ' * str.size }
|
14
|
+
.sub(/%>.*?$/m) { |str| ' ' * str.size }
|
17
15
|
end
|
18
16
|
end
|
19
17
|
end
|
@@ -20,7 +20,7 @@ module Synvert::Core
|
|
20
20
|
@block = block
|
21
21
|
strategy = NodeMutation::Strategy::KEEP_RUNNING
|
22
22
|
if rewriter.options[:strategy] == Strategy::ALLOW_INSERT_AT_SAME_POSITION
|
23
|
-
strategy |=
|
23
|
+
strategy |= NodeMutation::Strategy::ALLOW_INSERT_AT_SAME_POSITION
|
24
24
|
end
|
25
25
|
NodeMutation.configure({ strategy: strategy, tab_width: Configuration.tab_width })
|
26
26
|
rewriter.helpers.each { |helper| singleton_class.send(:define_method, helper[:name], &helper[:block]) }
|
@@ -90,7 +90,6 @@ module Synvert::Core
|
|
90
90
|
end
|
91
91
|
end
|
92
92
|
|
93
|
-
|
94
93
|
# Gets current node, it allows to get current node in block code.
|
95
94
|
#
|
96
95
|
# @return [Parser::AST::Node]
|
@@ -404,7 +403,8 @@ module Synvert::Core
|
|
404
403
|
if str.include?(quote) && !str.include?(another_quote)
|
405
404
|
return "#{another_quote}#{str}#{another_quote}"
|
406
405
|
end
|
407
|
-
|
406
|
+
|
407
|
+
escaped_str = str.gsub(quote) { |_char| '\\' + quote }
|
408
408
|
quote + escaped_str + quote
|
409
409
|
end
|
410
410
|
|
@@ -413,7 +413,7 @@ module Synvert::Core
|
|
413
413
|
# @param tab_size [Integer] tab size
|
414
414
|
# @return [String]
|
415
415
|
def add_leading_spaces(str, tab_size: 1)
|
416
|
-
" " * Configuration.tab_width * tab_size + str;
|
416
|
+
(" " * Configuration.tab_width * tab_size) + str;
|
417
417
|
end
|
418
418
|
|
419
419
|
private
|
@@ -94,7 +94,15 @@ module Synvert::Core
|
|
94
94
|
# @return [Array<Object>] the test results
|
95
95
|
# @!attribute [rw] options
|
96
96
|
# @return [Hash] the rewriter options
|
97
|
-
attr_reader :group,
|
97
|
+
attr_reader :group,
|
98
|
+
:name,
|
99
|
+
:sub_snippets,
|
100
|
+
:helpers,
|
101
|
+
:warnings,
|
102
|
+
:affected_files,
|
103
|
+
:ruby_version,
|
104
|
+
:gem_spec,
|
105
|
+
:test_results
|
98
106
|
attr_accessor :options
|
99
107
|
|
100
108
|
# Initialize a Rewriter.
|
@@ -230,10 +238,11 @@ module Synvert::Core
|
|
230
238
|
instance.process
|
231
239
|
end
|
232
240
|
else
|
233
|
-
results =
|
234
|
-
|
235
|
-
|
236
|
-
|
241
|
+
results =
|
242
|
+
handle_one_file(Array(file_patterns)) do |file_path|
|
243
|
+
instance = Rewriter::Instance.new(self, file_path, &block)
|
244
|
+
instance.test
|
245
|
+
end
|
237
246
|
merge_test_results(results)
|
238
247
|
end
|
239
248
|
end
|
data/lib/synvert/core/utils.rb
CHANGED
@@ -15,14 +15,17 @@ module Synvert::Core
|
|
15
15
|
if is_valid_url?(snippet_name)
|
16
16
|
uri = URI.parse(format_url(snippet_name))
|
17
17
|
return uri.open.read if remote_snippet_exists?(uri)
|
18
|
+
|
18
19
|
raise SnippetNotFoundError.new("#{snippet_name} nout found")
|
19
20
|
elsif is_valid_file?(snippet_name)
|
20
21
|
return File.read(snippet_name)
|
21
22
|
else
|
22
23
|
snippet_path = snippet_expand_path(snippet_name)
|
23
24
|
return File.read(snippet_path) if File.exist?(snippet_path)
|
25
|
+
|
24
26
|
snippet_uri = URI.parse(format_url(remote_snippet_url(snippet_name)))
|
25
27
|
return snippet_uri.open.read if remote_snippet_exists?(snippet_uri)
|
28
|
+
|
26
29
|
raise SnippetNotFoundError.new("#{snippet_name} nout found")
|
27
30
|
end
|
28
31
|
end
|
@@ -32,9 +35,10 @@ module Synvert::Core
|
|
32
35
|
# @return [Array<String>] file paths
|
33
36
|
def glob(file_patterns)
|
34
37
|
Dir.chdir(Configuration.root_path) do
|
35
|
-
all_files =
|
36
|
-
|
37
|
-
|
38
|
+
all_files =
|
39
|
+
file_patterns.flat_map do |file_pattern|
|
40
|
+
Dir.glob(file_pattern)
|
41
|
+
end
|
38
42
|
filter_only_paths(all_files) - get_skip_files
|
39
43
|
end
|
40
44
|
end
|
@@ -105,4 +109,4 @@ module Synvert::Core
|
|
105
109
|
end
|
106
110
|
end
|
107
111
|
end
|
108
|
-
end
|
112
|
+
end
|
data/lib/synvert/core/version.rb
CHANGED
data/lib/synvert/core.rb
CHANGED
@@ -9,7 +9,6 @@ require_relative './core/node_ext'
|
|
9
9
|
require 'active_support'
|
10
10
|
require 'active_support/core_ext'
|
11
11
|
require 'erubis'
|
12
|
-
require 'set'
|
13
12
|
require 'node_query'
|
14
13
|
require 'node_mutation'
|
15
14
|
|
@@ -29,7 +28,9 @@ module Synvert
|
|
29
28
|
Strategy = Core::Strategy
|
30
29
|
|
31
30
|
ALL_RUBY_FILES = %w[**/*.rb]
|
31
|
+
ALL_ERB_FILES = %w[**/*.erb]
|
32
32
|
ALL_RAKE_FILES = %w[**/*.rake]
|
33
|
+
ALL_FILES = ALL_RUBY_FILES + ALL_ERB_FILES + ALL_RAKE_FILES
|
33
34
|
|
34
35
|
RAILS_APP_FILES = %w[app/**/*.rb engines/*/app/**/*.rb]
|
35
36
|
RAILS_CONTROLLER_FILES = %w[app/controllers/**/*.rb engines/*/app/controllers/**/*.rb]
|
@@ -46,7 +47,7 @@ module Synvert
|
|
46
47
|
engines/*/config/routes.rb
|
47
48
|
engines/*/config/routes/**/*.rb
|
48
49
|
]
|
49
|
-
RAILS_VIEW_FILES = %w[app/views/**/*.html.{erb
|
50
|
+
RAILS_VIEW_FILES = %w[app/views/**/*.html.{erb}]
|
50
51
|
|
51
52
|
RAILS_CONTROLLER_TEST_FILES = %w[
|
52
53
|
test/functional/**/*.rb
|
@@ -34,11 +34,14 @@ module Synvert::Core
|
|
34
34
|
<% end %>
|
35
35
|
<% end %>
|
36
36
|
EOF
|
37
|
-
|
38
|
-
expect(
|
39
|
-
expect(
|
40
|
-
expect(
|
41
|
-
expect(
|
37
|
+
encoded_source = Engine::Erb.encode(source)
|
38
|
+
expect(encoded_source).to be_include 'content_for :head do'
|
39
|
+
expect(encoded_source).to be_include " asset_path('bg.png')"
|
40
|
+
expect(encoded_source).to be_include 'post = Post.find(:first)'
|
41
|
+
expect(encoded_source).to be_include "link_to_function 'test', \"confirm('test');\""
|
42
|
+
expect(encoded_source).to be_include 'end'
|
43
|
+
expect(encoded_source).not_to be_include 'style'
|
44
|
+
expect(encoded_source).not_to be_include 'div'
|
42
45
|
end
|
43
46
|
end
|
44
47
|
end
|
@@ -12,7 +12,12 @@ module Synvert::Core
|
|
12
12
|
it 'parses find_node' do
|
13
13
|
scope = double
|
14
14
|
block = proc {}
|
15
|
-
expect(Rewriter::WithinScope).to receive(:new).with(
|
15
|
+
expect(Rewriter::WithinScope).to receive(:new).with(
|
16
|
+
instance,
|
17
|
+
'.send[message=create]',
|
18
|
+
{},
|
19
|
+
&block
|
20
|
+
).and_return(scope)
|
16
21
|
expect(scope).to receive(:process)
|
17
22
|
instance.find_node('.send[message=create]', &block)
|
18
23
|
end
|
@@ -99,28 +104,44 @@ module Synvert::Core
|
|
99
104
|
it 'parses append' do
|
100
105
|
instance.instance_variable_set(:@current_mutation, double)
|
101
106
|
instance.current_node = double
|
102
|
-
expect(instance.instance_variable_get(:@current_mutation)).to receive(:append).with(
|
107
|
+
expect(instance.instance_variable_get(:@current_mutation)).to receive(:append).with(
|
108
|
+
instance.current_node,
|
109
|
+
'Foobar'
|
110
|
+
)
|
103
111
|
instance.append 'Foobar'
|
104
112
|
end
|
105
113
|
|
106
114
|
it 'parses prepend' do
|
107
115
|
instance.instance_variable_set(:@current_mutation, double)
|
108
116
|
instance.current_node = double
|
109
|
-
expect(instance.instance_variable_get(:@current_mutation)).to receive(:prepend).with(
|
117
|
+
expect(instance.instance_variable_get(:@current_mutation)).to receive(:prepend).with(
|
118
|
+
instance.current_node,
|
119
|
+
'Foobar'
|
120
|
+
)
|
110
121
|
instance.prepend 'Foobar'
|
111
122
|
end
|
112
123
|
|
113
124
|
it 'parses insert at end' do
|
114
125
|
instance.instance_variable_set(:@current_mutation, double)
|
115
126
|
instance.current_node = double
|
116
|
-
expect(instance.instance_variable_get(:@current_mutation)).to receive(:insert).with(
|
127
|
+
expect(instance.instance_variable_get(:@current_mutation)).to receive(:insert).with(
|
128
|
+
instance.current_node,
|
129
|
+
'Foobar',
|
130
|
+
at: 'end',
|
131
|
+
to: 'receiver'
|
132
|
+
)
|
117
133
|
instance.insert 'Foobar', to: 'receiver'
|
118
134
|
end
|
119
135
|
|
120
136
|
it 'parses insert at beginning' do
|
121
137
|
instance.instance_variable_set(:@current_mutation, double)
|
122
138
|
instance.current_node = double
|
123
|
-
expect(instance.instance_variable_get(:@current_mutation)).to receive(:insert).with(
|
139
|
+
expect(instance.instance_variable_get(:@current_mutation)).to receive(:insert).with(
|
140
|
+
instance.current_node,
|
141
|
+
'Foobar',
|
142
|
+
at: 'beginning',
|
143
|
+
to: nil
|
144
|
+
)
|
124
145
|
instance.insert 'Foobar', at: 'beginning'
|
125
146
|
end
|
126
147
|
|
@@ -128,7 +149,12 @@ module Synvert::Core
|
|
128
149
|
instance.instance_variable_set(:@current_mutation, double)
|
129
150
|
instance.current_node = double
|
130
151
|
expect(NodeMutation).to receive_message_chain(:adapter, :get_start_loc, :column).and_return(2)
|
131
|
-
expect(instance.instance_variable_get(:@current_mutation)).to receive(:insert).with(
|
152
|
+
expect(instance.instance_variable_get(:@current_mutation)).to receive(:insert).with(
|
153
|
+
instance.current_node,
|
154
|
+
"\n Foobar",
|
155
|
+
at: 'end',
|
156
|
+
to: nil
|
157
|
+
)
|
132
158
|
instance.insert_after 'Foobar'
|
133
159
|
end
|
134
160
|
|
@@ -136,7 +162,12 @@ module Synvert::Core
|
|
136
162
|
instance.instance_variable_set(:@current_mutation, double)
|
137
163
|
instance.current_node = double
|
138
164
|
expect(NodeMutation).to receive_message_chain(:adapter, :get_start_loc, :column).and_return(2)
|
139
|
-
expect(instance.instance_variable_get(:@current_mutation)).to receive(:insert).with(
|
165
|
+
expect(instance.instance_variable_get(:@current_mutation)).to receive(:insert).with(
|
166
|
+
instance.current_node,
|
167
|
+
"Foobar\n ",
|
168
|
+
at: 'beginning',
|
169
|
+
to: nil
|
170
|
+
)
|
140
171
|
instance.insert_before 'Foobar'
|
141
172
|
end
|
142
173
|
|
@@ -153,35 +184,53 @@ module Synvert::Core
|
|
153
184
|
it 'parses replace_with' do
|
154
185
|
instance.instance_variable_set(:@current_mutation, double)
|
155
186
|
instance.current_node = double
|
156
|
-
expect(instance.instance_variable_get(:@current_mutation)).to receive(:replace_with).with(
|
187
|
+
expect(instance.instance_variable_get(:@current_mutation)).to receive(:replace_with).with(
|
188
|
+
instance.current_node,
|
189
|
+
'Foobar'
|
190
|
+
)
|
157
191
|
instance.replace_with 'Foobar'
|
158
192
|
end
|
159
193
|
|
160
194
|
it 'parses replace with' do
|
161
195
|
instance.instance_variable_set(:@current_mutation, double)
|
162
196
|
instance.current_node = double
|
163
|
-
expect(instance.instance_variable_get(:@current_mutation)).to receive(:replace).with(
|
197
|
+
expect(instance.instance_variable_get(:@current_mutation)).to receive(:replace).with(
|
198
|
+
instance.current_node,
|
199
|
+
:message,
|
200
|
+
with: 'Foobar'
|
201
|
+
)
|
164
202
|
instance.replace :message, with: 'Foobar'
|
165
203
|
end
|
166
204
|
|
167
205
|
it 'parses remove' do
|
168
206
|
instance.instance_variable_set(:@current_mutation, double)
|
169
207
|
instance.current_node = double
|
170
|
-
expect(instance.instance_variable_get(:@current_mutation)).to receive(:remove).with(
|
208
|
+
expect(instance.instance_variable_get(:@current_mutation)).to receive(:remove).with(
|
209
|
+
instance.current_node,
|
210
|
+
and_comma: true
|
211
|
+
)
|
171
212
|
instance.remove and_comma: true
|
172
213
|
end
|
173
214
|
|
174
215
|
it 'parses delete' do
|
175
216
|
instance.instance_variable_set(:@current_mutation, double)
|
176
217
|
instance.current_node = double
|
177
|
-
expect(instance.instance_variable_get(:@current_mutation)).to receive(:delete).with(
|
218
|
+
expect(instance.instance_variable_get(:@current_mutation)).to receive(:delete).with(
|
219
|
+
instance.current_node,
|
220
|
+
:dot,
|
221
|
+
:message,
|
222
|
+
and_comma: true
|
223
|
+
)
|
178
224
|
instance.delete :dot, :message, and_comma: true
|
179
225
|
end
|
180
226
|
|
181
227
|
it 'parses wrap with' do
|
182
228
|
instance.instance_variable_set(:@current_mutation, double)
|
183
229
|
instance.current_node = double
|
184
|
-
expect(instance.instance_variable_get(:@current_mutation)).to receive(:wrap).with(
|
230
|
+
expect(instance.instance_variable_get(:@current_mutation)).to receive(:wrap).with(
|
231
|
+
instance.current_node,
|
232
|
+
with: 'module Foobar'
|
233
|
+
)
|
185
234
|
instance.wrap with: 'module Foobar'
|
186
235
|
end
|
187
236
|
|
@@ -330,8 +379,8 @@ module Synvert::Core
|
|
330
379
|
results = instance.test
|
331
380
|
expect(results.file_path).to eq 'spec/models/post_spec.rb'
|
332
381
|
expect(results.actions).to eq [
|
333
|
-
|
334
|
-
|
382
|
+
NodeMutation::Struct::Action.new(35, 59, 'create :user'),
|
383
|
+
NodeMutation::Struct::Action.new(69, 105, 'create :post, user: user')
|
335
384
|
]
|
336
385
|
end
|
337
386
|
|
@@ -369,7 +418,7 @@ module Synvert::Core
|
|
369
418
|
expect(File).to receive(:read).with('./app/views/posts/_form.html.erb', encoding: 'UTF-8').and_return(input)
|
370
419
|
result = instance.test
|
371
420
|
expect(result.file_path).to eq 'app/views/posts/_form.html.erb'
|
372
|
-
expect(result.actions).to eq [
|
421
|
+
expect(result.actions).to eq [NodeMutation::Struct::Action.new(2, 2, '=')]
|
373
422
|
end
|
374
423
|
end
|
375
424
|
|
@@ -33,13 +33,14 @@ module Synvert::Core
|
|
33
33
|
|
34
34
|
describe '#process' do
|
35
35
|
it 'rewrites the file' do
|
36
|
-
rewriter =
|
37
|
-
|
38
|
-
|
39
|
-
|
36
|
+
rewriter =
|
37
|
+
Rewriter.new('group', 'name') do
|
38
|
+
within_files '**/*.rb' do
|
39
|
+
with_node node_type: 'class', name: 'Foobar' do
|
40
|
+
replace :name, with: 'Synvert'
|
41
|
+
end
|
40
42
|
end
|
41
43
|
end
|
42
|
-
end
|
43
44
|
input = "class Foobar\nend"
|
44
45
|
output = "class Synvert\nend"
|
45
46
|
FakeFS do
|
@@ -52,13 +53,14 @@ module Synvert::Core
|
|
52
53
|
|
53
54
|
describe '#test' do
|
54
55
|
it 'gets test results' do
|
55
|
-
rewriter =
|
56
|
-
|
57
|
-
|
58
|
-
|
56
|
+
rewriter =
|
57
|
+
Rewriter.new('group', 'name') do
|
58
|
+
within_files '**/*.rb' do
|
59
|
+
with_node node_type: 'class', name: 'Foobar' do
|
60
|
+
replace :name, with: 'Synvert'
|
61
|
+
end
|
59
62
|
end
|
60
63
|
end
|
61
|
-
end
|
62
64
|
input = "class Foobar\nend"
|
63
65
|
FakeFS do
|
64
66
|
File.write("code.rb", input)
|
@@ -66,7 +68,7 @@ module Synvert::Core
|
|
66
68
|
expect(results[0].file_path).to eq '/code.rb'
|
67
69
|
expect(results[0].affected?).to be_truthy
|
68
70
|
expect(results[0].conflicted?).to be_falsey
|
69
|
-
expect(results[0].actions).to eq [
|
71
|
+
expect(results[0].actions).to eq [NodeMutation::Struct::Action.new(6, 12, 'Synvert')]
|
70
72
|
end
|
71
73
|
end
|
72
74
|
end
|
@@ -226,9 +228,10 @@ module Synvert::Core
|
|
226
228
|
it 'adds snippet by http url' do
|
227
229
|
expect(Utils).to receive(:remote_snippet_exists?).with(URI.parse('http://synvert.net/foo/bar.rb')).and_return(true)
|
228
230
|
expect_any_instance_of(URI::HTTP).to receive(:open).and_return(StringIO.new("Rewriter.new 'group', 'sub_rewriter' do\nend"))
|
229
|
-
rewriter =
|
230
|
-
|
231
|
-
|
231
|
+
rewriter =
|
232
|
+
Rewriter.new 'group', 'rewriter' do
|
233
|
+
add_snippet 'http://synvert.net/foo/bar.rb'
|
234
|
+
end
|
232
235
|
rewriter.process
|
233
236
|
expect(Rewriter.fetch('group', 'sub_rewriter')).not_to be_nil
|
234
237
|
end
|
@@ -236,9 +239,10 @@ module Synvert::Core
|
|
236
239
|
it 'adds snippet by file path' do
|
237
240
|
expect(File).to receive(:exist?).and_return(true)
|
238
241
|
expect(File).to receive(:read).and_return("Rewriter.new 'group', 'sub_rewriter' do\nend")
|
239
|
-
rewriter =
|
240
|
-
|
241
|
-
|
242
|
+
rewriter =
|
243
|
+
Rewriter.new 'group', 'rewriter' do
|
244
|
+
add_snippet '/home/richard/foo/bar.rb'
|
245
|
+
end
|
242
246
|
rewriter.process
|
243
247
|
expect(Rewriter.fetch('group', 'sub_rewriter')).not_to be_nil
|
244
248
|
end
|
@@ -61,22 +61,37 @@ module Synvert::Core
|
|
61
61
|
end
|
62
62
|
|
63
63
|
it 'gets all files' do
|
64
|
-
expect(Dir).to receive(:glob).with('**/*.rb').and_return(
|
64
|
+
expect(Dir).to receive(:glob).with('**/*.rb').and_return(
|
65
|
+
[
|
66
|
+
'app/models/post.rb',
|
67
|
+
'app/controllers/posts_controller.rb'
|
68
|
+
]
|
69
|
+
)
|
65
70
|
expect(described_class.glob(['**/*.rb'])).to eq(['app/models/post.rb', 'app/controllers/posts_controller.rb'])
|
66
71
|
end
|
67
72
|
|
68
73
|
it 'filters only paths' do
|
69
74
|
Configuration.only_paths = ['app/models']
|
70
|
-
expect(Dir).to receive(:glob).with('**/*.rb').and_return(
|
75
|
+
expect(Dir).to receive(:glob).with('**/*.rb').and_return(
|
76
|
+
[
|
77
|
+
'app/models/post.rb',
|
78
|
+
'app/controllers/posts_controller.rb'
|
79
|
+
]
|
80
|
+
)
|
71
81
|
expect(described_class.glob(['**/*.rb'])).to eq(['app/models/post.rb'])
|
72
82
|
end
|
73
83
|
|
74
84
|
it 'skip files' do
|
75
85
|
Configuration.skip_paths = ['app/controllers/**/*']
|
76
|
-
expect(Dir).to receive(:glob).with('**/*.rb').and_return(
|
86
|
+
expect(Dir).to receive(:glob).with('**/*.rb').and_return(
|
87
|
+
[
|
88
|
+
'app/models/post.rb',
|
89
|
+
'app/controllers/posts_controller.rb'
|
90
|
+
]
|
91
|
+
)
|
77
92
|
expect(Dir).to receive(:glob).with('app/controllers/**/*').and_return(['app/controllers/posts_controller.rb'])
|
78
93
|
expect(described_class.glob(['**/*.rb'])).to eq(['app/models/post.rb'])
|
79
94
|
end
|
80
95
|
end
|
81
96
|
end
|
82
|
-
end
|
97
|
+
end
|
data/synvert-core-ruby.gemspec
CHANGED
@@ -20,9 +20,8 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.require_paths = ["lib"]
|
21
21
|
|
22
22
|
spec.add_runtime_dependency "activesupport", "< 7.0.0"
|
23
|
-
spec.add_runtime_dependency "erubis"
|
24
23
|
spec.add_runtime_dependency "node_query", ">= 1.12.0"
|
25
|
-
spec.add_runtime_dependency "node_mutation", ">= 1.
|
24
|
+
spec.add_runtime_dependency "node_mutation", ">= 1.12.1"
|
26
25
|
spec.add_runtime_dependency "parser"
|
27
26
|
spec.add_runtime_dependency "parser_node_ext", ">= 1.0.0"
|
28
27
|
spec.add_runtime_dependency "parallel"
|
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.21.
|
4
|
+
version: 1.21.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Huang
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -24,20 +24,6 @@ dependencies:
|
|
24
24
|
- - "<"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 7.0.0
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: erubis
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: node_query
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,14 +44,14 @@ dependencies:
|
|
58
44
|
requirements:
|
59
45
|
- - ">="
|
60
46
|
- !ruby/object:Gem::Version
|
61
|
-
version: 1.
|
47
|
+
version: 1.12.1
|
62
48
|
type: :runtime
|
63
49
|
prerelease: false
|
64
50
|
version_requirements: !ruby/object:Gem::Requirement
|
65
51
|
requirements:
|
66
52
|
- - ">="
|
67
53
|
- !ruby/object:Gem::Version
|
68
|
-
version: 1.
|
54
|
+
version: 1.12.1
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: parser
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -188,7 +174,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
188
174
|
- !ruby/object:Gem::Version
|
189
175
|
version: '0'
|
190
176
|
requirements: []
|
191
|
-
rubygems_version: 3.4.
|
177
|
+
rubygems_version: 3.4.6
|
192
178
|
signing_key:
|
193
179
|
specification_version: 4
|
194
180
|
summary: convert ruby code to better syntax.
|