linked_rails 0.0.3 → 0.0.4.pre.g14b377f91

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.
Files changed (173) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +21 -674
  3. data/app/controllers/linked_rails/actions/objects_controller.rb +9 -0
  4. data/app/controllers/linked_rails/bulk_controller.rb +71 -21
  5. data/app/controllers/linked_rails/enum_values_controller.rb +0 -42
  6. data/app/models/linked_rails/actions/item.rb +64 -55
  7. data/app/models/linked_rails/actions/list.rb +6 -31
  8. data/app/models/linked_rails/actions/object.rb +38 -0
  9. data/app/models/linked_rails/collection/configuration.rb +55 -0
  10. data/app/models/linked_rails/collection/filter.rb +1 -1
  11. data/app/models/linked_rails/collection/filter_field.rb +19 -2
  12. data/app/models/linked_rails/collection/filter_option.rb +1 -1
  13. data/app/models/linked_rails/collection/filterable.rb +6 -9
  14. data/app/models/linked_rails/collection/infinite.rb +113 -0
  15. data/app/models/linked_rails/collection/infinite_view.rb +1 -90
  16. data/app/models/linked_rails/collection/iri.rb +47 -43
  17. data/app/models/linked_rails/collection/iri_mapping.rb +15 -7
  18. data/app/models/linked_rails/collection/paginated.rb +46 -0
  19. data/app/models/linked_rails/collection/paginated_view.rb +1 -33
  20. data/app/models/linked_rails/collection/sortable.rb +1 -9
  21. data/app/models/linked_rails/collection/sorting.rb +1 -1
  22. data/app/models/linked_rails/collection/view.rb +51 -14
  23. data/app/models/linked_rails/collection.rb +53 -85
  24. data/app/models/linked_rails/creative_work.rb +1 -1
  25. data/app/models/linked_rails/entry_point.rb +8 -5
  26. data/app/models/linked_rails/enum_value.rb +40 -2
  27. data/app/models/linked_rails/form/field/association_input.rb +7 -1
  28. data/app/models/linked_rails/form/field/file_input.rb +1 -0
  29. data/app/models/linked_rails/form/field/resource_field.rb +2 -0
  30. data/{lib/linked_rails/enhancements/indexable/model.rb → app/models/linked_rails/form/field/url_input.rb} +3 -3
  31. data/app/models/linked_rails/form/field.rb +37 -13
  32. data/app/models/linked_rails/form/field_factory.rb +48 -18
  33. data/app/models/linked_rails/form/group.rb +4 -6
  34. data/app/models/linked_rails/form/page.rb +8 -4
  35. data/app/models/linked_rails/form.rb +16 -21
  36. data/app/models/linked_rails/manifest.rb +104 -22
  37. data/app/models/linked_rails/menus/item.rb +10 -13
  38. data/app/models/linked_rails/menus/list.rb +16 -7
  39. data/app/models/linked_rails/ontology/base.rb +3 -1
  40. data/app/models/linked_rails/ontology/class.rb +3 -3
  41. data/app/models/linked_rails/ontology.rb +5 -5
  42. data/app/models/linked_rails/property_query.rb +2 -0
  43. data/app/models/linked_rails/sequence.rb +4 -13
  44. data/app/models/linked_rails/shacl/property_shape.rb +1 -1
  45. data/app/models/linked_rails/web_page.rb +0 -4
  46. data/app/models/linked_rails/web_site.rb +0 -4
  47. data/app/models/linked_rails/widget.rb +4 -11
  48. data/app/policies/linked_rails/actions/object_policy.rb +11 -0
  49. data/app/policies/linked_rails/collection_policy.rb +2 -2
  50. data/app/serializers/linked_rails/actions/item_serializer.rb +5 -5
  51. data/app/serializers/linked_rails/actions/object_serializer.rb +9 -0
  52. data/app/serializers/linked_rails/collection/filter_field_serializer.rb +3 -2
  53. data/app/serializers/linked_rails/collection/filter_option_serializer.rb +1 -1
  54. data/app/serializers/linked_rails/collection/filter_serializer.rb +1 -1
  55. data/app/serializers/linked_rails/collection/sorting_serializer.rb +1 -1
  56. data/app/serializers/linked_rails/collection/view_serializer.rb +3 -3
  57. data/app/serializers/linked_rails/collection_serializer.rb +8 -7
  58. data/app/serializers/linked_rails/condition_serializer.rb +3 -3
  59. data/app/serializers/linked_rails/entry_point_serializer.rb +3 -3
  60. data/app/serializers/linked_rails/enum_value_serializer.rb +1 -0
  61. data/app/serializers/linked_rails/form/field/association_input_serializer.rb +1 -0
  62. data/app/serializers/linked_rails/form/field/file_input_serializer.rb +11 -0
  63. data/app/serializers/linked_rails/form/field_serializer.rb +3 -1
  64. data/app/serializers/linked_rails/form/group_serializer.rb +1 -1
  65. data/app/serializers/linked_rails/form/page_serializer.rb +1 -1
  66. data/app/serializers/linked_rails/menus/item_serializer.rb +3 -3
  67. data/app/serializers/linked_rails/menus/list_serializer.rb +1 -1
  68. data/app/serializers/linked_rails/ontology_serializer.rb +2 -2
  69. data/app/serializers/linked_rails/property_query_serializer.rb +7 -0
  70. data/app/serializers/linked_rails/sequence_serializer.rb +2 -5
  71. data/app/serializers/linked_rails/shacl/node_shape_serializer.rb +1 -1
  72. data/app/serializers/linked_rails/shacl/property_shape_serializer.rb +1 -1
  73. data/app/serializers/linked_rails/shacl/shape_serializer.rb +5 -5
  74. data/app/serializers/linked_rails/web_page_serializer.rb +3 -3
  75. data/app/serializers/linked_rails/web_site_serializer.rb +1 -1
  76. data/app/serializers/linked_rails/widget_serializer.rb +3 -3
  77. data/lib/generators/linked_rails/install/install_generator.rb +5 -8
  78. data/lib/generators/linked_rails/install/templates/README +2 -0
  79. data/lib/generators/linked_rails/install/templates/app_menu_list.rb +36 -7
  80. data/lib/generators/linked_rails/install/templates/application_menu_list.rb +40 -1
  81. data/lib/generators/linked_rails/install/templates/initializer.rb +1 -2
  82. data/lib/generators/linked_rails/install/templates/locales.yml +14 -0
  83. data/lib/generators/linked_rails/install/templates/rdf_serializers_initializer.rb +1 -1
  84. data/lib/generators/linked_rails/install/templates/vocab.rb +1 -0
  85. data/lib/generators/linked_rails/install/templates/vocab.yml +2 -2
  86. data/lib/generators/linked_rails/model/model_generator.rb +0 -1
  87. data/lib/generators/linked_rails/model/templates/controller.rb.tt +5 -1
  88. data/lib/generators/linked_rails/model/templates/form.rb.tt +3 -0
  89. data/lib/generators/linked_rails/model/templates/menu_list.rb.tt +15 -0
  90. data/lib/generators/linked_rails/model/templates/policy.rb.tt +13 -0
  91. data/lib/generators/linked_rails/model/templates/serializer.rb.tt +5 -1
  92. data/lib/linked_rails/active_response/controller/collections.rb +1 -1
  93. data/lib/linked_rails/active_response/controller/crud_defaults.rb +4 -4
  94. data/lib/linked_rails/active_response/controller/params.rb +10 -10
  95. data/lib/linked_rails/active_response/controller.rb +8 -18
  96. data/lib/linked_rails/active_response/responders/rdf.rb +19 -10
  97. data/lib/linked_rails/callable_variable.rb +1 -1
  98. data/lib/linked_rails/collection_params_parser.rb +93 -0
  99. data/lib/linked_rails/controller/actionable.rb +121 -0
  100. data/lib/linked_rails/controller/authorization.rb +6 -0
  101. data/lib/linked_rails/controller/default_actions/create.rb +52 -0
  102. data/lib/linked_rails/controller/default_actions/destroy.rb +42 -0
  103. data/lib/linked_rails/controller/default_actions/update.rb +43 -0
  104. data/lib/linked_rails/controller/delta.rb +58 -0
  105. data/lib/linked_rails/controller/error_handling.rb +10 -10
  106. data/lib/linked_rails/controller/rendering.rb +48 -0
  107. data/lib/linked_rails/controller.rb +24 -4
  108. data/lib/linked_rails/enhancements/creatable/controller.rb +1 -1
  109. data/lib/linked_rails/enhancements/destroyable/controller.rb +1 -1
  110. data/lib/linked_rails/enhancements/updatable/controller.rb +1 -1
  111. data/lib/linked_rails/enhancements.rb +0 -16
  112. data/lib/linked_rails/helpers/delta_helper.rb +26 -57
  113. data/lib/linked_rails/helpers/ontola_actions_helper.rb +2 -2
  114. data/lib/linked_rails/helpers/resource_helper.rb +4 -2
  115. data/lib/linked_rails/iri_mapper.rb +17 -39
  116. data/lib/linked_rails/middleware/error_handling.rb +51 -0
  117. data/lib/linked_rails/middleware/linked_data_params.rb +30 -151
  118. data/lib/linked_rails/model/actionable.rb +68 -0
  119. data/lib/linked_rails/model/collections.rb +201 -39
  120. data/lib/linked_rails/model/dirty.rb +6 -18
  121. data/lib/linked_rails/model/enhancements.rb +1 -6
  122. data/lib/linked_rails/model/filtering.rb +4 -6
  123. data/lib/linked_rails/model/indexable.rb +6 -16
  124. data/lib/linked_rails/model/iri.rb +28 -19
  125. data/lib/linked_rails/model/iri_mapping.rb +37 -8
  126. data/lib/linked_rails/model/menuable.rb +28 -0
  127. data/lib/linked_rails/model/serialization.rb +2 -15
  128. data/lib/linked_rails/model/singularable.rb +57 -0
  129. data/lib/linked_rails/model/sorting.rb +0 -5
  130. data/lib/linked_rails/model/tables.rb +26 -0
  131. data/lib/linked_rails/model.rb +17 -7
  132. data/lib/linked_rails/params_parser.rb +131 -54
  133. data/lib/linked_rails/policy/attribute_conditions.rb +2 -2
  134. data/lib/linked_rails/policy.rb +40 -46
  135. data/lib/linked_rails/railtie.rb +11 -0
  136. data/lib/linked_rails/rdf_error.rb +2 -2
  137. data/lib/linked_rails/renderers.rb +1 -0
  138. data/lib/linked_rails/routes.rb +38 -22
  139. data/lib/linked_rails/serializer/actionable.rb +27 -0
  140. data/lib/linked_rails/serializer/menuable.rb +31 -0
  141. data/lib/linked_rails/serializer/singularable.rb +26 -0
  142. data/lib/linked_rails/serializer.rb +28 -11
  143. data/lib/linked_rails/test_methods.rb +114 -0
  144. data/lib/linked_rails/translate.rb +31 -9
  145. data/lib/linked_rails/types/iri_type.rb +37 -0
  146. data/lib/linked_rails/uri_template.rb +30 -0
  147. data/lib/linked_rails/version.rb +1 -1
  148. data/lib/linked_rails/vocab.rb +9 -0
  149. data/lib/linked_rails.rb +30 -13
  150. data/lib/rails/welcome_controller.rb +3 -3
  151. data/lib/rdf/list.rb +9 -0
  152. data/lib/rdf/query_fix.rb +15 -0
  153. metadata +71 -33
  154. data/app/models/linked_rails/actions/default_actions/create.rb +0 -60
  155. data/app/models/linked_rails/actions/default_actions/destroy.rb +0 -45
  156. data/app/models/linked_rails/actions/default_actions/update.rb +0 -50
  157. data/app/models/linked_rails/actions/default_actions.rb +0 -17
  158. data/lib/generators/linked_rails/install/templates/application_action_list.rb +0 -3
  159. data/lib/generators/linked_rails/model/templates/action_list.rb.tt +0 -6
  160. data/lib/linked_rails/enhancements/actionable/model.rb +0 -71
  161. data/lib/linked_rails/enhancements/actionable/serializer.rb +0 -25
  162. data/lib/linked_rails/enhancements/creatable/action.rb +0 -15
  163. data/lib/linked_rails/enhancements/destroyable/action.rb +0 -15
  164. data/lib/linked_rails/enhancements/destroyable/routing.rb +0 -19
  165. data/lib/linked_rails/enhancements/menuable/model.rb +0 -36
  166. data/lib/linked_rails/enhancements/menuable/serializer.rb +0 -33
  167. data/lib/linked_rails/enhancements/route_concerns.rb +0 -56
  168. data/lib/linked_rails/enhancements/singularable/controller.rb +0 -43
  169. data/lib/linked_rails/enhancements/singularable/model.rb +0 -47
  170. data/lib/linked_rails/enhancements/singularable/serializer.rb +0 -28
  171. data/lib/linked_rails/enhancements/tableable/model.rb +0 -28
  172. data/lib/linked_rails/enhancements/updatable/action.rb +0 -15
  173. data/lib/linked_rails/enhancements/updatable/routing.rb +0 -20
