synvert 0.20.0 → 1.0.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0fb489331d776e367ae6be1c1ab39330b59419b07b9db40e1c6ea215fd612338
4
- data.tar.gz: fbbb3fc50e1c05bc67aef081b4490e49f1c839dc24eb76941e2487f2cb240cd3
3
+ metadata.gz: 13a6cfb15282317c912c0ddd99f6e4dfe5040c2ec28c8f7a1b60d2266b7f1517
4
+ data.tar.gz: c34227427bed2b0d7f3e29112fbd225ff46517fa20fc58c5c9d7c4e4d53a6e2e
5
5
  SHA512:
6
- metadata.gz: dad0c74122ab91f6a05907af7bca9fb3badbb3a137a6914227508814de3682f6578975bd9a2aa51a577881ccb6c22e837b43b2b36c01769eb703f63b2eb1e9a2
7
- data.tar.gz: ff5309c3d2ca47e01be1a02aeb5ab9e3f1f6d0ef1c8ea8dc5fe3e8bcf03afeda5035aebf0c4fc26acf62e44097999294fab431936a665e3726ba9a6314522641
6
+ metadata.gz: 9642ee80da8558c06b294ebc4e4ce786405d6f93455a3700ac5f3299abdfecba8ee2d2d6dc9cafa9f98c6984ce965075850d39b30573fc686673a74da4979809
7
+ data.tar.gz: 83b1a5dd39156e8e70725c58c13e1b9ec0968316944583a1153ac9d57fb64f2a9d696d6e515f59be7c2535b1c10a406577fcefa56b1f792d27fcbac779615286
data/.gitignore CHANGED
@@ -3,7 +3,6 @@
3
3
  .bundle
4
4
  .config
5
5
  .yardoc
6
- Gemfile.lock
7
6
  InstalledFiles
8
7
  _yardoc
9
8
  coverage
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 1.0.0 (2022-09-17)
4
+
5
+ * Test a snippet
6
+ * Require single rewriter instead of loading all rewriters
7
+ * Execute command can be either run or test
8
+ * Add `skip_path` and `only_paths` options
9
+
3
10
  ## 0.20.0 (2022-08-20)
4
11
 
5
12
  * Rename `load_rewriters` to `read_rewriters`
data/Gemfile.lock ADDED
@@ -0,0 +1,101 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ synvert (1.0.0)
5
+ synvert-core (>= 1.8.0)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ activesupport (6.1.7)
11
+ concurrent-ruby (~> 1.0, >= 1.0.2)
12
+ i18n (>= 1.6, < 2)
13
+ minitest (>= 5.1)
14
+ tzinfo (~> 2.0)
15
+ zeitwerk (~> 2.3)
16
+ addressable (2.8.0)
17
+ public_suffix (>= 2.0.2, < 5.0)
18
+ ast (2.4.2)
19
+ concurrent-ruby (1.1.10)
20
+ coveralls (0.8.23)
21
+ json (>= 1.8, < 3)
22
+ simplecov (~> 0.16.1)
23
+ term-ansicolor (~> 1.3)
24
+ thor (>= 0.19.4, < 2.0)
25
+ tins (~> 1.6)
26
+ crack (0.4.5)
27
+ rexml
28
+ diff-lcs (1.4.4)
29
+ docile (1.4.0)
30
+ erubis (2.7.0)
31
+ hashdiff (1.0.1)
32
+ i18n (1.12.0)
33
+ concurrent-ruby (~> 1.0)
34
+ json (2.5.1)
35
+ minitest (5.16.3)
36
+ node_mutation (1.3.3)
37
+ activesupport (< 7.0.0)
38
+ erubis
39
+ node_query (1.6.0)
40
+ activesupport (< 7.0.0)
41
+ parser (3.1.2.1)
42
+ ast (~> 2.4.1)
43
+ parser_node_ext (0.4.0)
44
+ parser
45
+ public_suffix (4.0.6)
46
+ rake (13.0.6)
47
+ rexml (3.2.5)
48
+ rspec (3.10.0)
49
+ rspec-core (~> 3.10.0)
50
+ rspec-expectations (~> 3.10.0)
51
+ rspec-mocks (~> 3.10.0)
52
+ rspec-core (3.10.1)
53
+ rspec-support (~> 3.10.0)
54
+ rspec-expectations (3.10.1)
55
+ diff-lcs (>= 1.2.0, < 2.0)
56
+ rspec-support (~> 3.10.0)
57
+ rspec-mocks (3.10.2)
58
+ diff-lcs (>= 1.2.0, < 2.0)
59
+ rspec-support (~> 3.10.0)
60
+ rspec-support (3.10.2)
61
+ simplecov (0.16.1)
62
+ docile (~> 1.1)
63
+ json (>= 1.8, < 3)
64
+ simplecov-html (~> 0.10.0)
65
+ simplecov-html (0.10.2)
66
+ sync (0.5.0)
67
+ synvert-core (1.8.0)
68
+ activesupport (< 7.0.0)
69
+ erubis
70
+ node_mutation
71
+ node_query
72
+ parser
73
+ parser_node_ext
74
+ term-ansicolor (1.7.1)
75
+ tins (~> 1.0)
76
+ thor (1.1.0)
77
+ tins (1.29.1)
78
+ sync
79
+ tzinfo (2.0.5)
80
+ concurrent-ruby (~> 1.0)
81
+ webmock (3.14.0)
82
+ addressable (>= 2.8.0)
83
+ crack (>= 0.3.2)
84
+ hashdiff (>= 0.4.0, < 2.0.0)
85
+ zeitwerk (2.6.0)
86
+
87
+ PLATFORMS
88
+ x86_64-darwin-20
89
+ x86_64-darwin-21
90
+ x86_64-linux
91
+
92
+ DEPENDENCIES
93
+ bundler
94
+ coveralls
95
+ rake
96
+ rspec
97
+ synvert!
98
+ webmock
99
+
100
+ BUNDLED WITH
101
+ 2.3.7
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Synvert
2
2
 
