code-ruby 0.15.12 → 0.15.14
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 +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
|