tripod 0.5.2 → 0.6.1
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.
- data/lib/tripod/errors/timeout.rb +5 -0
- data/lib/tripod/errors.rb +1 -1
- data/lib/tripod/fields.rb +1 -0
- data/lib/tripod/persistence.rb +42 -35
- data/lib/tripod/predicates.rb +6 -4
- data/lib/tripod/sparql_client.rb +1 -1
- data/lib/tripod/streaming.rb +13 -11
- data/lib/tripod/version.rb +1 -1
- data/spec/app/models/person.rb +5 -0
- data/spec/tripod/persistence_spec.rb +9 -0
- data/spec/tripod/predicates_spec.rb +7 -1
- metadata +23 -22
data/lib/tripod/errors.rb
CHANGED
@@ -6,7 +6,7 @@ require 'tripod/errors/graph_uri_not_set'
|
|
6
6
|
require 'tripod/errors/rdf_type_not_set'
|
7
7
|
require 'tripod/errors/validations'
|
8
8
|
require 'tripod/errors/rdf_parse_failed'
|
9
|
-
|
9
|
+
require 'tripod/errors/timeout'
|
10
10
|
require 'tripod/errors/sparql_response_too_large'
|
11
11
|
require 'tripod/errors/bad_sparql_request'
|
12
12
|
require 'tripod/errors/bad_data_request'
|
data/lib/tripod/fields.rb
CHANGED
data/lib/tripod/persistence.rb
CHANGED
@@ -4,6 +4,11 @@
|
|
4
4
|
module Tripod::Persistence
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
|
+
included do
|
8
|
+
extend ActiveModel::Callbacks
|
9
|
+
define_model_callbacks :save, :destroy
|
10
|
+
end
|
11
|
+
|
7
12
|
class Tripod::Persistence::Transaction
|
8
13
|
|
9
14
|
def initialize
|
@@ -67,33 +72,34 @@ module Tripod::Persistence
|
|
67
72
|
#
|
68
73
|
# @return [ true, false ] True is success, false if not.
|
69
74
|
def save(opts={})
|
75
|
+
run_callbacks :save do
|
76
|
+
raise Tripod::Errors::GraphUriNotSet.new() unless @graph_uri
|
70
77
|
|
71
|
-
|
78
|
+
transaction = Tripod::Persistence::Transaction.get_transaction(opts[:transaction])
|
72
79
|
|
73
|
-
|
80
|
+
if self.valid?
|
74
81
|
|
75
|
-
|
82
|
+
query = "
|
83
|
+
DELETE {GRAPH ?g {<#{@uri.to_s}> ?p ?o}} WHERE {GRAPH ?g {<#{@uri.to_s}> ?p ?o}};
|
84
|
+
INSERT DATA {
|
85
|
+
GRAPH <#{@graph_uri}> {
|
86
|
+
#{ @repository.dump(:ntriples) }
|
87
|
+
}
|
88
|
+
};
|
89
|
+
"
|
76
90
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
};
|
84
|
-
"
|
91
|
+
if transaction
|
92
|
+
transaction.query ||= ""
|
93
|
+
transaction.query += query
|
94
|
+
else
|
95
|
+
Tripod::SparqlClient::Update::update(query)
|
96
|
+
end
|
85
97
|
|
86
|
-
|
87
|
-
|
88
|
-
transaction.query += query
|
98
|
+
@new_record = false # if running in a trans, just assume it worked. If the query is dodgy, it will throw an exception later.
|
99
|
+
true
|
89
100
|
else
|
90
|
-
|
101
|
+
false
|
91
102
|
end
|
92
|
-
|
93
|
-
@new_record = false # if running in a trans, just assume it worked. If the query is dodgy, it will throw an exception later.
|
94
|
-
true
|
95
|
-
else
|
96
|
-
false
|
97
103
|
end
|
98
104
|
end
|
99
105
|
|
@@ -125,25 +131,26 @@ module Tripod::Persistence
|
|
125
131
|
end
|
126
132
|
|
127
133
|
def destroy(opts={})
|
134
|
+
run_callbacks :destroy do
|
135
|
+
transaction = Tripod::Persistence::Transaction.get_transaction(opts[:transaction])
|
128
136
|
|
129
|
-
|
137
|
+
query = "
|
138
|
+
# delete from default graph:
|
139
|
+
DELETE {<#{@uri.to_s}> ?p ?o} WHERE {<#{@uri.to_s}> ?p ?o};
|
140
|
+
# delete from named graphs:
|
141
|
+
DELETE {GRAPH ?g {<#{@uri.to_s}> ?p ?o}} WHERE {GRAPH ?g {<#{@uri.to_s}> ?p ?o}};
|
142
|
+
"
|
130
143
|
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
144
|
+
if transaction
|
145
|
+
transaction.query ||= ""
|
146
|
+
transaction.query += query
|
147
|
+
else
|
148
|
+
Tripod::SparqlClient::Update::update(query)
|
149
|
+
end
|
137
150
|
|
138
|
-
|
139
|
-
|
140
|
-
transaction.query += query
|
141
|
-
else
|
142
|
-
Tripod::SparqlClient::Update::update(query)
|
151
|
+
@destroyed = true
|
152
|
+
true
|
143
153
|
end
|
144
|
-
|
145
|
-
@destroyed = true
|
146
|
-
true
|
147
154
|
end
|
148
155
|
|
149
156
|
def update_attribute(name, value)
|
data/lib/tripod/predicates.rb
CHANGED
@@ -46,10 +46,12 @@ module Tripod::Predicates
|
|
46
46
|
# remove existing
|
47
47
|
remove_predicate(predicate_uri)
|
48
48
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
49
|
+
if objects
|
50
|
+
# ... and replace
|
51
|
+
objects = [objects] unless objects.kind_of?(Array)
|
52
|
+
objects.each do |object|
|
53
|
+
@repository << RDF::Statement.new( @uri, RDF::URI.new(predicate_uri.to_s), object )
|
54
|
+
end
|
53
55
|
end
|
54
56
|
|
55
57
|
# returns the new values
|
data/lib/tripod/sparql_client.rb
CHANGED
@@ -25,7 +25,7 @@ module Tripod::SparqlClient
|
|
25
25
|
stream_data = -> {
|
26
26
|
if defined?(Rails)
|
27
27
|
Rails.logger.debug "TRIPOD: About to run query: #{sparql}"
|
28
|
-
Rails.logger.debug "TRIPOD:
|
28
|
+
Rails.logger.debug "TRIPOD: Streaming fron url: #{request_url}"
|
29
29
|
Rails.logger.debug "TRIPOD: Streaming opts: #{streaming_opts.inspect}"
|
30
30
|
end
|
31
31
|
|
data/lib/tripod/streaming.rb
CHANGED
@@ -22,18 +22,20 @@ module Tripod
|
|
22
22
|
total_bytes = 0
|
23
23
|
response_string = ""
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
25
|
+
begin
|
26
|
+
http.request_get(uri.request_uri, 'Accept' => accept) do |res|
|
27
|
+
Rails.logger.debug "TRIPOD: response code: #{res.code}" if defined?(Rails)
|
28
|
+
raise Tripod::Errors::BadSparqlRequest.new(res.body) if res.code.to_s != "200"
|
29
|
+
|
30
|
+
res.read_body do |seg|
|
31
|
+
total_bytes += seg.size
|
32
|
+
response_string += seg.to_s
|
33
|
+
# if there's a limit, stop when we reach it
|
34
|
+
raise Tripod::Errors::SparqlResponseTooLarge.new if limit_in_bytes && (total_bytes > limit_in_bytes)
|
35
|
+
end
|
36
36
|
end
|
37
|
+
rescue Timeout::Error => timeout
|
38
|
+
raise Tripod::Errors::Timeout.new
|
37
39
|
end
|
38
40
|
|
39
41
|
response_string
|
data/lib/tripod/version.rb
CHANGED
data/spec/app/models/person.rb
CHANGED
@@ -12,4 +12,9 @@ class Person
|
|
12
12
|
field :age, 'http://example.com/age', :datatype => RDF::XSD.integer
|
13
13
|
field :important_dates, 'http://example.com/importantdates', :datatype => RDF::XSD.date, :multivalued => true
|
14
14
|
|
15
|
+
before_save :pre_save
|
16
|
+
before_destroy :pre_destroy
|
17
|
+
|
18
|
+
def pre_save;; end
|
19
|
+
def pre_destroy;; end
|
15
20
|
end
|
@@ -63,6 +63,11 @@ describe Tripod::Persistence do
|
|
63
63
|
p2.hydrate!
|
64
64
|
p2.repository.dump(:ntriples).should == saved_person.repository.dump(:ntriples)
|
65
65
|
end
|
66
|
+
|
67
|
+
it 'runs the callbacks' do
|
68
|
+
unsaved_person.should_receive(:pre_save)
|
69
|
+
unsaved_person.save
|
70
|
+
end
|
66
71
|
end
|
67
72
|
|
68
73
|
describe ".destroy" do
|
@@ -76,6 +81,10 @@ describe Tripod::Persistence do
|
|
76
81
|
p2.repository.should be_empty # nothing there any more!
|
77
82
|
end
|
78
83
|
|
84
|
+
it 'should run the callbacks' do
|
85
|
+
saved_person.should_receive(:pre_destroy)
|
86
|
+
saved_person.destroy
|
87
|
+
end
|
79
88
|
end
|
80
89
|
|
81
90
|
describe ".save!" do
|
@@ -63,10 +63,16 @@ describe Tripod::Predicates do
|
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
|
+
context 'given a nil value' do
|
67
|
+
it 'just removes the predicate' do
|
68
|
+
person.write_predicate('http://example.com/name', nil)
|
69
|
+
person.read_predicate('http://example.com/name').should be_empty
|
70
|
+
end
|
71
|
+
end
|
66
72
|
end
|
67
73
|
|
68
74
|
describe '#remove_predicate' do
|
69
|
-
it '
|
75
|
+
it 'removes the values where the predicate matches' do
|
70
76
|
person.remove_predicate('http://example.com/blog')
|
71
77
|
person.read_predicate('http://example.com/blog').should be_empty
|
72
78
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tripod
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,11 +11,11 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2013-03-
|
14
|
+
date: 2013-03-27 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rest-client
|
18
|
-
requirement: &
|
18
|
+
requirement: &70363921370680 !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
21
|
- - ! '>='
|
@@ -23,10 +23,10 @@ dependencies:
|
|
23
23
|
version: '0'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
|
-
version_requirements: *
|
26
|
+
version_requirements: *70363921370680
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activemodel
|
29
|
-
requirement: &
|
29
|
+
requirement: &70363921385640 !ruby/object:Gem::Requirement
|
30
30
|
none: false
|
31
31
|
requirements:
|
32
32
|
- - ~>
|
@@ -34,10 +34,10 @@ dependencies:
|
|
34
34
|
version: '3.2'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
|
-
version_requirements: *
|
37
|
+
version_requirements: *70363921385640
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
39
|
name: equivalent-xml
|
40
|
-
requirement: &
|
40
|
+
requirement: &70363921384140 !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
43
|
- - ! '>='
|
@@ -45,10 +45,10 @@ dependencies:
|
|
45
45
|
version: '0'
|
46
46
|
type: :runtime
|
47
47
|
prerelease: false
|
48
|
-
version_requirements: *
|
48
|
+
version_requirements: *70363921384140
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
50
|
name: rdf
|
51
|
-
requirement: &
|
51
|
+
requirement: &70363921383140 !ruby/object:Gem::Requirement
|
52
52
|
none: false
|
53
53
|
requirements:
|
54
54
|
- - ~>
|
@@ -56,10 +56,10 @@ dependencies:
|
|
56
56
|
version: '1.0'
|
57
57
|
type: :runtime
|
58
58
|
prerelease: false
|
59
|
-
version_requirements: *
|
59
|
+
version_requirements: *70363921383140
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
61
|
name: rdf-rdfxml
|
62
|
-
requirement: &
|
62
|
+
requirement: &70363921381980 !ruby/object:Gem::Requirement
|
63
63
|
none: false
|
64
64
|
requirements:
|
65
65
|
- - ! '>='
|
@@ -67,10 +67,10 @@ dependencies:
|
|
67
67
|
version: '0'
|
68
68
|
type: :runtime
|
69
69
|
prerelease: false
|
70
|
-
version_requirements: *
|
70
|
+
version_requirements: *70363921381980
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: rdf-n3
|
73
|
-
requirement: &
|
73
|
+
requirement: &70363921380580 !ruby/object:Gem::Requirement
|
74
74
|
none: false
|
75
75
|
requirements:
|
76
76
|
- - ! '>='
|
@@ -78,10 +78,10 @@ dependencies:
|
|
78
78
|
version: '0'
|
79
79
|
type: :runtime
|
80
80
|
prerelease: false
|
81
|
-
version_requirements: *
|
81
|
+
version_requirements: *70363921380580
|
82
82
|
- !ruby/object:Gem::Dependency
|
83
83
|
name: rdf-json
|
84
|
-
requirement: &
|
84
|
+
requirement: &70363921379380 !ruby/object:Gem::Requirement
|
85
85
|
none: false
|
86
86
|
requirements:
|
87
87
|
- - ! '>='
|
@@ -89,10 +89,10 @@ dependencies:
|
|
89
89
|
version: '0'
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
|
-
version_requirements: *
|
92
|
+
version_requirements: *70363921379380
|
93
93
|
- !ruby/object:Gem::Dependency
|
94
94
|
name: json-ld
|
95
|
-
requirement: &
|
95
|
+
requirement: &70363921378320 !ruby/object:Gem::Requirement
|
96
96
|
none: false
|
97
97
|
requirements:
|
98
98
|
- - ! '>='
|
@@ -100,10 +100,10 @@ dependencies:
|
|
100
100
|
version: '0'
|
101
101
|
type: :runtime
|
102
102
|
prerelease: false
|
103
|
-
version_requirements: *
|
103
|
+
version_requirements: *70363921378320
|
104
104
|
- !ruby/object:Gem::Dependency
|
105
105
|
name: guid
|
106
|
-
requirement: &
|
106
|
+
requirement: &70363921393360 !ruby/object:Gem::Requirement
|
107
107
|
none: false
|
108
108
|
requirements:
|
109
109
|
- - ! '>='
|
@@ -111,10 +111,10 @@ dependencies:
|
|
111
111
|
version: '0'
|
112
112
|
type: :runtime
|
113
113
|
prerelease: false
|
114
|
-
version_requirements: *
|
114
|
+
version_requirements: *70363921393360
|
115
115
|
- !ruby/object:Gem::Dependency
|
116
116
|
name: dalli
|
117
|
-
requirement: &
|
117
|
+
requirement: &70363921391420 !ruby/object:Gem::Requirement
|
118
118
|
none: false
|
119
119
|
requirements:
|
120
120
|
- - ~>
|
@@ -122,7 +122,7 @@ dependencies:
|
|
122
122
|
version: '2.6'
|
123
123
|
type: :runtime
|
124
124
|
prerelease: false
|
125
|
-
version_requirements: *
|
125
|
+
version_requirements: *70363921391420
|
126
126
|
description: RDF ruby ORM
|
127
127
|
email:
|
128
128
|
- ric@swirrl.com
|
@@ -153,6 +153,7 @@ files:
|
|
153
153
|
- lib/tripod/errors/rdf_type_not_set.rb
|
154
154
|
- lib/tripod/errors/resource_not_found.rb
|
155
155
|
- lib/tripod/errors/sparql_response_too_large.rb
|
156
|
+
- lib/tripod/errors/timeout.rb
|
156
157
|
- lib/tripod/errors/uri_not_set.rb
|
157
158
|
- lib/tripod/errors/validations.rb
|
158
159
|
- lib/tripod/extensions.rb
|