flor 1.6.3 → 1.6.4

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: 047da4d33003f19f54b5d646fa488e59a63878f25e5a4b39006375ce9a9b22c4
4
- data.tar.gz: e4d955a4984e3eb781ad10eaa657cc3b9432ef67495402f9286a98a479215685
3
+ metadata.gz: 726f12169dd650e862f4fdcf7f08da2e08f9a06ccf9f9125b2ad0340b4003b1f
4
+ data.tar.gz: 4864b67e47ee79e8a9b220e2465d23343e554102fd8a8fbdac6dad16eef9327c
5
5
  SHA512:
6
- metadata.gz: 7be8459b6ce6f98a957c37950682ed558526455e9f329ee952d16f148693b81bb95a98741f83302525d37f9d4f5170d451d393ebbbac686342f7c078d2e171ad
7
- data.tar.gz: 81a86bafd33ee08eab5561c3693f030008ff1d65903d70f706376e0f6d917483354b1b7c4f8b20cf2d14a8257644488cd307ecd2a660100d12a9aa975cf55364
6
+ metadata.gz: 82a526fd4cd0c6185e3778e4b1421c6f120fa3b0a3c3591a54fb7ddb2ddae7943302409a5b1fe1bec118882ebaf125cdd6b35895f442d58b32068c80e17497b4
7
+ data.tar.gz: 80ab4a60ca328565ce463459ee610face1f9d513da541392c1d6c7b8bf0906c9271120dd1dbd94ea66589eda8c3112233f817d1ef6a38eb931bece7eda1cac7a
data/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
  # CHANGELOG.md
3
3
 
4
4
 
5
+ ## flor 1.6.4 released 2025-09-18
6
+
7
+ * Introduce `del` and `delf` to delete vars and fields
8
+ * Fix cursor/move vs symbol target
9
+
10
+
5
11
  ## flor 1.6.3 released 2025-05-29
6
12
 
7
13
  * Stop Scheduler#notify swallowing errors, gh-43
@@ -737,23 +737,28 @@ class Flor::Procedure < Flor::Node
737
737
  node = lookup_var_node(@node, mode, path)
738
738
  node = lookup_var_node(@node, 'l', path) if node.nil? && mode == ''
739
739
 
740
- return Dense.set(node['vars'], path, v) if node
740
+ if node
741
+ return Dense.unset(node['vars'], path) if v == :UNSET
742
+ return Dense.set(node['vars'], path, v)
743
+ end
741
744
 
742
745
  rescue IndexError
743
746
  end
744
747
 
745
748
  fail IndexError.new(
746
- "couldn't set var #{Flor.path_to_s([ "#{mode}v" ] + path)}")
749
+ "couldn't #{v == :UNSET ? 'un' : ''}set var " +
750
+ "#{Flor.path_to_s([ "#{mode}v" ] + path)}")
747
751
  end
748
752
 
749
753
  def set_field(path, v)
750
754
 
755
+ return Dense.unset(payload.copy, path) if v == :UNSET
751
756
  Dense.set(payload.copy, path, v)
752
757
 
753
758
  rescue IndexError
754
759
 
755
760
  fail IndexError.new(
756
- "couldn't set field #{Flor.path_to_s(path)}")
761
+ "couldn't #{v == :UNSET ? 'un' : ''}set field #{Flor.path_to_s(path)}")
757
762
  end
758
763
 
759
764
  def set_value(path, value)
@@ -775,6 +780,11 @@ class Flor::Procedure < Flor::Node
775
780
  end
776
781
  end
777
782
 
783
+ def unset_value(path)
784
+
785
+ set_value(path, :UNSET)
786
+ end
787
+
778
788
  def splat_value(paths, value)
779
789
 
780
790
  val = value.dup
@@ -7,8 +7,8 @@ class Flor::Pro::Break < Flor::Procedure
7
7
  # ```
8
8
  # until false
9
9
  # # do something
10
- # continue if f.x == 0
11
- # break if f.x == 1
10
+ # continue _ if f.x == 0
11
+ # break _ if f.x == 1
12
12
  # # do something more
13
13
  # ```
14
14
  #
@@ -50,7 +50,7 @@ class Flor::Pro::Break < Flor::Procedure
50
50
  #
51
51
  # While, until, loop and cursor.
52
52
 
53
- name 'break', 'continue'
53
+ names %w[ break continue ]
54
54
 
