linked_rails 0.0.1

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 (207) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +674 -0
  3. data/README.md +65 -0
  4. data/Rakefile +34 -0
  5. data/app/controllers/linked_rails/actions/items_controller.rb +9 -0
  6. data/app/controllers/linked_rails/bulk_controller.rb +195 -0
  7. data/app/controllers/linked_rails/current_user_controller.rb +13 -0
  8. data/app/controllers/linked_rails/enum_values_controller.rb +49 -0
  9. data/app/controllers/linked_rails/forms_controller.rb +13 -0
  10. data/app/controllers/linked_rails/manifests_controller.rb +21 -0
  11. data/app/controllers/linked_rails/menus/items_controller.rb +9 -0
  12. data/app/controllers/linked_rails/menus/lists_controller.rb +9 -0
  13. data/app/controllers/linked_rails/not_found_controller.rb +15 -0
  14. data/app/controllers/linked_rails/ontologies_controller.rb +7 -0
  15. data/app/models/linked_rails/actions/default_actions/create.rb +60 -0
  16. data/app/models/linked_rails/actions/default_actions/destroy.rb +45 -0
  17. data/app/models/linked_rails/actions/default_actions/update.rb +50 -0
  18. data/app/models/linked_rails/actions/default_actions.rb +17 -0
  19. data/app/models/linked_rails/actions/item.rb +234 -0
  20. data/app/models/linked_rails/actions/list.rb +113 -0
  21. data/app/models/linked_rails/collection/filter.rb +16 -0
  22. data/app/models/linked_rails/collection/filter_field.rb +30 -0
  23. data/app/models/linked_rails/collection/filter_option.rb +17 -0
  24. data/app/models/linked_rails/collection/filterable.rb +92 -0
  25. data/app/models/linked_rails/collection/infinite_view.rb +98 -0
  26. data/app/models/linked_rails/collection/iri.rb +74 -0
  27. data/app/models/linked_rails/collection/iri_mapping.rb +33 -0
  28. data/app/models/linked_rails/collection/paginated_view.rb +41 -0
  29. data/app/models/linked_rails/collection/sortable.rb +60 -0
  30. data/app/models/linked_rails/collection/sorting.rb +72 -0
  31. data/app/models/linked_rails/collection/view.rb +101 -0
  32. data/app/models/linked_rails/collection.rb +220 -0
  33. data/app/models/linked_rails/condition.rb +7 -0
  34. data/app/models/linked_rails/creative_work.rb +21 -0
  35. data/app/models/linked_rails/current_user.rb +28 -0
  36. data/app/models/linked_rails/entry_point.rb +53 -0
  37. data/app/models/linked_rails/enum_value.rb +33 -0
  38. data/app/models/linked_rails/form/field/association_input.rb +23 -0
  39. data/app/models/linked_rails/form/field/checkbox_group.rb +10 -0
  40. data/app/models/linked_rails/form/field/checkbox_input.rb +10 -0
  41. data/app/models/linked_rails/form/field/color_input.rb +17 -0
  42. data/app/models/linked_rails/form/field/date_input.rb +10 -0
  43. data/app/models/linked_rails/form/field/date_time_input.rb +10 -0
  44. data/app/models/linked_rails/form/field/email_input.rb +10 -0
  45. data/app/models/linked_rails/form/field/file_input.rb +10 -0
  46. data/app/models/linked_rails/form/field/location_input.rb +11 -0
  47. data/app/models/linked_rails/form/field/markdown_input.rb +10 -0
  48. data/app/models/linked_rails/form/field/number_input.rb +10 -0
  49. data/app/models/linked_rails/form/field/password_input.rb +10 -0
  50. data/app/models/linked_rails/form/field/postal_range_input.rb +10 -0
  51. data/app/models/linked_rails/form/field/radio_group.rb +10 -0
  52. data/app/models/linked_rails/form/field/resource_field.rb +23 -0
  53. data/app/models/linked_rails/form/field/select_input.rb +11 -0
  54. data/app/models/linked_rails/form/field/slider_input.rb +10 -0
  55. data/app/models/linked_rails/form/field/text_area_input.rb +10 -0
  56. data/app/models/linked_rails/form/field/text_input.rb +10 -0
  57. data/app/models/linked_rails/form/field/toggle_button_group.rb +10 -0
  58. data/app/models/linked_rails/form/field.rb +117 -0
  59. data/app/models/linked_rails/form/field_factory.rb +219 -0
  60. data/app/models/linked_rails/form/group.rb +39 -0
  61. data/app/models/linked_rails/form/page.rb +31 -0
  62. data/app/models/linked_rails/form.rb +156 -0
  63. data/app/models/linked_rails/manifest.rb +102 -0
  64. data/app/models/linked_rails/media_object.rb +31 -0
  65. data/app/models/linked_rails/menus/item.rb +92 -0
  66. data/app/models/linked_rails/menus/list.rb +138 -0
  67. data/app/models/linked_rails/ontology/base.rb +50 -0
  68. data/app/models/linked_rails/ontology/class.rb +43 -0
  69. data/app/models/linked_rails/ontology/property.rb +19 -0
  70. data/app/models/linked_rails/ontology.rb +34 -0
  71. data/app/models/linked_rails/property_query.rb +11 -0
  72. data/app/models/linked_rails/resource.rb +17 -0
  73. data/app/models/linked_rails/sequence.rb +64 -0
  74. data/app/models/linked_rails/shacl/node_shape.rb +21 -0
  75. data/app/models/linked_rails/shacl/property_shape.rb +53 -0
  76. data/app/models/linked_rails/shacl/shape.rb +33 -0
  77. data/app/models/linked_rails/web_page.rb +22 -0
  78. data/app/models/linked_rails/web_site.rb +17 -0
  79. data/app/models/linked_rails/widget.rb +55 -0
  80. data/app/policies/linked_rails/actions/item_policy.rb +11 -0
  81. data/app/policies/linked_rails/actions/list_policy.rb +11 -0
  82. data/app/policies/linked_rails/collection/view_policy.rb +13 -0
  83. data/app/policies/linked_rails/collection_policy.rb +41 -0
  84. data/app/policies/linked_rails/enum_value_policy.rb +32 -0
  85. data/app/policies/linked_rails/menus/item_policy.rb +11 -0
  86. data/app/policies/linked_rails/menus/list_policy.rb +11 -0
  87. data/app/policies/linked_rails/sequence_policy.rb +9 -0
  88. data/app/serializers/linked_rails/actions/item_serializer.rb +28 -0
  89. data/app/serializers/linked_rails/collection/filter_field_serializer.rb +12 -0
  90. data/app/serializers/linked_rails/collection/filter_option_serializer.rb +12 -0
  91. data/app/serializers/linked_rails/collection/filter_serializer.rb +13 -0
  92. data/app/serializers/linked_rails/collection/sorting_serializer.rb +13 -0
  93. data/app/serializers/linked_rails/collection/view_serializer.rb +22 -0
  94. data/app/serializers/linked_rails/collection_serializer.rb +44 -0
  95. data/app/serializers/linked_rails/condition_serializer.rb +9 -0
  96. data/app/serializers/linked_rails/creative_work_serializer.rb +10 -0
  97. data/app/serializers/linked_rails/current_user_serializer.rb +7 -0
  98. data/app/serializers/linked_rails/entry_point_serializer.rb +20 -0
  99. data/app/serializers/linked_rails/enum_value_serializer.rb +12 -0
  100. data/app/serializers/linked_rails/form/field/association_input_serializer.rb +13 -0
  101. data/app/serializers/linked_rails/form/field/resource_field_serializer.rb +11 -0
  102. data/app/serializers/linked_rails/form/field/select_input_serializer.rb +11 -0
  103. data/app/serializers/linked_rails/form/field_serializer.rb +39 -0
  104. data/app/serializers/linked_rails/form/group_serializer.rb +14 -0
  105. data/app/serializers/linked_rails/form/page_serializer.rb +13 -0
  106. data/app/serializers/linked_rails/form_serializer.rb +9 -0
  107. data/app/serializers/linked_rails/media_object_serializer.rb +17 -0
  108. data/app/serializers/linked_rails/menus/item_serializer.rb +35 -0
  109. data/app/serializers/linked_rails/menus/list_serializer.rb +13 -0
  110. data/app/serializers/linked_rails/ontology/class_serializer.rb +19 -0
  111. data/app/serializers/linked_rails/ontology/property_serializer.rb +16 -0
  112. data/app/serializers/linked_rails/ontology_serializer.rb +8 -0
  113. data/app/serializers/linked_rails/rdf_error_serializer.rb +8 -0
  114. data/app/serializers/linked_rails/sequence_serializer.rb +14 -0
  115. data/app/serializers/linked_rails/shacl/node_shape_serializer.rb +12 -0
  116. data/app/serializers/linked_rails/shacl/property_shape_serializer.rb +38 -0
  117. data/app/serializers/linked_rails/shacl/shape_serializer.rb +25 -0
  118. data/app/serializers/linked_rails/web_page_serializer.rb +10 -0
  119. data/app/serializers/linked_rails/web_site_serializer.rb +11 -0
  120. data/app/serializers/linked_rails/widget_serializer.rb +15 -0
  121. data/config/initializers/inflections.rb +5 -0
  122. data/lib/generators/linked_rails/install/install_generator.rb +65 -0
  123. data/lib/generators/linked_rails/install/templates/app_menu_list.rb +41 -0
  124. data/lib/generators/linked_rails/install/templates/application_action_list.rb +3 -0
  125. data/lib/generators/linked_rails/install/templates/application_form.rb +3 -0
  126. data/lib/generators/linked_rails/install/templates/application_menu_list.rb +3 -0
  127. data/lib/generators/linked_rails/install/templates/application_policy.rb +18 -0
  128. data/lib/generators/linked_rails/install/templates/application_serializer.rb +5 -0
  129. data/lib/generators/linked_rails/install/templates/initializer.rb +9 -0
  130. data/lib/generators/linked_rails/install/templates/locales.yml +12 -0
  131. data/lib/generators/linked_rails/install/templates/rdf_responder.rb +5 -0
  132. data/lib/generators/linked_rails/install/templates/rdf_serializers_initializer.rb +5 -0
  133. data/lib/generators/linked_rails/install/templates/vocab.rb +5 -0
  134. data/lib/generators/linked_rails/install/templates/vocab.yml +26 -0
  135. data/lib/generators/linked_rails/model/model_generator.rb +58 -0
  136. data/lib/generators/linked_rails/model/templates/action_list.rb.tt +6 -0
  137. data/lib/generators/linked_rails/model/templates/controller.rb.tt +7 -0
  138. data/lib/generators/linked_rails/model/templates/create_table_migration.rb.tt +24 -0
  139. data/lib/generators/linked_rails/model/templates/form.rb.tt +6 -0
  140. data/lib/generators/linked_rails/model/templates/menu_list.rb.tt +6 -0
  141. data/lib/generators/linked_rails/model/templates/model.rb.tt +15 -0
  142. data/lib/generators/linked_rails/model/templates/module.rb.tt +7 -0
  143. data/lib/generators/linked_rails/model/templates/policy.rb.tt +6 -0
  144. data/lib/generators/linked_rails/model/templates/serializer.rb.tt +9 -0
  145. data/lib/linked_rails/active_response/controller/collections.rb +43 -0
  146. data/lib/linked_rails/active_response/controller/crud_defaults.rb +92 -0
  147. data/lib/linked_rails/active_response/controller/params.rb +51 -0
  148. data/lib/linked_rails/active_response/controller.rb +37 -0
  149. data/lib/linked_rails/active_response/responders/rdf.rb +158 -0
  150. data/lib/linked_rails/cache.rb +35 -0
  151. data/lib/linked_rails/callable_variable.rb +25 -0
  152. data/lib/linked_rails/constraints/whitelist.rb +36 -0
  153. data/lib/linked_rails/controller/authorization.rb +15 -0
  154. data/lib/linked_rails/controller/error_handling.rb +76 -0
  155. data/lib/linked_rails/controller.rb +43 -0
  156. data/lib/linked_rails/engine.rb +7 -0
  157. data/lib/linked_rails/enhanceable.rb +21 -0
  158. data/lib/linked_rails/enhancements/actionable/model.rb +71 -0
  159. data/lib/linked_rails/enhancements/actionable/serializer.rb +25 -0
  160. data/lib/linked_rails/enhancements/creatable/action.rb +15 -0
  161. data/lib/linked_rails/enhancements/creatable/controller.rb +15 -0
  162. data/lib/linked_rails/enhancements/destroyable/action.rb +15 -0
  163. data/lib/linked_rails/enhancements/destroyable/controller.rb +15 -0
  164. data/lib/linked_rails/enhancements/destroyable/routing.rb +19 -0
  165. data/lib/linked_rails/enhancements/indexable/model.rb +10 -0
  166. data/lib/linked_rails/enhancements/menuable/model.rb +36 -0
  167. data/lib/linked_rails/enhancements/menuable/serializer.rb +33 -0
  168. data/lib/linked_rails/enhancements/route_concerns.rb +56 -0
  169. data/lib/linked_rails/enhancements/singularable/controller.rb +43 -0
  170. data/lib/linked_rails/enhancements/singularable/model.rb +47 -0
  171. data/lib/linked_rails/enhancements/singularable/serializer.rb +28 -0
  172. data/lib/linked_rails/enhancements/tableable/model.rb +28 -0
  173. data/lib/linked_rails/enhancements/updatable/action.rb +15 -0
  174. data/lib/linked_rails/enhancements/updatable/controller.rb +15 -0
  175. data/lib/linked_rails/enhancements/updatable/routing.rb +20 -0
  176. data/lib/linked_rails/enhancements/updatable/serializer.rb +17 -0
  177. data/lib/linked_rails/enhancements.rb +22 -0
  178. data/lib/linked_rails/helpers/delta_helper.rb +86 -0
  179. data/lib/linked_rails/helpers/ontola_actions_helper.rb +32 -0
  180. data/lib/linked_rails/helpers/resource_helper.rb +70 -0
  181. data/lib/linked_rails/iri_mapper.rb +125 -0
  182. data/lib/linked_rails/middleware/linked_data_params.rb +224 -0
  183. data/lib/linked_rails/model/collections.rb +82 -0
  184. data/lib/linked_rails/model/dirty.rb +82 -0
  185. data/lib/linked_rails/model/enhancements.rb +61 -0
  186. data/lib/linked_rails/model/filtering.rb +89 -0
  187. data/lib/linked_rails/model/indexable.rb +51 -0
  188. data/lib/linked_rails/model/iri.rb +121 -0
  189. data/lib/linked_rails/model/iri_mapping.rb +69 -0
  190. data/lib/linked_rails/model/serialization.rb +88 -0
  191. data/lib/linked_rails/model/sorting.rb +20 -0
  192. data/lib/linked_rails/model.rb +68 -0
  193. data/lib/linked_rails/params_parser.rb +93 -0
  194. data/lib/linked_rails/policy/attribute_conditions.rb +53 -0
  195. data/lib/linked_rails/policy.rb +189 -0
  196. data/lib/linked_rails/rdf_error.rb +36 -0
  197. data/lib/linked_rails/renderers.rb +46 -0
  198. data/lib/linked_rails/routes.rb +108 -0
  199. data/lib/linked_rails/serializer.rb +137 -0
  200. data/lib/linked_rails/translate.rb +176 -0
  201. data/lib/linked_rails/version.rb +5 -0
  202. data/lib/linked_rails/vocab.rb +81 -0
  203. data/lib/linked_rails.rb +86 -0
  204. data/lib/nill_class_renderer.rb +3 -0
  205. data/lib/rails/welcome_controller.rb +45 -0
  206. data/lib/tasks/linked_rails_tasks.rake +6 -0
  207. metadata +416 -0
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ class EnumValuePolicy < LinkedRails.policy_parent_class
5
+ class Scope < Scope
6
+ def initialize(context, scope)
7
+ @context = context
8
+ @scope = scope
9
+ end
10
+
11
+ def resolve
12
+ return scope if scope.blank? || !parent_policy.respond_to?(filter_method)
13
+
14
+ scope.select { |option| valid_options.include?(option.key) }
15
+ end
16
+
17
+ private
18
+
19
+ def filter_method
20
+ "valid_#{scope.first.attr}_options"
21
+ end
22
+
23
+ def parent_policy
24
+ @parent_policy ||= Pundit::PolicyFinder.new(scope.first.klass).policy
25
+ end
26
+
27
+ def valid_options
28
+ @valid_options ||= parent_policy.send(filter_method)
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ module Menus
5
+ class ItemPolicy < LinkedRails.policy_parent_class
6
+ def show?
7
+ parent_policy.blank? ? true : parent_policy.show?
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ module Menus
5
+ class ListPolicy < LinkedRails.policy_parent_class
6
+ def show?
7
+ parent_policy.blank? ? true : parent_policy.show?
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ class SequencePolicy < LinkedRails.policy_parent_class
5
+ def show?
6
+ parent_policy.blank? ? true : parent_policy.show?
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ module Actions
5
+ class ItemSerializer < LinkedRails.serializer_parent_class
6
+ include LinkedRails::Serializer
7
+
8
+ attribute :label, predicate: Vocab.schema.name
9
+ attribute :description, predicate: Vocab.schema.text
10
+ attribute :result, predicate: Vocab.schema.result do |object|
11
+ object.result&.iri
12
+ end
13
+ attribute :action_status, predicate: Vocab.schema.actionStatus
14
+ attribute :favorite, predicate: Vocab.ontola[:favoriteAction]
15
+ attribute :url, predicate: Vocab.schema.url do |object|
16
+ object.target[:id] if object.target.is_a?(Hash)
17
+ end
18
+ attribute :error, predicate: Vocab.schema.error
19
+
20
+ has_one :parent, predicate: Vocab.schema.isPartOf, polymorphic: true do |object|
21
+ object.parent unless object.parent.try(:anonymous_iri?)
22
+ 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
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ class Collection
5
+ class FilterFieldSerializer < LinkedRails.serializer_parent_class
6
+ attribute :key, predicate: Vocab.ontola[:filterKey]
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
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ class Collection
5
+ class FilterOptionSerializer < LinkedRails.serializer_parent_class
6
+ attribute :count, predicate: Vocab.ontola[:filterCount]
7
+ attribute :key, predicate: Vocab.ontola[:filterKey]
8
+ attribute :value, predicate: Vocab.ontola[:filterValue]
9
+ has_one :collection, predicate: Vocab.schema[:isPartOf], polymorphic: true
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ class Collection
5
+ class FilterSerializer < LinkedRails.serializer_parent_class
6
+ include LinkedRails::Serializer
7
+
8
+ attribute :key, predicate: Vocab.ontola[:filterKey]
9
+ attribute :value, predicate: Vocab.ontola[:filterValue]
10
+ has_one :collection, predicate: Vocab.schema.isPartOf, polymorphic: true
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ class Collection
5
+ class SortingSerializer < LinkedRails.serializer_parent_class
6
+ include LinkedRails::Serializer
7
+
8
+ attribute :key, predicate: Vocab.ontola[:sortKey]
9
+ attribute :direction, predicate: Vocab.ontola[:sortDirection]
10
+ has_one :collection, predicate: Vocab.schema.isPartOf, polymorphic: true
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ class Collection
5
+ class ViewSerializer < LinkedRails.serializer_parent_class
6
+ include LinkedRails::Serializer
7
+
8
+ attribute :count, predicate: Vocab.as.totalItems
9
+ attribute :display, predicate: Vocab.ontola[:collectionDisplay] do |object|
10
+ Vocab.ontola["collectionDisplay/#{object.display || :default}"]
11
+ end
12
+
13
+ %i[next prev].each do |attr|
14
+ attribute attr, predicate: Vocab.as[attr]
15
+ end
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
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ class CollectionSerializer < LinkedRails.serializer_parent_class
5
+ include LinkedRails::Serializer
6
+
7
+ attribute :base_url, predicate: Vocab.schema.url do |object|
8
+ object.iri(display: nil, page_size: nil)
9
+ end
10
+ attribute :title, predicate: Vocab.as.name
11
+ attribute :total_count, predicate: Vocab.as.totalItems do |object|
12
+ object.total_count if object.type == :paginated
13
+ end
14
+ attribute :iri_template, predicate: Vocab.ontola[:iriTemplate]
15
+ attribute :iri_template_opts, predicate: Vocab.ontola[:iriTemplateOpts]
16
+ attribute :default_type, predicate: Vocab.ontola[:defaultType], &:type
17
+ attribute :display, predicate: Vocab.ontola[:collectionDisplay] do |object|
18
+ Vocab.ontola["collectionDisplay/#{object.display || :default}"]
19
+ end
20
+ attribute :columns, predicate: Vocab.ontola[:columns]
21
+ attribute :collection_type, predicate: Vocab.ontola[:collectionType] do |object|
22
+ Vocab.ontola["collectionType/#{object.type || :paginated}"]
23
+ end
24
+ attribute :grid_max_columns, predicate: Vocab.ontola['grid/maxColumns']
25
+ attribute :sort_options, predicate: Vocab.ontola[:sortOptions]
26
+ attribute :view, predicate: Vocab.ll[:view]
27
+
28
+ has_one :unfiltered_collection, predicate: Vocab.ontola[:baseCollection], polymorphic: true
29
+ has_one :part_of, predicate: Vocab.schema.isPartOf, polymorphic: true do |object|
30
+ object.part_of unless object.part_of.try(:anonymous_iri?)
31
+ end
32
+ has_one :default_view, predicate: Vocab.ontola[:pages], polymorphic: true
33
+
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|
36
+ object.filters.reject(&:default_filter)
37
+ end
38
+ has_many :sortings, polymorphic: true, predicate: Vocab.ontola[:collectionSorting]
39
+
40
+ %i[first last].each do |attr|
41
+ attribute attr, predicate: Vocab.as[attr]
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
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
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ class CreativeWorkSerializer < LinkedRails.serializer_parent_class
5
+ attribute :description, predicate: Vocab.schema.description
6
+ attribute :name, predicate: Vocab.schema.name
7
+ attribute :text, predicate: Vocab.schema.text
8
+ attribute :url, predicate: Vocab.schema.url
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ class CurrentUserSerializer < LinkedRails.serializer_parent_class
5
+ attribute :actor_type, predicate: Vocab.ontola[:actorType]
6
+ end
7
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ class EntryPointSerializer < LinkedRails.serializer_parent_class
5
+ include LinkedRails::Serializer
6
+
7
+ attribute :label, predicate: Vocab.schema.name
8
+ attribute :description, predicate: Vocab.schema.text
9
+ attribute :url, predicate: Vocab.schema.url
10
+ attribute :http_method, key: :method, predicate: Vocab.schema.httpMethod do |object|
11
+ object.http_method.upcase
12
+ end
13
+
14
+ has_one :parent, predicate: Vocab.schema.isPartOf, polymorphic: true
15
+ attribute :action_body, predicate: Vocab.ll[:actionBody], polymorphic: true
16
+ attribute :image, predicate: Vocab.schema.image do |object|
17
+ serialize_image(object.image)
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ class EnumValueSerializer < LinkedRails.serializer_parent_class
5
+ include LinkedRails::Serializer
6
+
7
+ attribute :label, predicate: Vocab.schema.name
8
+ attribute :close_match, predicate: Vocab.skos.closeMatch
9
+ attribute :exact_match, predicate: Vocab.skos.exactMatch
10
+ attribute :group_by, predicate: Vocab.ontola[:groupBy]
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ class Form
5
+ class Field
6
+ class AssociationInputSerializer < FieldSerializer
7
+ attribute :nested_form, predicate: Vocab.form[:form] do |object|
8
+ object.nested_form.form_iri
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ class Form
5
+ class Field
6
+ class ResourceFieldSerializer < FieldSerializer
7
+ attribute :url, predicate: Vocab.schema.url
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ class Form
5
+ class Field
6
+ class SelectInputSerializer < FieldSerializer
7
+ attribute :grouped, predicate: Vocab.form[:groupedOptions]
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ class Form
5
+ class FieldSerializer < LinkedRails.serializer_parent_class
6
+ attribute :name, predicate: Vocab.schema.name
7
+ attribute :description, predicate: Vocab.schema.text
8
+ attribute :helper_text, predicate: Vocab.ontola[:helperText]
9
+ attribute :default_value, predicate: Vocab.form[:defaultValue]
10
+
11
+ attribute :datatype, predicate: Vocab.sh.datatype
12
+ attribute :max_count, predicate: Vocab.sh.maxCount
13
+ attribute :max_count_prop, predicate: Vocab.ontola[:maxCount]
14
+ attribute :min_count, predicate: Vocab.sh.minCount
15
+ attribute :min_count_prop, predicate: Vocab.ontola[:minCount]
16
+ attribute :max_inclusive, predicate: Vocab.sh.maxInclusive
17
+ attribute :max_inclusive_prop, predicate: Vocab.ontola[:maxInclusive]
18
+ attribute :min_inclusive, predicate: Vocab.sh.minInclusive
19
+ attribute :min_inclusive_prop, predicate: Vocab.ontola[:minInclusive]
20
+ attribute :max_length, predicate: Vocab.sh.maxLength
21
+ attribute :max_length_prop, predicate: Vocab.ontola[:maxLength]
22
+ attribute :min_length, predicate: Vocab.sh.minLength
23
+ attribute :min_length_prop, predicate: Vocab.ontola[:minLength]
24
+ attribute :pattern, predicate: Vocab.sh.pattern do |object|
25
+ object.pattern.is_a?(Regexp) ? object.pattern.source : object.pattern
26
+ end
27
+ attribute :sh_in, predicate: Vocab.sh.in do |object|
28
+ options = object.sh_in
29
+ if [Array, ActiveRecord::Relation].any? { |klass| options.is_a?(klass) }
30
+ RDF::List[*options.map { |option| option.try(:iri) || option }]
31
+ else
32
+ options
33
+ end
34
+ end
35
+ attribute :sh_in_prop, predicate: Vocab.ontola[:shIn]
36
+ attribute :path, predicate: Vocab.sh.path
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ class Form
5
+ class GroupSerializer < LinkedRails.serializer_parent_class
6
+ attribute :label, predicate: Vocab.schema.name
7
+ attribute :description, predicate: Vocab.schema.text
8
+ attribute :collapsible, predicate: Vocab.form[:collapsible]
9
+ attribute :hidden, predicate: Vocab.form[:hidden]
10
+
11
+ has_many :fields, predicate: Vocab.form[:fields], sequence: true, polymorphic: true
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ class Form
5
+ class PageSerializer < LinkedRails.serializer_parent_class
6
+ attribute :label, predicate: Vocab.schema.name
7
+ attribute :description, predicate: Vocab.schema.text
8
+
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
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ class FormSerializer < LinkedRails.serializer_parent_class
5
+ include LinkedRails::Serializer
6
+
7
+ has_many :pages, predicate: Vocab.form[:pages], sequence: true, serializer: Form::PageSerializer
8
+ end
9
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ class MediaObjectSerializer < LinkedRails.serializer_parent_class
5
+ include LinkedRails::Serializer
6
+ attribute :content_url, predicate: Vocab.schema.contentUrl
7
+ attribute :content_type, predicate: Vocab.schema.encodingFormat, datatype: Vocab.xsd.string
8
+ attribute :description, predicate: Vocab.schema.caption
9
+ attribute :embed_url, predicate: Vocab.schema.embedUrl
10
+ attribute :filename, predicate: Vocab.dbo.filename
11
+ attribute :thumbnail_url, predicate: Vocab.schema.thumbnail
12
+ attribute :uploaded_at, predicate: Vocab.schema.uploadDate
13
+ attribute :url, predicate: Vocab.schema.url
14
+ attribute :cover_url, predicate: Vocab.ontola[:imgUrl1500x2000]
15
+ attribute :position_y, predicate: Vocab.ontola[:imagePositionY]
16
+ end
17
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ module Menus
5
+ class ItemSerializer < LinkedRails.serializer_parent_class
6
+ include LinkedRails::Serializer
7
+
8
+ attribute :label, predicate: Vocab.schema.name
9
+ attribute :href, predicate: Vocab.ontola[:href]
10
+ attribute :action, predicate: Vocab.ontola[:action] do |object|
11
+ object.action if object.action.is_a?(RDF::Resource)
12
+ end
13
+ attribute :image, predicate: Vocab.schema.image do |object|
14
+ serialize_image(object.image)
15
+ end
16
+ has_one :action, predicate: Vocab.ontola[:action], polymorphic: true do |object|
17
+ object.action unless object.action.is_a?(RDF::Resource)
18
+ end
19
+ has_one :menu_sequence,
20
+ predicate: Vocab.ontola[:menuItems],
21
+ if: ->(o, p) { menus_present?(o, p) },
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
25
+
26
+ def self.parent_menu?(object, _params)
27
+ object.parent.is_a?(LinkedRails.menus_item_class)
28
+ end
29
+
30
+ def self.menus_present?(object, _params)
31
+ object.instance_variables.include?(:@menus)
32
+ end
33
+ end
34
+ end
35
+ end