@@ -12,17 +12,17 @@ module LinkedRails
12
12
  end
13
13
  attribute :action_status, predicate: Vocab.schema.actionStatus
14
14
  attribute :favorite, predicate: Vocab.ontola[:favoriteAction]
15
- attribute :url, predicate: Vocab.schema.url do |object|
15
+ attribute :one_click, predicate: Vocab.ontola[:oneClick]
16
+ attribute :target_url, predicate: Vocab.schema.url do |object|
16
17
  object.target[:id] if object.target.is_a?(Hash)
17
18
  end
18
19
  attribute :error, predicate: Vocab.schema.error
19
20
 
20
- has_one :parent, predicate: Vocab.schema.isPartOf, polymorphic: true do |object|
21
+ has_one :parent, predicate: Vocab.schema.isPartOf do |object|
21
22
  object.parent unless object.parent.try(:anonymous_iri?)
22
23
  end
23
- has_one :object, predicate: Vocab.schema.object, polymorphic: true
24
- has_one :target, predicate: Vocab.schema.target, polymorphic: true
25
- has_one :included_object, polymorphic: true
24
+ attribute :object_iri, predicate: Vocab.schema.object
25
+ has_one :target, predicate: Vocab.schema.target
26
26
  end
27
27
  end
28
28
  end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ module Actions
