code-ruby 0.14.0 → 0.14.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: c99f4f0ee7e0d6ac477e266434a927ae59acc6cbf0ae50237397801acbd790a9
4
- data.tar.gz: a6b1fb15a82837f17482a64d0e03f371b88d9f6fc1a7cd0ce10f37473ed71174
3
+ metadata.gz: 7027d0ca2225f4adf54f980dd7d08b7fa07c10c40c7e04b8e67e651a300f77b7
4
+ data.tar.gz: f652f053f3bb7710629deea3ad6cb0684c6117f1475cace386c4ea5005649eca
5
5
  SHA512:
6
- metadata.gz: ac6a450e1cdc87c22ce13b834158c50ff3688152f524560c5fa35a3c86fa11f607859208e1fb1cad5333147bbbb5674e862e92c393e70382c4a42dc5e86bd153
7
- data.tar.gz: 5cdaa736e54913b5de049fb580ddbef07e5240d9f5de7cb7aa183b5c7abd70601839a74378b779bdcb313de1cf2398d651a34f596afbcb4f3299c885e7ba28ff
6
+ metadata.gz: 5ecea3358e470e50cb5571c0c5094837a1eb7fd68043e803d18dc3b691686e246cc0cb93a1a89fd4fbe1448b0dc45841883e4938b8510f9df6d45d7091d57447
7
+ data.tar.gz: 3c0d475b0420dd3a937dd0f2dcff648bc2d1924b0639415c3096e79429dda1e787579a684aa3ce8b236739b590f72ebfb2049c901224288fadfca4ce25c5c183
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.1)
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
@@ -7,9 +7,10 @@ class Code
7
7
 
8
8
  def initialize(*args, **_kargs, &_block)
9
9
  ::Time.zone ||= DEFAULT_ZONE
10
- raw = args.first.presence || ::Time.zone.now
10
+ raw = args.first
11
11
  raw = raw.raw if raw.is_an?(Object)
12
- @raw = ::Time.zone.parse(raw.to_s)
12
+ raw = raw.presence || ::Time.zone.now
13
+ @raw = ::Time.zone.parse(raw.to_s).presence || ::Time.zone.now
13
14
  end
14
15
 
15
16
  def self.call(**args)
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.2")
data/spec/code_spec.rb CHANGED
@@ -62,6 +62,7 @@ RSpec.describe Code do
62
62
  Parameter.new
63
63
  IdentifierList.new
64
64
  IdentifierList.new([])
65
+ Time.new(nothing).before?
65
66
  ].each { |input| it(input) { Code.evaluate(input) } }
66
67
 
67
68
  [
@@ -270,6 +271,8 @@ RSpec.describe Code do
270
271
  %w[1.to_json "1"],
271
272
  %w[1.0.to_json '"1.0"'],
272
273
  %w[1.1.to_json '"1.1"'],
274
+ ["a = {} a.merge!(a: 1) a", "{a: 1}"],
275
+ ["a = {} a.merge(a: 1) a", "{}"],
273
276
  ["", ""]
274
277
  ].each do |input, expected|
275
278
  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.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dorian Marié