solis 0.112.0 → 0.114.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 82dc7ade3450fb0d7de47a78457de162ed2cde0b4fd9e565ce54086d75e34b70
4
- data.tar.gz: aa17c95bdf3d1f4b9e2f15da30934c2e56825871714d8e48cbd61601ca7efa76
3
+ metadata.gz: 0c79cee8453b41aeab243fc45e69132a9192f9bc3481b447e68db95895d8e1e2
4
+ data.tar.gz: 1afd13dbd1e5e95505f5363766c829730e88d56e3e89471b8f770044f4e8b6e8
5
5
  SHA512:
6
- metadata.gz: b16d71df6f49cf0de1ca943ed09f35c26e14cc648490806bc93c2e3f49af9cb50249740ac4e7a0ef8eec84c7986d24cbaa99bf6677c91fcaaa657717ef0ce8f8
7
- data.tar.gz: 27dcfd4b835b56eff1993147dccdc6585ee6c80e349fa85a719d8ae054d7f44de0d499fc9ef54fc1850ce45ccf7aa6c1ea5bd8b206f88d72b5eb163695fe9611
6
+ metadata.gz: 1e8fc91acdcf2f17f029907895be2ea35b3e0813aca875dc6f46f3787907ec7a02b66c8c46d012eb4e7f65e1920035e9eb57d576751c474ac6078c73963ee3aa
7
+ data.tar.gz: 1ba7210919daa84eed4be4994515834c0561f5d22f1d03ddb18f78cffb499be1f0c400946f10f5f8792437098f6cd204cb8ad0741bbf93aa9f55f54156d4c022
data/lib/solis/model.rb CHANGED
@@ -22,7 +22,16 @@ module Solis
22
22
  end
23
23
 
24
24
  if self.class.metadata[:attributes][attribute.to_s][:node_kind].is_a?(RDF::URI) && value.is_a?(Hash)
25
- inner_model = self.class.graph.shape_as_model(self.class.metadata[:attributes][attribute.to_s][:datatype].to_s)
25
+ inner_class = self.class.metadata[:attributes][attribute.to_s][:datatype].to_s
26
+ inner_model = self.class.graph.shape_as_model(inner_class)
27
+
28
+ if value.key?('id') && value['id'].match?(self.class.graph_name)
29
+ inner_class = value['id'].gsub(self.class.graph_name, '').split('/').first.classify.to_s
30
+ if inner_model.descendants.map(&:to_s).include?(inner_class)
31
+ inner_model = self.class.graph.shape_as_model(inner_class)
32
+ end
33
+ end
34
+
26
35
  value = inner_model.new(value)
27
36
  elsif self.class.metadata[:attributes][attribute.to_s][:node_kind].is_a?(RDF::URI) && value.is_a?(Array)
28
37
  new_value = []
@@ -89,6 +89,9 @@ module Solis
89
89
  v=normalize_string(v)
90
90
  filter = "filter( !exists {?concept <#{@model.class.graph_name}id> \"#{v}\"})"
91
91
  end
92
+ elsif ['>', '<', '>=', '<='].include?(value[:operator])
93
+ v = normalize_string(value[:value].first)
94
+ filter = "?concept <#{@model.class.graph_name}id> ?__search FILTER (?__search #{value[:operator]} \"#{v}\") .\n"
92
95
  else
93
96
  filter = "?concept <#{@model.class.graph_name}id> ?__search FILTER (?__search IN(#{contains})) .\n"
94
97
  end
@@ -106,15 +106,28 @@ class Solis::Query::Runner
106
106
  end
107
107
 
108
108
  def self.find_root_subjects(grouped, entity)
109
- # Find subjects that match the requested entity type
110
- grouped.select do |subject, triples|
109
+ # Build set of acceptable type names (entity + all subtypes via hierarchy)
110
+ acceptable_types = Set.new([entity, entity.downcase, entity.tableize])
111
+
112
+ begin
113
+ model = Solis::Options.instance.get[:solis].shape_as_model(entity)
114
+ ObjectSpace.each_object(Class)
115
+ .select { |klass| klass < model }
116
+ .reject { |m| m.metadata.nil? }
117
+ .each do |desc|
118
+ name = desc.name.demodulize
119
+ acceptable_types.merge([name, name.downcase, name.tableize])
120
+ end
121
+ rescue; end
122
+
123
+ grouped.select do |_subject, triples|
111
124
  type_triple = triples.find { |t| t[:predicate] == RDF::RDFV.type }
112
125
  next false unless type_triple
113
126
 
114
127
  type_name = type_triple[:object].to_s.split('/').last
115
- type_name.downcase == entity.downcase ||
116
- type_name.tableize == entity.tableize ||
117
- type_name == entity
128
+ acceptable_types.include?(type_name) ||
129
+ acceptable_types.include?(type_name.downcase) ||
130
+ acceptable_types.include?(type_name.tableize)
118
131
  end.keys
119
132
  end
120
133
 
@@ -149,9 +162,13 @@ class Solis::Query::Runner
149
162
  next if key.start_with?('@') # Skip internal markers
150
163
  next if key == '_id' || key == 'id' # Already added
151
164
 
152
- if obj.key?('@type') &&Solis::Options.instance.get[:solis].shape?(obj['@type'])
153
- entity = Solis::Options.instance.get[:solis].shape_as_model(obj['@type'])
154
- entity_maxcount = entity.metadata[:attributes][key][:maxcount]
165
+ begin
166
+ if obj.key?('@type') && Solis::Options.instance.get[:solis].shape?(obj['@type'])
167
+ entity = Solis::Options.instance.get[:solis].shape_as_model(obj['@type'])
168
+ entity_maxcount = entity.metadata[:attributes][key][:maxcount]
169
+ end
170
+ rescue
171
+ entity_maxcount = nil
155
172
  end
156
173
  resolved_value = resolve_value(value, objects_index, max_depth, visited, current_depth)
157
174
  resolved_value = [resolved_value] if (entity_maxcount.nil? || entity_maxcount > 1) && !resolved_value.is_a?(Array)
@@ -44,10 +44,10 @@ module Solis
44
44
  big_decimal: [:eq, :not_eq, :gt, :lt],
45
45
  date: [:eq, :not_eq, :gt, :gte, :lt, :lte],
46
46
  boolean: [:eq, :not_eq],
47
- uuid: [:eq, :not_eq],
47
+ uuid: [:eq, :not_eq, :gt, :lt],
48
48
  enum: [:eq],
49
49
  datetime: [:eq, :not_eq, :gt, :lt],
50
- anyuri: [:eq, :not_eq],
50
+ anyuri: [:eq, :not_eq, :gt, :lt],
51
51
  }
52
52
  end
53
53
 
@@ -106,6 +106,7 @@ module Solis
106
106
  alias :filter_uuid_gt :filter_gt
107
107
  alias :filter_enum_gt :filter_gt
108
108
  alias :filter_datetime_gt :filter_gt
109
+ alias :filter_anyuri_gt :filter_gt
109
110
 
110
111
  def filter_not_gt(scope, attribute, value)
111
112
  filter_eq(scope, attribute, value, true, '>')
@@ -134,6 +135,7 @@ module Solis
134
135
  alias :filter_uuid_lt :filter_lt
135
136
  alias :filter_enum_lt :filter_lt
136
137
  alias :filter_datetime_lt :filter_lt
138
+ alias :filter_anyuri_lt :filter_lt
137
139
 
138
140
  def filter_not_lt(scope, attribute, value)
139
141
  filter_eq(scope, attribute, value, true, '<')
data/lib/solis/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Solis
2
- VERSION = "0.112.0"
2
+ VERSION = "0.114.0"
3
3
  end
data/solis.gemspec CHANGED
@@ -28,7 +28,7 @@ Gem::Specification.new do |spec|
28
28
  spec.require_paths = ['lib']
29
29
 
30
30
  spec.add_runtime_dependency 'activesupport', '~> 8.0'
31
- spec.add_runtime_dependency 'http', '~> 5.2'
31
+ spec.add_runtime_dependency 'http', '~> 5.3'
32
32
  spec.add_runtime_dependency 'graphiti', '~> 1.8'
33
33
  spec.add_runtime_dependency 'moneta', '~> 1.6'
34
34
  spec.add_runtime_dependency 'linkeddata', '~> 3.3'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solis
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.112.0
4
+ version: 0.114.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mehmet Celik
@@ -29,14 +29,14 @@ dependencies:
29
29
  requirements:
30
30
  - - "~>"
31
31
  - !ruby/object:Gem::Version
32
- version: '5.2'
32
+ version: '5.3'
33
33
  type: :runtime
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '5.2'
39
+ version: '5.3'
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: graphiti
42
42
  requirement: !ruby/object:Gem::Requirement