synvert 0.13.0 → 0.17.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: 43ccf2486b37c9a73a8f014901e152ff5229bbcac7a35922d6cb5811318c9621
4
- data.tar.gz: 0d9a816901fd978e550f976a6678513a516872f8c41ec3c1a1f21751e8b0a781
3
+ metadata.gz: fc982f230933521fb1b332728e9affea43b0245b7c0dacd501cce3050983ee90
4
+ data.tar.gz: 9a370e4f362e8c40eb9cdb8eda9121234d81ded3966428c1d803d33a83099433
5
5
  SHA512:
6
- metadata.gz: eafeb5f93d44b239f1c48dda8be7426491d126adb1b3ba4a7a17f16b93ec9b48b79db1af3be89a60469891b5b25c4afd31326fc1ef11094fc05d24e0e118f4bc
7
- data.tar.gz: 37c977345a20633089077628dc58d1db3dc7a382f64550f42aa912450437886555f2b372fd4edf1fa54bb6ecdefe222a8a08d9d56af5f8d7e6032252f7eb82c1
6
+ metadata.gz: 2f721c8e10e17347a5db3bc8f39a8fe178d16b77617de653f91edfc3887ee0f74d9076d3a7bcec6e6e7fe293d15378e461ab33f00a9cd92de1868e7aa405c2fd
7
+ data.tar.gz: b3d976e148b2c33c5a104b1ab94fc8e4898729f07680971a1b6f08684a0f8fdf23d90b000d38d77f22c8b337829da4c1fea825a8b5c9ef8f2952e34e4a6d5f4c
data/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 0.17.0 (2021-04-19)
4
+
5
+ * Run `git checkout .` before `git pull --rebase`
6
+
7
+ ## 0.16.0 (2021-03-24)
8
+
9
+ * Add `ruby_version` and `gem_spec` to json output
10
+
11
+ ## 0.15.0 (2021-03-23)
12
+
13
+ * Fix reduce on empty array
14
+ * Update synvert-core when syncing snippets
15
+
16
+ ## 0.14.0 (2021-03-13)
17
+
18
+ * Add CLI option `--format`
19
+ * Run one snippet once
20
+
3
21
  ## 0.13.0 (2021-03-02)
4
22
 
5
23
  * Use `ENV['SYNVERT_SNIPPETS_HOME']` to change default snippets home
data/README.md CHANGED
@@ -7,8 +7,6 @@
7
7
  Synvert = syntax + convert, makes it easy to convert ruby code
8
8
  automatically.
9
9
 
10
- Synvert is tested against MRI 1.9.3, 2.0.0, 2.1.7 and 2.2.3.
11
-
12
10
  Synvert is composed by synvert-core and synvert-snippets.
13
11
 
14
12
  [synvert-core][1] provides a dsl to convert ruby code.
@@ -24,6 +22,12 @@ Install it using rubygems
24
22
  $ gem install synvert
25
23
  ```
26
24
 
25
+ then run
26
+
27
+ ```
28
+ $ synvert --sync
29
+ ```
30
+
27
31
  ## Usage
28
32
 
29
33
  ```
@@ -42,11 +46,19 @@ Usage: synvert [project_path]
42
46
  e.g.
43
47
 
44
48
  ```
45
- $ synvert --sync
49
+ $ synvert -r factory_girl/use_short_syntax,rails/upgrade_3_2_to_4_0 ~/Sites/railsbp/rails-bestpractices.com
46
50
  ```
47
51
 
52
+ ## Docker
53
+
54
+ We have a docker image to run synvert
55
+
48
56
  ```
49
- $ synvert -r factory_girl/use_short_syntax,rails/upgrade_3_2_to_4_0 ~/Sites/railsbp/rails-bestpractices.com
57
+ $ docker pull xinminlabs/awesomecode-synvert
58
+
59
+ $ docker run xinminlabs/awesomecode-synvert synvert --list
60
+
61
+ $ docker run -v <your project path>:/app xinminlabs/awesomecode-synvert synvert --run default/check_syntax /app
50
62
  ```
51
63
 
52
64
  ## Documentation
data/lib/synvert/cli.rb CHANGED
@@ -15,7 +15,7 @@ module Synvert
15
15
 
16
16
  # Initialize a CLI.
17
17
  def initialize
18
- @options = { command: 'run', custom_snippet_paths: [], snippet_names: [] }
18
+ @options = { command: 'run', custom_snippet_paths: [], format: 'plain' }
19
19
  end
