rdf 1.0.9 → 1.0.10

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,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NWYzN2ZkYjgxMzA3Mjg3MmNmZDY1NTk5OGE0NDBhODI3OWYwZmEyNA==
4
+ MDY3ZTk0N2E2NGI5MzA0MDk3ZDJjZWU3MWY4Y2RjNDUyOGMxNDdhYw==
5
5
  data.tar.gz: !binary |-
6
- MzllMjNhYjczYzI4NWIyMzc0ZDc3YTBlNzNiNGM0NzQ5NWIxMzM1OA==
6
+ ZTdiN2I3Y2Q5ZmNiZWRlY2U3N2Q0MzU3OGNlODU5ZGE3NzIzYzEwMA==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- YjA3MjU5MmIzYzcxYWE5ODgzZDI1YWFjODdjYjE3MjVkMWZiMTYzNzJkOTJi
10
- YjM5OThhNTUyYjQxNTk4NWIxODBjZWI1ZmNlMTU3NGI1OTBmNjZmNzA3YTY5
11
- ZGNmYzBjNDY2ZjJiZGNiYmEyZGEzYWY0ZGFmZDE0NTQxNmE4ZWQ=
9
+ MmYxNjVmODNjNDE0NWQ2OWI4MTVjZDRhNDE0NzFiYTgwMzk2NjkyZmMyODU3
10
+ NTI5YWQ3OTI4NWYxYThlNDk1ZGM4OGNhMGU0NzgzYmVkNzk1ZjIxZTJiM2Ix
11
+ YzlhMTEyNGEzMThhZjhiNzdjODA2ZjM5NmE0YjE1NGRhODhhYjE=
12
12
  data.tar.gz: !binary |-
13
- MWViMzUxNDhlOTUzYTAxYTNjYmJmZDYwYzQ0M2YyYjZhNjc3MmI1Yjk4NzYy
14
- NmJkM2VlYzc3NmZjMWRjOWUwZWM3NWJjYmQ3MTFmYzhjMzE5ZmViMDgzM2Nj
15
- YzhiZDFjMTgwNmJhNzA1NDc4YzJiMDBlYzViNDA3M2Q5MGM5ZGQ=
13
+ Njg1NjhiNDllYjM1ZTBkMDEyMjgxMDJmNWYwMjRmOTgzNDc4NGYxNjlkNjQ5
14
+ YWU3YmEyMWFlOThiYTA3ZDY2NWFiOTA3NjNiYjliMTczMTlhNDM3MWU0OGM2
15
+ NmE0MDliODBjZTBjOTY3NzVlMmRjZDAyNmU2NTM4MzFiNDJjZDc=
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.9
1
+ 1.0.10
@@ -142,12 +142,14 @@ module RDF
142
142
 
143
143
  # If we have a sample, use that for format detection
144
144
  if sample = (options[:sample] if options.is_a?(Hash)) || (yield if block_given?)
145
+ sample = sample.to_s
146
+ sample.force_encoding(Encoding::UTF_8) if sample.respond_to?(:force_encoding)
145
147
  # Given a sample, perform format detection across the appropriate formats, choosing
146
148
  # the first that matches
147
149
  format ||= @@subclasses
148
150
 
149
151
  # Return first format that has a positive detection
150
- format.detect {|f| f.detect(sample.to_s)} || format.first
152
+ format.detect {|f| f.detect(sample)} || format.first
151
153
  elsif format.is_a?(Array)
152
154
  # Otherwise, just return the first matching format
153
155
  format.first
@@ -1,3 +1,4 @@
1
+ # -*- encoding: utf-8 -*-
1
2
  module RDF
2
3
  ##
3
4
  # An RDF literal.
@@ -166,6 +167,7 @@ module RDF
166
167
  @object = value
167
168
  @string = options[:lexical] if options[:lexical]
168
169
  @string = value if !defined?(@string) && value.is_a?(String)
170
+ @string.encode!(Encoding::UTF_8) if @string && @string.respond_to?(:encode!)
169
171
  @language = options[:language].to_s.to_sym if options[:language]
170
172
  @datatype = RDF::URI(options[:datatype]) if options[:datatype]
171
173
  @datatype ||= self.class.const_get(:DATATYPE) if self.class.const_defined?(:DATATYPE)
@@ -90,7 +90,14 @@ module RDF
90
90
 
