Sha256: 602cc1593160017e78a165acf62abc061bab7b16ce0d3e3ac842a6760151eb66

Contents?: true

Size: 1.23 KB

Versions: 1

Compression:

Stored size: 1.23 KB

Contents

require 'sinatra/base'

module MontageRails
  class MockServer < Sinatra::Base
    include ActiveSupport::Inflector

    def fetch_schema_resource(schema)
      require Rails.root.join('test','montage_resources',(schema.singularize+'_resource.rb')).to_s
      "#{schema.singularize.classify}Resource".constantize.new
    end

    def load_schema(schema)
      require Rails.root.join('test','montage_resources',(schema.singularize+'_resource.rb')).to_s
      "#{schema.singularize.classify}Resource".constantize.new
    end

    def post_payload
      return unless request.body.length > 0
      request.body.rewind
      JSON.parse request.body.read
    end

    before do
      content_type :json
    end

    post '/api/v1/query' do
      resource = fetch_schema_resource(post_payload["query"]["$schema"])
      data = resource.query(post_payload["query"])
      { data: { query: data } }.to_json
    end

    get '/api/v1/schemas/:schema' do
      fetch_schema_resource(params[:schema]).class.schema_definition.to_json
    end

    get '/api/v1/schemas/:schema/:uuid' do
      fetch_schema_resource(params[:schema]).find(params[:uuid]).to_json
    end

    post '/api/v1/schemas/:schema/save' do
      { data: post_payload }.to_json
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
montage_rails-1.0.0 lib/montage_rails/mock_server.rb