tripod 0.7.5 → 0.7.7
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/tripod.rb +6 -2
- data/lib/tripod/attributes.rb +2 -2
- data/lib/tripod/components.rb +1 -0
- data/lib/tripod/criteria/execution.rb +1 -1
- data/lib/tripod/fields.rb +5 -0
- data/lib/tripod/locale/en.yml +10 -0
- data/lib/tripod/sparql_query.rb +1 -1
- data/lib/tripod/validations/is_url.rb +23 -0
- data/lib/tripod/version.rb +1 -1
- data/spec/tripod/attributes_spec.rb +6 -1
- data/spec/tripod/criteria_execution_spec.rb +1 -1
- data/spec/tripod/fields_spec.rb +9 -3
- data/spec/tripod/sparql_query_spec.rb +2 -2
- data/spec/tripod/validations/is_url_spec.rb +25 -0
- metadata +26 -22
data/lib/tripod.rb
CHANGED
@@ -34,7 +34,7 @@ require 'rdf/rdfxml'
|
|
34
34
|
require 'rdf/n3'
|
35
35
|
require 'rdf/json'
|
36
36
|
require 'json/ld'
|
37
|
-
|
37
|
+
require 'uri'
|
38
38
|
require 'rest_client'
|
39
39
|
|
40
40
|
module Tripod
|
@@ -90,6 +90,7 @@ require "tripod/resource_collection"
|
|
90
90
|
require "tripod/predicates"
|
91
91
|
require "tripod/attributes"
|
92
92
|
require "tripod/callbacks"
|
93
|
+
require "tripod/validations/is_url"
|
93
94
|
require "tripod/errors"
|
94
95
|
require "tripod/repository"
|
95
96
|
require "tripod/fields"
|
@@ -103,4 +104,7 @@ require "tripod/version"
|
|
103
104
|
|
104
105
|
# these need to be at the end
|
105
106
|
require "tripod/components"
|
106
|
-
require "tripod/resource"
|
107
|
+
require "tripod/resource"
|
108
|
+
|
109
|
+
require 'active_support/i18n'
|
110
|
+
I18n.load_path << File.dirname(__FILE__) + '/tripod/locale/en.yml'
|
data/lib/tripod/attributes.rb
CHANGED
@@ -81,10 +81,10 @@ module Tripod::Attributes
|
|
81
81
|
end
|
82
82
|
|
83
83
|
def write_value_for_field(value, field)
|
84
|
-
return
|
84
|
+
return if value.blank?
|
85
85
|
|
86
86
|
if field.is_uri?
|
87
|
-
RDF::URI.new(value.to_s)
|
87
|
+
uri = RDF::URI.new(value.to_s)
|
88
88
|
elsif field.datatype
|
89
89
|
RDF::Literal.new(value, :datatype => field.datatype)
|
90
90
|
else
|
data/lib/tripod/components.rb
CHANGED
@@ -44,7 +44,7 @@ module Tripod
|
|
44
44
|
sq = Tripod::SparqlQuery.new(build_select_query(opts))
|
45
45
|
count_sparql = sq.as_count_query_str
|
46
46
|
result = Tripod::SparqlClient::Query.select(count_sparql)
|
47
|
-
result[0]["
|
47
|
+
result[0]["tripod_count_var"]["value"].to_i
|
48
48
|
end
|
49
49
|
|
50
50
|
# PRIVATE:
|
data/lib/tripod/fields.rb
CHANGED
@@ -58,6 +58,11 @@ module Tripod::Fields
|
|
58
58
|
|
59
59
|
# set up the accessors for the fields
|
60
60
|
create_accessors(name, name, options)
|
61
|
+
|
62
|
+
# create a URL validation if appropriate
|
63
|
+
# (format nabbed from https://gist.github.com/joshuap/948880)
|
64
|
+
validates(name, is_url: true) if field.is_uri?
|
65
|
+
|
61
66
|
field
|
62
67
|
end
|
63
68
|
|
@@ -0,0 +1,10 @@
|
|
1
|
+
en:
|
2
|
+
activemodel:
|
3
|
+
errors:
|
4
|
+
# The default format to use in full error messages.
|
5
|
+
format: "%{attribute} %{message}"
|
6
|
+
|
7
|
+
# The values :model, :attribute and :value are always available for interpolation
|
8
|
+
# The value :count is available when applicable. Can be used for pluralization.
|
9
|
+
messages:
|
10
|
+
is_url: "is not a valid URL"
|
data/lib/tripod/sparql_query.rb
CHANGED
@@ -49,7 +49,7 @@ module Tripod
|
|
49
49
|
def as_count_query_str
|
50
50
|
check_subqueryable!
|
51
51
|
|
52
|
-
count_query = "SELECT (COUNT(*) as ?
|
52
|
+
count_query = "SELECT (COUNT(*) as ?tripod_count_var) { #{self.body} }"
|
53
53
|
count_query = "#{self.prefixes} #{count_query}" if self.prefixes
|
54
54
|
|
55
55
|
# just returns the string representing the count query for this query.
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Tripod::Validations
|
2
|
+
class IsUrlValidator < ActiveModel::EachValidator
|
3
|
+
def validate_each(resource, attribute, value)
|
4
|
+
return unless value # nil values get passed over.
|
5
|
+
is_valid = value.is_a?(Array) ? value.all?{|v| is_url?(v)} : is_url?(value)
|
6
|
+
resource.errors.add(attribute, :is_url, options) unless is_valid
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def is_url?(value)
|
12
|
+
uri = nil
|
13
|
+
begin
|
14
|
+
uri = URI.parse(value.to_s)
|
15
|
+
rescue
|
16
|
+
return false
|
17
|
+
end
|
18
|
+
return false unless ['http', 'https'].include?(uri.scheme)
|
19
|
+
return false unless uri.host && uri.host.split('.').length > 1
|
20
|
+
true
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/tripod/version.rb
CHANGED
@@ -74,7 +74,7 @@ describe Tripod::Attributes do
|
|
74
74
|
|
75
75
|
context "where there is no field with the given name" do
|
76
76
|
it "should raise a 'field not present' error" do
|
77
|
-
|
77
|
+
expect { person.read_attribute(:hoof_size) }.to raise_error(Tripod::Errors::FieldNotPresent)
|
78
78
|
end
|
79
79
|
end
|
80
80
|
end
|
@@ -92,6 +92,11 @@ describe Tripod::Attributes do
|
|
92
92
|
person.read_predicate('http://example.com/age').first.datatype.should == RDF::XSD.integer
|
93
93
|
end
|
94
94
|
|
95
|
+
it "should not write the predicate given a blank value" do
|
96
|
+
person[:name] = ''
|
97
|
+
person.read_predicate('http://example.com/name').should be_empty
|
98
|
+
end
|
99
|
+
|
95
100
|
context "where the attribute is a uri" do
|
96
101
|
it "should convert a string to an RDF::URI" do
|
97
102
|
person[:father] = 'http://example.com/darth'
|
@@ -190,7 +190,7 @@ describe Tripod::Criteria do
|
|
190
190
|
end
|
191
191
|
|
192
192
|
it "should execute the right Sparql" do
|
193
|
-
sparql = "SELECT (COUNT(*) as ?
|
193
|
+
sparql = "SELECT (COUNT(*) as ?tripod_count_var) { SELECT DISTINCT ?uri (<http://example.com/graph> as ?graph) WHERE { GRAPH <http://example.com/graph> { ?uri a <http://example.com/person> . ?uri ?p ?o } } LIMIT 10 OFFSET 20 }"
|
194
194
|
Tripod::SparqlClient::Query.should_receive(:select).with(sparql).and_call_original
|
195
195
|
Person.all.limit(10).offset(20).count
|
196
196
|
end
|
data/spec/tripod/fields_spec.rb
CHANGED
@@ -24,13 +24,19 @@ describe Tripod::Fields do
|
|
24
24
|
end
|
25
25
|
|
26
26
|
context "when the value is not set" do
|
27
|
-
before
|
28
|
-
barry.name = nil
|
29
|
-
end
|
27
|
+
before { barry.name = nil }
|
30
28
|
|
31
29
|
it "should have a check? method which returns false" do
|
32
30
|
barry.name?.should == false
|
33
31
|
end
|
34
32
|
end
|
33
|
+
|
34
|
+
context "given a field of type URI where an invalid URI is given" do
|
35
|
+
before { barry.father = 'Steven Notauri' }
|
36
|
+
|
37
|
+
it "should not be valid" do
|
38
|
+
barry.should_not be_valid
|
39
|
+
end
|
40
|
+
end
|
35
41
|
end
|
36
42
|
end
|
@@ -88,14 +88,14 @@ describe Tripod::SparqlQuery do
|
|
88
88
|
context 'without prefixes' do
|
89
89
|
it "should return a new SparqlQuery with the original query wrapped in a count" do
|
90
90
|
q = Tripod::SparqlQuery.new('SELECT ?s WHERE { ?s ?p ?o }')
|
91
|
-
q.as_count_query_str.should == 'SELECT (COUNT(*) as ?
|
91
|
+
q.as_count_query_str.should == 'SELECT (COUNT(*) as ?tripod_count_var) { SELECT ?s WHERE { ?s ?p ?o } }'
|
92
92
|
end
|
93
93
|
end
|
94
94
|
|
95
95
|
context 'with prefixes' do
|
96
96
|
it "should move the prefixes to the start" do
|
97
97
|
q = Tripod::SparqlQuery.new('PREFIX e: <http://example.com> SELECT ?s WHERE { ?s ?p ?o }')
|
98
|
-
q.as_count_query_str.should == 'PREFIX e: <http://example.com> SELECT (COUNT(*) as ?
|
98
|
+
q.as_count_query_str.should == 'PREFIX e: <http://example.com> SELECT (COUNT(*) as ?tripod_count_var) { SELECT ?s WHERE { ?s ?p ?o } }'
|
99
99
|
end
|
100
100
|
end
|
101
101
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Tripod::Validations::IsUrlValidator do
|
4
|
+
let(:person) { Person.new('http://example.com/barry') }
|
5
|
+
|
6
|
+
it 'should be valid given a valid URL' do
|
7
|
+
person.father = 'http://example.com/bob'
|
8
|
+
person.should be_valid
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should invalidate given a non-http(s) URL' do
|
12
|
+
person.father = 'ftp://example.com/bob.nt'
|
13
|
+
person.should_not be_valid
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'should invalidate given something unlike a URL' do
|
17
|
+
person.father = 'http:Bob'
|
18
|
+
person.should_not be_valid
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should invalidate given a domain without a TLD' do
|
22
|
+
person.father = 'http://bob'
|
23
|
+
person.should_not be_valid
|
24
|
+
end
|
25
|
+
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.7.
|
4
|
+
version: 0.7.7
|
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-04-
|
14
|
+
date: 2013-04-14 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rest-client
|
18
|
-
requirement: &
|
18
|
+
requirement: &70258719639060 !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: *70258719639060
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activemodel
|
29
|
-
requirement: &
|
29
|
+
requirement: &70258719636980 !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: *70258719636980
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
39
|
name: equivalent-xml
|
40
|
-
requirement: &
|
40
|
+
requirement: &70258719656680 !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: *70258719656680
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
50
|
name: rdf
|
51
|
-
requirement: &
|
51
|
+
requirement: &70258719655760 !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: *70258719655760
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
61
|
name: rdf-rdfxml
|
62
|
-
requirement: &
|
62
|
+
requirement: &70258719654460 !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: *70258719654460
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: rdf-n3
|
73
|
-
requirement: &
|
73
|
+
requirement: &70258719651620 !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: *70258719651620
|
82
82
|
- !ruby/object:Gem::Dependency
|
83
83
|
name: rdf-json
|
84
|
-
requirement: &
|
84
|
+
requirement: &70258719649660 !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: *70258719649660
|
93
93
|
- !ruby/object:Gem::Dependency
|
94
94
|
name: json-ld
|
95
|
-
requirement: &
|
95
|
+
requirement: &70258719666600 !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: *70258719666600
|
104
104
|
- !ruby/object:Gem::Dependency
|
105
105
|
name: guid
|
106
|
-
requirement: &
|
106
|
+
requirement: &70258719664320 !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: *70258719664320
|
115
115
|
- !ruby/object:Gem::Dependency
|
116
116
|
name: dalli
|
117
|
-
requirement: &
|
117
|
+
requirement: &70258719663440 !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: *70258719663440
|
126
126
|
description: RDF ruby ORM
|
127
127
|
email:
|
128
128
|
- ric@swirrl.com
|
@@ -162,6 +162,7 @@ files:
|
|
162
162
|
- lib/tripod/fields.rb
|
163
163
|
- lib/tripod/fields/standard.rb
|
164
164
|
- lib/tripod/finders.rb
|
165
|
+
- lib/tripod/locale/en.yml
|
165
166
|
- lib/tripod/persistence.rb
|
166
167
|
- lib/tripod/predicates.rb
|
167
168
|
- lib/tripod/repository.rb
|
@@ -172,6 +173,7 @@ files:
|
|
172
173
|
- lib/tripod/sparql_query.rb
|
173
174
|
- lib/tripod/state.rb
|
174
175
|
- lib/tripod/streaming.rb
|
176
|
+
- lib/tripod/validations/is_url.rb
|
175
177
|
- lib/tripod/version.rb
|
176
178
|
- spec/app/models/person.rb
|
177
179
|
- spec/app/models/resource.rb
|
@@ -191,6 +193,7 @@ files:
|
|
191
193
|
- spec/tripod/sparql_query_spec.rb
|
192
194
|
- spec/tripod/state_spec.rb
|
193
195
|
- spec/tripod/streaming_spec.rb
|
196
|
+
- spec/tripod/validations/is_url_spec.rb
|
194
197
|
- tripod.gemspec
|
195
198
|
homepage: http://github.com/Swirrl/tripod
|
196
199
|
licenses: []
|
@@ -235,4 +238,5 @@ test_files:
|
|
235
238
|
- spec/tripod/sparql_query_spec.rb
|
236
239
|
- spec/tripod/state_spec.rb
|
237
240
|
- spec/tripod/streaming_spec.rb
|
241
|
+
- spec/tripod/validations/is_url_spec.rb
|
238
242
|
has_rdoc:
|