code-ruby 0.14.0 → 0.14.2

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: 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é