synvert 0.0.1 → 0.0.2

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.
@@ -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