Sha256: ed91f46aeb6c565f30a95f37a6c2a0106b6eb6617c74beb3780acf8746ec4ee5

Contents?: true

Size: 1.58 KB

Versions: 3

Compression:

Stored size: 1.58 KB

Contents

# frozen_string_literal: true

module LinkedRails
  module Helpers
    module ResourceHelper
      def current_resource
        return @current_resource if instance_variable_defined?(:@current_resource)

        @current_resource ||= resolve_current_resource
      end

      def new_resource
        @new_resource ||=
          if requested_resource.try(:singular_resource?)
            requested_resource
          elsif parent_resource
            new_resource_from_parent
          else
            build_new_resource
          end
      end

      def params_for_parent
        params.dup
      end

      def parent_from_params
        @parent_from_params ||= LinkedRails.iri_mapper.parent_from_params(params, user_context)
      end

      def parent_from_params!
        parent_from_params || raise(ActiveRecord::RecordNotFound)
      end

      def parent_resource
        @parent_resource ||= requested_resource_parent || parent_from_params
      end

      def parent_resource!
        parent_resource || raise(ActiveRecord::RecordNotFound)
      end

      def requested_resource_parent
        requested_resource&.parent
      end

      private

      def build_new_resource
        controller_class.build_new(user_context: user_context)
      end

      def new_resource_from_parent
        parent_resource.build_child(
          controller_class,
          user_context: user_context
        )
      end

      def resolve_current_resource
        case action_name
        when 'create', 'new'
          new_resource
        else
          requested_resource
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
linked_rails-0.0.3 lib/linked_rails/helpers/resource_helper.rb
linked_rails-0.0.2 lib/linked_rails/helpers/resource_helper.rb
linked_rails-0.0.1 lib/linked_rails/helpers/resource_helper.rb