synvert 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4aefc7425f57552493435e868b3bbaae081a97ba
4
+ data.tar.gz: d679d3dd07f996bf238f540a842c9f99a758d7d4
5
+ SHA512:
6
+ metadata.gz: b213405f6988e2041a4e087128319ed1cc5fead180dc58a269f6852c426f50b5bb5b322fc93839a2055d6d5f01809086ba6bd3d95052c47fcf64396af60bc6bc
7
+ data.tar.gz: 630fbc831d76015d8ca0ea2ff958a87efab5a7be7ff5afd1d9d3a3a766039ad5ad59d67c8be6b7f969f48e96dff58cc65e28499ba5eea3ba00845716026e1f5d
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in synvert.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Richard Huang
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,29 @@
1
+ # Synvert
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'synvert'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install synvert
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ $LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
5
+ require 'synvert'
6
+ require 'synvert/cli'
7
+
8
+ result = Synvert::CLI.run
9
+ exit(result ? 0 : 1)
@@ -0,0 +1,14 @@
1
+ # coding: utf-8
2
+ require "synvert/version"
3
+ require 'parser'
4
+ require 'parser/current'
5
+ require 'ast'
6
+
7
+ module Synvert
8
+ autoload :BaseConverter, 'synvert/base_converter'
9
+ autoload :CheckingVisitor, 'synvert/checking_visitor'
10
+ autoload :SexpHelper, 'synvert/sexp_helper'
11
+ module FactoryGirl
12
+ autoload :SyntaxMethodsConverter, 'synvert/factory_girl/syntax_methods_converter'
13
+ end
14
+ end
@@ -0,0 +1,36 @@
1
+ # coding: utf-8
2
+
3
+ module Synvert
4
+ class BaseConverter < Parser::Rewriter
5
+ include AST::Sexp
6
+ include SexpHelper
7
+
8
+ attr_reader :filename
9
+
10
+ def rewrite(source_buffer, ast)
11
+ @filename = source_buffer.name
12
+
13
+ new_ast = AST::Node.new(:program, [ast])
14
+ super(source_buffer, new_ast)
15
+ end
16
+
17
+ def append_to(node, content)
18
+ if node.children.last
19
+ indent = indent(node.children.last)
20
+ insert_after node.children.last.loc.expression, "\n#{' '*indent}#{content}"
21
+ else
22
+ indent = indent(node) + 2
23
+ insert_after node.children.first.loc.expression, "\n#{' '*indent}#{content}"
24
+ end
25
+ end
26
+
27
+ def append_after(node, content)
28
+ indent = indent(node)
29
+ insert_after node.loc.expression, "\n#{' '*indent}#{content}"
30
+ end
31
+
32
+ def indent(node)
33
+ node.loc.expression.column
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,37 @@
1
+ # coding: utf-8
2
+ module Synvert
3
+ class CheckingVisitor
4
+ attr_reader :converters
5
+
6
+ def initialize(options={})
7
+ @converters = options[:converters] || [
8
+ Synvert::FactoryGirl::SyntaxMethodsConverter.new
9
+ ]
10
+ end
11
+
12
+ def convert_file(filename)
13
+ source = File.read filename
14
+ converted_source = convert(filename, source)
15
+ if source != converted_source
16
+ File.write(filename, converted_source)
17
+ end
18
+ end
19
+
20
+ def convert(filename, source)
21
+ source_buffer = Parser::Source::Buffer.new filename
22
+ source_buffer.source = source
23
+
24
+ parser = Parser::CurrentRuby.new
25
+ ast = parser.parse source_buffer
26
+
27
+ converted_source = source
28
+ @converters.each do |converter|
29
+ if Array(converter.interesting_files).any? { |file_pattern| filename =~ file_pattern }
30
+ converted_source = converter.rewrite(source_buffer, ast)
31
+ end
32
+ end
33
+
34
+ converted_source
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ require 'find'
3
+
4
+ module Synvert
5
+ class CLI
6
+ def self.run
7
+ new.run
8
+ end
9
+
10
+ def initialize
11
+ @checking_visitor = CheckingVisitor.new
12
+ end
13
+
14
+ def run
15
+ Find.find(".") do |path|
16
+ if FileTest.directory?(path)
17
+ next
18
+ else
19
+ @checking_visitor.convert_file(path) if path =~ /\.rb$/
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,49 @@
1
+ # coding: utf-8
2
+
3
+ module Synvert
4
+ module FactoryGirl
5
+ class SyntaxMethodsConverter < BaseConverter
6
+ def interesting_files
7
+ [/spec\/spec_helper\.rb/, /spec\/support\/.*\.rb/, /spec\/.*_spec\.rb/] +
8
+ [/test\/test_helper\.rb/, /test\/support\/.*\.rb/, /test\/.*_test\.rb/] +
9
+ [/features\/support\/env\.rb/, /features\/.*\.rb/]
10
+ end
11
+
12
+ def on_class(node)
13
+ if (name(node) == to_ast("ActiveSupport::TestCase") || name(node) == to_ast("Test::Unit::TestCase")) &&
14
+ !contains_statement?(body(node), "include FactoryGirl::Syntax::Methods")
15
+ append_to node, "include FactoryGirl::Syntax::Methods"
16
+ end
17
+
18
+ super
19
+ end
20
+
21
+ def on_block(node)
22
+ if receiver(node) == to_ast("RSpec") &&
23
+ message(node) == :configure &&
24
+ !contains_statement?(body(node), "config.include FactoryGirl::Syntax::Methods")
25
+ append_to node, "config.include FactoryGirl::Syntax::Methods"
26
+ end
27
+
28
+ super
29
+ end
30
+
31
+ def on_send(node)
32
+ if receiver(node) == to_ast("FactoryGirl") &&
33
+ [:create, :build, :attributes_for, :build_stubbed, :create_list, :build_list, :create_pair, :build_pair].include?(message(node))
34
+ replace node.loc.expression.resize("FactoryGirl.".size), ''
35
+ end
36
+
37
+ super
38
+ end
39
+
40
+ def on_program(node)
41
+ if filename == "features/support/env.rb" && !contains_statement?(node, "World(FactoryGirl::Syntax::Methods)")
42
+ append_after node.children[0], "World(FactoryGirl::Syntax::Methods)"
43
+ end
44
+
45
+ node.updated(nil, process_all(node))
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,51 @@
1
+ module Synvert
2
+ module SexpHelper
3
+ def name(node)
4
+ case node.type
5
+ when :class
6
+ node.children[0]
7
+ else
8
+ end
9
+ end
10
+
11
+ def body(node)
12
+ case node.type
13
+ when :class
14
+ node.children[1]
15
+ when :block
16
+ node.children[2]
17
+ else
18
+ end
19
+ end
20
+
21
+ def receiver(node)
22
+ case node.type
23
+ when :send
24
+ node.children[0]
25
+ when :block
26
+ receiver(node.children[0])
27
+ else
28
+ end
29
+ end
30
+
31
+ def message(node)
32
+ case node.type
33
+ when :send
34
+ node.children[1]
35
+ when :block
36
+ message(node.children[0])
37
+ else
38
+ end
39
+ end
40
+
41
+ def contains_statement?(node, statement)
42
+ node && (node.type == :begin ? node.children : [node]).any? { |child_node|
43
+ child_node == to_ast(statement)
44
+ }
45
+ end
46
+
47
+ def to_ast(str)
48
+ Parser::CurrentRuby.parse(str)
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,5 @@
1
+ # coding: utf-8
2
+
3
+ module Synvert
4
+ VERSION = "0.0.1"
5
+ end
@@ -0,0 +1,17 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
2
+
3
+ require 'synvert'
4
+
5
+ Dir[File.join(File.dirname(__FILE__), 'support', '*')].each do |path|
6
+ require path
7
+ end
8
+
9
+ require 'mocha/api'
10
+
11
+ RSpec.configure do |config|
12
+ config.treat_symbols_as_metadata_keys_with_true_values = true
13
+ config.run_all_when_everything_filtered = true
14
+ config.filter_run :focus
15
+
16
+ config.order = 'random'
17
+ end
@@ -0,0 +1,41 @@
1
+ # coding: utf-8
2
+
3
+ shared_context "expect to convert" do
4
+ it "expects to convert" do
5
+ converter = described_class.new
6
+ source_buffer = Parser::Source::Buffer.new filename
7
+ source_buffer.source = source
8
+
9
+ parser = Parser::CurrentRuby.new
10
+ ast = parser.parse source_buffer
11
+
12
+ expect(converter.rewrite(source_buffer, ast)).to eq expected_source
13
+ end
14
+ end
15
+
16
+ shared_context "not expect to convert" do
17
+ it "does not expect to convert" do
18
+ converter = described_class.new
19
+ source_buffer = Parser::Source::Buffer.new filename
20
+ source_buffer.source = source
21
+
22
+ parser = Parser::CurrentRuby.new
23
+ ast = parser.parse source_buffer
24
+
25
+ expect(converter.rewrite(source_buffer, ast)).to eq source
26
+ end
27
+ end
28
+
29
+ shared_context "interesting file" do
30
+ it "interests file" do
31
+ converter = described_class.new
32
+ expect(converter.interesting_files.any? { |file_pattern| filename =~ file_pattern }).to eq true
33
+ end
34
+ end
35
+
36
+ shared_context "not interesting file" do
37
+ it "does not interest file" do
38
+ converter = described_class.new
39
+ expect(converter.interesting_files.none? { |file_pattern| filename =~ file_pattern }).to eq true
40
+ end
41
+ end
File without changes
@@ -0,0 +1,42 @@
1
+ # coding: utf-8
2
+ require 'spec_helper'
3
+
4
+ module Synvert
5
+ describe CheckingVisitor do
6
+ subject { CheckingVisitor.new }
7
+
8
+ context "initialize" do
9
+ it "factory_girl syntax methods converter is one of default converts" do
10
+ expect(subject.converters.first).is_a? FactoryGirl::SyntaxMethodsConverter
11
+ end
12
+ end
13
+
14
+ context "#convert_file" do
15
+ it "writes converted source" do
16
+ File.expects(:read).with('test.rb').returns('source')
17
+ subject.expects(:convert).with('test.rb', 'source').returns('converted source')
18
+ File.expects(:write).with('test.rb', 'converted source')
19
+ subject.convert_file 'test.rb'
20
+ end
21
+
22
+ it "doesn't write if converted source is same to source" do
23
+ File.expects(:read).with('test.rb').returns('source')
24
+ subject.expects(:convert).with('test.rb', 'source').returns('source')
25
+ File.expects(:write).never
26
+ subject.convert_file 'test.rb'
27
+ end
28
+ end
29
+
30
+ context "#convert" do
31
+ it "gets converted source" do
32
+ subject.converters.first.stubs(:rewrite).returns("converted source")
33
+ expect(subject.convert("spec/spec_helper.rb", "source")).to eq "converted source"
34
+ end
35
+
36
+ it "gets source if none of converter works" do
37
+ subject.converters.first.stubs(:rewrite).returns("converted source")
38
+ expect(subject.convert("(string)", "source")).to eq "source"
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,148 @@
1
+ # coding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe Synvert::FactoryGirl::SyntaxMethodsConverter do
5
+ describe "#interesting_files" do
6
+ ["spec/spec_helper.rb", "test/test_helper.rb", "features/support/env.rb",
7
+ "spec/support/shared_context.rb", "test/support/shared_context.rb",
8
+ "spec/models/post_spec.rb", "test/unit/post_test.rb", "features/step_definitions/post_steps.rb"].each do |file_path|
9
+ context file_path do
10
+ let(:filename) { file_path }
11
+ include_context "interesting file"
12
+ end
13
+ end
14
+
15
+ context "app/models/post.rb" do
16
+ let(:filename) { "app/models/post.rb" }
17
+ include_context "not interesting file"
18
+ end
19
+ end
20
+
21
+ context "spec_helper.rb" do
22
+ let(:filename) { "spec/spec_helper.rb" }
23
+ let(:source) {
24
+ <<-EOF
25
+ RSpec.configure do |config|
26
+ config.include EmailSpec::Helpers
27
+ end
28
+ EOF
29
+ }
30
+ let(:expected_source) {
31
+ <<-EOF
32
+ RSpec.configure do |config|
33
+ config.include EmailSpec::Helpers
34
+ config.include FactoryGirl::Syntax::Methods
35
+ end
36
+ EOF
37
+ }
38
+ include_context "expect to convert"
39
+ end
40
+
41
+ context "test_helper.rb" do
42
+ context "Test::Unit::TestCase" do
43
+ let(:filename) { "test/test_helper.rb" }
44
+ let(:source) {
45
+ <<-EOF
46
+ class Test::Unit::TestCase
47
+ end
48
+ EOF
49
+ }
50
+ let(:expected_source) {
51
+ <<-EOF
52
+ class Test::Unit::TestCase
53
+ include FactoryGirl::Syntax::Methods
54
+ end
55
+ EOF
56
+ }
57
+ include_context "expect to convert"
58
+ end
59
+
60
+ context "ActiveSupport::TestCase" do
61
+ let(:filename) { "test/test_helper.rb" }
62
+ let(:source) {
63
+ <<-EOF
64
+ class ActiveSupport::TestCase
65
+ include EmailSpec::Helpers
66
+ end
67
+ EOF
68
+ }
69
+ let(:expected_source) {
70
+ <<-EOF
71
+ class ActiveSupport::TestCase
72
+ include EmailSpec::Helpers
73
+ include FactoryGirl::Syntax::Methods
74
+ end
75
+ EOF
76
+ }
77
+ include_context "expect to convert"
78
+ end
79
+ end
80
+
81
+ context "features/support/env.rb" do
82
+ let(:filename) { "features/support/env.rb" }
83
+ let(:source) {
84
+ <<-EOF
85
+ require 'cucumber/rails'
86
+ EOF
87
+ }
88
+ let(:expected_source) {
89
+ <<-EOF
90
+ require 'cucumber/rails'
91
+ World(FactoryGirl::Syntax::Methods)
92
+ EOF
93
+ }
94
+ include_context "expect to convert"
95
+ end
96
+
97
+ [:create, :build, :attributes_for, :build_stubbed].each do |method|
98
+ class_eval do
99
+ context "FactoryGirl.#{method}" do
100
+ let(:filename) { "spec/models/post_spec.rb" }
101
+ let(:source) {
102
+ <<-EOF
103
+ it "valids post" do
104
+ post = FactoryGirl.#{method}(:post)
105
+ expect(post).to be_valid
106
+ end
107
+ EOF
108
+ }
109
+ let(:expected_source) {
110
+ <<-EOF
111
+ it "valids post" do
112
+ post = #{method}(:post)
113
+ expect(post).to be_valid
114
+ end
115
+ EOF
116
+ }
117
+
118
+ include_context "expect to convert"
119
+ end
120
+ end
121
+ end
122
+
123
+ [:create_list, :build_list, :create_pair, :build_pair].each do |method|
124
+ class_eval do
125
+ context "FactoryGirl.#{method}" do
126
+ let(:filename) { "spec/models/post_spec.rb" }
127
+ let(:source) {
128
+ <<-EOF
129
+ it "valids posts" do
130
+ posts = FactoryGirl.#{method}(:post)
131
+ expect(posts).to be_valid
132
+ end
133
+ EOF
134
+ }
135
+ let(:expected_source) {
136
+ <<-EOF
137
+ it "valids posts" do
138
+ posts = #{method}(:post)
139
+ expect(posts).to be_valid
140
+ end
141
+ EOF
142
+ }
143
+
144
+ include_context "expect to convert"
145
+ end
146
+ end
147
+ end
148
+ end
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'synvert/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "synvert"
8
+ spec.version = Synvert::VERSION
9
+ spec.authors = ["Richard Huang"]
10
+ spec.email = ["flyerhzm@gmail.com"]
11
+ spec.description = %q{synvert is used to convert ruby code to better syntax.}
12
+ spec.summary = %q{synvert = syntax + convert.}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_runtime_dependency "parser"
22
+
23
+ spec.add_development_dependency "bundler", "~> 1.3"
24
+ spec.add_development_dependency "rake"
25
+ spec.add_development_dependency "rspec"
26
+ spec.add_development_dependency "mocha"
27
+ end
metadata ADDED
@@ -0,0 +1,140 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: synvert
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Richard Huang
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-02-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: parser
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: mocha
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: synvert is used to convert ruby code to better syntax.
84
+ email:
85
+ - flyerhzm@gmail.com
86
+ executables:
87
+ - synvert
88
+ extensions: []
89
+ extra_rdoc_files: []
90
+ files:
91
+ - ".gitignore"
92
+ - ".rspec"
93
+ - Gemfile
94
+ - LICENSE.txt
95
+ - README.md
96
+ - Rakefile
97
+ - bin/synvert
98
+ - lib/synvert.rb
99
+ - lib/synvert/base_converter.rb
100
+ - lib/synvert/checking_visitor.rb
101
+ - lib/synvert/cli.rb
102
+ - lib/synvert/factory_girl/syntax_methods_converter.rb
103
+ - lib/synvert/sexp_helper.rb
104
+ - lib/synvert/version.rb
105
+ - spec/spec_helper.rb
106
+ - spec/support/shared_context.rb
107
+ - spec/synvert/base_converter_spec.rb
108
+ - spec/synvert/checking_visitor_spec.rb
109
+ - spec/synvert/factory_girl/syntax_methods_converter_spec.rb
110
+ - synvert.gemspec
111
+ homepage: ''
112
+ licenses:
113
+ - MIT
114
+ metadata: {}
115
+ post_install_message:
116
+ rdoc_options: []
117
+ require_paths:
118
+ - lib
119
+ required_ruby_version: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ required_rubygems_version: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
129
+ requirements: []
130
+ rubyforge_project:
131
+ rubygems_version: 2.2.0.rc.1
132
+ signing_key:
133
+ specification_version: 4
134
+ summary: synvert = syntax + convert.
135
+ test_files:
136
+ - spec/spec_helper.rb
137
+ - spec/support/shared_context.rb
138
+ - spec/synvert/base_converter_spec.rb
139
+ - spec/synvert/checking_visitor_spec.rb
140
+ - spec/synvert/factory_girl/syntax_methods_converter_spec.rb