node_mutation 1.6.0 → 1.6.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 42db0eff54a5fab0ba9fc766d59605e7afe0c3bcf1627e646f0ffeff71a540bf
4
- data.tar.gz: 2db50e0b04dc537e51afa21930bdee0b968aecd0d57573da6497b2da740193c7
3
+ metadata.gz: 7b2edcdadf3b7283b4446c8b0da41cb72daa4da3c180042b9e896973a8132cba
4
+ data.tar.gz: 3fc7cfe62f0e7ea6699b1d3bb9a918f14d1d451bd045b5d82cf09237db3a5c5e
5
5
  SHA512:
6
- metadata.gz: eef2c42ddf5d778e1b3cac59f464ba0816377424a132de4d2d9e41a65a49c5ba2743c53ca4c7278d542a83e3de804d6596408d9b2c6d3281a848b9f911fe764f
7
- data.tar.gz: f188c65ace72e059b5ee91d878389ebb95c34f9fe0d64a819dee355f7b4e2e855a3907ddf92bfd79ca459d618709dfdb2d7aaec73fae8d38a75834ca3907a512
6
+ metadata.gz: 7d04f31b6f9983e66555cfa640c52af13546cb066468b657db99f6dffcff5d1513a26a6f3bcb58c433b6a700e8db544e638807e9e3ccd30578a979fec0cc58e4
7
+ data.tar.gz: a35fb59ca28655346782ea46410b34784c965f06b00f66ba6b70a5647695a20e5cfcdf4010a32cf7f4fbf9c44ca3d1e4a37db1860a46f16db1ee8149994bb05c
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # NodeMutation
2
2
 
3
+ ## 1.6.2 (2022-10-25)
4
+
5
+ * Mark same position as conflict action
6
+
7
+ ## 1.6.1 (2022-10-24)
8
+
9
+ * Better error message when node does not respond to a key
10
+
3
11
  ## 1.6.0 (2022-10-19)
4
12
 
5
13
  * Raise `NodeMutation::MethodNotSupported` if not respond to child node name
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- node_mutation (1.6.0)
4
+ node_mutation (1.6.2)
5
5
  activesupport (< 7.0.0)
6
6
  erubis
7
7
 
@@ -13,7 +13,8 @@ class NodeMutation::ParserAdapter < NodeMutation::Adapter
13
13
  def rewritten_source(node, code)
14
14
  code.gsub(/{{(.+?)}}/m) do
15
15
  old_code = Regexp.last_match(1)
16
- if node.respond_to?(old_code.split('.').first)
16
+ first_key = old_code.split('.').first
17
+ if node.respond_to?(first_key)
17
18
  evaluated = child_node_by_name(node, old_code)
18
19
  case evaluated
19
20
  when Parser::AST::Node
@@ -44,7 +45,7 @@ class NodeMutation::ParserAdapter < NodeMutation::Adapter
44
45
  raise "can not parse \"#{code}\""
45
46
  end
46
47
  else
47
- raise "can not parse \"#{code}\""
48
+ raise NodeMutation::MethodNotSupported, "#{first_key} is not supported for #{get_source(node)}"
48
49
  end
49
50
  end
50
51
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class NodeMutation
4
- VERSION = "1.6.0"
4
+ VERSION = "1.6.2"
5
5
  end
data/lib/node_mutation.rb CHANGED
@@ -262,13 +262,19 @@ class NodeMutation
262
262
  conflict_actions = []
263
263
  return [] if i < 0
264
264
 
265
- start = @actions[i].start
265
+ begin_pos = @actions[i].start
266
+ end_pos = @actions[i].end
266
267
  while j > -1
267
- if start < @actions[j].end
268
+ # if we have two insert actions at same position.
269
+ same_position = begin_pos == @actions[j].start && begin_pos == end_pos && @actions[j].start == @actions[j].end
270
+ # if we have two actions with overlapped range.
271
+ overlapped_position = begin_pos < @actions[j].end
272
+ if same_position || overlapped_position
268
273
  conflict_actions << @actions.delete_at(j)
269
274
  else
270
275
  i = j
271
- start = @actions[i].start
276
+ begin_pos = @actions[i].start
277
+ end_pos = @actions[i].end
272
278
  end
273
279
  j -= 1
274
280
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: node_mutation
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 1.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Huang
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-10-19 00:00:00.000000000 Z
11
+ date: 2022-10-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport