module Trample::Swagger

Constants

CONDITION_OPTION_WHITELIST

Public Instance Methods

trample_swagger(search_class, path, opts = {}) click to toggle source
# File lib/trample/swagger.rb, line 70
def trample_swagger(search_class, path, opts = {})
  swagger_path "#{path}/new" do
    operation :get do
      key :description, "Instantiate default search. See the corresponding PUT operation for valid inputs."
      key :tags, opts[:tags] || ['search']

      response 200 do
        key :description, 'Trample response'
        schema do
          key :'$ref', :TrampleSearchResponse
        end
      end
    end
  end

  swagger_path "#{path}/{id}" do
    operation :put do
      description = "<p>Trample search <a target='_blank' href='http://richmolj.github.io/trample'>View Full Trample Documentation</a></p><p><strong>Conditions:</strong></p><ul>"
      search_class._conditions.each_pair do |name, condition|
        attrs = condition.attributes.select { |k,v| !!v }.map { |k,v| k }
        attrs.select! { |a| CONDITION_OPTION_WHITELIST.include?(a) }
        attrs = attrs.present? ? "(#{attrs.join(', ')})" : ''
        description << "<li>#{name} #{attrs}</li>"
      end
      description << "</ul>"

      if search_class._aggs.present?
        description << "<p><strong>Aggregations:</strong></p><ul>"
        search_class._aggs.each_pair do |name, agg|
          description << "<li>#{name}</li>"
        end
        description << "</ul>"
      end

      key :description, description
      key :tags, opts[:tags] || ['search']

      parameter paramType: :path do
        key :name, :id
        key :type, :integer
        key :default, SecureRandom.uuid
      end

      parameter do
        key :name, :data
        key :in, :body

        schema do
          key :'$ref', :TrampleSearch
        end
      end

      response 200 do
        key :description, 'Trample response'
        schema do
          key :'$ref', :TrampleSearchResponse
        end
      end
    end
  end
end
trample_swagger_schema() click to toggle source
# File lib/trample/swagger.rb, line 18
def trample_swagger_schema
  swagger_schema :TrampleSearch do
    property :data do
      key :type, :object

      property :attributes do
        key :type, :object

        property :conditions do
          key :type, :object
        end

        property :metadata do
          key :type, :object

          property :pagination do
            key :type, :object
            key :example, {current_page: 1, per_page: 20}
          end
        end

        property :aggregations do
          key :type, :array
          key :example, []

          items do
            key :type, :object
          end
        end
      end
    end
  end

  swagger_schema :TrampleSearchResponse do
    allOf do
      schema do
        key :'$ref', :TrampleSearch
      end

      schema do
        property :results do
          key :type, :array

          items do
            key :type, :object
          end
        end
      end
    end
  end
end