text-gen 0.12.1 → 0.12.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: 1f4b6dac1a3fe31b9d98c79834a4fc69af77a06e5206d8051e6e6fe5d6e2742f
4
- data.tar.gz: bbf696d52a9838d6c9caccb1d8ae2772ed75cde64a82325db1d9a673eb664d38
3
+ metadata.gz: 12d84160917c876af0a100f744ce2b515ef484095ea3794e65f2152e04ac1697
4
+ data.tar.gz: 8f8b796ad33686f65b063d8295151f31e0a24ad6553a8bfd1aa0a1c2c0455edd
5
5
  SHA512:
6
- metadata.gz: 6f5bfbc0ad2b052980ad177dea9f0f9eb688447defd40cc0f352025e881b57a408510e50f5788bfd17a45b2996cd597e06d05d56c50a9d28b8444a1b54ae9ee1
7
- data.tar.gz: '089919fc1c912b1ec0ddb13a25c6ca32e55d6a64d05afe368c5b93b97b6c6377603b255ce0c74f5f650fc88943c4b74f3e1b8cd448690427fdbff39c78279540'
6
+ metadata.gz: eb91a5639b2ab5fa6d976787e47929e4a07ab34f13315819266c840851aa752869f5d9f28671c0d5019d8b333eea45942c4121b60d2d3ac06c6c66779500fbef
7
+ data.tar.gz: f6ebfd6b89edf90181c1b50f5bb991397dfa4b6c33111e8a923a72d442f2f41f19167299a7b67ed9aa199a7e4217085dcc36e7f77aa5c376857a45126ab4476f
@@ -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)
@@ -108,7 +118,10 @@ module Text
108
118
 
109
119
  def apply_result_filters(result)
110
120
  @filters.each do |filter|
111
- result = filter.result(self, result) if filter.respond_to?(:result)
121
+ next unless filter.respond_to?(:result)
122
+ next if result.filter_match?(filter.component_key)
123
+
124
+ result = filter.result(self, result)
112
125
  return unless result
113
126
  end
114
127
 
@@ -12,7 +12,7 @@ module Text
12
12
  end
13
13
 
14
14
  def component_key
15
- "function:#{type}"
15
+ "fn(#{to_s})"
16
16
  end
17
17
 
18
18
  # Shared utilities
@@ -32,6 +32,12 @@ module Text
32
32
  @type ||= @filter["type"]
33
33
  end
34
34
 
35
+ def to_s
36
+ return "#{ type }:#{ key }:#{ value }" if value
37
+ return "#{ type }:#{ key }" if key
38
+ type
39
+ end
40
+
35
41
  class << self
36
42
  def filter_name
37
43
  @filter_name ||= name.split("::").last.downcase
@@ -30,10 +30,16 @@ module Text
30
30
  case key
31
31
  when "_digit_"
32
32
  swap_digit(s)
33
+ when "_digit_without_one_"
34
+ if s == "1"
35
+ nil
36
+ else
37
+ swap_digit(s)
38
+ end
33
39
  else
34
40
  swap_any(s, key, val.to_s)
35
41
  end
36
- end
42
+ end.compact
37
43
  arr.join(" ")
38
44
  end
39
45
 
@@ -29,6 +29,17 @@ module Text
29
29
  }
30
30
  end
31
31
 
32
+ def filter?
33
+ type.start_with?("fn(")
34
+ end
35
+
36
+ def filter_match?(component_key)
37
+ return true if type == component_key
38
+ return false unless filter?
39
+
40
+ components.any? { |c| c.filter_match?(component_key) }
41
+ end
42
+
32
43
  def merge_all_meta(results)
33
44
  (results || []).each { |r| @meta = Text::Gen::Meta.merge_meta(meta, r.meta) }
34
45
  end
@@ -69,7 +80,7 @@ module Text
69
80
  text: results.map(&:text).join(sep),
70
81
  type: type,
71
82
  value: val * mul,
72
- multiplier: 1
83
+ multiplier: val.zero? ? mul : 1
73
84
  ).tap do |s|
74
85
  s.components.append(*results)
75
86
  s.merge_all_meta(results)
@@ -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,14 +138,15 @@ 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
- Result.merge(results,
144
+ result = Result.merge(results,
134
145
  value: item["value"],
135
146
  multiplier: item["multiplier"],
136
147
  meta: item["meta"],
137
148
  type: context.current_key)
149
+ context.apply_result_filters(result)
138
150
  end
139
151
  end
140
152
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Text
4
4
  module Gen
5
- VERSION = "0.12.1"
5
+ VERSION = "0.12.3"
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.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - G Palmer