schemaless_rest_api 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 772e554afa1851f8a505754ce97e174218f28b2fdfa7cb8cea9e20483fe1a0a0
4
- data.tar.gz: 442745cdc52411aa5e2db5d20fc9474188314ef94282db4b620675114a84f1ba
3
+ metadata.gz: a86e21c3979d2542206f5c993491444ee5e91e38d348eaaf4cc4a6a242eaf11f
4
+ data.tar.gz: 2c82b7556b1ed4ce916224bdcc9404efe20283d7a7c7f2564bc750968b9f9cc3
5
5
  SHA512:
6
- metadata.gz: 9c5f723fba1e431ee358afadfb6ed5d96bd081f8849d565fd23e31474c720c2ecf39b3f7e43e2eecef8bb896686e0e4d4a8a4837b4a1a35c565c253ab95015c1
7
- data.tar.gz: cb903faf022ce6d7605ae3ea60e570a548f2db2b5c246d67a1fff1c405b85854d49b4dde11b89390b7f2b855dcbf75f7e0ec74cfd3dc99b90c0f5ad2cdec902b
6
+ metadata.gz: abfb1f463d723d366327e16067e751e2e616d7026adabd83365ddf0f5841e69f422ebcfbb1a8b7a6c756606241b8d400052ac496bbf011e9bd807ced28c0ebfb
7
+ data.tar.gz: 37a864e55ffd3740404a7ce7d632c3496c9d1e546d4e9a75092a5dfe3655e127a69f2a82c0253f7dccff5faaa7dcb5559549e702f0da760aaad36696300f55a5
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "sinatra"
4
+ require 'docdsl'
4
5
  require "puma"
5
6
  require 'route_downcaser'
6
7
 
@@ -10,6 +11,17 @@ class RestServer < Sinatra::Base
10
11
  set :bind, "0.0.0.0"
11
12
  use RouteDowncaser::DowncaseRouteMiddleware
12
13
 
14
+ register Sinatra::DocDsl
15
+
16
+ page do
17
+ title "Schmaless REST API"
18
+ header "REST API using models #{Entities.models.keys}"
19
+ introduction "REST APIs allowing CRUD on:
20
+ #{Entities.models.keys.join("\n")}"
21
+ end
22
+
23
+ doc_endpoint "/docs"
24
+
13
25
  def has_id?(model, id)
14
26
  Entities.models[model].key?(id)
15
27
  end
@@ -18,8 +30,12 @@ class RestServer < Sinatra::Base
18
30
  [404, JSON.generate({ error: "'#{id}' not found" })]
19
31
  end
20
32
 
33
+ documentation "Get summary" do
34
+ response "Basic basic summary of API"
35
+ end
21
36
  get "/" do
22
- summary = { models: Entities.models.keys.to_s }
37
+ summary = { models: Entities.models.keys.to_s,
38
+ docs_url: '<a href=/docs>/docs</a>' }
23
39
  summary[:db] = MongoClient.client.summary.to_s if ENV['mongodb']
24
40
  JSON.generate(summary)
25
41
  rescue Exception => e
@@ -27,6 +43,11 @@ class RestServer < Sinatra::Base
27
43
  end
28
44
 
29
45
  Entities.models.each_key do |model|
46
+ documentation "Create instance of #{model}" do
47
+ payload "Whatever JSON you want. Needs to be valid JSON"
48
+ response "Id of created #{model}"
49
+ status 201
50
+ end
30
51
  post "/#{model.downcase}" do
31
52
  id = SecureRandom.uuid
32
53
  data = JSON.parse(request.body.read)
@@ -38,6 +59,11 @@ class RestServer < Sinatra::Base
38
59
  [201, id]
39
60
  end
40
61
 
62
+ documentation "Retrieve all instances of #{model} or filtered by query param" do
63
+ response "Data in #{model}"
64
+ query_param :key_to_search_in_data, "Value of key"
65
+ status 200
66
+ end
41
67
  get "/#{model.downcase}" do
42
68
  puts request.path.downcase
43
69
  if ENV['mongodb']
@@ -55,6 +81,11 @@ class RestServer < Sinatra::Base
55
81
  [404, "Nothing found using #{params}. Only first param considered. #{e.message}"]
56
82
  end
57
83
 
84
+ documentation "Retrieve specific instance of #{model} by id" do
85
+ response "Data in #{model}"
86
+ status 200
87
+ status 404
88
+ end
58
89
  get "/#{model.downcase}/:id" do |id|
59
90
  puts request.path.downcase
60
91
  if ENV['mongodb']
@@ -68,6 +99,12 @@ class RestServer < Sinatra::Base
68
99
  end
69
100
  end
70
101
 
102
+ documentation "Update id of #{model} to be provided data" do
103
+ payload "Whatever JSON you want updated to be. Needs to be valid JSON"
104
+ response "Data in #{model}"
105
+ status 204
106
+ status 404
107
+ end
71
108
  put "/#{model.downcase}/:id" do |id|
72
109
  puts request.path.downcase
73
110
  data = JSON.parse(request.body.read)
@@ -83,6 +120,10 @@ class RestServer < Sinatra::Base
83
120
  204
84
121
  end
85
122
 
123
+ documentation "Update id of #{model} to be deleted" do
124
+ response "Empty"
125
+ status 204
126
+ end
86
127
  delete "/#{model.downcase}/:id" do |id|
87
128
  puts request.path.downcase
88
129
  if ENV['mongodb']
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SchemalessRestApi
4
- VERSION = "0.2.1"
4
+ VERSION = "0.2.2"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: schemaless_rest_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Garratt