ldp 0.0.7 → 0.0.8

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
  SHA1:
3
- metadata.gz: c435d58f60d41a302a24df4ebf7f3bd9323d87d8
4
- data.tar.gz: 25e877748727f653488862222cee9aebbca30046
3
+ metadata.gz: f66622678bcc98c5f6466a33d8ff1d6203fe2e4f
4
+ data.tar.gz: 35bc0630a59c9c881e5b6f7c4d5c07138dda3619
5
5
  SHA512:
6
- metadata.gz: 732e238782ff1a21407b629bc54a13ba63f621b6494fcde36d9d2b637e5562c946573108e852c3e2746e928a1afb35ece225a7a2d2879e78c872688a157c6f8e
7
- data.tar.gz: 0149eaba7795e019401075761dfa9adfe5ad9b2496153e271c4753cb32d8d62017c922d1681bd1c3b6af946928d01038d3d8deb3071c7db4bef0e4dc84fc5ef8
6
+ metadata.gz: 6a2d387ff7e6ccbd5c873e169c57ed49225ab6fd6b51ef783b1bd84cfac08a133ed518fb31defd5764e3be667483dde5c022a849d44394d9c08a5dde413cb27b
7
+ data.tar.gz: f7195ee962860939ed50c60007226d697c84e2544f897c43b926f8f971ac7406f7ab9c1facb7de01ecc11be62454f541a551cc8f2000c246d4ec28eb698841c6
@@ -3,19 +3,19 @@ require 'faraday'
3
3
  ##
4
4
  # HTTP client methods for making requests to an LDP resource and getting a response back.
5
5
  module Ldp::Client::Methods
6
-
6
+
7
7
  attr_reader :http
8
8
  def initialize_http_client *http_client
9
9
  if http_client.length == 1 and http_client.first.is_a? Faraday::Connection
10
10
  @http = http_client.first
11
- else
12
- @http = Faraday.new *http_client
11
+ else
12
+ @http = Faraday.new *http_client
13
13
  end
14
14
  end
15
-
15
+
16
16
  def head url
17
17
  logger.debug "LDP: HEAD [#{url}]"
18
- resp = http.head do |req|
18
+ resp = http.head do |req|
19
19
  req.url munge_to_relative_url(url)
20
20
 
21
21
  yield req if block_given?
@@ -27,7 +27,7 @@ module Ldp::Client::Methods
27
27
  # Get a LDP Resource by URI
28
28
  def get url, options = {}
29
29
  logger.debug "LDP: GET [#{url}]"
30
- resp = http.get do |req|
30
+ resp = http.get do |req|
31
31
  req.url munge_to_relative_url(url)
32
32
 
33
33
  if options[:minimal]
@@ -35,7 +35,7 @@ module Ldp::Client::Methods
35
35
  else
36
36
  includes = Array(options[:include]).map { |x| Ldp.send("prefer_#{x}") if Ldp.respond_to? "prefer_#{x}" }
37
37
  omits = Array(options[:omit]).map { |x| Ldp.send("prefer_#{x}") if Ldp.respond_to? "prefer_#{x}" }
