synvert 0.19.1 → 0.20.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: 62c51dd8a7a0d58c47644593a0a85a14ab201c8a842187f7fc1bb0b9c185c798
4
- data.tar.gz: 72dc55fe685d1149ab875eb04a9dfd81d3f199d2930de46589a4e4d9b0d9173f
3
+ metadata.gz: 0fb489331d776e367ae6be1c1ab39330b59419b07b9db40e1c6ea215fd612338
4
+ data.tar.gz: fbbb3fc50e1c05bc67aef081b4490e49f1c839dc24eb76941e2487f2cb240cd3
5
5
  SHA512:
6
- metadata.gz: c2a3eee39999e331d9d3f24b6fe0c6fc1c512cd9ace5d03a23c111c29a212dad3f80f325d0079fff7c0d302d9ad8e077f546ace95e5dfed53d00feef934504d1
7
- data.tar.gz: 40f6e3423153314c72ae434e6abf34640d08313909d2389f9355e410d02ddf312bff4a51d602ac7ea0b5eed514c6b8a0cc515a9c973911c723256a2d49128a06
6
+ metadata.gz: dad0c74122ab91f6a05907af7bca9fb3badbb3a137a6914227508814de3682f6578975bd9a2aa51a577881ccb6c22e837b43b2b36c01769eb703f63b2eb1e9a2
7
+ data.tar.gz: ff5309c3d2ca47e01be1a02aeb5ab9e3f1f6d0ef1c8ea8dc5fe3e8bcf03afeda5035aebf0c4fc26acf62e44097999294fab431936a665e3726ba9a6314522641
@@ -19,7 +19,7 @@ jobs:
19
19
  runs-on: ubuntu-latest
20
20
  strategy:
21
21
  matrix:
22
- ruby-version: ['2.4', '2.5', '2.6', '2.7', '3.0']
22
+ ruby-version: ['2.6', '2.7', '3.0', '3.1']
23
23
 
24
24
  steps:
25
25
  - uses: actions/checkout@v2
data/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 0.20.0 (2022-08-20)
4
+
5
+ * Rename `load_rewriters` to `read_rewriters`
6
+ * Run a snippet from remote url or local file path
7
+
8
+ ## 0.19.3 (2022-07-18)
9
+
10
+ * Require json
11
+ * update `synvert-core` to 1.5.0
12
+
13
+ ## 0.19.2 (2021-12-15)
14
+
15
+ * List sub_snippets group and name
16
+
3
17
  ## 0.19.1 (2021-10-23)
4
18
 
5
19
  * Make URI.open work in ruby 2.4
data/README.md CHANGED
@@ -2,67 +2,124 @@
2
2
 
3
3
  <img src="https://synvert.xinminlabs.com/img/logo_96.png" alt="logo" width="32" height="32" />
4
4
 
