synvert 0.5.0 → 0.11.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 +5 -5
- data/.travis.yml +6 -3
- data/CHANGELOG.md +20 -1
- data/Gemfile +2 -0
- data/README.md +6 -5
- data/Rakefile +3 -1
- data/bin/synvert +2 -2
- data/lib/synvert.rb +3 -2
- data/lib/synvert/cli.rb +131 -62
- data/lib/synvert/snippet.rb +16 -12
- data/lib/synvert/version.rb +2 -2
- data/spec/spec_helper.rb +3 -1
- data/spec/synvert/snippet_spec.rb +19 -13
- data/synvert.gemspec +17 -15
- metadata +12 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 1a6497202b00d143ebee65b85a45fb0fa0e1130d44984955f817799c16376424
|
4
|
+
data.tar.gz: e0befd502bd9414ef93ad6368044983a5f5d9a677a86d2ff63de637ab1740ece
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cfa2c293ba1330dcccb3cd2ee43bd1ac47d45a8e0ce011615fcef575842405f27fec6b070061d6567461046a2d7c445ee0440b903baca3ca3c2c47bd00399577
|
7
|
+
data.tar.gz: 79d690b0576dc8083bfc451003ef50d8f3ab968908b774a10f6613a77172751979d93b9746b0e80617998ca0efc84a29ec4b5a61af907b17835c07af440dceaf
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,27 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## 0.11.0 (2021-02-15)
|
4
|
+
|
5
|
+
* Add `--list-all` option
|
6
|
+
* Add post install message
|
7
|
+
* Fix `Synvert::Snippet.fetch_core_version`
|
8
|
+
|
9
|
+
## 0.10.0 (2021-02-07)
|
10
|
+
|
11
|
+
* Use new `Core::Confiruation`
|
12
|
+
* Use require instead of eval in order to preserve normal Ruby semantics
|
13
|
+
|
14
|
+
## 0.9.0
|
15
|
+
|
16
|
+
* Add `-o` or `--open` option` to open a snippet
|
17
|
+
|
18
|
+
## 0.5.3
|
19
|
+
|
20
|
+
* Show warning message if rewriter not found
|
21
|
+
|
3
22
|
## 0.5.0
|
4
23
|
|
5
|
-
*
|
24
|
+
* Rewrite cli for rewriter group
|
6
25
|
|
7
26
|
## 0.4.2
|
8
27
|
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,17 +1,18 @@
|
|
1
1
|
# Synvert
|
2
2
|
|
3
|
-
[](http://travis-ci.org/xinminlabs/synvert)
|
4
|
+
[](https://coveralls.io/r/xinminlabs/synvert)
|
5
|
+
[](http://badge.fury.io/rb/synvert)
|
6
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 and 2.
|
10
|
+
Synvert is tested against MRI 1.9.3, 2.0.0, 2.1.7 and 2.2.3.
|
11
11
|
|
12
12
|
Synvert is composed by synvert-core and synvert-snippets.
|
13
13
|
|
14
14
|
[synvert-core][1] provides a dsl to convert ruby code.
|
15
|
+
|
15
16
|
[synvert-snippets][2] lists all snippets to convert ruby code based on
|
16
17
|
synvert-core.
|
17
18
|
|
@@ -45,7 +46,7 @@ $ synvert --sync
|
|
45
46
|
```
|
46
47
|
|
47
48
|
```
|
48
|
-
$ synvert -r
|
49
|
+
$ synvert -r factory_girl/use_short_syntax,rails/upgrade_3_2_to_4_0 ~/Sites/railsbp/rails-bestpractices.com
|
49
50
|
```
|
50
51
|
|
51
52
|
## Documentation
|
data/Rakefile
CHANGED
data/bin/synvert
CHANGED
data/lib/synvert.rb
CHANGED
data/lib/synvert/cli.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'optparse'
|
3
4
|
|
4
5
|
module Synvert
|
@@ -14,9 +15,7 @@ module Synvert
|
|
14
15
|
|
15
16
|
# Initialize a CLI.
|
16
17
|
def initialize
|
17
|
-
@options = {command: 'run', custom_snippet_paths: [], snippet_names: []}
|
18
|
-
Core::Configuration.instance.set :skip_files, []
|
19
|
-
Core::Configuration.instance.set :default_snippets_path, File.join(ENV['HOME'], '.synvert')
|
18
|
+
@options = { command: 'run', custom_snippet_paths: [], snippet_names: [] }
|
20
19
|
end
|
21
20
|
|
22
21
|
# Run the CLI.
|
@@ -24,20 +23,33 @@ module Synvert
|
|
24
23
|
# @return [Boolean] true if command runs successfully.
|
25
24
|
def run(args)
|
26
25
|
run_option_parser(args)
|
27
|
-
load_rewriters
|
28
26
|
|
29
27
|
case @options[:command]
|
30
|
-
when 'list'
|
31
|
-
|
32
|
-
|
33
|
-
when '
|
28
|
+
when 'list'
|
29
|
+
load_rewriters
|
30
|
+
list_available_rewriters
|
31
|
+
when 'list-all'
|
32
|
+
load_rewriters
|
33
|
+
list_all_rewriters_in_json
|
34
|
+
when 'open'
|
35
|
+
open_rewriter
|
36
|
+
when 'query'
|
37
|
+
load_rewriters
|
38
|
+
query_available_rewriters
|
39
|
+
when 'show'
|
40
|
+
load_rewriters
|
41
|
+
show_rewriter
|
42
|
+
when 'sync'
|
43
|
+
sync_snippets
|
34
44
|
else
|
45
|
+
# run
|
46
|
+
load_rewriters
|
35
47
|
@options[:snippet_names].each do |snippet_name|
|
36
48
|
puts "===== #{snippet_name} started ====="
|
37
49
|
group, name = snippet_name.split('/')
|
38
50
|
rewriter = Core::Rewriter.call group, name
|
39
51
|
rewriter.warnings.each do |warning|
|
40
|
-
puts
|
52
|
+
puts '[Warn] ' + warning.message
|
41
53
|
end
|
42
54
|
puts rewriter.todo if rewriter.todo
|
43
55
|
puts "===== #{snippet_name} done ====="
|
@@ -51,67 +63,85 @@ module Synvert
|
|
51
63
|
puts "file #{e.diagnostic.location.source_buffer.name}"
|
52
64
|
puts "line #{e.diagnostic.location.line}"
|
53
65
|
false
|
66
|
+
rescue Synvert::Core::RewriterNotFound => e
|
67
|
+
puts e.message
|
68
|
+
false
|
54
69
|
end
|
55
70
|
|
56
|
-
|
71
|
+
private
|
57
72
|
|
58
73
|
# Run OptionParser to parse arguments.
|
59
74
|
def run_option_parser(args)
|
60
|
-
optparse =
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
75
|
+
optparse =
|
76
|
+
OptionParser.new do |opts|
|
77
|
+
opts.banner = 'Usage: synvert [project_path]'
|
78
|
+
opts.on '-d',
|
79
|
+
'--load SNIPPET_PATHS',
|
80
|
+
'load custom snippets, snippet paths can be local file path or remote http url' do |snippet_paths|
|
81
|
+
@options[:custom_snippet_paths] = snippet_paths.split(',').map(&:strip)
|
82
|
+
end
|
83
|
+
opts.on '--list-all', 'list all available snippets name and description in json format' do
|
84
|
+
@options[:command] = 'list-all'
|
85
|
+
end
|
86
|
+
opts.on '-l', '--list', 'list all available snippets' do
|
87
|
+
@options[:command] = 'list'
|
88
|
+
end
|
89
|
+
opts.on '-o', '--open SNIPPET_NAME', 'Open a snippet' do |snippet_name|
|
90
|
+
@options[:command] = 'open'
|
91
|
+
@options[:snippet_name] = snippet_name
|
92
|
+
end
|
93
|
+
opts.on '-q', '--query QUERY', 'query specified snippets' do |query|
|
94
|
+
@options[:command] = 'query'
|
95
|
+
@options[:query] = query
|
96
|
+
end
|
97
|
+
opts.on '--skip FILE_PATTERNS',
|
98
|
+
'skip specified files or directories, separated by comma, e.g. app/models/post.rb,vendor/plugins/**/*.rb' do |file_patterns|
|
99
|
+
@options[:skip_file_patterns] = file_patterns.split(',')
|
100
|
+
end
|
101
|
+
opts.on '-s',
|
102
|
+
'--show SNIPPET_NAME',
|
103
|
+
'show specified snippet description, SNIPPET_NAME is combined by group and name, e.g. ruby/new_hash_syntax' do |snippet_name|
|
104
|
+
@options[:command] = 'show'
|
105
|
+
@options[:snippet_name] = snippet_name
|
106
|
+
end
|
107
|
+
opts.on '--sync', 'sync snippets' do
|
108
|
+
@options[:command] = 'sync'
|
109
|
+
end
|
110
|
+
opts.on '-r',
|
111
|
+
'--run SNIPPET_NAMES',
|
112
|
+
'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
|
+
@options[:snippet_names] = snippet_names.split(',').map(&:strip)
|
114
|
+
end
|
115
|
+
opts.on '-v', '--version', 'show this version' do
|
116
|
+
puts Core::VERSION
|
117
|
+
exit
|
118
|
+
end
|
88
119
|
end
|
89
|
-
end
|
90
120
|
paths = optparse.parse(args)
|
91
|
-
Core::Configuration.
|
121
|
+
Core::Configuration.path = paths.first || Dir.pwd
|
92
122
|
if @options[:skip_file_patterns] && !@options[:skip_file_patterns].empty?
|
93
|
-
skip_files =
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
123
|
+
skip_files =
|
124
|
+
@options[:skip_file_patterns].map do |file_pattern|
|
125
|
+
full_file_pattern = File.join(Core::Configuration.path, file_pattern)
|
126
|
+
Dir.glob(full_file_pattern)
|
127
|
+
end.flatten
|
128
|
+
Core::Configuration.skip_files = skip_files
|
98
129
|
end
|
99
130
|
end
|
100
131
|
|
101
132
|
# Load all rewriters.
|
102
133
|
def load_rewriters
|
103
|
-
default_snippets_path
|
104
|
-
Dir.glob(File.join(default_snippets_path, 'lib/**/*.rb')).each { |file| eval(File.read(file)) }
|
134
|
+
Dir.glob(File.join(default_snippets_path, 'lib/**/*.rb')).each { |file| require file }
|
105
135
|
|
106
136
|
@options[:custom_snippet_paths].each do |snippet_path|
|
107
|
-
if
|
137
|
+
if /^http/.match?(snippet_path)
|
108
138
|
uri = URI.parse snippet_path
|
109
139
|
eval(uri.read)
|
110
140
|
else
|
111
|
-
|
141
|
+
require snippet_path
|
112
142
|
end
|
113
143
|
end
|
114
|
-
rescue
|
144
|
+
rescue StandardError
|
115
145
|
FileUtils.rm_rf default_snippets_path
|
116
146
|
retry
|
117
147
|
end
|
@@ -119,30 +149,65 @@ module Synvert
|
|
119
149
|
# List and print all available rewriters.
|
120
150
|
def list_available_rewriters
|
121
151
|
if Core::Rewriter.availables.empty?
|
122
|
-
puts
|
152
|
+
puts 'There is no snippet under ~/.synvert, please run `synvert --sync` to fetch snippets.'
|
123
153
|
else
|
124
154
|
Core::Rewriter.availables.each do |group, rewriters|
|
125
155
|
puts group
|
126
|
-
rewriters.each do |name,
|
127
|
-
puts
|
156
|
+
rewriters.each do |name, _rewriter|
|
157
|
+
puts ' ' + name
|
128
158
|
end
|
129
159
|
end
|
130
160
|
puts
|
131
161
|
end
|
132
162
|
end
|
133
163
|
|
164
|
+
def list_all_rewriters_in_json
|
165
|
+
if Core::Rewriter.availables.empty?
|
166
|
+
puts 'There is no snippet under ~/.synvert, please run `synvert --sync` to fetch snippets.'
|
167
|
+
return
|
168
|
+
end
|
169
|
+
|
170
|
+
output = []
|
171
|
+
Core::Rewriter.availables.each do |group, rewriters|
|
172
|
+
rewriters.each do |name, rewriter|
|
173
|
+
rewriter.process_with_sandbox
|
174
|
+
output << {
|
175
|
+
group: group,
|
176
|
+
name: name,
|
177
|
+
description: rewriter.description,
|
178
|
+
sub_snippets: rewriter.sub_snippets.map(&:name)
|
179
|
+
}
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
puts JSON.generate(output)
|
184
|
+
end
|
185
|
+
|
186
|
+
# Open one rewriter.
|
187
|
+
def open_rewriter
|
188
|
+
editor = [ENV['SYNVERT_EDITOR'], ENV['EDITOR']].find { |e| !e.nil? && !e.empty? }
|
189
|
+
return puts 'To open a synvert snippet, set $EDITOR or $SYNVERT_EDITOR' unless editor
|
190
|
+
|
191
|
+
path = File.expand_path(File.join(default_snippets_path, "lib/#{@options[:snippet_name]}.rb"))
|
192
|
+
if File.exist? path
|
193
|
+
system editor, path
|
194
|
+
else
|
195
|
+
puts "Can't run #{editor} #{path}"
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
134
199
|
# Query and print available rewriters.
|
135
200
|
def query_available_rewriters
|
136
201
|
Core::Rewriter.availables.each do |group, rewriters|
|
137
202
|
if group.include? @options[:query]
|
138
203
|
puts group
|
139
|
-
rewriters.each do |name,
|
140
|
-
puts
|
204
|
+
rewriters.each do |name, _rewriter|
|
205
|
+
puts ' ' + name
|
141
206
|
end
|
142
207
|
elsif rewriters.keys.any? { |name| name.include? @options[:query] }
|
143
208
|
puts group
|
144
|
-
rewriters.each do |name,
|
145
|
-
puts
|
209
|
+
rewriters.each do |name, _rewriter|
|
210
|
+
puts ' ' + name if name.include?(@options[:query])
|
146
211
|
end
|
147
212
|
end
|
148
213
|
end
|
@@ -158,9 +223,9 @@ module Synvert
|
|
158
223
|
puts rewriter.description
|
159
224
|
rewriter.sub_snippets.each do |sub_rewriter|
|
160
225
|
puts
|
161
|
-
puts
|
226
|
+
puts '=' * 80
|
162
227
|
puts "snippet: #{sub_rewriter.name}"
|
163
|
-
puts
|
228
|
+
puts '=' * 80
|
164
229
|
puts sub_rewriter.description
|
165
230
|
end
|
166
231
|
else
|
@@ -170,12 +235,16 @@ module Synvert
|
|
170
235
|
|
171
236
|
# sync snippets
|
172
237
|
def sync_snippets
|
173
|
-
Snippet.sync
|
174
|
-
puts
|
238
|
+
Snippet.new(default_snippets_path).sync
|
239
|
+
puts 'synvert snippets are synced'
|
175
240
|
core_version = Snippet.fetch_core_version
|
176
241
|
if Gem::Version.new(core_version) > Gem::Version.new(Synvert::Core::VERSION)
|
177
242
|
puts "synvert-core is updated, please install synvert-core #{core_version}"
|
178
243
|
end
|
179
244
|
end
|
245
|
+
|
246
|
+
def default_snippets_path
|
247
|
+
File.join(ENV['HOME'], '.synvert')
|
248
|
+
end
|
180
249
|
end
|
181
250
|
end
|
data/lib/synvert/snippet.rb
CHANGED
@@ -1,24 +1,28 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'open-uri'
|
3
4
|
require 'json'
|
4
5
|
|
5
6
|
module Synvert
|
6
7
|
# Manage synvert snippets.
|
7
8
|
class Snippet
|
9
|
+
def self.fetch_core_version
|
10
|
+
content = URI.open('https://rubygems.org/api/v1/versions/synvert-core.json').read
|
11
|
+
JSON.parse(content).first['number']
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(snippets_path)
|
15
|
+
@snippets_path = snippets_path
|
16
|
+
end
|
17
|
+
|
8
18
|
# synchronize snippets from github.
|
9
|
-
def
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
system("git pull --rebase")
|
19
|
+
def sync
|
20
|
+
if File.exist?(@snippets_path)
|
21
|
+
FileUtils.cd @snippets_path
|
22
|
+
Kernel.system('git pull --rebase')
|
14
23
|
else
|
15
|
-
system("git clone https://github.com/xinminlabs/synvert-snippets.git #{snippets_path}")
|
24
|
+
Kernel.system("git clone https://github.com/xinminlabs/synvert-snippets.git #{@snippets_path}")
|
16
25
|
end
|
17
26
|
end
|
18
|
-
|
19
|
-
def self.fetch_core_version
|
20
|
-
content = open("https://rubygems.org/api/v1/versions/synvert-core.json").read
|
21
|
-
JSON.parse(content).first["number"]
|
22
|
-
end
|
23
27
|
end
|
24
28
|
end
|
data/lib/synvert/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -1,29 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
module Synvert
|
4
6
|
describe Snippet do
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
after { FileUtils.rm_rf default_snippets_path }
|
7
|
+
let(:snippets_path) { File.join(File.dirname(__FILE__), '.synvert') }
|
8
|
+
let(:snippet) { Snippet.new(snippets_path) }
|
9
|
+
after { FileUtils.rmdir(snippets_path) if File.exist?(snippets_path) }
|
9
10
|
|
11
|
+
describe 'sync' do
|
10
12
|
it 'git clones snippets' do
|
11
|
-
expect(
|
12
|
-
|
13
|
+
expect(Kernel).to receive(:system).with(
|
14
|
+
"git clone https://github.com/xinminlabs/synvert-snippets.git #{snippets_path}"
|
15
|
+
)
|
16
|
+
snippet.sync
|
13
17
|
end
|
14
18
|
|
15
19
|
it 'git pull snippets' do
|
16
|
-
FileUtils.mkdir
|
17
|
-
expect(
|
18
|
-
|
20
|
+
FileUtils.mkdir snippets_path
|
21
|
+
expect(Kernel).to receive(:system).with('git pull --rebase')
|
22
|
+
snippet.sync
|
23
|
+
FileUtils.cd File.dirname(__FILE__)
|
19
24
|
end
|
20
25
|
end
|
21
26
|
|
22
|
-
describe
|
27
|
+
describe 'fetch_core_version' do
|
23
28
|
it 'gets remote version' do
|
24
|
-
stub_request(:get,
|
25
|
-
|
26
|
-
|
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'
|
27
33
|
end
|
28
34
|
end
|
29
35
|
end
|
data/synvert.gemspec
CHANGED
@@ -1,27 +1,29 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
5
|
require 'synvert/version'
|
5
6
|
|
6
7
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
8
|
+
spec.name = 'synvert'
|
8
9
|
spec.version = Synvert::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
11
|
-
spec.description =
|
12
|
-
spec.summary =
|
13
|
-
spec.homepage =
|
14
|
-
spec.license =
|
10
|
+
spec.authors = ['Richard Huang']
|
11
|
+
spec.email = ['flyerhzm@gmail.com']
|
12
|
+
spec.description = 'synvert is used to convert ruby code to better syntax.'
|
13
|
+
spec.summary = 'synvert = syntax + convert.'
|
14
|
+
spec.homepage = 'https://github.com/xinminlabs/synvert'
|
15
|
+
spec.license = 'MIT'
|
15
16
|
|
16
17
|
spec.files = `git ls-files`.split($/)
|
17
18
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
19
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
-
spec.require_paths = [
|
20
|
+
spec.require_paths = ['lib']
|
21
|
+
spec.post_install_message = 'Please run `synvert --sync` first to sync snippets remotely.'
|
20
22
|
|
21
|
-
spec.add_runtime_dependency
|
23
|
+
spec.add_runtime_dependency 'synvert-core', '>= 0.20.0'
|
22
24
|
|
23
|
-
spec.add_development_dependency
|
24
|
-
spec.add_development_dependency
|
25
|
-
spec.add_development_dependency
|
26
|
-
spec.add_development_dependency
|
25
|
+
spec.add_development_dependency 'bundler'
|
26
|
+
spec.add_development_dependency 'rake'
|
27
|
+
spec.add_development_dependency 'rspec'
|
28
|
+
spec.add_development_dependency 'webmock'
|
27
29
|
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.
|
4
|
+
version: 0.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Huang
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: synvert-core
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.20.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.
|
26
|
+
version: 0.20.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,7 +108,7 @@ homepage: https://github.com/xinminlabs/synvert
|
|
108
108
|
licenses:
|
109
109
|
- MIT
|
110
110
|
metadata: {}
|
111
|
-
post_install_message:
|
111
|
+
post_install_message: Please run `synvert --sync` first to sync snippets remotely.
|
112
112
|
rdoc_options: []
|
113
113
|
require_paths:
|
114
114
|
- lib
|
@@ -123,9 +123,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
125
|
requirements: []
|
126
|
-
|
127
|
-
|
128
|
-
signing_key:
|
126
|
+
rubygems_version: 3.1.4
|
127
|
+
signing_key:
|
129
128
|
specification_version: 4
|
130
129
|
summary: synvert = syntax + convert.
|
131
130
|
test_files:
|