rdf 3.2.3 → 3.2.6

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.
@@ -5,7 +5,14 @@ module RDF
5
5
  # A {Vocabulary} can also serve as a Domain Specific Language (DSL) for generating an RDF Graph definition for the vocabulary (see {RDF::Vocabulary#to_enum}).
6
6
  #
7
7
  # ### Defining a vocabulary using the DSL
8
- # Vocabularies can be defined based on {RDF::Vocabulary} or {RDF::StrictVocabulary} using a simple Domain Specific Language (DSL). Terms of the vocabulary are specified using either `property` or `term` (alias), with the attributes of the term listed in a hash. See {property} for description of the hash.
8
+ # Vocabularies can be defined based on {RDF::Vocabulary} or {RDF::StrictVocabulary} using a simple Domain Specific Language (DSL).
9
+ #
10
+ # * Ontology information for the vocabulary itself can be specified using the {ontology} method.
11
+ # * Terms of the vocabulary are specified using either `property` or `term` (alias), with the attributes of the term listed in a hash. See {property} for description of the hash. Term attributes become properties of the associated {RDF::Vocabulary::Term} (see {RDF::Vocabulary::Term#attributes}).
12
+ #
13
+ # Note that, by default, the prefix associated with the vocabulary for forming and interpreting PNames is created from the class name of the vocabulary. See {\_\_prefix\_\_=} for overriding this at runtime.
14
+ #
15
+ # The simplest way to generate a DSL representation of a vocabulary is using {RDF::Vocabulary::Writer} given an {RDF::Graph} representation of the vocabulary.
9
16
  #
10
17
  # ### Vocabularies:
11
18
  #
@@ -31,6 +38,31 @@ module RDF
31
38
  # foaf.knows #=> RDF::URI("http://xmlns.com/foaf/0.1/knows")
32
39
  # foaf[:name] #=> RDF::URI("http://xmlns.com/foaf/0.1/name")
33
40
  # foaf['mbox'] #=> RDF::URI("http://xmlns.com/foaf/0.1/mbox")
41
+ #
42
+ # @example Defining a simple vocabulary
43
+ # EX = Class.new(RDF::StrictVocabulay("http://example/ns#")) do
44
+ # # Ontology definition
45
+ # ontology :"http://example/ns#",
46
+ # label: "The RDF Example Vocablary",
47
+ # type: "http://www.w3.org/2002/07/owl#Ontology"
48
+ #
49
+ # # Class definitions
50
+ # term :Class,
51
+ # label: "My Class",
52
+ # comment: "Good to use as an example",
53
+ # type: "rdfs:Class",
54
+ # subClassOf: "http://example/SuperClass",
55
+ # "ex:prop": "Some annotation property not having a shortcut"
56
+ #
57
+ # # Property definitions
58
+ # property :prop,
59
+ # comment: "A description of the property",
60
+ # label: "property",
61
+ # domain: "http://example/ns#Class",
62
+ # range: "rdfs:Literal",
63
+ # isDefinedBy: %(ex:),
64
+ # type: "rdf:Property"
65
+ # end
34
66
  #
35
67
  # @example Method calls are converted to the typical RDF camelcase convention
36
68
  # foaf = RDF::Vocabulary.new("http://xmlns.com/foaf/0.1/")
@@ -44,15 +76,6 @@ module RDF
44
76
  # graph = RDF::Graph.new << RDF::RDFS.to_enum
45
77
  # graph.dump(:ntriples)
46
78
  #
47
- # @example Defining a simple vocabulary
48
- # class EX < RDF::StrictVocabulay("http://example/ns#")
49
- # term :Class,
50
- # label: "My Class",
51
- # comment: "Good to use as an example",
52
- # "rdf:type" => "rdfs:Class",
53
- # "rdfs:subClassOf" => "http://example/SuperClass"
54
- # end
55
- #
56
79
  # @see https://www.w3.org/TR/rdf-sparql-query/#prefNames
57
80
  class Vocabulary
58
81
  extend ::Enumerable
@@ -176,16 +199,28 @@ module RDF
176
199
  # @return [RDF::Vocabulary::Term]
177
200
  #
