synvert-core 0.2.0 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6ed207188d4ec855b1b3e7f89bbd8fe237fdcfd4
4
- data.tar.gz: dbe3386bcd2c13ab431afd27111290979ab20e62
3
+ metadata.gz: 8ee7de00fd1f401d3d4ea506c941871da5714229
4
+ data.tar.gz: 406b2f2ecdfdb8b837ad0e8839c5e37b1c9d821f
5
5
  SHA512:
6
- metadata.gz: fef1237ad08c20bee81b382f67efa36e0f2d137eb7f4fb5289daf35dfe6053b57a99020e127394d1b7f5f12b9ab4b4983feb01ad6f0ce680db175574cd9d687e
7
- data.tar.gz: 80c1a8239eea4c895a3c5f5fac37c30f919c70daa60fc4f7f55b789f4e5e43f7329bc5fe3f9aafdebfab6ac3441957eea5c851ccbd0bf7fd9dc73614e9258c98
6
+ metadata.gz: d1db8ef41e1b179c38df52c22091418183e40b879921b462bc47d9f9821a47cb4d4823983bb54024624717cbcf39bfa5b4a86575c4cd69a6ae9b179c7eb1bab6
7
+ data.tar.gz: f394394861d482865963fccd5024a340ddabf9e43077a0467a79ef9de77285348905e09d70f5e334d1e1ae759737dfd709bb5c49a955ff7b331eaacb13082482
data/CHANGELOG.md CHANGED
@@ -1,12 +1,15 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 0.3.0
4
+
5
+ * Rename node.source(instance) to node.to_source
6
+ * Add has_key? and hash_value helper methods for hash node
7
+ * Fix Instance#check_conflict_actions
8
+
3
9
  ## 0.2.0
4
10
 
5
11
  * Add remove_file dsl
6
12
  * Add warn dsl
7
-
8
- ## 0.1.1
9
-
10
13
  * Return empty array if no available rewriters
11
14
 
12
15
  ## 0.1.0
@@ -119,6 +119,33 @@ class Parser::AST::Node
119
119
  end
120
120
  end
121
121
 
122
+ # Test if hash node contains specified key.
123
+ #
124
+ # @param [Object] key value.
125
+ # @return [Boolean] true if specified key exists.
126
+ # @raise [Synvert::Core::MethodNotSupported] if calls on other node.
127
+ def has_key?(key)
128
+ if :hash == self.type
129
+ self.children.any? { |pair_node| pair_node.key.to_value == key }
130
+ else
131
+ raise Synvert::Core::MethodNotSupported.new "has_key? is not handled for #{self.inspect}"
132
+ end
133
+ end
134
+
135
+ # Get hash value node according to specified key.
136
+ #
137
+ # @param [Object] key value.
138
+ # @return [Parser::AST::Node] value node.
139
+ # @raise [Synvert::Core::MethodNotSupported] if calls on other node.
140
+ def hash_value(key)
141
+ if :hash == self.type
142
+ value_node = self.children.find { |pair_node| pair_node.key.to_value == key }
143
+ value_node ? value_node.value : nil
144
+ else
145
+ raise Synvert::Core::MethodNotSupported.new "has_key? is not handled for #{self.inspect}"
146
+ end
147
+ end
148
+
122
149
  # Get key node of hash :pair node.
123
150
  #
124
151
  # @return [Parser::AST::Node] key node.
@@ -143,11 +170,26 @@ class Parser::AST::Node
143
170
  end
144
171
  end
145
172
 
173
+ # Return the exact value.
174
+ #
175
+ # @return [Object] exact value.
176
+ # @raise [Synvert::Core::MethodNotSupported] if calls on other node.
177
+ def to_value
178
+ case self.type
179
+ when :str, :sym
180
+ self.children.last
181
+ when :array
182
+ self.children.map(&:to_value)
183
+ else
184
+ raise Synvert::Core::MethodNotSupported.new "to_value is not handled for #{self.inspect}"
185
+ end
186
+ end
187
+
146
188
  # Get the source code of current node.
147
189
  #
148
- # @param instance [Synvert::Core::Rewriter::Instance]
149
190
  # @return [String] source code.
150
- def source(instance)
191
+ def to_source
192
+ instance = Synvert::Rewriter::Instance.current
151
193
  if self.loc.expression
