Sha256: eb4001d595aa814e1ca68f29e4f155b613dad74cffedc905873e5c966dcb0fd0

Contents?: true

Size: 1.45 KB

Versions: 1

Compression:

Stored size: 1.45 KB

Contents

# frozen_string_literal: true

require "sinatra"
require "puma"

class RestServer < Sinatra::Base
  set :server, :puma
  enable :logging if ENV["debug"] == "true"
  set :bind, "0.0.0.0"

  def has_id?(model, id)
    Entities.models[model].key?(id)
  end

  def not_found(id)
    [404, JSON.generate({ error: "'#{id}' not found" })]
  end

  get "/" do
    JSON.generate({ models: Entities.models.keys.to_s })
  end

  Entities.models.each_key do |model|
    post "/#{model}" do
      id = SecureRandom.uuid
      Entities.models[model][id] = JSON.parse(request.body.read)
      [201, id]
    end

    get "/#{model}" do
      puts params
      puts params.class
      puts params == {}
      return [200, Entities.models[model].to_s] if params == {}

      Entities.models[model].values.find_all { |val| val[params.keys[0]] == params.values[0] }
    rescue Exception
      [404, "Nothing found using #{params}. Only first param considered"]
    end

    get "/#{model}/:id" do |id|
      return not_found(id) unless has_id?(model, id)

      JSON.generate(Entities.models[model][id])
    end

    put "/#{model}/:id" do |id|
      return not_found(id) unless has_id?(model, id)

      Entities.models[model][id] = JSON.parse(request.body.read)
      204
    end

    delete "/#{model}/:id" do |id|
      return not_found(id) unless has_id?(model, id)

      Entities.models[model].delete(id)
      204
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
schemaless_rest_api-0.1.0 lib/schemaless_rest_api/rest_server.rb