roadforest 0.1 → 0.5
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.
- 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
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
require 'roadforest/augment/augmentation'
|
|
2
|
+
require 'roadforest/graph/vocabulary'
|
|
3
|
+
|
|
4
|
+
module RoadForest
|
|
5
|
+
module Augment
|
|
6
|
+
module Affordance
|
|
7
|
+
Af = Graph::Af
|
|
8
|
+
|
|
9
|
+
class Remove < Augmentation
|
|
10
|
+
register_for_subjects
|
|
11
|
+
|
|
12
|
+
def apply(term)
|
|
13
|
+
if term.resource.allowed_methods.include?("DELETE")
|
|
14
|
+
node = ::RDF::Node.new
|
|
15
|
+
yield [node, ::RDF.type, Af.Remove]
|
|
16
|
+
yield [node, Af.target, term.uri]
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
class Links < Augmentation
|
|
22
|
+
register_for_subjects
|
|
23
|
+
register_for_objects
|
|
24
|
+
|
|
25
|
+
def apply(term)
|
|
26
|
+
if term.uri.host != canonical_uri.hostname
|
|
27
|
+
return
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
case term.resource
|
|
31
|
+
when Webmachine::Dispatcher::NotFoundResource
|
|
32
|
+
node = ::RDF::Node.new
|
|
33
|
+
yield [node, ::RDF.type, Af.Null]
|
|
34
|
+
yield [node, Af.target, term.uri]
|
|
35
|
+
else
|
|
36
|
+
if term.resource.allowed_methods.include?("GET")
|
|
37
|
+
embeddable = ContentHandling::MediaTypeList.build(["image/jpeg"])
|
|
38
|
+
|
|
39
|
+
if embeddable.matches?(term.type_list)
|
|
40
|
+
node = ::RDF::Node.new
|
|
41
|
+
yield [node, ::RDF.type, Af.Embed]
|
|
42
|
+
yield [node, Af.target, term.uri]
|
|
43
|
+
else
|
|
44
|
+
node = ::RDF::Node.new
|
|
45
|
+
yield [node, ::RDF.type, Af.Navigate]
|
|
46
|
+
yield [node, Af.target, term.uri]
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
class Update < Augmentation
|
|
54
|
+
register_for_subjects
|
|
55
|
+
|
|
56
|
+
def apply(term)
|
|
57
|
+
if term.resource.allowed_methods.include?("PUT")
|
|
58
|
+
node = ::RDF::Node.new
|
|
59
|
+
yield [node, ::RDF.type, Af.Update]
|
|
60
|
+
yield [node, Af.target, term.uri]
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
class Create < Augmentation
|
|
66
|
+
register_for_subjects
|
|
67
|
+
|
|
68
|
+
def apply(term)
|
|
69
|
+
if term.resource.allowed_methods.include?("POST")
|
|
70
|
+
node = ::RDF::Node.new
|
|
71
|
+
yield [node, ::RDF.type, Af.Create]
|
|
72
|
+
yield [node, Af.target, term.uri]
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
require 'roadforest/augment/augmenter'
|
|
2
|
+
module RoadForest
|
|
3
|
+
module Augment
|
|
4
|
+
class Augmentation
|
|
5
|
+
def self.register_for_subjects
|
|
6
|
+
Augmenter.subject_augmentations_registry.add(self.name, self)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def self.register_for_objects
|
|
10
|
+
Augmenter.object_augmentations_registry.add(self.name, self)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def initialize(augmenter)
|
|
14
|
+
@augmenter = augmenter
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def canonical_uri
|
|
18
|
+
@augmenter.canonical_uri
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def router
|
|
22
|
+
@augmenter.router
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
class LazyResource
|
|
27
|
+
def initialize(uri, router)
|
|
28
|
+
@uri = uri
|
|
29
|
+
@router = router
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
attr_accessor :uri, :router
|
|
33
|
+
|
|
34
|
+
def request
|
|
35
|
+
@request ||= Webmachine::Request.new("GET", uri, {}, nil)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def response
|
|
39
|
+
@response ||= Webmachine::Response.new
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def route
|
|
43
|
+
@route ||= router.find_route(request)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def resource
|
|
47
|
+
@resource ||= router.find_resource(request, response)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def type_list
|
|
51
|
+
@type_list ||=
|
|
52
|
+
resource.content_types_provided.inject(ContentHandling::MediaTypeList.new) do |list, (type, method)|
|
|
53
|
+
list.add_header_val(type)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
class Process
|
|
59
|
+
attr_accessor :base_graph, :subjects
|
|
60
|
+
|
|
61
|
+
def initialize(base_graph)
|
|
62
|
+
@base_graph = base_graph
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def target_graph
|
|
66
|
+
@target_graph ||=
|
|
67
|
+
begin
|
|
68
|
+
::RDF::Repository.new.tap do |graph|
|
|
69
|
+
base_graph.each_statement do |stmt|
|
|
70
|
+
graph << stmt
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def subjects
|
|
77
|
+
@subjects ||= base_graph.subjects.select{|obj| ::RDF::URI === obj }
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def objects
|
|
81
|
+
@objects ||= base_graph.objects.select{|obj| ::RDF::URI === obj}
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def subject_resources(router)
|
|
85
|
+
subjects.map do |uri|
|
|
86
|
+
LazyResource.new(uri, router)
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def object_resources(router)
|
|
91
|
+
objects.map do |uri|
|
|
92
|
+
LazyResource.new(uri, router)
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
require 'rdf'
|
|
2
|
+
require 'roadforest/utility/class-registry'
|
|
3
|
+
|
|
4
|
+
module RoadForest
|
|
5
|
+
module Augment
|
|
6
|
+
class Augmenter
|
|
7
|
+
attr_accessor :router
|
|
8
|
+
|
|
9
|
+
def self.subject_augmentations_registry
|
|
10
|
+
@subject_registry ||= Utility::ClassRegistry.new(self, "subject augmentation")
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self.object_augmentations_registry
|
|
14
|
+
@object_registry ||= Utility::ClassRegistry.new(self, "object augmentation")
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def subject_augmentations
|
|
18
|
+
self.class.subject_augmentations_registry.map_classes do |klass|
|
|
19
|
+
klass.new(self)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def object_augmentations
|
|
24
|
+
self.class.object_augmentations_registry.map_classes do |klass|
|
|
25
|
+
klass.new(self)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
attr_accessor :canonical_uri
|
|
30
|
+
|
|
31
|
+
def augment(graph)
|
|
32
|
+
augmenting = Augment::Process.new(graph)
|
|
33
|
+
|
|
34
|
+
augmenting.subject_resources(router).each do |resource|
|
|
35
|
+
subject_augmentations.each do |augmentation|
|
|
36
|
+
augmentation.apply(resource) do |statement|
|
|
37
|
+
augmenting.target_graph << statement
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
augmenting.object_resources(router).each do |resource|
|
|
43
|
+
object_augmentations.each do |augmentation|
|
|
44
|
+
augmentation.apply(resource) do |statement|
|
|
45
|
+
augmenting.target_graph << statement
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
augmenting.target_graph
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require 'roadforest/augment/affordance'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require 'roadforest/content-handling/common-engines'
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
require 'roadforest/content-handling/engine'
|
|
2
|
+
|
|
3
|
+
module RoadForest
|
|
4
|
+
module ContentHandling
|
|
5
|
+
class << self
|
|
6
|
+
def rdf_engine
|
|
7
|
+
@rdf_engine ||=
|
|
8
|
+
begin
|
|
9
|
+
require 'roadforest/type-handlers/jsonld'
|
|
10
|
+
require 'roadforest/type-handlers/rdfa'
|
|
11
|
+
rdfa = RoadForest::TypeHandlers::RDFa.new
|
|
12
|
+
jsonld = RoadForest::TypeHandlers::JSONLD.new
|
|
13
|
+
|
|
14
|
+
ContentHandling::Engine.new.tap do |engine|
|
|
15
|
+
engine.add rdfa, "text/html;q=1;rdfa=1"
|
|
16
|
+
engine.add rdfa, "application/xhtml+xml;q=1;rdfa=1"
|
|
17
|
+
engine.add jsonld, "application/ld+json"
|
|
18
|
+
engine.add rdfa, "text/html;q=0.5"
|
|
19
|
+
engine.add rdfa, "application/xhtml+xml;q=0.5"
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def plaintext_engine
|
|
25
|
+
@plaintext_engine ||=
|
|
26
|
+
begin
|
|
27
|
+
require 'roadforest/type-handlers/handler'
|
|
28
|
+
text = RoadForest::TypeHandlers::Handler.new
|
|
29
|
+
|
|
30
|
+
ContentHandling::Engine.new.tap do |engine|
|
|
31
|
+
engine.add text, "text/plain"
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# @warning This is only the most nebulous beginning of image handling
|
|
37
|
+
def images_engine
|
|
38
|
+
@image_engine ||=
|
|
39
|
+
begin
|
|
40
|
+
require 'roadforest/type-handlers/handler'
|
|
41
|
+
data = RoadForest::TypeHandlers::Handler.new
|
|
42
|
+
|
|
43
|
+
RoadForest::ContentHandling::Engine.new.tap do |engine|
|
|
44
|
+
engine.add data, "image/jpeg"
|
|
45
|
+
engine.add data, "image/png;q=0.9"
|
|
46
|
+
engine.add data, "image/gif;q=0.7"
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# @warning This is only the most nebulous beginning of image handling
|
|
52
|
+
def graphics_engine
|
|
53
|
+
@graphics_engine ||=
|
|
54
|
+
begin
|
|
55
|
+
require 'roadforest/type-handlers/handler'
|
|
56
|
+
data = RoadForest::TypeHandlers::Handler.new
|
|
57
|
+
|
|
58
|
+
RoadForest::ContentHandling::Engine.new.tap do |engine|
|
|
59
|
+
engine.add data, "image/png"
|
|
60
|
+
engine.add data, "image/gif;q=0.9"
|
|
61
|
+
engine.add data, "image/jpeg;q=0.7"
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -46,18 +46,6 @@ module RoadForest
|
|
|
46
46
|
end
|
|
47
47
|
end
|
|
48
48
|
|
|
49
|
-
def self.default
|
|
50
|
-
require 'roadforest/content-handling/type-handlers/jsonld'
|
|
51
|
-
require 'roadforest/content-handling/type-handlers/rdfa'
|
|
52
|
-
self.new.tap do |engine|
|
|
53
|
-
engine.add RoadForest::MediaType::Handlers::RDFa.new, "text/html;q=1;rdfa=1"
|
|
54
|
-
engine.add RoadForest::MediaType::Handlers::RDFa.new, "application/xhtml+xml;q=1;rdfa=1"
|
|
55
|
-
engine.add RoadForest::MediaType::Handlers::JSONLD.new, "application/ld+json"
|
|
56
|
-
engine.add RoadForest::MediaType::Handlers::RDFa.new, "text/html;q=0.5"
|
|
57
|
-
engine.add RoadForest::MediaType::Handlers::RDFa.new, "application/xhtml+xml;q=0.5"
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
|
|
61
49
|
def initialize
|
|
62
50
|
@renderers = TypeHandlerList.new("provide")
|
|
63
51
|
@parsers = TypeHandlerList.new("accept")
|
|
@@ -74,14 +62,14 @@ module RoadForest
|
|
|
74
62
|
|
|
75
63
|
def add_parser(object, type)
|
|
76
64
|
type = MediaType.parse(type)
|
|
77
|
-
wrapper = RoadForest::
|
|
65
|
+
wrapper = RoadForest::ContentHandling::Wrap::Parse.new(type, object)
|
|
78
66
|
parsers.add(wrapper)
|
|
79
67
|
end
|
|
80
68
|
alias accept add_parser
|
|
81
69
|
|
|
82
70
|
def add_renderer(object, type)
|
|
83
71
|
type = MediaType.parse(type)
|
|
84
|
-
wrapper = RoadForest::
|
|
72
|
+
wrapper = RoadForest::ContentHandling::Wrap::Render.new(type, object)
|
|
85
73
|
renderers.add(wrapper)
|
|
86
74
|
end
|
|
87
75
|
alias provide add_renderer
|
|
@@ -1,43 +1,41 @@
|
|
|
1
1
|
module RoadForest
|
|
2
|
-
module
|
|
3
|
-
module
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
attr_reader :type, :handler
|
|
2
|
+
module ContentHandling
|
|
3
|
+
module Wrap
|
|
4
|
+
class Wrapper
|
|
5
|
+
def initialize(type, handler)
|
|
6
|
+
@type = type
|
|
7
|
+
@handler = handler
|
|
8
|
+
end
|
|
9
|
+
attr_reader :type, :handler
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
def local_to_network(base_uri, network)
|
|
12
|
+
@handler.local_to_network(base_uri, network)
|
|
13
|
+
end
|
|
14
|
+
alias from_graph local_to_network
|
|
16
15
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
end
|
|
20
|
-
alias to_graph network_to_local
|
|
16
|
+
def network_to_local(base_uri, source)
|
|
17
|
+
@handler.network_to_local(base_uri, source)
|
|
21
18
|
end
|
|
19
|
+
alias to_graph network_to_local
|
|
20
|
+
end
|
|
22
21
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
class Render < Wrapper
|
|
23
|
+
def call(resource)
|
|
24
|
+
@handler.render_for(resource)
|
|
25
|
+
end
|
|
27
26
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
end
|
|
27
|
+
def content_type_header
|
|
28
|
+
@type.content_type_header
|
|
31
29
|
end
|
|
30
|
+
end
|
|
32
31
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
class Parse < Wrapper
|
|
33
|
+
def call(resource)
|
|
34
|
+
@handler.parse_for(resource)
|
|
35
|
+
end
|
|
37
36
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
end
|
|
37
|
+
def add_child(resource)
|
|
38
|
+
@handler.add_child_to(resource)
|
|
41
39
|
end
|
|
42
40
|
end
|
|
43
41
|
end
|
|
@@ -190,6 +190,11 @@ module RoadForest
|
|
|
190
190
|
end
|
|
191
191
|
end
|
|
192
192
|
|
|
193
|
+
def matches?(other)
|
|
194
|
+
type = best_match_from(other)
|
|
195
|
+
include?(type) && other.include?(type)
|
|
196
|
+
end
|
|
197
|
+
|
|
193
198
|
def by_precedence
|
|
194
199
|
self.sort do |left, right|
|
|
195
200
|
right.precedence_index <=> left.precedence_index
|
|
@@ -201,6 +206,7 @@ module RoadForest
|
|
|
201
206
|
# @param [String] choice the acceptable item
|
|
202
207
|
def add(type)
|
|
203
208
|
@list << type
|
|
209
|
+
self
|
|
204
210
|
end
|
|
205
211
|
|
|
206
212
|
# Given a raw acceptable value from an acceptance header,
|