152
194
  instance.current_source[self.loc.expression.begin_pos...self.loc.expression.end_pos]
153
195
  end
@@ -175,23 +217,22 @@ class Parser::AST::Node
175
217
 
176
218
  # Match current node with rules.
177
219
  #
178
- # @param instance [Synvert::Core::Rewriter::Instance] used to get crrent source code.
179
220
  # @param rules [Hash] rules to match.
180
221
  # @return true if matches.
181
- def match?(instance, rules)
222
+ def match?(rules)
182
223
  flat_hash(rules).keys.all? do |multi_keys|
183
224
  if multi_keys.last == :any
184
- actual_values = actual_value(self, instance, multi_keys[0...-1])
225
+ actual_values = actual_value(self, multi_keys[0...-1])
185
226
  expected = expected_value(rules, multi_keys)
186
- actual_values.any? { |actual| match_value?(instance, actual, expected) }
227
+ actual_values.any? { |actual| match_value?(actual, expected) }
187
228
  elsif multi_keys.last == :not
188
- actual = actual_value(self, instance, multi_keys[0...-1])
229
+ actual = actual_value(self, multi_keys[0...-1])
189
230
  expected = expected_value(rules, multi_keys)
190
- !match_value?(instance, actual, expected)
231
+ !match_value?(actual, expected)
191
232
  else
192
- actual = actual_value(self, instance, multi_keys)
233
+ actual = actual_value(self, multi_keys)
193
234
  expected = expected_value(rules, multi_keys)
194
- match_value?(instance, actual, expected)
235
+ match_value?(actual, expected)
195
236
  end
196
237
  end
197
238
  end
@@ -229,33 +270,32 @@ private
229
270
 
230
271
  # Compare actual value with expected value.
231
272
  #
232
- # @param instance [Synvert::Core::Rewriter::Instance] used to get source code.
233
273
  # @param actual [Object] actual value.
234
274
  # @param expected [Object] expected value.
235
275
  # @return [Integer] -1, 0 or 1.
236
276
  # @raise [Synvert::Core::MethodNotSupported] if expected class is not supported.
237
- def match_value?(instance, actual, expected)
277
+ def match_value?(actual, expected)
238
278
  case expected
239
279
  when Symbol
240
280
  if Parser::AST::Node === actual
241
- actual.source(instance) == ":#{expected}"
281
+ actual.to_source == ":#{expected}"
242
282
  else
243
283
  actual.to_sym == expected
244
284
  end
245
285
  when String
246
286
  if Parser::AST::Node === actual
247
- actual.source(instance) == expected || actual.source(instance)[1...-1] == expected
287
+ actual.to_source == expected || actual.to_source[1...-1] == expected
248
288
  else
249
289
  actual.to_s == expected
250
290
  end
251
291
  when Regexp
252
292
  if Parser::AST::Node === actual
253
- actual.source(instance) =~ Regexp.new(expected.to_s, Regexp::MULTILINE)
293
+ actual.to_source =~ Regexp.new(expected.to_s, Regexp::MULTILINE)
254
294
  else
255
295
  actual.to_s =~ Regexp.new(expected.to_s, Regexp::MULTILINE)
256
296
  end
257
297
  when Array
258
- actual.zip(expected).all? { |a, e| match_value?(instance, a, e) }
298
+ actual.zip(expected).all? { |a, e| match_value?(a, e) }
259
299
  when NilClass
260
300
  actual.nil?
261
301
  when Numeric
@@ -297,13 +337,12 @@ private
297
337
  # Get actual value from the node.
298
338
  #
299
339
  # @param node [Parser::AST::Node]
300
- # @param instance [Synvert::Core::Rewriter::Instance]
301
340
  # @param multi_keys [Array<Symbol>]
302
341
  # @return [Object] actual value.
303
- def actual_value(node, instance, multi_keys)
342
+ def actual_value(node, multi_keys)
304
343
  multi_keys.inject(node) { |n, key|
305
344
  if n
306
- key == :source ? n.send(key, instance) : n.send(key)
345
+ key == :source ? n.send(key) : n.send(key)
307
346
  end
308
347
  }
309
348
  end
@@ -27,7 +27,7 @@ module Synvert::Core
27
27
  def match?
28
28
  match = false
29
29
  @instance.current_node.recursive_children do |child_node|
