code-ruby 1.5.4 → 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 +4 -4
- data/Gemfile.lock +1 -1
- data/VERSION +1 -1
- data/lib/code/node/code.rb +4 -0
- data/lib/code/node/function_parameter.rb +8 -7
- data/lib/code/object/code.rb +1 -1
- data/lib/code/object/decimal.rb +14 -24
- data/lib/code/object/dictionary.rb +18 -16
- data/lib/code/object/function.rb +22 -3
- data/lib/code/object/integer.rb +14 -0
- data/lib/code/object/list.rb +49 -0
- data/lib/code/object/parameter.rb +17 -1
- data/lib/code/object/string.rb +10 -0
- data/spec/code_spec.rb +12 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6a866affca8019509c1e7836990f7a3488990e5bf64f8c8e3b6a976ed7e1bab6
|
4
|
+
data.tar.gz: 23ad1030abf7de9981adcf65267c195b85d1026995aa74fa566427c4c74660c5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9b9b495235c6b7e32d00ae42b372c5b42e6a12123d8adda974044d7eceee36a5d802a68c72c52b9926b295b00ea803bb696697bf6377dcad370f539d23f3cc4c
|
7
|
+
data.tar.gz: be2c356e043c80850ac786da56ec5a380fc624d75f953eedc18817728e70d31f75d4c3e2be5782808da8e50c4c0d445ae6ac9ee150166262d7809f2ea72d1423
|
data/Gemfile.lock
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.5.
|
1
|
+
1.5.6
|
data/lib/code/node/code.rb
CHANGED
@@ -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
|
-
|
31
|
+
!!@regular_splat
|
27
32
|
end
|
28
33
|
|
29
34
|
def keyword_splat?
|
30
|
-
|
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:
|
45
|
+
default: default
|
45
46
|
}
|
46
47
|
end
|
47
48
|
|
data/lib/code/object/code.rb
CHANGED
data/lib/code/object/decimal.rb
CHANGED
@@ -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.
|
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.
|
665
|
-
|
666
|
-
|
667
|
-
|
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
|
|
data/lib/code/object/function.rb
CHANGED
@@ -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.
|
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.
|
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
|
-
|
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
|
data/lib/code/object/integer.rb
CHANGED
@@ -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
|
data/lib/code/object/list.rb
CHANGED
@@ -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
|
-
|
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/lib/code/object/string.rb
CHANGED
@@ -49,6 +49,9 @@ class Code
|
|
49
49
|
when "parameterize"
|
50
50
|
sig(args)
|
51
51
|
code_parameterize
|
52
|
+
when "substitute"
|
53
|
+
sig(args) { [String, String.maybe] }
|
54
|
+
code_substitute(*code_arguments.raw)
|
52
55
|
else
|
53
56
|
super
|
54
57
|
end
|
@@ -89,6 +92,13 @@ class Code
|
|
89
92
|
String.new(raw.parameterize)
|
90
93
|
end
|
91
94
|
|
95
|
+
def code_substitute(from = nil, to = nil)
|
96
|
+
code_from = from.to_code
|
97
|
+
code_to = to.to_code
|
98
|
+
|
99
|
+
String.new(raw.gsub(code_from.to_s, code_to.to_s))
|
100
|
+
end
|
101
|
+
|
92
102
|
def code_first(n = nil)
|
93
103
|
code_n = n.to_code
|
94
104
|
code_n = Integer.new(1) if code_n.nothing?
|
data/spec/code_spec.rb
CHANGED
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.
|
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-
|
10
|
+
date: 2025-06-07 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: activesupport
|