rdf-serializers 0.0.10 → 0.0.11

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: b3eefb3fefa363f766d3a84709471d7e89cf6bc73f6bcf8ad112f36b4da21b2d
4
- data.tar.gz: 7eb9282e4c581e7b2c0316667115a07c6054389147ad0f340dc8312c39254b01
3
+ metadata.gz: d375c9e57bfcdfcaf9bee6372abbf54ea974e1991a34936917e59c1ed67469a8
4
+ data.tar.gz: 0efed8bc77b7d97301d08ddaf5e5194c6234fd2c203bc1244d0269f06c81becf
5
5
  SHA512:
6
- metadata.gz: 8490b88c0abf65e096932fc3061dee4c7dc04591cdae1fddcb8a99dfe0f1579c3fded9e30f719fee447420f1f23258479589cf0735e430f8dfe5042644c584c9
7
- data.tar.gz: f0e3e87cbb50b888aaaadce341784bff28e7964ae22d2edb50461e75b6d074f772172b3fb3de6c18560da685960a909cc3be86a9111c32d6f5653a2530f9c076
6
+ metadata.gz: 6edcec3ce7990cb072e6211ce96452d12dd7c245de15177dffafac781b86e48b3f04e60e01af9853e8523a129cc84210c5e9ed3959a1c192c35184f7379a0f5f
7
+ data.tar.gz: 807766507554892c53f3dd0c9a3199a9d80b59f8b9c4ddb763b609d57727249f050797dfb55591837ce519b4b31fd3635be96fe14aae48e97dca72e01f997604
@@ -3,7 +3,7 @@
3
3
  module RDF
4
4
  module Serializers
5
5
  module DataTypeHelper
6
- def xsd_to_rdf(xsd, value, opts = {}) # rubocop:disable Metrics/CyclomaticComplexity, Metrics/MethodLength
6
+ def xsd_to_rdf(xsd, value, **opts) # rubocop:disable Metrics/CyclomaticComplexity, Metrics/MethodLength
7
7
  klass =
8
8
  case xsd
9
9
  when RDF::XSD[:anyURI]
@@ -28,7 +28,7 @@ module RDF
28
28
  RDF::Literal
29
29
  end
30
30
 
31
- klass.new(value, opts)
31
+ klass.new(value, **opts)
32
32
  end
33
33
  end
34
34
  end
@@ -20,7 +20,7 @@ module RDF
20
20
  resource_namespace = namespace_for(resource_class)
21
21
  serializer_name = serializer_from(resource_class)
22
22
 
23
- "#{resource_namespace}::#{serializer_name}"
23
+ "#{resource_namespace}::#{serializer_name}" if resource_namespace && serializer_name
24
24
  end
25
25
 
26
26
  # Uses the controller namespace of the resource to find the serializer
@@ -28,8 +28,7 @@ module RDF
28
28
  # Example:
29
29
  # Api::V3::AuthorsController => Api::V3::AuthorSerializer
30
30
  BY_NAMESPACE = lambda do |resource_class, namespace|
31
- resource_name = resource_class_name(resource_class)
32
- namespace ? "#{namespace}::#{resource_name}Serializer" : nil
31
+ (namespace && resource_class.name) ? "#{namespace}::#{resource_class_name(resource_class)}Serializer" : nil
33
32
  end
34
33
 
