synvert 0.12.1 → 0.16.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: 6850587d42a82286479a86f22018a83b4e6f3b6d23d65a6518120acde4c4a52c
4
- data.tar.gz: e9a223cae6a39601d7bd9f793c109d28db4483664da77a20a88c267a4432568e
3
+ metadata.gz: 1d737afecd60f57b9f37667899020a9a228af5ea1aa6e195686e4da8c5e201ea
4
+ data.tar.gz: 070115ee46ab5de7a6dd3b24bf39ed4a62a5f5b00c7b1a897f7378cc2b379f39
5
5
  SHA512:
6
- metadata.gz: eca37ac2eda8ea96d555b32061336b2576f0efbd5471dbfb0ca58594e21a55e17559675d8f2880d5b0f9740564f719311eb06bb34f90491bed713c0b7d6e3267
7
- data.tar.gz: 796ce440e914222563a41741b54a89584da3ee2418fe830a37bdfa076beabb794c69312d38e3a319f42c2d483dd72ccb402666dd97e0b0aa539ef47726b0c2b9
6
+ metadata.gz: 7ddc5f29a5f0dc24a13ed097e0814f4a4eed585185420010b6fdbfcdc5822d4b1ba769a094d46e61f494c10866c58b83126f6fda4c768814a9ace2a7b9b3c5c1
7
+ data.tar.gz: 0dc29b3b96c5aaeaf3479d28e1fe7f33b2a95f76205665bd6c4ec6122d16949e829713f9dd0ff6d92170c4c01e8cbe4d2de52fa5399459c7bb3f0fdd4edad616
data/CHANGELOG.md CHANGED
@@ -1,7 +1,22 @@
1
1
  # CHANGELOG
2
2
 
3
- ## 0.12.1 (2021-03-01)
3
+ ## 0.16.0 (2021-03-24)
4
4
 
5
+ * Add `ruby_version` and `gem_spec` to json output
6
+
7
+ ## 0.15.0 (2021-03-23)
8
+
9
+ * Fix reduce on empty array
10
+ * Update synvert-core when syncing snippets
11
+
12
+ ## 0.14.0 (2021-03-13)
13
+
14
+ * Add CLI option `--format`
15
+ * Run one snippet once
16
+
17
+ ## 0.13.0 (2021-03-02)
18
+
19
+ * Use `ENV['SYNVERT_SNIPPETS_HOME']` to change default snippets home
5
20
  * Display snippet source code for showing a snippet
6
21
 
7
22
  ## 0.12.0 (2021-03-01)
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.
@@ -49,6 +47,18 @@ $ synvert --sync
49
47
  $ synvert -r factory_girl/use_short_syntax,rails/upgrade_3_2_to_4_0 ~/Sites/railsbp/rails-bestpractices.com
50
48
  ```
51
49
 
50
+ ## Docker
51
+
52
+ We have a docker image to run synvert
53
+
54
+ ```
55
+ $ docker pull xinminlabs/awesomecode-synvert
56
+
57
+ $ docker run xinminlabs/awesomecode-synvert synvert --list
58
+
59
+ $ docker run -v <your project path>:/app xinminlabs/awesomecode-synvert synvert --run default/check_syntax /app
60
+ ```
61
+
52
62
  ## Documentation
53
63
 
54
64
  [http://xinminlabs.github.io/synvert/][3]
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
@@ -137,7 +123,7 @@ module Synvert
137
123
 
138
124
  # Load all rewriters.
139
125
  def load_rewriters
140
- Dir.glob(File.join(default_snippets_path, 'lib/**/*.rb')).each { |file| require file }
126
+ Dir.glob(File.join(default_snippets_home, 'lib/**/*.rb')).each { |file| require file }
141
127
 
142
128
  @options[:custom_snippet_paths].each do |snippet_path|
143
129
  if /^http/.match?(snippet_path)
@@ -148,7 +134,7 @@ module Synvert
148
134
  end
149
135
  end
150
136
  rescue StandardError
151
- FileUtils.rm_rf default_snippets_path
137
+ FileUtils.rm_rf default_snippets_home
152
138
  retry
153
139
  end
154
140
 
@@ -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.
@@ -194,7 +179,7 @@ module Synvert
194
179
  editor = [ENV['SYNVERT_EDITOR'], ENV['EDITOR']].find { |e| !e.nil? && !e.empty? }
195
180
  return puts 'To open a synvert snippet, set $EDITOR or $SYNVERT_EDITOR' unless editor
196
181
 
197
- path = File.expand_path(File.join(default_snippets_path, "lib/#{@options[:snippet_name]}.rb"))
182
+ path = File.expand_path(File.join(default_snippets_home, "lib/#{@options[:snippet_name]}.rb"))
198
183
  if File.exist? path
199
184
  system editor, path
200
185
  else
@@ -222,7 +207,7 @@ module Synvert
222
207
 
223
208
  # Show and print one rewriter.
224
209
  def show_rewriter
225
- path = File.expand_path(File.join(default_snippets_path, "lib/#{@options[:snippet_name]}.rb"))
210
+ path = File.expand_path(File.join(default_snippets_home, "lib/#{@options[:snippet_name]}.rb"))
226
211
  if File.exist?(path)
227
212
  puts File.read(path)
228
213
  else
@@ -232,11 +217,36 @@ module Synvert
232
217
 
233
218
  # sync snippets
234
219
  def sync_snippets
235
- Snippet.new(default_snippets_path).sync
220
+ Snippet.new(default_snippets_home).sync
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
@@ -288,8 +298,16 @@ module Synvert
288
298
  File.write("spec/#{group}/#{name}_spec.rb", spec_content)
289
299
  end
290
300
 
291
- def default_snippets_path
292
- File.join(ENV['HOME'], '.synvert')
301
+ def default_snippets_home
302
+ ENV['SYNVERT_SNIPPETS_HOME'] || File.join(ENV['HOME'], '.synvert')
303
+ end
304
+
305
+ def plain_output?
306
+ @options[:format] == 'plain'
307
+ end
308
+
309
+ def json_output?
310
+ @options[:format] == 'json'
293
311
  end
294
312
  end
295
313
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Synvert
4
- VERSION = '0.12.1'
4
+ VERSION = '0.16.0'
5
5
  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.12.1
4
+ version: 0.16.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-01 00:00:00.000000000 Z
11
+ date: 2021-03-24 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