178
201
  # @overload property(name, options)
179
- # Defines a new property or class in the vocabulary.
202
+ # Defines a new property or class in the vocabulary as a {RDF::Vocabulary::Term}.
180
203
  #
181
204
  # @example A simple term definition
182
205
  # property :domain,
183
- # comment: %(A domain of the subject property.).freeze,
184
- # domain: "rdf:Property".freeze,
185
- # label: "domain".freeze,
186
- # range: "rdfs:Class".freeze,
187
- # isDefinedBy: %(rdfs:).freeze,
188
- # type: "rdf:Property".freeze
206
+ # comment: %(A domain of the subject property.),
207
+ # domain: "rdf:Property",
208
+ # label: "domain",
209
+ # range: "rdfs:Class",
210
+ # isDefinedBy: %(rdfs:),
211
+ # type: "rdf:Property"
212
+ #
213
+ # @example A term definition with tagged values
214
+ # property :actor,
215
+ # comment: {en: "Subproperty of as:attributedTo that identifies the primary actor"},
216
+ # domain: "https://www.w3.org/ns/activitystreams#Activity",
217
+ # label: {en: "actor"},
218
+ # range: term(
219
+ # type: "http://www.w3.org/2002/07/owl#Class",
220
+ # unionOf: list("https://www.w3.org/ns/activitystreams#Object", "https://www.w3.org/ns/activitystreams#Link")
221
+ # ),
222
+ # subPropertyOf: "https://www.w3.org/ns/activitystreams#attributedTo",
223
+ # type: "http://www.w3.org/2002/07/owl#ObjectProperty"
189
224
  #
190
225
  # @example A SKOS term with anonymous values
191
226
  # term: :af,
@@ -204,76 +239,8 @@ module RDF
204
239
  # "foaf:name": "Aland Islands"
205
240
  #
206
241
  # @param [String, #to_s] name
