54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
# File 'lib/easy_sparql.rb', line 54
def find_all_by_sparql(query, params = {})
to_map = query.values.map { |symbol, var| symbol }
results = query.execute
objects = {}
results.each do |result|
if params[:key] and result[params[:key]]
key = result[params[:key]]
else
key = SecureRandom.uuid
end
object = (objects.has_key? key) ? objects[key] : new
to_map.each do |symbol|
unless symbol == params[:key]
value = result[symbol]
if value and value.literal?
value = value.object
end
setter = (symbol.to_s + '=').to_sym
old_val = object.send(symbol)
if old_val and old_val.kind_of? Array
new_val = (old_val + [value])
elsif old_val
new_val = [old_val, value]
else
new_val = value
end
object.send(setter, new_val)
end
end
objects[key] = object
end
objects.values
end
|