Class: Bparity::Formal::KoratEnumerator
- Inherits:
-
Object
- Object
- Bparity::Formal::KoratEnumerator
- Defined in:
- lib/bparity/formal/bounded.rb
Instance Method Summary collapse
-
#initialize(klass:, fields:, domains:, predicate: ->(_value) { true }, limit: nil) ⇒ KoratEnumerator
constructor
A new instance of KoratEnumerator.
- #values ⇒ Object
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
#values ⇒ Object
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 |