30
- match = match || (child_node && child_node.match?(@instance, @rules))
30
+ match = match || (child_node && child_node.match?(@rules))
31
31
  end
32
32
  match
33
33
  end
@@ -39,7 +39,7 @@ module Synvert::Core
39
39
  def match?
40
40
  match = false
41
41
  @instance.current_node.recursive_children do |child_node|
42
- match = match || (child_node && child_node.match?(@instance, @rules))
42
+ match = match || (child_node && child_node.match?(@rules))
43
43
  end
44
44
  !match
45
45
  end
@@ -50,7 +50,7 @@ module Synvert::Core
50
50
  # check if only have one child node and the child node matches rules.
51
51
  def match?
52
52
  @instance.current_node.body.size == 1 &&
53
- @instance.current_node.body.first.match?(@instance, @rules)
53
+ @instance.current_node.body.first.match?(@rules)
54
54
  end
55
55
  end
56
56
  end
@@ -6,6 +6,10 @@ module Synvert::Core
6
6
  #
7
7
  # One instance can contains one or many [Synvert::Core::Rewriter::Scope] and [Synvert::Rewriter::Condition].
8
8
  class Rewriter::Instance
9
+ class <<self
10
+ attr_accessor :current
11
+ end
12
+
9
13
  # @!attribute [rw] current_node
10
14
  # @return current parsing node
11
15
  # @!attribute [rw] current_source
@@ -32,6 +36,8 @@ module Synvert::Core
32
36
  # It finds all files, for each file, it executes the block code, gets all rewrite actions,
33
37
  # and rewrite source code back to original file.
34
38
  def process
39
+ self.class.current = self
40
+
35
41
  parser = Parser::CurrentRuby.new
36
42
  file_pattern = File.join(Configuration.instance.get(:path), @file_pattern)
37
43
  Dir.glob(file_pattern).each do |file_path|
@@ -164,12 +170,19 @@ module Synvert::Core
164
170
  # So if there is an overlap between two actions, it removes the conflict actions and operate them in the next loop.
165
171
  def check_conflict_actions
166
172
  i = @actions.length - 1
173
+ j = i - 1
167
174
  @conflict_actions = []
168
- while i > 0
169
- if @actions[i].begin_pos <= @actions[i - 1].end_pos
170
- @conflict_actions << @actions.delete_at(i)
175
+ return if i < 0
176
+
177
+ begin_pos = @actions[i].begin_pos
178
+ while j > -1
179
+ if begin_pos <= @actions[j].end_pos
180
+ @conflict_actions << @actions.delete_at(j)
181
+ else
182
+ i = j
183
+ begin_pos = @actions[i].begin_pos
171
184
  end
172
- i -= 1
185
+ j -= 1
173
186
  end
174
187
  @conflict_actions
175
188
  end
@@ -21,9 +21,9 @@ module Synvert::Core
21
21
  return unless current_node
22
22
  process_with_node current_node do
23
23
  matching_nodes = []
24
- matching_nodes << current_node if current_node.match? @instance, @rules
24
+ matching_nodes << current_node if current_node.match? @rules
25
25
  current_node.recursive_children do |child_node|
26
- matching_nodes << child_node if child_node.match? @instance, @rules
26
+ matching_nodes << child_node if child_node.match? @rules
27
27
  end
28
28
  matching_nodes.each do |matching_node|
29
29
  process_with_node matching_node do
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Synvert
4
4
  module Core
5
- VERSION = "0.2.0"
5
+ VERSION = "0.3.0"
6
6
  end
7
7
  end
@@ -6,8 +6,8 @@ describe Parser::AST::Node do
6
6
  node = parse('class Synvert; end')
7
7
  expect(node.name).to eq parse('Synvert')
8
8
 
9
- node = parse('class Synvert::Core::Rewriter::Instance; end')
10
- expect(node.name).to eq parse('Synvert::Core::Rewriter::Instance')
9
+ node = parse('class Synvert::Rewriter::Instance; end')
10
+ expect(node.name).to eq parse('Synvert::Rewriter::Instance')
11
11
  end
12
12
 
13
13
  it 'gets for module node' do
@@ -50,7 +50,8 @@ describe Parser::AST::Node do
50
50
  source = 'RSpec.configure do |config|; end'
51
51
  node = parse(source)
52
52
  instance = double(current_source: source)
