text-gen 0.12.1 → 0.12.2

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: 1f4b6dac1a3fe31b9d98c79834a4fc69af77a06e5206d8051e6e6fe5d6e2742f
4
- data.tar.gz: bbf696d52a9838d6c9caccb1d8ae2772ed75cde64a82325db1d9a673eb664d38
3
+ metadata.gz: fdccd9be33604c3bff808d1f2811179f4f8c41945e727273ca6b4103473c995b
4
+ data.tar.gz: 1d6c60c2600e0ddd9189a3a767907e4b8614fae702b863acbc34e277c9addf56
5
5
  SHA512:
6
- metadata.gz: 6f5bfbc0ad2b052980ad177dea9f0f9eb688447defd40cc0f352025e881b57a408510e50f5788bfd17a45b2996cd597e06d05d56c50a9d28b8444a1b54ae9ee1
7
- data.tar.gz: '089919fc1c912b1ec0ddb13a25c6ca32e55d6a64d05afe368c5b93b97b6c6377603b255ce0c74f5f650fc88943c4b74f3e1b8cd448690427fdbff39c78279540'
6
+ metadata.gz: 3468c4f9ec44542da51dced562f164c653eb60c5328660c3f80f259da3c280c79d340b20aab698cc21428c4337af2c1a7f9341d83c6d2fd2926163b811551ef3
7
+ data.tar.gz: a041435b7b371e868846d34604b4890a659b11bc74a443fedf64ad610e169a76ea06f4da738b94377b6b357a8b9cf0b4766e50881abbb4ca72288118c7e201ec
@@ -15,7 +15,7 @@ module Text
15
15
  @meta = meta
16
16
  @keys = []
17
17
  @strategy_stack = []
18
- @remember = Hash.new { |h, k| h[k] = [] }
18
+ @remembered = []
19
19
  @max_recursion = max_recursion
20
20
  end
21
21
 
@@ -42,10 +42,11 @@ module Text
42
42
  @filters << filter
43
43
  end
44
44
 
45
- result = yield
46
-
47
- @filters.pop(count)
48
- result
45
+ begin
46
+ yield
47
+ ensure
48
+ @filters.pop(count)
49
+ end
49
50
  end
50
51
 
51
52
  def current_key
@@ -61,12 +62,21 @@ module Text
61
62
  end
62
63
 
63
64
  def remember(result)
64
- @remember[current_key] << result
65
+ @remembered << [current_key, result]
65
66
  result
66
67
  end
67
68
 
68
69
  def remembered(key = nil)
69
- @remember[key || current_key]
70
+ key ||= current_key
71
+ @remembered.select {|k, _r| k == key }.map(&:last)
72
+ end
73
+
74
+ def remember_checkpoint
75
+ @remembered.length
76
+ end
77
+
78
+ def restore_remember(checkpoint)
79
+ @remembered = @remembered[0...checkpoint]
70
80
  end
71
81
 
72
82
  def apply_builder_filters(builder)
@@ -32,20 +32,31 @@ module Text
32
32
  # A builder is hash with a key field, items, filters, and meta
33
33
  def run_builder(context, builder)
34
34
  context.descend!(builder)
35
+ checkpoint = context.remember_checkpoint
35
36
  context.with_filters(builder["filters"]) do
36
37
  builder = context.apply_builder_filters(builder)
37
- return unless builder
38
+ unless builder
39
+ context.restore_remember(checkpoint)
40
+ return
41
+ end
38
42
 
39
43
  # Filter mapping of builder to result is allowed
40
44
  return builder if builder.is_a?(Result)
41
45
 
42
46
  result = builder.is_a?(Result) ? builder : run_items(context, builder["items"])
43
- return unless result
47
+ unless result
48
+ context.restore_remember(checkpoint)
49
+ return
50
+ end
44
51
 
45
52
  result.merge_meta(builder["meta"])
46
53
  result = context.apply_result_filters(result)
47
- return unless result
54
+ unless result
55
+ context.restore_remember(checkpoint)
56
+ return
57
+ end
48
58
 
59
+ context.restore_remember(checkpoint)
49
60
  context.remember(result)
50
61
  end
51
62
  ensure
@@ -127,8 +138,8 @@ module Text
127
138
  return item if item.is_a?(Result)
128
139
 
129
140
  context.with_filters(item["filters"]) do
130
- results = item["segments"].map { |seg| run_segment(context, seg) }.compact
131
- return if results.empty?
141
+ results = item["segments"].map { |seg| run_segment(context, seg) }
142
+ return if results.any?(&:nil?) || results.empty?
132
143
 
133
144
  Result.merge(results,
134
145
  value: item["value"],
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Text
4
4
  module Gen
5
- VERSION = "0.12.1"
5
+ VERSION = "0.12.2"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: text-gen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.1
4
+ version: 0.12.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - G Palmer