code-ruby 1.5.5 → 1.5.6

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: c80b500f342e03331263aac1025cbd795358f9ff215892cb16db14ee3037f68c
4
- data.tar.gz: f72a7aea67c9dfca148d1323b73f98c6fabc89cabc86e0a45ee3310a459dbdf3
3
+ metadata.gz: 6a866affca8019509c1e7836990f7a3488990e5bf64f8c8e3b6a976ed7e1bab6
4
+ data.tar.gz: 23ad1030abf7de9981adcf65267c195b85d1026995aa74fa566427c4c74660c5
5
5
  SHA512:
6
- metadata.gz: faf87a45b40513fe37d33a66964a6caa2143f9b972277de2d76d6aa2197516ce23632c504dc7ab42b30683234bf4aaefc57211f981c6b337db7dbdeb2de52efe
7
- data.tar.gz: e36261471636c141bc6932b488c066bec8778c89fbd9c616f9c5d3d0b6c5de014c0bdd14d1ed2ab0e6ccbd4650d1b9141026173a05c2a24172e144e6f1670981
6
+ metadata.gz: 9b9b495235c6b7e32d00ae42b372c5b42e6a12123d8adda974044d7eceee36a5d802a68c72c52b9926b295b00ea803bb696697bf6377dcad370f539d23f3cc4c
7
+ data.tar.gz: be2c356e043c80850ac786da56ec5a380fc624d75f953eedc18817728e70d31f75d4c3e2be5782808da8e50c4c0d445ae6ac9ee150166262d7809f2ea72d1423
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- code-ruby (1.5.5)
4
+ code-ruby (1.5.6)
5
5
  activesupport
6
6
  base64
7
7
  bigdecimal
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.5.5
1
+ 1.5.6
@@ -29,6 +29,10 @@ class Code
29
29
 
30
30
  last
31
31
  end
32
+
33
+ def to_code
34
+ @statements.blank? ? Object::Nothing.new : Object::Code.new(self)
35
+ end
32
36
  end
33
37
  end
34
38
  end
@@ -3,11 +3,16 @@
3
3
  class Code
4
4
  class Node
5
5
  class FunctionParameter < Node
6
+ attr_reader :default
7
+
6
8
  def initialize(parsed)
7
9
  return if parsed.blank?
8
10
 
9
11
  @name = parsed.delete(:name).presence
10
12
  @keyword = parsed.delete(:keyword).present?
13
+ @regular_splat = parsed.delete(:regular_splat).present?
14
+ @keyword_splat = parsed.delete(:keyword_splat).present?
15
+ @default = Code.new(parsed.delete(:default)) if parsed.key?(:default)
11
16
  end
12
17
 
13
18
  def name
@@ -23,15 +28,11 @@ class Code
23
28
  end
24
29
 
25
30
  def regular_splat?
26
- false
31
+ !!@regular_splat
27
32
  end
28
33
 
29
34
  def keyword_splat?
30
- false
31
- end
32
-
33
- def default
34
- nil
35
+ !!@keyword_splat
35
36
  end
36
37
 
37
38
  def to_h
@@ -41,7 +42,7 @@ class Code
41
42
  keyword?: keyword?,
42
43
  regular_splat?: regular_splat?,
43
44
  keyword_splat?: keyword_splat?,
44
- default: Object::Code.new(default)
45
+ default: default
45
46
  }
46
47
  end
47
48
 
@@ -5,7 +5,7 @@ class Code
5
5
  class Code < Object
6
6
  def initialize(*args, **_kargs, &_block)
7
7
  self.raw =
8
- if args.first.is_a?(Node)
8
+ if args.first.is_a?(Node::Code)
9
9
  args.first
10
10
  else
11
11
  Node::Code.new(::Code.parse(args.first.to_s))
@@ -75,9 +75,6 @@ class Code
75
75
  when "ceil"
76
76
  sig(args) { Integer.maybe }
77
77
  code_ceil(code_value)
78
- when "clone"
79
- sig(args)
80
- code_clone
81
78
  when "eight?"
82
79
  sig(args)
83
80
  code_eight?
@@ -114,15 +111,6 @@ class Code
114
111
  when "three?"
115
112
  sig(args)
116
113
  code_three?
117
- when "to_decimal"
118
- sig(args)
119
- code_to_decimal
120
- when "to_integer"
121
- sig(args)
122
- code_to_integer
123
- when "to_string"
124
- sig(args)
125
- code_to_string
126
114
  when "truncate"
127
115
  sig(args) { Integer.maybe }
128
116
  code_truncate(code_value)
@@ -135,6 +123,12 @@ class Code
135
123
  when "|", "bitwise_or"
136
124
  sig(args) { Integer | Decimal }
137
125
  code_bitwise_or(code_value)
126
+ when "many?"
127
+ sig(args)
128
+ code_many?
129
+ when "any?"
130
+ sig(args)
131
+ code_any?
138
132
  else
139
133
  super
140
134
  end
@@ -169,10 +163,6 @@ class Code
169
163
  Decimal.new(raw.ceil(code_n.raw))
170
164
  end
171
165
 