53
- expect(node.arguments.map { |argument| argument.source(instance) }).to eq ['config']
53
+ Synvert::Rewriter::Instance.current = instance
54
+ expect(node.arguments.map { |argument| argument.to_source }).to eq ['config']
54
55
  end
55
56
 
56
57
  it 'gets for defined? node' do
@@ -91,28 +92,52 @@ describe Parser::AST::Node do
91
92
  describe "#keys" do
92
93
  it 'gets for hash node' do
93
94
  node = parse("{:foo => :bar, 'foo' => 'bar'}")
94
- expect(node.keys).to eq [Parser::CurrentRuby.parse(':foo'), Parser::CurrentRuby.parse("'foo'")]
95
+ expect(node.keys).to eq [parse(':foo'), parse("'foo'")]
95
96
  end
96
97
  end
97
98
 
98
99
  describe "#values" do
99
100
  it 'gets for hash node' do
100
101
  node = parse("{:foo => :bar, 'foo' => 'bar'}")
101
- expect(node.values).to eq [Parser::CurrentRuby.parse(':bar'), Parser::CurrentRuby.parse("'bar'")]
102
+ expect(node.values).to eq [parse(':bar'), parse("'bar'")]
103
+ end
104
+ end
105
+
106
+ describe "#has_key?" do
107
+ it "gets true if key exists" do
108
+ node = parse("{:foo => :bar}")
109
+ expect(node.has_key?(:foo)).to be_truthy
110
+ end
111
+
112
+ it "gets false if key does not exist" do
113
+ node = parse("{:foo => :bar}")
114
+ expect(node.has_key?('foo')).to be_falsey
115
+ end
116
+ end
117
+
118
+ describe "#hash_value" do
119
+ it "gets value of specified key" do
120
+ node = parse("{:foo => :bar}")
121
+ expect(node.hash_value(:foo)).to eq parse(':bar')
122
+ end
123
+
124
+ it "gets nil if key does not exist" do
125
+ node = parse("{:foo => :bar}")
126
+ expect(node.hash_value(:bar)).to be_nil
102
127
  end
103
128
  end
104
129
 
105
130
  describe "#key" do
106
131
  it 'gets for pair node' do
107
132
  node = parse("{:foo => 'bar'}").children[0]
108
- expect(node.key).to eq Parser::CurrentRuby.parse(':foo')
133
+ expect(node.key).to eq parse(':foo')
109
134
  end
110
135
  end
111
136
 
112
137
  describe "#value" do
113
138
  it 'gets for hash node' do
114
139
  node = parse("{:foo => 'bar'}").children[0]
115
- expect(node.value).to eq Parser::CurrentRuby.parse("'bar'")
140
+ expect(node.value).to eq parse("'bar'")
116
141
  end
117
142
  end
118
143
 
@@ -123,12 +148,30 @@ describe Parser::AST::Node do
123
148
  end
124
149
  end
125
150
 
126
- describe '#source' do
151
+ describe "#to_value" do
152
+ it 'gets for string' do
153
+ node = parse("'str'")
154
+ expect(node.to_value).to eq "str"
155
+ end
156
+
157
+ it 'gets for symbol' do
158
+ node = parse(":str")
159
+ expect(node.to_value).to eq :str
160
+ end
161
+
162
+ it 'gets for array' do
163
+ node = parse("['str', :str]")
164
+ expect(node.to_value).to eq ['str', :str]
165
+ end
166
+ end
167
+
168
+ describe '#to_source' do
127
169
  it 'gets for node' do
128
170
  source = 'params[:user][:email]'
129
171
  instance = double(current_source: source)
172
+ Synvert::Rewriter::Instance.current = instance
130
173
  node = parse(source)
131
- expect(node.source(instance)).to eq 'params[:user][:email]'
174
+ expect(node.to_source).to eq 'params[:user][:email]'
132
175
  end
133
176
  end
134
177
 
@@ -153,57 +196,58 @@ describe Parser::AST::Node do
153
196
 
154
197
  describe '#match?' do
155
198
  let(:instance) {
156
- rewriter = Synvert::Core::Rewriter.new('foobar')
157
- Synvert::Core::Rewriter::Instance.new(rewriter, 'file pattern')
199
+ rewriter = Synvert::Rewriter.new('foobar')
200
+ Synvert::Rewriter::Instance.new(rewriter, 'file pattern')
158
201
  }
