linked_rails 0.0.4.pre.gfe77aae19 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +674 -21
- data/app/controllers/linked_rails/bulk_controller.rb +16 -81
- data/app/models/linked_rails/actions/item.rb +30 -23
- data/app/models/linked_rails/actions/list.rb +6 -0
- data/app/models/linked_rails/collection/filter_field.rb +3 -16
- data/app/models/linked_rails/collection/filterable.rb +4 -6
- data/app/models/linked_rails/collection/infinite.rb +6 -17
- data/app/models/linked_rails/collection/iri.rb +2 -25
- data/app/models/linked_rails/collection/iri_mapping.rb +1 -1
- data/app/models/linked_rails/collection/paginated.rb +3 -4
- data/app/models/linked_rails/collection/view.rb +10 -38
- data/app/models/linked_rails/collection.rb +25 -27
- data/app/models/linked_rails/enum_value.rb +1 -1
- data/app/models/linked_rails/form/field/association_input.rb +1 -7
- data/app/models/linked_rails/form/field/file_input.rb +0 -1
- data/app/models/linked_rails/form/field.rb +5 -31
- data/app/models/linked_rails/form/field_factory.rb +16 -29
- data/app/models/linked_rails/form/group.rb +4 -2
- data/app/models/linked_rails/form/page.rb +0 -4
- data/app/models/linked_rails/form.rb +6 -4
- data/app/models/linked_rails/manifest.rb +20 -94
- data/app/models/linked_rails/menus/item.rb +13 -10
- data/app/models/linked_rails/menus/list.rb +5 -13
- data/app/models/linked_rails/ontology/base.rb +0 -2
- data/app/models/linked_rails/ontology.rb +0 -1
- data/app/models/linked_rails/property_query.rb +0 -2
- data/app/models/linked_rails/sequence.rb +11 -2
- data/app/models/linked_rails/web_page.rb +4 -0
- data/app/models/linked_rails/web_site.rb +4 -0
- data/app/models/linked_rails/widget.rb +10 -3
- data/app/policies/linked_rails/collection_policy.rb +2 -2
- data/app/serializers/linked_rails/actions/item_serializer.rb +4 -3
- data/app/serializers/linked_rails/collection/filter_field_serializer.rb +2 -3
- data/app/serializers/linked_rails/collection/filter_option_serializer.rb +1 -1
- data/app/serializers/linked_rails/collection/filter_serializer.rb +1 -1
- data/app/serializers/linked_rails/collection/sorting_serializer.rb +1 -1
- data/app/serializers/linked_rails/collection/view_serializer.rb +3 -3
- data/app/serializers/linked_rails/collection_serializer.rb +13 -9
- data/app/serializers/linked_rails/condition_serializer.rb +3 -3
- data/app/serializers/linked_rails/entry_point_serializer.rb +2 -2
- data/app/serializers/linked_rails/enum_value_serializer.rb +0 -1
- data/app/serializers/linked_rails/form/field/association_input_serializer.rb +0 -1
- data/app/serializers/linked_rails/form/field_serializer.rb +1 -3
- data/app/serializers/linked_rails/form/group_serializer.rb +1 -1
- data/app/serializers/linked_rails/form/page_serializer.rb +1 -1
- data/app/serializers/linked_rails/menus/item_serializer.rb +3 -3
- data/app/serializers/linked_rails/menus/list_serializer.rb +1 -1
- data/app/serializers/linked_rails/sequence_serializer.rb +5 -2
- data/app/serializers/linked_rails/shacl/node_shape_serializer.rb +1 -1
- data/app/serializers/linked_rails/shacl/property_shape_serializer.rb +1 -1
- data/app/serializers/linked_rails/shacl/shape_serializer.rb +5 -5
- data/app/serializers/linked_rails/web_page_serializer.rb +3 -3
- data/app/serializers/linked_rails/web_site_serializer.rb +1 -1
- data/app/serializers/linked_rails/widget_serializer.rb +3 -3
- data/lib/generators/linked_rails/install/templates/locales.yml +0 -4
- data/lib/generators/linked_rails/install/templates/rdf_serializers_initializer.rb +1 -1
- data/lib/generators/linked_rails/model/templates/form.rb.tt +1 -1
- data/lib/generators/linked_rails/model/templates/policy.rb.tt +1 -1
- data/lib/generators/linked_rails/model/templates/serializer.rb.tt +1 -5
- data/lib/linked_rails/active_response/controller/collections.rb +1 -1
- data/lib/linked_rails/active_response/controller/crud_defaults.rb +1 -1
- data/lib/linked_rails/active_response/controller/params.rb +6 -6
- data/lib/linked_rails/active_response/controller.rb +22 -1
- data/lib/linked_rails/collection_params_parser.rb +1 -1
- data/lib/linked_rails/controller/actionable.rb +2 -5
- data/lib/linked_rails/controller/default_actions/create.rb +2 -2
- data/lib/linked_rails/controller/error_handling.rb +7 -12
- data/lib/linked_rails/controller.rb +1 -4
- data/lib/linked_rails/helpers/delta_helper.rb +58 -4
- data/lib/linked_rails/helpers/resource_helper.rb +1 -13
- data/lib/linked_rails/iri_mapper.rb +1 -1
- data/lib/linked_rails/middleware/linked_data_params.rb +27 -26
- data/lib/linked_rails/model/actionable.rb +8 -7
- data/lib/linked_rails/model/collections.rb +4 -10
- data/lib/linked_rails/model/dirty.rb +18 -6
- data/lib/linked_rails/model/filtering.rb +2 -2
- data/lib/linked_rails/model/indexable.rb +1 -1
- data/lib/linked_rails/model/iri.rb +2 -14
- data/lib/linked_rails/model/iri_mapping.rb +3 -3
- data/lib/linked_rails/model/menuable.rb +7 -1
- data/lib/linked_rails/model/serialization.rb +6 -2
- data/lib/linked_rails/model/singularable.rb +5 -7
- data/lib/linked_rails/model/tables.rb +1 -1
- data/lib/linked_rails/model.rb +2 -5
- data/lib/linked_rails/params_parser.rb +47 -48
- data/lib/linked_rails/policy.rb +30 -21
- data/lib/linked_rails/renderers.rb +0 -1
- data/lib/linked_rails/routes.rb +0 -1
- data/lib/linked_rails/serializer/singularable.rb +1 -1
- data/lib/linked_rails/serializer.rb +2 -6
- data/lib/linked_rails/translate.rb +0 -12
- data/lib/linked_rails/vocab.rb +0 -1
- data/lib/linked_rails.rb +3 -16
- data/lib/rdf/query_fix.rb +1 -1
- metadata +10 -59
- data/app/controllers/linked_rails/actions/objects_controller.rb +0 -9
- data/app/models/linked_rails/actions/object.rb +0 -38
- data/app/models/linked_rails/form/field/url_input.rb +0 -10
- data/app/policies/linked_rails/actions/object_policy.rb +0 -11
- data/app/policies/linked_rails/form_policy.rb +0 -13
- data/app/policies/linked_rails/ontology_policy.rb +0 -13
- data/app/serializers/linked_rails/actions/object_serializer.rb +0 -9
- data/app/serializers/linked_rails/form/field/file_input_serializer.rb +0 -11
- data/app/serializers/linked_rails/property_query_serializer.rb +0 -7
- data/app/workers/linked_rails/invalidation_stream_worker.rb +0 -16
- data/lib/linked_rails/controller/delta.rb +0 -58
- data/lib/linked_rails/controller/rendering.rb +0 -48
- data/lib/linked_rails/errors/forbidden.rb +0 -37
- data/lib/linked_rails/errors.rb +0 -3
- data/lib/linked_rails/middleware/error_handling.rb +0 -51
- data/lib/linked_rails/model/cacheable.rb +0 -45
- data/lib/linked_rails/railtie.rb +0 -11
- data/lib/linked_rails/storage.rb +0 -32
- data/lib/linked_rails/types/iri_type.rb +0 -37
- data/lib/linked_rails/url.rb +0 -11
- data/lib/rdf/list.rb +0 -9
@@ -2,21 +2,17 @@
|
|
2
2
|
|
3
3
|
module LinkedRails
|
4
4
|
class ParamsParser # rubocop:disable Metrics/ClassLength
|
5
|
-
|
6
|
-
include ::Empathy::EmpJson::Helpers::Parsing
|
5
|
+
attr_accessor :params, :graph, :user_context
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
def initialize(slice: nil, params: {}, user_context: nil)
|
12
|
-
self.slice = slice
|
7
|
+
def initialize(graph: nil, params: {}, user_context: nil)
|
8
|
+
self.graph = graph
|
13
9
|
self.params = params
|
14
10
|
self.user_context = user_context
|
15
11
|
end
|
16
12
|
|
17
13
|
def attributes_from_filters(klass)
|
18
14
|
ActionController::Parameters.new(
|
19
|
-
filter_params.each_with_object({}) do |(predicate, value), hash|
|
15
|
+
collection_params_parser.filter_params.each_with_object({}) do |(predicate, value), hash|
|
20
16
|
key_and_value = filter_to_param(klass, predicate, value)
|
21
17
|
hash[key_and_value.first] = key_and_value.second if key_and_value
|
22
18
|
end
|
@@ -24,23 +20,21 @@ module LinkedRails
|
|
24
20
|
end
|
25
21
|
|
26
22
|
def parse_param(klass, predicate, object)
|
27
|
-
field_options = serializer_field(klass, predicate)
|
23
|
+
field_options = serializer_field(klass, predicate)
|
28
24
|
if field_options.is_a?(FastJsonapi::Attribute)
|
29
|
-
parse_attribute(klass, field_options,
|
25
|
+
parse_attribute(klass, field_options, object.value)
|
30
26
|
elsif field_options.is_a?(FastJsonapi::Relationship)
|
31
|
-
parse_association(klass, field_options,
|
27
|
+
parse_association(klass, field_options, object)
|
32
28
|
end
|
33
29
|
end
|
34
30
|
|
35
|
-
# Recursively parses a resource from
|
31
|
+
# Recursively parses a resource from graph
|
36
32
|
def parse_resource(subject, klass)
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
h
|
43
|
-
end
|
33
|
+
graph
|
34
|
+
.query([subject])
|
35
|
+
.map { |statement| parse_statement(statement, klass) }
|
36
|
+
.compact
|
37
|
+
.reduce({}) { |h, (k, v)| add_param(h, k, v) }
|
44
38
|
end
|
45
39
|
|
46
40
|
private
|
@@ -62,11 +56,11 @@ module LinkedRails
|
|
62
56
|
def associated_class_from_params(reflection, object)
|
63
57
|
return reflection.klass unless reflection.polymorphic?
|
64
58
|
|
65
|
-
|
59
|
+
query = graph.query(subject: object, predicate: Vocab.rdfv[:type])
|
66
60
|
|
67
|
-
raise("No type given for '#{object}' referenced by polymorphic association '#{reflection.name}'") if
|
61
|
+
raise("No type given for '#{object}' referenced by polymorphic association '#{reflection.name}'") if query.empty?
|
68
62
|
|
69
|
-
iri_to_class(
|
63
|
+
iri_to_class(query.first.object)
|
70
64
|
end
|
71
65
|
|
72
66
|
def collection_params_parser
|
@@ -77,11 +71,11 @@ module LinkedRails
|
|
77
71
|
options = serializer_field(klass, predicate)
|
78
72
|
return unless value.count == 1 && options.present?
|
79
73
|
|
80
|
-
parsed_value = value.first.start_with?('http') ? RDF::URI(value.first) : value.first
|
74
|
+
parsed_value = value.first.start_with?('http') ? RDF::URI(value.first) : RDF::Literal(value.first)
|
81
75
|
parse_param(
|
82
76
|
klass,
|
83
77
|
options.predicate,
|
84
|
-
|
78
|
+
parsed_value
|
85
79
|
)
|
86
80
|
end
|
87
81
|
|
@@ -99,17 +93,28 @@ module LinkedRails
|
|
99
93
|
end
|
100
94
|
|
101
95
|
def nested_attributes(object, klass, association, collection)
|
102
|
-
|
103
|
-
|
104
|
-
|
96
|
+
nested_resources =
|
97
|
+
if graph.query([object, Vocab.rdfv[:first], nil]).present?
|
98
|
+
nested_attributes_from_list(object, klass)
|
99
|
+
else
|
100
|
+
parsed = parse_nested_resource(object, klass)
|
101
|
+
collection ? {rand(1_000_000_000).to_s => parsed} : parsed
|
102
|
+
end
|
105
103
|
["#{association}_attributes", nested_resources]
|
106
104
|
end
|
107
105
|
|
106
|
+
def nested_attributes_from_list(object, klass)
|
107
|
+
Hash[
|
108
|
+
RDF::List.new(subject: object, graph: graph)
|
109
|
+
.map { |nested| [rand(1_000_000_000).to_s, parse_nested_resource(nested, klass)] }
|
110
|
+
]
|
111
|
+
end
|
112
|
+
|
108
113
|
def parse_association(klass, field_options, object)
|
109
114
|
association = field_options.association || field_options.key
|
110
115
|
reflection = klass.reflect_on_association(association) || raise("#{association} not found for #{name}")
|
111
116
|
|
112
|
-
if
|
117
|
+
if graph&.has_subject?(object)
|
113
118
|
association_klass = associated_class_from_params(reflection, object)
|
114
119
|
nested_attributes(object, association_klass, association, reflection.collection?)
|
115
120
|
elsif object.iri?
|
@@ -118,47 +123,41 @@ module LinkedRails
|
|
118
123
|
end
|
119
124
|
|
120
125
|
def parse_attribute(klass, field_options, value)
|
121
|
-
parsed_value = parse_enum_attribute(klass, field_options.key, value) || value
|
126
|
+
parsed_value = parse_blob_attribute(value) || parse_enum_attribute(klass, field_options.key, value) || value
|
127
|
+
|
128
|
+
[field_options.key, parsed_value]
|
129
|
+
end
|
122
130
|
|
123
|
-
|
131
|
+
def parse_blob_attribute(value)
|
132
|
+
params["<#{value}>"] if value.starts_with?(Vocab.ll['blobs/'])
|
124
133
|
end
|
125
134
|
|
126
135
|
def parse_enum_attribute(klass, key, value)
|
127
136
|
opts = RDF::Serializers.serializer_for(klass)&.enum_options(key)
|
128
137
|
return if opts.blank?
|
129
138
|
|
130
|
-
|
131
139
|
opts.detect { |_k, options| options.iri == value }&.first&.to_s
|
132
140
|
end
|
133
141
|
|
134
142
|
def parse_iri_param(iri, reflection)
|
143
|
+
resource = LinkedRails.iri_mapper.resource_from_iri(iri, user_context)
|
144
|
+
return unless resource
|
145
|
+
|
135
146
|
key = foreign_key_for_reflection(reflection)
|
136
|
-
value = parse_iri_param_value(iri, reflection) if key
|
137
147
|
|
138
|
-
|
139
|
-
end
|
148
|
+
value = resource&.try(reflection.association_primary_key) if key
|
140
149
|
|
141
|
-
|
142
|
-
resource = LinkedRails.iri_mapper.resource_from_iri(iri, user_context)
|
143
|
-
|
144
|
-
resource&.try(reflection.association_primary_key)
|
150
|
+
[key, value] if value
|
145
151
|
end
|
146
152
|
|
147
153
|
def parse_nested_resource(object, klass)
|
148
154
|
resource = parse_resource(object, klass)
|
149
|
-
resource[:id] ||=
|
155
|
+
resource[:id] ||= LinkedRails.iri_mapper.opts_from_iri(object)[:params][:id] if object.iri?
|
150
156
|
resource
|
151
157
|
end
|
152
158
|
|
153
|
-
def
|
154
|
-
|
155
|
-
|
156
|
-
opts = LinkedRails.iri_mapper.opts_from_iri(object)
|
157
|
-
if opts[:class].method(:requested_single_resource).owner == LinkedRails::Model::IRIMapping::ClassMethods
|
158
|
-
opts[:params][:id]
|
159
|
-
else
|
160
|
-
opts[:class].requested_single_resource(opts[:params], nil)&.id
|
161
|
-
end
|
159
|
+
def parse_statement(statement, klass)
|
160
|
+
parse_param(klass, statement.predicate, statement.object)
|
162
161
|
end
|
163
162
|
|
164
163
|
def serializer_field(klass, predicate)
|
data/lib/linked_rails/policy.rb
CHANGED
@@ -24,11 +24,11 @@ module LinkedRails
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def create_child?(klass, **opts)
|
27
|
-
child_policy(klass,
|
27
|
+
child_policy(klass, opts).create?
|
28
28
|
end
|
29
29
|
|
30
30
|
def index_children?(klass, **opts)
|
31
|
-
child_policy(klass,
|
31
|
+
child_policy(klass, opts).show?
|
32
32
|
end
|
33
33
|
|
34
34
|
def permitted_attributes
|
@@ -38,18 +38,10 @@ module LinkedRails
|
|
38
38
|
.flatten
|
39
39
|
end
|
40
40
|
|
41
|
-
def permitted_attributes_from_filters(filters)
|
42
|
-
params_parser(filters).attributes_from_filters(policy_class).permit(permitted_attributes)
|
43
|
-
end
|
44
|
-
|
45
41
|
def policy_class
|
46
42
|
self.class.policy_class
|
47
43
|
end
|
48
44
|
|
49
|
-
def public_resource?
|
50
|
-
false
|
51
|
-
end
|
52
|
-
|
53
45
|
def show?
|
54
46
|
false
|
55
47
|
end
|
@@ -77,7 +69,7 @@ module LinkedRails
|
|
77
69
|
end
|
78
70
|
|
79
71
|
def child_policy(klass, **opts)
|
80
|
-
Pundit.policy(user_context, record.build_child(klass,
|
72
|
+
Pundit.policy(user_context, record.build_child(klass, opts.merge(user_context: user_context)))
|
81
73
|
end
|
82
74
|
|
83
75
|
def forbid_with_message(message, status = nil)
|
@@ -92,10 +84,6 @@ module LinkedRails
|
|
92
84
|
false
|
93
85
|
end
|
94
86
|
|
95
|
-
def params_parser(filters)
|
96
|
-
LinkedRails::ParamsParser.new(user_context: user_context, params: {filter: filters})
|
97
|
-
end
|
98
|
-
|
99
87
|
def parent_policy
|
100
88
|
return if record.try(:parent).blank?
|
101
89
|
|
@@ -137,12 +125,17 @@ module LinkedRails
|
|
137
125
|
end
|
138
126
|
|
139
127
|
module ClassMethods
|
140
|
-
def
|
141
|
-
raise("#{attr} not permitted by #{self}") if attribute_options(attr).blank? && permission_required
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
.
|
128
|
+
def condition_for(attr, pass, **shape_opts)
|
129
|
+
raise("#{attr} not permitted by #{self}") if attribute_options(attr).blank? && pass.permission_required?
|
130
|
+
|
131
|
+
alternatives = node_shapes_for(attr, **shape_opts)
|
132
|
+
if alternatives.count == 1
|
133
|
+
Condition.new(shape: alternatives.first, pass: pass)
|
134
|
+
elsif alternatives.count.positive?
|
135
|
+
Condition.new(shape: SHACL::NodeShape.new(or: alternatives), pass: pass)
|
136
|
+
else
|
137
|
+
pass
|
138
|
+
end
|
146
139
|
end
|
147
140
|
|
148
141
|
def policy_class
|
@@ -161,6 +154,22 @@ module LinkedRails
|
|
161
154
|
permitted_attributes.select { |opts| opts[:attributes].include?(attr) }
|
162
155
|
end
|
163
156
|
|
157
|
+
def condition_alternatives(attr)
|
158
|
+
attribute_options(attr)
|
159
|
+
.select { |opts| opts[:conditions].present? }
|
160
|
+
.map { |opts| opts[:conditions] }
|
161
|
+
end
|
162
|
+
|
163
|
+
def node_shapes_for(attr, property: [], sh_not: [])
|
164
|
+
alternatives = condition_alternatives(attr)
|
165
|
+
alternatives = [[]] if alternatives.empty? && (property.any? || sh_not.any?)
|
166
|
+
|
167
|
+
alternatives.map do |props|
|
168
|
+
properties = property_shapes(props) + property
|
169
|
+
SHACL::NodeShape.new(property: properties, sh_not: sh_not)
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
164
173
|
def initialize_permitted_attributes
|
165
174
|
return if _permitted_attributes && method(:_permitted_attributes).owner == singleton_class
|
166
175
|
|
data/lib/linked_rails/routes.rb
CHANGED
@@ -22,7 +22,6 @@ module LinkedRails
|
|
22
22
|
|
23
23
|
get '(*parent_iri)/actions', to: "#{opts.fetch(:actions, 'linked_rails/actions')}/items#index"
|
24
24
|
get '(*parent_iri)/actions/:id', to: "#{opts.fetch(:actions, 'linked_rails/actions')}/items#show"
|
25
|
-
get '(*parent_iri)/action_object', to: "#{opts.fetch(:actions, 'linked_rails/actions')}/objects#show"
|
26
25
|
end
|
27
26
|
|
28
27
|
def linked_resource(klass, controller: nil, collection: true, nested: false, resource: true, &block) # rubocop:disable Metrics/MethodLength, Metrics/ParameterLists
|
@@ -13,7 +13,7 @@ module LinkedRails
|
|
13
13
|
include Serializer::Actionable
|
14
14
|
include Serializer::Menuable
|
15
15
|
include Serializer::Singularable
|
16
|
-
|
16
|
+
|
17
17
|
extend Enhanceable
|
18
18
|
|
19
19
|
enhanceable :serializable_class, :Serializer
|
@@ -104,7 +104,7 @@ module LinkedRails
|
|
104
104
|
end
|
105
105
|
|
106
106
|
def serialize_image(obj)
|
107
|
-
if
|
107
|
+
if obj.is_a?(String) || obj.is_a?(Symbol)
|
108
108
|
RDF::URI(obj.to_s.gsub(/^fa-/, 'http://fontawesome.io/icon/'))
|
109
109
|
else
|
110
110
|
obj.presence
|
@@ -120,7 +120,6 @@ module LinkedRails
|
|
120
120
|
collection_opts = {}
|
121
121
|
collection_opts[:page_size] = opts.delete(:page_size) if opts.key?(:page_size)
|
122
122
|
collection_opts[:display] = opts.delete(:display) if opts.key?(:display)
|
123
|
-
collection_opts[:table_type] = opts.delete(:table_type) if opts.key?(:table_type)
|
124
123
|
|
125
124
|
has_one collection_name, **opts do |object, params|
|
126
125
|
object.send(collection_name, **collection_opts.merge(user_context: params[:scope]))
|
@@ -149,6 +148,3 @@ module LinkedRails
|
|
149
148
|
end
|
150
149
|
end
|
151
150
|
end
|
152
|
-
|
153
|
-
RDF::Serializers::NilSerializer.include(Empathy::EmpJson::Serializer)
|
154
|
-
RDF::Serializers::ListSerializer.include(Empathy::EmpJson::Serializer)
|
@@ -135,18 +135,6 @@ module LinkedRails # rubocop:disable Metrics/ModuleLength
|
|
135
135
|
end
|
136
136
|
end
|
137
137
|
|
138
|
-
Translate.translations_for(:field, :placeholder) do |object, fallback|
|
139
|
-
if object.model_attribute.present?
|
140
|
-
I18n.t(
|
141
|
-
"forms.#{Translate.translation_key(object.model_class)}.#{object.model_attribute}.placeholder",
|
142
|
-
default: [
|
143
|
-
:"forms.default.#{object.model_attribute}.placeholder",
|
144
|
-
fallback ? object.model_attribute.to_s.humanize : ''
|
145
|
-
]
|
146
|
-
)
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
138
|
Translate.translations_for(:field, :label) do |object, fallback|
|
151
139
|
if object.model_attribute.present?
|
152
140
|
I18n.t(
|
data/lib/linked_rails/vocab.rb
CHANGED
@@ -82,7 +82,6 @@ module LinkedRails
|
|
82
82
|
register(:fhir, 'http://hl7.org/fhir/')
|
83
83
|
register(:form, 'https://ns.ontola.io/form#')
|
84
84
|
register(:libro, 'https://ns.ontola.io/libro/')
|
85
|
-
register(:ld, 'http://purl.org/linked-delta/')
|
86
85
|
register(:ll, 'http://purl.org/link-lib/')
|
87
86
|
register(:ontola, 'https://ns.ontola.io/core#')
|
88
87
|
register(:sp, 'http://spinrdf.org/sp#')
|
data/lib/linked_rails.rb
CHANGED
@@ -1,11 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'active_response'
|
4
|
-
require 'empathy/emp_json'
|
5
4
|
require 'jsonapi/serializer'
|
6
5
|
require 'kaminari/activerecord'
|
7
6
|
require 'rdf'
|
8
|
-
require 'rdf/list'
|
9
7
|
require 'rdf/query_fix'
|
10
8
|
require 'rdf/vocab'
|
11
9
|
require 'nill_class_renderer'
|
@@ -14,7 +12,6 @@ require 'linked_rails/iri_mapper'
|
|
14
12
|
require 'linked_rails/collection_params_parser'
|
15
13
|
require 'linked_rails/params_parser'
|
16
14
|
require 'linked_rails/middleware/linked_data_params'
|
17
|
-
require 'linked_rails/middleware/error_handling'
|
18
15
|
require 'linked_rails/renderers'
|
19
16
|
|
20
17
|
module LinkedRails
|
@@ -22,10 +19,6 @@ module LinkedRails
|
|
22
19
|
|
23
20
|
mattr_accessor :whitelisted_spi_ips
|
24
21
|
mattr_writer :host, :scheme
|
25
|
-
mattr_accessor :persistent_redis_database, default: ENV['PERSISTENT_REDIS_DATABASE'].presence || 6
|
26
|
-
mattr_accessor :stream_redis_database, default: ENV['STREAM_REDIS_DATABASE'].presence || 7
|
27
|
-
mattr_accessor :cache_redis_database, default: ENV['CACHE_REDIS_DATABASE'].presence || 8
|
28
|
-
mattr_accessor :cache_stream, default: ENV['CACHE_STREAM'].presence || 'transactions'
|
29
22
|
|
30
23
|
def self.configurable_class(parent, klass, default: nil, reader: nil) # rubocop:disable Metrics/AbcSize
|
31
24
|
method = :"#{[parent, klass.to_s.downcase].compact.join('_')}_class"
|
@@ -54,10 +47,8 @@ module LinkedRails
|
|
54
47
|
@@scheme ||= Rails.application.routes.default_url_options[:protocol] || :http # rubocop:disable Style/ClassVars
|
55
48
|
end
|
56
49
|
|
57
|
-
def iri(**
|
58
|
-
|
59
|
-
opts[:path] = opts[:path].presence || '/'
|
60
|
-
RDF::URI.new(**opts)
|
50
|
+
def iri(**opts)
|
51
|
+
RDF::URI.new(**{scheme: LinkedRails.scheme, host: LinkedRails.host}.merge(opts))
|
61
52
|
end
|
62
53
|
end
|
63
54
|
|
@@ -85,12 +76,10 @@ module LinkedRails
|
|
85
76
|
end
|
86
77
|
|
87
78
|
ActiveSupport::Inflector.inflections do |inflect|
|
88
|
-
inflect.acronym 'IRI'
|
89
79
|
inflect.acronym 'RDF'
|
90
80
|
inflect.acronym 'SHACL'
|
91
81
|
end
|
92
82
|
|
93
|
-
require 'linked_rails/errors'
|
94
83
|
require 'linked_rails/uri_template'
|
95
84
|
require 'linked_rails/vocab'
|
96
85
|
require 'linked_rails/cache'
|
@@ -107,6 +96,4 @@ require 'linked_rails/rdf_error'
|
|
107
96
|
require 'linked_rails/routes'
|
108
97
|
require 'linked_rails/serializer'
|
109
98
|
require 'linked_rails/translate'
|
110
|
-
|
111
|
-
require 'linked_rails/url'
|
112
|
-
require 'linked_rails/storage'
|
99
|
+
require_relative 'rails/welcome_controller'
|
data/lib/rdf/query_fix.rb
CHANGED
@@ -5,7 +5,7 @@ module QueryFix
|
|
5
5
|
if args.length == 1 && args.first.is_a?(String) && args.first.include?('?')
|
6
6
|
split_iri = args.first.split('?')
|
7
7
|
|
8
|
-
super([split_iri[0], split_iri[1]
|
8
|
+
super([split_iri[0], split_iri[1].gsub('+', '%20')].join('?'), **options)
|
9
9
|
else
|
10
10
|
super
|
11
11
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: linked_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.4
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arthur Dingemans
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-11-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: active_response
|
@@ -24,20 +24,6 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.0.2
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: emp_json
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 1.3.0
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: 1.3.0
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: kaminari-activerecord
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,20 +52,6 @@ dependencies:
|
|
66
52
|
- - ">="
|
67
53
|
- !ruby/object:Gem::Version
|
68
54
|
version: '0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: redis
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ">="
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :runtime
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
55
|
- !ruby/object:Gem::Dependency
|
84
56
|
name: rdf
|
85
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -206,7 +178,7 @@ dependencies:
|
|
206
178
|
- - ">="
|
207
179
|
- !ruby/object:Gem::Version
|
208
180
|
version: '0'
|
209
|
-
description:
|
181
|
+
description:
|
210
182
|
email:
|
211
183
|
- arthur@argu.co
|
212
184
|
executables: []
|
@@ -217,7 +189,6 @@ files:
|
|
217
189
|
- README.md
|
218
190
|
- Rakefile
|
219
191
|
- app/controllers/linked_rails/actions/items_controller.rb
|
220
|
-
- app/controllers/linked_rails/actions/objects_controller.rb
|
221
192
|
- app/controllers/linked_rails/bulk_controller.rb
|
222
193
|
- app/controllers/linked_rails/current_user_controller.rb
|
223
194
|
- app/controllers/linked_rails/enum_values_controller.rb
|
@@ -229,7 +200,6 @@ files:
|
|
229
200
|
- app/controllers/linked_rails/ontologies_controller.rb
|
230
201
|
- app/models/linked_rails/actions/item.rb
|
231
202
|
- app/models/linked_rails/actions/list.rb
|
232
|
-
- app/models/linked_rails/actions/object.rb
|
233
203
|
- app/models/linked_rails/collection.rb
|
234
204
|
- app/models/linked_rails/collection/configuration.rb
|
235
205
|
- app/models/linked_rails/collection/filter.rb
|
@@ -272,7 +242,6 @@ files:
|
|
272
242
|
- app/models/linked_rails/form/field/text_area_input.rb
|
273
243
|
- app/models/linked_rails/form/field/text_input.rb
|
274
244
|
- app/models/linked_rails/form/field/toggle_button_group.rb
|
275
|
-
- app/models/linked_rails/form/field/url_input.rb
|
276
245
|
- app/models/linked_rails/form/field_factory.rb
|
277
246
|
- app/models/linked_rails/form/group.rb
|
278
247
|
- app/models/linked_rails/form/page.rb
|
@@ -295,17 +264,13 @@ files:
|
|
295
264
|
- app/models/linked_rails/widget.rb
|
296
265
|
- app/policies/linked_rails/actions/item_policy.rb
|
297
266
|
- app/policies/linked_rails/actions/list_policy.rb
|
298
|
-
- app/policies/linked_rails/actions/object_policy.rb
|
299
267
|
- app/policies/linked_rails/collection/view_policy.rb
|
300
268
|
- app/policies/linked_rails/collection_policy.rb
|
301
269
|
- app/policies/linked_rails/enum_value_policy.rb
|
302
|
-
- app/policies/linked_rails/form_policy.rb
|
303
270
|
- app/policies/linked_rails/menus/item_policy.rb
|
304
271
|
- app/policies/linked_rails/menus/list_policy.rb
|
305
|
-
- app/policies/linked_rails/ontology_policy.rb
|
306
272
|
- app/policies/linked_rails/sequence_policy.rb
|
307
273
|
- app/serializers/linked_rails/actions/item_serializer.rb
|
308
|
-
- app/serializers/linked_rails/actions/object_serializer.rb
|
309
274
|
- app/serializers/linked_rails/collection/filter_field_serializer.rb
|
310
275
|
- app/serializers/linked_rails/collection/filter_option_serializer.rb
|
311
276
|
- app/serializers/linked_rails/collection/filter_serializer.rb
|
@@ -318,7 +283,6 @@ files:
|
|
318
283
|
- app/serializers/linked_rails/entry_point_serializer.rb
|
319
284
|
- app/serializers/linked_rails/enum_value_serializer.rb
|
320
285
|
- app/serializers/linked_rails/form/field/association_input_serializer.rb
|
321
|
-
- app/serializers/linked_rails/form/field/file_input_serializer.rb
|
322
286
|
- app/serializers/linked_rails/form/field/resource_field_serializer.rb
|
323
287
|
- app/serializers/linked_rails/form/field/select_input_serializer.rb
|
324
288
|
- app/serializers/linked_rails/form/field_serializer.rb
|
@@ -331,7 +295,6 @@ files:
|
|
331
295
|
- app/serializers/linked_rails/ontology/class_serializer.rb
|
332
296
|
- app/serializers/linked_rails/ontology/property_serializer.rb
|
333
297
|
- app/serializers/linked_rails/ontology_serializer.rb
|
334
|
-
- app/serializers/linked_rails/property_query_serializer.rb
|
335
298
|
- app/serializers/linked_rails/rdf_error_serializer.rb
|
336
299
|
- app/serializers/linked_rails/sequence_serializer.rb
|
337
300
|
- app/serializers/linked_rails/shacl/node_shape_serializer.rb
|
@@ -340,7 +303,6 @@ files:
|
|
340
303
|
- app/serializers/linked_rails/web_page_serializer.rb
|
341
304
|
- app/serializers/linked_rails/web_site_serializer.rb
|
342
305
|
- app/serializers/linked_rails/widget_serializer.rb
|
343
|
-
- app/workers/linked_rails/invalidation_stream_worker.rb
|
344
306
|
- config/initializers/inflections.rb
|
345
307
|
- lib/generators/linked_rails/install/install_generator.rb
|
346
308
|
- lib/generators/linked_rails/install/templates/README
|
@@ -380,9 +342,7 @@ files:
|
|
380
342
|
- lib/linked_rails/controller/default_actions/create.rb
|
381
343
|
- lib/linked_rails/controller/default_actions/destroy.rb
|
382
344
|
- lib/linked_rails/controller/default_actions/update.rb
|
383
|
-
- lib/linked_rails/controller/delta.rb
|
384
345
|
- lib/linked_rails/controller/error_handling.rb
|
385
|
-
- lib/linked_rails/controller/rendering.rb
|
386
346
|
- lib/linked_rails/engine.rb
|
387
347
|
- lib/linked_rails/enhanceable.rb
|
388
348
|
- lib/linked_rails/enhancements.rb
|
@@ -390,17 +350,13 @@ files:
|
|
390
350
|
- lib/linked_rails/enhancements/destroyable/controller.rb
|
391
351
|
- lib/linked_rails/enhancements/updatable/controller.rb
|
392
352
|
- lib/linked_rails/enhancements/updatable/serializer.rb
|
393
|
-
- lib/linked_rails/errors.rb
|
394
|
-
- lib/linked_rails/errors/forbidden.rb
|
395
353
|
- lib/linked_rails/helpers/delta_helper.rb
|
396
354
|
- lib/linked_rails/helpers/ontola_actions_helper.rb
|
397
355
|
- lib/linked_rails/helpers/resource_helper.rb
|
398
356
|
- lib/linked_rails/iri_mapper.rb
|
399
|
-
- lib/linked_rails/middleware/error_handling.rb
|
400
357
|
- lib/linked_rails/middleware/linked_data_params.rb
|
401
358
|
- lib/linked_rails/model.rb
|
402
359
|
- lib/linked_rails/model/actionable.rb
|
403
|
-
- lib/linked_rails/model/cacheable.rb
|
404
360
|
- lib/linked_rails/model/collections.rb
|
405
361
|
- lib/linked_rails/model/dirty.rb
|
406
362
|
- lib/linked_rails/model/enhancements.rb
|
@@ -416,7 +372,6 @@ files:
|
|
416
372
|
- lib/linked_rails/params_parser.rb
|
417
373
|
- lib/linked_rails/policy.rb
|
418
374
|
- lib/linked_rails/policy/attribute_conditions.rb
|
419
|
-
- lib/linked_rails/railtie.rb
|
420
375
|
- lib/linked_rails/rdf_error.rb
|
421
376
|
- lib/linked_rails/renderers.rb
|
422
377
|
- lib/linked_rails/routes.rb
|
@@ -424,24 +379,20 @@ files:
|
|
424
379
|
- lib/linked_rails/serializer/actionable.rb
|
425
380
|
- lib/linked_rails/serializer/menuable.rb
|
426
381
|
- lib/linked_rails/serializer/singularable.rb
|
427
|
-
- lib/linked_rails/storage.rb
|
428
382
|
- lib/linked_rails/test_methods.rb
|
429
383
|
- lib/linked_rails/translate.rb
|
430
|
-
- lib/linked_rails/types/iri_type.rb
|
431
384
|
- lib/linked_rails/uri_template.rb
|
432
|
-
- lib/linked_rails/url.rb
|
433
385
|
- lib/linked_rails/version.rb
|
434
386
|
- lib/linked_rails/vocab.rb
|
435
387
|
- lib/nill_class_renderer.rb
|
436
388
|
- lib/rails/welcome_controller.rb
|
437
|
-
- lib/rdf/list.rb
|
438
389
|
- lib/rdf/query_fix.rb
|
439
390
|
- lib/tasks/linked_rails_tasks.rake
|
440
391
|
homepage: https://github.com/ontola/linked_rails
|
441
392
|
licenses:
|
442
|
-
-
|
393
|
+
- GPL-3.0-or-later
|
443
394
|
metadata: {}
|
444
|
-
post_install_message:
|
395
|
+
post_install_message:
|
445
396
|
rdoc_options: []
|
446
397
|
require_paths:
|
447
398
|
- lib
|
@@ -452,12 +403,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
452
403
|
version: '0'
|
453
404
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
454
405
|
requirements:
|
455
|
-
- - "
|
406
|
+
- - ">="
|
456
407
|
- !ruby/object:Gem::Version
|
457
|
-
version:
|
408
|
+
version: '0'
|
458
409
|
requirements: []
|
459
|
-
rubygems_version: 3.
|
460
|
-
signing_key:
|
410
|
+
rubygems_version: 3.1.2
|
411
|
+
signing_key:
|
461
412
|
specification_version: 4
|
462
413
|
summary: LinkedRails helps you create a Linked Data application in a matter of seconds.
|
463
414
|
test_files: []
|