5
+ class ObjectSerializer < LinkedRails.serializer_parent_class
6
+ has_one :object, predicate: Vocab.owl.sameAs
7
+ end
8
+ end
9
+ end
@@ -5,8 +5,9 @@ module LinkedRails
5
5
  class FilterFieldSerializer < LinkedRails.serializer_parent_class
6
6
  attribute :key, predicate: Vocab.ontola[:filterKey]
7
7
  attribute :options_in, predicate: Vocab.ontola[:filterOptionsIn]
8
- has_one :collection, predicate: Vocab.schema.isPartOf, polymorphic: true
9
- has_many :options, predicate: Vocab.ontola[:filterOptions], polymorphic: true
8
+ attribute :visible?, predicate: Vocab.ontola[:visible]
9
+ has_one :collection, predicate: Vocab.schema.isPartOf
10
+ has_many :options, predicate: Vocab.ontola[:filterOptions]
10
11
  end
11
12
  end
12
13
  end
@@ -6,7 +6,7 @@ module LinkedRails
6
6
  attribute :count, predicate: Vocab.ontola[:filterCount]
7
7
  attribute :key, predicate: Vocab.ontola[:filterKey]
8
8
  attribute :value, predicate: Vocab.ontola[:filterValue]
9
- has_one :collection, predicate: Vocab.schema[:isPartOf], polymorphic: true
9
+ has_one :collection, predicate: Vocab.schema[:isPartOf]
10
10
  end
