dbd 0.0.9 → 0.0.10

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.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/Guardfile +2 -2
  3. data/HISTORY.txt +11 -0
  4. data/README.md +24 -5
  5. data/bin/test_4.rb +2 -2
  6. data/bin/test_6.rb +2 -2
  7. data/docs/test.rb +1 -1
  8. data/lib/dbd/fact.rb +35 -67
  9. data/lib/dbd/fact/factory.rb +90 -0
  10. data/lib/dbd/fact/id.rb +2 -2
  11. data/lib/dbd/fact/subject.rb +2 -2
  12. data/lib/dbd/graph.rb +4 -6
  13. data/lib/dbd/helpers/uuid.rb +2 -2
  14. data/lib/dbd/resource.rb +1 -1
  15. data/lib/dbd/time_stamp.rb +16 -7
  16. data/lib/dbd/version.rb +1 -1
  17. data/spec/lib/dbd/fact/collection/collection_spec.rb +59 -59
  18. data/spec/lib/dbd/fact/factory/factory_spec.rb +109 -0
  19. data/spec/lib/dbd/fact/id/id_spec.rb +4 -4
  20. data/spec/lib/dbd/fact/id/test_factories_spec.rb +14 -0
  21. data/spec/lib/dbd/fact/methods_spec.rb +53 -57
  22. data/spec/lib/dbd/fact/new_spec.rb +32 -55
  23. data/spec/lib/dbd/fact/subject/subject_spec.rb +3 -3
  24. data/spec/lib/dbd/fact/subject/test_factories_spec.rb +23 -0
  25. data/spec/lib/dbd/fact/test_factories_spec.rb +82 -0
  26. data/spec/lib/dbd/graph/add_to_graph_spec.rb +31 -31
  27. data/spec/lib/dbd/graph/from_csv_spec.rb +47 -20
  28. data/spec/lib/dbd/graph/test_factories_spec.rb +58 -0
  29. data/spec/lib/dbd/graph/to_csv_spec.rb +46 -45
  30. data/spec/lib/dbd/helpers/ordered_set_collection/ordered_set_collection_spec.rb +17 -17
  31. data/spec/lib/dbd/helpers/uuid/uuid_spec.rb +11 -5
  32. data/spec/lib/dbd/performance_spec.rb +6 -6
  33. data/spec/lib/dbd/provenance_fact/methods_spec.rb +19 -19
  34. data/spec/lib/dbd/provenance_fact/new_spec.rb +17 -17
  35. data/spec/lib/dbd/provenance_fact/test_factories_spec.rb +24 -0
  36. data/spec/lib/dbd/provenance_resource/provenance_resource_spec.rb +24 -24
  37. data/spec/lib/dbd/rdf_base/rdf_base_spec.rb +7 -7
  38. data/spec/lib/dbd/resource/collection_spec.rb +34 -34
  39. data/spec/lib/dbd/resource/new_spec.rb +12 -12
  40. data/spec/lib/dbd/resource/test_factories_spec.rb +25 -0
  41. data/spec/lib/dbd/time_stamp/comparisons_spec.rb +31 -30
  42. data/spec/lib/dbd/time_stamp/methods_spec.rb +17 -13
  43. data/spec/lib/dbd/time_stamp/new_spec.rb +40 -14
  44. data/spec/lib/dbd/time_stamp/test_factories_spec.rb +18 -0
  45. data/spec/spec_helper.rb +2 -6
  46. data/spec/{factories → test_factories}/fact.rb +32 -25
  47. data/spec/{factories → test_factories}/fact/id.rb +2 -2
  48. data/spec/{factories → test_factories}/fact/subject.rb +3 -3
  49. data/spec/test_factories/graph.rb +25 -0
  50. data/spec/{factories → test_factories}/provenance_fact.rb +8 -10
  51. data/spec/{factories → test_factories}/provenance_resource.rb +3 -3
  52. data/spec/{factories → test_factories}/resource.rb +10 -4
  53. data/spec/{factories → test_factories}/time_stamp.rb +2 -2
  54. metadata +35 -32
  55. data/spec/factories/graph.rb +0 -23
  56. data/spec/lib/dbd/fact/factory_spec.rb +0 -82
  57. data/spec/lib/dbd/fact/id/factory_spec.rb +0 -16
  58. data/spec/lib/dbd/fact/subject/factory_spec.rb +0 -25
  59. data/spec/lib/dbd/graph/factory_spec.rb +0 -33
  60. data/spec/lib/dbd/provenance_fact/factory_spec.rb +0 -24
  61. data/spec/lib/dbd/resource/factory_spec.rb +0 -18
  62. data/spec/lib/dbd/time_stamp/factory_spec.rb +0 -18