172
- def code_clone
173
- Decimal.new(raw)
174
- end
175
-
176
166
  def code_compare(other)
177
167
  code_other = other.to_code
178
168
 
@@ -309,14 +299,6 @@ class Code
309
299
  Boolean.new(raw == 3)
310
300
  end
311
301
 
312
- def code_to_decimal
313
- Decimal.new(raw)
314
- end
315
-
316
- def code_to_integer
317
- Integer.new(raw.to_i)
318
- end
319
-
320
302
  def code_to_string
321
303
  String.new(raw.to_s("F"))
322
304
  end
@@ -339,6 +321,14 @@ class Code
339
321
  def code_zero?
340
322
  Boolean.new(raw.zero?)
341
323
  end
324
+
325
+ def code_many?
326
+ Boolean.new(raw > 1)
327
+ end
328
+
329
+ def code_any?
330
+ Boolean.new(raw > 0)
331
+ end
342
332
  end
343
333
  end
344
334
  end
@@ -14,6 +14,7 @@ class Code
14
14
  delegate :code_three?, to: :code_size
15
15
  delegate :code_two?, to: :code_size
16
16
  delegate :code_zero?, to: :code_size
17
+ delegate :code_many?, to: :code_size
17
18
 
18
19
  def initialize(*args, **kargs, &_block)
19
20
  self.raw =
@@ -59,7 +60,7 @@ class Code
59
60
  sig(args) { Object }
60
61
  code_get(code_value)
61
62
  when "any?"
62
- sig(args) { Function | Class }
63
+ sig(args) { (Function | Class).maybe }
63
64
  code_any?(code_value, **globals)
64
65
  when "clear"
65
66
  sig(args)
@@ -163,9 +164,6 @@ class Code
163
164
  when "three?"
164
165
  sig(args)
165
166
  code_three?
166
- when "to_list"
167
- sig(args)
168
- code_to_list
169
167
  when "transform_values"
170
168
  sig(args) { Function }
171
169
  code_transform_values(code_value, **globals)
@@ -181,6 +179,9 @@ class Code
181
179
  when "zero?"
182
180
  sig(args)
183
181
  code_zero?
182
+ when "many?"
183
+ sig(args)
184
+ code_many?
184
185
  when ->(code_operator) { code_has_key?(code_operator).truthy? }
185
186
  result = code_fetch(code_operator)
186
187
 
@@ -198,7 +199,9 @@ class Code
198
199
  def code_any?(argument, **globals)
199
200
  code_argument = argument.to_code
200
201
 
201
- if code_argument.is_a?(Class)
202
+ if code_argument.nothing?
203
+ Boolean.new(raw.any?)
204
+ elsif code_argument.is_a?(Class)
202
205
  Boolean.new(raw.any? { |_, value| value.is_a?(code_argument.raw) })
203
206
  else
204
207
  index = 0
@@ -647,10 +650,6 @@ class Code
647
650
  Context.new(raw)
648
651
  end
649
652
 
650
- def code_to_list
651
- List.new(raw.to_a.map { |key_value| List.new(key_value) })
652
- end
653
-
654
653
  def code_to_query(namespace = nil)
655
654
  code_namespace = namespace.to_code
656
655
 
@@ -661,14 +660,17 @@ class Code
661
660
  code_function = function.to_code
662
661
 
663
662
  Dictionary.new(
664
- raw.transform_values.with_index do |value, index|
665
- code_function.call(
666
- arguments: List.new([value.to_code, index.to_code, self]),
667
- **globals
668
- )
663
+ raw.map.with_index do |(key, value), index|
664
+ [
665
+ key.to_code,
666
+ code_function.call(
667
+ arguments: List.new([key.to_code, value.to_code, index.to_code, self]),
668
+ **globals
669
+ )
670
+ ]
669
671
  rescue Error::Next => e
670
- e.code_value
671
- end
672
+ [key.to_code, e.code_value]
673
+ end.to_h
672
674
  )
673
675
  end
674
676
 
@@ -38,7 +38,13 @@ class Code
38
38
 
39
39
  code_parameters.raw.each.with_index do |code_parameter, index|
40
40
  code_argument =
41
- if code_parameter.keyword?
41
+ if code_parameter.regular_splat?
42
+ code_arguments
43
+ elsif code_parameter.keyword_splat?
44
+ code_arguments
45
+ .raw
46
+ .detect { |code_argument| code_argument.is_a?(Dictionary) } || Dictionary.new
47
+ elsif code_parameter.keyword?
42
48
  code_arguments
43
49
  .raw
44
50
  .select { |code_argument| code_argument.is_a?(Dictionary) }
@@ -64,15 +70,28 @@ class Code
64
70
  code_parameters
65
71
  .raw
66
72
  .inject([]) do |signature, code_parameter|
67
- if code_parameter.keyword?
73
+ if code_parameter.keyword_splat?
74
+ signature + [Dictionary.maybe]
75
+ elsif code_parameter.regular_splat?
76
+ signature + [Object.repeat]
77
+ elsif code_parameter.keyword? && code_parameter.required?
68
78
  if signature.last.is_a?(::Hash)
