rdf 2.1.1 → 2.2.0.pre.rc1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 27bb98ac53c34487b7b019cec8348e4d1c1b0248
4
- data.tar.gz: 02531a71cfeae374e921994416c23be579147b25
3
+ metadata.gz: 021b280777d430a6b79691be567737b25ca3dbb1
4
+ data.tar.gz: aaa41238c2b7fa38dcc80b760bb14dbed315c906
5
5
  SHA512:
6
- metadata.gz: d50dc7d520c49ec465bbc83c6d0a0df1348a921e77b0c1df19ab6286a14598a5a11bf1ff5460a753f851411df6d2e743bbc092e3b93cef2ed7784e09b96db46e
7
- data.tar.gz: 44d24ae43fc15dcfff3421c8a86e3a8cc6a4878f74b18077e30791d2284ccf99ce6a2556febce3dc94c0d1c5a220812da235e17f6c7ae27648195c1f630709e9
6
+ metadata.gz: 80781fd13019493a907988216a762d910568965b8aa352fc3a1674e752b0d30cf67ebfd428d7d3c9cec3212d44dd269e83e54783e3724ef20bb4bf5231677155
7
+ data.tar.gz: 915f78c9eb8d23b796bc6c7ba2f60b03c3fd09efc8544bff972bdb0c61de29913df3010f995218396459433299824f3737d96d879f8640e4db5cdb1e2a4ec183
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.1.1
1
+ 2.2.0-rc1
data/lib/rdf.rb CHANGED
@@ -156,7 +156,7 @@ module RDF
156
156
  # @overload Statement()
157
157
  # @return [RDF::URI] returns the IRI for `rdf:Statement`
158
158
  #
159
- # @overload Statement(options = {})
159
+ # @overload Statement(**options)
160
160
  # @param [Hash{Symbol => Object}] options
161
161
  # @option options [RDF::Resource] :subject (nil)
162
162
  # @option options [RDF::URI] :predicate (nil)
@@ -165,7 +165,7 @@ module RDF
165
165
  # Note, a graph_name MUST be an IRI or BNode.
166
166
  # @return [RDF::Statement]
167
167
  #
168
- # @overload Statement(subject, predicate, object, options = {})
168
+ # @overload Statement(subject, predicate, object, **options)
169
169
  # @param [RDF::Resource] subject
170
170
  # @param [RDF::URI] predicate
171
171
  # @param [RDF::Term] object
data/lib/rdf/changeset.rb CHANGED
@@ -41,7 +41,7 @@ module RDF
41
41
  # @yield [changes]
42
42
  # @yieldparam [RDF::Changeset] changes
43
43
  # @return [void]
44
- def self.apply(mutable, options = {}, &block)
44
+ def self.apply(mutable, **options, &block)
45
45
  self.new(&block).apply(mutable, options)
46
46
  end
47
47
 
@@ -106,7 +106,7 @@ module RDF
106
106
  # @param [RDF::Mutable] mutable
107
107
  # @param [Hash{Symbol => Object}] options
108
108
  # @return [void]
109
- def apply(mutable, options = {})
109
+ def apply(mutable, **options)
110
110
  mutable.apply_changeset(self)
111
111
  end
112
112
 
data/lib/rdf/cli.rb CHANGED
@@ -338,23 +338,24 @@ module RDF
338
338
  # Execute one or more commands, parsing input as necessary
339
339
  #
340
340
  # @param [Array<String>] args
341
+ # @param [IO] output
342
+ # @param [Hash{Symbol => Object}] options
341
343
  # @return [Boolean]
342
- def self.exec(args, options = {})
343
- out = options[:output] || $stdout
344
- out.set_encoding(Encoding::UTF_8) if out.respond_to?(:set_encoding) && RUBY_PLATFORM == "java"
344
+ def self.exec(args, output: $stdout, option_parser: self.options, **options)
345
+ output.set_encoding(Encoding::UTF_8) if output.respond_to?(:set_encoding) && RUBY_PLATFORM == "java"
345
346
  cmds, args = args.partition {|e| commands.include?(e.to_s)}
346
347
 
347
348
  if cmds.empty?
348
- usage(options.fetch(:option_parser, self.options))
349
+ usage(option_parser)
349
350
  abort "No command given"
350
351
  end
351
352
 
352
353
  if cmds.first == 'help'
353
354
  on_cmd = cmds[1]
354
355
  if on_cmd && COMMANDS.fetch(on_cmd.to_sym, {})[:help]
