Class: Text::Gen::Store
- Inherits:
-
Object
- Object
- Text::Gen::Store
- Defined in:
- lib/text/gen/store.rb
Overview
Store is a local cache of a builder that is persistent per store to save time on database lookups or transformations.
Constant Summary collapse
- NOT_FOUND_BUILDER =
{ "strategy" => "sample", "filters" => [], "meta" => {}, "items" => [] }.freeze
Instance Method Summary collapse
- #add(key, builder) ⇒ Object
- #clear(key) ⇒ Object
- #fetch(key) ⇒ Object
- #find(key) ⇒ Object
-
#initialize(lookup) ⇒ Store
constructor
A new instance of Store.
- #merge_builders(builders) ⇒ Object
- #not_found(key) ⇒ Object
- #to_h ⇒ Object
Constructor Details
#initialize(lookup) ⇒ Store
Returns a new instance of Store.
15 16 17 18 |
# File 'lib/text/gen/store.rb', line 15 def initialize(lookup) @lookup = lookup @store = {} end |
Instance Method Details
#add(key, builder) ⇒ Object
24 25 26 27 |
# File 'lib/text/gen/store.rb', line 24 def add(key, builder) @store[key.to_s.downcase] = builder builder end |
#clear(key) ⇒ Object
29 30 31 |
# File 'lib/text/gen/store.rb', line 29 def clear(key) @store.delete(key.to_s.downcase) end |
#fetch(key) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/text/gen/store.rb', line 33 def fetch(key) builder = find(key) return builder if builder keys = key.split("+") builders = keys.map do |key| builder = @lookup.call(key) builder = not_found(key) unless builder builder end builder = merge_builders(builders) if builders.length > 1 add(key, builder.merge("key" => key.to_s.downcase)) end |
#find(key) ⇒ Object
20 21 22 |
# File 'lib/text/gen/store.rb', line 20 def find(key) @store[key.to_s.downcase] end |
#merge_builders(builders) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/text/gen/store.rb', line 48 def merge_builders(builders) all_filters = builders.map { |b| b["filters"] }.flatten = builders.inject({}) { |b, acc| acc = Text::Gen::Meta.(acc, b["meta"]) } all_items = builders.map { |b| b["items"] }.flatten strategy = builders.all? {|b| b["strategy"] == "weighted" } ? "weighted" : "sample" { "strategy" => strategy, "filters" => all_filters, "meta" => , "items" => all_items, } end |
#not_found(key) ⇒ Object
61 62 63 64 65 |
# File 'lib/text/gen/store.rb', line 61 def not_found(key) hsh = NOT_FOUND_BUILDER.dup hsh["key"] = key hsh end |
#to_h ⇒ Object
67 68 69 |
# File 'lib/text/gen/store.rb', line 67 def to_h @store end |