code-ruby 0.14.0 → 0.14.1

Sign up to get free protection for your applications and to get access to all the features.
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é