5
+ [![AwesomeCode Status for xinminlabs/synvert-ruby](https://awesomecode.io/projects/47cd9805-171c-4c61-b927-baa46cd4020a/status)](https://awesomecode.io/repos/xinminlabs/synvert-ruby)
5
6
  ![Main workflow](https://github.com/xinminlabs/synvert-ruby/actions/workflows/main.yml/badge.svg)
6
- [![Coverage Status](https://coveralls.io/repos/xinminlabs/synvert/badge.svg?branch=master)](https://coveralls.io/r/xinminlabs/synvert)
7
7
  [![Gem Version](https://badge.fury.io/rb/synvert.svg)](http://badge.fury.io/rb/synvert)
8
8
 
9
- Synvert = syntax + convert, makes it easy to convert ruby code
10
- automatically.
9
+ `synvert-ruby` is a command tool to rewrite ruby code automatically, it depends on `synvert-core-ruby` and `synvert-snippets-ruby`.
11
10
 
12
- Synvert is composed by synvert-core and synvert-snippets.
11
+ [synvert-core-ruby](https://github.com/xinminlabs/synvert-core-ruby) provides a set of DSLs to rewrite ruby code.
13
12
 
14
- [synvert-core][1] provides a dsl to convert ruby code.
15
-
16
- [synvert-snippets][2] lists all snippets to convert ruby code based on
17
- synvert-core.
13
+ [synvert-snippets-ruby](https://github.com/xinminlabs/synvert-snippets-ruby) provides official snippets to rewrite ruby code.
18
14
 
19
15
  ## Installation
20
16
 
21
- Install it using rubygems
17
+ To install the latest version, run
18
+
22
19
 
23
20
  ```
24
21
  $ gem install synvert
25
22
  ```
26
23
 
27
- then run
24
+ This will also install `synvert-core-ruby`.
25
+
26
+ Before using synvert, you need to sync all official snippets first.
28
27
 
29
28
  ```
30
29
  $ synvert-ruby --sync
31
30
  ```
32
31
 
32
+ Then you can use synvert to rewrite your ruby code, e.g.
33
+
34
+ ```
35
+ $ synvert-ruby -r factory_bot/use_short_syntax
36
+ ```
37
+
33
38
  ## Usage
34
39
 
35
40
  ```
36
41
  $ synvert-ruby -h
37
42
  Usage: synvert-ruby [project_path]
38
- -d, --load SNIPPET_PATHS load custom snippets, snippet paths can be local file path or remote http url
39
43
  -l, --list list all available snippets
40
44
  -q, --query QUERY query specified snippets
41
- --skip FILE_PATTERNS skip specified files or directories, separated by comma, e.g. app/models/post.rb,vendor/plugins/**/*.rb
42
- -s, --show SNIPPET_NAME show specified snippet description
45
+ -s, --show SNIPPET_NAME show specified snippet description, SNIPPET_NAME is combined by group and name, e.g. ruby/new_hash_syntax
46
+ -o, --open SNIPPET_NAME Open a snippet
47
+ -g, --generate NEW_SNIPPET_NAME generate a new snippet
43
48
  --sync sync snippets
44
- -r, --run SNIPPET_NAMES run specified snippets
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
51
+ --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
+ -f, --format FORMAT output format
45
54
  -v, --version show this version
46
55
  ```
47
56
 
48
- e.g.
57
+ #### Sync snippets
58
+
59
+ [Official Snippets](https://github.com/xinminlabs/synvert-snippets-ruby) are available on github,
60
+ you can sync them any time you want.
61
+
62
+ ```
63
+ $ synvert-ruby --sync
64
+ ```
65
+
66
+ #### List snippets
67
+
68
+ List all available snippets
69
+
70
+ ```
71
+ $ synvert-ruby -l
72
+
73
+ $ synvert-ruby --list --form json
74
+ ```
75
+
76
+ #### Show a snippet
77
+
78
+ Describe what a snippet does.
79
+
80
+ ```
81
+ $ synvert-ruby -s factory_bot/use_short_syntax
82
+ ```
83
+
84
+ #### Open a snippet
85
+
86
+ Open a snippet in your editor, editor is defined in
87
+ `ENV['SNIPPET_EDITOR']` or `ENV['EDITOR']`
88
+
89
+ ```
90
+ $ synvert-ruby -o factory_bot/use_short_syntax
91
+ ```
92
+
93
+ #### Run a snippet
94
+
95
+ Run a snippet, analyze and then rewrite code.
96
+
97
+ ```
98
+ $ synvert-ruby -r factory_bot/use_short_syntax ~/Sites/xinminlabs/synvert-core-ruby
99
+ ```
100
+
101
+ run a snippet from remote url
49
102
 
50
103
  ```
51
- $ synvert-ruby -r factory_girl/use_short_syntax,rails/upgrade_3_2_to_4_0 ~/Sites/railsbp/rails-bestpractices.com
104
+ $ synvert-ruby -r https://raw.githubusercontent.com/xinminlabs/synvert-snippets-ruby/master/lib/factory_bot/use_short_syntax.rb ~/sites/xinminlabs/synvert-core-ruby
52
105
  ```
53
106
 
54
- ## Documentation
107
+ run a snippet from local path
55
108
 
56
- [https://synvert.xinminlabs.com][3]
109
+ ```
110
+ $ synvert-ruby -r ~/.synvert-ruby/lib/factory_bot/use_short_syntax.rb ~/sites/xinminlabs/synvert-core-ruby
111
+ ```
57
112
 
58
- ## Contributing
113
+ Show processing files when running a snippet.
59
114
 
60
- 1. Fork it
61
- 2. Create your feature branch (`git checkout -b my-new-feature`)
62
- 3. Commit your changes (`git commit -am 'Add some feature'`)
63
- 4. Push to the branch (`git push origin my-new-feature`)
64
- 5. Create new Pull Request
115
+ ```
116
+ $ synvert-ruby -r factory_bot/use_short_syntax --show-run-process ~/Sites/xinminlabs/synvert-core-ruby
117
+ ```
118
+
119
+ #### Generate a snippet
120
+
121
+ Generate a new snippet
65
122
 
66
- [1]: https://github.com/xinminlabs/synvert-core-ruby/
67
- [2]: https://github.com/xinminlabs/synvert-snippets-ruby/
68
- [3]: https://synvert.xinminlabs.com
123
+ ```
124
+ $ synvert-ruby -g ruby/convert_foo_to_bar
125
+ ```
data/lib/synvert/cli.rb CHANGED
@@ -1,6 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'optparse'
4
+ require 'json'
5
+ require 'uri'
6
+ require 'open-uri'
4
7
 
5
8
  module Synvert
6
9
  # Synvert command line interface.
@@ -15,7 +18,7 @@ module Synvert
15
18
 
16
19
  # Initialize a CLI.
17
20
  def initialize
18
- @options = { command: 'run', custom_snippet_paths: [], format: 'plain' }
21
+ @options = { command: 'run', format: 'plain' }
19
22
  end
20
23
 
21
24
  # Run the CLI.
@@ -26,12 +29,12 @@ module Synvert
26
29
 
27
30
  case @options[:command]
28
31
  when 'list'
29
- load_rewriters
32
+ read_rewriters
30
33
  list_available_rewriters
31
34
  when 'open'
32
35
  open_rewriter
33
36
  when 'query'
34
- load_rewriters
37
+ read_rewriters
35
38
  query_available_rewriters
36
39
  when 'show'
37
40
  show_rewriter
@@ -42,9 +45,19 @@ module Synvert
42
45
  when 'execute'
43
46
  execute_snippet
44
47
  else
45
- # run
46
- load_rewriters
47
- run_snippet
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
48
61
  end
49
62
  true
50
63
  rescue SystemExit
@@ -66,11 +79,6 @@ module Synvert
66
79
  optparse =
67
80
  OptionParser.new do |opts|
68
81
  opts.banner = 'Usage: synvert-ruby [project_path]'
69
- opts.on '-d',
70
- '--load SNIPPET_PATHS',
71
- 'load custom snippets, snippet paths can be local file path or remote http url' do |snippet_paths|
72
- @options[:custom_snippet_paths] = snippet_paths.split(',').map(&:strip)
73
- end
74
82
  opts.on '-l', '--list', 'list all available snippets' do
75
83
  @options[:command] = 'list'
76
84
  end
@@ -98,7 +106,7 @@ module Synvert
98
106
  opts.on '--execute', 'execute snippet' do
99
107
  @options[:command] = 'execute'
100
108
  end
101
- opts.on '-r', '--run SNIPPET_NAME', 'run specified snippet, e.g. ruby/new_hash_syntax' do |snippet_name|
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|
102
110
  @options[:snippet_name] = snippet_name
103
111
  end
104
112
  opts.on '--show-run-process', 'show processing files when running a snippet' do
@@ -128,21 +136,9 @@ module Synvert
128
136
  end
129
137
  end
130
138
 
131
- # Load all rewriters.
132
- def load_rewriters
139
+ # read all rewriters.
140
+ def read_rewriters
133
141
  Dir.glob(File.join(default_snippets_home, 'lib/**/*.rb')).each { |file| require file }
134
-
135
- @options[:custom_snippet_paths].each do |snippet_path|
136
- if /^http/.match?(snippet_path)
137
- uri = URI.parse snippet_path
138
- eval(uri.read)
139
- else
140
- require snippet_path
141
- end
142
- end
143
- rescue StandardError
144
- FileUtils.rm_rf default_snippets_home
145
- retry
146
142
  end
147
143
 
148
144
  # List and print all available rewriters.
@@ -165,12 +161,11 @@ module Synvert
165
161
  Core::Rewriter.availables.each do |group, rewriters|
166
162
  rewriters.each do |name, rewriter|
167
163
  rewriter.process_with_sandbox
168
- item = {
169
- group: group,
170
- name: name,
171
- description: rewriter.description,
172
- sub_snippets: rewriter.sub_snippets.map(&:name)
173
- }
164
+ sub_snippets =
165
+ rewriter.sub_snippets.map { |sub_snippet|
166
+ { group: sub_snippet.group, name: sub_snippet.name }
167
+ }
168
+ item = { group: group, name: name, description: rewriter.description, sub_snippets: sub_snippets }
174
169
  item[:ruby_version] = rewriter.ruby_version.version if rewriter.ruby_version
175
170
  item[:gem_spec] = { name: rewriter.gem_spec.name, version: rewriter.gem_spec.version } if rewriter.gem_spec
176
171
  output << item
@@ -234,8 +229,7 @@ module Synvert
234
229
  end
235
230
 
236
231
  # run snippets
237
- def run_snippet
238
- snippet_name = @options[:snippet_name]
232
+ def run_snippet(snippet_name)
239
233
  if plain_output?
240
234
  puts "===== #{snippet_name} started ====="
241
235
  group, name = snippet_name.split('/')
@@ -338,5 +332,12 @@ module Synvert
338
332
  def json_output?
339
333
  @options[:format] == 'json'
340
334
  end
335
+
336
+ # get the last registered snippet name
337
+ def get_last_snippet_name
338
+ group = Rewriter.availables.keys.last
339
+ name = Rewriter.availables[group].keys.last
340
+ return [group, name].join("/")
341
+ end
341
342
  end
342
343
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Synvert
4
- VERSION = '0.19.1'
4
+ VERSION = '0.20.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', '>= 0.58.2'
23
+ spec.add_runtime_dependency 'synvert-core', '>= 1.5.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.19.1
4
+ version: 0.20.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: 2021-10-22 00:00:00.000000000 Z
11
+ date: 2022-08-20 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: 0.58.2
19
+ version: 1.5.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: 0.58.2
26
+ version: 1.5.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -125,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
125
125
  - !ruby/object:Gem::Version
126
126
  version: '0'
127
127
  requirements: []
128
- rubygems_version: 3.2.22
128
+ rubygems_version: 3.3.7
129
129
  signing_key:
130
130
  specification_version: 4
131
131
  summary: synvert = syntax + convert.