91
91
  IHIER_PART = Regexp.compile("(?:(?://#{IAUTHORITY}#{IPATH_ABEMPTY})|(?:#{IPATH_ABSOLUTE})|(?:#{IPATH_ROOTLESS})|(?:#{IPATH_EMPTY}))").freeze
92
92
  IRI = Regexp.compile("^#{SCHEME}:(?:#{IHIER_PART})(?:\\?#{IQUERY})?(?:\\##{IFRAGMENT})?$").freeze
93
-
93
+
94
+ # List of schemes known not to be hierarchical
95
+ NON_HIER_SCHEMES = %w(
96
+ about acct bitcoin callto cid data fax geo gtalk h323 iax icon im jabber
97
+ jms magnet mailto maps news pres proxy session sip sips skype sms spotify stun stuns
98
+ tag tel turn turns tv urn javascript
99
+ ).freeze
100
+
94
101
  ##
95
102
  # @return [RDF::Util::Cache]
96
103
  # @private
@@ -174,6 +181,21 @@ module RDF
174
181
  self.start_with?('urn:')
175
182
  end
176
183
 
184
+ ##
185
+ # Returns `true` if the URI scheme is hierarchical.
186
+ #
187
+ # @example
188
+ # RDF::URI('http://example.org/').hier? #=> true
189
+ # RDF::URI('urn:isbn:125235111').hier? #=> false
190
+ #
191
+ # @return [Boolean] `true` or `false`
192
+ # @see http://en.wikipedia.org/wiki/URI_scheme
193
+ # @see {NON_HIER_SCHEMES}
194
+ # @since 1.0.10
195
+ def hier?
196
+ !NON_HIER_SCHEMES.include?(scheme)
197
+ end
198
+
177
199
  ##
178
200
  # Returns `true` if this URI is a URL.
179
201
  #
@@ -358,15 +380,19 @@ module RDF
358
380
  end
359
381
 
360
382
  ##
361
- # Returns `true` if this URI's path component is equal to `/`.
383
+ # Returns `true` if this URI's scheme is not hierarchical,
384
+ # or its path component is equal to `/`.
385
+ # Protocols not using hierarchical components are always considered
386
+ # to be at the root.
362
387
  #
363
388
  # @example
364
389
  # RDF::URI('http://example.org/').root? #=> true
365
390
  # RDF::URI('http://example.org/path/').root? #=> false
391
+ # RDF::URI('urn:isbn').root? #=> true
366
392
  #
367
393
  # @return [Boolean] `true` or `false`
368
394
  def root?
369
- self.path == '/' || self.path.empty?
395
+ !self.hier? || self.path == '/' || self.path.empty?
370
396
  end
371
397
 
372
398
  ##
@@ -388,7 +414,7 @@ module RDF
388
414
  end
389
415
 
390
416
  ##
391
- # Returns `true` if this URI's path component isn't equal to `/`.
417
+ # Returns `true` if this URI is hierarchical and it's path component isn't equal to `/`.
392
418
  #
393
419
  # @example
394
420
  # RDF::URI('http://example.org/').has_parent? #=> false
@@ -1,3 +1,4 @@
1
+ # -*- encoding: utf-8 -*-
1
2
  module RDF
2
3
  ##
3
4
  # **`RDF::NQuads`** provides support for the N-Quads serialization format.
@@ -1,3 +1,4 @@
1
+ # -*- encoding: utf-8 -*-
1
2
  module RDF::NTriples
2
3
  ##
3
4
  # N-Triples parser.
@@ -1,3 +1,4 @@
1
+ # -*- encoding: utf-8 -*-
1
2
  module RDF::NTriples
2
3
  ##
3
4
  # N-Triples serializer.
@@ -58,12 +59,14 @@ module RDF::NTriples
58
59
  string
59
60
  when string.respond_to?(:ascii_only?) && string.ascii_only?
60
61
  StringIO.open do |buffer|
62
+ buffer.set_encoding(Encoding::ASCII) if buffer.respond_to?(:set_encoding)
61
63
  string.each_byte { |u| buffer << escape_ascii(u, encoding) }
62
64
  buffer.string
63
65
  end
64
66
  when string.respond_to?(:each_char) && encoding && encoding != Encoding::ASCII
65
67
  # Not encoding UTF-8 characters
66
68
  StringIO.open do |buffer|
69
+ buffer.set_encoding(encoding) if buffer.respond_to?(:set_encoding)
67
70
  string.each_char do |u|
68
71
  buffer << case u.ord
69
72
  when (0x00..0x7F)
