code-ruby 1.6.2 → 1.6.3

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: af47589cc6afaaec99b2aba7ed43af665f20de7bba2b5d3bc377eab281094cd6
4
- data.tar.gz: 9203c5dbd24e58a1111ddc9505d429065c9a31210cd9e71e5e7d7fc9f49ef467
3
+ metadata.gz: 31de900f45b607432af42419aedea361f2a751aa6d635caaa01edced89a2a591
4
+ data.tar.gz: 121236f92f037d3ba10b45a8d92dabd08972241262c588cfbe370ff60822f642
5
5
  SHA512:
6
- metadata.gz: b44776a7dc3bd70b03ae61fe921101b00ecd6ed084dfb674d403cf3fc55fc1d4d7890b0d9ef4147d970936716ceb568e8c91cd25adb08460c785c3b5b076ba94
7
- data.tar.gz: f0331a5566bb8232444a02136612e1ad72ec47cbe588440d2d6bcfe42e8bc00649c4bfe3590f71c34d1f802055bd50a5e8b289c827cadc47ff46ea12a737106f
6
+ metadata.gz: f3774304c7976b6295f49c6da4a9ccd473151cb0097f8e3848a58941498a8b3502c477f6095c148811d72b43bbbbbdf869848c4ceeac87515b47fc596a55d1aa
7
+ data.tar.gz: edb7ff295ed91f0b555f2e8e8bab351a2002ff80db28aaaab037d4d7c22b42d55b3a41712e73a64855c872ad8d7579dee9d4dbe23119a37211c902c870adc165
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- code-ruby (1.6.2)
4
+ code-ruby (1.6.3)
5
5
  activesupport
6
6
  base64
7
7
  bigdecimal
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.6.2
1
+ 1.6.3
data/bin/code CHANGED
@@ -46,7 +46,11 @@ RubyProf.start if profile
46
46
  input = 'loop { print("> ") puts(evaluate(read)) }' if input.blank?
47
47
 
48
48
  if parsed.options.parse
49
- pp Code::Parser.parse(input).to_raw
49
+ begin
50
+ pp Code::Parser.parse(input).to_raw
51
+ rescue Exception => e
52
+ warn e.message
53
+ end
50
54
  else
51
55
  begin
52
56
  print(
@@ -58,7 +62,7 @@ else
58
62
  timeout: parsed.options.timeout
59
63
  )
60
64
  )
61
- rescue Code::Error => e
65
+ rescue Exception => e
62
66
  warn e.message
63
67
  end
64
68
  end
@@ -8,10 +8,15 @@ class Code
8
8
  def initialize(parsed)
9
9
  return if parsed.blank?
10
10
 
11
- @name = parsed.delete(:name).presence
11
+ @name =
12
+ parsed.delete(:name).presence || parsed[:regular_splat].presence ||
13
+ parsed[:keyword_splat].presence || parsed[:spread].presence ||
14
+ parsed[:block].presence
12
15
  @keyword = parsed.delete(:keyword).present?
13
16
  @regular_splat = parsed.delete(:regular_splat).present?
14
17
  @keyword_splat = parsed.delete(:keyword_splat).present?
18
+ @spread = parsed.delete(:spread).present?
19
+ @block = parsed.delete(:block).present?
15
20
  @default = Code.new(parsed.delete(:default)) if parsed.key?(:default)
16
21
  end
17
22
 
@@ -35,6 +40,14 @@ class Code
35
40
  !!@keyword_splat
36
41
  end
37
42
 
43
+ def spread?
44
+ !!@spread
45
+ end
46
+
47
+ def block?
48
+ !!@block
49
+ end
50
+
38
51
  def to_h
39
52
  {
40
53
  name: name,
@@ -42,6 +55,8 @@ class Code
42
55
  keyword?: keyword?,
43
56
  regular_splat?: regular_splat?,
44
57
  keyword_splat?: keyword_splat?,
58
+ spread?: spread?,
59
+ block?: block?,
45
60
  default: default
46
61
  }
47
62
  end
@@ -18,6 +18,7 @@ class Code
18
18
  elsif parent?
19
19
  parent.code_lookup!(code_identifier)
20
20
  else
21
+ binding.irb
21
22
  raise Error, "#{code_identifier} is not defined"
22
23
  end
23
24
  end
@@ -38,12 +38,19 @@ class Code
38
38
 
39
39
  code_parameters.raw.each.with_index do |code_parameter, index|
40
40
  code_argument =
41
- if code_parameter.regular_splat?
41
+ if code_parameter.spread?
42
+ code_arguments
43
+ elsif code_parameter.regular_splat?
42
44
  code_arguments
43
45
  elsif code_parameter.keyword_splat?
44
46
  code_arguments.raw.detect do |code_argument|
45
47
  code_argument.is_a?(Dictionary)
46
48
  end || Dictionary.new
49
+ elsif code_parameter.block?
50
+ code_arguments
51
+ .raw
52
+ .detect { |code_argument| code_argument.is_a?(Function) }
53
+ .to_code
47
54
  elsif code_parameter.keyword?
