Sha256: b6fe67b340f8f707c3f0b0534858c608565fb95b85fccea402afb3487550e67f

Contents?: true

Size: 1.37 KB

Versions: 14

Compression:

Stored size: 1.37 KB

Contents

module JsonapiSwaggerHelpers
  module DocsControllerMixin
    def self.included(klass)
      # Save our controller so we can execute Swagger::Blocks code against it
      JsonapiSwaggerHelpers.docs_controller = klass

      # Add glue code
      klass.send(:include, Swagger::Blocks)
      klass.extend(ResourceMixin) # jsonapi_resource DSL
      klass.extend(ClassMethods) # for predefining payloads

      # Predefine swagger definitions for later reference
      #   * spec payloads define outputs
      #   * strong resources define inputs
      klass.register_payload_definitions!
    end

    module ClassMethods
      def register_payload_definitions!
        JsonapiSpecHelpers.load_payloads!
        JsonapiSpecHelpers::Payload.registry.each_pair do |payload_name, payload|
          JsonapiSwaggerHelpers::PayloadDefinition.new(payload).generate
        end
      end

      def resources
        @resources ||= []
      end

      # In production, the controller is loaded before the routes
      # So, delay looking up the routes until they are loaded
      def load!
        resources.each { |r| load_resource(r) }
        @loaded = true
      end

      def loaded?
        !!@loaded
      end
    end

    # Give Swagger::Blocks what it wants
    def index
      self.class.load! unless self.class.loaded?
      render json: Swagger::Blocks.build_root_json([self.class])
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
jsonapi_swagger_helpers-0.6.6 lib/jsonapi_swagger_helpers/docs_controller_mixin.rb
jsonapi_swagger_helpers-0.6.5 lib/jsonapi_swagger_helpers/docs_controller_mixin.rb
jsonapi_swagger_helpers-0.6.4 lib/jsonapi_swagger_helpers/docs_controller_mixin.rb
jsonapi_swagger_helpers-0.6.3 lib/jsonapi_swagger_helpers/docs_controller_mixin.rb
jsonapi_swagger_helpers-0.6.2 lib/jsonapi_swagger_helpers/docs_controller_mixin.rb
jsonapi_swagger_helpers-0.6.1 lib/jsonapi_swagger_helpers/docs_controller_mixin.rb
jsonapi_swagger_helpers-0.6.0 lib/jsonapi_swagger_helpers/docs_controller_mixin.rb
jsonapi_swagger_helpers-0.5.4 lib/jsonapi_swagger_helpers/docs_controller_mixin.rb
jsonapi_swagger_helpers-0.5.3 lib/jsonapi_swagger_helpers/docs_controller_mixin.rb
jsonapi_swagger_helpers-0.5.2 lib/jsonapi_swagger_helpers/docs_controller_mixin.rb
jsonapi_swagger_helpers-0.5.1 lib/jsonapi_swagger_helpers/docs_controller_mixin.rb
jsonapi_swagger_helpers-0.5.0 lib/jsonapi_swagger_helpers/docs_controller_mixin.rb
jsonapi_swagger_helpers-0.4.3 lib/jsonapi_swagger_helpers/docs_controller_mixin.rb
jsonapi_swagger_helpers-0.4.2 lib/jsonapi_swagger_helpers/docs_controller_mixin.rb