synvert 0.13.0 → 0.17.0

Sign up to get free protection for your applications and to get access to all the features.
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