20
20
 
21
21
  # Run the CLI.
@@ -28,9 +28,6 @@ module Synvert
28
28
  when 'list'
29
29
  load_rewriters
30
30
  list_available_rewriters
31
- when 'list-all'
32
- load_rewriters
33
- list_all_rewriters_in_json
34
31
  when 'open'
35
32
  open_rewriter
36
33
  when 'query'
@@ -46,16 +43,7 @@ module Synvert
46
43
  else
47
44
  # run
48
45
  load_rewriters
49
- @options[:snippet_names].each do |snippet_name|
50
- puts "===== #{snippet_name} started ====="
51
- group, name = snippet_name.split('/')
52
- rewriter = Core::Rewriter.call group, name
53
- rewriter.warnings.each do |warning|
54
- puts '[Warn] ' + warning.message
55
- end
56
- puts rewriter.todo if rewriter.todo
57
- puts "===== #{snippet_name} done ====="
58
- end
46
+ run_snippet
59
47
  end
60
48
  true
61
49
  rescue SystemExit
@@ -82,9 +70,6 @@ module Synvert
82
70
  'load custom snippets, snippet paths can be local file path or remote http url' do |snippet_paths|
83
71
  @options[:custom_snippet_paths] = snippet_paths.split(',').map(&:strip)
84
72
  end
85
- opts.on '--list-all', 'list all available snippets name and description in json format' do
86
- @options[:command] = 'list-all'
87
- end
88
73
  opts.on '-l', '--list', 'list all available snippets' do
89
74
  @options[:command] = 'list'
90
75
  end
@@ -109,15 +94,16 @@ module Synvert
109
94
  opts.on '--sync', 'sync snippets' do
110
95
  @options[:command] = 'sync'
111
96
  end
112
- opts.on '-r',
113
- '--run SNIPPET_NAMES',
114
- 'run specified snippets, each SNIPPET_NAME is combined by group and name, e.g. ruby/new_hash_syntax,ruby/new_lambda_syntax' do |snippet_names|
115
- @options[:snippet_names] = snippet_names.split(',').map(&:strip)
97
+ opts.on '-r', '--run SNIPPET_NAME', 'run specified snippet, e.g. ruby/new_hash_syntax' do |snippet_name|
98
+ @options[:snippet_name] = snippet_name
116
99
  end
117
100
  opts.on '-g', '--generate NEW_SNIPPET_NAME', 'generate a new snippet' do |name|
118
101
  @options[:command] = 'generate'
119
102
  @options[:snippet_name] = name
120
103
  end
104
+ opts.on '-f', '--format FORMAT', 'output format' do |format|
105
+ @options[:format] = format
106
+ end
121
107
  opts.on '-v', '--version', 'show this version' do
122
108
  puts "#{VERSION} (with synvert-core #{Core::VERSION} and parser #{Parser::VERSION})"
123
109
  exit
@@ -156,7 +142,10 @@ module Synvert
156
142
  def list_available_rewriters
157
143
  if Core::Rewriter.availables.empty?
158
144
  puts 'There is no snippet under ~/.synvert, please run `synvert --sync` to fetch snippets.'
159
- else
145
+ return
146
+ end
147
+
148
+ if plain_output?
160
149
  Core::Rewriter.availables.each do |group, rewriters|
161
150
  puts group
162
151
  rewriters.each do |name, _rewriter|
@@ -164,29 +153,25 @@ module Synvert
164
153
  end
165
154
  end
166
155
  puts
167
- end
168
- end
169
-
170
- def list_all_rewriters_in_json
171
- if Core::Rewriter.availables.empty?
172
- puts 'There is no snippet under ~/.synvert, please run `synvert --sync` to fetch snippets.'
173
- return
174
- end
175
-
176
- output = []
177
- Core::Rewriter.availables.each do |group, rewriters|
178
- rewriters.each do |name, rewriter|
179
- rewriter.process_with_sandbox
180
- output << {
181
- group: group,
182
- name: name,
183
- description: rewriter.description,
184
- sub_snippets: rewriter.sub_snippets.map(&:name)
185
- }
156
+ elsif json_output?
157
+ output = []
158
+ Core::Rewriter.availables.each do |group, rewriters|
159
+ rewriters.each do |name, rewriter|
160
+ rewriter.process_with_sandbox
161
+ item = {
162
+ group: group,
163
+ name: name,
164
+ description: rewriter.description,
165
+ sub_snippets: rewriter.sub_snippets.map(&:name)
166
+ }
167
+ item[:ruby_version] = rewriter.ruby_version.version if rewriter.ruby_version
168
+ item[:gem_spec] = { name: rewriter.gem_spec.name, version: rewriter.gem_spec.version } if rewriter.gem_spec
169
+ output << item
170
+ end
186
171
  end
