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,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ module Menus
5
+ class ListSerializer < LinkedRails.serializer_parent_class
6
+ include LinkedRails::Serializer
7
+
8
+ has_many :menus, predicate: Vocab.ontola[:menus], polymorphic: true do |object|
9
+ object.menus&.compact
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ class Ontology
5
+ class ClassSerializer < LinkedRails.serializer_parent_class
6
+ attribute :description, predicate: Vocab.schema.description
7
+ attribute :input_select_property, predicate: Vocab.ontola['forms/inputs/select/displayProp']
8
+ attribute :label, predicate: Vocab.rdfs.label
9
+ attribute :plural_label, predicate: Vocab.ontola[:pluralLabel]
10
+ attribute :image, predicate: Vocab.schema.image
11
+ attribute :parent_class, predicate: Vocab.rdfs.subClassOf
12
+ statements :data
13
+
14
+ def self.data(object, _params)
15
+ object.data
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ class Ontology
5
+ class PropertySerializer < LinkedRails.serializer_parent_class
6
+ attribute :description, predicate: Vocab.schema.description
7
+ attribute :label, predicate: Vocab.rdfs.label
8
+ attribute :image, predicate: Vocab.schema.image
9
+ statements :data
10
+
11
+ def self.data(object, _params)
12
+ object.data
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ class OntologySerializer < LinkedRails.serializer_parent_class
5
+ has_many :classes
6
+ has_many :properties
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ class RDFErrorSerializer < LinkedRails.serializer_parent_class
5
+ attribute :title, predicate: Vocab.schema.name
6
+ attribute :message, predicate: Vocab.schema.text
7
+ end
8
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ class SequenceSerializer < LinkedRails.serializer_parent_class
5
+ include LinkedRails::Serializer
6
+
7
+ statements :sequence
8
+ has_many :members, polymorphic: true
9
+
10
+ def self.sequence(object, _params)
11
+ object.sequence
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ module SHACL
5
+ class NodeShapeSerializer < ShapeSerializer
6
+ attribute :closed, predicate: Vocab.sh.closed
7
+ attribute :ignored_properties, predicate: Vocab.sh.ignoredProperties
8
+ attribute :sparql, predicate: Vocab.sh.sparql
9
+ has_many :property, predicate: Vocab.sh.property, polymorphic: true
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ module SHACL
5
+ class PropertyShapeSerializer < ShapeSerializer
6
+ attribute :datatype, predicate: Vocab.sh.datatype
7
+ attribute :default_value, predicate: Vocab.sh.defaultValue
8
+ attribute :description, predicate: Vocab.sh.description
9
+ attribute :disjoint, predicate: Vocab.sh.disjoint
10
+ attribute :has_value, predicate: Vocab.sh.hasValue
11
+ attribute :equals, predicate: Vocab.sh.equals
12
+ attribute :flags, predicate: Vocab.sh.flags
13
+ attribute :group, predicate: Vocab.sh.group
14
+ attribute :language, predicate: Vocab.sh.languageIn
15
+ attribute :less_than, predicate: Vocab.sh.lessThan
16
+ attribute :less_than_or_equals, predicate: Vocab.sh.lessThanOrEquals
17
+ attribute :max_count, predicate: Vocab.sh.maxCount
18
+ attribute :max_exclusive, predicate: Vocab.sh.maxExclusive
19
+ attribute :max_inclusive, predicate: Vocab.sh.maxInclusive
20
+ attribute :max_length, predicate: Vocab.sh.maxLength
21
+ attribute :min_count, predicate: Vocab.sh.minCount
22
+ attribute :min_exclusive, predicate: Vocab.sh.minExclusive
23
+ attribute :min_inclusive, predicate: Vocab.sh.minInclusive
24
+ attribute :min_length, predicate: Vocab.sh.minLength
25
+ attribute :name, predicate: Vocab.sh.name
26
+ attribute :node, predicate: Vocab.sh.node
27
+ attribute :pattern, predicate: Vocab.sh.pattern
28
+ attribute :sh_class, predicate: Vocab.sh.class
29
+ attribute :sh_in, predicate: Vocab.sh.in
30
+ attribute :unique_language, predicate: Vocab.sh.uniqueLang
31
+ attribute :qualified_max_count, predicate: Vocab.sh.qualifiedMaxCount
32
+ attribute :qualified_min_count, predicate: Vocab.sh.qualifiedMinCount
33
+ attribute :qualified_value_shape, predicate: Vocab.sh.qualifiedValueShape
34
+
35
+ has_many :path, predicate: Vocab.sh.path, sequence: true, polymorphic: true
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ module SHACL
5
+ class ShapeSerializer < LinkedRails.serializer_parent_class
6
+ include LinkedRails::Serializer
7
+
8
+ attribute :deactivated, predicate: Vocab.sh.deactivated
9
+ attribute :message, predicate: Vocab.sh.message
10
+ attribute :node_kind, predicate: Vocab.sh.nodeKind
11
+ attribute :severity, predicate: Vocab.sh.severity
12
+ attribute :target_class, predicate: Vocab.sh.targetClass
13
+ attribute :target_node, predicate: Vocab.sh.targetNode
14
+ attribute :target_objects_of, predicate: Vocab.sh.targetObjectsOf
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|
21
+ [object.and, object.or, object.sh_not, object.xone].flatten.compact
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
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
8
+ attribute :hide_header, predicate: Vocab.ontola[:hideHeader]
9
+ end
10
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ class WebSiteSerializer < CreativeWorkSerializer
5
+ has_one :homepage, predicate: Vocab.foaf.homepage, polymorphic: true
6
+ attribute :image, predicate: Vocab.schema.image do |object|
7
+ serialize_image(object.image)
8
+ end
9
+ attribute :navigations_menu, predicate: Vocab.ontola[:navigationsMenu]
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LinkedRails
4
+ class WidgetSerializer < LinkedRails.serializer_parent_class
5
+ include LinkedRails::Serializer
6
+
7
+ attribute :size, predicate: Vocab.ontola[:widgetSize]
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|
12
+ object.property_shapes.values
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ ActiveSupport::Inflector.inflections do |inflect|
4
+ inflect.acronym 'LD'
5
+ end
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails/generators'
4
+ require 'rails/generators/active_record'
5
+
6
+ module LinkedRails
7
+ class InstallGenerator < ::Rails::Generators::Base
8
+ include ::Rails::Generators::Migration
9
+ source_root File.expand_path('templates', __dir__)
10
+ desc 'Installs LinkedRails.'
11
+
12
+ def install # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
13
+ template 'vocab.rb', 'lib/vocab.rb'
14
+ template 'initializer.rb', 'config/initializers/linked_rails.rb'
15
+ template 'application_action_list.rb', 'app/actions/application_action_list.rb'
16
+ template 'application_form.rb', 'app/forms/application_form.rb'
17
+ template 'application_menu_list.rb', 'app/menus/application_menu_list.rb'
18
+ template 'application_policy.rb', 'app/policies/application_policy.rb'
19
+ template 'application_serializer.rb', 'app/serializers/application_serializer.rb'
20
+ template 'app_menu_list.rb', 'app/menus/app_menu_list.rb'
21
+ template 'rdf_responder.rb', 'app/responders/rdf_responder.rb'
22
+ template 'rdf_serializers_initializer.rb', 'config/initializers/rdf_serializers.rb'
23
+ template 'locales.yml', 'config/locales/linked_rails.en.yml'
24
+ template 'vocab.yml', 'config/locales/vocab.en.yml'
25
+ route 'use_linked_rails'
26
+ application 'config.middleware.use LinkedRails::Middleware::LinkedDataParams'
27
+ application 'config.jwt_encryption_method = :hs512'
28
+ inject_includes
29
+ end
30
+
31
+ private
32
+
33
+ def inject_includes
34
+ inject_controller_include
35
+ inject_model_include
36
+ end
37
+
38
+ def inject_controller_include# rubocop:disable Metrics/MethodLength
39
+ sentinel = /class ApplicationController < ActionController::API\n/m
40
+ in_root do
41
+ inject_into_file(
42
+ 'app/controllers/application_controller.rb',
43
+ optimize_indentation(
44
+ "include ActionController::MimeResponds\n"\
45
+ "include ActiveResponse::Controller\n"\
46
+ 'include LinkedRails::Controller',
47
+ 2
48
+ ),
49
+ after: sentinel
50
+ )
51
+ end
52
+ end
53
+
54
+ def inject_model_include
55
+ sentinel = /class ApplicationRecord < ActiveRecord::Base\n/m
56
+ in_root do
57
+ inject_into_file(
58
+ 'app/models/application_record.rb',
59
+ optimize_indentation("include LinkedRails::Model\n", 2),
60
+ after: sentinel
61
+ )
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AppMenuList < ApplicationMenuList
4
+ has_menu :navigations,
5
+ iri_base: '/menus',
6
+ menus: -> { navigation_links }
7
+ has_menu :user,
8
+ menus: -> { user_menu_items }
9
+
10
+ def iri_template
11
+ @iri_template ||= URITemplate.new('/menus{#fragment}')
12
+ end
13
+
14
+ private
15
+
16
+ def navigation_links
17
+ items = []
18
+ items << menu_item(
19
+ :home,
20
+ label: I18n.t('menus.home'),
21
+ href: LinkedRails.iri,
22
+ image: 'fa-home'
23
+ )
24
+ items
25
+ end
26
+
27
+ def user_menu_items
28
+ return [] if user_context.guest?
29
+
30
+ [user_menu_sign_out_item]
31
+ end
32
+
33
+ def user_menu_sign_out_item
34
+ menu_item(
35
+ :signout,
36
+ action: Vocab.libro['actions/logout'],
37
+ label: I18n.t('menus.sign_out'),
38
+ href: LinkedRails.iri(path: :logout)
39
+ )
40
+ end
41
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ApplicationActionList < LinkedRails::Actions::List; end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ApplicationForm < LinkedRails::Form; end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ApplicationMenuList < LinkedRails::Menus::List; end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ApplicationPolicy
4
+ include LinkedRails::Policy
5
+
6
+ class Scope
7
+ attr_reader :user, :scope
8
+
9
+ def initialize(user, scope)
10
+ @user = user
11
+ @scope = scope
12
+ end
13
+
14
+ def resolve
15
+ scope
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ApplicationSerializer
4
+ include LinkedRails::Serializer
5
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../lib/vocab'
4
+
5
+ LinkedRails.host = 'example.com'
6
+ LinkedRails.scheme = :https
7
+ LinkedRails.app_vocab = Vocab.example
8
+
9
+ LinkedRails::Renderers.register!
@@ -0,0 +1,12 @@
1
+ en:
2
+ linked_rails:
3
+ status:
4
+ 400: "Error in request"
5
+ 401: "You have to be logged in to perform this action."
6
+ 403: "This page is not available."
7
+ 404: "The item was not found, try reloading the page."
8
+ 429: "You're making too many requests, please try again later."
9
+ 500: "Something went wrong on our side, please try again later."
10
+ menus:
11
+ home: "Home"
12
+ sign_out: "Sign out"
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'linked_rails/active_response/responders/rdf'
4
+
5
+ class RDFResponder < LinkedRails::ActiveResponse::Responders::RDF; end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ RDF::Serializers.configure do |config|
4
+ config.default_graph = Vocab.ll[:supplant]
5
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Vocab < LinkedRails::Vocab
4
+ register(:example, 'https://example.com/my_vocab#')
5
+ end
@@ -0,0 +1,26 @@
1
+ en:
2
+ foaf:
3
+ name:
4
+ label: "Naam"
5
+ ontola:
6
+ password:
7
+ label: "Wachtwoord"
8
+ quickActions:
9
+ label: "Actions"
10
+ rdfv:
11
+ type:
12
+ label: "Type"
13
+ schema:
14
+ Thing:
15
+ label: "Thing"
16
+ plural_label: "Things"
17
+ dateCreated:
18
+ label: "Date created"
19
+ dateModified:
20
+ label: "Date modified"
21
+ email:
22
+ label: "Email"
23
+ image:
24
+ label: "Image"
25
+ name:
26
+ label: "Name"