11
11
  end
12
12
  end
@@ -7,7 +7,7 @@ module LinkedRails
7
7
 
8
8
  attribute :key, predicate: Vocab.ontola[:filterKey]
9
9
  attribute :value, predicate: Vocab.ontola[:filterValue]
10
- has_one :collection, predicate: Vocab.schema.isPartOf, polymorphic: true
10
+ has_one :collection, predicate: Vocab.schema.isPartOf
11
11
  end
12
12
  end
13
13
  end
@@ -7,7 +7,7 @@ module LinkedRails
7
7
 
8
8
  attribute :key, predicate: Vocab.ontola[:sortKey]
9
9
  attribute :direction, predicate: Vocab.ontola[:sortDirection]
10
- has_one :collection, predicate: Vocab.schema.isPartOf, polymorphic: true
10
+ has_one :collection, predicate: Vocab.schema.isPartOf
11
11
  end
12
12
  end
13
13
  end
@@ -14,9 +14,9 @@ module LinkedRails
14
14
  attribute attr, predicate: Vocab.as[attr]
15
15
  end
16
16
 
17
- has_one :collection, predicate: Vocab.as.partOf, polymorphic: true
18
- has_one :unfiltered_collection, predicate: Vocab.ontola[:baseCollection], polymorphic: true
19
- has_one :member_sequence, predicate: Vocab.as.items, polymorphic: true
17
+ has_one :collection, predicate: Vocab.as.partOf
18
+ has_one :unfiltered_collection, predicate: Vocab.ontola[:baseCollection]
19
+ has_one :member_sequence, predicate: Vocab.as.items
20
20
  end
21
21
  end
22
22
  end
@@ -11,12 +11,13 @@ module LinkedRails
11
11
  attribute :total_count, predicate: Vocab.as.totalItems do |object|
12
12
  object.total_count if object.type == :paginated
13
13
  end
14
- attribute :iri_template, predicate: Vocab.ontola[:iriTemplate]
14
+ attribute :serialized_iri_template, predicate: Vocab.ontola[:iriTemplate]
15
15
  attribute :iri_template_opts, predicate: Vocab.ontola[:iriTemplateOpts]
16
16
  attribute :default_type, predicate: Vocab.ontola[:defaultType], &:type
17
17
  attribute :display, predicate: Vocab.ontola[:collectionDisplay] do |object|
18
18
  Vocab.ontola["collectionDisplay/#{object.display || :default}"]
19
19
  end
20
+ attribute :call_to_action, predicate: Vocab.ontola[:callToAction]
20
21
  attribute :columns, predicate: Vocab.ontola[:columns]
21
22
  attribute :collection_type, predicate: Vocab.ontola[:collectionType] do |object|
22
23
  Vocab.ontola["collectionType/#{object.type || :paginated}"]
@@ -25,17 +26,17 @@ module LinkedRails
25
26
  attribute :sort_options, predicate: Vocab.ontola[:sortOptions]
26
27
  attribute :view, predicate: Vocab.ll[:view]
27
28
 
28
- has_one :unfiltered_collection, predicate: Vocab.ontola[:baseCollection], polymorphic: true
29
- has_one :part_of, predicate: Vocab.schema.isPartOf, polymorphic: true do |object|
29
+ has_one :unfiltered_collection, predicate: Vocab.ontola[:baseCollection]
30
+ has_one :part_of, predicate: Vocab.schema.isPartOf do |object|
30
31
  object.part_of unless object.part_of.try(:anonymous_iri?)
31
32
  end
32
- has_one :default_view, predicate: Vocab.ontola[:pages], polymorphic: true
33
+ has_one :default_view, predicate: Vocab.ontola[:pages]
33
34
 
34
- has_many :filter_fields, predicate: Vocab.ontola[:filterFields], polymorphic: true, sequence: true
35
- has_many :filters, predicate: Vocab.ontola[:collectionFilter], polymorphic: true do |object|
35
+ has_many :filter_fields, predicate: Vocab.ontola[:filterFields], sequence: true
36
+ has_many :filters, predicate: Vocab.ontola[:activeFilters] do |object|
36
37
  object.filters.reject(&:default_filter)
37
38
  end
38
- has_many :sortings, polymorphic: true, predicate: Vocab.ontola[:collectionSorting]
39
+ has_many :sortings, predicate: Vocab.ontola[:collectionSorting]
39
40
 
40
41
  %i[first last].each do |attr|
41
42
  attribute attr, predicate: Vocab.as[attr]
@@ -2,8 +2,8 @@
2
2
 
3
3
  module LinkedRails
