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
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'roadforest/
|
1
|
+
require 'roadforest/source-rigor/graph-store'
|
2
2
|
require 'roadforest/remote-host'
|
3
3
|
require 'roadforest/test-support/http-client'
|
4
4
|
module RoadForest::TestSupport
|
@@ -9,7 +9,7 @@ module RoadForest::TestSupport
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def build_graph_store
|
12
|
-
RoadForest::
|
12
|
+
RoadForest::SourceRigor::GraphStore.new
|
13
13
|
end
|
14
14
|
|
15
15
|
def http_client
|
@@ -0,0 +1,74 @@
|
|
1
|
+
module RoadForest
|
2
|
+
module TypeHandlers
|
3
|
+
class Handler
|
4
|
+
def network_to_local(base_uri, network)
|
5
|
+
return network
|
6
|
+
end
|
7
|
+
|
8
|
+
def local_to_network(base_uri, local)
|
9
|
+
return local
|
10
|
+
end
|
11
|
+
|
12
|
+
def parse_for(resource)
|
13
|
+
source = resource.request_body
|
14
|
+
interface = resource.interface
|
15
|
+
input_data = network_to_local(interface.my_url, source)
|
16
|
+
|
17
|
+
update_interface(interface, input_data)
|
18
|
+
|
19
|
+
renderer = resource.content_engine.choose_renderer(resource.request_accept_header)
|
20
|
+
body = renderer.local_to_network(interface.my_url, interface.response_data)
|
21
|
+
|
22
|
+
build_response(resource)
|
23
|
+
end
|
24
|
+
|
25
|
+
def render_for(resource)
|
26
|
+
interface = resource.interface
|
27
|
+
output_data = get_output(interface)
|
28
|
+
local_to_network(interface.my_url, output_data)
|
29
|
+
end
|
30
|
+
|
31
|
+
def add_child_to(resource)
|
32
|
+
interface = resource.interface
|
33
|
+
source = resource.request_body
|
34
|
+
input_data = network_to_local(interface.my_url, source)
|
35
|
+
|
36
|
+
child_for_interface(resource.interface, input_data)
|
37
|
+
|
38
|
+
build_response(resource)
|
39
|
+
end
|
40
|
+
|
41
|
+
def build_response(resource)
|
42
|
+
interface = resource.interface
|
43
|
+
|
44
|
+
renderer = resource.content_engine.choose_renderer(resource.request_accept_header)
|
45
|
+
body = renderer.local_to_network(interface.my_url, interface.response_data)
|
46
|
+
|
47
|
+
resource.response_content_type = renderer.content_type_header
|
48
|
+
resource.response_body = body
|
49
|
+
if interface.response_location
|
50
|
+
resource.redirect_to(interface.response_location)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def child_for_interface(interface, data)
|
55
|
+
interface.add_child(data)
|
56
|
+
interface.processed
|
57
|
+
end
|
58
|
+
|
59
|
+
def update_interface(interface, input_data)
|
60
|
+
result = interface.update(input_data)
|
61
|
+
interface.response_data = result
|
62
|
+
interface.processed
|
63
|
+
result
|
64
|
+
end
|
65
|
+
|
66
|
+
def get_output(interface)
|
67
|
+
result = interface.retrieve
|
68
|
+
interface.response_data = result
|
69
|
+
interface.processed
|
70
|
+
result
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'json/ld'
|
2
|
+
require 'roadforest/type-handlers/rdf-handler'
|
3
|
+
module RoadForest
|
4
|
+
module TypeHandlers
|
5
|
+
#application/ld+json
|
6
|
+
class JSONLD < RDFHandler
|
7
|
+
include Graph::Normalization
|
8
|
+
|
9
|
+
def local_to_network(base_uri, rdf)
|
10
|
+
raise "Invalid base uri: #{base_uri}" if base_uri.nil?
|
11
|
+
prefixes = relevant_prefixes_for_graph(rdf)
|
12
|
+
prefixes.keys.each do |prefix|
|
13
|
+
prefixes[prefix.to_sym] = prefixes[prefix]
|
14
|
+
end
|
15
|
+
JSON::LD::Writer.buffer(:base_uri => base_uri.to_s,
|
16
|
+
:prefixes => prefixes) do |writer|
|
17
|
+
rdf.each_statement do |statement|
|
18
|
+
writer << statement
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def network_to_local(base_uri, source)
|
24
|
+
raise "Invalid base uri: #{base_uri.inspect}" if base_uri.nil?
|
25
|
+
graph = ::RDF::Graph.new
|
26
|
+
reader = JSON::LD::Reader.new(source.to_s, :base_uri => base_uri.to_s)
|
27
|
+
reader.each_statement do |statement|
|
28
|
+
graph.insert(statement)
|
29
|
+
end
|
30
|
+
graph
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'roadforest/type-handlers/handler'
|
2
|
+
require 'roadforest/graph/normalization'
|
3
|
+
module RoadForest
|
4
|
+
module TypeHandlers
|
5
|
+
class RDFHandler < Handler
|
6
|
+
include Graph::Normalization
|
7
|
+
|
8
|
+
def get_output(interface)
|
9
|
+
graph = super
|
10
|
+
root_uri = interface.canonical_uri
|
11
|
+
|
12
|
+
graph.each_statement do |statement|
|
13
|
+
original = statement.dup
|
14
|
+
if ::RDF::URI === statement.subject and statement.subject.relative?
|
15
|
+
statement.subject = normalize_resource(root_uri.join(statement.subject))
|
16
|
+
end
|
17
|
+
|
18
|
+
if ::RDF::URI === statement.object and statement.object.relative?
|
19
|
+
statement.object = normalize_resource(root_uri.join(statement.object))
|
20
|
+
end
|
21
|
+
|
22
|
+
if statement != original
|
23
|
+
graph.delete(original)
|
24
|
+
graph.insert(statement)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
graph
|
28
|
+
end
|
29
|
+
|
30
|
+
def child_for_interface(interface, data)
|
31
|
+
interface.add_graph_child(data)
|
32
|
+
interface.processed
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -2,7 +2,7 @@ require 'cgi'
|
|
2
2
|
require 'roadforest/debug'
|
3
3
|
require 'rdf/rdfa'
|
4
4
|
|
5
|
-
module RoadForest::
|
5
|
+
module RoadForest::TypeHandlers
|
6
6
|
##
|
7
7
|
# An RDFa 1.1 serialiser in Ruby. The RDFa serializer makes use of Haml templates, allowing runtime-replacement with alternate templates. Note, however, that templates should be checked against the W3C test suite to ensure that valid RDFa is emitted.
|
8
8
|
#
|
@@ -134,7 +134,7 @@ module RoadForest::MediaType
|
|
134
134
|
#
|
135
135
|
# @return [void]
|
136
136
|
def write_epilogue
|
137
|
-
require 'roadforest/
|
137
|
+
require 'roadforest/type-handlers/rdfa-writer/render-engine'
|
138
138
|
@base_uri = RDF::URI(@options[:base_uri]) if @options[:base_uri]
|
139
139
|
@lang = @options[:lang]
|
140
140
|
@debug = @options[:debug]
|
@@ -1,11 +1,9 @@
|
|
1
|
-
require 'roadforest/
|
2
|
-
|
1
|
+
require 'roadforest/type-handlers/rdfa-writer/render-environment'
|
2
|
+
|
3
|
+
module RoadForest::TypeHandlers
|
3
4
|
class RDFaWriter
|
4
5
|
class DocumentEnvironment < RenderEnvironment
|
5
6
|
attr_accessor :subject_terms, :title, :prefixes, :lang, :base
|
6
|
-
def yielded(item)
|
7
|
-
@_engine.render(item)
|
8
|
-
end
|
9
7
|
|
10
8
|
def subjects
|
11
9
|
enum_for(:each_subject_environment)
|
@@ -13,7 +11,7 @@ module RoadForest::MediaType
|
|
13
11
|
|
14
12
|
def each_subject_environment
|
15
13
|
subject_terms.each do |term|
|
16
|
-
yield
|
14
|
+
yield subject_env(term)
|
17
15
|
end
|
18
16
|
end
|
19
17
|
|
@@ -21,14 +19,17 @@ module RoadForest::MediaType
|
|
21
19
|
%w{doc}
|
22
20
|
end
|
23
21
|
|
24
|
-
def
|
25
|
-
@prefix ||=
|
22
|
+
def build_prefix_header(prefixes)
|
26
23
|
if prefixes.empty?
|
27
24
|
nil
|
28
25
|
else
|
29
26
|
prefixes.keys.map {|pk| "#{pk}: #{prefixes[pk]}"}.sort.join(" ")
|
30
27
|
end.tap{|prefix| add_debug {"\nserialize: prefixes: #{prefixes.inspect} prefix src: #{prefix.inspect}"}}
|
31
28
|
end
|
29
|
+
|
30
|
+
def prefix
|
31
|
+
@prefix ||= build_prefix_header(prefixes)
|
32
|
+
end
|
32
33
|
end
|
33
34
|
end
|
34
35
|
end
|
@@ -0,0 +1,312 @@
|
|
1
|
+
require 'roadforest/utility/class-registry'
|
2
|
+
require 'roadforest/graph/vocabulary'
|
3
|
+
|
4
|
+
module RoadForest
|
5
|
+
module AffordanceClient
|
6
|
+
Af = Graph::Af
|
7
|
+
def all_affordances
|
8
|
+
@all_affordances ||=
|
9
|
+
[
|
10
|
+
Af.Affordance,
|
11
|
+
Af.Null,
|
12
|
+
Af.Safe,
|
13
|
+
Af.Idempotent,
|
14
|
+
Af.Unsafe,
|
15
|
+
Af.Navigate,
|
16
|
+
Af.Embed,
|
17
|
+
Af.Metadata,
|
18
|
+
Af.Update,
|
19
|
+
Af.Remove,
|
20
|
+
Af.Create,
|
21
|
+
Af.Mutate,
|
22
|
+
]
|
23
|
+
end
|
24
|
+
|
25
|
+
def affordance_present(aff)
|
26
|
+
::RDF::Query.new do
|
27
|
+
pattern [:any, ::RDF.type, aff ]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def has_affordance(node, type)
|
32
|
+
if type.is_a? Symbol
|
33
|
+
type = Af[type]
|
34
|
+
end
|
35
|
+
::RDF::Query.new do
|
36
|
+
pattern([:node, ::RDF.type, type, nil])
|
37
|
+
pattern([:node, Af.target, node, nil])
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def payload_has_param(node)
|
42
|
+
::RDF::Query.new do
|
43
|
+
pattern([:node, Af.payload, :context, nil])
|
44
|
+
pattern([ :param, ::RDF.type, Af.Parameter, :context ])
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def query_matches(query, graph)
|
49
|
+
return (not graph.first(query).nil?)
|
50
|
+
end
|
51
|
+
|
52
|
+
def affordances_in_graph?(graph)
|
53
|
+
all_affordances.each do |aff|
|
54
|
+
return true if query_matches(affordance_present(aff), graph)
|
55
|
+
end
|
56
|
+
return false
|
57
|
+
end
|
58
|
+
|
59
|
+
def affordance_node?(node, graph)
|
60
|
+
query = ::RDF::Query.new do
|
61
|
+
pattern [node, ::RDF.type, :type]
|
62
|
+
end
|
63
|
+
!!( query.execute(graph).find do |solution|
|
64
|
+
all_affordances.include?(solution[:type])
|
65
|
+
end)
|
66
|
+
end
|
67
|
+
|
68
|
+
def affordance_type_in_graph?(node, type, graph)
|
69
|
+
#puts "\n#{__FILE__}:#{__LINE__} => \n#{graph.dump(:nquads)}"
|
70
|
+
query_matches(has_affordance(node, type).tap{|value|
|
71
|
+
#puts "#{__FILE__}:#{__LINE__} => #{[value.patterns,
|
72
|
+
#value.execute(graph)].inspect}"
|
73
|
+
}, graph).tap{|value|
|
74
|
+
#puts "#{__FILE__}:#{__LINE__} => #{value.inspect}"
|
75
|
+
}
|
76
|
+
end
|
77
|
+
|
78
|
+
def parameterized_navigation_affordance_in_graph?(node, graph)
|
79
|
+
return false #to be implemented
|
80
|
+
query_matches(has_affordance(node, :Navigate) + payload_has_param(node), graph)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
module TypeHandlers
|
85
|
+
class RDFaWriter
|
86
|
+
class DecorationSet
|
87
|
+
def initialize
|
88
|
+
@names = EnvironmentDecorator.all_names
|
89
|
+
end
|
90
|
+
attr_accessor :names
|
91
|
+
|
92
|
+
def decoration_for(env)
|
93
|
+
names.inject(env) do |env, name|
|
94
|
+
EnvironmentDecorator[name].perhaps_decorate(env)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
class EnvironmentDecorator
|
100
|
+
extend Utility::ClassRegistry::Registrar
|
101
|
+
|
102
|
+
class << self
|
103
|
+
def registry_purpose
|
104
|
+
"render environment decoration"
|
105
|
+
end
|
106
|
+
|
107
|
+
def decorates(klass)
|
108
|
+
register(self.name)
|
109
|
+
@decorated_class = klass
|
110
|
+
methods = klass.instance_methods
|
111
|
+
methods -= self.instance_methods
|
112
|
+
methods.each do |method|
|
113
|
+
define_method(method) do |*args, &block|
|
114
|
+
@_decorated_.__send__(method, *args, &block)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def can_decorate?(env)
|
120
|
+
return (env._base_env_.class <= @decorated_class)
|
121
|
+
end
|
122
|
+
|
123
|
+
def perhaps_decorate(env)
|
124
|
+
if can_decorate?(env)
|
125
|
+
self.new(env)
|
126
|
+
else
|
127
|
+
env
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
end
|
132
|
+
|
133
|
+
def initialize(env)
|
134
|
+
@_decorated_ = env
|
135
|
+
setup
|
136
|
+
end
|
137
|
+
|
138
|
+
def setup
|
139
|
+
end
|
140
|
+
|
141
|
+
def like_a?(klass)
|
142
|
+
is_a?(klass) || _decorated_.like_a?(klass)
|
143
|
+
end
|
144
|
+
|
145
|
+
attr_reader :_decorated_
|
146
|
+
end
|
147
|
+
|
148
|
+
class RDFPostCurie < RenderEnvironment
|
149
|
+
def initialize(engine, kind, uri)
|
150
|
+
super(engine)
|
151
|
+
@kind, @uri = kind, uri
|
152
|
+
end
|
153
|
+
|
154
|
+
attr_reader :kind, :uri
|
155
|
+
|
156
|
+
def curie
|
157
|
+
@curie ||= get_curie(uri)
|
158
|
+
end
|
159
|
+
|
160
|
+
def reduced?
|
161
|
+
curie != uri
|
162
|
+
end
|
163
|
+
|
164
|
+
def prefix
|
165
|
+
@prefix ||= curie.split(":").first
|
166
|
+
end
|
167
|
+
|
168
|
+
def suffix
|
169
|
+
@suffix ||= curie.split(":").last
|
170
|
+
end
|
171
|
+
|
172
|
+
def template_kinds
|
173
|
+
%w{rdfpost-curie}
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
class AffordanceDecorator < EnvironmentDecorator
|
178
|
+
include AffordanceClient
|
179
|
+
extend AffordanceClient
|
180
|
+
|
181
|
+
def graph
|
182
|
+
_engine.graph
|
183
|
+
end
|
184
|
+
|
185
|
+
def affordance?
|
186
|
+
true
|
187
|
+
end
|
188
|
+
|
189
|
+
def rdfpost_curie(kind, uri)
|
190
|
+
curie = RDFPostCurie.new(_engine, kind, uri)
|
191
|
+
|
192
|
+
_engine.render(curie)
|
193
|
+
end
|
194
|
+
|
195
|
+
def template_kinds
|
196
|
+
_base_env_.template_kinds.map{|kind| "affordance-" + kind} + _base_env_.template_kinds
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
class DocumentAffordanceDecorator < AffordanceDecorator
|
201
|
+
decorates DocumentEnvironment
|
202
|
+
|
203
|
+
def self.can_decorate?(env)
|
204
|
+
return false unless env._base_env_.class <= DocumentEnvironment
|
205
|
+
affordances_in_graph?(env._engine.graph)
|
206
|
+
end
|
207
|
+
|
208
|
+
|
209
|
+
def subjects
|
210
|
+
_decorated_.subjects.reject do |subject_env|
|
211
|
+
affordance_node?(subject_env.subject, graph)
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
def prefixes
|
216
|
+
dec_prefixes = _decorated_.prefixes
|
217
|
+
|
218
|
+
dec_prefixes.keys.find_all do |key|
|
219
|
+
dec_prefixes[key] == Af.to_uri
|
220
|
+
end.each do |key|
|
221
|
+
dec_prefixes.delete(key)
|
222
|
+
end
|
223
|
+
dec_prefixes
|
224
|
+
end
|
225
|
+
|
226
|
+
def prefix
|
227
|
+
@prefix ||= build_prefix_header(prefixes)
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
class SubjectAffordanceDecorator < AffordanceDecorator
|
232
|
+
decorates SubjectEnvironment
|
233
|
+
|
234
|
+
def self.can_decorate?(env)
|
235
|
+
return false unless env._base_env_.class <= SubjectEnvironment
|
236
|
+
return false unless env.parent.like_a? AffordanceDecorator
|
237
|
+
|
238
|
+
return (
|
239
|
+
[:Update, :Remove, :Create].find do |type|
|
240
|
+
affordance_type_in_graph?(env.subject, type, env._engine.graph)
|
241
|
+
end || parameterized_navigation_affordance_in_graph?(env.subject, env._engine.graph))
|
242
|
+
end
|
243
|
+
|
244
|
+
def predicate_nodes
|
245
|
+
@predicate_nodes ||=
|
246
|
+
begin
|
247
|
+
[].tap do |nodes|
|
248
|
+
each_predicate do |pred|
|
249
|
+
pred.each_object do |object|
|
250
|
+
subj = _engine.subject_env(object)
|
251
|
+
next if subj.nil?
|
252
|
+
subj.rel = get_curie(pred.predicate)
|
253
|
+
nodes << subj
|
254
|
+
end
|
255
|
+
end
|
256
|
+
end
|
257
|
+
end
|
258
|
+
@predicate_nodes.enum_for(:each)
|
259
|
+
end
|
260
|
+
|
261
|
+
def prefixes
|
262
|
+
_engine.prefixes
|
263
|
+
end
|
264
|
+
|
265
|
+
def attrs
|
266
|
+
_decorated_.attrs.merge(
|
267
|
+
:method => "POST", :action => subject.join("put")
|
268
|
+
)
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
272
|
+
class PropertyAffordanceDecorator < AffordanceDecorator
|
273
|
+
decorates PropertyEnvironment
|
274
|
+
|
275
|
+
def self.can_decorate?(env)
|
276
|
+
return false unless (env._base_env_.class <= PropertyEnvironment)
|
277
|
+
return false unless (env.parent.like_a? AffordanceDecorator)
|
278
|
+
return true
|
279
|
+
end
|
280
|
+
|
281
|
+
end
|
282
|
+
|
283
|
+
class ObjectAffordanceDecorator < AffordanceDecorator
|
284
|
+
decorates ObjectEnvironment
|
285
|
+
|
286
|
+
def self.can_decorate?(env)
|
287
|
+
return false unless env._base_env_.class <= ObjectEnvironment
|
288
|
+
return false unless env.parent.like_a? AffordanceDecorator
|
289
|
+
return true
|
290
|
+
end
|
291
|
+
|
292
|
+
def label_attrs
|
293
|
+
{}
|
294
|
+
end
|
295
|
+
|
296
|
+
def type_uri
|
297
|
+
if object.literal? and object.datatype?
|
298
|
+
object.datatype
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
302
|
+
def input_attrs(value)
|
303
|
+
@_decorated_.attrs.merge(
|
304
|
+
:name => "ol",
|
305
|
+
:content => value,
|
306
|
+
:value => value,
|
307
|
+
)
|
308
|
+
end
|
309
|
+
end
|
310
|
+
end
|
311
|
+
end
|
312
|
+
end
|