code-ruby 0.14.0 → 0.14.1

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: c99f4f0ee7e0d6ac477e266434a927ae59acc6cbf0ae50237397801acbd790a9
4
- data.tar.gz: a6b1fb15a82837f17482a64d0e03f371b88d9f6fc1a7cd0ce10f37473ed71174
3
+ metadata.gz: 4457f2b10410f6514df4f0eebb52d52931724e2b448bd8e179650942f78aba9f
4
+ data.tar.gz: c9a3214b391d5a39aa185dd48ad6bde35bbd537616b93d626ff6686fc341ed9a
5
5
  SHA512:
6
- metadata.gz: ac6a450e1cdc87c22ce13b834158c50ff3688152f524560c5fa35a3c86fa11f607859208e1fb1cad5333147bbbb5674e862e92c393e70382c4a42dc5e86bd153
7
- data.tar.gz: 5cdaa736e54913b5de049fb580ddbef07e5240d9f5de7cb7aa183b5c7abd70601839a74378b779bdcb313de1cf2398d651a34f596afbcb4f3299c885e7ba28ff
6
+ metadata.gz: 6ba9119d592685a669c174ead2554725ec5586f25bcf41b3c9c418fb95965327cf0e84f1797e3dd83abc7c4cfe4bb9be4ed2f2fbd7fb9e98de94571b83c53647
7
+ data.tar.gz: e1c928ad8bbeab9b0101af715cea94ebefa8540465ae4482e7a8afa8d5e88436a800b8097e51a44b624bb8171c0940397f1eb4b871269d130eb2453e74fa3da3
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- code-ruby (0.13.1)
4
+ code-ruby (0.14.0)
5
5
  activesupport (~> 7)
6
6
  bigdecimal (~> 3)
7
7
  json (~> 2)
@@ -107,6 +107,9 @@ class Code
107
107
  when "merge"
108
108
  sig(args) { [Dictionary.repeat, Function.maybe] }
109
109
  code_merge(*arguments.raw, **globals)
110
+ when "merge!"
111
+ sig(args) { [Dictionary.repeat, Function.maybe] }
112
+ code_merge!(*arguments.raw, **globals)
110
113
  when "nine?"
111
114
  sig(args)
112
115
  code_nine?
@@ -470,6 +473,40 @@ class Code
470
473
  )
471
474
  end
472
475
 
476
+ def code_merge!(*arguments, **globals)
477
+ conflict =
478
+ (
479
+ if arguments.last.is_a?(Function) && arguments.size > 1
480
+ arguments.last
481
+ end
482
+ )
483
+
484
+ arguments = arguments[..-2] if conflict
485
+
486
+ index = 0
487
+
488
+ raw.merge!(*arguments.map(&:raw)) do |key, old_value, new_value|
489
+ if conflict
490
+ conflict
491
+ .call(
492
+ arguments:
493
+ List.new(
494
+ [key, old_value, new_value, Integer.new(index), self]
495
+ ),
496
+ **globals
497
+ )
498
+ .tap { index += 1 }
499
+ else
500
+ new_value.tap { index += 1 }
501
+ end
502
+ rescue Error::Next => e
503
+ index += 1
504
+ e.value || Nothing.new
505
+ end
506
+
507
+ self
508
+ end
509
+
473
510
  def code_nine?
474
511
  code_size.code_nine?
475
512
  end
data/lib/code/version.rb CHANGED
@@ -2,4 +2,4 @@
2
2
 
3
3
  require_relative "../code"
4
4
 
5
- Code::Version = Gem::Version.new("0.14.0")
5
+ Code::Version = Gem::Version.new("0.14.1")
data/spec/code_spec.rb CHANGED
@@ -270,6 +270,8 @@ RSpec.describe Code do
270
270
  %w[1.to_json "1"],
271
271
  %w[1.0.to_json '"1.0"'],
272
272
  %w[1.1.to_json '"1.1"'],
273
+ ["a = {} a.merge!(a: 1) a", "{a: 1}"],
274
+ ["a = {} a.merge(a: 1) a", "{}"],
273
275
  ["", ""]
274
276
  ].each do |input, expected|
275
277
  it "#{input} == #{expected}" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: code-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.0
4
+ version: 0.14.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dorian Marié