4
4
  class ConditionSerializer < LinkedRails.serializer_parent_class
5
- has_one :fail, predicate: Vocab.ontola[:fail], polymorphic: true
6
- has_one :pass, predicate: Vocab.ontola[:pass], polymorphic: true
7
- has_one :shape, predicate: Vocab.sh.node, polymorphic: true
5
+ has_one :fail, predicate: Vocab.ontola[:fail]
6
+ has_one :pass, predicate: Vocab.ontola[:pass]
7
+ has_one :shape, predicate: Vocab.sh.node
8
8
  end
9
9
  end
@@ -6,13 +6,13 @@ module LinkedRails
6
6
 
7
7
  attribute :label, predicate: Vocab.schema.name
8
8
  attribute :description, predicate: Vocab.schema.text
9
- attribute :url, predicate: Vocab.schema.url
9
+ attribute :target_url, predicate: Vocab.schema.url
10
10
  attribute :http_method, key: :method, predicate: Vocab.schema.httpMethod do |object|
11
11
  object.http_method.upcase
12
12
  end
13
13
 
14
- has_one :parent, predicate: Vocab.schema.isPartOf, polymorphic: true
15
- attribute :action_body, predicate: Vocab.ll[:actionBody], polymorphic: true
14
+ has_one :parent, predicate: Vocab.schema.isPartOf
15
+ attribute :action_body, predicate: Vocab.ll[:actionBody]
16
16
  attribute :image, predicate: Vocab.schema.image do |object|
17
17
  serialize_image(object.image)
18
18
  end
@@ -8,5 +8,6 @@ module LinkedRails
8
8
  attribute :close_match, predicate: Vocab.skos.closeMatch
9
9
  attribute :exact_match, predicate: Vocab.skos.exactMatch
10
10
  attribute :group_by, predicate: Vocab.ontola[:groupBy]
11
+ attribute :identifier, predicate: Vocab.schema.identifier
11
12
  end
12
13
  end
@@ -7,6 +7,7 @@ module LinkedRails
7
7
  attribute :nested_form, predicate: Vocab.form[:form] do |object|
8
8
  object.nested_form.form_iri
9
9
  end
10
+ has_one :target_class, predicate: Vocab.sh.targetClass
10
11
  end
11
12
  end
12
13
  end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ class Form
5
+ class Field
6
+ class FileInputSerializer < FieldSerializer
7
+ attribute :max_size, predicate: Vocab.form[:maxFileSize]
8
+ end
9
+ end
10
+ end
11
+ end
@@ -5,7 +5,9 @@ module LinkedRails
5
5
  class FieldSerializer < LinkedRails.serializer_parent_class
6
6
  attribute :name, predicate: Vocab.schema.name
7
7
  attribute :description, predicate: Vocab.schema.text
8
- attribute :helper_text, predicate: Vocab.ontola[:helperText]
8
+ attribute :helper_text, predicate: Vocab.form[:helperText]
9
+ attribute :start_adornment, predicate: Vocab.form[:startAdornment]
10
+ attribute :placeholder, predicate: Vocab.form[:placeholder]
9
11
  attribute :default_value, predicate: Vocab.form[:defaultValue]
10
12
 
11
13
  attribute :datatype, predicate: Vocab.sh.datatype
@@ -8,7 +8,7 @@ module LinkedRails
8
8
  attribute :collapsible, predicate: Vocab.form[:collapsible]
9
9
  attribute :hidden, predicate: Vocab.form[:hidden]
10
10
 
11
- has_many :fields, predicate: Vocab.form[:fields], sequence: true, polymorphic: true
11
+ has_many :fields, predicate: Vocab.form[:fields], sequence: true
12
12
  end
13
13
  end
14
14
  end
@@ -7,7 +7,7 @@ module LinkedRails
7
7
  attribute :description, predicate: Vocab.schema.text
8
8
 
9
9
  has_many :groups, predicate: Vocab.form[:groups], sequence: true, serializer: Form::GroupSerializer
10
- has_one :footer_group, predicate: Vocab.form[:footerGroup], serializer: Form::GroupSerializer
10
+ has_one :footer_group!, predicate: Vocab.form[:footerGroup], serializer: Form::GroupSerializer
11
11
  end
12
12
  end
13
13
  end
@@ -13,15 +13,15 @@ module LinkedRails
13
13
  attribute :image, predicate: Vocab.schema.image do |object|
14
14
  serialize_image(object.image)
15
15
  end
16
- has_one :action, predicate: Vocab.ontola[:action], polymorphic: true do |object|
16
+ has_one :action, predicate: Vocab.ontola[:action] do |object|
17
17
  object.action unless object.action.is_a?(RDF::Resource)
18
18
  end
19
19
  has_one :menu_sequence,
20
20
  predicate: Vocab.ontola[:menuItems],
21
21
  if: ->(o, p) { menus_present?(o, p) },
22
22
  polymorphic: true
23
- has_one :parent, predicate: Vocab.ontola[:parentMenu], if: ->(o, p) { parent_menu?(o, p) }, polymorphic: true
24
- has_one :resource, predicate: Vocab.schema.isPartOf, polymorphic: true
23
+ has_one :parent, predicate: Vocab.ontola[:parentMenu], if: ->(o, p) { parent_menu?(o, p) }
24
+ has_one :resource, predicate: Vocab.schema.isPartOf
25
25
 