3
- <img src="https://synvert.xinminlabs.com/img/logo_96.png" alt="logo" width="32" height="32" />
3
+ <img src="https://synvert.net/img/logo_96.png" alt="logo" width="32" height="32" />
4
4
 
5
5
  [![AwesomeCode Status for xinminlabs/synvert-ruby](https://awesomecode.io/projects/47cd9805-171c-4c61-b927-baa46cd4020a/status)](https://awesomecode.io/repos/xinminlabs/synvert-ruby)
6
6
  ![Main workflow](https://github.com/xinminlabs/synvert-ruby/actions/workflows/main.yml/badge.svg)
@@ -47,9 +47,11 @@ Usage: synvert-ruby [project_path]
47
47
  -g, --generate NEW_SNIPPET_NAME generate a new snippet
48
48
  --sync sync snippets
49
49
  --execute execute snippet
50
- -r, --run SNIPPET_NAME run specified snippet, e.g. ruby/new_hash_syntax, or remote url, or local file path
50
+ -r, --run SNIPPET_NAME run a snippet with snippet name, e.g. ruby/new_hash_syntax, or remote url, or local file path
51
+ -t, --test SNIPPET_NAME test a snippet with snippet name, e.g. ruby/new_hash_syntax, or remote url, or local file path
51
52
  --show-run-process show processing files when running a snippet
52
- --skip FILE_PATTERNS skip specified files or directories, separated by comma, e.g. app/models/post.rb,vendor/plugins/**/*.rb
53
+ --only-paths DIRECTORIES only specified files or directories, separated by comma, e.g. app/models,app/controllers
54
+ --skip-paths FILE_PATTERNS skip specified files or directories, separated by comma, e.g. vendor/,lib/**/*.rb
53
55
  -f, --format FORMAT output format
54
56
  -v, --version show this version
55
57
  ```
@@ -98,18 +100,30 @@ Run a snippet, analyze and then rewrite code.
98
100
  $ synvert-ruby -r factory_bot/use_short_syntax ~/Sites/xinminlabs/synvert-core-ruby
99
101
  ```
100
102
 
101
- run a snippet from remote url
103
+ Run a snippet from remote url
102
104
 
103
105
  ```
104
106
  $ synvert-ruby -r https://raw.githubusercontent.com/xinminlabs/synvert-snippets-ruby/master/lib/factory_bot/use_short_syntax.rb ~/sites/xinminlabs/synvert-core-ruby
105
107
  ```
106
108
 
107
- run a snippet from local path
109
+ Run a snippet from local path
108
110
 
109
111
  ```
110
112
  $ synvert-ruby -r ~/.synvert-ruby/lib/factory_bot/use_short_syntax.rb ~/sites/xinminlabs/synvert-core-ruby
111
113
  ```
112
114
 
115
+ Skip paths
116
+
117
+ ```
118
+ $ synvert-ruby -r factory_bot/use_short_syntax --skip-paths vendor/ ~/sites/xinminlabs/synvert-core-ruby
119
+ ```
120
+
121
+ Only paths
122
+
123
+ ```
124
+ $ synvert-ruby -r factory_bot/use_short_syntax --only-paths app/models/ ~/sites/xinminlabs/synvert-core-ruby
125
+ ```
126
+
113
127
  Show processing files when running a snippet.
114
128
 
115
129
  ```
data/lib/synvert/cli.rb CHANGED
@@ -43,21 +43,15 @@ module Synvert
43
43
  when 'generate'
44
44
  generate_snippet
45
45
  when 'execute'
46
- execute_snippet
46
+ execute_snippet(@options[:execute_command])
47
+ when 'test'
48
+ group, name = get_snippet_name(@options[:snippet_name])
49
+ test_snippet(group, name)
50
+ when 'run'
51
+ group, name = get_snippet_name(@options[:snippet_name])
52
+ run_snippet(group, name)
47
53
  else
48
- if /^http/.match?(@options[:snippet_name])
49
- uri = URI.parse(@options[:snippet_name])
50
- eval(uri.open.read)
51
- snippet_name = get_last_snippet_name
52
- run_snippet(snippet_name)
53
- elsif File.exists?(@options[:snippet_name])
54
- require(@options[:snippet_name])
55
- snippet_name = get_last_snippet_name
56
- run_snippet(snippet_name)
57
- else
58
- read_rewriters
59
- run_snippet(@options[:snippet_name])
60
- end
54
+ # nothing to do
61
55
  end
62
56
  true
63
57
  rescue SystemExit
@@ -103,18 +97,28 @@ module Synvert
103
97
  opts.on '--sync', 'sync snippets' do
104
98
  @options[:command] = 'sync'
105
99
  end
106
- opts.on '--execute', 'execute snippet' do
100
+ opts.on '--execute', 'execute snippet' do |execute_command|
107
101
  @options[:command] = 'execute'
102
+ @options[:execute_command] = execute_command
103
+ end
104
+ opts.on '-r', '--run SNIPPET_NAME', 'run a snippet with snippet name, e.g. ruby/new_hash_syntax, or remote url, or local file path' do |snippet_name|
105
+ @options[:command] = 'run'
106
+ @options[:snippet_name] = snippet_name
108
107
  end
109
- opts.on '-r', '--run SNIPPET_NAME', 'run specified snippet, e.g. ruby/new_hash_syntax, or remote url, or local file path' do |snippet_name|
108
+ opts.on '-t', '--test SNIPPET_NAME', 'test a snippet with snippet name, e.g. ruby/new_hash_syntax, or remote url, or local file path' do |snippet_name|
109
+ @options[:command] = 'test'
110
110
  @options[:snippet_name] = snippet_name
111
111
  end
112
112
  opts.on '--show-run-process', 'show processing files when running a snippet' do
113
113
  Core::Configuration.show_run_process = true
114
114
  end
115
- opts.on '--skip FILE_PATTERNS',
116
- 'skip specified files or directories, separated by comma, e.g. app/models/post.rb,vendor/plugins/**/*.rb' do |file_patterns|
117
- @options[:skip_file_patterns] = file_patterns.split(',')
115
+ opts.on '--only-paths DIRECTORIES',
116
+ 'only specified files or directories, separated by comma, e.g. app/models,app/controllers' do |directories|
117
+ @options[:only_paths] = directories
118
+ end
119
+ opts.on '--skip-paths FILE_PATTERNS',
120
+ 'skip specified files or directories, separated by comma, e.g. vendor/,lib/**/*.rb' do |file_patterns|
121
+ @options[:skip_paths] = file_patterns
118
122
  end
119
123
  opts.on '-f', '--format FORMAT', 'output format' do |format|
120
124
  @options[:format] = format
@@ -125,14 +129,12 @@ module Synvert
125
129
  end
126
130
  end
127
131
  paths = optparse.parse(args)
128
- Core::Configuration.path = paths.first || Dir.pwd
129
- if @options[:skip_file_patterns] && !@options[:skip_file_patterns].empty?
130
- skip_files =
131
- @options[:skip_file_patterns].map do |file_pattern|
132
- full_file_pattern = File.join(Core::Configuration.path, file_pattern)
133
- Dir.glob(full_file_pattern)
134
- end.flatten
135
- Core::Configuration.skip_files = skip_files
132
+ Core::Configuration.root_path = paths.first || Dir.pwd
133
+ if @options[:only_paths] && !@options[:only_paths].empty?
134
+ Core::Configuration.only_paths = @options[:only_paths].split(",").map { |only_path| only_path.strip }
135
+ end
136
+ if @options[:skip_paths] && !@options[:skip_paths].empty?
137
+ Core::Configuration.skip_paths = @options[:skip_paths].split(",").map { |skip_path| skip_path.strip }
136
138
  end
137
139
  end
138
140
 
@@ -228,19 +230,40 @@ module Synvert
228
230
  end
229
231
  end
230
232
 
231
- # run snippets
232
- def run_snippet(snippet_name)
233
+ # get snippet name
234
+ # it can get from explicit snippet name,
235
+ # or from local path or http url.
236
+ def get_snippet_name(snippet_name)
237
+ if /^http/.match?(snippet_name)
238
+ uri = URI.parse(snippet_name)
239
+ eval(uri.open.read)
240
+ get_last_snippet_name
241
+ elsif File.exists?(snippet_name)
242
+ require(snippet_name)
243
+ get_last_snippet_name
244
+ else
245
+ require(File.join(default_snippets_home, 'lib', "#{snippet_name}.rb"))
246
+ snippet_name.split('/')
247
+ end
248
+ end
249
+
250
+ # get snippet name by user inputs
251
+ def get_snippet_name_by_input(input)
252
+ rewriter = eval(input)
253
+ get_last_snippet_name
254
+ end
255
+
256
+ # run a snippet
257
+ def run_snippet(group, name)
233
258
  if plain_output?
234
- puts "===== #{snippet_name} started ====="
235
- group, name = snippet_name.split('/')
259
+ puts "===== #{group}/#{name} started ====="
236
260
  rewriter = Core::Rewriter.call group, name
237
261
  rewriter.warnings.each do |warning|
238
262
  puts '[Warn] ' + warning.message
239
263
  end
240
264
  puts rewriter.todo if rewriter.todo
241
- puts "===== #{snippet_name} done ====="
265
+ puts "===== #{group}/#{name} done ====="
242
266
  elsif json_output?
243
- group, name = snippet_name.split('/')
244
267
  rewriter = Core::Rewriter.call group, name
245
268
  output = {
246
269
  affected_files: rewriter.affected_files.union(rewriter.sub_snippets.sum(Set.new, &:affected_files)).to_a,
@@ -251,25 +274,20 @@ module Synvert
251
274
  end
252
275
  end
253
276
 
277
+ # test a snippet
278
+ def test_snippet(group, name)
279
+ rewriter = Core::Rewriter.fetch(group, name)
280
+ results = rewriter.test
281
+ puts JSON.generate(results)
282
+ end
283
+
254
284
  # execute snippet
255
- def execute_snippet
256
- input = STDIN.read
257
- if plain_output?
258
- puts '===== execute started ====='
259
- rewriter = eval(input)
260
- rewriter.warnings.each do |warning|
261
- puts '[Warn] ' + warning.message
262
- end
263
- puts rewriter.todo if rewriter.todo
264
- puts '===== execute done ====='
265
- elsif json_output?
266
- rewriter = eval(input)
267
- output = {
268
- affected_files: rewriter.affected_files.union(rewriter.sub_snippets.sum(Set.new, &:affected_files)).to_a,
269
- warnings: rewriter.warnings.union(rewriter.sub_snippets.sum([], &:warnings)),
270
- todo: rewriter.todo
271
- }
272
- puts JSON.generate(output)
285
+ def execute_snippet(execute_command)
286
+ group, name = get_snippet_name_by_input(STDIN.read)
287
+ if execute_command == 'test'
288
+ test_snippet(group, name)
289
+ else
290
+ run_snippet(group, name)
273
291
  end
274
292
  end
275
293
 
@@ -337,7 +355,7 @@ module Synvert
337
355
  def get_last_snippet_name
338
356
  group = Rewriter.availables.keys.last
339
357
  name = Rewriter.availables[group].keys.last
340
- return [group, name].join("/")
358
+ return group, name
341
359
  end
342
360
  end
343
361
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Synvert
4
- VERSION = '0.20.0'
4
+ VERSION = '1.0.0'
5
5
  end
data/synvert-ruby.gemspec CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
  spec.require_paths = ['lib']
21
21
  spec.post_install_message = 'Please run `synvert-ruby --sync` first to sync snippets remotely.'
22
22
 
23
- spec.add_runtime_dependency 'synvert-core', '>= 1.5.0'
23
+ spec.add_runtime_dependency 'synvert-core', '>= 1.8.0'
24
24
 
25
25
  spec.add_development_dependency 'bundler'
26
26
  spec.add_development_dependency 'rake'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: synvert
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.20.0
4
+ version: 1.0.0
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-08-20 00:00:00.000000000 Z
11
+ date: 2022-09-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: synvert-core
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 1.5.0
19
+ version: 1.8.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 1.5.0
26
+ version: 1.8.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +94,7 @@ files:
94
94
  - ".rspec"
95
95
  - CHANGELOG.md
96
96
  - Gemfile
97
+ - Gemfile.lock
97
98
  - LICENSE.txt
98
99
  - README.md
99
100
  - Rakefile