38
- req.headers["Prefer"] = ["return=representation",
38
+ req.headers["Prefer"] = ["return=representation",
39
39
  ("include=\"#{includes.join(" ")}\"" unless includes.empty?),
40
40
  ("omit=\"#{omits.join(" ")}\"" unless omits.empty?)
41
41
  ].compact.join("; ")
@@ -49,7 +49,7 @@ module Ldp::Client::Methods
49
49
  else
50
50
  resp
51
51
  end
52
-
52
+
53
53
  check_for_errors(resp)
54
54
  end
55
55
 
@@ -100,7 +100,7 @@ module Ldp::Client::Methods
100
100
  check_for_errors(resp)
101
101
  end
102
102
  private
103
-
103
+
104
104
  def check_for_errors resp
105
105
  resp.tap do |resp|
106
106
  unless resp.success?
@@ -119,14 +119,14 @@ module Ldp::Client::Methods
119
119
  def default_headers
120
120
  {"Content-Type"=>"text/turtle"}
121
121
  end
122
-
122
+
123
123
  def default_patch_headers
124
124
  {"Content-Type"=>"application/sparql-update"}
125
125
  end
126
126
  ##
127
127
  # Some valid query paths can be mistaken for absolute URIs
128
128
  # with an alternative scheme. If the scheme isn't HTTP(S), assume
129
- # they meant a relative URI instead.
129
+ # they meant a relative URI instead.
130
130
  def munge_to_relative_url url
131
131
  purl = URI.parse(url)
132
132
  if purl.absolute? and !((purl.scheme rescue nil) =~ /^http/)
@@ -7,15 +7,15 @@ module Ldp
7
7
  def initialize resource
8
8
  @resource = resource
9
9
  end
10
-
10
+
11
11
  def subject_uri
12
12
  resource.subject_uri
13
13
  end
14
-
14
+
15
15
  def new?
16
16
  resource.new?
17
17
  end
18
-
18
+
19
19
  def persisted?
20
20
  !new?
21
21
  end
@@ -44,7 +44,7 @@ module Ldp
44
44
  def get
45
45
  @get ||= client.get(subject)
46
46
  end
47
-
47
+
48
48
  def head
49
49
  @head ||= @get || client.head(subject)
50
50
  end
@@ -56,11 +56,11 @@ module Ldp
56
56
  req.headers['If-Match'] = get.etag if retrieved_content?
57
57
  end
58
58
  end
59
-
59
+
60
60
  def save
61
61
  new? ? create : update
62
62
  end
63
-
63
+
64
64
  ##
65
65
  # Create a new resource at the URI
66
66
  # @return [RdfSource] the new representation
@@ -68,7 +68,7 @@ module Ldp
68
68
  raise "Can't call create on an existing resource" unless new?
69
69
  verb = subject.nil? ? :post : :put
70
70
  resp = client.send(verb, (subject || @base_path), content) do |req|
71
-
71
+
72
72
  yield req if block_given?
73
73
  end
74
74
 
@@ -76,7 +76,7 @@ module Ldp
76
76
  @subject_uri = nil
77
77
  reload
78
78
  end
79
-
79
+
80
80
  ##
81
81
  # Update the stored graph
82
82
  def update new_content = nil
@@ -91,7 +91,7 @@ module Ldp
91
91
  def current? response = nil
92
92
  response ||= @get
93
93
  return true if new? and subject.nil?
94
-
94
+
95
95
  new_response = client.head(subject)
96
96
 
97
97
  response.headers['ETag'] &&
@@ -14,39 +14,61 @@ module Ldp
14
14
  raise ArgumentError, "Third argument to #{self.class}.new should be a RDF::Graph or a Ldp::Response. You provided #{graph_or_response.class}"
15
15
  end
16
16
  end
17
-
17
+
18
18
  def create
19
19
  super do |req|
20
20
  req.headers = { "Content-Type" => "text/turtle" }
21
21
  end
22
22
  end
23
-
23
+
24
24
  def content
25
25
  graph.dump(:ttl) if graph
26
26
  end
27
27
 
28
28
  def graph
29
- @graph ||= RDF::Graph.new if new?
30
- @graph ||= begin
31
- original_graph = get.graph
29
+ @graph ||= new? ? build_empty_graph : build_graph(get.graph)
30
+ end
32
31
 
33
- inlinedResources = get.graph.query(:predicate => Ldp.contains).map { |x| x.object }
32
+ def build_empty_graph
33
+ graph_class.new
34
+ end
34
35
 
35
- # we want to scope this graph to just statements about this model, not contained relations
36
- unless inlinedResources.empty?
37
- new_graph = RDF::Graph.new
36
+ ##
37
+ # graph_class may be overridden so that a subclass of RDF::Graph
38
+ # is returned (e.g. an ActiveTriples resource)
39
+ # @returns [Class] a class that is an descendant of RDF::Graph
40
+ def graph_class
41
+ RDF::Graph
42
+ end
38
43
 
39
- original_graph.each_statement do |s|
40
- unless inlinedResources.include? s.subject
41
- new_graph << s
42
- end
43
- end
44
44
 
45
- new_graph
46
- else
45
+
46
+ private
47
+
48
+ ##
49
+ # @param [RDF::Graph] original_graph The graph returned by the LDP server
50
+ # @return [RDF::Graph] A graph striped of any inlined resources present in the original
51
+ def build_graph(original_graph)
52
+ inlined_resources = get.graph.query(predicate: Ldp.contains).map { |x| x.object }
53
+
54
+ # we want to scope this graph to just statements about this model, not contained relations
55
+ if inlined_resources.empty?
47
56
  original_graph
57
+ else
58
+ graph_without_inlined_resources(original_graph, inlined_resources)
48
59
  end
49
60
  end
50
- end
61
+
62
+ def graph_without_inlined_resources(original_graph, inlined_resources)
63
+ new_graph = build_empty_graph
64
+
65
+ original_graph.each_statement do |s|
66
+ unless inlined_resources.include? s.subject
67
+ new_graph << s
68
+ end
69
+ end
70
+
71
+ new_graph
72
+ end
51
73
  end
52
74
  end
@@ -1,3 +1,3 @@
1
1
  module Ldp
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  end
@@ -7,7 +7,6 @@ describe Ldp::Resource::RdfSource do
7
7
 
8
8
  let(:conn_stubs) do
9
9
  Faraday::Adapter::Test::Stubs.new do |stub|
10
- # stub.get('/a_resource') {[ 200, {"Link" => "<http://www.w3.org/ns/ldp#Resource>;rel=\"type\""}, simple_graph ]}
11
10
  stub.post("/") { [201]}
12
11
  stub.put("/abs_url_object") { [201]}
13
12
  end
@@ -32,7 +31,7 @@ describe Ldp::Resource::RdfSource do
32
31
  created_resource = subject.create
33
32
  expect(created_resource).to be_kind_of Ldp::Resource::RdfSource
34
33
  end
35
-
34
+
36
35
  it "should allow absolute URLs to the LDP server" do
37
36
  obj = Ldp::Resource::RdfSource.new mock_client, "http://my.ldp.server/abs_url_object"
38
37
  allow(obj).to receive(:new?).and_return(true)
@@ -49,4 +48,27 @@ describe Ldp::Resource::RdfSource do
49
48
  end
50
49
  end
51
50
  end
51
+
52
+ context "When graph_class is overridden" do
53
+ before do
54
+ class SpecialGraph < RDF::Graph; end
55
+
56
+ class SpecialResource < Ldp::Resource::RdfSource
57
+ def graph_class
58
+ SpecialGraph
59
+ end
60
+ end
61
+ end
62
+
63
+ after do
64
+ Object.send(:remove_const, :SpecialGraph)
65
+ Object.send(:remove_const, :SpecialResource)
66
+ end
67
+
68
+ subject { SpecialResource.new mock_client, nil }
69
+
70
+ it "should use the specified class" do
71
+ expect(subject.graph).to be_a SpecialGraph
72
+ end
73
+ end
52
74
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ldp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Beer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-04 00:00:00.000000000 Z
11
+ date: 2014-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -166,7 +166,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
166
166
  version: '0'
167
167
  requirements: []
168
168
  rubyforge_project:
169
- rubygems_version: 2.4.1
169
+ rubygems_version: 2.2.2
170
170
  signing_key:
171
171
  specification_version: 4
172
172
  summary: Linked Data Platform client library