207
- # @param [Hash{Symbol=>String,Array<String,Term>}] options
208
- # Any other values are expected to expands to a {URI} using built-in vocabulary prefixes. The value is a `String`, `Array<String>` or `Array<Term>` which is interpreted according to the `range` of the associated property.
209
- # @option options [String, Array<String,Term>] :type
210
- # Shortcut for `rdf:type`, values are interpreted as a {Term}.
211
- # @option options [String, Array<String>] :comment
212
- # Shortcut for `rdfs:comment`, values are interpreted as a {Literal}.
213
- # @option options [String, Array<String,Term>] :domain
214
- # Shortcut for `rdfs:domain`, values are interpreted as a {Term}.
215
- # @option options [String, Array<String,Term>] :isDefinedBy
216
- # Shortcut for `rdfs:isDefinedBy`, values are interpreted as a {Term}.
217
- # @option options [String, Array<String>] :label
218
- # Shortcut for `rdfs:label`, values are interpreted as a {Literal}.
219
- # @option options [String, Array<String,Term>] :range
220
- # Shortcut for `rdfs:range`, values are interpreted as a {Term}.
221
- # @option options [String, Array<String,Term>] :subClassOf
222
- # Shortcut for `rdfs:subClassOf`, values are interpreted as a {Term}.
223
- # @option options [String, Array<String,Term>] :subPropertyOf
224
- # Shortcut for `rdfs:subPropertyOf`, values are interpreted as a {Term}.
225
- # @option options [String, Array<String,Term>] :allValuesFrom
226
- # Shortcut for `owl:allValuesFrom`, values are interpreted as a {Term}.
227
- # @option options [String, Array<String,Term>] :cardinality
228
- # Shortcut for `owl:cardinality`, values are interpreted as a {Literal}.
229
- # @option options [String, Array<String,Term>] :equivalentClass
230
- # Shortcut for `owl:equivalentClass`, values are interpreted as a {Term}.
231
- # @option options [String, Array<String,Term>] :equivalentProperty
232
- # Shortcut for `owl:equivalentProperty`, values are interpreted as a {Term}.
233
- # @option options [String, Array<String,Term>] :intersectionOf
234
- # Shortcut for `owl:intersectionOf`, values are interpreted as a {Term}.
235
- # @option options [String, Array<String,Term>] :inverseOf
236
- # Shortcut for `owl:inverseOf`, values are interpreted as a {Term}.
237
- # @option options [String, Array<String,Term>] :maxCardinality
238
- # Shortcut for `owl:maxCardinality`, values are interpreted as a {Literal}.
239
- # @option options [String, Array<String,Term>] :minCardinality
240
- # Shortcut for `owl:minCardinality`, values are interpreted as a {Literal}.
241
- # @option options [String, Array<String,Term>] :onProperty
242
- # Shortcut for `owl:onProperty`, values are interpreted as a {Term}.
243
- # @option options [String, Array<String,Term>] :someValuesFrom
244
- # Shortcut for `owl:someValuesFrom`, values are interpreted as a {Term}.
245
- # @option options [String, Array<String,Term>] :unionOf
246
- # Shortcut for `owl:unionOf`, values are interpreted as a {Term}.
247
- # @option options [String, Array<String,Term>] :domainIncludes
248
- # Shortcut for `schema:domainIncludes`, values are interpreted as a {Term}.
249
- # @option options [String, Array<String,Term>] :rangeIncludes
250
- # Shortcut for `schema:rangeIncludes`, values are interpreted as a {Term}.
251
- # @option options [String, Array<String>] :altLabel
252
- # Shortcut for `skos:altLabel`, values are interpreted as a {Literal}.
253
- # @option options [String, Array<String,Term>] :broader
254
- # Shortcut for `skos:broader`, values are interpreted as a {Term}.
255
- # @option options [String, Array<String>] :definition
256
- # Shortcut for `skos:definition`, values are interpreted as a {Literal}.
257
- # @option options [String, Array<String>] :editorialNote
258
- # Shortcut for `skos:editorialNote`, values are interpreted as a {Literal}.
259
- # @option options [String, Array<String,Term>] :exactMatch
260
- # Shortcut for `skos:exactMatch`, values are interpreted as a {Term}.
261
- # @option options [String, Array<String,Term>] :hasTopConcept
262
- # Shortcut for `skos:hasTopConcept`, values are interpreted as a {Term}.
263
- # @option options [String, Array<String,Term>] :inScheme
264
- # Shortcut for `skos:inScheme`, values are interpreted as a {Term}.
265
- # @option options [String, Array<String,Term>] :member
266
- # Shortcut for `skos:member`, values are interpreted as a {Term}.
267
- # @option options [String, Array<String,Term>] :narrower
268
- # Shortcut for `skos:narrower`, values are interpreted as a {Term}.
269
- # @option options [String, Array<String>] :notation
270
- # Shortcut for `skos:notation`, values are interpreted as a {Literal}.
271
- # @option options [String, Array<String>] :note
272
- # Shortcut for `skos:note`, values are interpreted as a {Literal}.
273
- # @option options [String, Array<String>] :prefLabel
274
- # Shortcut for `skos:prefLabel`, values are interpreted as a {Literal}.
275
- # @option options [String, Array<String,Term>] :related
276
- # Shortcut for `skos:related`, values are interpreted as a {Term}.
242
+ # @param [Hash{Symbol=>String,Array<String>}] options
243
+ # Any other values are expected to expands to a {URI} using built-in vocabulary prefixes. The value is a `String`, 'Hash{Symbol=>String,Array<String>}' or `Array<String,Hash{Symbol=>Array<String>}>` which is interpreted according to the `range` of the associated property and by heuristically determining the value datatype. See `attributes` argument to {Term#initialize}.
277
244
  # @return [RDF::Vocabulary::Term]
278
245
  def property(*args)
279
246
  case args.length
@@ -286,15 +253,6 @@ module RDF
286
253
  uri_str = [to_s, name.to_s].join('')
287
254
  URI.cache.delete(uri_str.to_sym) # Clear any previous entry
288
255
 
289
- # Transform attribute keys that are PNames with a warning
290
- # FIXME: add back later
291
- #if !@is_deprecated && options.is_a?(Hash) &&
292
- # options.keys.map(&:to_s).any? {|k| k.include?(':') && !k.match?(/^https?:/)}
293
- #
294
- # @is_deprecated = true
295
- # warn "[DEPRECATION] Vocabulary #{to_uri} includes pname attribute keys, regenerate"
296
- #end
297
-
298
256
  # Term attributes passed in a block for lazy evaluation. This helps to avoid load-time circular dependencies
