Commit 16b6d26

mo <mo.khan@gmail.com>
2019-05-31 00:37:38
extract methods to parse items from node
1 parent 314930f
Changed files (1)
app
models
app/models/scim/visitor.rb
@@ -6,50 +6,53 @@ module Scim
       @attribute_mappings = attribute_mappings
     end
 
-    def visit(tree)
-      attribute = tree[:attribute].to_s
-      attr = @attribute_mappings[attribute] || attribute
-
-      case tree[:operator].to_s
+    def visit(node)
+      attr = attr_from(node)
+      case node[:operator].to_s
       when 'and'
-        visit(tree[:left]).merge(visit(tree[:right]))
+        visit(node[:left]).merge(visit(node[:right]))
       when 'or'
-        visit(tree[:left]).or(visit(tree[:right]))
+        visit(node[:left]).or(visit(node[:right]))
       when 'eq'
-        User.where(attr => value_from(tree))
+        User.where(attr => value_from(node))
       when 'ne'
-        User.where.not(attr => value_from(tree))
+        User.where.not(attr => value_from(node))
       when 'co'
-        User.where("#{attr} like ?", "%#{value_from(tree)}%")
+        User.where("#{attr} like ?", "%#{value_from(node)}%")
       when 'sw'
-        User.where("#{attr} like ?", "#{value_from(tree)}%")
+        User.where("#{attr} like ?", "#{value_from(node)}%")
       when 'ew'
-        User.where("#{attr} like ?", "%#{value_from(tree)}")
+        User.where("#{attr} like ?", "%#{value_from(node)}")
       when 'gt'
-        value = DateTime.parse(value_from(tree))
-        User.where("#{attr} > ?", value)
+        User.where("#{attr} > ?", cast_value_from(node))
       when 'ge'
-        value = DateTime.parse(value_from(tree))
-        User.where("#{attr} >= ?", value)
+        User.where("#{attr} >= ?", cast_value_from(node))
       when 'lt'
-        value = DateTime.parse(value_from(tree))
-        User.where("#{attr} < ?", value)
+        User.where("#{attr} < ?", cast_value_from(node))
       when 'le'
-        value = DateTime.parse(value_from(tree))
-        User.where("#{attr} <= ?", value)
+        User.where("#{attr} <= ?", cast_value_from(node))
       else
         User.none
       end
     end
 
-    def self.result_for(tree)
-      new(SCIM::User::ATTRIBUTES).visit(tree)
+    def self.result_for(node)
+      new(SCIM::User::ATTRIBUTES).visit(node)
     end
 
     private
 
-    def value_from(tree)
-      tree[:value].to_s[1..-2]
+    def value_from(node)
+      node[:value].to_s[1..-2]
+    end
+
+    def cast_value_from(node)
+      DateTime.parse(value_from(node))
+    end
+
+    def attr_from(node)
+      attribute = node[:attribute].to_s
+      @attribute_mappings[attribute] || attribute
     end
   end
 end