quicknap 0.0.1

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.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +25 -0
  3. data/lib/quicknap.rb +85 -0
  4. metadata +45 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2dd39519fa9e9be60787823dbbe3c4e6e540b16d
4
+ data.tar.gz: d3a88a04fbf0b7a4d292bea36464db28488be644
5
+ SHA512:
6
+ metadata.gz: af61811e91970e1b57e180f95cf88471d2cdb21b3189b48051be208a9cbc9d6eb511c48626f013196b8c5ba9c61613b0482c679b51f13bacf17f3b1c628297a6
7
+ data.tar.gz: ef73ed5176bc5fe05c6edae7efc6b781695a1ddc719840be116e609cb2ada88a6e140cdfd0a3deaf710ed5dda1742dffbbdf2e58cd9b3ba3a9ee3916c7504115
data/README.md ADDED
@@ -0,0 +1,25 @@
1
+ # Quick Nap
2
+
3
+ _A quick way to get some REST_
4
+
5
+ A Ruby lib to swifly create a simple web application.
6
+
7
+ ## Example
8
+
9
+ require './quicknap'
10
+
11
+ get '/' do
12
+ "Taking a quick nap: #{params}!"
13
+ end
14
+
15
+ post '/' do
16
+ "Posted: #{post_body}"
17
+ end
18
+
19
+ listen_at 6969
20
+
21
+ ### Running
22
+
23
+ ruby quicknap_app.rb
24
+
25
+ Still under "heavy" development, feel free to contribute.
data/lib/quicknap.rb ADDED
@@ -0,0 +1,85 @@
1
+ require 'rack'
2
+
3
+ module QuickNap
4
+ class Base
5
+ def initialize
6
+ @routes = {}
7
+ @request = {}
8
+ end
9
+
10
+ attr_reader :routes, :request
11
+
12
+ def get(route, &callback)
13
+ route("GET", route, &callback)
14
+ end
15
+
16
+ def post(route, &callback)
17
+ route("POST", route, &callback)
18
+ end
19
+
20
+ def patch(route, &callback)
21
+ route("PATCH", route, &callback)
22
+ end
23
+
24
+ def put(route, &callback)
25
+ route("PUT", route, &callback)
26
+ end
27
+
28
+ def delete(route, &callback)
29
+ route("DELETE", route, &callback)
30
+ end
31
+
32
+ def call(env)
33
+ @request = Rack::Request.new(env)
34
+
35
+ http_verb = @request.request_method
36
+ requested_route = @request.path_info
37
+
38
+ handler = @routes.fetch(http_verb, {}).fetch(requested_route, nil)
39
+
40
+ if handler
41
+ request_result = instance_eval(&handler)
42
+ (request_result.class == String) ? [200, {}, [request_result]] : request_result
43
+ else
44
+ [404, {}, ["'#{http_verb}' to '#{requested_route}' : Undefined route"]]
45
+ end
46
+ end
47
+
48
+ def listen_at(port_number)
49
+ Rack::Handler::WEBrick.run QuickNap::QuickNapApp, Port: port_number
50
+ end
51
+
52
+ private
53
+
54
+ def route(http_verb, route, &callback)
55
+ @routes[http_verb] ||= {}
56
+ @routes[http_verb][route] = callback
57
+ end
58
+
59
+ def params
60
+ @request.params
61
+ end
62
+
63
+ def post_body
64
+ @request.body.read
65
+ end
66
+ end
67
+
68
+ QuickNapApp = Base.new
69
+
70
+ module Delegator
71
+ def self.delegate(*methods, to:)
72
+ Array(methods).each do |method_name|
73
+ define_method(method_name) do |*args, &block|
74
+ to.send(method_name, *args, &block)
75
+ end
76
+
77
+ private method_name
78
+ end
79
+ end
80
+
81
+ delegate :get, :patch, :put, :post, :delete, :head, :listen_at, to: QuickNapApp
82
+ end
83
+ end
84
+
85
+ include QuickNap::Delegator
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: quicknap
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - José Tapadas Alves
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-10-14 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A quick way to get some nap
14
+ email: jose.tapadas@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - README.md
20
+ - lib/quicknap.rb
21
+ homepage: http://rubygems.org/gems/quicknap
22
+ licenses:
23
+ - MIT
24
+ metadata: {}
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ requirements: []
40
+ rubyforge_project:
41
+ rubygems_version: 2.5.2
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: QuickNap
45
+ test_files: []