diff --git a/lib/literal/enum.rb b/lib/literal/enum.rb index 34bc0d0..58e8a53 100644 --- a/lib/literal/enum.rb +++ b/lib/literal/enum.rb @@ -47,34 +47,23 @@ def index(name, type, unique: true, &block) end def where(**kwargs) - unless kwargs.length == 1 - raise ArgumentError.new("You can only specify one index when using `where`.") - end - - key, value = kwargs.first - - types = @indexes_definitions.fetch(key) - type = types.first - Literal.check(value, type) { |c| raise NotImplementedError } - - @indexes.fetch(key)[value] - end + results = [] - def find_by(**kwargs) - unless kwargs.length == 1 - raise ArgumentError.new("You can only specify one index when using `where`.") - end + kwargs.each do |key, lookup| + matches = [] - key, value = kwargs.first + @indexes.fetch(key).each do |value, enums| + matches.concat(enums) if lookup === value + end - unless @indexes_definitions.fetch(key)[1] - raise ArgumentError.new("You can only use `find_by` on unique indexes.") + results << matches end - type = @indexes_definitions.fetch(key)[0] - Literal.check(value, type) + results.inject(:&) + end - @indexes.fetch(key)[value]&.first + def find_by(**kwargs) + where(**kwargs).first end def _load(data)