synvert 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -23,5 +23,4 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency "bundler", "~> 1.3"
24
24
  spec.add_development_dependency "rake"
25
25
  spec.add_development_dependency "rspec"
26
- spec.add_development_dependency "mocha"
27
26
  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.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Huang
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-24 00:00:00.000000000 Z
11
+ date: 2014-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -66,20 +66,6 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
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
69
  description: synvert is used to convert ruby code to better syntax.
84
70
  email:
85
71
  - flyerhzm@gmail.com
@@ -90,23 +76,31 @@ extra_rdoc_files: []
90
76
  files:
91
77
  - ".gitignore"
92
78
  - ".rspec"
79
+ - CHANGELOG.md
93
80
  - Gemfile
94
81
  - LICENSE.txt
95
82
  - README.md
96
83
  - Rakefile
97
84
  - bin/synvert
98
85
  - lib/synvert.rb
99
- - lib/synvert/base_converter.rb
100
- - lib/synvert/checking_visitor.rb
101
86
  - lib/synvert/cli.rb
102
- - lib/synvert/factory_girl/syntax_methods_converter.rb
103
- - lib/synvert/sexp_helper.rb
87
+ - lib/synvert/configuration.rb
88
+ - lib/synvert/factory_girl/syntax_methods.rb
89
+ - lib/synvert/node_ext.rb
90
+ - lib/synvert/rewriter.rb
91
+ - lib/synvert/rewriter/action.rb
92
+ - lib/synvert/rewriter/conditions.rb
93
+ - lib/synvert/rewriter/instances.rb
94
+ - lib/synvert/rewriter/scopes.rb
104
95
  - lib/synvert/version.rb
105
96
  - 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
97
+ - spec/support/parser_helper.rb
98
+ - spec/synvert/node_ext_spec.rb
99
+ - spec/synvert/rewriter/action_spec.rb
100
+ - spec/synvert/rewriter/conditions_spec.rb
101
+ - spec/synvert/rewriter/instances_spec.rb
102
+ - spec/synvert/rewriter/scopes_spec.rb
103
+ - spec/synvert/rewriter_spec.rb
110
104
  - synvert.gemspec
111
105
  homepage: ''
112
106
  licenses:
@@ -134,7 +128,10 @@ specification_version: 4
134
128
  summary: synvert = syntax + convert.
135
129
  test_files:
136
130
  - 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
131
+ - spec/support/parser_helper.rb
132
+ - spec/synvert/node_ext_spec.rb
133
+ - spec/synvert/rewriter/action_spec.rb
134
+ - spec/synvert/rewriter/conditions_spec.rb
135
+ - spec/synvert/rewriter/instances_spec.rb
136
+ - spec/synvert/rewriter/scopes_spec.rb
137
+ - spec/synvert/rewriter_spec.rb
@@ -1,36 +0,0 @@
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
@@ -1,37 +0,0 @@
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
@@ -1,49 +0,0 @@
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
@@ -1,51 +0,0 @@
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
@@ -1,41 +0,0 @@
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
@@ -1,42 +0,0 @@
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
@@ -1,148 +0,0 @@
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