299
257
  prop = Term.intern(uri_str, vocab: self, attributes: options || {})
300
258
  props[name.to_sym] = prop
@@ -389,7 +347,7 @@ module RDF
389
347
  return pname unless pname.is_a?(String) || pname.is_a?(Symbol)
390
348
  prefix, suffix = pname.to_s.split(":", 2)
391
349
  # Unescape escaped PN_ESCAPE_CHARS
392
- if suffix.match?(/\\#{RDF::URI::PN_ESCAPE_CHARS}/)
350
+ if suffix.match?(RDF::URI::PN_ESCAPES)
393
351
  suffix = suffix.gsub(RDF::URI::PN_ESCAPES) {|matched| matched[1..-1]}
394
352
  end
395
353
  if prefix == "rdf"
@@ -563,10 +521,6 @@ module RDF
563
521
  statement.predicate.to_s.to_sym
564
522
  end
565
523
 
566
- # Skip literals other than plain or english
567
- # This is because the ruby representation does not preserve language
568
- next if statement.object.literal? && (statement.object.language || :en).to_s !~ /^en-?/
569
-
570
524
  (term[key] ||= []) << statement.object
571
525
  end
572
526
 
@@ -580,7 +534,6 @@ module RDF
580
534
  term_defs
581
535
  end
582
536
 
583
- #require 'byebug'; byebug
584
537
  # Pass over embedded_defs with anonymous references, once
585
538
  embedded_defs.each do |term, attributes|
586
539
  attributes.each do |ak, avs|
@@ -963,6 +916,10 @@ module RDF
963
916
  #
964
917
  # Symbols which are accessors may also be looked up by their associated URI.
965
918
  #
919
+ # Values may be Strings, Hash (Map), or Terms, or an Array including a combination of these. A Hash (Map) is used to create a datatype/language map to one or more string values which represent either datatyped literals, or language-tagged literals as interpreted by {#attribute_value}.
920
+ #
921
+ # In general, this accessor is used internally. The {#properties} method interprets these values as {RDF::Value}.
922
+ #
966
923
  # @note lookup by PName is DEPRECATED and will be removed in a future version.
967
924
  #
968
925
  # @example looking up term label
@@ -971,23 +928,23 @@ module RDF
971
928
  # RDF::RDFS.Literal.attributes[RDF::RDFS.label] #=> "Literal"
972
929
  # RDF::RDFS.Literal.attributes["http://www.w3.org/2000/01/rdf-schema#label"] #=> "Literal"
973
930
  # RDF::RDFS.Literal.attributes[:"http://www.w3.org/2000/01/rdf-schema#label"] #=> "Literal"
974
- # @return [Hash{Symbol,Resource => Term, #to_s}]
931
+ # @return [Hash{Symbol => String, Term, Hash{Symbol => String}, Array<String, Term, Hash{Symbol => String}>}]
932
+ # @see #properties
975
933
  attr_reader :attributes
976
934
 
977
935
  ##
978
- # @overload new(uri, attributes:, **options)
936
+ # @overload new(uri, attributes:, vocab:, **options)
979
937
  # @param [URI, String, #to_s] uri
980
938
  # @param [Vocabulary] vocab Vocabulary of this term.
981
- # @param [Hash{Symbol => Symbol,Array<String,Term>}] attributes ({})
939
+ # @param [Hash{Symbol => String,Term,Hash{Symbol=>String,Array<String>},Array<String>}] attributes ({})
982
940
  # Attributes of this vocabulary term, used for finding `label` and `comment` and to serialize the term back to RDF. See {#attributes} and {#properties} for other ways to access.
983
941
  # @param [Hash{Symbol => Object}] options
984
942
  # Options from {URI#initialize}
985
943
  #
986
- # @overload new(attributes:, **options)
987
- # @param [Hash{Symbol => Object}] options
944
+ # @overload new(attributes:, vocab:, **options)
988
945
  # @param [Vocabulary] vocab Vocabulary of this term.
989
- # @param [Hash{Symbol => Symbol,Array<String,Term>}] attributes ({})
990
- # Attributes of this vocabulary term, used for finding `label` and `comment` and to serialize the term back to RDF. See {#attributes} and {#properties} for other ways to access.
946
+ # @param [Hash{Symbol => String,Term,Hash{Symbol=>String,Array<String>},Array<String>}] attributes ({})
947
+ # Attributes of this vocabulary term, used for finding `label`, `comment` and other term properties, and to serialize the term back to RDF. See {#attributes} and {#properties} for other ways to access.
991
948
  # @param [Hash{Symbol => Object}] options
992
949
  # Options from {URI#initialize}
993
950
  def self.new(*args, vocab: nil, attributes: {}, **options)
@@ -1110,7 +1067,7 @@ module RDF
1110
1067
 
1111
1068
  ##
1112
1069
  # Enumerate attributes with values transformed into {RDF::Value} instances
1113
- # Uses an empty hash with a default_proc which looks up values in attributes.
1070
+ # Uses an empty hash with a default_proc which looks up values in attributes. The prevents specific attributes from being evaluated until acessed.
1114
1071
  #
1115
1072
  # Properties are indexed by symbol. Symbols directly interpreted by a term are the accessors defined for the {RDF::Vocabulary::Term} class, also in {Term::ATTR_URIs}. Other keys are interpreted as absolute URIs or PNames for properties defined on this term.
1116
1073
  #
@@ -1127,12 +1084,27 @@ module RDF
1127
1084
  # RDF::RDFS.Literal.properties[:"http://www.w3.org/2000/01/rdf-schema#label"] #=> RDF::Literal("Literal")
1128
1085
  #
1129
1086
  # @return [Hash{Symbol => Array<RDF::Value>}]
1087
+ # @see #attribute_value
1130
1088
  def properties
1131
1089
  Hash.new {|hash, key| attribute_value(key)}
1132
1090
  end
1133
1091
 
1134
1092
  ##
1135
- # Values of an attributes as {RDF::Value}
1093
+ # Values of an attributes as {RDF::Value}.
1094
+ #
1095
+ # Attribute values are returned as either an {RDF::Value} or {Array<RDf::Value} if there is more than one value.
1096
+ #
1097
+ # Attribute values which are not already a {RDF::Value} (including strings and symbols) are converted by a heuristic loookup as follows:
1098
+ #
1099
+ # * An {RDF::URI} if it can be turned into a valid IRI using {RDF::Vocabulary.expand_pname}. This includes IRIs already in non-relative form.
1100
+ # * A {Hash{Symbol=>String,Array<String>}} is interpreted as a datatype/language map. If the key contains a ':', it is treated as a PName or IRI datatype applied to the values. Otherwise, it is treated as a language-tag applied to the values.
1101
+ # * {RDF::Literal::Date} if valid,
1102
+ # * {RDF::Literal::DateTime} if valid,
1103
+ # * {RDF::Literal::Integer} if valid,
1104
+ # * {RDF::Literal::Decimal} if valid,
1105
+ # * {RDF::Literal::Double} if valid,
1106
+ # * {RDF::Literal::Boolean} if valid
1107
+ # * Otherwise, {RDF::Literal} where type may be inferred by the class of the value.
1136
1108
  #
1137
1109
  # @param [Symbol] prop
1138
1110
  # @return [RDF::Value, Array<RDF::Value>]
@@ -1144,9 +1116,22 @@ module RDF
1144
1116
  v = value.is_a?(Symbol) ? value.to_s : value
1145
1117
  value = (RDF::Vocabulary.expand_pname(v) rescue nil) if v.is_a?(String) && v.include?(':')
1146
1118
  value = value.to_uri if value.respond_to?(:to_uri)
1147
- unless value.is_a?(RDF::Value) && value.valid?
1119
+ value = if value.is_a?(RDF::Value) && value.valid?
1120
+ value
1121
+ elsif value.is_a?(Hash)
1122
+ # type/language map
1123
+ value.inject([]) do |memo, (k,v)|
1124
+ vv = [v] unless v.is_a?(Array)
1125
+ memo << if k.to_s.include?(':')
1126
+ dt = RDF::Vocabulary.expand_pname(v) rescue nil
1127
+ vv.map {|val| RDF::Literal(val, datatype: dt)}
1128
+ else
1129
+ vv.map {|val| RDF::Literal(val, language: k)}
1130
+ end
1131
+ end.flatten.compact.select(&:valid?)
1132
+ else
1148
1133
  # Use as most appropriate literal
1149
- value = [
1134
+ [
1150
1135
  RDF::Literal::Date,
1151
1136
  RDF::Literal::DateTime,
1152
1137
  RDF::Literal::Integer,
@@ -1161,9 +1146,7 @@ module RDF
1161
1146
  end
1162
1147
  end
1163
1148
  end
1164
-
1165
- value
1166
- end
1149
+ end.flatten
1167
1150
 
1168
1151
  prop_values.length <= 1 ? prop_values.first : prop_values
1169
1152
  end
@@ -1247,7 +1230,9 @@ module RDF
1247
1230
  rangeIncludes
1248
1231
  end
1249
1232
 
1250
- # Serialize back to a Ruby source initializer
1233
+ ##
1234
+ # Serialize back to a Ruby source initializer. This is used primarily by {RDF::Vocabulary::Writer}.
1235
+ #
1251
1236
  # @param [String] indent
1252
1237
  # @return [String]
1253
1238
  def to_ruby(indent: "")
@@ -1259,24 +1244,24 @@ module RDF
1259
1244
  values = [values].compact unless values.is_a?(Array)
1260
1245
  values = values.map do |value|
1261
1246
  if value.is_a?(Literal) && %w(: comment definition notation note editorialNote).include?(k.to_s)
1262
- "%(#{value.to_s.gsub('(', '\(').gsub(')', '\)')}).freeze"
1247
+ "%(#{value.to_s.gsub('(', '\(').gsub(')', '\)')})"
1263
1248
  elsif value.node? && value.is_a?(RDF::Vocabulary::Term)
1264
- "#{value.to_ruby(indent: indent + " ")}.freeze"
1249
+ "#{value.to_ruby(indent: indent + " ")}"
1265
1250
  elsif value.is_a?(RDF::Term)
1266
- "#{value.to_s.inspect}.freeze"
1251
+ "#{value.to_s.inspect}"
1267
1252
  elsif value.is_a?(RDF::List)
1268
1253
  list_elements = value.map do |u|
1269
1254
  if u.uri?
1270
- "#{u.to_s.inspect}.freeze"
1255
+ "#{u.to_s.inspect}"
1271
1256
  elsif u.node? && u.respond_to?(:to_ruby)
1272
1257
  u.to_ruby(indent: indent + " ")
1273
1258
  else
1274
- "#{u.to_s.inspect}.freeze"
1259
+ "#{u.to_s.inspect}"
1275
1260
  end
1276
1261
  end
1277
1262
  "list(#{list_elements.join(', ')})"
1278
1263
  else
1279
- "#{value.inspect}.freeze"
1264
+ "#{value.inspect}"
1280
1265
  end
1281
1266
  end
1282
1267
  "#{k.to_s.include?(':') ? k.to_s.inspect : k}: " +
@@ -1340,7 +1325,7 @@ module RDF
1340
1325
  def [](name)
1341
1326
  props.fetch(name.to_sym)
1342
1327
  rescue KeyError
1343
- raise KeyError, "#{name} not found in vocabulary #{self.__name__}"
1328
+ raise KeyError, "#{name.inspect} not found in vocabulary #{self.__name__}"
1344
1329
  end
1345
1330
  end
1346
1331
  end # StrictVocabulary
data/lib/rdf.rb CHANGED
@@ -7,9 +7,6 @@ require "ostruct"
7
7
  require 'rdf/version'
8
8
  require 'rdf/extensions'
9
9
 
10
- # When loading, issue deprecation warning on forthcoming unsupported versions of Ruby
11
- warn "[DEPRECATION] Ruby 2.4+ required in next version 3.1 of RDF.rb" if RUBY_VERSION < "2.4"
12
-
13
10
  module RDF
14
11
  # RDF mixins
15
12
  autoload :Countable, 'rdf/mixin/countable'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rdf
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.3
4
+ version: 3.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arto Bendiken
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2022-01-16 00:00:00.000000000 Z
13
+ date: 2022-03-14 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: link_header
@@ -81,6 +81,9 @@ dependencies:
81
81
  - - "~>"
82
82
  - !ruby/object:Gem::Version
83
83
  version: '3.2'
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: 3.2.1
84
87
  type: :development
85
88
  prerelease: false
86
89
  version_requirements: !ruby/object:Gem::Requirement
@@ -88,6 +91,9 @@ dependencies:
88
91
  - - "~>"
89
92
  - !ruby/object:Gem::Version
90
93
  version: '3.2'
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: 3.2.1
91
97
  - !ruby/object:Gem::Dependency
92
98
  name: rest-client
93
99
  requirement: !ruby/object:Gem::Requirement
@@ -209,7 +215,6 @@ files:
209
215
  - lib/rdf/mixin/countable.rb
210
216
  - lib/rdf/mixin/durable.rb
211
217
  - lib/rdf/mixin/enumerable.rb
212
- - lib/rdf/mixin/enumerator.rb
213
218
  - lib/rdf/mixin/indexable.rb
214
219
  - lib/rdf/mixin/mutable.rb
215
220
  - lib/rdf/mixin/queryable.rb
@@ -228,6 +233,7 @@ files:
228
233
  - lib/rdf/model/literal/double.rb
229
234
  - lib/rdf/model/literal/integer.rb
230
235
  - lib/rdf/model/literal/numeric.rb
236
+ - lib/rdf/model/literal/temporal.rb
231
237
  - lib/rdf/model/literal/time.rb
232
238
  - lib/rdf/model/literal/token.rb
233
239
  - lib/rdf/model/node.rb
@@ -269,9 +275,9 @@ homepage: https://github.com/ruby-rdf/rdf
269
275
  licenses:
270
276
  - Unlicense
271
277
  metadata:
272
- documentation_uri: https://rubydoc.info/github/ruby-rdf/rdf
278
+ documentation_uri: https://ruby-rdf.github.io/rdf
273
279
  bug_tracker_uri: https://github.com/ruby-rdf/rdf/issues
274
- homepage_uri: https://ruby-rdf.github.io/rdf
280
+ homepage_uri: https://github.com/ruby-rdf/rdf
275
281
  mailing_list_uri: https://lists.w3.org/Archives/Public/public-rdf-ruby/
276
282
  source_code_uri: https://github.com/ruby-rdf/rdf
277
283
  post_install_message:
@@ -1,40 +0,0 @@
1
- module RDF
2
- ##
3
- # Enumerators for different mixins. These are defined in a separate module, so that they are bound when used, allowing other mixins inheriting behavior to be included.
4
- module Enumerable
5
- # Extends Enumerator with {Queryable} and {Enumerable}, which is used by {Enumerable#each_statement} and {Queryable#enum_for}
6
- class Enumerator < ::Enumerator
7
- include Queryable
8
- include Enumerable
9
-
10
- ##
11
- # @return [Array]
12
- # @note Make sure returned arrays are also queryable
13
- def to_a
14
- return super.to_a.extend(RDF::Queryable, RDF::Enumerable)
15
- end
16
- end
17
- end
18
-
19
- module Countable
20
- # Extends Enumerator with {Countable}, which is used by {Countable#enum_for}
21
- class Enumerator < ::Enumerator
22
- include Countable
23
- end
24
- end
25
-
26
- module Queryable
27
- # Extends Enumerator with {Queryable} and {Enumerable}, which is used by {Enumerable#each_statement} and {Queryable#enum_for}
28
- class Enumerator < ::Enumerator
29
- include Queryable
30
- include Enumerable
31
-
32
- ##
33
- # @return [Array]
34
- # @note Make sure returned arrays are also queryable
35
- def to_a
36
- return super.to_a.extend(RDF::Queryable, RDF::Enumerable)
37
- end
38
- end
39
- end
40
- end