48
55
  code_arguments
49
56
  .raw
@@ -71,7 +78,11 @@ class Code
71
78
  code_parameters
72
79
  .raw
73
80
  .inject([]) do |signature, code_parameter|
74
- if code_parameter.keyword_splat?
81
+ if code_parameter.spread?
82
+ signature + [Object.repeat]
83
+ elsif code_parameter.block?
84
+ signature + [Function]
85
+ elsif code_parameter.keyword_splat?
75
86
  signature + [Dictionary.maybe]
76
87
  elsif code_parameter.regular_splat?
77
88
  signature + [Object.repeat]
@@ -23,6 +23,14 @@ class Code
23
23
  Boolean.new(code_get(:keyword_splat?))
24
24
  end
25
25
 
26
+ def code_block?
27
+ Boolean.new(code_get(:block?))
28
+ end
29
+
30
+ def code_spread?
31
+ Boolean.new(code_get(:spread?))
32
+ end
33
+
26
34
  def code_required?
27
35
  code_default.code_falsy?
28
36
  end
@@ -62,6 +70,14 @@ class Code
62
70
  def keyword_splat?
63
71
  code_keyword_splat?.truthy?
64
72
  end
73
+
74
+ def spread?
75
+ code_spread?.truthy?
76
+ end
77
+
78
+ def block?
79
+ code_block?.truthy?
80
+ end
65
81
  end
66
82
  end
67
83
  end
@@ -67,6 +67,18 @@ class Code
67
67
  str("end")
68
68
  end
69
69
 
70
+ def asterisk
71
+ str("*")
72
+ end
73
+
74
+ def ampersand
75
+ str("&")
76
+ end
77
+
78
+ def spread_operator
79
+ str("...") | str("..") | str(".")
80
+ end
81
+
70
82
  def keyword_argument
71
83
  name.aka(:name) << whitespace? << colon << code.aka(:value)
72
84
  end
@@ -87,13 +99,19 @@ class Code
87
99
  ).repeat << whitespace? << closing_parenthesis.ignore.maybe
88
100
  end
89
101
 
102
+ def prefix
103
+ (asterisk << asterisk).aka(:keyword_splat) |
104
+ asterisk.aka(:regular_splat) | ampersand.aka(:block) |
105
+ spread_operator.aka(:spread)
106
+ end
107
+
90
108
  def keyword_parameter
91
109
  name.aka(:name) << whitespace? << colon.aka(:keyword) <<
92
110
  code_present.aka(:default).maybe
93
111
  end
94
112
 
95
113
  def regular_parameter
96
- name.aka(:name) << whitespace? <<
114
+ ((prefix.maybe << name.aka(:name)) | prefix) << whitespace? <<
97
115
  (equal << whitespace? << code_present.aka(:default)).maybe
98
116
  end
99
117
 
@@ -35,6 +35,10 @@ class Code
35
35
  str("end")
36
36
  end
37
37
 
38
+ def spread_operator
39
+ str("...") | str("..") | str(".")
40
+ end
41
+
38
42
  def opening_parenthesis
39
43
  str("(")
40
44
  end
@@ -77,7 +81,8 @@ class Code
77
81
 
78
82
  def prefix
79
83
  (asterisk << asterisk).aka(:keyword_splat) |
80
- asterisk.aka(:regular_splat) | ampersand.aka(:block)
84
+ asterisk.aka(:regular_splat) | ampersand.aka(:block) |
85
+ spread_operator.aka(:spread)
81
86
  end
82
87
 
83
88
  def keyword_parameter
@@ -86,7 +91,7 @@ class Code
86
91
  end
87
92
 
88
93
  def regular_parameter
89
- prefix.maybe << name.aka(:name) << whitespace? <<
94
+ ((prefix.maybe << name.aka(:name)) | prefix) << whitespace? <<
90
95
  (equal << whitespace? << code_present.aka(:default)).maybe
91
96
  end
92
97
 
@@ -139,6 +139,10 @@ class Code
139
139
  str("?")
140
140
  end
141
141
 
142
+ def special_name
143
+ str("...") | str("..") | str(".") | str("**") | str("*") | str("&")
144
+ end
145
+
142
146
  def reserved_character
143
147
  ampersand | equal | pipe | dot | colon | comma | space | newline |
144
148
  opening_curly_bracket | closing_curly_bracket | opening_parenthesis |
@@ -167,8 +171,13 @@ class Code
167
171
  end
168
172
 
169
173
  def root
170
- (keyword << separator).absent << special_characters.absent <<
171
- character.repeat(1)
174
+ (
175
+ special_name |
176
+ (
177
+ (keyword << separator).absent << special_characters.absent <<
178
+ character.repeat(1)
179
+ )
180
+ )
172
181
  end
173
182
  end
174
183
  end
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.6.2
4
+ version: 1.6.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dorian Marié
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-06-21 00:00:00.000000000 Z
10
+ date: 2025-06-25 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: activesupport