202
+ before { Synvert::Rewriter::Instance.current = instance }
159
203
 
160
204
  it 'matches class name' do
161
205
  source = 'class Synvert; end'
162
206
  instance.current_source = source
163
207
  node = parse(source)
164
- expect(node).to be_match(instance, type: 'class', name: 'Synvert')
208
+ expect(node).to be_match(type: 'class', name: 'Synvert')
165
209
  end
166
210
 
167
211
  it 'matches message with regexp' do
168
212
  source = 'User.find_by_login(login)'
169
213
  instance.current_source = source
170
214
  node = parse(source)
171
- expect(node).to be_match(instance, type: 'send', message: /^find_by_/)
215
+ expect(node).to be_match(type: 'send', message: /^find_by_/)
172
216
  end
173
217
 
174
218
  it 'matches arguments with symbol' do
175
219
  source = 'params[:user]'
176
220
  instance.current_source = source
177
221
  node = parse(source)
178
- expect(node).to be_match(instance, type: 'send', receiver: 'params', message: '[]', arguments: [:user])
222
+ expect(node).to be_match(type: 'send', receiver: 'params', message: '[]', arguments: [:user])
179
223
  end
180
224
 
181
225
  it 'matches assign number' do
182
226
  source = 'at_least(0)'
183
227
  instance.current_source = source
184
228
  node = parse(source)
185
- expect(node).to be_match(instance, type: 'send', arguments: [0])
229
+ expect(node).to be_match(type: 'send', arguments: [0])
186
230
  end
187
231
 
188
232
  it 'matches arguments with string' do
189
233
  source = 'params["user"]'
190
234
  instance.current_source = source
191
235
  node = parse(source)
192
- expect(node).to be_match(instance, type: 'send', receiver: 'params', message: '[]', arguments: ['user'])
236
+ expect(node).to be_match(type: 'send', receiver: 'params', message: '[]', arguments: ['user'])
193
237
  end
194
238
 
195
239
  it 'matches arguments any' do
196
240
  source = 'config.middleware.insert_after ActiveRecord::QueryCache, Lifo::Cache, page_cache: false'
197
241
  instance.current_source = source
198
242
  node = parse(source)
199
- expect(node).to be_match(instance, type: 'send', arguments: {any: 'Lifo::Cache'})
243
+ expect(node).to be_match(type: 'send', arguments: {any: 'Lifo::Cache'})
200
244
  end
201
245
 
202
246
  it 'matches not' do
203
247
  source = 'class Synvert; end'
204
248
  instance.current_source = source
205
249
  node = parse(source)
206
- expect(node).not_to be_match(instance, type: 'class', name: {not: 'Synvert'})
250
+ expect(node).not_to be_match(type: 'class', name: {not: 'Synvert'})
207
251
  end
208
252
  end
