synvert 0.11.1 → 0.12.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: 4ffaa68ee9700864133744f9c3a3ad39424f955d934dc30a59e097865aaff915
4
- data.tar.gz: 9f05b924aabfc116b108235b448114fb84cf35bf867e13d217da6210a736d0a2
3
+ metadata.gz: e1c67ec2f25a9e357beea399dbdf83f6d4a46a2e3a3729843e2cca128a662b73
4
+ data.tar.gz: 4327ecc60f5d4681c2f03bd6e63c2e854a3f9f278c363a71ef9a48126d82320b
5
5
  SHA512:
6
- metadata.gz: 4c1fb489d17c2588442a5b5f6c195d39b9001250f4a0228ee734171f94260265d552a5fa4690b2349a1f57a817086dc693b40b29d9556d3764b130b4f3247727
7
- data.tar.gz: 2af58834be39f558a11dcc43f752a1949b478711a2f8026e301ddf45e817391bdf161e7b0d91239f2628a268ad48d3904f618c4de4dbfa587509d0e4cb0a4e36
6
+ metadata.gz: ce66beb043128746d3771c38a13887e5bd560246c925c5a1570180878b6b86694a4c83074cb5982adfc21f9a930b13b63434d551050270f92f27e485c3500ac5
7
+ data.tar.gz: 0550f8223f2f21f4639e5c63dc475767a281c710b06291c69783f68a22441cfb0d8f92f068c22d24d436521cab40c5bcc90d9836b951b3e0e27835be45443561
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 0.12.0 (2021-03-01)
4
+
5
+ * Display `synvert-core` and `parser` version
6
+ * Generate a new snippet
7
+
3
8
  ## 0.11.1 (2021-02-20)
4
9
 
5
10
  * Use `Synvert::VERSION` instead of `Synvert::Core::VERSION`
data/lib/synvert/cli.rb CHANGED
@@ -41,6 +41,8 @@ module Synvert
41
41
  show_rewriter
42
42
  when 'sync'
43
43
  sync_snippets
44
+ when 'generate'
45
+ generate_snippet
44
46
  else
45
47
  # run
46
48
  load_rewriters
@@ -112,8 +114,14 @@ module Synvert
112
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|
113
115
  @options[:snippet_names] = snippet_names.split(',').map(&:strip)
114
116
  end
117
+ opts.on '-g',
118
+ '--generate NEW_SNIPPET_NAME',
119
+ 'generate a new snippet' do |name|
120
+ @options[:command] = 'generate'
121
+ @options[:snippet_name] = name
122
+ end
115
123
  opts.on '-v', '--version', 'show this version' do
116
- puts VERSION
124
+ puts "#{VERSION} (with synvert-core #{Core::VERSION} and parser #{Parser::VERSION})"
117
125
  exit
118
126
  end
119
127
  end
@@ -243,6 +251,54 @@ module Synvert
243
251
  end
244
252
  end
245
253
 
254
+ # generate a new snippet
255
+ def generate_snippet
256
+ group, name = @options[:snippet_name].split('/')
257
+ FileUtils.mkdir_p("lib/#{group}")
258
+ FileUtils.mkdir_p("spec/#{group}")
259
+ lib_content = <<~EOF
260
+ # frozen_string_literal: true
261
+
262
+ Synvert::Rewriter.new '#{group}', '#{name}' do
263
+ description <<~EOS
264
+ It convert Foo to Bar
265
+
266
+ ```ruby
267
+ Foo
268
+ ```
269
+
270
+ =>
271
+
272
+ ```ruby
273
+ Bar
274
+ ```
275
+ EOS
276
+
277
+ within_files '**/*.rb' do
278
+ with_node type: 'const', to_source: 'Foo' do
279
+ replace_with 'Bar'
280
+ end
281
+ end
282
+ end
283
+ EOF
284
+ spec_content = <<~EOF
285
+ # frozen_string_literal: true
286
+
287
+ require 'spec_helper'
288
+
289
+ RSpec.describe 'Convert Foo to Bar' do
290
+ let(:rewriter_name) { '#{group}/#{name}' }
291
+ let(:fake_file_path) { 'foobar.rb' }
292
+ let(:test_content) { 'Foo' }
293
+ let(:test_rewritten_content) { 'Bar' }
294
+
295
+ include_examples 'convertable'
296
+ end
297
+ EOF
298
+ File.write("lib/#{group}/#{name}.rb", lib_content)
299
+ File.write("spec/#{group}/#{name}_spec.rb", spec_content)
300
+ end
301
+
246
302
  def default_snippets_path
247
303
  File.join(ENV['HOME'], '.synvert')
248
304
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Synvert
4
- VERSION = '0.11.1'
4
+ VERSION = '0.12.0'
5
5
  end
@@ -8,6 +8,15 @@ module Synvert
8
8
  let(:snippet) { Snippet.new(snippets_path) }
9
9
  after { FileUtils.rmdir(snippets_path) if File.exist?(snippets_path) }
10
10
 
11
+ describe '.fetch_core_version' do
12
+ it 'gets remote version' do
13
+ stub_request(:get, 'https://rubygems.org/api/v1/versions/synvert-core.json').to_return(
14
+ body: '[{"number":"0.4.2"}]'
15
+ )
16
+ expect(Snippet.fetch_core_version).to eq '0.4.2'
17
+ end
18
+ end
19
+
11
20
  describe 'sync' do
12
21
  it 'git clones snippets' do
13
22
  expect(Kernel).to receive(:system).with(
@@ -23,14 +32,5 @@ module Synvert
23
32
  FileUtils.cd File.dirname(__FILE__)
24
33
  end
25
34
  end
26
-
27
- describe 'fetch_core_version' do
28
- it 'gets remote version' do
29
- stub_request(:get, 'https://rubygems.org/api/v1/versions/synvert-core.json').to_return(
30
- body: '[{"number":"0.4.2"}]'
31
- )
32
- expect(snippet.fetch_core_version).to eq '0.4.2'
33
- end
34
- end
35
35
  end
36
36
  end
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.11.1
4
+ version: 0.12.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-02-20 00:00:00.000000000 Z
11
+ date: 2021-03-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: synvert-core