data/lib/dbd/graph.rb CHANGED
@@ -52,13 +52,11 @@ module Dbd
52
52
  #
53
53
  # @param [IO Stream] csv an IO Stream that contains the CSV serialization
54
54
  # @return [Graph] the imported graph
55
- def self.from_CSV(csv)
56
- new.tap do |graph|
57
- CSV.new(csv).each do |row|
58
- # TODO validate the input formats (e.g. invalid uuid codes)
59
- graph << Fact.from_string_values(row)
60
- end
55
+ def from_CSV(csv)
56
+ CSV.new(csv).each do |row|
57
+ self << Fact.factory.from_string_values(row, validate: true)
61
58
  end
59
+ self
62
60
  end
63
61
 
64
62
  private
@@ -10,8 +10,8 @@ module Dbd
10
10
  ##
11
11
  # A regexp that can be used in tests.
12
12
  # @return [Regexp]
13
- def self.regexp
14
- /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/
13
+ def self.valid_regexp
14
+ /\A[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\Z/
15
15
  end
16
16
 
17
17
  ##
data/lib/dbd/resource.rb CHANGED
@@ -30,7 +30,7 @@ module Dbd
30
30
  ##
31
31
  # @return [Fact::Subject] a new (random) Resource subject
32
32
  def self.new_subject
33
- Fact.new_subject
33
+ Fact.factory.new_subject
34
34
  end
35
35
 
36
36
  ##
@@ -53,8 +53,8 @@ module Dbd
53
53
  # regexp for the nanosecond granularity and in UTC
54
54
  #
55
55
  # Can be used to validate input strings or in tests.
56
- def self.to_s_regexp
57
- /\d{4}-\d\d-\d\d \d\d:\d\d:\d\d\.\d{9} UTC/
56
+ def self.valid_regexp
57
+ /\A\d{4}-\d\d-\d\d \d\d:\d\d:\d\d\.\d{9} UTC\Z/
58
58
  end
59
59
 
60
60
  private
@@ -63,15 +63,24 @@ module Dbd
63
63
  [Time.now.utc, (larger_than && larger_than.time)].compact.max + random_offset
64
64
  end
65
65
 
66
+ # Minimum offset between consecutive times.
67
+ # For jruby, a 1 ns offset was not enough
68
+ # (some collisions, see https://github.com/jruby/jruby/issues/843)
69
+ # With 2 ns, the problem disappears (probably a "1 off" rounding error
70
+ # that cannot occur with a minimum distance of 2?).
71
+ def minimum_time_offset
72
+ Rational('2/1_000_000_000')
73
+ end
74
+
75
+ # Random offset, between minimum_time_offset and 1 us (1 micro second)
66
76
  def random_offset
67
- Rational("#{1+rand(999)}/1_000_000_000")
77
+ minimum_time_offset + Rational("#{rand(990)}/1_000_000_000")
68
78
  end
69
79
 
70
80
  def time_format
71
81
  '%F %T.%N %Z'
72
82
  end
73
83
 
74
- ##
75
84
  # with a nanosecond granularity and in UTC
76
85
  def time_from_s(time_string)
77
86
  # For ns precision in JRuby this extended process is required
@@ -83,7 +92,7 @@ module Dbd
83
92
  time_hash[:hour],
84
93
  time_hash[:min],
85
94
  time_hash[:sec],
86
- time_hash[:sec_fraction] * 1_000_000)
95
+ time_hash[:sec_fraction] * 1_000_000 + Rational('3/10_000_000_000'))
87
96
  end
88
97
 
89
98
  def validate_time_zone(time_hash)
@@ -100,8 +109,8 @@ module Dbd
100
109
  @time.strftime(time_format)
101
110
  end
102
111
 
103
- # Max drift in time_stamp
104
- MAX_DRIFT = Rational("1/1_000_000")
112
+ # Max drift in time_stamp for near?
113
+ MAX_DRIFT = Rational("1/1_000_000").freeze
105
114
 
