chespirito 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 3ea44622e48fc4daec6a855f893208c3a3d5a243a4ea38ff0077e63e29fffc6d
4
+ data.tar.gz: a9717fab4ec5e1a1f2285c583f8e0ec85ce9188d6321e379f476a99e2a195ce0
5
+ SHA512:
6
+ metadata.gz: 92ba0c82376ec77860b8cda7b934da1a25bcd416a9827640957bafa074a317c411a3f39e39b7fd2e2e923c07ed28e624d5c03bd54262af1fe8650613333023bb
7
+ data.tar.gz: b98940782b5be8d742d8c7750d86e576d8ce886f9d2697a9a52e0df7aeb3376497a8b1288a641d831e83c0d881fb4e5b75f30fdf90baebbdbc98aed746239679
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gem 'rubocop', require: false
6
+ gem 'rack'
7
+ gem 'adelnor'
8
+ gem 'byebug'
data/Gemfile.lock ADDED
@@ -0,0 +1,39 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ adelnor (0.0.6)
5
+ rack
6
+ ast (2.4.2)
7
+ byebug (11.1.3)
8
+ parallel (1.22.1)
9
+ parser (3.1.2.0)
10
+ ast (~> 2.4.1)
11
+ rack (2.2.3)
12
+ rainbow (3.1.1)
13
+ regexp_parser (2.4.0)
14
+ rexml (3.2.5)
15
+ rubocop (1.29.1)
16
+ parallel (~> 1.10)
17
+ parser (>= 3.1.0.0)
18
+ rainbow (>= 2.2.2, < 4.0)
19
+ regexp_parser (>= 1.8, < 3.0)
20
+ rexml (>= 3.2.5, < 4.0)
21
+ rubocop-ast (>= 1.17.0, < 2.0)
22
+ ruby-progressbar (~> 1.7)
23
+ unicode-display_width (>= 1.4.0, < 3.0)
24
+ rubocop-ast (1.18.0)
25
+ parser (>= 3.1.1.0)
26
+ ruby-progressbar (1.11.0)
27
+ unicode-display_width (2.1.0)
28
+
29
+ PLATFORMS
30
+ aarch64-linux
31
+
32
+ DEPENDENCIES
33
+ adelnor
34
+ byebug
35
+ rack
36
+ rubocop
37
+
38
+ BUNDLED WITH
39
+ 2.3.3
data/README.md ADDED
@@ -0,0 +1,56 @@
1
+ # chespirito
2
+
3
+ ![rubygems](https://badgen.net/rubygems/n/chespirito)
4
+ ![rubygems](https://badgen.net/rubygems/v/chespirito/latest)
5
+ ![rubygems](https://badgen.net/rubygems/dt/chespirito)
6
+
7
+ ![Build](https://github.com/leandronsp/chespirito/actions/workflows/build.yml/badge.svg)
8
+ [![Ruby Style Guide](https://img.shields.io/badge/code_style-rubocop-brightgreen.svg)](https://github.com/rubocop/rubocop)
9
+ [![Ruby Style Guide](https://img.shields.io/badge/code_style-community-brightgreen.svg)](https://rubystyle.guide)
10
+ ```
11
+ ______ __ __ _______ _______..______ __ .______ __ .___________. ______
12
+ / || | | | | ____| / || _ \ | | | _ \ | | | | / __ \
13
+ | ,----'| |__| | | |__ | (----`| |_) | | | | |_) | | | `---| |----`| | | |
14
+ | | | __ | | __| \ \ | ___/ | | | / | | | | | | | |
15
+ | `----.| | | | | |____.----) | | | | | | |\ \----.| | | | | `--' |
16
+ \______||__| |__| |_______|_______/ | _| |__| | _| `._____||__| |__| \______/
17
+ ```
18
+
19
+ [chespirito](https://rubygems.org/gems/chespirito) is a dead simple, yet Rack-compatible, web framework written in Ruby.
20
+
21
+ ## Requirements
22
+
23
+ Ruby
24
+
25
+ ## Installation
26
+ ```bash
27
+ $ gem install chespirito
28
+ ```
29
+
30
+ ## Development tooling
31
+
32
+ Make and Docker
33
+
34
+ ## Using make
35
+
36
+ ```bash
37
+ $ make help
38
+ ```
39
+ Output:
40
+ ```
41
+ Usage: make <target>
42
+ help Prints available commands
43
+ bundle.install Installs the Ruby gems
44
+ bash Creates a container Bash
45
+ run.tests Runs Unit tests
46
+ rubocop Runs code linter
47
+ ci Runs code linter and unit tests in CI
48
+ sample.hello-app Runs a sample Hello World app
49
+ sample.login-app Runs a sample app with Login feature
50
+ gem.publish Publishes the gem to https://rubygems.org (auth required)
51
+ gem.yank Removes a specific version from the Rubygems
52
+ ```
53
+
54
+ ----
55
+
56
+ [ASCII art generator](http://patorjk.com/software/taag/#p=display&f=Graffiti&t=Type%20Something%20)
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ Gem::Specification.new do |spec|
4
+ spec.name = 'chespirito'
5
+ spec.version = '0.0.1'
6
+ spec.summary = 'Chespirito Ruby web framework'
7
+ spec.description = 'A dead simple, yet Rack-compatible, web framework written in Ruby'
8
+ spec.authors = ['Leandro Proença']
9
+ spec.email = 'leandronsp@gmail.com'
10
+ spec.files = Dir['lib/**/*'] + %w[Gemfile Gemfile.lock README.md chespirito.gemspec]
11
+ spec.homepage = 'https://github.com/leandronsp/chespirito'
12
+ spec.license = 'MIT'
13
+
14
+ spec.add_runtime_dependency 'rack'
15
+ spec.add_runtime_dependency 'adelnor'
16
+
17
+ spec.required_ruby_version = '~> 3.0'
18
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './request'
4
+
5
+ module Chespirito
6
+ class App
7
+ def initialize
8
+ @routes = {}
9
+ end
10
+
11
+ def self.configure
12
+ return unless block_given?
13
+
14
+ new.tap { |app| yield(app) }
15
+ end
16
+
17
+ def register_route(verb, path, trait)
18
+ @routes[route_key(verb, path)] = trait
19
+ end
20
+
21
+ def lookup(request)
22
+ controller_klass, action = @routes[route_key(request.verb, request.path)]
23
+
24
+ return unless controller_klass
25
+
26
+ controller_klass.dispatch(action, request)
27
+ end
28
+
29
+ def route_key(verb, path) = "#{verb} #{path}"
30
+
31
+ def call(env)
32
+ request = ::Chespirito::Request.build(env)
33
+ response = lookup(request)
34
+
35
+ [
36
+ response.status,
37
+ response.headers,
38
+ [response.body]
39
+ ]
40
+ end
41
+ end
42
+
43
+ def self.application = App.new
44
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './response'
4
+
5
+ module Chespirito
6
+ class Controller
7
+ attr_reader :request, :response
8
+
9
+ def initialize(request)
10
+ @request = request
11
+ @response = ::Chespirito::Response.new
12
+ end
13
+
14
+ def self.dispatch(action, request)
15
+ new(request)
16
+ .tap { |controller| controller.send(action.to_sym) }
17
+ .then { |controller| controller.response }
18
+ end
19
+
20
+ def view(path) = File.read(path)
21
+ end
22
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rack'
4
+ require 'json'
5
+
6
+ module Chespirito
7
+ class Request
8
+ attr_reader :verb, :path, :headers, :params, :cookies
9
+
10
+ def initialize(verb, path, headers: {}, params: {}, cookies: {})
11
+ @verb = verb
12
+ @path = path
13
+
14
+ @headers = headers
15
+ @params = params
16
+ @cookies = cookies
17
+ end
18
+
19
+ def self.build(env)
20
+ rack_request = Rack::Request.new(env)
21
+
22
+ body_params = rack_request.post? ? (JSON.parse(rack_request.body.read) rescue {}) : {}
23
+ params = rack_request.params.merge(body_params)
24
+
25
+ new(
26
+ rack_request.request_method,
27
+ rack_request.path,
28
+ headers: rack_request.env,
29
+ params: params,
30
+ cookies: rack_request.cookies
31
+ )
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Chespirito
4
+ class Response
5
+ attr_accessor :status, :headers, :body
6
+
7
+ def initialize
8
+ @status = nil
9
+ @headers = {}
10
+ @body = ''
11
+ end
12
+ end
13
+ end
data/lib/chespirito.rb ADDED
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './chespirito/response'
4
+ require_relative './chespirito/request'
5
+ require_relative './chespirito/controller'
6
+ require_relative './chespirito/app'
7
+
8
+ module Chespirito
9
+ end
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: chespirito
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Leandro Proença
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-05-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rack
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: adelnor
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: A dead simple, yet Rack-compatible, web framework written in Ruby
42
+ email: leandronsp@gmail.com
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - Gemfile
48
+ - Gemfile.lock
49
+ - README.md
50
+ - chespirito.gemspec
51
+ - lib/chespirito.rb
52
+ - lib/chespirito/app.rb
53
+ - lib/chespirito/controller.rb
54
+ - lib/chespirito/request.rb
55
+ - lib/chespirito/response.rb
56
+ homepage: https://github.com/leandronsp/chespirito
57
+ licenses:
58
+ - MIT
59
+ metadata: {}
60
+ post_install_message:
61
+ rdoc_options: []
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.0'
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ requirements: []
75
+ rubygems_version: 3.3.3
76
+ signing_key:
77
+ specification_version: 4
78
+ summary: Chespirito Ruby web framework
79
+ test_files: []