355
- usage(options.fetch(:option_parser, self.options), banner: "Usage: #{self.basename.split('/').last} #{COMMANDS[on_cmd.to_sym][:help]}")
356
+ usage(option_parser, banner: "Usage: #{self.basename.split('/').last} #{COMMANDS[on_cmd.to_sym][:help]}")
356
357
  else
357
- usage(options.fetch(:option_parser, self.options))
358
+ usage(option_parser)
358
359
  end
359
360
  return
360
361
  end
@@ -374,7 +375,7 @@ module RDF
374
375
 
375
376
  # Run each command in sequence
376
377
  cmds.each do |command|
377
- COMMANDS[command.to_sym][:lambda].call(args, options)
378
+ COMMANDS[command.to_sym][:lambda].call(args, output: output, **options)
378
379
  end
379
380
  rescue ArgumentError => e
380
381
  abort e.message
@@ -409,7 +410,7 @@ module RDF
409
410
  # @yieldparam [Array<String>] argv
410
411
  # @yieldparam [Hash] opts
411
412
  # @yieldreturn [void]
412
- def self.add_command(command, options = {}, &block)
413
+ def self.add_command(command, **options, &block)
413
414
  options[:lambda] = block if block_given?
414
415
  COMMANDS[command.to_sym] ||= options
415
416
  end
@@ -431,20 +432,25 @@ module RDF
431
432
  # yielding a reader
432
433
  #
433
434
  # @param [Array<String>] files
435
+ # @param [String] evaluate from command-line, rather than referenced file
436
+ # @param [Symbol] format (:ntriples) Reader symbol for finding reader
437
+ # @param [Encoding] encoding set on the input
438
+ # @param [Hash{Symbol => Object}] options sent to reader
434
439
  # @yield [reader]
435
440
  # @yieldparam [RDF::Reader]
436
441
  # @return [nil]
437
- def self.parse(files, options = {}, &block)
442
+ def self.parse(files, evaluate: nil, format: :ntriples, encoding: Encoding::UTF_8, **options, &block)
438
443
  if files.empty?
439
444
  # If files are empty, either use options[:execute]
440
- input = options[:evaluate] ? StringIO.new(options[:evaluate]) : $stdin
441
- input.set_encoding(options.fetch(:encoding, Encoding::UTF_8))
442
- r = RDF::Reader.for(options[:format] || :ntriples)
445
+ input = evaluate ? StringIO.new(evaluate) : $stdin
446
+ input.set_encoding(encoding)
447
+ r = RDF::Reader.for(format)
443
448
  (@readers ||= []) << r
444
449
  r.new(input, options) do |reader|
445
450
  yield(reader)
446
451
  end
447
452
  else
453
+ options[:format] = format if format
448
454
  files.each do |file|
449
455
  RDF::Reader.open(file, options) do |reader|
450
456
  (@readers ||= []) << reader.class.to_s
data/lib/rdf/format.rb CHANGED
@@ -70,7 +70,7 @@ module RDF
70
70
  # @param [String, RDF::URI] filename
71
71
  # @return [Class]
72
72
  #
73
- # @overload for(options = {})
73
+ # @overload for(**options)
74
74
  # Finds an RDF serialization format class based on various options.
75
75
  #
76
76
  # @param [Hash{Symbol => Object}] options
@@ -121,7 +121,7 @@ module RDF
121
121
  # @return [Array<RDF::Statement>]
122
122
  # @see #each_statement
123
123
  # @see #enum_statement
124
- def statements(options = {})
124
+ def statements(**options)
125
125
  Array(enum_statement)
126
126
  end
127
127
 
@@ -184,7 +184,7 @@ module RDF
184
184
  # @return [Array<Array(RDF::Resource, RDF::URI, RDF::Term)>]
185
185
  # @see #each_triple
186
186
  # @see #enum_triple
187
- def triples(options = {})
187
+ def triples(**options)
188
188
  enum_statement.map(&:to_triple) # TODO: optimize
189
189
  end
190
190
 
@@ -245,7 +245,7 @@ module RDF
245
245
  # @return [Array<Array(RDF::Resource, RDF::URI, RDF::Term, RDF::Resource)>]
246
246
  # @see #each_quad
247
247
  # @see #enum_quad
248
- def quads(options = {})
248
+ def quads(**options)
249
249
  enum_statement.map(&:to_quad) # TODO: optimize
250
250
  end
251
251
 
@@ -711,7 +711,7 @@ module RDF
711
711
  # `{subject => {predicate => [*objects]}}`.
712
712
  #
