code-ruby 0.15.12 → 0.15.14
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +13 -11
- data/bin/code +4 -1
- data/lib/code/object/list.rb +80 -14
- data/lib/code/object/nothing.rb +4 -0
- data/lib/code/object.rb +8 -0
- data/lib/code/version.rb +1 -1
- data/spec/code_spec.rb +25 -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: 6ae4360301b3c6c28a2ac0a340f07a699f030bc33ca160a0c4b7848535b0f162
|
4
|
+
data.tar.gz: be716086938c17a3afc952afc81a2fd6ce60cc49f22def8ae1b2b21115294824
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 01ed7ac37f81e5d76cd9d1e4d27eb2a9581ca03ae78642e1f8e57c920ff86141826998a466013a276f9eb1d5d0953c70e2bde712408c780b903ff68465e6d474
|
7
|
+
data.tar.gz: 52ccac205aa5a31a9235a0219a1218545a571bfcebe892e7cbbbeb1ba2eca19d4109648cec1d11a7aa6204179d7ef822674fb4624d99a716edc7c9c3c1b964c4
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
code-ruby (0.15.
|
4
|
+
code-ruby (0.15.14)
|
5
5
|
activesupport
|
6
6
|
bigdecimal
|
7
7
|
did-you-mean
|
@@ -12,23 +12,24 @@ PATH
|
|
12
12
|
GEM
|
13
13
|
remote: https://rubygems.org/
|
14
14
|
specs:
|
15
|
-
activesupport (7.
|
15
|
+
activesupport (7.2.0)
|
16
16
|
base64
|
17
17
|
bigdecimal
|
18
|
-
concurrent-ruby (~> 1.0, >= 1.
|
18
|
+
concurrent-ruby (~> 1.0, >= 1.3.1)
|
19
19
|
connection_pool (>= 2.2.5)
|
20
20
|
drb
|
21
21
|
i18n (>= 1.6, < 2)
|
22
|
+
logger (>= 1.4.2)
|
22
23
|
minitest (>= 5.1)
|
23
|
-
|
24
|
-
tzinfo (~> 2.0)
|
24
|
+
securerandom (>= 0.3)
|
25
|
+
tzinfo (~> 2.0, >= 2.0.5)
|
25
26
|
ast (2.4.2)
|
26
27
|
base64 (0.2.0)
|
27
28
|
bigdecimal (3.1.8)
|
28
29
|
bundler-audit (0.9.1)
|
29
30
|
bundler (>= 1.2.0, < 3)
|
30
31
|
thor (~> 1.0)
|
31
|
-
concurrent-ruby (1.3.
|
32
|
+
concurrent-ruby (1.3.4)
|
32
33
|
connection_pool (2.4.1)
|
33
34
|
did-you-mean (0.1.1)
|
34
35
|
levenshtein (>= 0.2.0)
|
@@ -41,10 +42,10 @@ GEM
|
|
41
42
|
zeitwerk
|
42
43
|
language_server-protocol (3.17.0.3)
|
43
44
|
levenshtein (0.2.2)
|
44
|
-
|
45
|
-
|
46
|
-
parallel (1.
|
47
|
-
parser (3.3.4.
|
45
|
+
logger (1.6.0)
|
46
|
+
minitest (5.25.0)
|
47
|
+
parallel (1.26.2)
|
48
|
+
parser (3.3.4.2)
|
48
49
|
ast (~> 2.4.1)
|
49
50
|
racc
|
50
51
|
racc (1.8.1)
|
@@ -52,7 +53,7 @@ GEM
|
|
52
53
|
rainbow (3.1.1)
|
53
54
|
rake (13.2.1)
|
54
55
|
regexp_parser (2.9.2)
|
55
|
-
rexml (3.3.
|
56
|
+
rexml (3.3.5)
|
56
57
|
strscan
|
57
58
|
rspec (3.13.0)
|
58
59
|
rspec-core (~> 3.13.0)
|
@@ -98,6 +99,7 @@ GEM
|
|
98
99
|
rubocop-rails
|
99
100
|
ruby-prof (1.7.0)
|
100
101
|
ruby-progressbar (1.13.0)
|
102
|
+
securerandom (0.3.1)
|
101
103
|
strscan (3.1.0)
|
102
104
|
thor (1.3.1)
|
103
105
|
tzinfo (2.0.6)
|
data/bin/code
CHANGED
@@ -64,7 +64,10 @@ argv =
|
|
64
64
|
end
|
65
65
|
.parse!
|
66
66
|
|
67
|
-
|
67
|
+
if options[:input].empty?
|
68
|
+
options[:input] = argv.join(" ")
|
69
|
+
options[:input] = File.read(options[:input]) if File.exist?(options[:input])
|
70
|
+
end
|
68
71
|
|
69
72
|
abort <<~HELP if options[:input].empty?
|
70
73
|
Usage: code INPUT
|
data/lib/code/object/list.rb
CHANGED
@@ -26,7 +26,7 @@ class Code
|
|
26
26
|
sig(args) { Object }
|
27
27
|
code_append(value)
|
28
28
|
when "any?"
|
29
|
-
sig(args) { Function }
|
29
|
+
sig(args) { Function.maybe }
|
30
30
|
code_any?(value, **globals)
|
31
31
|
when "detect"
|
32
32
|
sig(args) { Function }
|
@@ -49,6 +49,9 @@ class Code
|
|
49
49
|
when "map"
|
50
50
|
sig(args) { Function }
|
51
51
|
code_map(value, **globals)
|
52
|
+
when "map!"
|
53
|
+
sig(args) { Function }
|
54
|
+
code_map!(value, **globals)
|
52
55
|
when "max"
|
53
56
|
sig(args)
|
54
57
|
code_max
|
@@ -56,7 +59,7 @@ class Code
|
|
56
59
|
sig(args) { Function }
|
57
60
|
code_max_by(value, **globals)
|
58
61
|
when "none?"
|
59
|
-
sig(args) { Function }
|
62
|
+
sig(args) { Function.maybe }
|
60
63
|
code_none?(value, **globals)
|
61
64
|
when "reduce"
|
62
65
|
sig(args) { Function }
|
@@ -70,6 +73,12 @@ class Code
|
|
70
73
|
when "select!"
|
71
74
|
sig(args) { Function }
|
72
75
|
code_select!(value, **globals)
|
76
|
+
when "reject"
|
77
|
+
sig(args) { Function }
|
78
|
+
code_reject(value, **globals)
|
79
|
+
when "reject!"
|
80
|
+
sig(args) { Function }
|
81
|
+
code_reject!(value, **globals)
|
73
82
|
when "size"
|
74
83
|
sig(args)
|
75
84
|
code_size
|
@@ -84,15 +93,24 @@ class Code
|
|
84
93
|
end
|
85
94
|
end
|
86
95
|
|
87
|
-
def code_any?(argument, **globals)
|
96
|
+
def code_any?(argument = nil, **globals)
|
97
|
+
argument ||= Nothing.new
|
98
|
+
index = 0
|
99
|
+
|
88
100
|
Boolean.new(
|
89
|
-
raw.any
|
90
|
-
argument.
|
91
|
-
|
92
|
-
|
93
|
-
|
101
|
+
raw.any? do |element|
|
102
|
+
if argument.nothing?
|
103
|
+
element.truthy?
|
104
|
+
else
|
105
|
+
argument.call(
|
106
|
+
arguments: List.new([element, Integer.new(index), self]),
|
107
|
+
**globals
|
108
|
+
).truthy?
|
109
|
+
end
|
94
110
|
rescue Error::Next => e
|
95
111
|
e.value || Nothing.new
|
112
|
+
ensure
|
113
|
+
index += 1
|
96
114
|
end
|
97
115
|
)
|
98
116
|
end
|
@@ -169,6 +187,19 @@ class Code
|
|
169
187
|
)
|
170
188
|
end
|
171
189
|
|
190
|
+
def code_map!(argument, **globals)
|
191
|
+
raw.map!.with_index do |element, index|
|
192
|
+
argument.call(
|
193
|
+
arguments: List.new([element, Integer.new(index), self]),
|
194
|
+
**globals
|
195
|
+
)
|
196
|
+
rescue Error::Next => e
|
197
|
+
e.value || Nothing.new
|
198
|
+
end
|
199
|
+
|
200
|
+
self
|
201
|
+
end
|
202
|
+
|
172
203
|
def code_max
|
173
204
|
raw.max || Nothing.new
|
174
205
|
end
|
@@ -184,15 +215,24 @@ class Code
|
|
184
215
|
end || Nothing.new
|
185
216
|
end
|
186
217
|
|
187
|
-
def code_none?(argument, **globals)
|
218
|
+
def code_none?(argument = nil, **globals)
|
219
|
+
argument ||= Nothing.new
|
220
|
+
index = 0
|
221
|
+
|
188
222
|
Boolean.new(
|
189
|
-
raw.none
|
190
|
-
argument.
|
191
|
-
|
192
|
-
|
193
|
-
|
223
|
+
raw.none? do |element|
|
224
|
+
if argument.nothing?
|
225
|
+
element.truthy?
|
226
|
+
else
|
227
|
+
argument.call(
|
228
|
+
arguments: List.new([element, Integer.new(index), self]),
|
229
|
+
**globals
|
230
|
+
).truthy?
|
231
|
+
end
|
194
232
|
rescue Error::Next => e
|
195
233
|
(e.value || Nothing.new).truthy?
|
234
|
+
ensure
|
235
|
+
index += 1
|
196
236
|
end
|
197
237
|
)
|
198
238
|
end
|
@@ -238,6 +278,32 @@ class Code
|
|
238
278
|
self
|
239
279
|
end
|
240
280
|
|
281
|
+
def code_reject(argument, **globals)
|
282
|
+
List.new(
|
283
|
+
raw.reject.with_index do |element, index|
|
284
|
+
argument.call(
|
285
|
+
arguments: List.new([element, Integer.new(index), self]),
|
286
|
+
**globals
|
287
|
+
).truthy?
|
288
|
+
rescue Error::Next => e
|
289
|
+
(e.value || Nothing.new).truthy?
|
290
|
+
end
|
291
|
+
)
|
292
|
+
end
|
293
|
+
|
294
|
+
def code_reject!(argument, **globals)
|
295
|
+
raw.reject!.with_index do |element, index|
|
296
|
+
argument.call(
|
297
|
+
arguments: List.new([element, Integer.new(index), self]),
|
298
|
+
**globals
|
299
|
+
).truthy?
|
300
|
+
rescue Error::Next => e
|
301
|
+
(e.value || Nothing.new).truthy?
|
302
|
+
end
|
303
|
+
|
304
|
+
self
|
305
|
+
end
|
306
|
+
|
241
307
|
def code_join(separator = nil)
|
242
308
|
separator ||= String.new("")
|
243
309
|
|
data/lib/code/object/nothing.rb
CHANGED
data/lib/code/object.rb
CHANGED
data/lib/code/version.rb
CHANGED
data/spec/code_spec.rb
CHANGED
@@ -302,6 +302,16 @@ RSpec.describe Code do
|
|
302
302
|
["[1, 2].join(',')", "'1,2'"],
|
303
303
|
["[nothing, 2].join(',')", "',2'"],
|
304
304
|
["[nothing, nothing].join", "''"],
|
305
|
+
["[1, 2].select(&:even?)", "[2]"],
|
306
|
+
["[1, 2].reject(&:even?)", "[1]"],
|
307
|
+
["a = [1, 2] a.select!(&:even?) a", "[2]"],
|
308
|
+
["a = [1, 2] a.reject!(&:even?) a", "[1]"],
|
309
|
+
["[1, 2].map(&:even?)", "[false, true]"],
|
310
|
+
["a = [1, 2] a.map!(&:even?) a", "[false, true]"],
|
311
|
+
["[1, 2, 3].any?", "true"],
|
312
|
+
["[1, 2, 3].any?(&:even?)", "true"],
|
313
|
+
["[1, 2, 3].none?", "false"],
|
314
|
+
["[1, 2, 3].none?(&:even?)", "false"],
|
305
315
|
["'{1} {2}'", "'1 2'"],
|
306
316
|
["", ""]
|
307
317
|
].each do |input, expected|
|
@@ -323,4 +333,19 @@ RSpec.describe Code do
|
|
323
333
|
expect(output.string).to eq(expected)
|
324
334
|
end
|
325
335
|
end
|
336
|
+
|
337
|
+
it "doesn't crash with dictionnary as parameter" do
|
338
|
+
Code.evaluate(<<~INPUT)
|
339
|
+
[
|
340
|
+
{
|
341
|
+
videos: [{}]
|
342
|
+
},
|
343
|
+
{
|
344
|
+
videos: [{}]
|
345
|
+
}
|
346
|
+
].map do |post|
|
347
|
+
post.videos.map { |video| }
|
348
|
+
end
|
349
|
+
INPUT
|
350
|
+
end
|
326
351
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: code-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.15.
|
4
|
+
version: 0.15.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dorian Marié
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-08-
|
11
|
+
date: 2024-08-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|