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
- .index_resource_from_iri(iri, user_context) ⇒ Object
- .index_resource_from_iri!(iri, user_context) ⇒ Object
- .index_resource_from_opts(opts, user_context) ⇒ Object
-
.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) ⇒ Object
- .single_resource_from_iri(iri, user_context) ⇒ Object
- .single_resource_from_iri!(iri, user_context) ⇒ Object
- .single_resource_from_opts(opts, user_context) ⇒ Object
Class Method Details
.index_resource_from_iri(iri, user_context) ⇒ Object
43 44 45 46 47 48 |
# File 'lib/linked_rails/iri_mapper.rb', line 43 def index_resource_from_iri(iri, user_context) ensure_absolute_iri!(iri) opts = opts_from_iri(iri) index_resource_from_opts(opts, user_context) end |
.index_resource_from_iri!(iri, user_context) ⇒ Object
50 51 52 |
# File 'lib/linked_rails/iri_mapper.rb', line 50 def index_resource_from_iri!(iri, user_context) index_resource_from_iri(iri, user_context) || raise(ActiveRecord::RecordNotFound) end |
.index_resource_from_opts(opts, user_context) ⇒ Object
54 55 56 |
# File 'lib/linked_rails/iri_mapper.rb', line 54 def index_resource_from_opts(opts, user_context) opts[:class]&.requested_index_resource(opts[:params], user_context) if opts[:action] == 'index' end |
.opts_from_iri(iri, method: 'GET') ⇒ Hash
Converts an IRI into a hash containing the action, class, iri and the params of the iri
34 35 36 37 38 39 40 41 |
# File 'lib/linked_rails/iri_mapper.rb', line 34 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)) rescue ActionController::RoutingError EMPTY_IRI_OPTS.dup end |
.parent_from_params(params, user_context) ⇒ Object
58 59 60 61 62 63 64 65 66 |
# File 'lib/linked_rails/iri_mapper.rb', line 58 def parent_from_params(params, user_context) return unless params.key?(:parent_iri) parent_iri = "/#{params[:parent_iri]}" opts = LinkedRails.iri_mapper.opts_from_iri(parent_iri) opts[:params] = params.except(:parent_iri, :singular_route).merge(opts[:params]) LinkedRails.iri_mapper.resource_from_opts(opts, user_context) end |
.resource_from_iri(iri, user_context) ⇒ Object
68 69 70 71 72 73 |
# File 'lib/linked_rails/iri_mapper.rb', line 68 def resource_from_iri(iri, user_context) ensure_absolute_iri!(iri) opts = opts_from_iri(iri) resource_from_opts(opts, user_context) end |
.resource_from_iri!(iri, user_context) ⇒ Object
75 76 77 |
# File 'lib/linked_rails/iri_mapper.rb', line 75 def resource_from_iri!(iri, user_context) resource_from_iri(iri, user_context) || raise(ActiveRecord::RecordNotFound) end |
.resource_from_opts(opts, user_context) ⇒ Object
79 80 81 |
# File 'lib/linked_rails/iri_mapper.rb', line 79 def resource_from_opts(opts, user_context) opts[:class]&.requested_resource(opts, user_context) end |
.route_params_to_opts(params) ⇒ Object
83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/linked_rails/iri_mapper.rb', line 83 def route_params_to_opts(params) controller_class = class_for_controller(params[:controller]) return EMPTY_IRI_OPTS.dup if controller_class.blank? { action: params[:action], class: controller_class, params: params.except(:action, :controller) }.with_indifferent_access end |
.single_resource_from_iri(iri, user_context) ⇒ Object
95 96 97 98 99 100 |
# File 'lib/linked_rails/iri_mapper.rb', line 95 def single_resource_from_iri(iri, user_context) ensure_absolute_iri!(iri) opts = opts_from_iri(iri) single_resource_from_opts(opts, user_context) end |
.single_resource_from_iri!(iri, user_context) ⇒ Object
102 103 104 |
# File 'lib/linked_rails/iri_mapper.rb', line 102 def single_resource_from_iri!(iri, user_context) single_resource_from_iri(iri, user_context) || raise(ActiveRecord::RecordNotFound) end |
.single_resource_from_opts(opts, user_context) ⇒ Object
106 107 108 |
# File 'lib/linked_rails/iri_mapper.rb', line 106 def single_resource_from_opts(opts, user_context) opts[:class]&.requested_single_resource(opts[:params], user_context) unless opts[:params] == 'index' end |