rosefinch 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/rosefinch/main.rb +91 -0
  3. metadata +45 -0
@@ -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: []