diff options
| author | mo <mo@mokhan.ca> | 2019-06-15 11:38:15 -0600 |
|---|---|---|
| committer | mo <mo@mokhan.ca> | 2019-06-15 11:38:15 -0600 |
| commit | f22fd7836c4bf3bf1db22076755d0841e309d34a (patch) | |
| tree | 276823fb6e7d1bd18bc4b186af80e1657a6fbd8e | |
| parent | e173c464bddc9d0a7d5b5586e563868980d70fc8 (diff) | |
support not (expression)
| -rw-r--r-- | Gemfile.lock | 2 | ||||
| -rw-r--r-- | app/models/scim/search.rb | 8 | ||||
| -rw-r--r-- | app/models/scim/visitor.rb | 6 | ||||
| -rw-r--r-- | spec/models/scim/search_spec.rb | 2 |
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 |