713
713
  # @return [Hash]
714
- def to_hash
714
+ def to_h
715
715
  result = {}
716
716
  each_statement do |statement|
717
717
  result[statement.subject] ||= {}
@@ -738,14 +738,24 @@ module RDF
738
738
  # @see RDF::Writer.dump
739
739
  # @raise [RDF::WriterError] if no writer found
740
740
  # @since 0.2.0
741
- def dump(*args)
742
- options = args.last.is_a?(Hash) ? args.pop : {}
741
+ def dump(*args, **options)
743
742
  writer = RDF::Writer.for(*args)
744
743
  raise RDF::WriterError, "No writer found using #{args.inspect}" unless writer
745
- writer.dump(self, nil, options)
744
+ writer.dump(self, nil, **options)
746
745
  end
747
746
 
747
+ protected
748
+
748
749
  ##
750
+ # @overload #to_hash
751
+ # Returns all RDF object terms indexed by their subject and predicate
752
+ # terms.
753
+ #
754
+ # The return value is a `Hash` instance that has the structure:
755
+ # `{subject => {predicate => [*objects]}}`.
756
+ #
757
+ # @return [Hash]
758
+ # @deprecated Use {#to_h} instead.
749
759
  # @overload #to_writer
750
760
  # Implements #to_writer for each available instance of {RDF::Writer},
751
761
  # based on the writer symbol.
@@ -753,6 +763,11 @@ module RDF
753
763
  # @return [String]
754
764
  # @see {RDF::Writer.sym}
755
765
  def method_missing(meth, *args)
766
+ case meth
767
+ when :to_hash
768
+ warn "[DEPRECATION] Enumerable#to_hash is deprecated, use Enumerable#to_h instead. Called from #{Gem.location_of_caller.join(':')}"
769
+ return self.to_h
770
+ end
756
771
  writer = RDF::Writer.for(meth.to_s[3..-1].to_sym) if meth.to_s[0,3] == "to_"
757
772
  if writer
758
773
  writer.buffer(standard_prefixes: true) {|w| w << self}
@@ -7,11 +7,29 @@ module RDF
7
7
  include Queryable
8
8
  include Enumerable
9
9
 
10
- # Make sure returned arrays are also queryable
10
+ ##
11
+ # @return [Array]
12
+ # @note Make sure returned arrays are also queryable
11
13
  def to_a
12
14
  return super.to_a.extend(RDF::Queryable, RDF::Enumerable)
13
15
  end
14
- alias_method :to_ary, :to_a
16
+
17
+ protected
18
+
19
+ ##
20
+ # @overload #to_ary
21
+ # @see #to_a
22
+ # @deprecated use {#to_a} instead
23
+ def method_missing(name, *args)
24
+ if name == :to_ary
25
+ warn "[DEPRECATION] #{self.class}#to_ary is deprecated, use " \
26
+ "#{self.class}#to_a instead. Called from " \
27
+ "#{Gem.location_of_caller.join(':')}"
28
+ to_a
29
+ else
30
+ super
31
+ end
32
+ end
15
33
  end
16
34
  end
17
35
 
@@ -28,11 +46,29 @@ module RDF
28
46
  include Queryable
29
47
  include Enumerable
30
48
 
31
- # Make sure returned arrays are also queryable
49
+ ##
50
+ # @return [Array]
51
+ # @note Make sure returned arrays are also queryable
32
52
  def to_a
33
53
  return super.to_a.extend(RDF::Queryable, RDF::Enumerable)
34
54
  end
35
- alias_method :to_ary, :to_a
55
+
56
+ protected
57
+
58
+ ##
59
+ # @overload #to_ary
60
+ # @see #to_a
61
+ # @deprecated use {#to_a} instead
62
+ def method_missing(name, *args)
63
+ if name == :to_ary
64
+ warn "[DEPRECATION] #{self.class}#to_ary is deprecated, use " \
65
+ "#{self.class}#to_a instead. Called from " \
66
+ "#{Gem.location_of_caller.join(':')}"
67
+ self.to_a
68
+ else
69
+ super
70
+ end
71
+ end
36
72
  end
37
73
  end
38
74
  end
@@ -41,7 +41,7 @@ module RDF
41
41
  # Returns an enumerable of statements (may be an enumerator) or query solutions, if passed an {RDF::Query}
42
42
  # @see RDF::Queryable#query_pattern
43
43
  # @note Since 2.0, this may return an Enumerable or an Enumerator in addition to Solutions
