Class: LinkedRails::IRIMapper
- Inherits:
-
Object
- Object
- LinkedRails::IRIMapper
- Defined in:
- lib/linked_rails/iri_mapper.rb
Constant Summary collapse
- EMPTY_IRI_OPTS =
{params: {}}.freeze
Class Method Summary collapse
-
.opts_from_iri(iri, method: 'GET') ⇒ Hash
Converts an IRI into a hash containing the action, class, iri and the params of the iri.
- .parent_from_params(params, user_context) ⇒ Object
- .resource_from_iri(iri, user_context) ⇒ Object
- .resource_from_iri!(iri, user_context) ⇒ Object
- .resource_from_opts(opts, user_context) ⇒ Object
- .route_params_to_opts(params, iri) ⇒ Object
Class Method Details
.opts_from_iri(iri, method: 'GET') ⇒ Hash
Converts an IRI into a hash containing the action, class, iri and the params of the iri
36 37 38 39 40 41 42 43 |
# File 'lib/linked_rails/iri_mapper.rb', line 36 def opts_from_iri(iri, method: 'GET') query = Rack::Utils.parse_nested_query(URI(iri.to_s).query) params = Rails.application.routes.recognize_path(iri.to_s, method: method) route_params_to_opts(params.merge(query), iri.to_s) rescue ActionController::RoutingError, SystemStackError EMPTY_IRI_OPTS.dup end |
.parent_from_params(params, user_context) ⇒ Object
45 46 47 48 49 50 51 |
# File 'lib/linked_rails/iri_mapper.rb', line 45 def parent_from_params(params, user_context) return unless params.key?(:parent_iri) parent_iri = LinkedRails.iri(path: "/#{params[:parent_iri]}") LinkedRails.iri_mapper.resource_from_iri(parent_iri, user_context) end |
.resource_from_iri(iri, user_context) ⇒ Object
53 54 55 56 57 58 |
# File 'lib/linked_rails/iri_mapper.rb', line 53 def resource_from_iri(iri, user_context) return nil unless absolute_iri?(iri) opts = opts_from_iri(iri) resource_from_opts(opts, user_context) end |
.resource_from_iri!(iri, user_context) ⇒ Object
60 61 62 |
# File 'lib/linked_rails/iri_mapper.rb', line 60 def resource_from_iri!(iri, user_context) resource_from_iri(iri, user_context) || raise(ActiveRecord::RecordNotFound) end |
.resource_from_opts(opts, user_context) ⇒ Object
64 65 66 |
# File 'lib/linked_rails/iri_mapper.rb', line 64 def resource_from_opts(opts, user_context) opts[:class]&.requested_resource(opts, user_context) end |
.route_params_to_opts(params, iri) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/linked_rails/iri_mapper.rb', line 68 def route_params_to_opts(params, iri) controller_class = class_for_controller(params[:controller]) return EMPTY_IRI_OPTS.dup if controller_class.blank? { action: params[:action], class: controller_class, iri: iri, params: sanitized_route_params(controller_class, params) }.with_indifferent_access end |