Skip to content

Commit

Permalink
fix #4 ; add regex filter
Browse files Browse the repository at this point in the history
  • Loading branch information
syphax-bouazzouni committed Dec 29, 2021
1 parent 4523fd3 commit 89a8f66
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 18 deletions.
22 changes: 13 additions & 9 deletions lib/goo/base/filter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,50 +11,54 @@ def initialize(pattern)
end

def >(value)
@filter_tree << FILTER_TUPLE.new(:>,value)
@filter_tree << FILTER_TUPLE.new(:>, value)
self
end

def <(value)
@filter_tree << FILTER_TUPLE.new(:<,value)
@filter_tree << FILTER_TUPLE.new(:<, value)
self
end

def <=(value)
@filter_tree << FILTER_TUPLE.new(:<=,value)
@filter_tree << FILTER_TUPLE.new(:<=, value)
self
end

def >=(value)
@filter_tree << FILTER_TUPLE.new(:>=,value)
@filter_tree << FILTER_TUPLE.new(:>=, value)
self
end

def or(value)
@filter_tree << FILTER_TUPLE.new(:or,value)
@filter_tree << FILTER_TUPLE.new(:or, value)
self
end

def ==(value)
@filter_tree << FILTER_TUPLE.new(:==,value)
@filter_tree << FILTER_TUPLE.new(:==, value)
self
end

def and(value)
@filter_tree << FILTER_TUPLE.new(:and,value)
@filter_tree << FILTER_TUPLE.new(:and, value)
self
end

def unbound
@filter_tree << FILTER_TUPLE.new(:unbound,nil)
@filter_tree << FILTER_TUPLE.new(:unbound, nil)
self
end

def bound
@filter_tree << FILTER_TUPLE.new(:bound,nil)
@filter_tree << FILTER_TUPLE.new(:bound, nil)
self
end

def regex(value)
@filter_tree << FILTER_TUPLE.new(:regex, value)
self
end
end
end
end
25 changes: 16 additions & 9 deletions lib/goo/sparql/queries.rb
Original file line number Diff line number Diff line change
Expand Up @@ -131,22 +131,29 @@ def self.query_filter_sparql(klass,filter,filter_patterns,filter_graphs,
end
filter_var = inspected_patterns[filter_pattern_match]
if !filter_operation.value.instance_of?(Goo::Filter)
unless filter_operation.operator == :unbound || filter_operation.operator == :bound
case filter_operation.operator
when :unbound
filter_operations << "!BOUND(?#{filter_var.to_s})"
return :optional

when :bound
filter_operations << "BOUND(?#{filter_var.to_s})"
return :optional
when :regex
if filter_operation.value.is_a?(String)
filter_operations << "REGEX(?#{filter_var.to_s} , \"#{filter_operation.value.to_s}\")"
end

else
value = RDF::Literal.new(filter_operation.value)
if filter_operation.value.is_a? String
value = RDF::Literal.new(filter_operation.value, :datatype => RDF::XSD.string)
end
filter_operations << (
"?#{filter_var.to_s} #{sparql_op_string(filter_operation.operator)} " +
" #{value.to_ntriples}")
else
if filter_operation.operator == :unbound
filter_operations << "!BOUND(?#{filter_var.to_s})"
else
filter_operations << "BOUND(?#{filter_var.to_s})"
end
return :optional
" #{value.to_ntriples}")
end

else
filter_operations << "#{sparql_op_string(filter_operation.operator)}"
query_filter_sparql(klass,filter_operation.value,filter_patterns,
Expand Down

0 comments on commit 89a8f66

Please sign in to comment.