44
- def query(pattern, options = {}, &block)
44
+ def query(pattern, **options, &block)
45
45
  raise TypeError, "#{self} is not readable" if respond_to?(:readable?) && !readable?
46
46
 
47
47
  case pattern
@@ -111,7 +111,7 @@ module RDF
111
111
  # @see RDF::Queryable#query
112
112
  # @see RDF::Query#execute
113
113
  # @since 0.3.0
114
- def query_execute(query, options = {}, &block)
114
+ def query_execute(query, **options, &block)
115
115
  # By default, we let RDF.rb's built-in `RDF::Query#execute` handle BGP
116
116
  # query execution by breaking down the query into its constituent
117
117
  # triple patterns and invoking `RDF::Query::Pattern#execute` on each
@@ -139,7 +139,7 @@ module RDF
139
139
  # @see RDF::Queryable#query
140
140
  # @see RDF::Query::Pattern#execute
141
141
  # @since 0.2.0
142
- def query_pattern(pattern, options = {}, &block)
142
+ def query_pattern(pattern, **options, &block)
143
143
  # By default, we let Ruby's built-in `Enumerable#grep` handle the
144
144
  # matching of statements by iterating over all statements and calling
145
145
  # `RDF::Query::Pattern#===` on each statement.
@@ -119,7 +119,7 @@ module RDF
119
119
  ##
120
120
  # Implements basic query pattern matching over the Dataset, with handling
121
121
  # for a default graph.
122
- def query_pattern(pattern, options = {}, &block)
122
+ def query_pattern(pattern, **options, &block)
123
123
  return super unless pattern.graph_name == DEFAULT_GRAPH
124
124
 
125
125
  if block_given?
@@ -87,12 +87,12 @@ module RDF
87
87
  end
88
88
 
89
89
  ##
90
- # @param [RDF::Resource] graph_name
90
+ # @param [RDF::Resource] graph_name
91
91
  # The graph_name from the associated {RDF::Queryable} associated
92
92
  # with this graph as provided with the `:data` option
93
93
  # (only for {RDF::Queryable} instances supporting
94
94
  # named graphs).
95
- # @param [RDF::Queryable] :data (RDF::Repository.new)
95
+ # @param [RDF::Queryable] data (RDF::Repository.new)
96
96
  # Storage behind this graph.
97
97
  #
98
98
  # @raise [ArgumentError] if a `data` does not support named graphs.
@@ -273,7 +273,7 @@ module RDF
273
273
  ##
274
274
  # @private
275
275
  # @see RDF::Queryable#query_pattern
276
- def query_pattern(pattern, options = {}, &block)
276
+ def query_pattern(pattern, **options, &block)
277
277
  pattern = pattern.dup
278
278
  pattern.graph_name = graph_name || false
279
279
  @data.query(pattern, &block)
@@ -294,7 +294,7 @@ module RDF
294
294
  def insert_statements(statements)
295
295
  enum = Enumerable::Enumerator.new do |yielder|
296
296
 
297
- statements.send(method = statements.respond_to?(:each_statement) ? :each_statement : :each) do |s|
297
+ statements.send(statements.respond_to?(:each_statement) ? :each_statement : :each) do |s|
298
298
  s = s.dup
299
299
  s.graph_name = graph_name
300
300
  yielder << s
@@ -104,13 +104,13 @@ module RDF
104
104
 
105
105
  ##
106
106
  # @private
107
- def self.new(value, options = {})
108
- raise ArgumentError, "datatype with language must be rdf:langString" if options[:language] && (options[:datatype] || RDF.langString).to_s != RDF.langString.to_s
107
+ def self.new(value, language: nil, datatype: nil, lexical: nil, validate: false, canonicalize: false, **options)
108
+ raise ArgumentError, "datatype with language must be rdf:langString" if language && (datatype || RDF.langString).to_s != RDF.langString.to_s
109
109
 
110
110
  klass = case
111
111
  when !self.equal?(RDF::Literal)
112
112
  self # subclasses can be directly constructed without type dispatch
113
- when typed_literal = datatyped_class(options[:datatype].to_s)
113
+ when typed_literal = datatyped_class(datatype.to_s)
114
114
  typed_literal
115
115
  else case value
116
116
  when ::TrueClass then RDF::Literal::Boolean
@@ -126,9 +126,9 @@ module RDF
126
126
  end
127
127
  end
128
128
  literal = klass.allocate