209
253
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module Synvert::Core
4
- describe Rewriter::IfExistCondition do
4
+ describe Rewriter::Condition do
5
5
  let(:source) {
6
6
  """
7
7
  RSpec.configure do |config|
@@ -12,94 +12,79 @@ module Synvert::Core
12
12
  }
13
13
  let(:node) { Parser::CurrentRuby.parse(source) }
14
14
  let(:instance) { double(:current_node => node, :current_source => source) }
15
+ before { Rewriter::Instance.current = instance }
15
16
 
16
- describe '#process' do
17
- it 'call block if match anything' do
18
- run = false
19
- condition = Rewriter::IfExistCondition.new instance, type: 'send', message: 'include', arguments: ['EmailSpec::Helpers'] do
20
- run = true
17
+ describe Rewriter::IfExistCondition do
18
+ describe '#process' do
19
+ it 'call block if match anything' do
20
+ run = false
21
+ condition = Rewriter::IfExistCondition.new instance, type: 'send', message: 'include', arguments: ['EmailSpec::Helpers'] do
22
+ run = true
23
+ end
24
+ condition.process
25
+ expect(run).to be_truthy
21
26
  end
22
- condition.process
23
- expect(run).to be_true
24
- end
25
27
 
26
- it 'not call block if not match anything' do
27
- run = false
28
- condition = Rewriter::IfExistCondition.new instance, type: 'send', message: 'include', arguments: ['FactoryGirl::SyntaxMethods'] do
29
- run = true
28
+ it 'not call block if not match anything' do
29
+ run = false
30
+ condition = Rewriter::IfExistCondition.new instance, type: 'send', message: 'include', arguments: ['FactoryGirl::SyntaxMethods'] do
31
+ run = true
32
+ end
33
+ condition.process
34
+ expect(run).to be_falsey
30
35
  end
31
- condition.process
32
- expect(run).to be_false
33
36
  end
34
37
  end
35
- end
36
-
37
- describe Rewriter::UnlessExistCondition do
38
- let(:source) {
39
- """
40
- RSpec.configure do |config|
41
- config.include EmailSpec::Helpers
42
- config.include EmailSpec::Methods
43
- end
44
- """
45
- }
46
- let(:node) { Parser::CurrentRuby.parse(source) }
47
- let(:instance) { double(:current_node => node, :current_source => source) }
48
38
 
49
- describe '#process' do
50
- it 'call block if match anything' do
51
- run = false
52
- condition = Rewriter::UnlessExistCondition.new instance, type: 'send', message: 'include', arguments: ['FactoryGirl::Syntax::Methods'] do
53
- run = true
39
+ describe Rewriter::UnlessExistCondition do
40
+ describe '#process' do
41
+ it 'call block if match anything' do
42
+ run = false
43
+ condition = Rewriter::UnlessExistCondition.new instance, type: 'send', message: 'include', arguments: ['FactoryGirl::Syntax::Methods'] do
44
+ run = true
45
+ end
46
+ condition.process
47
+ expect(run).to be_truthy
54
48
  end
55
- condition.process
56
- expect(run).to be_true
57
- end
58
49
 
59
- it 'not call block if not match anything' do
60
- run = false
61
- condition = Rewriter::UnlessExistCondition.new instance, type: 'send', message: 'include', arguments: ['EmailSpec::Helpers'] do
62
- run = true
50
+ it 'not call block if not match anything' do
51
+ run = false
52
+ condition = Rewriter::UnlessExistCondition.new instance, type: 'send', message: 'include', arguments: ['EmailSpec::Helpers'] do
53
+ run = true
54
+ end
55
+ condition.process
56
+ expect(run).to be_falsey
63
57
  end
64
- condition.process
65
- expect(run).to be_false
66
58
  end
67
59
  end
68
- end
69
60
 
70
- describe Rewriter::IfOnlyExistCondition do
71
- describe '#process' do
72
- it 'gets matching nodes' do
73
- source = """
74
- RSpec.configure do |config|
75
- config.include EmailSpec::Helpers
61
+ describe Rewriter::IfOnlyExistCondition do
62
+ describe '#process' do
63
+ it 'gets matching nodes' do
64
+ source = """
65
+ RSpec.configure do |config|
66
+ config.include EmailSpec::Helpers
67
+ end
68
+ """
69
+ node = Parser::CurrentRuby.parse(source)
70
+ instance = double(:current_node => node, :current_source => source)
71
+ Rewriter::Instance.current = instance
72
+ run = false
73
+ condition = Rewriter::IfOnlyExistCondition.new instance, type: 'send', message: 'include', arguments: ['EmailSpec::Helpers'] do
74
+ run = true
76
75
  end
77
- """
78
- node = Parser::CurrentRuby.parse(source)
79
- instance = double(:current_node => node, :current_source => source)
80
- run = false
81
- condition = Rewriter::IfOnlyExistCondition.new instance, type: 'send', message: 'include', arguments: ['EmailSpec::Helpers'] do
82
- run = true
76
+ condition.process
77
+ expect(run).to be_truthy
83
78
  end
84
- condition.process
85
- expect(run).to be_true
86
- end
87
79
 
88
- it 'not call block if does not match' do
89
- source = """
90
- RSpec.configure do |config|
91
- config.include EmailSpec::Helpers
92
- config.include EmailSpec::Methods
80
+ it 'not call block if does not match' do
81
+ run = false
82
+ condition = Rewriter::IfOnlyExistCondition.new instance, type: 'send', message: 'include', arguments: ['EmailSpec::Helpers'] do
83
+ run = true
93
84
  end
94
- """
95
- node = Parser::CurrentRuby.parse(source)
96
- instance = double(:current_node => node, :current_source => source)
97
- run = false
98
- condition = Rewriter::IfOnlyExistCondition.new instance, type: 'send', message: 'include', arguments: ['EmailSpec::Helpers'] do
99
- run = true
85
+ condition.process
86
+ expect(run).to be_falsey
100
87
  end
101
- condition.process
102
- expect(run).to be_false
103
88
  end
104
89
  end
105
90
  end
@@ -166,6 +166,30 @@ end
166
166
  expect(File).to receive(:write).with('config/environments/production.rb', output)
167
167
  instance.process
168
168
  end
169
+
170
+ describe "#check_conflict_actions" do
171
+ it "has no conflict" do
172
+ action1 = double(begin_pos: 10, end_pos: 20)
173
+ action2 = double(begin_pos: 30, end_pos: 40)
174
+ action3 = double(begin_pos: 50, end_pos: 60)
175
+ instance = Rewriter::Instance.new rewriter, 'spec/spec_helper.rb'
176
+ instance.instance_variable_set :@actions, [action1, action2, action3]
177
+ instance.send(:check_conflict_actions)
178
+ expect(instance.instance_variable_get :@conflict_actions).to eq []
179
+ expect(instance.instance_variable_get :@actions).to eq [action1, action2, action3]
180
+ end
181
+
182
+ it "has no conflict" do
183
+ action1 = double(begin_pos: 30, end_pos: 40)
184
+ action2 = double(begin_pos: 50, end_pos: 60)
185
+ action3 = double(begin_pos: 10, end_pos: 20)
186
+ instance = Rewriter::Instance.new rewriter, 'spec/spec_helper.rb'
187
+ instance.instance_variable_set :@actions, [action1, action2, action3]
188
+ instance.send(:check_conflict_actions)
189
+ expect(instance.instance_variable_get :@conflict_actions).to eq [action2, action1]
190
+ expect(instance.instance_variable_get :@actions).to eq [action3]
191
+ end
192
+ end
169
193
  end
170
194
  end
171
195
  end
@@ -18,6 +18,7 @@ end
18
18
  }
19
19
  let(:node) { Parser::CurrentRuby.parse(source) }
20
20
  let(:instance) { double(:current_node => node, :current_node= => node, :current_source => source) }
21
+ before { Rewriter::Instance.current = instance }
21
22
 
22
23
  describe '#process' do
23
24
  it 'not call block if no matching node' do
@@ -26,7 +27,7 @@ end
26
27
  run = true
27
28
  end
28
29
  scope.process
29
- expect(run).to be_false
30
+ expect(run).to be_falsey
30
31
  end
31
32
 
32
33
  it 'call block if there is matching node' do
@@ -35,7 +36,7 @@ end
35
36
  run = true
36
37
  end
37
38
  scope.process
38
- expect(run).to be_true
39
+ expect(run).to be_truthy
39
40
  end
40
41
  end
41
42
  end
@@ -73,7 +73,7 @@ module Synvert::Core
73
73
  add_file 'foo.bar', 'FooBar'
74
74
  end
75
75
  rewriter.process_with_sandbox
76
- expect(File.exist?('./foo.bar')).to be_false
76
+ expect(File.exist?('./foo.bar')).to be_falsey
77
77
  end
78
78
  end
79
79
 
@@ -84,7 +84,7 @@ module Synvert::Core
84
84
  remove_file 'foo.bar'
85
85
  end
86
86
  rewriter.process
87
- expect(File.exist? './foo.bar').to be_false
87
+ expect(File.exist? './foo.bar').to be_falsey
88
88
  end
89
89
 
90
90
  it 'does nothing if file not exist' do
@@ -92,7 +92,7 @@ module Synvert::Core
92
92
  remove_file 'foo.bar'
93
93
  end
94
94
  rewriter.process
95
- expect(File.exist? './foo.bar').to be_false
95
+ expect(File.exist? './foo.bar').to be_falsey
96
96
  end
97
97
 
98
98
  it 'does nothing in sandbox mode' do
@@ -101,7 +101,7 @@ module Synvert::Core
101
101
  add_file 'foo.bar', 'FooBar'
102
102
  end
103
103
  rewriter.process_with_sandbox
104
- expect(File.exist?('./foo.bar')).to be_true
104
+ expect(File.exist?('./foo.bar')).to be_truthy
105
105
  FileUtils.rm './foo.bar'
106
106
  end
107
107
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: synvert-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.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: 2014-05-16 00:00:00.000000000 Z
11
+ date: 2014-07-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser