summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormo <mo@mokhan.ca>2019-06-15 11:38:15 -0600
committermo <mo@mokhan.ca>2019-06-15 11:38:15 -0600
commitf22fd7836c4bf3bf1db22076755d0841e309d34a (patch)
tree276823fb6e7d1bd18bc4b186af80e1657a6fbd8e
parente173c464bddc9d0a7d5b5586e563868980d70fc8 (diff)
support not (expression)
-rw-r--r--Gemfile.lock2
-rw-r--r--app/models/scim/search.rb8
-rw-r--r--app/models/scim/visitor.rb6
-rw-r--r--spec/models/scim/search_spec.rb2
4 files changed, 15 insertions, 3 deletions
diff --git a/Gemfile.lock b/Gemfile.lock
index f843445..31d502a 100644
--- a/Gemfile.lock
+++ b/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)
diff --git a/app/models/scim/search.rb b/app/models/scim/search.rb
index 626f677..1efd96c 100644
--- a/app/models/scim/search.rb
+++ b/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)
diff --git a/app/models/scim/visitor.rb b/app/models/scim/visitor.rb
index a0ba40d..d77753d 100644
--- a/app/models/scim/visitor.rb
+++ b/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)
diff --git a/spec/models/scim/search_spec.rb b/spec/models/scim/search_spec.rb
index c5f8579..2e62500 100644
--- a/spec/models/scim/search_spec.rb
+++ b/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