129
- literal.send(:initialize, value, options)
130
- literal.validate! if options[:validate]
131
- literal.canonicalize! if options[:canonicalize]
129
+ literal.send(:initialize, value, language: language, datatype: datatype, **options)
130
+ literal.validate! if validate
131
+ literal.canonicalize! if canonicalize
132
132
  literal
133
133
  end
134
134
 
@@ -147,28 +147,28 @@ module RDF
147
147
  # depending on if there is language
148
148
  #
149
149
  # @param [Object] value
150
- # @option options [Symbol] :language (nil)
150
+ # @param [Symbol] language (nil)
151
151
  # Language is downcased to ensure proper matching
152
- # @option options [String] :lexical (nil)
152
+ # @param [String] lexical (nil)
153
153
  # Supplied lexical representation of this literal,
154
- # otherwise it comes from transforming `value` to a string form
155
- # See {#to_s}.
156
- # @option options [URI] :datatype (nil)
157
- # @option options [Boolean] :validate (false)
158
- # @option options [Boolean] :canonicalize (false)
154
+ # otherwise it comes from transforming `value` to a string form..
155
+ # @param [URI] datatype (nil)
156
+ # @param [Boolean] validate (false)
157
+ # @param [Boolean] canonicalize (false)
159
158
  # @raise [ArgumentError]
160
159
  # if there is a language and datatype is no rdf:langString
161
160
  # or datatype is rdf:langString and there is no language
162
161
  # @see http://www.w3.org/TR/rdf11-concepts/#section-Graph-Literal
163
162
  # @see http://www.w3.org/TR/rdf11-concepts/#section-Datatypes
164
- def initialize(value, options = {})
163
+ # @see #to_s
164
+ def initialize(value, language: nil, datatype: nil, lexical: nil, validate: false, canonicalize: false, **options)
165
165
  @object = value.freeze
166
- @string = options[:lexical] if options[:lexical]
166
+ @string = lexical if lexical
167
167
  @string = value if !defined?(@string) && value.is_a?(String)
168
168
  @string = @string.encode(Encoding::UTF_8).freeze if @string
169
169
  @object = @string if @string && @object.is_a?(String)
170
- @language = options[:language].to_s.downcase.to_sym if options[:language]
171
- @datatype = RDF::URI(options[:datatype]).freeze if options[:datatype]
170
+ @language = language.to_s.downcase.to_sym if language
171
+ @datatype = RDF::URI(datatype).freeze if datatype
172
172
  @datatype ||= self.class.const_get(:DATATYPE) if self.class.const_defined?(:DATATYPE)
173
173
  @datatype ||= @language ? RDF.langString : RDF::XSD.string
174
174
  raise ArgumentError, "datatype of rdf:langString requires a language" if !@language && @datatype == RDF::langString
@@ -233,7 +233,7 @@ module RDF
233
233
  ##
234
234
  # Returns a hash code for this literal.
235
235
  #
236
- # @return [Fixnum]
236
+ # @return [Integer]
237
237
  def hash
238
238
  @hash ||= [to_s, datatype, language].hash
239
239
  end
@@ -242,7 +242,7 @@ module RDF
242
242
  ##
243
243
  # Returns a hash code for the value.
244
244
  #
245
- # @return [Fixnum]
245
+ # @return [Integer]
246
246
  def value_hash
247
247
  @value_hash ||= value.hash
248
248
  end
@@ -441,7 +441,7 @@ module RDF
441
441
  #
442
442
  # @param [String] string
443
443
  # @return [String]
444
- # @see {RDF::Term#escape}
444
+ # @see RDF::Term#escape
445
445
  def escape(string)
446
446
  string.gsub('\\', '\\\\').
447
447
  gsub("\t", '\\t').
@@ -477,5 +477,27 @@ module RDF
477
477
  def inspect
478
478
  sprintf("#<%s:%#0x(%s)>", self.class.name, __id__, RDF::NTriples.serialize(self))
479
479
  end
480
+
481
+ protected
482
+
483
+ ##
484
+ # @overload #to_str
485
+ # This method is implemented when the datatype is `xsd:string` or `rdf:langString`
486
+ # @return [String]
487
+ def method_missing(name, *args)
488
+ case name
489
+ when :to_str
490
+ return to_s if @datatype == RDF.langString || @datatype == RDF::XSD.string
491
+ end
492
+ super
493
+ end
494
+
495
+ def respond_to_missing?(name, include_private = false)
496
+ case name
497
+ when :to_str
498
+ return true if @datatype == RDF.langString || @datatype == RDF::XSD.string
499
+ end
500
+ super
501
+ end
480
502
  end # Literal
481
503
  end # RDF