ldp 0.2.3 → 0.3.0
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 +4 -4
- data/.travis.yml +1 -3
- data/README.md +3 -3
- data/ldp.gemspec +1 -1
- data/lib/ldp/client.rb +1 -0
- data/lib/ldp/client/methods.rb +6 -5
- data/lib/ldp/client/prefer_headers.rb +64 -0
- data/lib/ldp/resource/rdf_source.rb +19 -3
- data/lib/ldp/version.rb +1 -1
- data/spec/lib/ldp/client/prefer_headers_spec.rb +67 -0
- data/spec/lib/ldp/resource/rdf_source_spec.rb +24 -1
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4d377a827832fb58b1a8a62f81bd434dd75c30a4
|
4
|
+
data.tar.gz: 707fd5fcd162dadb2eef16f0b726427f9de51811
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2c7eba449185e70f93692dea2a991efecbb3900a69e2384b5692a761d74eab62fd5233753bc850298b2645c1788efa4519011769fe6f66d3d97fd80b3f4a49f9
|
7
|
+
data.tar.gz: ed5c4424c1aca7a8b745b0571812258b4b5f552b2b009007c1fa7dade50127ee5707d8d534fbc79cefcc862401ee469219deade75be19fc21b699b6db298fa41
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Ldp.rb
|
2
2
|
|
3
|
-
[](https://travis-ci.org/projecthydra/ldp)
|
4
4
|
|
5
5
|
Linked Data Platform client library for Ruby
|
6
6
|
|
@@ -39,8 +39,8 @@ orm.save
|
|
39
39
|
|
40
40
|
### Fedora Commons notes
|
41
41
|
Due to some discrepancies with alpha version of Fedora Commons, you may need to do some things differently:
|
42
|
-
* [Can't load resources from Fedora 4](https://github.com/
|
43
|
-
* [orm.save with an rdf:type doesn't work with Fedora 4.0.0-alpha-3](https://github.com/
|
42
|
+
* [Can't load resources from Fedora 4](https://github.com/projecthydra/ldp/issues/1)
|
43
|
+
* [orm.save with an rdf:type doesn't work with Fedora 4.0.0-alpha-3](https://github.com/projecthydra/ldp/issues/2)
|
44
44
|
|
45
45
|
## Contributing
|
46
46
|
|
data/ldp.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ["chris@cbeer.info"]
|
11
11
|
spec.description = %q{Linked Data Platform client library}
|
12
12
|
spec.summary = spec.description
|
13
|
-
spec.homepage = "https://github.com/
|
13
|
+
spec.homepage = "https://github.com/projecthydra/ldp"
|
14
14
|
spec.license = "APACHE2"
|
15
15
|
|
16
16
|
spec.files = `git ls-files`.split($/)
|
data/lib/ldp/client.rb
CHANGED
data/lib/ldp/client/methods.rb
CHANGED
@@ -29,17 +29,18 @@ module Ldp::Client::Methods
|
|
29
29
|
logger.debug "LDP: GET [#{url}]"
|
30
30
|
resp = http.get do |req|
|
31
31
|
req.url munge_to_relative_url(url)
|
32
|
+
prefer_headers = ::Ldp::PreferHeaders.new
|
32
33
|
|
33
34
|
if options[:minimal]
|
34
|
-
|
35
|
+
prefer_headers.return = "minimal"
|
35
36
|
else
|
37
|
+
prefer_headers.return = "representation"
|
36
38
|
includes = Array(options[:include]).map { |x| Ldp.send("prefer_#{x}") if Ldp.respond_to? "prefer_#{x}" }
|
37
39
|
omits = Array(options[:omit]).map { |x| Ldp.send("prefer_#{x}") if Ldp.respond_to? "prefer_#{x}" }
|
38
|
-
|
39
|
-
|
40
|
-
("omit=\"#{omits.join(" ")}\"" unless omits.empty?)
|
41
|
-
].compact.join("; ")
|
40
|
+
prefer_headers.include = includes
|
41
|
+
prefer_headers.omit = omits
|
42
42
|
end
|
43
|
+
req.headers["Prefer"] = prefer_headers.to_s
|
43
44
|
|
44
45
|
yield req if block_given?
|
45
46
|
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Ldp
|
2
|
+
class PreferHeaders
|
3
|
+
attr_reader :headers_string
|
4
|
+
|
5
|
+
def initialize(headers_string="")
|
6
|
+
@headers_string = headers_string
|
7
|
+
end
|
8
|
+
|
9
|
+
def omit
|
10
|
+
@omit ||= options["omit"] || []
|
11
|
+
end
|
12
|
+
|
13
|
+
def include
|
14
|
+
@include ||= options["include"] || []
|
15
|
+
end
|
16
|
+
|
17
|
+
def return
|
18
|
+
@return ||= options["return"].first || ""
|
19
|
+
end
|
20
|
+
|
21
|
+
def include=(vals)
|
22
|
+
@include = Array(vals)
|
23
|
+
serialize
|
24
|
+
end
|
25
|
+
|
26
|
+
def omit=(vals)
|
27
|
+
@omit = Array(vals)
|
28
|
+
serialize
|
29
|
+
end
|
30
|
+
|
31
|
+
def return=(vals)
|
32
|
+
@return = Array(vals).first
|
33
|
+
serialize
|
34
|
+
end
|
35
|
+
|
36
|
+
def to_s
|
37
|
+
headers_string.to_s
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def serialize
|
43
|
+
head_string = []
|
44
|
+
unless self.return.empty?
|
45
|
+
head_string << "return=#{self.return}"
|
46
|
+
end
|
47
|
+
unless omit.empty?
|
48
|
+
head_string << "omit=\"#{omit.join(" ")}\""
|
49
|
+
end
|
50
|
+
unless self.include.empty?
|
51
|
+
head_string << "include=\"#{self.include.join(" ")}\""
|
52
|
+
end
|
53
|
+
@headers_string = head_string.join("; ")
|
54
|
+
end
|
55
|
+
|
56
|
+
def options
|
57
|
+
headers_string.gsub('"',"").
|
58
|
+
split(";").
|
59
|
+
map{|x| x.strip.split("=")}.
|
60
|
+
map{|x| { x[0] => x[1].split(" ") }}.
|
61
|
+
inject({}, &:merge)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'rdf/turtle'
|
2
|
+
require 'rdf/rdfxml'
|
1
3
|
module Ldp
|
2
4
|
class Resource::RdfSource < Ldp::Resource
|
3
5
|
|
@@ -26,7 +28,7 @@ module Ldp
|
|
26
28
|
end
|
27
29
|
|
28
30
|
def graph
|
29
|
-
@graph ||= new? ? build_empty_graph : build_graph(get
|
31
|
+
@graph ||= new? ? build_empty_graph : build_graph(response_as_graph(get))
|
30
32
|
end
|
31
33
|
|
32
34
|
def build_empty_graph
|
@@ -44,12 +46,26 @@ module Ldp
|
|
44
46
|
|
45
47
|
|
46
48
|
private
|
47
|
-
|
49
|
+
##
|
50
|
+
# @param [Faraday::Response] graph query response
|
51
|
+
# @return [RDF::Graph]
|
52
|
+
def response_as_graph(resp)
|
53
|
+
content_type = resp.headers['Content-Type'] || 'text/turtle'
|
54
|
+
content_type = Array(content_type).first
|
55
|
+
format = Array(RDF::Format.content_types[content_type]).first
|
56
|
+
source = resp.body
|
57
|
+
reader = RDF::Reader.for(content_type:content_type).new(source, base_uri:subject)
|
58
|
+
graph = build_empty_graph
|
59
|
+
reader.each_statement do |stmt|
|
60
|
+
graph << stmt
|
61
|
+
end
|
62
|
+
graph
|
63
|
+
end
|
48
64
|
##
|
49
65
|
# @param [RDF::Graph] original_graph The graph returned by the LDP server
|
50
66
|
# @return [RDF::Graph] A graph striped of any inlined resources present in the original
|
51
67
|
def build_graph(original_graph)
|
52
|
-
inlined_resources = get.
|
68
|
+
inlined_resources = response_as_graph(get).query(predicate: Ldp.contains).map { |x| x.object }
|
53
69
|
|
54
70
|
# we want to scope this graph to just statements about this model, not contained relations
|
55
71
|
if inlined_resources.empty?
|
data/lib/ldp/version.rb
CHANGED
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Ldp::PreferHeaders do
|
4
|
+
let(:header_string) { "return=representation; omit=\"http://1.1.1 http://2.3/b\"; include=\"http://2.2.2\"" }
|
5
|
+
subject { described_class.new(header_string) }
|
6
|
+
|
7
|
+
describe "#return" do
|
8
|
+
it "should return what's being returned" do
|
9
|
+
expect(subject.return).to eq "representation"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "#omit" do
|
14
|
+
it "should return omit array" do
|
15
|
+
expect(subject.omit).to eq ["http://1.1.1", "http://2.3/b"]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "#include" do
|
20
|
+
it "should return include array" do
|
21
|
+
expect(subject.include).to eq ["http://2.2.2"]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "#include=" do
|
26
|
+
it "should set include" do
|
27
|
+
subject.include = ["http://3.3.3", "http://1.1.1"]
|
28
|
+
|
29
|
+
expect(subject.include).to eq ["http://3.3.3", "http://1.1.1"]
|
30
|
+
expect(subject.to_s).to eq "return=representation; omit=\"http://1.1.1 http://2.3/b\"; include=\"http://3.3.3 http://1.1.1\""
|
31
|
+
end
|
32
|
+
it "should be able to set a single value" do
|
33
|
+
subject.include = "http://3.3.3"
|
34
|
+
expect(subject.to_s).to eq "return=representation; omit=\"http://1.1.1 http://2.3/b\"; include=\"http://3.3.3\""
|
35
|
+
end
|
36
|
+
context "when set to nothing" do
|
37
|
+
it "should not serialize that value" do
|
38
|
+
subject.include = []
|
39
|
+
expect(subject.to_s).to eq "return=representation; omit=\"http://1.1.1 http://2.3/b\""
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "#return=" do
|
45
|
+
it "should set return" do
|
46
|
+
subject.return = "bananas"
|
47
|
+
|
48
|
+
expect(subject.return).to eq "bananas"
|
49
|
+
expect(subject.to_s).to eq "return=bananas; omit=\"http://1.1.1 http://2.3/b\"; include=\"http://2.2.2\""
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "#omit=" do
|
54
|
+
it "should set omit" do
|
55
|
+
subject.omit = ["http://3.3.3", "http://1.1.1"]
|
56
|
+
|
57
|
+
expect(subject.omit).to eq ["http://3.3.3", "http://1.1.1"]
|
58
|
+
expect(subject.to_s).to eq "return=representation; omit=\"http://3.3.3 http://1.1.1\"; include=\"http://2.2.2\""
|
59
|
+
end
|
60
|
+
context "when set to nothing" do
|
61
|
+
it "should not serialize that value" do
|
62
|
+
subject.omit = []
|
63
|
+
expect(subject.to_s).to eq "return=representation; include=\"http://2.2.2\""
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'stringio'
|
1
2
|
require 'spec_helper'
|
2
3
|
|
3
4
|
describe Ldp::Resource::RdfSource do
|
@@ -5,10 +6,18 @@ describe Ldp::Resource::RdfSource do
|
|
5
6
|
RDF::Graph.new << [RDF::URI.new(), RDF::DC.title, "Hello, world!"]
|
6
7
|
end
|
7
8
|
|
9
|
+
let(:simple_graph_source) do
|
10
|
+
io = StringIO.new
|
11
|
+
RDF::Writer.for(content_type:'text/turtle').dump(simple_graph,io)
|
12
|
+
io.string
|
13
|
+
end
|
8
14
|
let(:conn_stubs) do
|
9
15
|
Faraday::Adapter::Test::Stubs.new do |stub|
|
10
16
|
stub.post("/") { [201]}
|
11
17
|
stub.put("/abs_url_object") { [201]}
|
18
|
+
stub.head("/abs_url_object") {[404]}
|
19
|
+
stub.head("/existing_object") {[200, {'Content-Type'=>'text/turtle'}]}
|
20
|
+
stub.get("/existing_object") {[200, {'Content-Type'=>'text/turtle'}, simple_graph_source]}
|
12
21
|
end
|
13
22
|
end
|
14
23
|
|
@@ -34,7 +43,6 @@ describe Ldp::Resource::RdfSource do
|
|
34
43
|
|
35
44
|
it "should allow absolute URLs to the LDP server" do
|
36
45
|
obj = Ldp::Resource::RdfSource.new mock_client, "http://my.ldp.server/abs_url_object"
|
37
|
-
allow(obj).to receive(:new?).and_return(true)
|
38
46
|
created_resource = obj.create
|
39
47
|
expect(created_resource).to be_kind_of Ldp::Resource::RdfSource
|
40
48
|
end
|
@@ -49,6 +57,21 @@ describe Ldp::Resource::RdfSource do
|
|
49
57
|
end
|
50
58
|
end
|
51
59
|
|
60
|
+
describe '#graph' do
|
61
|
+
context 'for a new object' do
|
62
|
+
subject { Ldp::Resource::RdfSource.new mock_client, nil }
|
63
|
+
it do
|
64
|
+
expect(subject.graph.size).to eql(0)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
context 'for an existing object' do
|
68
|
+
subject { Ldp::Resource::RdfSource.new mock_client, "http://my.ldp.server/existing_object" }
|
69
|
+
it do
|
70
|
+
expect(subject.graph.size).to eql(1)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
52
75
|
context "When graph_class is overridden" do
|
53
76
|
before do
|
54
77
|
class SpecialGraph < RDF::Graph; 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.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Beer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-04-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -127,6 +127,7 @@ files:
|
|
127
127
|
- lib/ldp.rb
|
128
128
|
- lib/ldp/client.rb
|
129
129
|
- lib/ldp/client/methods.rb
|
130
|
+
- lib/ldp/client/prefer_headers.rb
|
130
131
|
- lib/ldp/container.rb
|
131
132
|
- lib/ldp/container/basic.rb
|
132
133
|
- lib/ldp/container/direct.rb
|
@@ -140,6 +141,7 @@ files:
|
|
140
141
|
- lib/ldp/uri.rb
|
141
142
|
- lib/ldp/version.rb
|
142
143
|
- spec/lib/integration/integration_spec.rb
|
144
|
+
- spec/lib/ldp/client/prefer_headers_spec.rb
|
143
145
|
- spec/lib/ldp/client_spec.rb
|
144
146
|
- spec/lib/ldp/orm/orm_spec.rb
|
145
147
|
- spec/lib/ldp/resource/binary_source_spec.rb
|
@@ -147,7 +149,7 @@ files:
|
|
147
149
|
- spec/lib/ldp/resource_spec.rb
|
148
150
|
- spec/lib/ldp/response_spec.rb
|
149
151
|
- spec/spec_helper.rb
|
150
|
-
homepage: https://github.com/
|
152
|
+
homepage: https://github.com/projecthydra/ldp
|
151
153
|
licenses:
|
152
154
|
- APACHE2
|
153
155
|
metadata: {}
|
@@ -173,6 +175,7 @@ specification_version: 4
|
|
173
175
|
summary: Linked Data Platform client library
|
174
176
|
test_files:
|
175
177
|
- spec/lib/integration/integration_spec.rb
|
178
|
+
- spec/lib/ldp/client/prefer_headers_spec.rb
|
176
179
|
- spec/lib/ldp/client_spec.rb
|
177
180
|
- spec/lib/ldp/orm/orm_spec.rb
|
178
181
|
- spec/lib/ldp/resource/binary_source_spec.rb
|
@@ -180,3 +183,4 @@ test_files:
|
|
180
183
|
- spec/lib/ldp/resource_spec.rb
|
181
184
|
- spec/lib/ldp/response_spec.rb
|
182
185
|
- spec/spec_helper.rb
|
186
|
+
has_rdoc:
|