ldp 1.0.1 → 1.0.2
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/CHANGELOG.md +20 -0
- data/CONTRIBUTING.md +23 -1
- data/lib/ldp/resource/rdf_source.rb +17 -21
- data/lib/ldp/response.rb +6 -14
- data/lib/ldp/version.rb +1 -1
- data/spec/lib/ldp/resource/rdf_source_spec.rb +27 -0
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: db21a1bac397bd2aebca07c57331dcbe7ab895642f2505728b543aa4ef5a1cdd
|
4
|
+
data.tar.gz: 6f4e2a5195c5ceb69b60b7f6d4b3f471e224b7c80dfb647342c422234a9bc615
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: de19de70dba6611052910192d18f2f3f28d5d4821bbe402385e2e26a8bfeddfa64559727f572b81dffb5f2fc7dd14ab3e7f2b12f0968734ec3a8d97f2933b1b9
|
7
|
+
data.tar.gz: c77a9e35d78be05782fb958740d5615ad51b9f8a42b311327d8f9c2db0a710fb42e58533ebe5d9b830800238da53e49277afa9cadb252c13b87cf9f907732244
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,25 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [1.0.2](https://github.com/samvera/ldp/tree/1.0.1) (2021-05-14)
|
4
|
+
|
5
|
+
[Full Changelog](https://github.com/samvera/ldp/compare/v1.0.1...1.0.2)
|
6
|
+
|
7
|
+
This release includes major performance improvements and memory optimizations.
|
8
|
+
|
9
|
+
These optimizations replace linear complexity data access operations with
|
10
|
+
constant-time equivalents. They also prevent repeated wholesale copying of
|
11
|
+
(potentially large) RDF graphs in-memory when deserializing LDP responses.
|
12
|
+
|
13
|
+
This should result in broad performance improvements in all cases. The biggest
|
14
|
+
impact will be on RDF Sources with many `ldp:contains` relationships.
|
15
|
+
|
16
|
+
**Merged pull requests:**
|
17
|
+
|
18
|
+
- don't loop over statements manually; use the library [#118](https://github.com/samvera/ldp/pull/118)
|
19
|
+
- optimize subject filtering [#119](https://github.com/samvera/ldp/pull/119)
|
20
|
+
- Adding CONTRIBUTING.md This was uploaded via automation. [#116](https://github.com/samvera/ldp/pull/116)
|
21
|
+
- fix a regression in handling for custom graph classes in `RDFSource` [#120](https://github.com/samvera/ldp/pull/120)
|
22
|
+
|
3
23
|
## [1.0.1](https://github.com/samvera/ldp/tree/1.0.1) (2020-06-12)
|
4
24
|
|
5
25
|
[Full Changelog](https://github.com/samvera/ldp/compare/v1.0.1-beta1...1.0.1)
|
data/CONTRIBUTING.md
CHANGED
@@ -22,6 +22,28 @@ https://wiki.duraspace.org/display/samvera/Samvera+Community+Intellectual+Proper
|
|
22
22
|
|
23
23
|
You should also add yourself to the `CONTRIBUTORS.md` file in the root of the project.
|
24
24
|
|
25
|
+
## Language
|
26
|
+
|
27
|
+
The language we use matters. Today, tomorrow, and for years to come
|
28
|
+
people will read the code we write. They will judge us for our
|
29
|
+
design, logic, and the words we use to describe the system.
|
30
|
+
|
31
|
+
Our words should be accessible. Favor descriptive words that give
|
32
|
+
meaning while avoiding reinforcing systemic inequities. For example,
|
33
|
+
in the Samvera community, we should favor using allowed\_list instead
|
34
|
+
of whitelist, denied\_list instead of blacklist, or source/copy
|
35
|
+
instead of master/slave.
|
36
|
+
|
37
|
+
We're going to get it wrong, but this is a call to keep working to
|
38
|
+
make it right. View our code and the words we choose as a chance to
|
39
|
+
have a conversation. A chance to grow an understanding of the systems
|
40
|
+
we develop as well as the systems in which we live.
|
41
|
+
|
42
|
+
See [“Blacklists” and “whitelists”: a salutary warning concerning the
|
43
|
+
prevalence of racist language in discussions of predatory
|
44
|
+
publishing](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6148600/) for
|
45
|
+
further details.
|
46
|
+
|
25
47
|
## Contribution Tasks
|
26
48
|
|
27
49
|
* Reporting Issues
|
@@ -34,7 +56,7 @@ You should also add yourself to the `CONTRIBUTORS.md` file in the root of the pr
|
|
34
56
|
### Reporting Issues
|
35
57
|
|
36
58
|
* Make sure you have a [GitHub account](https://github.com/signup/free)
|
37
|
-
* Submit a [Github issue](https://github.com/samvera/ldp/issues) by:
|
59
|
+
* Submit a [Github issue](https://github.com/samvera/ldp/issues/) by:
|
38
60
|
* Clearly describing the issue
|
39
61
|
* Provide a descriptive summary
|
40
62
|
* Explain the expected behavior
|
@@ -67,40 +67,36 @@ module Ldp
|
|
67
67
|
private
|
68
68
|
|
69
69
|
##
|
70
|
+
# @note tries to avoid doing a large scale copy of the {RDF::Repository}
|
71
|
+
# data structure by using the existing {Ldp::Response#graph} if
|
72
|
+
# {#graph_class} is {RDF::Graph}. otherwise, it tries to instantiate a
|
73
|
+
# new graph projected over the same underlying {RDF::Graph#data}. finally,
|
74
|
+
# if {#graph_class}'s initailizer doesn't accept a `data:` parameter, it
|
75
|
+
# shovels {Ldp::Response#graph} into a new object of that class.
|
76
|
+
#
|
70
77
|
# @param [Faraday::Response] graph query response
|
71
78
|
# @return [RDF::Graph]
|
72
79
|
def response_as_graph(resp)
|
73
|
-
|
74
|
-
|
75
|
-
|
80
|
+
if graph_class == RDF::Graph
|
81
|
+
resp.graph
|
82
|
+
else
|
83
|
+
graph_class.new(data: resp.graph.data)
|
76
84
|
end
|
77
|
-
|
85
|
+
rescue ArgumentError
|
86
|
+
build_empty_graph << resp.graph
|
78
87
|
end
|
79
88
|
|
80
89
|
##
|
81
90
|
# @param [RDF::Graph] original_graph The graph returned by the LDP server
|
82
91
|
# @return [RDF::Graph] A graph stripped of any inlined resources present in the original
|
83
92
|
def filtered_graph(original_graph)
|
84
|
-
|
85
|
-
|
86
|
-
# we want to scope this graph to just statements about this model, not contained relations
|
87
|
-
if inlined_resources.empty?
|
88
|
-
original_graph
|
89
|
-
else
|
90
|
-
graph_without_inlined_resources(original_graph, inlined_resources)
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
def graph_without_inlined_resources(original_graph, inlined_resources)
|
95
|
-
new_graph = build_empty_graph
|
93
|
+
contains_statements = original_graph.query(predicate: RDF::Vocab::LDP.contains)
|
96
94
|
|
97
|
-
|
98
|
-
|
99
|
-
new_graph << s
|
100
|
-
end
|
95
|
+
contains_statements.each_object do |contained_uri|
|
96
|
+
original_graph.delete(original_graph.query(subject: contained_uri))
|
101
97
|
end
|
102
98
|
|
103
|
-
|
99
|
+
original_graph
|
104
100
|
end
|
105
101
|
end
|
106
102
|
end
|
data/lib/ldp/response.rb
CHANGED
@@ -105,9 +105,7 @@ module Ldp
|
|
105
105
|
# Get the graph for the resource (or a blank graph if there is no metadata for the resource)
|
106
106
|
def graph
|
107
107
|
@graph ||= begin
|
108
|
-
|
109
|
-
each_statement { |s| graph << s }
|
110
|
-
graph
|
108
|
+
RDF::Graph.new << reader
|
111
109
|
end
|
112
110
|
end
|
113
111
|
|
@@ -115,6 +113,8 @@ module Ldp
|
|
115
113
|
reader_for_content_type.new(body, base_uri: page_subject, &block)
|
116
114
|
end
|
117
115
|
|
116
|
+
##
|
117
|
+
# @deprecated use {#graph} instead
|
118
118
|
def each_statement(&block)
|
119
119
|
reader do |reader|
|
120
120
|
reader.each_statement(&block)
|
@@ -155,17 +155,9 @@ module Ldp
|
|
155
155
|
# Statements about the page
|
156
156
|
def page
|
157
157
|
@page_graph ||= begin
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
res = graph.query RDF::Statement.new(page_subject, nil, nil)
|
162
|
-
|
163
|
-
res.each_statement do |s|
|
164
|
-
g << s
|
165
|
-
end
|
166
|
-
end
|
167
|
-
|
168
|
-
g
|
158
|
+
page_graph = RDF::Graph.new
|
159
|
+
page_graph << graph.query([page_subject, nil, nil]) if resource?
|
160
|
+
page_graph
|
169
161
|
end
|
170
162
|
end
|
171
163
|
|
data/lib/ldp/version.rb
CHANGED
@@ -107,6 +107,24 @@ describe Ldp::Resource::RdfSource do
|
|
107
107
|
expect(subject.graph.size).to eql(1)
|
108
108
|
end
|
109
109
|
end
|
110
|
+
|
111
|
+
context 'with inlined resources' do
|
112
|
+
subject { Ldp::Resource::RdfSource.new mock_client, "http://my.ldp.server/existing_object" }
|
113
|
+
|
114
|
+
let(:simple_graph) do
|
115
|
+
graph = RDF::Graph.new
|
116
|
+
graph << [RDF::URI.new(), RDF::Vocab::DC.title, "Hello, world!"]
|
117
|
+
graph << [RDF::URI.new(), RDF::Vocab::LDP.contains, contained_uri]
|
118
|
+
graph << [contained_uri, RDF::Vocab::DC.title, "delete me"]
|
119
|
+
end
|
120
|
+
|
121
|
+
let(:contained_uri) { RDF::URI.new('http://example.com/contained') }
|
122
|
+
|
123
|
+
it do
|
124
|
+
expect(subject.graph.subjects)
|
125
|
+
.to contain_exactly(RDF::URI('http://my.ldp.server/existing_object'))
|
126
|
+
end
|
127
|
+
end
|
110
128
|
end
|
111
129
|
|
112
130
|
context "When graph_class is overridden" do
|
@@ -130,5 +148,14 @@ describe Ldp::Resource::RdfSource do
|
|
130
148
|
it "should use the specified class" do
|
131
149
|
expect(subject.graph).to be_a SpecialGraph
|
132
150
|
end
|
151
|
+
|
152
|
+
context "with a response body" do
|
153
|
+
subject { SpecialResource.new mock_client, "http://my.ldp.server/existing_object" }
|
154
|
+
|
155
|
+
|
156
|
+
it "should use the specified class" do
|
157
|
+
expect(subject.graph).to be_a SpecialGraph
|
158
|
+
end
|
159
|
+
end
|
133
160
|
end
|
134
161
|
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: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Beer
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-05-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -300,7 +300,7 @@ homepage: https://github.com/projecthydra/ldp
|
|
300
300
|
licenses:
|
301
301
|
- APACHE2
|
302
302
|
metadata: {}
|
303
|
-
post_install_message:
|
303
|
+
post_install_message:
|
304
304
|
rdoc_options: []
|
305
305
|
require_paths:
|
306
306
|
- lib
|
@@ -315,8 +315,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
315
315
|
- !ruby/object:Gem::Version
|
316
316
|
version: '0'
|
317
317
|
requirements: []
|
318
|
-
rubygems_version: 3.1.
|
319
|
-
signing_key:
|
318
|
+
rubygems_version: 3.1.4
|
319
|
+
signing_key:
|
320
320
|
specification_version: 4
|
321
321
|
summary: Linked Data Platform client library
|
322
322
|
test_files:
|