roadforest 0.0.1

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 (71) hide show
  1. data/examples/file-management.rb +98 -0
  2. data/lib/roadforest/application/dispatcher.rb +54 -0
  3. data/lib/roadforest/application/parameters.rb +39 -0
  4. data/lib/roadforest/application/path-provider.rb +18 -0
  5. data/lib/roadforest/application/route-adapter.rb +24 -0
  6. data/lib/roadforest/application/services-host.rb +10 -0
  7. data/lib/roadforest/application.rb +42 -0
  8. data/lib/roadforest/blob-model.rb +56 -0
  9. data/lib/roadforest/content-handling/engine.rb +113 -0
  10. data/lib/roadforest/content-handling/media-type.rb +222 -0
  11. data/lib/roadforest/content-handling/type-handlers/jsonld.rb +172 -0
  12. data/lib/roadforest/http/adapters/excon.rb +47 -0
  13. data/lib/roadforest/http/graph-response.rb +20 -0
  14. data/lib/roadforest/http/graph-transfer.rb +112 -0
  15. data/lib/roadforest/http/message.rb +91 -0
  16. data/lib/roadforest/model.rb +151 -0
  17. data/lib/roadforest/models.rb +2 -0
  18. data/lib/roadforest/rdf/context-fascade.rb +25 -0
  19. data/lib/roadforest/rdf/document.rb +23 -0
  20. data/lib/roadforest/rdf/focus-list.rb +19 -0
  21. data/lib/roadforest/rdf/focus-wrapping.rb +30 -0
  22. data/lib/roadforest/rdf/graph-copier.rb +16 -0
  23. data/lib/roadforest/rdf/graph-focus.rb +95 -0
  24. data/lib/roadforest/rdf/graph-reading.rb +145 -0
  25. data/lib/roadforest/rdf/graph-store.rb +217 -0
  26. data/lib/roadforest/rdf/investigation.rb +90 -0
  27. data/lib/roadforest/rdf/normalization.rb +150 -0
  28. data/lib/roadforest/rdf/parcel.rb +47 -0
  29. data/lib/roadforest/rdf/post-focus.rb +35 -0
  30. data/lib/roadforest/rdf/resource-pattern.rb +60 -0
  31. data/lib/roadforest/rdf/resource-query.rb +58 -0
  32. data/lib/roadforest/rdf/source-rigor/credence/any.rb +9 -0
  33. data/lib/roadforest/rdf/source-rigor/credence/none-if-role-absent.rb +19 -0
  34. data/lib/roadforest/rdf/source-rigor/credence/role-if-available.rb +19 -0
  35. data/lib/roadforest/rdf/source-rigor/credence-annealer.rb +22 -0
  36. data/lib/roadforest/rdf/source-rigor/credence.rb +29 -0
  37. data/lib/roadforest/rdf/source-rigor/http-investigator.rb +20 -0
  38. data/lib/roadforest/rdf/source-rigor/investigator.rb +17 -0
  39. data/lib/roadforest/rdf/source-rigor/null-investigator.rb +10 -0
  40. data/lib/roadforest/rdf/source-rigor.rb +44 -0
  41. data/lib/roadforest/rdf/update-focus.rb +73 -0
  42. data/lib/roadforest/rdf/vocabulary.rb +11 -0
  43. data/lib/roadforest/rdf.rb +6 -0
  44. data/lib/roadforest/remote-host.rb +96 -0
  45. data/lib/roadforest/resource/handlers.rb +43 -0
  46. data/lib/roadforest/resource/http/form-parsing.rb +81 -0
  47. data/lib/roadforest/resource/rdf/leaf-item.rb +21 -0
  48. data/lib/roadforest/resource/rdf/list.rb +19 -0
  49. data/lib/roadforest/resource/rdf/parent-item.rb +26 -0
  50. data/lib/roadforest/resource/rdf/read-only.rb +100 -0
  51. data/lib/roadforest/resource/rdf.rb +4 -0
  52. data/lib/roadforest/resource/role/has-children.rb +22 -0
  53. data/lib/roadforest/resource/role/writable.rb +43 -0
  54. data/lib/roadforest/server.rb +3 -0
  55. data/lib/roadforest/test-support/dispatcher-facade.rb +77 -0
  56. data/lib/roadforest/test-support/http-client.rb +151 -0
  57. data/lib/roadforest/test-support/matchers.rb +67 -0
  58. data/lib/roadforest/test-support/remote-host.rb +23 -0
  59. data/lib/roadforest/test-support/trace-formatter.rb +140 -0
  60. data/lib/roadforest/test-support.rb +2 -0
  61. data/lib/roadforest/utility/class-registry.rb +49 -0
  62. data/lib/roadforest.rb +2 -0
  63. data/spec/client.rb +152 -0
  64. data/spec/credence-annealer.rb +44 -0
  65. data/spec/graph-copier.rb +87 -0
  66. data/spec/graph-store.rb +142 -0
  67. data/spec/media-types.rb +14 -0
  68. data/spec/rdf-parcel.rb +158 -0
  69. data/spec/update-focus.rb +117 -0
  70. data/spec_support/gem_test_suite.rb +0 -0
  71. metadata +241 -0
@@ -0,0 +1,158 @@
1
+ require 'roadforest/test-support/matchers'
2
+ require 'roadforest/rdf/parcel'
3
+
4
+ describe RoadForest::RDF::Parcel do
5
+ let :literal do
6
+ 42
7
+ end
8
+
9
+ let :node_a do
10
+ RDF::URI.intern("http://test.org/a")
11
+ end
12
+
13
+ let :node_b do
14
+ RDF::URI.intern("http://test.org/b")
15
+ end
16
+
17
+ let :node_c do
18
+ RDF::URI.intern("http://test.org/c")
19
+ end
20
+
21
+ let :node_a_frag do
22
+ RDF::URI.intern("http://test.org/a#fragment")
23
+ end
24
+
25
+ let :node_b_frag do
26
+ RDF::URI.intern("http://test.org/b#fragment")
27
+ end
28
+
29
+ let :node_c_frag do
30
+ RDF::URI.intern("http://test.org/c#fragment")
31
+ end
32
+
33
+ [:direct_blank_a, :direct_blank_c, :indirect_blank_a, :indirect_blank_c].each do |node|
34
+ let node do
35
+ RDF::Node.new
36
+ end
37
+ end
38
+
39
+ let :test_resources do
40
+ [node_a, node_b, node_c]
41
+ end
42
+
43
+ let :source_graph do
44
+ pred = RDF::URI.intern("http://generic.com/related_to")
45
+ ::RDF::Graph.new.tap do |graph|
46
+ graph << [ node_a, pred, literal ]
47
+ graph << [ node_a, pred, node_b_frag ]
48
+ graph << [ node_a, pred, node_c ]
49
+ graph << [ node_a, pred, direct_blank_a ]
50
+ graph << [ direct_blank_a, pred, indirect_blank_a ]
51
+ graph << [ node_b, pred, node_a ]
52
+ graph << [ node_b, pred, literal ]
53
+ graph << [ node_b_frag, pred, literal ]
54
+ graph << [ node_b_frag, pred, node_a_frag ]
55
+ graph << [ node_c_frag, pred, node_c ]
56
+ graph << [ node_c_frag, pred, indirect_blank_c ]
57
+ graph << [ indirect_blank_c, pred, node_c_frag ]
58
+ end
59
+ end
60
+
61
+ let :parceller do
62
+ RoadForest::RDF::Parcel.new.tap do |parceller|
63
+ parceller.graph = source_graph
64
+ end
65
+ end
66
+
67
+ it "should list all subjects" do
68
+ parceller.resources.should include(*test_resources)
69
+ end
70
+
71
+ it "should not list any other resource" do
72
+ (parceller.resources - test_resources).should == []
73
+ end
74
+
75
+ it "should have graphs for each resource" do
76
+ parceller.resources.each do |resource|
77
+ graph = parceller.graph_for(resource)
78
+
79
+ graph.should_not be_nil
80
+ graph.should_not be_empty
81
+ end
82
+ end
83
+
84
+ describe "tessellation" do
85
+ let :graph_a do
86
+ parceller.graph_for(node_a).to_a.map(&:to_s)
87
+ end
88
+
89
+ let :graph_b do
90
+ parceller.graph_for(node_b).to_a.map(&:to_s)
91
+ end
92
+
93
+ let :graph_c do
94
+ parceller.graph_for(node_c).to_a.map(&:to_s)
95
+ end
96
+
97
+ let :original do
98
+ source_graph.to_a.map(&:to_s)
99
+ end
100
+
101
+ it "should be disjoint" do
102
+ (graph_a & graph_b).should == []
103
+ (graph_a & graph_c).should == []
104
+ (graph_b & graph_a).should == []
105
+ (graph_b & graph_c).should == []
106
+ (graph_c & graph_a).should == []
107
+ (graph_c & graph_b).should == []
108
+ end
109
+
110
+ it "should be complete" do
111
+ coverage = graph_a + graph_b + graph_c
112
+
113
+ (original - coverage).should == []
114
+ (coverage - original).should == []
115
+ end
116
+ end
117
+
118
+ describe "the graph for resource B" do
119
+ let :graph do
120
+ parceller.graph_for(node_b)
121
+ end
122
+
123
+ it "should include statements with the resource as subject" do
124
+ statements_from_graph(graph).that_match_query(:subject => node_b).should_not be_empty
125
+ end
126
+
127
+ it "should include statements with fragment node" do
128
+ statements_from_graph(graph).that_match_query(:subject => node_b_frag).should_not be_empty
129
+ end
130
+ end
131
+
132
+ describe "the graph for resource A" do #needs a much more interesting name
133
+ let :graph do
134
+ parceller.graph_for(node_a)
135
+ end
136
+
137
+ it "should include statements with the resource as subject" do
138
+ statements_from_graph(graph).that_match_query(:subject => node_a).should_not be_empty
139
+ end
140
+
141
+ it "should include statements about blank nodes within the resource's domain" do
142
+ statements_from_graph(graph).that_match_query(:subject => direct_blank_a).should_not be_empty
143
+ end
144
+
145
+ it "should include statements with outside objects" do
146
+ statements_from_graph(graph).that_match_query(:object => node_c).should_not be_empty
147
+ end
148
+
149
+ it "should not include statements with b or c as subject" do
150
+ statements_from_graph(graph).that_match_query(:subject => node_b).should be_empty
151
+ statements_from_graph(graph).that_match_query(:subject => node_c).should be_empty
152
+ statements_from_graph(graph).that_match_query(:subject => node_b_frag).should be_empty
153
+ statements_from_graph(graph).that_match_query(:subject => node_c_frag).should be_empty
154
+ statements_from_graph(graph).that_match_query(:subject => direct_blank_c).should be_empty
155
+ statements_from_graph(graph).that_match_query(:subject => indirect_blank_c).should be_empty
156
+ end
157
+ end
158
+ end
@@ -0,0 +1,117 @@
1
+ require 'roadforest/rdf/source-rigor'
2
+ require 'roadforest/rdf/update-focus'
3
+ require 'roadforest/rdf/graph-store'
4
+ require 'roadforest/rdf/document'
5
+ require 'rdf/rdfa'
6
+
7
+ describe RoadForest::RDF::UpdateFocus do
8
+ class Voc < ::RDF::Vocabulary("http:/pred.org/"); end
9
+
10
+ let :context_node do
11
+ ::RDF::URI.intern("http://subject.org/a")
12
+ end
13
+
14
+ let :blank_node do
15
+ ::RDF::Node.new
16
+ end
17
+
18
+ let :simple_statement do
19
+ ::RDF::Statement.from [ context_node, Voc[:a], 7 ]
20
+ end
21
+
22
+ let :blank_node_statement do
23
+ ::RDF::Statement.from [ context_node, Voc[:b], blank_node ]
24
+ end
25
+
26
+ let :context_statements do
27
+ [
28
+ simple_statement,
29
+ blank_node_statement
30
+ ]
31
+ end
32
+
33
+ let :body_graph do
34
+ ::RDF::Graph.new.tap do |graph|
35
+ context_statements.each do |stmt|
36
+ graph << stmt
37
+ end
38
+ end
39
+ end
40
+
41
+ let :document do
42
+ RoadForest::RDF::Document.new.tap do |doc|
43
+ doc.source = context_node.to_s
44
+ doc.body_string = body_graph.dump(:rdfa)
45
+ end
46
+ end
47
+
48
+ let :source_graph do
49
+ RoadForest::RDF::GraphStore.new.tap do |graph|
50
+ graph.insert_document(document)
51
+ end
52
+ end
53
+
54
+ let :target_graph do
55
+ ::RDF::Repository.new
56
+ end
57
+
58
+ let :source_rigor do
59
+ ::RoadForest::RDF::SourceRigor.new.tap do |skept|
60
+ skept.policy_list(:may_subject, :any)
61
+ skept.investigator_list(:null)
62
+ end
63
+ end
64
+
65
+ subject :updater do
66
+ RoadForest::RDF::UpdateFocus.new.tap do |updater|
67
+ updater.source_graph = source_graph
68
+ updater.target_graph = target_graph
69
+ updater.subject = context_node
70
+ updater.source_rigor = source_rigor
71
+ end
72
+ end
73
+
74
+ it "should copy entire context when resource is written" do
75
+ updater[Voc[:a]] = 17
76
+
77
+ resource_graph = ::RDF::Graph.new(context_node, :data => target_graph)
78
+
79
+ resource_graph.query(:object => RoadForest::RDF::Vocabulary::RF[:Impulse]).should be_empty
80
+ resource_graph.query(simple_statement).should be_empty
81
+
82
+ resource_graph.query(blank_node_statement).should_not be_empty
83
+ resource_graph.query([context_node, Voc[:a], 17]).should_not be_empty
84
+ end
85
+
86
+ it "should copy entire context when blank node is written to" do
87
+ updater[Voc[:b]][Voc[:c]] = "jagular" #they drop from trees
88
+
89
+ resource_graph = ::RDF::Graph.new(context_node, :data => target_graph)
90
+
91
+ resource_graph.query(blank_node_statement).should_not be_empty
92
+ resource_graph.query(simple_statement).should_not be_empty
93
+ resource_graph.query([nil, Voc[:c], "jagular", context_node]).should_not be_empty
94
+ end
95
+
96
+ it "should trigger (only one) Store query just by writing" do
97
+ updater[Voc[:d]] = 14
98
+ updater[Voc[:e]] = "fourteen"
99
+
100
+ resource_graph = ::RDF::Graph.new(context_node, :data => target_graph)
101
+
102
+ resource_graph.query(blank_node_statement).should_not be_empty
103
+ resource_graph.query(simple_statement).should_not be_empty
104
+ resource_graph.query([context_node, Voc[:d], 14]).should_not be_empty
105
+ resource_graph.query([context_node, Voc[:e], "fourteen"]).should_not be_empty
106
+ end
107
+
108
+ it "should return statements that have been written" do
109
+ updater[Voc[:a]] = 17
110
+ updater[Voc[:a]].should == 17
111
+ end
112
+
113
+ it "should not copy contexts simply because they're read from" do
114
+ updater[Voc[:a]].should == 7
115
+ target_graph.should be_empty
116
+ end
117
+ end
File without changes
metadata ADDED
@@ -0,0 +1,241 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: roadforest
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Judson Lester
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-08-22 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ prerelease: false
16
+ type: :runtime
17
+ name: rdf
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: 1.0.4
23
+ none: false
24
+ requirement: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ! '>='
27
+ - !ruby/object:Gem::Version
28
+ version: 1.0.4
29
+ none: false
30
+ - !ruby/object:Gem::Dependency
31
+ prerelease: false
32
+ type: :runtime
33
+ name: json-ld
34
+ version_requirements: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ~>
37
+ - !ruby/object:Gem::Version
38
+ version: 1.0.0
39
+ none: false
40
+ requirement: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ version: 1.0.0
45
+ none: false
46
+ - !ruby/object:Gem::Dependency
47
+ prerelease: false
48
+ type: :runtime
49
+ name: webmachine
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 1.1.0
55
+ none: false
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ! '>='
59
+ - !ruby/object:Gem::Version
60
+ version: 1.1.0
61
+ none: false
62
+ - !ruby/object:Gem::Dependency
63
+ prerelease: false
64
+ type: :runtime
65
+ name: addressable
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ~>
69
+ - !ruby/object:Gem::Version
70
+ version: 2.2.8
71
+ none: false
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ version: 2.2.8
77
+ none: false
78
+ - !ruby/object:Gem::Dependency
79
+ prerelease: false
80
+ type: :runtime
81
+ name: excon
82
+ version_requirements: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ~>
85
+ - !ruby/object:Gem::Version
86
+ version: '0.25'
87
+ none: false
88
+ requirement: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ~>
91
+ - !ruby/object:Gem::Version
92
+ version: '0.25'
93
+ none: false
94
+ - !ruby/object:Gem::Dependency
95
+ prerelease: false
96
+ type: :runtime
97
+ name: tilt
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: 1.3.6
103
+ none: false
104
+ requirement: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ! '>='
107
+ - !ruby/object:Gem::Version
108
+ version: 1.3.6
109
+ none: false
110
+ - !ruby/object:Gem::Dependency
111
+ prerelease: false
112
+ type: :runtime
113
+ name: valise
114
+ version_requirements: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ! '>='
117
+ - !ruby/object:Gem::Version
118
+ version: 0.9.1
119
+ none: false
120
+ requirement: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ! '>='
123
+ - !ruby/object:Gem::Version
124
+ version: 0.9.1
125
+ none: false
126
+ description: ! " RoaD FoReST is a web framework designed to use the Resource Description\n
127
+ \ Framework to accomplish Representative State Transfer. I'm stoked, even if\n everyone
128
+ else is rolling their eyes.\n\n This gem represents the Ruby implementation of
129
+ both client and server. The\n next step will be to set up an adapter for a Javascript
130
+ framework.\n"
131
+ email:
132
+ - nyarly@gmail.com
133
+ executables: []
134
+ extensions: []
135
+ extra_rdoc_files: []
136
+ files:
137
+ - lib/roadforest/rdf/graph-store.rb
138
+ - lib/roadforest/rdf/normalization.rb
139
+ - lib/roadforest/rdf/focus-list.rb
140
+ - lib/roadforest/rdf/graph-reading.rb
141
+ - lib/roadforest/rdf/graph-copier.rb
142
+ - lib/roadforest/rdf/context-fascade.rb
143
+ - lib/roadforest/rdf/source-rigor.rb
144
+ - lib/roadforest/rdf/graph-focus.rb
145
+ - lib/roadforest/rdf/post-focus.rb
146
+ - lib/roadforest/rdf/source-rigor/null-investigator.rb
147
+ - lib/roadforest/rdf/source-rigor/credence.rb
148
+ - lib/roadforest/rdf/source-rigor/credence/any.rb
149
+ - lib/roadforest/rdf/source-rigor/credence/role-if-available.rb
150
+ - lib/roadforest/rdf/source-rigor/credence/none-if-role-absent.rb
151
+ - lib/roadforest/rdf/source-rigor/http-investigator.rb
152
+ - lib/roadforest/rdf/source-rigor/investigator.rb
153
+ - lib/roadforest/rdf/source-rigor/credence-annealer.rb
154
+ - lib/roadforest/rdf/update-focus.rb
155
+ - lib/roadforest/rdf/vocabulary.rb
156
+ - lib/roadforest/rdf/document.rb
157
+ - lib/roadforest/rdf/focus-wrapping.rb
158
+ - lib/roadforest/rdf/resource-pattern.rb
159
+ - lib/roadforest/rdf/parcel.rb
160
+ - lib/roadforest/rdf/resource-query.rb
161
+ - lib/roadforest/rdf/investigation.rb
162
+ - lib/roadforest/http/message.rb
163
+ - lib/roadforest/http/graph-response.rb
164
+ - lib/roadforest/http/adapters/excon.rb
165
+ - lib/roadforest/http/graph-transfer.rb
166
+ - lib/roadforest/resource/rdf/list.rb
167
+ - lib/roadforest/resource/rdf/parent-item.rb
168
+ - lib/roadforest/resource/rdf/read-only.rb
169
+ - lib/roadforest/resource/rdf/leaf-item.rb
170
+ - lib/roadforest/resource/http/form-parsing.rb
171
+ - lib/roadforest/resource/role/writable.rb
172
+ - lib/roadforest/resource/role/has-children.rb
173
+ - lib/roadforest/resource/handlers.rb
174
+ - lib/roadforest/resource/rdf.rb
175
+ - lib/roadforest/test-support/matchers.rb
176
+ - lib/roadforest/test-support/remote-host.rb
177
+ - lib/roadforest/test-support/trace-formatter.rb
178
+ - lib/roadforest/test-support/dispatcher-facade.rb
179
+ - lib/roadforest/test-support/http-client.rb
180
+ - lib/roadforest/server.rb
181
+ - lib/roadforest/application/services-host.rb
182
+ - lib/roadforest/application/path-provider.rb
183
+ - lib/roadforest/application/parameters.rb
184
+ - lib/roadforest/application/dispatcher.rb
185
+ - lib/roadforest/application/route-adapter.rb
186
+ - lib/roadforest/models.rb
187
+ - lib/roadforest/model.rb
188
+ - lib/roadforest/blob-model.rb
189
+ - lib/roadforest/test-support.rb
190
+ - lib/roadforest/rdf.rb
191
+ - lib/roadforest/utility/class-registry.rb
192
+ - lib/roadforest/content-handling/type-handlers/jsonld.rb
193
+ - lib/roadforest/content-handling/media-type.rb
194
+ - lib/roadforest/content-handling/engine.rb
195
+ - lib/roadforest/application.rb
196
+ - lib/roadforest/remote-host.rb
197
+ - lib/roadforest.rb
198
+ - spec/graph-store.rb
199
+ - spec/graph-copier.rb
200
+ - spec/rdf-parcel.rb
201
+ - spec/media-types.rb
202
+ - spec/update-focus.rb
203
+ - spec/client.rb
204
+ - spec/credence-annealer.rb
205
+ - examples/file-management.rb
206
+ - spec_support/gem_test_suite.rb
207
+ homepage: http://nyarly.github.com/roadforest
208
+ licenses:
209
+ - MIT
210
+ post_install_message:
211
+ rdoc_options:
212
+ - --inline-source
213
+ - --main
214
+ - doc/README
215
+ - --title
216
+ - roadforest-0.0.1 Documentation
217
+ require_paths:
218
+ - lib/
219
+ required_ruby_version: !ruby/object:Gem::Requirement
220
+ requirements:
221
+ - - ! '>='
222
+ - !ruby/object:Gem::Version
223
+ segments:
224
+ - 0
225
+ hash: -247142993
226
+ version: '0'
227
+ none: false
228
+ required_rubygems_version: !ruby/object:Gem::Requirement
229
+ requirements:
230
+ - - ! '>='
231
+ - !ruby/object:Gem::Version
232
+ version: '0'
233
+ none: false
234
+ requirements: []
235
+ rubyforge_project: roadforest
236
+ rubygems_version: 1.8.24
237
+ signing_key:
238
+ specification_version: 3
239
+ summary: An RDF+ReST web framework
240
+ test_files:
241
+ - spec_support/gem_test_suite.rb