35
34
  DEFAULT = [
@@ -41,11 +40,11 @@ module RDF
41
40
  module_function
42
41
 
43
42
  def namespace_for(klass)
44
- klass.name.deconstantize
43
+ klass.name&.deconstantize
45
44
  end
46
45
 
47
46
  def resource_class_name(klass)
48
- klass.name.demodulize
47
+ klass.name&.demodulize
49
48
  end
50
49
 
51
50
  def serializer_from_resource_name(name)
@@ -54,7 +53,7 @@ module RDF
54
53
 
55
54
  def serializer_from(klass)
56
55
  name = resource_class_name(klass)
57
- serializer_from_resource_name(name)
56
+ serializer_from_resource_name(name) if name
58
57
  end
59
58
  end
60
59
  end
@@ -9,20 +9,25 @@ module RDF
9
9
  include FastJsonapi::ObjectSerializer
10
10
  include SerializationCore
11
11
 
12
+ included do
13
+ class_attribute :_statements
14
+ self._statements ||= []
15
+ end
16
+
12
17
  def dump(*args, **options)
13
18
  case args.first
14
19
  when :hndjson
15
20
  render_hndjson
16
21
  else
17
- render_repository(*args, options)
22
+ render_repository(*args, **options)
18
23
  end
19
24
  end
20
25
 
21
26
  def triples(*args, **options)
22
27
  if include_named_graphs?(*args)
23
- repository.triples(*args, options)
28
+ repository.triples(*args, **options)
24
29
  else
25
- repository.project_graph(nil).triples(*args, options)
30
+ repository.project_graph(nil).triples(*args, **options)
26
31
  end
27
32
  end
28
33
 
@@ -107,16 +112,16 @@ module RDF
107
112
  .join("\n")
108
113
  end
109
114
 
110
- def render_repository(*args, options)
115
+ def render_repository(*args, **options)
111
116
  if include_named_graphs?(*args)
112
- repository.dump(*args, options)
117
+ repository.dump(*args, **options)
113
118
  else
114
- repository.project_graph(nil).dump(*args, options)
119
+ repository.project_graph(nil).dump(*args, **options)
115
120
  end
116
121
  end
117
122
 
118
123
  def serializable_hextuples
119
- if is_collection?(@resource, @is_collection)
124
+ if self.class.is_collection?(@resource, @is_collection)
120
125
  hextuples_for_collection + meta_hextuples
121
126
  elsif !@resource
122
127
  []
@@ -153,6 +158,11 @@ module RDF
153
158
  serializer_for(association_class_name)
154
159
  end
155
160
 
161
+ def inherited(base)
162
+ super
163
+ base._statements = _statements.dup
164
+ end
165
+
156
166
  def serializer_for(name)
157
167
  associatopm_serializer = association_serializer_for(name)
158
168
  return associatopm_serializer if associatopm_serializer
@@ -164,6 +174,10 @@ module RDF
164
174
  'Consider specifying the serializer directly through options[:serializer].'
165
175
  end
166
176
  end
177
+
178
+ def statements(attribute)
179
+ self._statements << attribute
180
+ end
167
181
  end
168
182
  end
169
183
  end
@@ -30,7 +30,7 @@ module RDF
30
30
  options,
31
31
  respond_to?(:serializer_params, true) ? serializer_params : {}
32
32
  )
33
- RDF::Serializers.serializer_for(resource)&.new(resource, serializer_opts)&.dump(symbol, opts)
33
+ RDF::Serializers.serializer_for(resource)&.new(resource, serializer_opts)&.dump(symbol, **opts)
34
34
  end
35
35
  end
36
36
 
@@ -80,47 +80,38 @@ module RDF
80
80
 
81
81
  def get_included_records_hex(record, includes_list, known_included_objects, fieldsets, params = {})
82
82
  return unless includes_list.present?
83
+ return [] unless relationships_to_serialize
83
84
 
84
- includes_list.sort.each_with_object([]) do |include_item, included_records|
85
- items = parse_include_item(include_item)
86
- remaining_items = remaining_items(items)
85
+ includes_list = parse_includes_list(includes_list)
87
86
 
88
- items.each do |item|
89
- next unless relationships_to_serialize && relationships_to_serialize[item]
87
+ includes_list.each_with_object([]) do |include_item, included_records|
88
+ relationship_item = relationships_to_serialize[include_item.first]
90
89
 
91
- relationship_item = relationships_to_serialize[item]
92
- next unless relationship_item.include_relationship?(record, params)
90
+ next unless relationship_item&.include_relationship?(record, params)
93
91
 
94
- relationship_type = relationship_item.relationship_type
92
+ included_objects = Array(relationship_item.fetch_associated_object(record, params))
93
+ next if included_objects.empty?
95
94
 
96
- included_objects = relationship_item.fetch_associated_object(record, params)
97
- next if included_objects.blank?
95
+ static_serializer = relationship_item.static_serializer
96
+ static_record_type = relationship_item.static_record_type
98
97
 
99
- included_objects = [included_objects] unless relationship_type == :has_many
98
+ included_objects.each do |inc_obj|
99
+ serializer = static_serializer || relationship_item.serializer_for(inc_obj, params)
100
+ record_type = static_record_type || serializer.record_type
100
101
 
101
- static_serializer = relationship_item.static_serializer
102
- static_record_type = relationship_item.static_record_type
103
-
104
- included_objects.each do |inc_obj|
105
- serializer = static_serializer || relationship_item.serializer_for(inc_obj, params)
106
- record_type = static_record_type || serializer.record_type
107
-
108
- if remaining_items.present?
109
- serializer_records =
110
- serializer
111
- .get_included_records_hex(inc_obj, remaining_items, known_included_objects, fieldsets, params)
112
- included_records.concat(serializer_records) unless serializer_records.empty?
113
- end
102
+ if include_item.last.any?
103
+ serializer_records = serializer.get_included_records_hex(inc_obj, include_item.last, known_included_objects, fieldsets, params)
104
+ included_records.concat(serializer_records) unless serializer_records.empty?
105
+ end
114
106
 
115
- code = "#{record_type}_#{serializer.iri_from_record(inc_obj)}"
116
- next if known_included_objects.key?(code)
107
+ code = "#{record_type}_#{serializer.iri_from_record(inc_obj)}"
108
+ next if known_included_objects.include?(code)
117
109
 
118
- known_included_objects[code] = inc_obj
110
+ known_included_objects << code
119
111
 
120
- included_records.concat(
121
- serializer.record_hextuples(inc_obj, fieldsets[record_type], includes_list, params)
122
- )
123
- end
112
+ included_records.concat(
113
+ serializer.record_hextuples(inc_obj, fieldsets[record_type], includes_list, params)
114
+ )
124
115
  end
125
116
  end
126
117
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RDFSerializers
4
4
  module Version
5
- VERSION = '0.0.10'
5
+ VERSION = '0.0.11'
6
6
  end
7
7
  end
@@ -4,7 +4,6 @@ require 'fast_jsonapi'
4
4
 
5
5
  require 'rdf/serializers/lookup_chain'
6
6
  require 'rdf/serializers/config'
7
- require 'rdf/serializers/statements'
8
7
  require 'rdf/serializers/hextuple_serializer'
9
8
  require 'rdf/serializers/data_type_helper'
10
9
  require 'rdf/serializers/hdnjson_parser'
@@ -58,9 +57,7 @@ module RDF
58
57
  serializers_cache.fetch_or_store(cache_key) do
59
58
  # NOTE(beauby): When we drop 1.9.3 support we can lazify the map for perfs.
60
59
  lookup_chain = serializer_lookup_chain_for(klass, namespace)
61
- serializer_class = lookup_chain.map(&:safe_constantize).find do |x|
62
- x&.include?(FastJsonapi::SerializationCore)
63
- end
60
+ serializer_class = serializer_class_from_chain(lookup_chain)
64
61
 
65
62
  if serializer_class
66
63
  serializer_class
@@ -77,6 +74,16 @@ module RDF
77
74
  @serializers_cache ||= Concurrent::Map.new
78
75
  end
79
76
 
77
+ def serializer_class_from_chain(lookup_chain)
78
+ lookup_chain.map do |klass|
79
+ klass&.safe_constantize
80
+ rescue LoadError
81
+ nil
82
+ end.find do |klass|
83
+ klass&.include?(FastJsonapi::SerializationCore)
84
+ end
85
+ end
86
+
80
87
  def serializer_lookup_chain_for(klass, namespace = nil)
81
88
  lookups = config.serializer_lookup_chain
82
89
  Array[*lookups].flat_map do |lookup|
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rdf-serializers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arthur Dingemans
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-16 00:00:00.000000000 Z
11
+ date: 2021-11-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jsonapi-serializer
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 2.0.0
19
+ version: 2.1.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 2.0.0
26
+ version: 2.1.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: oj
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -91,7 +91,6 @@ files:
91
91
  - lib/rdf/serializers/renderers.rb
92
92
  - lib/rdf/serializers/scalar.rb
93
93
  - lib/rdf/serializers/serialization_core.rb
94
- - lib/rdf/serializers/statements.rb
95
94
  - lib/rdf/serializers/version.rb
96
95
  homepage: https://github.com/ontola/rdf-serializers
97
96
  licenses:
@@ -112,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
112
111
  - !ruby/object:Gem::Version
113
112
  version: '0'
114
113
  requirements: []
115
- rubygems_version: 3.1.2
114
+ rubygems_version: 3.2.22
116
115
  signing_key:
117
116
  specification_version: 4
118
117
  summary: Adds RDF serialization, like n-triples or turtle, to active model serializers
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RDF
4
- module Serializers
5
- module Statements
6
- extend ActiveSupport::Concern
7
-
8
- included do
9
- class_attribute :_statements
10
- self._statements ||= []
11
- end
12
-
13
- module ClassMethods
14
- def inherited(base)
15
- super
16
- base._statements = _statements.dup
17
- end
18
-
19
- def statements(attribute)
20
- self._statements << attribute
21
- end
22
- end
23
- end
24
- end
25
- end
26
-
27
- FastJsonapi::ObjectSerializer.include(RDF::Serializers::Statements)