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.
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: []