26
26
  def self.parent_menu?(object, _params)
27
27
  object.parent.is_a?(LinkedRails.menus_item_class)
@@ -5,7 +5,7 @@ module LinkedRails
5
5
  class ListSerializer < LinkedRails.serializer_parent_class
6
6
  include LinkedRails::Serializer
7
7
 
8
- has_many :menus, predicate: Vocab.ontola[:menus], polymorphic: true do |object|
8
+ has_many :menus, predicate: Vocab.ontola[:menus] do |object|
9
9
  object.menus&.compact
10
10
  end
11
11
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module LinkedRails
4
4
  class OntologySerializer < LinkedRails.serializer_parent_class
5
- has_many :classes
6
- has_many :properties
5
+ has_many :classes, serializer: LinkedRails::Ontology::ClassSerializer
6
+ has_many :properties, serializer: LinkedRails::Ontology::PropertySerializer
7
7
  end
8
8
  end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ class PropertyQuerySerializer < SHACL::PropertyShapeSerializer
5
+ attribute :force_render, predicate: Vocab.ll[:forceRender]
6
+ end
7
+ end
@@ -4,11 +4,8 @@ module LinkedRails
4
4
  class SequenceSerializer < LinkedRails.serializer_parent_class
5
5
  include LinkedRails::Serializer
6
6
 
7
- statements :sequence
8
- has_many :members, polymorphic: true
9
-
10
- def self.sequence(object, _params)
11
- object.sequence
7
+ has_many :members, predicate: ->(relationship, index) do
8
+ RDF["_#{index}"]
12
9
  end
13
10
  end
14
11
  end
@@ -6,7 +6,7 @@ module LinkedRails
6
6
  attribute :closed, predicate: Vocab.sh.closed
7
7
  attribute :ignored_properties, predicate: Vocab.sh.ignoredProperties
8
8
  attribute :sparql, predicate: Vocab.sh.sparql
9
- has_many :property, predicate: Vocab.sh.property, polymorphic: true
9
+ has_many :property, predicate: Vocab.sh.property
10
10
  end
11
11
  end
12
12
  end
@@ -32,7 +32,7 @@ module LinkedRails
32
32
  attribute :qualified_min_count, predicate: Vocab.sh.qualifiedMinCount
33
33
  attribute :qualified_value_shape, predicate: Vocab.sh.qualifiedValueShape
34
34
 
35
- has_many :path, predicate: Vocab.sh.path, sequence: true, polymorphic: true
35
+ has_many :path, predicate: Vocab.sh.path, sequence: true
36
36
  end
37
37
  end
38
38
  end
@@ -13,11 +13,11 @@ module LinkedRails
13
13
  attribute :target_node, predicate: Vocab.sh.targetNode
14
14
  attribute :target_objects_of, predicate: Vocab.sh.targetObjectsOf
15
15
  attribute :target_subjects_of, predicate: Vocab.sh.targetSubjectsOf
16
- has_one :sh_not, predicate: Vocab.sh.not, polymorphic: true
17
- has_many :and, predicate: Vocab.sh.and, polymorphic: true
18
- has_many :or, predicate: Vocab.sh.or, polymorphic: true
19
- has_many :xone, predicate: Vocab.sh.xone, polymorphic: true
20
- has_many :nested_shapes, polymorphic: true do |object|
16
+ has_one :sh_not, predicate: Vocab.sh.not
17
+ has_many :and, predicate: Vocab.sh.and
18
+ has_many :or, predicate: Vocab.sh.or
19
+ has_many :xone, predicate: Vocab.sh.xone
20
+ has_many :nested_shapes do |object|
21
21
  [object.and, object.or, object.sh_not, object.xone].flatten.compact
22
22
  end
23
23
  end
@@ -2,9 +2,9 @@
2
2
 
3
3
  module LinkedRails
4
4
  class WebPageSerializer < CreativeWorkSerializer
5
- has_one :cover_photo, predicate: Vocab.ontola[:coverPhoto], polymorphic: true
6
- has_one :widget_sequence, predicate: Vocab.ontola[:widgets], polymorphic: true
7
- has_many :includes, polymorphic: true
5
+ has_one :cover_photo, predicate: Vocab.ontola[:coverPhoto]
6
+ has_one :widget_sequence, predicate: Vocab.ontola[:widgets]
7
+ has_many :includes
8
8
  attribute :hide_header, predicate: Vocab.ontola[:hideHeader]
9
9
  end
10
10
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module LinkedRails
4
4
  class WebSiteSerializer < CreativeWorkSerializer
5
- has_one :homepage, predicate: Vocab.foaf.homepage, polymorphic: true
5
+ has_one :homepage, predicate: Vocab.foaf.homepage
6
6
  attribute :image, predicate: Vocab.schema.image do |object|
7
7
  serialize_image(object.image)
8
8
  end
@@ -6,9 +6,9 @@ module LinkedRails
6
6
 
7
7
  attribute :size, predicate: Vocab.ontola[:widgetSize]
