tripod 0.7.21 → 0.7.22

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.rb CHANGED
@@ -9,4 +9,5 @@ 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
- require 'tripod/errors/bad_data_request'
12
+ require 'tripod/errors/bad_data_request'
13
+ require 'tripod/errors/sparql_query_missing_variables'
@@ -0,0 +1,16 @@
1
+ module Tripod
2
+ class SparqlQueryMissingVariables < StandardError
3
+ attr_reader :missing_variables, :expected_variables, :received_variables
4
+
5
+ def initialize(missing_variables, expected_variables, received_variables)
6
+ raise ArgumentError.new("Missing parameters should be an array") unless missing_variables.is_a?(Array)
7
+ @missing_variables = missing_variables
8
+ @expected_variables = expected_variables
9
+ @received_variables = received_variables
10
+ end
11
+
12
+ def to_s
13
+ "Missing parameters: #{@missing_variables.map(&:to_s).join(', ')}"
14
+ end
15
+ end
16
+ end
@@ -15,8 +15,12 @@ module Tripod
15
15
  cattr_accessor :KEYWORDS
16
16
  @@KEYWORDS = %w(CONSTRUCT ASK DESCRIBE SELECT)
17
17
 
18
- def initialize(query_string)
19
- @query = query_string.strip
18
+ def initialize(query_string, interpolations=nil)
19
+ query_string.strip!
20
+
21
+ @query = interpolate_query(query_string, interpolations) if interpolations
22
+
23
+ @query ||= query_string
20
24
 
21
25
  if self.has_prefixes?
22
26
  @prefixes, @body = self.extract_prefixes
@@ -68,8 +72,24 @@ module Tripod
68
72
  first_query
69
73
  end
70
74
 
75
+ def self.get_expected_variables(query_string)
76
+ query_string.scan(/[.]?\%\{(\w+)\}[.]?/).flatten.uniq.map(&:to_sym)
77
+ end
78
+
71
79
  private
72
80
 
81
+ def interpolate_query(query_string, interpolations)
82
+ expected_variables = self.class.get_expected_variables(query_string)
83
+ interpolations = interpolations.symbolize_keys.select{ |k,v| v && v.length > 0 } # remove ones that have no value
84
+ missing_variables = expected_variables - interpolations.keys
85
+
86
+ if missing_variables.any?
87
+ raise SparqlQueryMissingVariables.new(missing_variables, expected_variables, interpolations)
88
+ end
89
+
90
+ query_string % interpolations # do the interpolating
91
+ end
92
+
73
93
  def get_query_type
74
94
  if /^CONSTRUCT/i.match(self.body)
75
95
  :construct
@@ -1,3 +1,3 @@
1
1
  module Tripod
2
- VERSION = "0.7.21"
2
+ VERSION = "0.7.22"
3
3
  end
@@ -39,6 +39,19 @@ WHERE abc # bar
39
39
  # baz'
40
40
  end
41
41
  end
42
+
43
+ context 'given a query with interpolations' do
44
+ it 'should interpolate the query' do
45
+ q = Tripod::SparqlQuery.new('SELECT xyz WHERE %{foo}', foo: 'bar')
46
+ q.query.should == 'SELECT xyz WHERE bar'
47
+ end
48
+
49
+ context 'where there are missing interpolation values' do
50
+ it "should raise a 'missing variables' exception" do
51
+ expect { Tripod::SparqlQuery.new('SELECT xyz WHERE %{foo}', {bar: 'baz'}) }.to raise_error(Tripod::SparqlQueryMissingVariables)
52
+ end
53
+ end
54
+ end
42
55
  end
43
56
 
44
57
  describe "#has_prefixes?" do
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.21
4
+ version: 0.7.22
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-08-05 00:00:00.000000000 Z
14
+ date: 2013-08-14 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rest-client
18
- requirement: &70318503679660 !ruby/object:Gem::Requirement
18
+ requirement: &70146245932300 !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: *70318503679660
26
+ version_requirements: *70146245932300
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activemodel
29
- requirement: &70318503679120 !ruby/object:Gem::Requirement
29
+ requirement: &70146245945380 !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: *70318503679120
37
+ version_requirements: *70146245945380
38
38
  - !ruby/object:Gem::Dependency
39
39
  name: equivalent-xml
40
- requirement: &70318503695080 !ruby/object:Gem::Requirement
40
+ requirement: &70146245943140 !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: *70318503695080
48
+ version_requirements: *70146245943140
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: rdf
51
- requirement: &70318503694540 !ruby/object:Gem::Requirement
51
+ requirement: &70146245941340 !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: *70318503694540
59
+ version_requirements: *70146245941340
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: rdf-rdfxml
62
- requirement: &70318503694060 !ruby/object:Gem::Requirement
62
+ requirement: &70146245940160 !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: *70318503694060
70
+ version_requirements: *70146245940160
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: rdf-turtle
73
- requirement: &70318503693520 !ruby/object:Gem::Requirement
73
+ requirement: &70146245953620 !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: *70318503693520
81
+ version_requirements: *70146245953620
82
82
  - !ruby/object:Gem::Dependency
83
83
  name: rdf-json
84
- requirement: &70318503693020 !ruby/object:Gem::Requirement
84
+ requirement: &70146245951720 !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: *70318503693020
92
+ version_requirements: *70146245951720
93
93
  - !ruby/object:Gem::Dependency
94
94
  name: json-ld
95
- requirement: &70318503692320 !ruby/object:Gem::Requirement
95
+ requirement: &70146245947140 !ruby/object:Gem::Requirement
96
96
  none: false
97
97
  requirements:
98
98
  - - ~>
@@ -100,10 +100,10 @@ dependencies:
100
100
  version: 0.9.1
101
101
  type: :runtime
102
102
  prerelease: false
103
- version_requirements: *70318503692320
103
+ version_requirements: *70146245947140
104
104
  - !ruby/object:Gem::Dependency
105
105
  name: guid
106
- requirement: &70318503691520 !ruby/object:Gem::Requirement
106
+ requirement: &70146245961480 !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: *70318503691520
114
+ version_requirements: *70146245961480
115
115
  - !ruby/object:Gem::Dependency
116
116
  name: dalli
117
- requirement: &70318503690980 !ruby/object:Gem::Requirement
117
+ requirement: &70146245960340 !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: *70318503690980
125
+ version_requirements: *70146245960340
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_parse_failed.rb
154
154
  - lib/tripod/errors/rdf_type_not_set.rb
155
155
  - lib/tripod/errors/resource_not_found.rb
156
+ - lib/tripod/errors/sparql_query_missing_variables.rb
156
157
  - lib/tripod/errors/sparql_response_too_large.rb
157
158
  - lib/tripod/errors/timeout.rb
158
159
  - lib/tripod/errors/uri_not_set.rb