@@ -77,17 +80,19 @@ module RDF::NTriples
77
80
  when string.respond_to?(:each_codepoint)
78
81
  # Encode ASCII && UTF-8 characters
79
82
  StringIO.open do |buffer|
83
+ buffer.set_encoding(Encoding::ASCII) if buffer.respond_to?(:set_encoding)
80
84
  string.each_codepoint { |u| buffer << escape_unicode(u, encoding) }
81
85
  buffer.string
82
86
  end
83
87
  else # works in Ruby 1.8.x, too
84
88
  # Encode ASCII && UTF-8 characters
85
89
  StringIO.open do |buffer|
90
+ buffer.set_encoding(Encoding::ASCII) if buffer.respond_to?(:set_encoding)
86
91
  string.scan(/./mu) { |c| buffer << escape_unicode(u = c.unpack('U*').first, encoding) }
87
92
  buffer.string
88
93
  end
89
94
  end
90
- ret.respond_to?(:force_encoding) && encoding ? ret.dup.force_encoding(encoding) : ret
95
+ ret.respond_to?(:encode) && encoding && ret.encoding != encoding ? ret.encode(encoding) : ret
91
96
  end
92
97
 
93
98
  ##
@@ -488,7 +488,7 @@ module RDF
488
488
  @line = @line_rest || @input.readline
489
489
  @line, @line_rest = @line.split("\r", 2)
490
490
  @line = @line.to_s.chomp
491
- @line.force_encoding(encoding) if @line.respond_to?(:force_encoding)
491
+ @line.encode!(encoding) if @line.respond_to?(:encode!)
492
492
  @line
493
493
  end
494
494
 
@@ -27,7 +27,8 @@ module RDF; module Util
27
27
  # @param [Hash{Symbol => Object}] options
28
28
  # options are ignored in this implementation. Applications are encouraged
29
29
  # to override this implementation to provide more control over HTTP
30
- # headers and redirect following.
30
+ # headers and redirect following. If opening as a file,
31
+ # options are passed to `Kernel.open`.
31
32
  # @option options [Array, String] :headers
32
33
  # HTTP Request headers, passed to Kernel.open. (Ruby >= 1.9 only)
33
34
  # @return [IO] File stream
@@ -37,10 +38,14 @@ module RDF; module Util
37
38
  filename_or_url = $1 if filename_or_url.to_s.match(/^file:(.*)$/)
38
39
  if RUBY_VERSION < "1.9"
39
40
  Kernel.open(filename_or_url.to_s, &block)
41
+ elsif filename_or_url.to_s =~ /^#{RDF::URI::SCHEME}/
42
+ # Open as a URL
43
+ headers = options.fetch(:headers, {})
44
+ headers['Accept'] ||= (RDF::Format.reader_types + %w(*/*;q=0.1)).join(", ")
45
+ Kernel.open(filename_or_url.to_s, headers, &block)
40
46
  else
41
- options[:headers] ||= {}
42
- options[:headers]['Accept'] ||= (RDF::Format.reader_types + %w(*/*;q=0.1)).join(", ")
43
- Kernel.open(filename_or_url.to_s, options[:headers], &block)
47
+ # Open as a file, passing any options
48
+ Kernel.open(filename_or_url, "r", options, &block)
44
49
  end
45
50
  end
46
51
  end # File
@@ -1,3 +1,4 @@
1
+ # -*- encoding: utf-8 -*-
1
2
  module RDF
2
3
  ##
3
4
  # The base class for RDF serializers.
@@ -299,7 +300,7 @@ module RDF
299
300
  #
300
301
  # @return [Encoding]
301
302
  def encoding
302
- return nil unless "".respond_to?(:force_encoding)
303
+ return nil unless "".respond_to?(:encode!)
303
304
  case @options[:encoding]
304
305
  when String, Symbol
305
306
  Encoding.find(@options[:encoding].to_s)
@@ -474,7 +475,7 @@ module RDF
474
475
  ##
475
476
  # @return [void]
476
477
  def puts(*args)
477
- @output.puts(*args.map {|s| s.respond_to?(:force_encoding) ? s.force_encoding(encoding) : s})
478
+ @output.puts(*args.map {|s| s.respond_to?(:encode!) ? s.encode!(encoding) : s})
478
479
  end
479
480
 
480
481
  ##
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: 1.0.9
4
+ version: 1.0.10
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: 2013-10-12 00:00:00.000000000 Z
13
+ date: 2013-10-28 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: addressable