69
79
  signature.last[code_parameter.code_name] = Object
70
80
  signature
71
81
  else
72
82
  signature + [{ code_parameter.code_name => Object }]
73
83
  end
74
- else
84
+ elsif code_parameter.keyword?
85
+ if signature.last.is_a?(::Hash)
86
+ signature.last[code_parameter.code_name] = Object.maybe
87
+ signature
88
+ else
89
+ signature + [{ code_parameter.code_name => Object.maybe }]
90
+ end
91
+ elsif code_parameter.required?
75
92
  signature + [Object]
93
+ else
94
+ signature + [Object.maybe]
76
95
  end
77
96
  end + [Object.repeat]
78
97
  end
@@ -154,6 +154,12 @@ class Code
154
154
  when "|", "bitwise_or"
155
155
  sig(args) { Integer | Decimal }
156
156
  code_bitwise_or(code_value)
157
+ when "many?"
158
+ sig(args)
159
+ code_many?
160
+ when "any?"
161
+ sig(args)
162
+ code_any?
157
163
  else
158
164
  super
159
165
  end
@@ -411,6 +417,14 @@ class Code
411
417
  Boolean.new(raw.zero?)
412
418
  end
413
419
 
420
+ def code_many?
421
+ Boolean.new(raw > 1)
422
+ end
423
+
424
+ def code_any?
425
+ Boolean.new(raw > 0)
426
+ end
427
+
414
428
  def code_hours
415
429
  Duration.new(raw.hours)
416
430
  end
@@ -3,6 +3,19 @@
3
3
  class Code
4
4
  class Object
5
5
  class List < Object
6
+ delegate :code_eight?, to: :code_size
7
+ delegate :code_five?, to: :code_size
8
+ delegate :code_four?, to: :code_size
9
+ delegate :code_nine?, to: :code_size
10
+ delegate :code_one?, to: :code_size
11
+ delegate :code_seven?, to: :code_size
12
+ delegate :code_six?, to: :code_size
13
+ delegate :code_ten?, to: :code_size
14
+ delegate :code_three?, to: :code_size
15
+ delegate :code_two?, to: :code_size
16
+ delegate :code_zero?, to: :code_size
17
+ delegate :code_many?, to: :code_size
18
+
6
19
  def initialize(*args, **_kargs, &_block)
7
20
  self.raw =
8
21
  if args.first.is_a?(List)
@@ -114,6 +127,42 @@ class Code
114
127
  when "uniq"
115
128
  sig(args)
116
129
  code_uniq
130
+ when "zero?"
131
+ sig(args)
132
+ code_zero?
133
+ when "one?"
134
+ sig(args)
135
+ code_one?
136
+ when "two?"
137
+ sig(args)
138
+ code_two?
139
+ when "three?"
140
+ sig(args)
141
+ code_three?
142
+ when "four?"
143
+ sig(args)
144
+ code_four?
145
+ when "five?"
146
+ sig(args)
147
+ code_five?
148
+ when "six?"
149
+ sig(args)
150
+ code_six?
151
+ when "seven?"
152
+ sig(args)
153
+ code_seven?
154
+ when "eight?"
155
+ sig(args)
156
+ code_eight?
157
+ when "nine?"
158
+ sig(args)
159
+ code_nine?
160
+ when "ten?"
161
+ sig(args)
162
+ code_ten?
163
+ when "many?"
164
+ sig(args)
165
+ code_many?
117
166
  else
118
167
  super
119
168
  end
@@ -27,14 +27,30 @@ class Code
27
27
  Boolean.new(raw.code_get(:keyword_splat?))
28
28
  end
29
29
 
30
+ def code_required?
31
+ code_default.code_falsy?
32
+ end
33
+
34
+ def code_optional?
35
+ code_default.code_truthy?
36
+ end
37
+
30
38
  def code_default
31
- Code.new(raw.code_get(:default))
39
+ raw.code_get(:default).to_code
32
40
  end
33
41
 
34
42
  def code_evaluate(...)
35
43
  code_default.code_evaluate(...)
36
44
  end
37
45
 
46
+ def required?
47
+ code_required?.truthy?
48
+ end
49
+
50
+ def optional?
51
+ code_optional?.truthy?
52
+ end
53
+
38
54
  def regular?
39
55
  code_regular?.truthy?
40
56
  end
data/spec/code_spec.rb CHANGED
@@ -5,6 +5,18 @@ require "spec_helper"
5
5
  RSpec.describe Code do
6
6
  (
7
7
  %w[
8
+ {}.zero?
9
+ {}.any?
10
+ {}.many?
11
+ 1.zero?
12
+ 1.any?
13
+ 1.many?
14
+ 1.0.zero?
15
+ 1.0.any?
16
+ 1.0.many?
17
+ [].zero?
18
+ [].any?
19
+ [].many?
8
20
  Base64
9
21
  Base64.new
10
22
  Smtp
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: code-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.5
4
+ version: 1.5.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dorian Marié
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-05-22 00:00:00.000000000 Z
10
+ date: 2025-06-07 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: activesupport