106
115
  ##
107
116
  # determines if 2 time_stamps are "near".
data/lib/dbd/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Dbd
2
- VERSION = "0.0.9"
2
+ VERSION = "0.0.10"
3
3
  end
@@ -4,19 +4,19 @@ module Dbd
4
4
  class Fact
5
5
  describe Collection do
6
6
 
7
- let(:provenance_subject_1) { ProvenanceFact.new_subject }
8
- let(:provenance_subject_2) { ProvenanceFact.new_subject }
7
+ let(:provenance_subject_1) { Fact.factory.new_subject }
8
+ let(:provenance_subject_2) { Fact.factory.new_subject }
9
9
 
10
- let(:provenance_fact_context) { Factories::ProvenanceFact.context(provenance_subject_1) }
11
- let(:provenance_fact_created_by) { Factories::ProvenanceFact.created_by(provenance_subject_1) }
12
- let(:provenance_fact_original_source) { Factories::ProvenanceFact.original_source(provenance_subject_2) }
10
+ let(:provenance_fact_context) { TestFactories::ProvenanceFact.context(provenance_subject_1) }
11
+ let(:provenance_fact_created_by) { TestFactories::ProvenanceFact.created_by(provenance_subject_1) }
12
+ let(:provenance_fact_original_source) { TestFactories::ProvenanceFact.original_source(provenance_subject_2) }
13
13
 
14
- let(:fact_1) { Factories::Fact.fact_1(provenance_subject_1) }
15
- let(:fact_2_with_subject) { Factories::Fact.fact_2_with_subject(provenance_subject_1) }
16
- let(:fact_3_with_subject) { Factories::Fact.fact_3_with_subject(provenance_subject_1) }
14
+ let(:fact_1) { TestFactories::Fact.fact_1(provenance_subject_1) }
15
+ let(:fact_2_with_subject) { TestFactories::Fact.fact_2_with_subject(provenance_subject_1) }
16
+ let(:fact_3_with_subject) { TestFactories::Fact.fact_3_with_subject(provenance_subject_1) }
17
17
 
18
- let(:fact_2_3) { Factories::Fact::Collection.fact_2_3(provenance_subject_1) }
19
- let(:provenance_facts) { Factories::Fact::Collection.provenance_facts(provenance_subject_1) }
18
+ let(:fact_2_3) { TestFactories::Fact::Collection.fact_2_3(provenance_subject_1) }
19
+ let(:provenance_facts) { TestFactories::Fact::Collection.provenance_facts(provenance_subject_1) }
20
20
 
21
21
  let(:subject) do
22
22
  Object.new.tap do |object_with_Fact_Collection|
@@ -25,52 +25,52 @@ module Dbd
25
25
  end
26
26
  end
27
27
 
28
- describe ".new : " do
29
- it "the collection is not an array" do
28
+ describe '.new : ' do
29
+ it 'the collection is not an array' do
30
30
  subject.should_not be_a(Array)
31
31
  end
32
32
 
33
- it "the collection has Enumerable methods" do
33
+ it 'the collection has Enumerable methods' do
34
34
  subject.map #should_not raise_exception
35
35
  end
36
36
  end
37
37
 
38
- describe ".methods : " do
38
+ describe '.methods : ' do
39
39
 
40
- describe "#<< : " do
41
- it "adding a fact works" do
40
+ describe '#<< : ' do
41
+ it 'adding a fact works' do
42
42
  subject << fact_2_with_subject
43
43
  subject.size.should == 1
44
44
  end
45
45
 
46
- it "adding a provenance_fact works" do
46
+ it 'adding a provenance_fact works' do
47
47
  subject << provenance_fact_context
48
48
  subject.size.should == 1
49
49
  end
50
50
 
51
- it "returns self to allow chaining" do
51
+ it 'returns self to allow chaining' do
52
52
  (subject << provenance_fact_context).should == subject
53
53
  end
54
54
  end
55
55
 
56
- it "#first should be a Fact" do
56
+ it '#first should be a Fact' do
57
57
  subject << fact_2_with_subject
58
58
  subject.first.should be_a(Fact)
59
59
  end
60
60
 
61
- it "other functions (e.g. []) do not work" do
61
+ it 'other functions (e.g. []) do not work' do
62
62
  subject << fact_2_with_subject
63
63
  lambda { subject[0] } . should raise_exception NoMethodError
