rosefinch 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.
- checksums.yaml +7 -0
- data/lib/rosefinch/main.rb +91 -0
- metadata +45 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 0e06d5f5632db6cc7475bef18665054cf223c853f9c0151acf780e89dabd4419
|
4
|
+
data.tar.gz: '0389a271e9e362bb0c06a1044e5e49faa3bd214a824be343784e505bbbbaa208'
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 55d1510d57ed911a872077294717466498dc8885836c70c51ce04b36efa11f5f8254223b6e7c7e453d3322fdb1aba1b844d896bc8ce5ed1902e299f4d97f80a9
|
7
|
+
data.tar.gz: 6a933f8782c5e8ee88745dc4817653505fb0da37909bc15b59319ddb786b86dfc180c1f9e261337babeddca6fcb3a239243c44c21231c380516e0ea599a72968
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require "rack"
|
2
|
+
|
3
|
+
module RoseFinch
|
4
|
+
class Base
|
5
|
+
def initialize
|
6
|
+
@routes = {}
|
7
|
+
end
|
8
|
+
|
9
|
+
attr_reader :routes
|
10
|
+
|
11
|
+
def get(path, &handler)
|
12
|
+
route("GET", path, &handler)
|
13
|
+
end
|
14
|
+
|
15
|
+
def post(path, &handler)
|
16
|
+
route("POST", path, &handler)
|
17
|
+
end
|
18
|
+
|
19
|
+
def put(path, &handler)
|
20
|
+
route("PUT", path, &handler)
|
21
|
+
end
|
22
|
+
|
23
|
+
def patch(path, &handler)
|
24
|
+
route("PATCH", path, &handler)
|
25
|
+
end
|
26
|
+
|
27
|
+
def delete(path, &handler)
|
28
|
+
route("DELETE", path, &handler)
|
29
|
+
end
|
30
|
+
|
31
|
+
def head(path, &handler)
|
32
|
+
route("HEAD", path, &handler)
|
33
|
+
end
|
34
|
+
|
35
|
+
def call(env)
|
36
|
+
@request = Rack::Request.new(env)
|
37
|
+
verb = @request.request_method
|
38
|
+
requested_path = @request.path_info
|
39
|
+
|
40
|
+
handler = @routes.fetch(verb, {}).fetch(requested_path, nil)
|
41
|
+
|
42
|
+
if handler
|
43
|
+
result = instance_eval(&handler)
|
44
|
+
if result.class == String
|
45
|
+
[200, {}, [result]]
|
46
|
+
else
|
47
|
+
result
|
48
|
+
end
|
49
|
+
else
|
50
|
+
[404, {}, ["404 Not Found! No Route: #{verb} #{requested_path}"]]
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
attr_reader :request
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
def route(verb, path, &handler)
|
59
|
+
@routes[verb] ||= {}
|
60
|
+
@routes[verb][path] = handler
|
61
|
+
end
|
62
|
+
|
63
|
+
def params
|
64
|
+
@request.params
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
BaseApp = Base.new
|
69
|
+
|
70
|
+
def self.RunServer(port: 4567)
|
71
|
+
Rack::Handler::WEBrick.run RoseFinch::BaseApp, Port: port
|
72
|
+
end
|
73
|
+
|
74
|
+
module Delegator
|
75
|
+
def self.delegate(baseApp,*methods)
|
76
|
+
Array(methods).each do |method_name|
|
77
|
+
define_method(method_name) do |*args, &block|
|
78
|
+
baseApp.send(method_name, *args, &block)
|
79
|
+
end
|
80
|
+
|
81
|
+
private method_name
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
delegate BaseApp, :get,:post, :patch, :put, :delete, :head
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
|
90
|
+
# To avoid affecting Object inheritance, bind to the main Object
|
91
|
+
extend RoseFinch::Delegator
|
metadata
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rosefinch
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mark24
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-07-13 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: "[Experimenting!] Web framework like sinatra.Small, beautiful and easy
|
14
|
+
to use."
|
15
|
+
email: mark.zhangyoung@qq.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- lib/rosefinch/main.rb
|
21
|
+
homepage: https://github.com/Mark24Code/rosefinch
|
22
|
+
licenses:
|
23
|
+
- MIT
|
24
|
+
metadata:
|
25
|
+
source_code_uri: https://github.com/Mark24Code/rosefinch
|
26
|
+
post_install_message:
|
27
|
+
rdoc_options: []
|
28
|
+
require_paths:
|
29
|
+
- lib
|
30
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
requirements: []
|
41
|
+
rubygems_version: 3.1.2
|
42
|
+
signing_key:
|
43
|
+
specification_version: 4
|
44
|
+
summary: Sinatra like framework
|
45
|
+
test_files: []
|