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.
@@ -0,0 +1,5 @@
1
+ # encoding: utf-8
2
+ module Tripod::Errors
3
+ class Timeout < StandardError
4
+ end
5
+ end
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
@@ -34,6 +34,7 @@ module Tripod::Fields
34
34
 
35
35
 
36
36
  def new_value_for_field(value, field)
37
+ return unless value
37
38
  if field.is_uri?
38
39
  RDF::URI.new(value.to_s)
39
40
  elsif field.datatype
@@ -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
- raise Tripod::Errors::GraphUriNotSet.new() unless @graph_uri
78
+ transaction = Tripod::Persistence::Transaction.get_transaction(opts[:transaction])
72
79
 
73
- transaction = Tripod::Persistence::Transaction.get_transaction(opts[:transaction])
80
+ if self.valid?
74
81
 
75
- if self.valid?
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
- query = "
78
- DELETE {GRAPH ?g {<#{@uri.to_s}> ?p ?o}} WHERE {GRAPH ?g {<#{@uri.to_s}> ?p ?o}};
79
- INSERT DATA {
80
- GRAPH <#{@graph_uri}> {
81
- #{ @repository.dump(:ntriples) }
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
- if transaction
87
- transaction.query ||= ""
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
- Tripod::SparqlClient::Update::update(query)
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
- transaction = Tripod::Persistence::Transaction.get_transaction(opts[:transaction])
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
- query = "
132
- # delete from default graph:
133
- DELETE {<#{@uri.to_s}> ?p ?o} WHERE {<#{@uri.to_s}> ?p ?o};
134
- # delete from named graphs:
135
- DELETE {GRAPH ?g {<#{@uri.to_s}> ?p ?o}} WHERE {GRAPH ?g {<#{@uri.to_s}> ?p ?o}};
136
- "
144
+ if transaction
145
+ transaction.query ||= ""
146
+ transaction.query += query
147
+ else
148
+ Tripod::SparqlClient::Update::update(query)
149
+ end
137
150
 
138
- if transaction
139
- transaction.query ||= ""
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)
@@ -46,10 +46,12 @@ module Tripod::Predicates
46
46
  # remove existing
47
47
  remove_predicate(predicate_uri)
48
48
 
49
- # ... and replace
50
- objects = [objects] unless objects.kind_of?(Array)
51
- objects.each do |object|
52
- @repository << RDF::Statement.new( @uri, RDF::URI.new(predicate_uri.to_s), object )
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
@@ -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: Straming fron url: #{request_url}"
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
 
@@ -22,18 +22,20 @@ module Tripod
22
22
  total_bytes = 0
23
23
  response_string = ""
24
24
 
25
- http.request_get(uri.request_uri, 'Accept' => accept) do |res|
26
-
27
- Rails.logger.debug "TRIPOD: response code: #{res.code}" if defined?(Rails)
28
-
29
- raise Tripod::Errors::BadSparqlRequest.new(res.body) if res.code.to_s != "200"
30
-
31
- res.read_body do |seg|
32
- total_bytes += seg.size
33
- response_string += seg.to_s
34
- # if there's a limit, stop when we reach it
35
- raise Tripod::Errors::SparqlResponseTooLarge.new if limit_in_bytes && (total_bytes > limit_in_bytes)
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
@@ -1,3 +1,3 @@
1
1
  module Tripod
2
- VERSION = "0.5.2"
2
+ VERSION = "0.6.1"
3
3
  end
@@ -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 'remnoves the values where the predicate matches' do
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.5.2
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-26 00:00:00.000000000 Z
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: &70274754940040 !ruby/object:Gem::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: *70274754940040
26
+ version_requirements: *70363921370680
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activemodel
29
- requirement: &70274754955340 !ruby/object:Gem::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: *70274754955340
37
+ version_requirements: *70363921385640
38
38
  - !ruby/object:Gem::Dependency
39
39
  name: equivalent-xml
40
- requirement: &70274754953840 !ruby/object:Gem::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: *70274754953840
48
+ version_requirements: *70363921384140
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: rdf
51
- requirement: &70274754952740 !ruby/object:Gem::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: *70274754952740
59
+ version_requirements: *70363921383140
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: rdf-rdfxml
62
- requirement: &70274754951700 !ruby/object:Gem::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: *70274754951700
70
+ version_requirements: *70363921381980
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: rdf-n3
73
- requirement: &70274754950180 !ruby/object:Gem::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: *70274754950180
81
+ version_requirements: *70363921380580
82
82
  - !ruby/object:Gem::Dependency
83
83
  name: rdf-json
84
- requirement: &70274754949060 !ruby/object:Gem::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: *70274754949060
92
+ version_requirements: *70363921379380
93
93
  - !ruby/object:Gem::Dependency
94
94
  name: json-ld
95
- requirement: &70274754947900 !ruby/object:Gem::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: *70274754947900
103
+ version_requirements: *70363921378320
104
104
  - !ruby/object:Gem::Dependency
105
105
  name: guid
106
- requirement: &70274754963140 !ruby/object:Gem::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: *70274754963140
114
+ version_requirements: *70363921393360
115
115
  - !ruby/object:Gem::Dependency
116
116
  name: dalli
117
- requirement: &70274754961160 !ruby/object:Gem::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: *70274754961160
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