64
64
  end
65
65
 
66
- it "#<< returns self, so chaining is possible" do
66
+ it '#<< returns self, so chaining is possible' do
67
67
  (subject << fact_2_with_subject).should == subject
68
68
  end
69
69
  end
70
70
 
71
- describe "adding a fact with a ref to a provenance_fact" do
71
+ describe 'adding a fact with a ref to a provenance_fact' do
72
72
 
73
- it "fact_2_with_subject has a provenance_subject that refers to context and created_by" do
73
+ it 'fact_2_with_subject has a provenance_subject that refers to context and created_by' do
74
74
  subject << provenance_fact_context
75
75
  subject << provenance_fact_created_by
76
76
  subject << fact_2_with_subject
@@ -79,65 +79,65 @@ module Dbd
79
79
  end
80
80
  end
81
81
 
82
- describe "newest_time_stamp" do
83
- it "returns nil for empty collection" do
82
+ describe 'newest_time_stamp' do
83
+ it 'returns nil for empty collection' do
84
84
  subject.newest_time_stamp.should be_nil
85
85
  end
86
86
 
87
- it "returns a time_stamp" do
87
+ it 'returns a time_stamp' do
88
88
  subject << fact_2_with_subject
89
89
  subject.newest_time_stamp.should be_a(fact_2_with_subject.time_stamp.class)
90
90
  end
91
91
 
92
- it "returns the newest time_stamp" do
92
+ it 'returns the newest time_stamp' do
93
93
  subject << fact_2_with_subject
94
94
  subject << fact_3_with_subject
95
95
  subject.newest_time_stamp.should == fact_3_with_subject.time_stamp
96
96
  end
97
97
  end
98
98
 
99
- describe "validate that only 'newer' elements are added" do
99
+ describe 'validate that only "newer" elements are added' do
100
100
  before(:each) do
101
101
  fact_2_with_subject.stub(:time_stamp).and_return(TimeStamp.new(time: Time.utc(2013,05,9,12,0,0)))
102
102
  fact_3_with_subject.stub(:time_stamp).and_return(TimeStamp.new(time: Time.utc(2013,05,9,12,0,1)))
103
103
  end
104
104
 
105
- it "adding an element with a newer time_stamp succeeds" do
105
+ it 'adding an element with a newer time_stamp succeeds' do
106
106
  subject << fact_2_with_subject
107
107
  subject << fact_3_with_subject
108
108
  end
109
109
 
110
- it "adding an element with an older time_stamp fails" do
110
+ it 'adding an element with an older time_stamp fails' do
111
111
  fact_2_with_subject # will be older then fact_3_with_subject
112
112
  subject << fact_3_with_subject
113
113
  lambda { subject << fact_2_with_subject } . should raise_error OutOfOrderError
114
114
  end
115
115
 
116
- it "adding an element with an equal time_stamp fails" do
116
+ it 'adding an element with an equal time_stamp fails' do
117
117
  subject << fact_2_with_subject
118
118
  lambda { subject << fact_2_with_subject } . should raise_error OutOfOrderError
119
119
  end
120
120
  end
121
121
 
122
- describe "oldest_time_stamp" do
123
- it "returns nil for empty collection" do
122
+ describe 'oldest_time_stamp' do
123
+ it 'returns nil for empty collection' do
124
124
  subject.oldest_time_stamp.should be_nil
125
125
  end
126
126
 
127
- it "returns a time_stamp" do
127
+ it 'returns a time_stamp' do
128
128
  subject << fact_2_with_subject
129
129
  subject.oldest_time_stamp.should be_a(fact_2_with_subject.time_stamp.class)
130
130
  end
131
131
 
132
- it "returns the oldest time_stamp" do
132
+ it 'returns the oldest time_stamp' do
133
133
  subject << fact_2_with_subject
134
134
  subject << fact_3_with_subject
135
135
  subject.oldest_time_stamp.should == fact_2_with_subject.time_stamp
136
136
  end
137
137
  end
138
138
 
139
- describe "provenance_facts must all come before first use by a fact" do
140
- it "adding a provenance_fact, depending fact, another provenance_fact with same subject fail" do
139
+ describe 'provenance_facts must all come before first use by a fact' do
140
+ it 'adding a provenance_fact, depending fact, another provenance_fact with same subject fail' do
141
141
  subject << provenance_fact_context
142
142
  subject << fact_2_with_subject
143
143
  lambda { subject << provenance_fact_created_by } . should raise_error OutOfOrderError
@@ -147,23 +147,23 @@ module Dbd
147
147
  # A hash with all the provenance_subjects that are used by at least one fact.
148
148
  # Needed for the validation that no provenance_fact may be added that is
149
149
  # referred from a fact that is already in the fact stream.
150
- describe "used_provenance_subjects" do
150
+ describe 'used_provenance_subjects' do
151
151
  # testing an internal variable ...
152
152
 
153
153
  let(:used_provenance_subjects) do
154
154
  subject.instance_variable_get(:@used_provenance_subjects)
155
155
  end
156
156
 
157
- it "is empty initially" do
157
+ it 'is empty initially' do
158
158
  used_provenance_subjects.should be_empty
159
159
  end
160
160
 
161
- it "adding a provenance_fact alone does not create an entry" do
161
+ it 'adding a provenance_fact alone does not create an entry' do
162
162
  subject << provenance_fact_context
163
163
  used_provenance_subjects.should be_empty
164
164
  end
165
165
 
166
- it "adding a provenance_fact and a depending fact create an entry" do
166
+ it 'adding a provenance_fact and a depending fact create an entry' do
167
167
  subject << provenance_fact_context
168
168
  subject << fact_2_with_subject
169
169
  used_provenance_subjects[provenance_subject_1].should == true
@@ -171,21 +171,21 @@ module Dbd
171
171
  end
172
172
  end
173
173
 
174
- describe "validate that facts do not have errors when loading in the Fact::Collection" do
175
- it "succeeds with a fact from factory" do
174
+ describe 'validate that facts do not have errors when loading in the Fact::Collection' do
175
+ it 'succeeds with a fact from factory' do
176
176
  subject << fact_2_with_subject # should_not raise_error
177
177
  end
178
178
 
179
- it "raises FactError with message when fact.errors has errors" do
180
- provenance_fact_context.stub(:errors).and_return(["Error 1", "Error 2"])
179
+ it 'raises FactError with message when fact.errors has errors' do
180
+ provenance_fact_context.stub(:errors).and_return(['Error 1', 'Error 2'])
181
181
  lambda { subject << provenance_fact_context } . should raise_error(
182
182
  FactError,
183
- "Error 1, Error 2.")
183
+ 'Error 1, Error 2.')
184
184
  end
185
185
  end
186
186
 
187
- describe "by_subject : " do
188
- it "finds entries for a given subject" do
187
+ describe 'by_subject : ' do
188
+ it 'finds entries for a given subject' do
189
189
  subject << provenance_fact_context
190
190
  subject << provenance_fact_created_by
191
191
  subject << provenance_fact_original_source
@@ -198,35 +198,35 @@ module Dbd
198
198
  end
199
199
  end
200
200
 
201
- describe "Factories::Fact::Collection" do
202
- describe ".fact_2_3" do
203
- it "has the given provenance_subject with explicit subject arg" do
201
+ describe 'TestFactories::Fact::Collection' do
202
+ describe '.fact_2_3' do
203
+ it 'has the given provenance_subject with explicit subject arg' do
204
204
  fact_2_3.each do |fact|
205
205
  fact.provenance_subject.should == provenance_subject_1
206
206
  end
207
207
  end
208
208
  end
209
209
 
210
- describe ".provenance_facts" do
211
- it "has a context" do
210
+ describe '.provenance_facts' do
211
+ it 'has a context' do
212
212
  provenance_facts.select do |provenance_fact|
213
- provenance_fact.predicate == "https://data.vandenabeele.com/ontologies/provenance#context"
213
+ provenance_fact.predicate == 'https://data.vandenabeele.com/ontologies/provenance#context'
214
214
  end.size.should == 1
215
215
  end
216
216
 
217
- it "has a created_by" do
217
+ it 'has a created_by' do
218
218
  provenance_facts.select do |provenance_fact|
219
- provenance_fact.predicate == "https://data.vandenabeele.com/ontologies/provenance#created_by"
219
+ provenance_fact.predicate == 'https://data.vandenabeele.com/ontologies/provenance#created_by'
220
220
  end.size.should == 1
221
221
  end
222
222
 
223
- it "has an original_source" do
223
+ it 'has an original_source' do
224
224
  provenance_facts.select do |provenance_fact|
225
- provenance_fact.predicate == "https://data.vandenabeele.com/ontologies/provenance#original_source"
225
+ provenance_fact.predicate == 'https://data.vandenabeele.com/ontologies/provenance#original_source'
226
226
  end.size.should == 1
227
227
  end
228
228
 
229
- it "has the given subjects with explicit subject arg" do
229
+ it 'has the given subjects with explicit subject arg' do
230
230
  provenance_facts.each do |provenance_fact|
231
231
  provenance_fact.subject.should == provenance_subject_1
232
232
  end
@@ -0,0 +1,109 @@
1
+ require 'spec_helper'
2
+
3
+ module Dbd
4
+ class Fact
5
+ describe Factory do
6
+
7
+ let(:top_class) { described_class.top_class }
8
+ let(:string_values) { TestFactories::Fact.string_values }
9
+ let(:id_valid_regexp) { top_class::ID.valid_regexp }
10
+ let(:subject_valid_regexp) { top_class::Subject.valid_regexp }
11
+
12
+ describe '.new_subject' do
13
+ it 'creates a new (random) subject' do
14
+ described_class.new_subject.should match(subject_valid_regexp)
15
+ end
16
+
17
+ it 'creating a second one is different' do
18
+ subject_1 = described_class.new_subject
19
+ subject_2 = described_class.new_subject
20
+ subject_1.should_not == subject_2
21
+ end
22
+ end
23
+
24
+ describe '.new_id' do
25
+ it 'creates a new (random) id' do
26
+ described_class.new_id.should match(id_valid_regexp)
27
+ end
28
+
29
+ it 'creating a second one is different' do
30
+ id_1 = described_class.new_id
31
+ id_2 = described_class.new_id
32
+ id_1.should_not == id_2
33
+ end
34
+ end
35
+
36
+ describe '.from_string_values' do
37
+ it 'reads the values correctly (round trip test)' do
38
+ fact = described_class.from_string_values(string_values)
39
+ fact.string_values.should == string_values
40
+ end
41
+
42
+ it 'calls validate_string_hash if options[:validate]' do
43
+ described_class.should_receive(:validate_string_hash)
44
+ described_class.from_string_values(string_values, validate: true)
45
+ end
46
+
47
+ it 'does not call validate_string_hash if not options[:validate]' do
48
+ described_class.should_not_receive(:validate_string_hash)
49
+ described_class.from_string_values(string_values)
50
+ end
51
+ end
52
+
53
+ describe 'validation of the string_hash' do
54
+
55
+ def with_validation(string_values)
56
+ described_class.from_string_values(string_values, :validate => true)
57
+ end
58
+
59
+ describe 'does not raise exception' do
60
+ it 'for unmodified string_values' do
61
+ with_validation(string_values)
62
+ end
63
+
64
+ it 'for a nil provenance_subject (for provenance_facts)' do
65
+ string_values[2] = nil
66
+ with_validation(string_values)
67
+ end
68
+
69
+ it 'for an empty provenance_subject (for provenance_facts)' do
70
+ string_values[2] = ''
71
+ with_validation(string_values)
72
+ end
73
+ end
74
+
75
+ describe 'does raise exception' do
76
+ it 'for invalid id' do
77
+ string_values[0] = 'foo'
78
+ lambda{ with_validation(string_values) }.should raise_error(FactError)
79
+ end
80
+
81
+ it 'for invalid time_stamp' do
82
+ string_values[1] = 'foo'
83
+ lambda{ with_validation(string_values) }.should raise_error(FactError)
84
+ end
85
+
86
+ it 'for invalid provenance_subject' do
87
+ string_values[2] = 'foo'
88
+ lambda{ with_validation(string_values) }.should raise_error(FactError)
89
+ end
90
+
91
+ it 'for invalid subject' do
92
+ string_values[3] = 'foo'
93
+ lambda{ with_validation(string_values) }.should raise_error(FactError)
94
+ end
95
+
96
+ it 'for invalid predicate' do
97
+ string_values[4] = ''
98
+ lambda{ with_validation(string_values) }.should raise_error(FactError)
99
+ end
100
+
101
+ it 'for invalid object' do
102
+ string_values[5] = ''
103
+ lambda{ with_validation(string_values) }.should raise_error(FactError)
104
+ end
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end