dbd 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. data/.gitignore +17 -0
  2. data/.rspec +2 -0
  3. data/.rvmrc +1 -0
  4. data/.travis.yml +10 -0
  5. data/Gemfile +8 -0
  6. data/Guardfile +7 -0
  7. data/LICENSE.txt +22 -0
  8. data/README.md +97 -0
  9. data/Rakefile +1 -0
  10. data/dbd.gemspec +30 -0
  11. data/docs/rationale.md +17 -0
  12. data/docs/stories/001_create_a_fact.txt +15 -0
  13. data/docs/stories/002_create_a_facts_collection.txt +14 -0
  14. data/docs/stories/003_create_a_fact_origin.txt +15 -0
  15. data/docs/stories/004_create_fact_origins_collection.txt +8 -0
  16. data/docs/stories/005_CSV_export_the_graph.txt +18 -0
  17. data/docs/stories/006_refactor_fact_origin_to_provenance_fact.txt +20 -0
  18. data/docs/stories/007_rename_property_to_predicate.txt +6 -0
  19. data/docs/stories/008_testing_different_ruby_versions.txt +7 -0
  20. data/docs/stories/009_build_and_store_resources_with_provenance.txt +38 -0
  21. data/docs/stories/010_provenance_fact_properties_from_provenance_ontology.txt +10 -0
  22. data/docs/test.rb +32 -0
  23. data/lib/dbd.rb +13 -0
  24. data/lib/dbd/errors.rb +11 -0
  25. data/lib/dbd/fact.rb +182 -0
  26. data/lib/dbd/fact/collection.rb +60 -0
  27. data/lib/dbd/fact/id.rb +19 -0
  28. data/lib/dbd/fact/subject.rb +21 -0
  29. data/lib/dbd/graph.rb +47 -0
  30. data/lib/dbd/helpers/ordered_set_collection.rb +86 -0
  31. data/lib/dbd/helpers/uuid.rb +33 -0
  32. data/lib/dbd/provenance_fact.rb +76 -0
  33. data/lib/dbd/provenance_resource.rb +54 -0
  34. data/lib/dbd/rdf.rb +9 -0
  35. data/lib/dbd/repo.rb +8 -0
  36. data/lib/dbd/repo/neo4j_repo.rb +4 -0
  37. data/lib/dbd/repo/neo4j_repo/base.rb +55 -0
  38. data/lib/dbd/resource.rb +117 -0
  39. data/lib/dbd/version.rb +3 -0
  40. data/spec/factories/fact.rb +76 -0
  41. data/spec/factories/provenance_fact.rb +34 -0
  42. data/spec/factories/provenance_resource.rb +16 -0
  43. data/spec/factories/resource.rb +17 -0
  44. data/spec/lib/dbd/fact/collection_spec.rb +236 -0
  45. data/spec/lib/dbd/fact/id_spec.rb +19 -0
  46. data/spec/lib/dbd/fact/subject_spec.rb +19 -0
  47. data/spec/lib/dbd/fact_spec.rb +217 -0
  48. data/spec/lib/dbd/graph_spec.rb +214 -0
  49. data/spec/lib/dbd/helpers/ordered_set_collection_spec.rb +88 -0
  50. data/spec/lib/dbd/helpers/uuid_spec.rb +15 -0
  51. data/spec/lib/dbd/provenance_fact_spec.rb +108 -0
  52. data/spec/lib/dbd/provenance_resource_spec.rb +77 -0
  53. data/spec/lib/dbd/rdf_base_spec.rb +39 -0
  54. data/spec/lib/dbd/repo/neo4j_repo/base_spec.rb +85 -0
  55. data/spec/lib/dbd/repo/neo4j_repo/performance_spec.rb +40 -0
  56. data/spec/lib/dbd/resource_spec.rb +166 -0
  57. data/spec/spec_helper.rb +19 -0
  58. metadata +272 -0
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ module Dbd
4
+ describe RdfBase do
5
+ it "module exists" do
6
+ described_class # should not raise error
7
+ end
8
+
9
+ it "The RDF module is loaded" do
10
+ RDF # should not raise error
11
+ end
12
+
13
+ describe "play with a rdf_graph" do
14
+
15
+ let(:rdf_graph) { RDF::Graph.new << [:hi, RDF::DC.title, "Hello, world!"] }
16
+
17
+ it "Create a rdf_graph" do
18
+ rdf_graph # should_not raise_error
19
+ end
20
+
21
+ it "writing data" do
22
+ rdf_graph.dump(:ntriples).chomp.should ==
23
+ '_:hi <http://purl.org/dc/terms/title> "Hello, world!" .'
24
+ end
25
+
26
+ it "Reading N-triples" do
27
+ n_triples_string =
28
+ '<http://example.com/test#1> ' +
29
+ '<http://www.w3.org/2000/01/rdf-schema#label> ' +
30
+ '"test 1" .'
31
+ RDF::Reader.for(:ntriples).new(n_triples_string) do |reader|
32
+ reader.each_statement do |statement|
33
+ statement.to_ntriples.chomp.should == n_triples_string
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,85 @@
1
+ require 'spec_helper'
2
+
3
+ module Dbd
4
+ module Repo
5
+ module Neo4jRepo
6
+ describe Base do
7
+ it "has the Neography class" do
8
+ ::Neography
9
+ end
10
+
11
+ it "can insert a node", :neo4j => true do
12
+ subject.create_node("age" => 31, "name" => "Max")
13
+ end
14
+
15
+ it "can create a relationship", :neo4j => true do
16
+ max = subject.create_node("age" => 31, "name" => "Max")
17
+ roel = subject.create_node("age" => 33, "name" => "Roel")
18
+ subject.create_relationship("co-founders", max, roel)
19
+ end
20
+
21
+ describe "play with a minimal graph", :neo4j => true do
22
+
23
+ let(:max) {subject.create_node("age" => 31, "name" => "Max")}
24
+
25
+ let(:roel) {roel = subject.create_node("age" => 33, "name" => "Roel")}
26
+
27
+ before(:each) do
28
+ subject.create_relationship("co-founders", max, roel)
29
+ end
30
+
31
+ it "can get the root node" do
32
+ root = subject.get_root
33
+ end
34
+
35
+ it "can create a node index" do
36
+ subject.create_node_index("name_index_2", "exact", "lucene")
37
+ subject.list_node_indexes.keys.should include("name_index_2")
38
+ end
39
+
40
+ it "can list the indexes" do
41
+ subject.list_node_indexes
42
+ end
43
+
44
+ it "can add a node to an index" do
45
+ subject.add_node_to_index("name_index", "name", "Max", max)
46
+ subject.list_node_indexes.keys.should include("name_index")
47
+ end
48
+
49
+ it "can find entries in the index" do
50
+ subject.add_node_to_index("name_index", "name", "Max", max)
51
+ result = subject.get_node_index("name_index", "name", "Max")
52
+ result.size.should > 0
53
+ end
54
+
55
+ describe "query nodes", :neo4j_performance => true do
56
+
57
+ it "can get all nodes with a query" do
58
+ result = subject.execute_query("start n=node(*) return n")
59
+ result["data"].last.single["data"]["name"].should == "Roel"
60
+ end
61
+
62
+ it "can get the last 5 nodes with load_node" do
63
+ result = subject.execute_query("start n=node(*) return n")
64
+ node_uris = result["data"].last(5).map{|n| n.single["self"]}
65
+ nodes = node_uris.map do |uri|
66
+ subject.load_node(uri)
67
+ end
68
+ nodes.last.should be_a(Neography::Node)
69
+ end
70
+
71
+ let(:node) do
72
+ result = subject.execute_query("start n=node(*) return n")
73
+ uri = result["data"].last.single["self"]
74
+ subject.load_node(uri)
75
+ end
76
+
77
+ it "has age 33" do
78
+ node.age.should == 33
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ module Dbd
4
+ module Repo
5
+ module Neo4jRepo
6
+ describe Base, :neo4j_performance => true do
7
+
8
+ it "can insert maaaaany nodes and find them in the index" do
9
+ pending("DO NOT INSERT MORE NODES ... for now")
10
+ Knodes = 150000
11
+ MANY = 100
12
+ OFFSET = 55312
13
+
14
+ (OFFSET...(OFFSET+Knodes)).each do |knode|
15
+ puts knode
16
+ array = []
17
+ (0...MANY).each do |partial_age|
18
+ age = (knode * MANY) + partial_age
19
+ name = "Sax_#{age}"
20
+ comment = "Adolphe Sax_#{age} with a lot more text to it " + "A"*partial_age + " " + "B"*2*partial_age
21
+ array << [:create_node, {"age" => age, "name" => name, "comment" => comment}]
22
+ array << [:add_node_to_index, "name_index", "name", name, "{#{3*partial_age}}"]
23
+ if partial_age > 0
24
+ array << [:create_relationship, "friends", "{#{3*(partial_age-1)}}", "{#{3*partial_age}}", {:since => "ever"}]
25
+ else
26
+ array << [:create_node, {"age" => age, "name" => "foo"}]
27
+ end
28
+ end
29
+
30
+ subject.batch(*array)
31
+ end
32
+
33
+ result = subject.get_node_index("name_index", "name", "Sax_9700")
34
+ result.should_not be_nil
35
+ result.size.should > 0
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,166 @@
1
+ require 'spec_helper'
2
+
3
+ module Dbd
4
+ describe Resource do
5
+
6
+ let(:provenance_subject) { Factories::ProvenanceResource.provenance_resource.subject }
7
+
8
+ let(:resource) do
9
+ described_class.new(provenance_subject: provenance_subject)
10
+ end
11
+
12
+ let(:resource_subject) { resource.subject }
13
+
14
+ describe ".new_subject" do
15
+ it "returns a Fact#new_subject" do
16
+ described_class.new_subject.should be_a(Fact.new_subject.class)
17
+ end
18
+ end
19
+
20
+ describe ".new" do
21
+ describe "with a provenance_subject argument" do
22
+ it "has created a subject" do
23
+ resource.subject.should be_a(described_class.new_subject.class)
24
+ end
25
+
26
+ it "has stored the provenance_subject" do
27
+ resource.provenance_subject.should == provenance_subject
28
+ end
29
+ end
30
+
31
+ describe "with an explicit subject argument" do
32
+ it "has stored the given subject" do
33
+ explicit_subject = described_class.new_subject
34
+ described_class.new(
35
+ subject: explicit_subject,
36
+ provenance_subject: provenance_subject).subject.should == explicit_subject
37
+ end
38
+ end
39
+
40
+ describe "with a nil provenance_subject argument" do
41
+ it "raises a ProvenanceError" do
42
+ lambda { described_class.new(provenance_subject: nil) } .
43
+ should raise_error ProvenanceError
44
+ end
45
+ end
46
+ end
47
+
48
+ describe "the fact collection" do
49
+
50
+ let(:fact_2_with_subject) { Factories::Fact.fact_2_with_subject }
51
+ let(:fact_3_with_subject) { Factories::Fact.fact_3_with_subject }
52
+ let(:fact_without_subject) { Factories::Fact.data_fact }
53
+ let(:fact_with_provenance) { Factories::Fact.data_fact(provenance_subject, nil) }
54
+ let(:fact_with_resource_subject) { Factories::Fact.data_fact(nil, resource_subject) }
55
+ let(:fact_with_provenance_and_resource_subject) { Factories::Fact.data_fact(provenance_subject, resource_subject) }
56
+ let(:fact_with_incorrect_provenance) { Factories::Fact.data_fact(Factories::ProvenanceFact.new_subject, resource_subject) }
57
+ let(:provenance_fact_context) { Factories::ProvenanceFact.context }
58
+
59
+ it "enumerable functions work" do
60
+ resource.to_a.should == []
61
+ end
62
+
63
+ describe "#<<" do
64
+
65
+ it "can add a two facts (no subject set)" do
66
+ resource << fact_without_subject
67
+ resource << fact_with_provenance
68
+ resource.size.should == 2
69
+ end
70
+
71
+ describe "checks and sets subject :" do
72
+ describe "adding a fact with subject :" do
73
+ describe "when the subject of the fact is equal to the resource_subject" do
74
+ it "inserts the fact unaltered" do
75
+ resource << fact_with_provenance_and_resource_subject
76
+ resource.first.should be_equal(fact_with_provenance_and_resource_subject)
77
+ end
78
+ end
79
+
80
+ describe "when the subject of the fact is not equal to the resource_subject" do
81
+ it "raises a SubjectError" do
82
+ lambda {resource << fact_2_with_subject } . should raise_error SubjectError
83
+ end
84
+ end
85
+ end
86
+
87
+ describe "adding a fact without subject" do
88
+
89
+ let (:new_fact) do
90
+ resource << fact_with_provenance
91
+ resource.first
92
+ end
93
+
94
+ it "insert a different instance" do
95
+ new_fact.should_not be_equal(fact_with_provenance)
96
+ end
97
+
98
+ it "is from the same class" do
99
+ new_fact.should be_a(fact_with_provenance.class)
100
+ end
101
+
102
+ it "has copied over the other attributes except :id" do
103
+ (fact_with_provenance.class.attributes - [:id,:subject]).each do |attr|
104
+ new_fact.send(attr).should == fact_with_provenance.send(attr)
105
+ end
106
+ end
107
+
108
+ it "has set the subject to the Resource subject" do
109
+ new_fact.subject.should == resource_subject
110
+ end
111
+ end
112
+ end
113
+
114
+ describe "checks and sets provenance_subject :" do
115
+ describe "adding a fact with a provenance subject :" do
116
+ describe "when the provenance_subject of the fact is equal to the provenance_subject of the resource" do
117
+ it "inserts the fact unaltered" do
118
+ resource << fact_with_provenance_and_resource_subject
119
+ resource.first.should be_equal(fact_with_provenance_and_resource_subject)
120
+ end
121
+ end
122
+
123
+ describe "when the provenance_subject of the fact is not equal to the resource" do
124
+ it "raises a ProvenanceError" do
125
+ lambda {resource << fact_with_incorrect_provenance } . should raise_error ProvenanceError
126
+ end
127
+ end
128
+ end
129
+
130
+ describe "adding a fact without provenance_subject" do
131
+
132
+ let (:new_fact) do
133
+ resource << fact_with_resource_subject
134
+ resource.first
135
+ end
136
+
137
+ it "insert a different instance" do
138
+ new_fact.should_not be_equal(fact_with_resource_subject)
139
+ end
140
+
141
+ it "is from the same class" do
142
+ new_fact.should be_a(fact_with_resource_subject.class)
143
+ end
144
+
145
+ it "has copied over the other attributes except :id" do
146
+ (new_fact.class.attributes - [:id,:provenance_subject]).each do |attr|
147
+ new_fact.send(attr).should == fact_with_resource_subject.send(attr)
148
+ end
149
+ end
150
+
151
+ it "has set the subject to the Resource subject" do
152
+ new_fact.provenance_subject.should == provenance_subject
153
+ end
154
+ end
155
+ end
156
+
157
+ end
158
+ end
159
+
160
+ describe "Factories::Resource" do
161
+ it ".facts_resource works" do
162
+ Factories::Resource.facts_resource(provenance_subject)
163
+ end
164
+ end
165
+ end
166
+ end
@@ -0,0 +1,19 @@
1
+ require 'dbd'
2
+
3
+ # load all factories
4
+ root = File.expand_path('../', __FILE__)
5
+ Dir[root + "/factories/**/*.rb"].each {|f| require f}
6
+
7
+ RSpec.configure do |config|
8
+ config.treat_symbols_as_metadata_keys_with_true_values = true
9
+
10
+ # Run specs in random order to surface order dependencies. If you find an
11
+ # order dependency and want to debug it, you can fix the order by providing
12
+ # the seed, which is printed after each run.
13
+ # --seed 1234
14
+ config.order = 'random'
15
+
16
+ # exclude neo4j tests for now (not working on Travis)
17
+ config.filter_run_excluding :neo4j => true
18
+ config.filter_run_excluding :neo4j_performance => true
19
+ end
metadata ADDED
@@ -0,0 +1,272 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dbd
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Peter Vandenabeele
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-05-12 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - '>'
20
+ - !ruby/object:Gem::Version
21
+ version: 1.2.4
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - '>'
28
+ - !ruby/object:Gem::Version
29
+ version: 1.2.4
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: guard-rspec
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rb-fsevent
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: '0.9'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: '0.9'
78
+ - !ruby/object:Gem::Dependency
79
+ name: terminal-notifier-guard
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: yard
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: neography
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: rdf
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ~>
132
+ - !ruby/object:Gem::Version
133
+ version: 1.0.6
134
+ type: :runtime
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ~>
140
+ - !ruby/object:Gem::Version
141
+ version: 1.0.6
142
+ - !ruby/object:Gem::Dependency
143
+ name: ruby_peter_v
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ type: :runtime
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ description: A data store that (almost) never forgets
159
+ email:
160
+ - peter@vandenabeele.com
161
+ executables: []
162
+ extensions: []
163
+ extra_rdoc_files: []
164
+ files:
165
+ - .gitignore
166
+ - .rspec
167
+ - .rvmrc
168
+ - .travis.yml
169
+ - Gemfile
170
+ - Guardfile
171
+ - LICENSE.txt
172
+ - README.md
173
+ - Rakefile
174
+ - dbd.gemspec
175
+ - docs/rationale.md
176
+ - docs/stories/001_create_a_fact.txt
177
+ - docs/stories/002_create_a_facts_collection.txt
178
+ - docs/stories/003_create_a_fact_origin.txt
179
+ - docs/stories/004_create_fact_origins_collection.txt
180
+ - docs/stories/005_CSV_export_the_graph.txt
181
+ - docs/stories/006_refactor_fact_origin_to_provenance_fact.txt
182
+ - docs/stories/007_rename_property_to_predicate.txt
183
+ - docs/stories/008_testing_different_ruby_versions.txt
184
+ - docs/stories/009_build_and_store_resources_with_provenance.txt
185
+ - docs/stories/010_provenance_fact_properties_from_provenance_ontology.txt
186
+ - docs/test.rb
187
+ - lib/dbd.rb
188
+ - lib/dbd/errors.rb
189
+ - lib/dbd/fact.rb
190
+ - lib/dbd/fact/collection.rb
191
+ - lib/dbd/fact/id.rb
192
+ - lib/dbd/fact/subject.rb
193
+ - lib/dbd/graph.rb
194
+ - lib/dbd/helpers/ordered_set_collection.rb
195
+ - lib/dbd/helpers/uuid.rb
196
+ - lib/dbd/provenance_fact.rb
197
+ - lib/dbd/provenance_resource.rb
198
+ - lib/dbd/rdf.rb
199
+ - lib/dbd/repo.rb
200
+ - lib/dbd/repo/neo4j_repo.rb
201
+ - lib/dbd/repo/neo4j_repo/base.rb
202
+ - lib/dbd/resource.rb
203
+ - lib/dbd/version.rb
204
+ - spec/factories/fact.rb
205
+ - spec/factories/provenance_fact.rb
206
+ - spec/factories/provenance_resource.rb
207
+ - spec/factories/resource.rb
208
+ - spec/lib/dbd/fact/collection_spec.rb
209
+ - spec/lib/dbd/fact/id_spec.rb
210
+ - spec/lib/dbd/fact/subject_spec.rb
211
+ - spec/lib/dbd/fact_spec.rb
212
+ - spec/lib/dbd/graph_spec.rb
213
+ - spec/lib/dbd/helpers/ordered_set_collection_spec.rb
214
+ - spec/lib/dbd/helpers/uuid_spec.rb
215
+ - spec/lib/dbd/provenance_fact_spec.rb
216
+ - spec/lib/dbd/provenance_resource_spec.rb
217
+ - spec/lib/dbd/rdf_base_spec.rb
218
+ - spec/lib/dbd/repo/neo4j_repo/base_spec.rb
219
+ - spec/lib/dbd/repo/neo4j_repo/performance_spec.rb
220
+ - spec/lib/dbd/resource_spec.rb
221
+ - spec/spec_helper.rb
222
+ homepage: ''
223
+ licenses:
224
+ - MIT
225
+ post_install_message:
226
+ rdoc_options: []
227
+ require_paths:
228
+ - lib
229
+ required_ruby_version: !ruby/object:Gem::Requirement
230
+ none: false
231
+ requirements:
232
+ - - '>='
233
+ - !ruby/object:Gem::Version
234
+ version: '0'
235
+ segments:
236
+ - 0
237
+ hash: 1715906838071100046
238
+ required_rubygems_version: !ruby/object:Gem::Requirement
239
+ none: false
240
+ requirements:
241
+ - - '>='
242
+ - !ruby/object:Gem::Version
243
+ version: '0'
244
+ segments:
245
+ - 0
246
+ hash: 1715906838071100046
247
+ requirements: []
248
+ rubyforge_project:
249
+ rubygems_version: 1.8.25
250
+ signing_key:
251
+ specification_version: 3
252
+ summary: A data store that (almost) never forgets
253
+ test_files:
254
+ - spec/factories/fact.rb
255
+ - spec/factories/provenance_fact.rb
256
+ - spec/factories/provenance_resource.rb
257
+ - spec/factories/resource.rb
258
+ - spec/lib/dbd/fact/collection_spec.rb
259
+ - spec/lib/dbd/fact/id_spec.rb
260
+ - spec/lib/dbd/fact/subject_spec.rb
261
+ - spec/lib/dbd/fact_spec.rb
262
+ - spec/lib/dbd/graph_spec.rb
263
+ - spec/lib/dbd/helpers/ordered_set_collection_spec.rb
264
+ - spec/lib/dbd/helpers/uuid_spec.rb
265
+ - spec/lib/dbd/provenance_fact_spec.rb
266
+ - spec/lib/dbd/provenance_resource_spec.rb
267
+ - spec/lib/dbd/rdf_base_spec.rb
268
+ - spec/lib/dbd/repo/neo4j_repo/base_spec.rb
269
+ - spec/lib/dbd/repo/neo4j_repo/performance_spec.rb
270
+ - spec/lib/dbd/resource_spec.rb
271
+ - spec/spec_helper.rb
272
+ has_rdoc: