tripod 0.7.5 → 0.7.7
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.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:
|