8
8
  attribute :topology, predicate: Vocab.ontola[:topology]
9
- has_one :resource_sequence, predicate: Vocab.ontola[:widgetResource], polymorphic: true
10
- has_one :parent, predicate: Vocab.schema.isPartOf, polymorphic: true
11
- has_many :property_shapes, polymorphic: true do |object|
9
+ has_one :parent, predicate: Vocab.schema.isPartOf
10
+ has_many :resource_sequence, predicate: Vocab.ontola[:widgetResource], sequence: true
11
+ has_many :property_shapes do |object|
12
12
  object.property_shapes.values
13
13
  end
14
14
  end
@@ -12,7 +12,6 @@ module LinkedRails
12
12
  def install # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
13
13
  template 'vocab.rb', 'lib/vocab.rb'
14
14
  template 'initializer.rb', 'config/initializers/linked_rails.rb'
15
- template 'application_action_list.rb', 'app/actions/application_action_list.rb'
16
15
  template 'application_form.rb', 'app/forms/application_form.rb'
17
16
  template 'application_menu_list.rb', 'app/menus/application_menu_list.rb'
18
17
  template 'application_policy.rb', 'app/policies/application_policy.rb'
@@ -22,9 +21,12 @@ module LinkedRails
22
21
  template 'rdf_serializers_initializer.rb', 'config/initializers/rdf_serializers.rb'
23
22
  template 'locales.yml', 'config/locales/linked_rails.en.yml'
24
23
  template 'vocab.yml', 'config/locales/vocab.en.yml'
24
+ route 'find_tenant_route'
25
25
  route 'use_linked_rails'
26
26
  application 'config.middleware.use LinkedRails::Middleware::LinkedDataParams'
27
27
  application 'config.jwt_encryption_method = :hs512'
28
+ gsub_file('config/environments/development.rb', 'config.eager_load = false', 'config.eager_load = true')
29
+ gsub_file('config/environments/development.rb', 'config.cache_classes = false', 'config.cache_classes = true')
28
30
  inject_includes
29
31
 
30
32
  readme 'README'
@@ -37,17 +39,12 @@ module LinkedRails
37
39
  inject_model_include
38
40
  end
39
41
 
40
- def inject_controller_include# rubocop:disable Metrics/MethodLength
42
+ def inject_controller_include
41
43
  sentinel = /class ApplicationController < ActionController::API\n/m
42
44
  in_root do
43
45
  inject_into_file(
44
46
  'app/controllers/application_controller.rb',
45
- optimize_indentation(
46
- "include ActionController::MimeResponds\n"\
47
- "include ActiveResponse::Controller\n"\
48
- 'include LinkedRails::Controller',
49
- 2
50
- ),
47
+ optimize_indentation('include LinkedRails::Controller', 2),
51
48
  after: sentinel
52
49
  )
53
50
  end
@@ -2,4 +2,6 @@ Add the following to config/development.rb
2
2
  config.hosts = []
3
3
  config.hosts << 'localhost'
4
4
  config.hosts << '.svc.cluster.local'
5
+ config.hosts << [YOUR_LOCAL_HOSTNAME]
5
6
 
7
+ And update the host in config/initializers/linked_rails.rb
@@ -8,29 +8,58 @@ class AppMenuList < ApplicationMenuList
8
8
  menus: -> { user_menu_items }
9
9
 
10
10
  def iri_template
11
- @iri_template ||= URITemplate.new('/menus{#fragment}')
11
+ @iri_template ||= LinkedRails::URITemplate.new('/menus{#fragment}')
12
12
  end
13
13
 
14
14
  private
15
15
 
