linked_rails 0.0.3 → 0.0.4.pre.g1faca9643

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 (181) 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 +105 -22
  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 +17 -21
  36. data/app/models/linked_rails/manifest.rb +102 -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 +6 -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/policies/linked_rails/form_policy.rb +13 -0
  51. data/app/policies/linked_rails/ontology_policy.rb +13 -0
  52. data/app/serializers/linked_rails/actions/item_serializer.rb +5 -5
  53. data/app/serializers/linked_rails/actions/object_serializer.rb +9 -0
  54. data/app/serializers/linked_rails/collection/filter_field_serializer.rb +3 -2
  55. data/app/serializers/linked_rails/collection/filter_option_serializer.rb +1 -1
  56. data/app/serializers/linked_rails/collection/filter_serializer.rb +1 -1
  57. data/app/serializers/linked_rails/collection/sorting_serializer.rb +1 -1
  58. data/app/serializers/linked_rails/collection/view_serializer.rb +3 -3
  59. data/app/serializers/linked_rails/collection_serializer.rb +8 -7
  60. data/app/serializers/linked_rails/condition_serializer.rb +3 -3
  61. data/app/serializers/linked_rails/entry_point_serializer.rb +3 -3
  62. data/app/serializers/linked_rails/enum_value_serializer.rb +1 -0
  63. data/app/serializers/linked_rails/form/field/association_input_serializer.rb +1 -0
  64. data/app/serializers/linked_rails/form/field/file_input_serializer.rb +11 -0
  65. data/app/serializers/linked_rails/form/field_serializer.rb +3 -1
  66. data/app/serializers/linked_rails/form/group_serializer.rb +1 -1
  67. data/app/serializers/linked_rails/form/page_serializer.rb +1 -1
  68. data/app/serializers/linked_rails/menus/item_serializer.rb +3 -3
  69. data/app/serializers/linked_rails/menus/list_serializer.rb +1 -1
  70. data/app/serializers/linked_rails/ontology_serializer.rb +2 -2
  71. data/app/serializers/linked_rails/property_query_serializer.rb +7 -0
  72. data/app/serializers/linked_rails/sequence_serializer.rb +2 -5
  73. data/app/serializers/linked_rails/shacl/node_shape_serializer.rb +1 -1
  74. data/app/serializers/linked_rails/shacl/property_shape_serializer.rb +1 -1
  75. data/app/serializers/linked_rails/shacl/shape_serializer.rb +5 -5
  76. data/app/serializers/linked_rails/web_page_serializer.rb +3 -3
  77. data/app/serializers/linked_rails/web_site_serializer.rb +1 -1
  78. data/app/serializers/linked_rails/widget_serializer.rb +3 -3
  79. data/app/workers/linked_rails/invalidation_stream_worker.rb +16 -0
  80. data/lib/generators/linked_rails/install/install_generator.rb +5 -8
  81. data/lib/generators/linked_rails/install/templates/README +2 -0
  82. data/lib/generators/linked_rails/install/templates/app_menu_list.rb +36 -7
  83. data/lib/generators/linked_rails/install/templates/application_menu_list.rb +40 -1
  84. data/lib/generators/linked_rails/install/templates/initializer.rb +1 -2
  85. data/lib/generators/linked_rails/install/templates/locales.yml +16 -0
  86. data/lib/generators/linked_rails/install/templates/rdf_serializers_initializer.rb +1 -1
  87. data/lib/generators/linked_rails/install/templates/vocab.rb +1 -0
  88. data/lib/generators/linked_rails/install/templates/vocab.yml +2 -2
  89. data/lib/generators/linked_rails/model/model_generator.rb +0 -1
  90. data/lib/generators/linked_rails/model/templates/controller.rb.tt +5 -1
  91. data/lib/generators/linked_rails/model/templates/form.rb.tt +3 -0
  92. data/lib/generators/linked_rails/model/templates/menu_list.rb.tt +15 -0
  93. data/lib/generators/linked_rails/model/templates/policy.rb.tt +13 -0
  94. data/lib/generators/linked_rails/model/templates/serializer.rb.tt +5 -1
  95. data/lib/linked_rails/active_response/controller/collections.rb +1 -1
  96. data/lib/linked_rails/active_response/controller/crud_defaults.rb +4 -4
  97. data/lib/linked_rails/active_response/controller/params.rb +10 -10
  98. data/lib/linked_rails/active_response/controller.rb +8 -18
  99. data/lib/linked_rails/active_response/responders/rdf.rb +19 -10
  100. data/lib/linked_rails/callable_variable.rb +1 -1
  101. data/lib/linked_rails/collection_params_parser.rb +93 -0
  102. data/lib/linked_rails/controller/actionable.rb +121 -0
  103. data/lib/linked_rails/controller/authorization.rb +6 -0
  104. data/lib/linked_rails/controller/default_actions/create.rb +52 -0
  105. data/lib/linked_rails/controller/default_actions/destroy.rb +42 -0
  106. data/lib/linked_rails/controller/default_actions/update.rb +43 -0
  107. data/lib/linked_rails/controller/delta.rb +58 -0
  108. data/lib/linked_rails/controller/error_handling.rb +12 -7
  109. data/lib/linked_rails/controller/rendering.rb +48 -0
  110. data/lib/linked_rails/controller.rb +24 -4
  111. data/lib/linked_rails/enhancements/creatable/controller.rb +1 -1
  112. data/lib/linked_rails/enhancements/destroyable/controller.rb +1 -1
  113. data/lib/linked_rails/enhancements/updatable/controller.rb +1 -1
  114. data/lib/linked_rails/enhancements.rb +0 -16
  115. data/lib/linked_rails/errors/forbidden.rb +37 -0
  116. data/lib/linked_rails/errors.rb +3 -0
  117. data/lib/linked_rails/helpers/delta_helper.rb +26 -57
  118. data/lib/linked_rails/helpers/ontola_actions_helper.rb +2 -2
  119. data/lib/linked_rails/helpers/resource_helper.rb +11 -2
  120. data/lib/linked_rails/iri_mapper.rb +17 -39
  121. data/lib/linked_rails/middleware/error_handling.rb +51 -0
  122. data/lib/linked_rails/middleware/linked_data_params.rb +30 -151
  123. data/lib/linked_rails/model/actionable.rb +68 -0
  124. data/lib/linked_rails/model/cacheable.rb +45 -0
  125. data/lib/linked_rails/model/collections.rb +201 -39
  126. data/lib/linked_rails/model/dirty.rb +6 -18
  127. data/lib/linked_rails/model/enhancements.rb +1 -6
  128. data/lib/linked_rails/model/filtering.rb +4 -6
  129. data/lib/linked_rails/model/indexable.rb +6 -16
  130. data/lib/linked_rails/model/iri.rb +29 -19
  131. data/lib/linked_rails/model/iri_mapping.rb +37 -8
  132. data/lib/linked_rails/model/menuable.rb +28 -0
  133. data/lib/linked_rails/model/serialization.rb +2 -15
  134. data/lib/linked_rails/model/singularable.rb +57 -0
  135. data/lib/linked_rails/model/sorting.rb +0 -5
  136. data/lib/linked_rails/model/tables.rb +26 -0
  137. data/lib/linked_rails/model.rb +18 -7
  138. data/lib/linked_rails/params_parser.rb +131 -54
  139. data/lib/linked_rails/policy/attribute_conditions.rb +2 -2
  140. data/lib/linked_rails/policy.rb +44 -46
  141. data/lib/linked_rails/railtie.rb +11 -0
  142. data/lib/linked_rails/rdf_error.rb +2 -2
  143. data/lib/linked_rails/renderers.rb +1 -0
  144. data/lib/linked_rails/routes.rb +38 -22
  145. data/lib/linked_rails/serializer/actionable.rb +27 -0
  146. data/lib/linked_rails/serializer/menuable.rb +31 -0
  147. data/lib/linked_rails/serializer/singularable.rb +26 -0
  148. data/lib/linked_rails/serializer.rb +28 -11
  149. data/lib/linked_rails/storage.rb +32 -0
  150. data/lib/linked_rails/test_methods.rb +114 -0
  151. data/lib/linked_rails/translate.rb +31 -9
  152. data/lib/linked_rails/types/iri_type.rb +37 -0
  153. data/lib/linked_rails/uri_template.rb +30 -0
  154. data/lib/linked_rails/url.rb +11 -0
  155. data/lib/linked_rails/version.rb +1 -1
  156. data/lib/linked_rails/vocab.rb +9 -0
  157. data/lib/linked_rails.rb +40 -14
  158. data/lib/rails/welcome_controller.rb +3 -3
  159. data/lib/rdf/list.rb +9 -0
  160. data/lib/rdf/query_fix.rb +15 -0
  161. metadata +79 -33
  162. data/app/models/linked_rails/actions/default_actions/create.rb +0 -60
  163. data/app/models/linked_rails/actions/default_actions/destroy.rb +0 -45
  164. data/app/models/linked_rails/actions/default_actions/update.rb +0 -50
  165. data/app/models/linked_rails/actions/default_actions.rb +0 -17
  166. data/lib/generators/linked_rails/install/templates/application_action_list.rb +0 -3
  167. data/lib/generators/linked_rails/model/templates/action_list.rb.tt +0 -6
  168. data/lib/linked_rails/enhancements/actionable/model.rb +0 -71
  169. data/lib/linked_rails/enhancements/actionable/serializer.rb +0 -25
  170. data/lib/linked_rails/enhancements/creatable/action.rb +0 -15
  171. data/lib/linked_rails/enhancements/destroyable/action.rb +0 -15
  172. data/lib/linked_rails/enhancements/destroyable/routing.rb +0 -19
  173. data/lib/linked_rails/enhancements/menuable/model.rb +0 -36
  174. data/lib/linked_rails/enhancements/menuable/serializer.rb +0 -33
  175. data/lib/linked_rails/enhancements/route_concerns.rb +0 -56
  176. data/lib/linked_rails/enhancements/singularable/controller.rb +0 -43
  177. data/lib/linked_rails/enhancements/singularable/model.rb +0 -47
  178. data/lib/linked_rails/enhancements/singularable/serializer.rb +0 -28
  179. data/lib/linked_rails/enhancements/tableable/model.rb +0 -28
  180. data/lib/linked_rails/enhancements/updatable/action.rb +0 -15
  181. data/lib/linked_rails/enhancements/updatable/routing.rb +0 -20
