Class: Bparity::Formal::KoratEnumerator

Inherits:
Object
  • Object
show all
Defined in:
lib/bparity/formal/bounded.rb

Instance Method Summary collapse

Constructor Details

#initialize(klass:, fields:, domains:, predicate: ->(_value) { true }, limit: nil) ⇒ KoratEnumerator

Returns a new instance of KoratEnumerator.



149
150
151
152
153
154
155
# File 'lib/bparity/formal/bounded.rb', line 149

def initialize(klass:, fields:, domains:, predicate: ->(_value) { true }, limit: nil)
  @klass = klass
  @fields = fields.map(&:to_sym)
  @domains = domains.transform_keys(&:to_sym)
  @predicate = predicate
  @limit = limit
end

Instance Method Details

#valuesObject



157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
# File 'lib/bparity/formal/bounded.rb', line 157

def values
  seen = {}
  results = []
  vectors.each do |vector|
    candidate = build(vector)
    next unless @predicate.call(candidate)

    signature = JSON.generate(shape(candidate))
    next if seen[signature]

    seen[signature] = true
    return Domain.new(results, truncated: true) if @limit && results.length >= @limit

    results << candidate
  end
  Domain.new(results)
end