Class: Text::Gen::Result
- Inherits:
-
Object
- Object
- Text::Gen::Result
- Defined in:
- lib/text/gen/result.rb
Overview
Result stores the generated text, value and metadata and context about how it was created
Instance Attribute Summary collapse
-
#components ⇒ Object
readonly
Returns the value of attribute components.
-
#meta ⇒ Object
readonly
Returns the value of attribute meta.
-
#multiplier ⇒ Object
readonly
Returns the value of attribute multiplier.
-
#text ⇒ Object
readonly
Returns the value of attribute text.
-
#type ⇒ Object
readonly
Returns the value of attribute type.
-
#value ⇒ Object
readonly
Returns the value of attribute value.
Class Method Summary collapse
- .from(text:, type:, result:, value: nil, multiplier: nil) ⇒ Object
- .merge(results, value: nil, multiplier: nil, filters: [], meta: {}, type: :sequence) ⇒ Object
Instance Method Summary collapse
- #clear_meta(key, val) ⇒ Object
-
#initialize(text:, type:, value: 0, multiplier: 1) ⇒ Result
constructor
A new instance of Result.
- #merge_all_meta(results) ⇒ Object
- #merge_kv(key, val) ⇒ Object
- #merge_meta(hsh) ⇒ Object
- #to_h ⇒ Object
- #to_s ⇒ Object
Constructor Details
#initialize(text:, type:, value: 0, multiplier: 1) ⇒ Result
Returns a new instance of Result.
10 11 12 13 14 15 16 17 |
# File 'lib/text/gen/result.rb', line 10 def initialize(text:, type:, value: 0, multiplier: 1) @text = text @type = type.to_s @value = [0, (value || 0).to_i].max @multiplier = [1, (multiplier || 1).to_i].max @meta = {} @components = [] end |
Instance Attribute Details
#components ⇒ Object (readonly)
Returns the value of attribute components.
8 9 10 |
# File 'lib/text/gen/result.rb', line 8 def components @components end |
#meta ⇒ Object (readonly)
Returns the value of attribute meta.
8 9 10 |
# File 'lib/text/gen/result.rb', line 8 def @meta end |
#multiplier ⇒ Object (readonly)
Returns the value of attribute multiplier.
8 9 10 |
# File 'lib/text/gen/result.rb', line 8 def multiplier @multiplier end |
#text ⇒ Object (readonly)
Returns the value of attribute text.
8 9 10 |
# File 'lib/text/gen/result.rb', line 8 def text @text end |
#type ⇒ Object (readonly)
Returns the value of attribute type.
8 9 10 |
# File 'lib/text/gen/result.rb', line 8 def type @type end |
#value ⇒ Object (readonly)
Returns the value of attribute value.
8 9 10 |
# File 'lib/text/gen/result.rb', line 8 def value @value end |
Class Method Details
.from(text:, type:, result:, value: nil, multiplier: nil) ⇒ Object
67 68 69 70 71 72 73 74 |
# File 'lib/text/gen/result.rb', line 67 def from(text:, type:, result:, value: nil, multiplier: nil) value ||= result.value multiplier ||= result.multiplier new(text:, type:, value:, multiplier:).tap do |s| s.components.append(result) s.(result.) end end |
.merge(results, value: nil, multiplier: nil, filters: [], meta: {}, type: :sequence) ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/text/gen/result.rb', line 76 def merge(results, value: nil, multiplier: nil, filters: [], meta: {}, type: :sequence) results = results.compact sep = Filter.separator(filters) mul = multiplier || results.reduce(1) { |acc, r| acc * r.multiplier } val = value || results.sum(&:value) new( text: results.map(&:text).join(sep), type: type, value: val * mul, multiplier: 1 ).tap do |result| result.components.append(*results) result.(results) result.() end end |
Instance Method Details
#clear_meta(key, val) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/text/gen/result.rb', line 50 def (key, val) if key == "*" && val == "*" @meta = {} elsif key == "*" @meta.each_value { |v| v.delete(val) } elsif val == "*" @meta.delete(key) else @meta[key]&.delete(val) end end |
#merge_all_meta(results) ⇒ Object
30 31 32 33 34 35 36 |
# File 'lib/text/gen/result.rb', line 30 def (results) return unless results results.each do |r| r..each { |k, v| merge_kv(k, v) } end end |
#merge_kv(key, val) ⇒ Object
44 45 46 47 48 |
# File 'lib/text/gen/result.rb', line 44 def merge_kv(key, val) key = key.to_s.downcase arr = val.is_a?(Array) ? val : Array(val) [key] = .key?(key) ? ([key] + arr).uniq : arr.dup end |
#merge_meta(hsh) ⇒ Object
38 39 40 41 42 |
# File 'lib/text/gen/result.rb', line 38 def (hsh) return unless hsh hsh.each { |k, v| merge_kv(k, v) } end |
#to_h ⇒ Object
19 20 21 22 23 24 25 26 27 28 |
# File 'lib/text/gen/result.rb', line 19 def to_h { text:, type:, value:, multiplier:, meta:, components: components.map(&:to_h) } end |
#to_s ⇒ Object
62 63 64 |
# File 'lib/text/gen/result.rb', line 62 def to_s @text end |