@@ -1,71 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module LinkedRails
4
- module Enhancements
5
- module Actionable
6
- module Model
7
- extend ActiveSupport::Concern
8
-
9
- def actions(user_context = nil)
10
- action_list(user_context).actions
11
- end
12
-
13
- def action(tag, user_context = nil)
14
- actions(user_context).find { |a| a.tag == tag }
15
- end
16
-
17
- def action_list(user_context)
18
- @action_list ||= {}
19
- @action_list[user_context] ||= self.class.action_list.new(resource: self, user_context: user_context)
20
- end
21
-
22
- def action_triples
23
- @action_triples ||= triples_for_actions(actions) + triples_for_actions(collection_actions)
24
- end
25
-
26
- def collection_actions
27
- (try(:collections) || []).map do |opts|
28
- collection_for(opts[:name]).actions
29
- end.flatten
30
- end
31
-
32
- private
33
-
34
- def triples_for_actions(actions)
35
- actions.flat_map do |action|
36
- triples = [
37
- [iri, action.predicate, action.iri],
38
- [iri, Vocab.schema.potentialAction, action.iri]
39
- ]
40
- triples << [iri, LinkedRails::Vocab.ontola[:favoriteAction], action.iri] if action.favorite
41
- triples
42
- end
43
- end
44
-
45
- module ClassMethods
46
- def action_list
47
- return @action_list if @action_list.try(:actionable_class) == self
48
-
49
- @action_list = defined_action_list || define_action_list
50
- end
51
-
52
- private
53
-
54
- def action_superclass
55
- superclass.try(:action_list) || LinkedRails.action_list_parent_class
56
- end
57
-
58
- def defined_action_list
59
- "#{name}ActionList".safe_constantize
60
- end
61
-
62
- def define_action_list
63
- list = const_set("#{name.demodulize}ActionList", Class.new(action_superclass))
64
- list.include_enhancements(:actionable_class, :Action)
65
- list
66
- end
67
- end
68
- end
69
- end
70
- end
71
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module LinkedRails
4
- module Enhancements
5
- module Actionable
6
- module Serializer
7
- extend ActiveSupport::Concern
8
-
9
- included do
10
- statements :action_triples
11
- end
12
-
13
- class_methods do
14
- def action_triples(object, _params)
15
- if object.iri.anonymous? && !object.singular_resource?
16
- []
17
- else
18
- object.action_triples
19
- end
20
- end
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module LinkedRails
4
- module Enhancements
5
- module Creatable
6
- module Action
7
- extend ActiveSupport::Concern
8
-
9
- included do
10
- has_collection_create_action
11
- end
12
- end
13
- end
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module LinkedRails
4
- module Enhancements
5
- module Destroyable
6
- module Action
7
- extend ActiveSupport::Concern
8
-
9
- included do
10
- has_resource_destroy_action
11
- end
12
- end
13
- end
14
- end
15
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module LinkedRails
4
- module Enhancements
5
- module Destroyable
6
- module Routing; end
7
-
8
- class << self
9
- def route_concerns(mapper)
10
- mapper.concern :destroyable do
11
- mapper.member do
12
- mapper.delete '', action: :destroy
13
- end
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module LinkedRails
4
- module Enhancements
5
- module Menuable
6
- module Model
7
- extend ActiveSupport::Concern
8
-
9
- def menus(user_context = nil)
10
- menu_list(user_context).menus
11
- end
12
-
13
- def menu(tag, user_context = nil)
14
- menu_list(user_context).menu(tag)
15
- end
16
-
17
- def menu_list(user_context = nil)
18
- @menu_list = {}
19
- @menu_list[user_context] ||= self.class.menu_class.new(resource: self, user_context: user_context)
20
- end
21
-
22
- module ClassMethods
23
- def menu_class
24
- @menu_class ||= "#{name}MenuList".safe_constantize || "#{superclass.name}MenuList".safe_constantize
25
- end
26
-
27
- def preview_includes
28
- return super if menu_class.blank?
29
-
30
- super + menu_class.defined_menus.keys.map { |tag| "#{tag}_menu" }
31
- end
32
- end
33
- end
34
- end
35
- end
36
- end
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module LinkedRails
4
- module Enhancements
5
- module Menuable
6
- module Serializer
7
- extend ActiveSupport::Concern
8
-
9
- included do
10
- include_menus
11
- end
12
-
13
- module ClassMethods
14
- def inherited(target)
15
- super
16
- target.include_menus
17
- end
18
-
19
- def include_menus
20
- serializable_class.try(:menu_class)&.defined_menus&.keys&.each do |menu|
21
- has_one "#{menu}_menu",
22
- predicate: Vocab.ontola["#{menu.to_s.camelize(:lower)}Menu"],
23
- if: method(:named_object?),
24
- polymorphic: true do |object, opts|
25
- object.menu(menu, opts[:scope])
26
- end
27
- end
28
- end
29
- end
30
- end
31
- end
32
- end
33
- end
@@ -1,56 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module LinkedRails
4
- module Enhancements
5
- class RouteConcerns
6
- cattr_accessor :enhancement_concerns, default: []
7
-
8
- class << self
9
- def add_concern(opts)
10
- enhancement_concerns << opts unless enhancement_concerns.include?(opts)
11
- end
12
- end
13
- end
14
- end
15
- end
16
-
17
- module ActionDispatch
18
- module Routing
19
- class Mapper
20
- def include_route_concerns(klass: @scope[:controller].classify.constantize, only: nil, except: [])
21
- include =
22
- if klass.respond_to?(:each)
23
- klass.map(&method(:route_concerns_for)).flatten.uniq
24
- else
25
- route_concerns_for(klass)
26
- end
27
-
28
- include &= only unless only.nil?
29
- include -= except
30
-
31
- concerns include
32
- end
33
-
34
- def add_missing_concern(enhancement)
35
- return if @concerns.include?(concern_key_from_enhancement(enhancement))
36
-
37
- module_parent_for(enhancement).route_concerns(self)
38
- end
39
-
40
- def concern_key_from_enhancement(enhancement)
41
- module_parent_for(enhancement).to_s.demodulize.underscore.to_sym
42
- end
43
-
44
- def route_concerns_for(klass)
45
- klass
46
- .enhancement_modules(:Routing)
47
- .each(&method(:add_missing_concern))
48
- .map(&method(:concern_key_from_enhancement))
49
- end
50
-
51
- def module_parent_for(klass)
52
- Rails.version < '6' ? klass.parent : klass.module_parent
53
- end
54
- end
55
- end
56
- end
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module LinkedRails
4
- module Enhancements
5
- module Singularable
6
- module Controller
7
- extend ActiveSupport::Concern
8
-
9
- private
10
-
11
- def create_meta
12
- data = super
13
- data << same_as_statement
14
- data
15
- end
16
-
17
- def destroy_meta
18
- data = super
19
- data << remove_same_as_delta
20
- data
21
- end
22
-
23
- def same_as_statement
24
- return [] unless current_resource.respond_to?(:singular_iri)
25
-
26
- [
27
- current_resource.singular_iri,
28
- Vocab.owl.sameAs,
29
- current_resource.iri
30
- ]
31
- end
32
-
33
- def singular_route?
34
- params[:singular_route]
35
- end
36
-
37
- def remove_same_as_delta
38
- invalidate_resource_delta(current_resource.singular_iri)
39
- end
40
- end
41
- end
42
- end
43
- end
@@ -1,47 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module LinkedRails
4
- module Enhancements
5
- module Singularable
6
- module Model
7
- extend ActiveSupport::Concern
8
-
9
- included do
10
- attr_accessor :singular_resource
11
-
12
- alias_method :singular_resource?, :singular_resource
13
- end
14
-
15
- def root_relative_singular_iri(opts = {})
16
- RDF::URI(self.class.singular_iri_template.expand(singular_iri_opts.merge(opts)))
17
- end
18
-
19
- def root_relative_iri(opts = {})
20
- return super unless anonymous_iri?
21
-
22
- root_relative_singular_iri(opts)
23
- end
24
-
25
- def singular_iri(opts = {})
26
- return iri_with_root(root_relative_singular_iri(opts)) if opts.present?
27
-
28
- @singular_iri ||= iri_with_root(root_relative_singular_iri)
29
- end
30
-
31
- class_methods do
32
- def requested_singular_resource(_params, _user_context)
33
- raise(NotImplementedError)
34
- end
35
-
36
- def singular_iri_template
37
- @singular_iri_template ||= URITemplate.new("{/parent_iri*}/#{singular_route_key}{#fragment}")
38
- end
39
-
40
- def singular_route_key
41
- name.underscore
42
- end
43
- end
44
- end
45
- end
46
- end
47
- end
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module LinkedRails
4
- module Enhancements
5
- module Singularable
6
- module Serializer
7
- extend ActiveSupport::Concern
8
-
9
- included do
10
- statements :same_as_statement
11
-
12
- def self.same_as_statement(object, _params)
13
- return [] unless object.singular_resource? && object.singular_iri != object.iri
14
-
15
- [
16
- RDF::Statement.new(
17
- object.singular_iri,
18
- Vocab.owl.sameAs,
19
- object.iri,
20
- graph_name: Vocab.ll[:supplant]
21
- )
22
- ]
23
- end
24
- end
25
- end
26
- end
27
- end
28
- end
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module LinkedRails
4
- module Enhancements
5
- module Tableable
6
- module Model
7
- extend ActiveSupport::Concern
8
-
9
- included do
10
- class_attribute :defined_columns
11
- end
12
-
13
- module ClassMethods
14
- def with_columns(opts)
15
- initialize_columns
16
- defined_columns.merge!(opts)
17
- end
18
-
19
- def initialize_columns
20
- return if defined_columns && method(:defined_columns).owner == singleton_class
21
-
22
- self.defined_columns = superclass.try(:defined_columns)&.dup || {}
23
- end
24
- end
25
- end
26
- end
27
- end
28
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module LinkedRails
4
- module Enhancements
5
- module Updatable
6
- module Action
7
- extend ActiveSupport::Concern
8
-
9
- included do
10
- has_resource_update_action
11
- end
12
- end
13
- end
14
- end
15
- end
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module LinkedRails
4
- module Enhancements
5
- module Updatable
6
- module Routing; end
7
-
8
- class << self
9
- def route_concerns(mapper)
10
- mapper.concern :updatable do
11
- mapper.member do
12
- mapper.patch :update
13
- mapper.put :update
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end
20
- end