ldp 0.2.3 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
[![Build Status](https://travis-ci.org/
|
3
|
+
[![Build Status](https://travis-ci.org/projecthydra/ldp.png?branch=master)](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:
|