55
55
  def pre_execute
56
56
 
@@ -191,6 +191,7 @@ class Flor::Pro::Cursor < Flor::Procedure
191
191
  find_string_target(to) ||
192
192
  find_name_target(to) ||
193
193
  find_att_target(to) ||
194
+ #find_att_value_target(to) ||
194
195
  fail(Flor::FlorError.new("move target #{to.inspect} not found", self))
195
196
  end
196
197
 
@@ -246,7 +247,16 @@ class Flor::Pro::Cursor < Flor::Procedure
246
247
  c[1].find { |cc|
247
248
  cc[0] == '_att' &&
248
249
  cc[1].is_a?(Array) &&
249
- cc[1][0][0, 2] == [ 'here', [] ] } } # FIXME hardcoded...
250
+ cc[1][0][0, 2] == [ to, [] ] } }
250
251
  end
252
+
253
+ #def find_att_value_target(to)
254
+ # tree[1]
255
+ # .index { |c|
256
+ # c[1].find { |cc|
257
+ # cc[1].length == 2 &&
258
+ # cc[1][0][0] != 'to' &&
259
+ # Flor.is_string_tree?(cc[1][1], to) } }
260
+ #end
251
261
  end
252
262
 
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+
4
+ class Flor::Pro::Del < Flor::Procedure
5
+ #
6
+ # Removes a field or a variable.
7
+ #
8
+ # ```
9
+ # sequence
10
+ # del f.a # blanks field 'a' from the payload
11
+ # del a # blanks variable 'a'
12
+ # ```
13
+ #
14
+ # Returns the value held in the field or variable or `null` else.
15
+ #
16
+ # `del` will raise an error if the target field cannot be reached,
17
+ # but `delf` will not raise and simply return `null`.
18
+
19
+ names %w[ del delf ]
20
+
21
+ def pre_execute
22
+
23
+ unatt_unkeyed_children
24
+ rerep_children
25
+
26
+ @node['refs'] = []
27
+ end
28
+
29
+ def receive_non_att
30
+
31
+ ft = tree[1][@fcid] || []
32
+
33
+ if ft[0] == '_rep'
34
+ @node['refs'] << payload['ret']
35
+ else
36
+ payload['ret'] = node_payload_ret
37
+ end
38
+
39
+ super
40
+ end
41
+
42
+ def receive_last
43
+
44
+ ret = nil
45
+
46
+ @node['refs'].each do |ref|
47
+
48
+ ret = (lookup_value(ref) rescue nil)
49
+ begin
50
+ unset_value(ref)
51
+ rescue
52
+ raise unless tree[0] == 'delf'
53
+ end
54
+ end
55
+
56
+ wrap('ret' => ret)
57
+ end
58
+
59
+ protected
60
+
61
+ def rerep_children
62
+
63
+ t = tree
64
+
65
+ cn = t[1]
66
+ .collect { |ct|
67
+ hd, cn, ln = ct
68
+ if hd == '_ref'
69
+ [ '_rep', cn, ln ]
70
+ elsif hd == '_dqs'
71
+ [ '_rep', [ ct ], ln ]
72
+ elsif Flor.is_single_ref_tree?(ct)
73
+ [ '_rep', [ [ '_sqs', hd, ln ] ], ln ]
74
+ else
75
+ ct
76
+ end }
77
+
78
+ @node['tree'] = [ t[0], cn, t[2] ] if cn != t[1]
79
+ end
80
+ end
81
+
data/lib/flor.rb CHANGED
@@ -16,7 +16,7 @@ require 'dense'
16
16
 
17
17
  module Flor
18
18
 
19
- VERSION = '1.6.3'
19
+ VERSION = '1.6.4'
20
20
  end
21
21
 
22
22
  require 'flor/colours'
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flor
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.3
4
+ version: 1.6.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Mettraux
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-05-29 00:00:00.000000000 Z
10
+ date: 2025-09-18 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: munemo
@@ -180,6 +180,7 @@ files:
180
180
  - lib/flor/pcore/cond.rb
181
181
  - lib/flor/pcore/cursor.rb
182
182
  - lib/flor/pcore/define.rb
183
+ - lib/flor/pcore/del.rb
183
184
  - lib/flor/pcore/detect.rb
184
185
  - lib/flor/pcore/do_return.rb
185
186
  - lib/flor/pcore/each.rb