187
- end
188
172
 
189
- puts JSON.generate(output)
173
+ puts JSON.generate(output)
174
+ end
190
175
  end
191
176
 
192
177
  # Open one rewriter.
@@ -236,7 +221,32 @@ module Synvert
236
221
  puts 'synvert snippets are synced'
237
222
  core_version = Snippet.fetch_core_version
238
223
  if Gem::Version.new(core_version) > Gem::Version.new(Synvert::Core::VERSION)
239
- puts "synvert-core is updated, please install synvert-core #{core_version}"
224
+ puts "synvert-core is updated, installing synvert-core #{core_version}"
225
+ system('gem install synvert-core')
226
+ end
227
+ end
228
+
229
+ # run snippets
230
+ def run_snippet
231
+ snippet_name = @options[:snippet_name]
232
+ if plain_output?
233
+ puts "===== #{snippet_name} started ====="
234
+ group, name = snippet_name.split('/')
235
+ rewriter = Core::Rewriter.call group, name
236
+ rewriter.warnings.each do |warning|
237
+ puts '[Warn] ' + warning.message
238
+ end
239
+ puts rewriter.todo if rewriter.todo
240
+ puts "===== #{snippet_name} done ====="
241
+ elsif json_output?
242
+ group, name = snippet_name.split('/')
243
+ rewriter = Core::Rewriter.call group, name
244
+ output = {
245
+ affected_files: rewriter.affected_files.union(rewriter.sub_snippets.sum([], &:affected_files)).to_a,
246
+ warnings: rewriter.warnings.union(rewriter.sub_snippets.sum([], &:warnings)),
247
+ todo: rewriter.todo
248
+ }
249
+ puts JSON.generate(output)
240
250
  end
241
251
  end
242
252
 
@@ -250,7 +260,7 @@ module Synvert
250
260
 
251
261
  Synvert::Rewriter.new '#{group}', '#{name}' do
252
262
  description <<~EOS
253
- It convert Foo to Bar
263
+ It converts Foo to Bar
254
264
 
255
265
  ```ruby
256
266
  Foo
@@ -291,5 +301,13 @@ module Synvert
291
301
  def default_snippets_home
292
302
  ENV['SYNVERT_SNIPPETS_HOME'] || File.join(ENV['HOME'], '.synvert')
293
303
  end
304
+
305
+ def plain_output?
306
+ @options[:format] == 'plain'
307
+ end
308
+
309
+ def json_output?
310
+ @options[:format] == 'json'
311
+ end
294
312
  end
295
313
  end
@@ -19,7 +19,7 @@ module Synvert
19
19
  def sync
20
20
  if File.exist?(@snippets_path)
21
21
  FileUtils.cd @snippets_path
22
- Kernel.system('git pull --rebase')
22
+ Kernel.system('git checkout .; git pull --rebase')
23
23
  else
24
24
  Kernel.system("git clone https://github.com/xinminlabs/synvert-snippets.git #{@snippets_path}")
25
25
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Synvert
4
- VERSION = '0.13.0'
4
+ VERSION = '0.17.0'
5
5
  end
@@ -27,7 +27,7 @@ module Synvert
27
27
 
28
28
  it 'git pull snippets' do
29
29
  FileUtils.mkdir snippets_path
30
- expect(Kernel).to receive(:system).with('git pull --rebase')
30
+ expect(Kernel).to receive(:system).with('git checkout .; git pull --rebase')
31
31
  snippet.sync
32
32
  FileUtils.cd File.dirname(__FILE__)
33
33
  end
data/synvert.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 --sync` first to sync snippets remotely.'
22
22
 
23
- spec.add_runtime_dependency 'synvert-core', '>= 0.20.1'
23
+ spec.add_runtime_dependency 'synvert-core', '>= 0.25.1'
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.13.0
4
+ version: 0.17.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-03-02 00:00:00.000000000 Z
11
+ date: 2021-04-19 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.20.1
19
+ version: 0.25.1
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.20.1
26
+ version: 0.25.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement