roadforest 0.1 → 0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/examples/file-management.rb +12 -13
- data/lib/roadforest-client.rb +3 -0
- data/lib/roadforest-common.rb +2 -0
- data/lib/roadforest-server.rb +7 -0
- data/lib/roadforest-testing.rb +1 -0
- data/lib/roadforest/application.rb +9 -7
- data/lib/roadforest/application/dispatcher.rb +39 -63
- data/lib/roadforest/application/parameters.rb +1 -1
- data/lib/roadforest/application/path-provider.rb +2 -2
- data/lib/roadforest/application/route-adapter.rb +130 -18
- data/lib/roadforest/application/services-host.rb +0 -4
- data/lib/roadforest/augment/affordance.rb +78 -0
- data/lib/roadforest/augment/augmentation.rb +97 -0
- data/lib/roadforest/augment/augmenter.rb +54 -0
- data/lib/roadforest/augmentations.rb +1 -0
- data/lib/roadforest/content-handling.rb +1 -0
- data/lib/roadforest/content-handling/common-engines.rb +67 -0
- data/lib/roadforest/content-handling/engine.rb +2 -14
- data/lib/roadforest/content-handling/handler-wrap.rb +29 -31
- data/lib/roadforest/content-handling/media-type.rb +6 -0
- data/lib/roadforest/{rdf.rb → graph.rb} +1 -1
- data/lib/roadforest/{rdf → graph}/access-manager.rb +12 -74
- data/lib/roadforest/{rdf → graph}/document.rb +1 -1
- data/lib/roadforest/{rdf → graph}/etagging.rb +2 -2
- data/lib/roadforest/{rdf → graph}/focus-list.rb +1 -9
- data/lib/roadforest/{rdf → graph}/graph-copier.rb +2 -2
- data/lib/roadforest/{rdf → graph}/graph-focus.rb +5 -7
- data/lib/roadforest/{rdf → graph}/normalization.rb +1 -1
- data/lib/roadforest/{rdf → graph}/post-focus.rb +2 -3
- data/lib/roadforest/graph/vocabulary.rb +96 -0
- data/lib/roadforest/http/graph-transfer.rb +2 -2
- data/lib/roadforest/interface/application.rb +145 -0
- data/lib/roadforest/interface/blob.rb +38 -0
- data/lib/roadforest/interface/rdf.rb +77 -0
- data/lib/roadforest/interfaces.rb +2 -0
- data/lib/roadforest/remote-host.rb +17 -17
- data/lib/roadforest/resource.rb +4 -0
- data/lib/roadforest/resource/{rdf/leaf-item.rb → leaf-item.rb} +1 -1
- data/lib/roadforest/resource/{rdf/list.rb → list.rb} +1 -1
- data/lib/roadforest/resource/{rdf/parent-item.rb → parent-item.rb} +1 -1
- data/lib/roadforest/resource/{rdf/read-only.rb → read-only.rb} +18 -18
- data/lib/roadforest/resource/role/has-children.rb +1 -1
- data/lib/roadforest/resource/role/writable.rb +2 -2
- data/lib/roadforest/server.rb +1 -1
- data/lib/roadforest/source-rigor.rb +9 -0
- data/lib/roadforest/{rdf/source-rigor → source-rigor}/credence-annealer.rb +2 -2
- data/lib/roadforest/{rdf/source-rigor → source-rigor}/credence.rb +5 -5
- data/lib/roadforest/{rdf/source-rigor → source-rigor}/credence/any.rb +1 -1
- data/lib/roadforest/{rdf/source-rigor → source-rigor}/credence/none-if-role-absent.rb +1 -1
- data/lib/roadforest/{rdf/source-rigor → source-rigor}/credence/role-if-available.rb +1 -1
- data/lib/roadforest/source-rigor/engine.rb +45 -0
- data/lib/roadforest/{rdf → source-rigor}/graph-store.rb +9 -9
- data/lib/roadforest/{rdf/source-rigor → source-rigor}/http-investigator.rb +2 -2
- data/lib/roadforest/{rdf → source-rigor}/investigation.rb +2 -2
- data/lib/roadforest/{rdf/source-rigor → source-rigor}/investigator.rb +3 -3
- data/lib/roadforest/{rdf/source-rigor → source-rigor}/null-investigator.rb +3 -2
- data/lib/roadforest/{rdf → source-rigor}/parcel.rb +5 -5
- data/lib/roadforest/{rdf → source-rigor}/resource-pattern.rb +6 -6
- data/lib/roadforest/{rdf → source-rigor}/resource-query.rb +2 -2
- data/lib/roadforest/source-rigor/rigorous-access.rb +101 -0
- data/lib/roadforest/templates/affordance-doc.haml +23 -0
- data/lib/roadforest/templates/affordance-property-values.haml +13 -0
- data/lib/roadforest/templates/affordance-subject.haml +9 -0
- data/lib/roadforest/templates/affordance-uri-object.haml +2 -0
- data/lib/roadforest/templates/base/{property_value.haml → property-value.haml} +0 -0
- data/lib/roadforest/templates/base/{property_values.haml → property-values.haml} +0 -0
- data/lib/roadforest/templates/distiller/{property_value.haml → property-value.haml} +0 -0
- data/lib/roadforest/templates/distiller/{property_values.haml → property-values.haml} +0 -0
- data/lib/roadforest/templates/min/{property_values.haml → property-values.haml} +0 -0
- data/lib/roadforest/templates/rdfpost-curie.haml +6 -0
- data/lib/roadforest/test-support/dispatcher-facade.rb +2 -0
- data/lib/roadforest/test-support/matchers.rb +169 -5
- data/lib/roadforest/test-support/remote-host.rb +2 -2
- data/lib/roadforest/type-handlers/handler.rb +74 -0
- data/lib/roadforest/type-handlers/jsonld.rb +34 -0
- data/lib/roadforest/type-handlers/rdf-handler.rb +36 -0
- data/lib/roadforest/{content-handling/type-handlers → type-handlers}/rdfa-writer.rb +2 -2
- data/lib/roadforest/{content-handling/type-handlers → type-handlers}/rdfa-writer/document-environment.rb +9 -8
- data/lib/roadforest/type-handlers/rdfa-writer/environment-decorator.rb +312 -0
- data/lib/roadforest/{content-handling/type-handlers → type-handlers}/rdfa-writer/object-environment.rb +3 -3
- data/lib/roadforest/{content-handling/type-handlers → type-handlers}/rdfa-writer/property-environment.rb +5 -11
- data/lib/roadforest/type-handlers/rdfa-writer/render-engine.rb +427 -0
- data/lib/roadforest/{content-handling/type-handlers → type-handlers}/rdfa-writer/render-environment.rb +33 -26
- data/lib/roadforest/{content-handling/type-handlers → type-handlers}/rdfa-writer/subject-environment.rb +7 -23
- data/lib/roadforest/type-handlers/rdfa.rb +73 -0
- data/lib/roadforest/type-handlers/rdfpost.rb +301 -0
- data/lib/roadforest/utility/class-registry.rb +23 -5
- data/spec/.ctrlp-root +0 -0
- data/spec/affordance-augmenter.rb +75 -0
- data/spec/affordances-flow.rb +438 -0
- data/spec/authorization.rb +34 -0
- data/spec/client.rb +13 -12
- data/spec/credence-annealer.rb +5 -5
- data/spec/focus-list.rb +8 -8
- data/spec/full-integration.rb +3 -3
- data/spec/graph-copier.rb +4 -4
- data/spec/graph-store.rb +19 -31
- data/spec/keychain.rb +82 -0
- data/spec/rdf-normalization.rb +2 -2
- data/spec/rdf-parcel.rb +3 -3
- data/spec/rdfa-handler.rb +514 -0
- data/spec/rdfpost.rb +96 -0
- data/spec/source-rigor.rb +57 -0
- data/spec/update-focus.rb +11 -10
- metadata +91 -66
- data/lib/roadforest/blob-model.rb +0 -53
- data/lib/roadforest/content-handling/type-handler.rb +0 -76
- data/lib/roadforest/content-handling/type-handlers/jsonld.rb +0 -36
- data/lib/roadforest/content-handling/type-handlers/rdf-handler.rb +0 -38
- data/lib/roadforest/content-handling/type-handlers/rdfa-writer/render-engine.rb +0 -574
- data/lib/roadforest/content-handling/type-handlers/rdfa.rb +0 -175
- data/lib/roadforest/content-handling/type-handlers/rdfpost.rb +0 -297
- data/lib/roadforest/model.rb +0 -209
- data/lib/roadforest/models.rb +0 -2
- data/lib/roadforest/rdf/source-rigor.rb +0 -44
- data/lib/roadforest/rdf/vocabulary.rb +0 -11
- data/lib/roadforest/resource/http/form-parsing.rb +0 -81
- data/lib/roadforest/resource/rdf.rb +0 -4
- data/spec/form-parsing.rb +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c6aad7c24680d035ff3f8a2a72d660888d400be6
|
4
|
+
data.tar.gz: 4ed267799005efaba995beab6a5adfff4e171021
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c1a97a99c84940a429ebf824b919704d336d21d28a7113c0663a35dbc37ee451be3af7a6913b45e915a75d0d1f5fbf69ef2cc6a684df1d3f5a389f65526f1d62
|
7
|
+
data.tar.gz: 986679ca8ed11258a435a0f7b14d9f79b91487e7a2ec16dc2712b944fac032c5bd037a511725f62bc350f3c770401558b0b54ae76955710ade5f613fa4338911
|
data/examples/file-management.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'roadforest-server'
|
1
2
|
require 'rdf/vocab/skos'
|
2
3
|
|
3
4
|
module FileManagementExample
|
@@ -17,14 +18,16 @@ module FileManagementExample
|
|
17
18
|
|
18
19
|
class Application < RoadForest::Application
|
19
20
|
def setup
|
20
|
-
router.add :root, [], :read_only,
|
21
|
-
router.add :unresolved_needs, ["unresolved_needs"], :parent,
|
22
|
-
router.add_traced :need, ["needs",'*'], :leaf,
|
23
|
-
router.add :file_content, ["files","*"], :leaf,
|
21
|
+
router.add :root, [], :read_only, Interfaces::Navigation
|
22
|
+
router.add :unresolved_needs, ["unresolved_needs"], :parent, Interfaces::UnresolvedNeedsList
|
23
|
+
router.add_traced :need, ["needs",'*'], :leaf, Interfaces::Need
|
24
|
+
router.add :file_content, ["files","*"], :leaf, RoadForest::Interface::Blob do |route|
|
25
|
+
route.content_engine = RoadForest::ContentHandling.plaintext_engine
|
26
|
+
end
|
24
27
|
end
|
25
28
|
|
26
|
-
module
|
27
|
-
class Navigation < RoadForest::
|
29
|
+
module Interfaces
|
30
|
+
class Navigation < RoadForest::Interface::RDF
|
28
31
|
def exists?
|
29
32
|
true
|
30
33
|
end
|
@@ -47,7 +50,7 @@ module FileManagementExample
|
|
47
50
|
end
|
48
51
|
end
|
49
52
|
|
50
|
-
class UnresolvedNeedsList < RoadForest::
|
53
|
+
class UnresolvedNeedsList < RoadForest::Interface::RDF
|
51
54
|
def exists?
|
52
55
|
true
|
53
56
|
end
|
@@ -65,7 +68,7 @@ module FileManagementExample
|
|
65
68
|
graph.add_list(:lc, "needs") do |list|
|
66
69
|
services.file_records.each do |record|
|
67
70
|
if !record.resolved
|
68
|
-
need =
|
71
|
+
need = copy_interface(graph, :need, '*' => [record.name])
|
69
72
|
need[:lc, :name]
|
70
73
|
need[:lc, :digest]
|
71
74
|
|
@@ -76,11 +79,7 @@ module FileManagementExample
|
|
76
79
|
end
|
77
80
|
end
|
78
81
|
|
79
|
-
class
|
80
|
-
add_type TypeHandlers::Handler.new, "text/plain"
|
81
|
-
end
|
82
|
-
|
83
|
-
class Need < RoadForest::RDFModel
|
82
|
+
class Need < RoadForest::Interface::RDF
|
84
83
|
def data
|
85
84
|
@data = services.file_records.find do |record|
|
86
85
|
record.name == params.remainder
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'roadforest/test-support'
|
@@ -6,14 +6,14 @@ end
|
|
6
6
|
require 'roadforest/application/dispatcher'
|
7
7
|
require 'roadforest/application/path-provider'
|
8
8
|
require 'roadforest/application/services-host'
|
9
|
-
require 'roadforest/resource
|
10
|
-
require 'roadforest/content-handling/
|
11
|
-
require 'roadforest/
|
9
|
+
require 'roadforest/resource'
|
10
|
+
require 'roadforest/content-handling/common-engines'
|
11
|
+
require 'roadforest/graph/normalization'
|
12
12
|
require 'roadforest/authorization'
|
13
13
|
|
14
14
|
module RoadForest
|
15
15
|
class Application
|
16
|
-
include
|
16
|
+
include Graph::Normalization
|
17
17
|
|
18
18
|
def initialize(canonical_host, services = nil, configuration = nil, dispatcher = nil)
|
19
19
|
@canonical_host = normalize_resource(canonical_host)
|
@@ -28,7 +28,7 @@ module RoadForest
|
|
28
28
|
def setup
|
29
29
|
end
|
30
30
|
|
31
|
-
attr_accessor :services, :canonical_host
|
31
|
+
attr_accessor :services, :canonical_host, :default_content_engine
|
32
32
|
|
33
33
|
alias router dispatcher
|
34
34
|
|
@@ -36,8 +36,10 @@ module RoadForest
|
|
36
36
|
def services=(service_host)
|
37
37
|
@services = service_host
|
38
38
|
service_host.application = self
|
39
|
-
|
40
|
-
|
39
|
+
end
|
40
|
+
|
41
|
+
def default_content_engine
|
42
|
+
@default_content_engine || ContentHandling.rdf_engine
|
41
43
|
end
|
42
44
|
end
|
43
45
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'webmachine'
|
2
2
|
require 'roadforest/application/route-adapter'
|
3
|
+
require 'roadforest/resource'
|
3
4
|
|
4
5
|
module RoadForest
|
5
6
|
class Dispatcher < Webmachine::Dispatcher
|
@@ -15,82 +16,57 @@ module RoadForest
|
|
15
16
|
@route_names.fetch(name)
|
16
17
|
end
|
17
18
|
|
18
|
-
def
|
19
|
-
|
20
|
-
return add_traced_route(name, path_spec, resource_type, model_class, bindings, &block)
|
21
|
-
else
|
22
|
-
return add_untraced_route(name, path_spec, resource_type, model_class, bindings, &block)
|
23
|
-
end
|
19
|
+
def default_content_engine
|
20
|
+
@application.default_content_engine
|
24
21
|
end
|
25
|
-
alias add add_route
|
26
22
|
|
27
|
-
def
|
28
|
-
|
29
|
-
resource_route(resource, name, path_spec, bindings, &block)
|
23
|
+
def path_provider
|
24
|
+
@path_provider ||= PathProvider.new(self)
|
30
25
|
end
|
31
|
-
alias add_untraced add_untraced_route
|
32
26
|
|
33
|
-
def
|
34
|
-
|
35
|
-
resource_route(resource, name, path_spec, bindings, &block)
|
27
|
+
def services
|
28
|
+
@application.services
|
36
29
|
end
|
37
|
-
alias add_traced add_traced_route
|
38
30
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
31
|
+
# Add a named route to the dispatcher - the 90% case is handled by passing
|
32
|
+
# arguments in, but more control is available but manipulating the
|
33
|
+
# RouteBinding object used to create the Route and ResourceAdapter
|
34
|
+
#
|
35
|
+
# @yields [RouteBinding] temporary configuration object
|
36
|
+
def add_route(name=nil, path_spec=nil, resource_type=nil, interface_class=nil)
|
37
|
+
binder = Application::RouteBinding.new(self)
|
46
38
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
end
|
52
|
-
end
|
39
|
+
binder.route_name = name
|
40
|
+
binder.path_spec = path_spec
|
41
|
+
binder.resource_type = resource_type
|
42
|
+
binder.interface_class = interface_class
|
53
43
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
44
|
+
yield binder if block_given?
|
45
|
+
|
46
|
+
binder.validate!
|
47
|
+
|
48
|
+
@route_names[name] = binder.route
|
49
|
+
@routes << binder.route
|
50
|
+
binder.route
|
60
51
|
end
|
52
|
+
alias add add_route
|
61
53
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
def build_path(vars = nil)
|
68
|
-
vars ||= {}
|
69
|
-
"/" + path_spec.map do |segment|
|
70
|
-
case segment
|
71
|
-
when '*',Symbol
|
72
|
-
vars.fetch(segment)
|
73
|
-
when String
|
74
|
-
segment
|
75
|
-
end
|
76
|
-
end.join("/")
|
54
|
+
# @deprecated Just use add_route
|
55
|
+
def add_untraced_route(name = nil, path_spec = nil, resource_type = nil, interface_class = nil)
|
56
|
+
add_route(name, path_spec, resource_type, interface_class) do |binder|
|
57
|
+
binder.trace = false
|
58
|
+
yield binder if block_given?
|
77
59
|
end
|
60
|
+
end
|
61
|
+
alias add_untraced add_untraced_route
|
78
62
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
if(path_set.has_key?(key))
|
85
|
-
params.path_info[key] = value
|
86
|
-
elsif(key == '*')
|
87
|
-
params.path_tokens = value
|
88
|
-
else
|
89
|
-
params.query_params[key] = value
|
90
|
-
end
|
91
|
-
end
|
92
|
-
params
|
63
|
+
# @deprecated Just use add_route
|
64
|
+
def add_traced_route(name, path_spec, resource_type, interface_class, bindings = nil, &block)
|
65
|
+
add_route(name, path_spec, resource_type, interface_class) do |binder|
|
66
|
+
binder.trace = true
|
67
|
+
yield binder if block_given?
|
93
68
|
end
|
94
69
|
end
|
70
|
+
alias add_traced add_traced_route
|
95
71
|
end
|
96
72
|
end
|
@@ -22,10 +22,10 @@ module RoadForest
|
|
22
22
|
Webmachine::Request.new(method, url, headers, body)
|
23
23
|
end
|
24
24
|
|
25
|
-
def
|
25
|
+
def interface_for(name, vars = nil)
|
26
26
|
route = @dispatcher.route_for_name(name)
|
27
27
|
params = route.build_params(vars)
|
28
|
-
route.resource.
|
28
|
+
route.resource.build_interface(params)
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
@@ -1,34 +1,146 @@
|
|
1
1
|
module RoadForest
|
2
2
|
class Application
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
#Embedded in WebMachine's Routes to compose the object structure at need
|
4
|
+
class ResourceAdapter
|
5
|
+
attr_accessor :resource_builder, :interface_builder, :route_name, :router, :services, :content_engine, :trace, :router
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
def <(klass)
|
8
|
+
if klass <= Webmachine::Resource
|
9
|
+
return true
|
10
|
+
else
|
11
|
+
return false
|
12
|
+
end
|
12
13
|
end
|
13
|
-
attr_accessor :route_name, :resource_class, :model_class, :application, :trace
|
14
14
|
|
15
15
|
def new(request, response)
|
16
|
-
resource =
|
17
|
-
resource.
|
18
|
-
resource.
|
16
|
+
resource = resource_builder.call(request, response)
|
17
|
+
resource.interface = build_interface(resource.params)
|
18
|
+
resource.content_engine = content_engine || router.default_content_engine
|
19
|
+
resource.trace = trace?
|
19
20
|
resource
|
20
21
|
end
|
21
22
|
|
22
|
-
def
|
23
|
-
|
23
|
+
def build_interface(params)
|
24
|
+
interface_builder.call(route_name, params, router, router.services)
|
24
25
|
end
|
25
26
|
|
26
|
-
def
|
27
|
-
if
|
28
|
-
|
27
|
+
def trace?
|
28
|
+
if @trace.nil?
|
29
|
+
router.trace_by_default
|
29
30
|
else
|
30
|
-
|
31
|
+
!!@trace
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
#Extension of Webmachine's Routes that allows for rendering url paths and
|
37
|
+
#parameter lists.
|
38
|
+
class Route < Webmachine::Dispatcher::Route
|
39
|
+
# Create a complete URL for this route, doing any necessary variable
|
40
|
+
# substitution.
|
41
|
+
# @param [Hash] vars values for the path variables
|
42
|
+
# @return [String] the valid URL for the route
|
43
|
+
def build_path(vars = nil)
|
44
|
+
vars ||= {}
|
45
|
+
"/" + path_spec.map do |segment|
|
46
|
+
case segment
|
47
|
+
when '*',Symbol
|
48
|
+
vars.fetch(segment)
|
49
|
+
when String
|
50
|
+
segment
|
51
|
+
end
|
52
|
+
end.join("/")
|
53
|
+
end
|
54
|
+
|
55
|
+
def build_params(vars = nil)
|
56
|
+
vars ||= {}
|
57
|
+
params = Application::Parameters.new
|
58
|
+
path_set = Hash[path_spec.find_all{|segment| segment.is_a? Symbol}.map{|seg| [seg, true]}]
|
59
|
+
vars.to_hash.each do |key, value|
|
60
|
+
if(path_set.has_key?(key))
|
61
|
+
params.path_info[key] = value
|
62
|
+
elsif(key == '*')
|
63
|
+
params.path_tokens = value
|
64
|
+
else
|
65
|
+
params.query_params[key] = value
|
66
|
+
end
|
67
|
+
end
|
68
|
+
params
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
class RouteBinding
|
73
|
+
def initialize(router)
|
74
|
+
@router = router
|
75
|
+
end
|
76
|
+
|
77
|
+
attr_accessor :route_name, :path_spec, :bindings, :guard
|
78
|
+
attr_accessor :resource_type, :interface_class, :services, :trace, :content_engine
|
79
|
+
|
80
|
+
def resource_builder
|
81
|
+
@resource_builder ||= proc do |request, response|
|
82
|
+
Resource.get(resource_type).new(request, response)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def build_resource(&block)
|
87
|
+
@resource_builder = block
|
88
|
+
end
|
89
|
+
|
90
|
+
def interface_builder
|
91
|
+
@interface_builder ||= proc do |name, params, router, services|
|
92
|
+
interface_class.new(name, params, router.path_provider, services)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def build_interface(&block)
|
97
|
+
@interface_builder = block
|
98
|
+
end
|
99
|
+
|
100
|
+
def route
|
101
|
+
@route ||=
|
102
|
+
begin
|
103
|
+
if guard.nil?
|
104
|
+
Route.new(path_spec, resource_adapter, bindings || {})
|
105
|
+
else
|
106
|
+
Route.new(path_spec, resource_adapter, bindings || {}, &guard)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def resource_adapter
|
112
|
+
@resource_adapter ||=
|
113
|
+
begin
|
114
|
+
ResourceAdapter.new.tap do |adapter|
|
115
|
+
adapter.router = @router
|
116
|
+
adapter.route_name = route_name
|
117
|
+
adapter.interface_builder = interface_builder
|
118
|
+
adapter.resource_builder = resource_builder
|
119
|
+
adapter.content_engine = content_engine
|
120
|
+
adapter.trace = trace
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
def validate!
|
126
|
+
problems = []
|
127
|
+
|
128
|
+
if @path_spec.nil?
|
129
|
+
problems << "Path specification is nil - no way to route URLs here."
|
130
|
+
end
|
131
|
+
|
132
|
+
if @resource_builder.nil? && @resource_type.nil?
|
133
|
+
problems << "No means provided to build a resource adapter: set resource_type or resource_builder"
|
134
|
+
end
|
135
|
+
|
136
|
+
if @interface_builder.nil? and @interface_class.nil?
|
137
|
+
problems << "No means provided to build an application interface: set interface_class or interface_builder"
|
138
|
+
end
|
139
|
+
|
140
|
+
unless problems.empty?
|
141
|
+
raise InvalidRouteDefinition, "Route invalid:\n #{problems.join(" \n")}"
|
31
142
|
end
|
143
|
+
return true
|
32
144
|
end
|
33
145
|
end
|
34
146
|
end
|