roadforest 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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