solis 0.112.0 → 0.113.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: 250f917e5faee6c5f5babc190c2f225defe07b9a32f53908e929b81714b61908
4
+ data.tar.gz: ed611b0714eada966c6b9e82e1b44aabfbd45563ceead625ad249d5896f7583e
5
5
  SHA512:
6
- metadata.gz: b16d71df6f49cf0de1ca943ed09f35c26e14cc648490806bc93c2e3f49af9cb50249740ac4e7a0ef8eec84c7986d24cbaa99bf6677c91fcaaa657717ef0ce8f8
7
- data.tar.gz: 27dcfd4b835b56eff1993147dccdc6585ee6c80e349fa85a719d8ae054d7f44de0d499fc9ef54fc1850ce45ccf7aa6c1ea5bd8b206f88d72b5eb163695fe9611
6
+ metadata.gz: 29050d4e0148efb7cc7992d1fbd75902290a6f35c16f528eb35aafe2a3d65cb02657c148c02daefe3123145b22fad24238f8e377fed0e9b5317567e8aabd65d7
7
+ data.tar.gz: d18917f52c79246927e8235f0ae1eacaf769b361c661294319ad03e09848ad4459dfc0159115a0fc403ace2c7c8efcc79aa48b84ae2a3b26471dd9efa7262c70
@@ -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)
data/lib/solis/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Solis
2
- VERSION = "0.112.0"
2
+ VERSION = "0.113.0"
3
3
  end
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.113.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mehmet Celik