16
- def navigation_links
17
- items = []
18
- items << menu_item(
16
+ def home_menu_item
17
+ menu_item(
19
18
  :home,
20
19
  label: I18n.t('menus.home'),
21
20
  href: LinkedRails.iri,
22
21
  image: 'fa-home'
23
22
  )
24
- items
23
+ end
24
+
25
+ def navigation_links
26
+ [home_menu_item]
25
27
  end
26
28
 
27
29
  def user_menu_items
28
30
  return [] if user_context.guest?
29
31
 
30
- [user_menu_sign_out_item]
32
+ [
33
+ otp_menu_item,
34
+ sign_out_menu_item
35
+ ]
36
+ end
37
+
38
+ def otp_menu_item
39
+ if user_context.otp_active?
40
+ delete_otp_menu_item
41
+ else
42
+ add_otp_menu_item
43
+ end
44
+ end
45
+
46
+ def delete_otp_menu_item
47
+ menu_item(
48
+ :otp,
49
+ label: I18n.t('menus.delete_otp'),
50
+ href: LinkedRails.iri(path: 'u/otp_secret/delete')
51
+ )
52
+ end
53
+
54
+ def add_otp_menu_item
55
+ menu_item(
56
+ :otp,
57
+ label: I18n.t('menus.add_otp'),
58
+ href: LinkedRails.iri(path: 'u/otp_secret/new')
59
+ )
31
60
  end
32
61
 
33
- def user_menu_sign_out_item
62
+ def sign_out_menu_item
34
63
  menu_item(
35
64
  :signout,
36
65
  action: Vocab.libro['actions/logout'],
@@ -1,3 +1,42 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class ApplicationMenuList < LinkedRails::Menus::List; end
3
+ class ApplicationMenuList < LinkedRails::Menus::List
4
+ include LinkedRails::Helpers::OntolaActionsHelper
5
+
6
+ private
7
+
8
+ def copy_menu_item(url)
9
+ menu_item(
10
+ :copy,
11
+ action: ontola_copy_action(url),
12
+ item_type: 'copy',
13
+ image: 'fa-clipboard',
14
+ href: url
15
+ )
16
+ end
17
+
18
+ def delete_menu_item(resource)
19
+ iri = resource.iri.dup
20
+ iri.path += '/delete'
21
+
22
+ menu_item(
23
+ :destroy,
24
+ action: ontola_dialog_action(iri),
25
+ href: iri,
26
+ image: 'fa-close',
27
+ policy: :destroy?
28
+ )
29
+ end
30
+
31
+ def edit_menu_item(resource)
32
+ iri = resource.iri.dup
33
+ iri.path += '/edit'
34
+
35
+ menu_item(
36
+ :edit,
37
+ image: 'fa-edit',
38
+ href: iri,
39
+ policy: :update?
40
+ )
41
+ end
42
+ end
@@ -2,8 +2,7 @@
2
2
 
3
3
  require_relative '../../lib/vocab'
4
4
 
5
- LinkedRails.host = 'example.com'
5
+ LinkedRails.host = raise('Enter your host. Use an ENV var if you have multiple environments')
6
6
  LinkedRails.scheme = :https
7
- LinkedRails.app_vocab = Vocab.example
8
7
 
9
8
  LinkedRails::Renderers.register!
@@ -1,4 +1,16 @@
1
1
  en:
2
+ actions:
3
+ default:
4
+ create:
5
+ label: "New %{type}"
6
+ success: 'Created successfully'
7
+ destroy:
8
+ label: "Delete"
9
+ description: "Are you sure you want to delete this %{type}?"
10
+ success: 'Destroyed successfully'
11
+ update:
12
+ label: "Edit"
13
+ success: 'Updated successfully'
2
14
  linked_rails:
3
15
  status:
4
16
  400: "Error in request"
@@ -10,3 +22,5 @@ en:
10
22
  menus:
11
23
  home: "Home"
12
24
  sign_out: "Sign out"
25
+ add_otp: "Enable 2fa"
26
+ delete_otp: "Remove 2fa"
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RDF::Serializers.configure do |config|
4
- config.default_graph = Vocab.ll[:supplant]
4
+ config.default_graph = Vocab.ld[:supplant]
5
5
  end
@@ -2,4 +2,5 @@
2
2
 
3
3
  class Vocab < LinkedRails::Vocab
4
4
  register(:example, 'https://example.com/my_vocab#')
5
+ app_vocabulary :example
5
6
  end
@@ -1,10 +1,10 @@
1
1
  en:
2
2
  foaf:
3
3
  name:
4
- label: "Naam"
4
+ label: "Name"
5
5
  ontola:
6
6
  password:
7
- label: "Wachtwoord"
7
+ label: "Password"
8
8
  quickActions:
9
9
  label: "Actions"
10
10
  rdfv:
@@ -17,7 +17,6 @@ module LinkedRails
17
17
  end
18
18
 
19
19
  def copy_files # rubocop:disable Metrics/AbcSize
20
- template 'action_list.rb', File.join('app', 'actions', class_path, "#{file_name}_action_list.rb")
21
20
  template 'controller.rb', File.join('app', 'controllers', class_path, "#{plural_file_name}_controller.rb")
22
21
  template 'form.rb', File.join('app', 'forms', class_path, "#{file_name}_form.rb")
23
22
  template 'menu_list.rb', File.join('app', 'menus', class_path, "#{file_name}_menu_list.rb")
@@ -2,6 +2,10 @@
2
2
 
3
3
  <% module_namespacing do -%>
4
4
  class <%= controller_class_name %>Controller < ApplicationController
5
- active_response :show, :index
5
+ active_response :show, :index
6
+
7
+ has_collection_create_action
8
+ has_resource_update_action
9
+ has_resource_destroy_action
6
10
  end
7
11
  <% end -%>
@@ -2,5 +2,8 @@
2
2
 
3
3
  <% module_namespacing do -%>
4
4
  class <%= class_name %>Form < ApplicationForm
5
+ <% attributes.reject(&:reference?).each do |attribute| -%>
6
+ field :<%= attribute.name %>
7
+ <% end -%>
5
8
  end
6
9
  <% end -%>
@@ -2,5 +2,20 @@
2
2
 
3
3
  <% module_namespacing do -%>
4
4
  class <%= class_name %>MenuList < ApplicationMenuList
5
+ has_menu(
6
+ :actions,
7
+ image: 'fa-ellipsis-v',
8
+ menus: -> { action_menu_items }
9
+ )
10
+
11
+ private
12
+
13
+ def action_menu_items
14
+ [
15
+ edit_menu_item(resource),
16
+ delete_menu_item(resource),
17
+ copy_menu_item(resource.iri),
18
+ ]
19
+ end
5
20
  end
6
21
  <% end -%>