Commit f22fd78

mo <mo@mokhan.ca>
2019-06-15 17:38:15
support not (expression)
1 parent e173c46
Changed files (4)
app/models/scim/search.rb
@@ -19,6 +19,10 @@ module Scim
         @node[:value].to_s[1..-2]
       end
 
+      def not?
+        @node.key?(:not)
+      end
+
       def accept(visitor)
         visitor.visit(self)
       end
@@ -35,6 +39,10 @@ module Scim
         new(::Scim::Kit::V2::Filter.new.parse(query))
       end
 
+      def inspect
+        @node.inspect
+      end
+
       private
 
       def [](key)
app/models/scim/visitor.rb
@@ -42,7 +42,11 @@ module Scim
     end
 
     def visit_equals(node)
-      @clazz.where(attr_for(node) => node.value)
+      if node.not?
+        @clazz.where.not(attr_for(node) => node.value)
+      else
+        @clazz.where(attr_for(node) => node.value)
+      end
     end
 
     def visit_not_equals(node)
spec/models/scim/search_spec.rb
@@ -15,7 +15,7 @@ RSpec.describe ::Scim::Search do
       expect(results).to match_array(users)
     end
 
-    pending do
+    specify do
       results = subject.for("userName pr and not (userName eq \"#{random_user.email}\")")
       expect(results).to match_array(users - [random_user])
     end
Gemfile.lock
@@ -1,6 +1,6 @@
 GIT
   remote: https://github.com/mokhan/scim-kit.git
-  revision: 55ab23972bc21d8fe3823a8b081ac417949033db
+  revision: 1168b638d11b335127345f9754cec025b30dbeff
   specs:
     scim-kit (0.3.2)
       activemodel (>= 5.2.0)