From bf0e826a2cbe182e6eac0cd40c1098cdc9d5866f Mon Sep 17 00:00:00 2001 From: "Henrique F. Teixeira" Date: Sun, 22 Feb 2026 20:45:40 -0300 Subject: [PATCH 1/5] add include / extend --- examples/playground/Gemfile.lock | 2 ++ examples/playground/app.rb | 14 ++++++++++++++ lib/rackr.rb | 8 ++++++++ lib/rackr/action.rb | 11 +++++++---- lib/spec/rackr/action_spec.rb | 22 ++++++++++++---------- 5 files changed, 43 insertions(+), 14 deletions(-) diff --git a/examples/playground/Gemfile.lock b/examples/playground/Gemfile.lock index 3233cd5..5cafa71 100644 --- a/examples/playground/Gemfile.lock +++ b/examples/playground/Gemfile.lock @@ -92,6 +92,7 @@ GEM sequel (5.87.0) bigdecimal sqlite3 (2.8.1-x86_64-linux-gnu) + stimulux (1.0.0) thin (1.8.2) daemons (~> 1.0, >= 1.0.9) eventmachine (~> 1.0, >= 1.0.4) @@ -118,6 +119,7 @@ DEPENDENCIES rubocop sequel sqlite3 + stimulux thin BUNDLED WITH diff --git a/examples/playground/app.rb b/examples/playground/app.rb index 97cc872..213b3ac 100644 --- a/examples/playground/app.rb +++ b/examples/playground/app.rb @@ -40,8 +40,16 @@ def call(_req) end end +module IncludeExample + def say_foo + 'foo' + end +end + App = Rackr.new(config).app do + include IncludeExample + get do |req| req.session['visitas'] ||= 0 @@ -54,6 +62,12 @@ def call(_req) render res: end + get 'include_example' do + render (html_slice do + h1 say_foo + end) + end + get 'not_string_error' do render 2 end diff --git a/lib/rackr.rb b/lib/rackr.rb index 01b9e0a..8f4624a 100644 --- a/lib/rackr.rb +++ b/lib/rackr.rb @@ -31,6 +31,14 @@ def initialize(config = {}, before: [], after: []) @router = Router.new(config, before: before, after: after) end + def include(mod) + self.class.include(mod) + end + + def extend(mod) + self.class.extend(mod) + end + def app(&) instance_eval(&) diff --git a/lib/rackr/action.rb b/lib/rackr/action.rb index bd4af9d..6e928bd 100644 --- a/lib/rackr/action.rb +++ b/lib/rackr/action.rb @@ -143,16 +143,19 @@ module Action def self.included(base) base.class_eval do - if self != Rackr + if self == Rackr + include HtmlSlice if Object.const_defined?('HtmlSlice') + include Stimulux if Object.const_defined?('Stimulux') + else attr_reader :routes, :config, :deps, :db, :log, :cache include Callbacks unless included_modules.include?(Rackr::Callback) end - include HtmlSlice if Object.const_defined?('HtmlSlice') - include Stimulux if Object.const_defined?('Stimulux') - def initialize(routes: nil, config: nil) + self.class.include(HtmlSlice) if Object.const_defined?('HtmlSlice') + self.class.include(Stimulux) if Object.const_defined?('Stimulux') + @routes = routes @config = config @deps = config&.dig(:deps) diff --git a/lib/spec/rackr/action_spec.rb b/lib/spec/rackr/action_spec.rb index 4428d61..d3b0a4e 100644 --- a/lib/spec/rackr/action_spec.rb +++ b/lib/spec/rackr/action_spec.rb @@ -606,12 +606,13 @@ class MyActionWithoutCallbacks context 'when HtmlSlice is defined' do it 'includes HtmlSlice' do - module ::HtmlSlice; end - require_relative action_file_path + module ::HtmlSlice; end + require_relative action_file_path - action_class = Class.new { include Rackr::Action } - expect(action_class.included_modules).to include(HtmlSlice) - end + action_class = Class.new { include Rackr::Action } + action_class.new # Create an instance to trigger the initialize method + expect(action_class.included_modules).to include(HtmlSlice) + end end context 'when HtmlSlice is not defined' do @@ -626,12 +627,13 @@ module ::HtmlSlice; end context 'when Stimulux is defined' do it 'includes Stimulux' do - module ::Stimulux; end - require_relative action_file_path + module ::Stimulux; end + require_relative action_file_path - action_class = Class.new { include Rackr::Action } - expect(action_class.included_modules).to include(Stimulux) - end + action_class = Class.new { include Rackr::Action } + action_class.new # Create an instance to trigger the initialize method + expect(action_class.included_modules).to include(Stimulux) + end end context 'when Stimulux is not defined' do From 158d78ed0cf0cca7d3b61d53760208632ddd4bad Mon Sep 17 00:00:00 2001 From: "Henrique F. Teixeira" Date: Sun, 22 Feb 2026 20:47:17 -0300 Subject: [PATCH 2/5] update gemfilelock --- Gemfile.lock | 52 +++++++++++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 34af704..1bbb0e9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -11,48 +11,54 @@ GEM specs: ast (2.4.3) bigdecimal (4.0.1) - byebug (12.0.0) + byebug (13.0.0) + reline (>= 0.6.0) coderay (1.1.3) diff-lcs (1.6.2) erubi (1.13.1) - ffi (1.17.2) - ffi (1.17.2-aarch64-linux-gnu) - ffi (1.17.2-aarch64-linux-musl) - ffi (1.17.2-arm-linux-gnu) - ffi (1.17.2-arm-linux-musl) - ffi (1.17.2-arm64-darwin) - ffi (1.17.2-x86-linux-gnu) - ffi (1.17.2-x86-linux-musl) - ffi (1.17.2-x86_64-darwin) - ffi (1.17.2-x86_64-linux-gnu) - ffi (1.17.2-x86_64-linux-musl) - json (2.18.0) + ffi (1.17.3) + ffi (1.17.3-aarch64-linux-gnu) + ffi (1.17.3-aarch64-linux-musl) + ffi (1.17.3-arm-linux-gnu) + ffi (1.17.3-arm-linux-musl) + ffi (1.17.3-arm64-darwin) + ffi (1.17.3-x86-linux-gnu) + ffi (1.17.3-x86-linux-musl) + ffi (1.17.3-x86_64-darwin) + ffi (1.17.3-x86_64-linux-gnu) + ffi (1.17.3-x86_64-linux-musl) + io-console (0.8.2) + json (2.18.1) language_server-protocol (3.17.0.5) lint_roller (1.1.0) - listen (3.9.0) + listen (3.10.0) + logger rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) + logger (1.7.0) method_source (0.9.2) - oj (3.16.13) + oj (3.16.15) bigdecimal (>= 3.0) ostruct (>= 0.2) ostruct (0.6.3) parallel (1.27.0) - parser (3.3.10.0) + parser (3.3.10.2) ast (~> 2.4.1) racc - prism (1.7.0) + prism (1.9.0) pry (0.12.2) coderay (~> 1.1.0) method_source (~> 0.9.0) racc (1.8.1) - rack (3.2.4) + rack (3.2.5) rainbow (3.1.1) rake (13.3.1) rb-fsevent (0.11.2) rb-inotify (0.11.1) ffi (~> 1.0) regexp_parser (2.11.3) + reline (0.6.3) + io-console (~> 0.5) rerun (0.14.0) listen (~> 3.0) rspec (3.13.2) @@ -67,8 +73,8 @@ GEM rspec-mocks (3.13.7) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-support (3.13.6) - rubocop (1.82.0) + rspec-support (3.13.7) + rubocop (1.84.2) json (~> 2.3) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.1.0) @@ -76,12 +82,12 @@ GEM parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 2.9.3, < 3.0) - rubocop-ast (>= 1.48.0, < 2.0) + rubocop-ast (>= 1.49.0, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 4.0) - rubocop-ast (1.48.0) + rubocop-ast (1.49.0) parser (>= 3.3.7.2) - prism (~> 1.4) + prism (~> 1.7) rubocop-performance (1.26.1) lint_roller (~> 1.1) rubocop (>= 1.75.0, < 2.0) From d0eebb522947f2480c4af4fcd17df87d9b8cd1dc Mon Sep 17 00:00:00 2001 From: "Henrique F. Teixeira" Date: Sun, 22 Feb 2026 20:51:36 -0300 Subject: [PATCH 3/5] run rubocop --- Gemfile | 3 +++ Gemfile.lock | 3 +++ lib/rackr/action.rb | 6 +++--- lib/spec/rackr/action_spec.rb | 24 ++++++++++++------------ lib/spec/rackr/callback_spec.rb | 2 +- 5 files changed, 22 insertions(+), 16 deletions(-) diff --git a/Gemfile b/Gemfile index d51bf32..4aa5ff6 100644 --- a/Gemfile +++ b/Gemfile @@ -7,6 +7,9 @@ gemspec gem 'rubocop', '~> 1.21' gem 'rubocop-performance' gem 'byebug' +gem 'erubi' +gem 'oj' +gem 'rack' gem 'pry', '~> 0.12.2' gem 'rerun' gem 'rspec' diff --git a/Gemfile.lock b/Gemfile.lock index 1bbb0e9..dff3927 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -112,7 +112,10 @@ PLATFORMS DEPENDENCIES byebug + erubi + oj pry (~> 0.12.2) + rack rackr! rake rerun diff --git a/lib/rackr/action.rb b/lib/rackr/action.rb index 6e928bd..69e893c 100644 --- a/lib/rackr/action.rb +++ b/lib/rackr/action.rb @@ -144,12 +144,12 @@ module Action def self.included(base) base.class_eval do if self == Rackr - include HtmlSlice if Object.const_defined?('HtmlSlice') - include Stimulux if Object.const_defined?('Stimulux') + include HtmlSlice if Object.const_defined?('HtmlSlice') + include Stimulux if Object.const_defined?('Stimulux') else attr_reader :routes, :config, :deps, :db, :log, :cache - include Callbacks unless included_modules.include?(Rackr::Callback) + include Callbacks unless include?(Rackr::Callback) end def initialize(routes: nil, config: nil) diff --git a/lib/spec/rackr/action_spec.rb b/lib/spec/rackr/action_spec.rb index d3b0a4e..f69e576 100644 --- a/lib/spec/rackr/action_spec.rb +++ b/lib/spec/rackr/action_spec.rb @@ -606,13 +606,13 @@ class MyActionWithoutCallbacks context 'when HtmlSlice is defined' do it 'includes HtmlSlice' do - module ::HtmlSlice; end - require_relative action_file_path + module ::HtmlSlice; end + require_relative action_file_path - action_class = Class.new { include Rackr::Action } - action_class.new # Create an instance to trigger the initialize method - expect(action_class.included_modules).to include(HtmlSlice) - end + action_class = Class.new { include Rackr::Action } + action_class.new # Create an instance to trigger the initialize method + expect(action_class.included_modules).to include(HtmlSlice) + end end context 'when HtmlSlice is not defined' do @@ -627,13 +627,13 @@ module ::HtmlSlice; end context 'when Stimulux is defined' do it 'includes Stimulux' do - module ::Stimulux; end - require_relative action_file_path + module ::Stimulux; end + require_relative action_file_path - action_class = Class.new { include Rackr::Action } - action_class.new # Create an instance to trigger the initialize method - expect(action_class.included_modules).to include(Stimulux) - end + action_class = Class.new { include Rackr::Action } + action_class.new # Create an instance to trigger the initialize method + expect(action_class.included_modules).to include(Stimulux) + end end context 'when Stimulux is not defined' do diff --git a/lib/spec/rackr/callback_spec.rb b/lib/spec/rackr/callback_spec.rb index 8f64f5a..48cac47 100644 --- a/lib/spec/rackr/callback_spec.rb +++ b/lib/spec/rackr/callback_spec.rb @@ -13,7 +13,7 @@ class SomeClass3 RSpec.describe Rackr::Callback do it 'includes http router action' do - expect(SomeClass3.included_modules.include?(Rackr::Action)).to be_truthy + expect(SomeClass3.include?(Rackr::Action)).to be_truthy end context 'not returning valid rack request' do From d363516eddf03a54b8432707427b73153052b066 Mon Sep 17 00:00:00 2001 From: "Henrique F. Teixeira" Date: Sun, 22 Feb 2026 20:57:15 -0300 Subject: [PATCH 4/5] try fix ci --- .github/workflows/main.yml | 2 +- Gemfile.lock | 127 ------------------------------------- 2 files changed, 1 insertion(+), 128 deletions(-) delete mode 100644 Gemfile.lock diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 733affe..3d5bb8d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -22,6 +22,6 @@ jobs: uses: ruby/setup-ruby@v1 with: ruby-version: ${{ matrix.ruby }} - bundler-cache: true + bundler-cache: false - name: Quality run: bundle exec rake diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100644 index dff3927..0000000 --- a/Gemfile.lock +++ /dev/null @@ -1,127 +0,0 @@ -PATH - remote: . - specs: - rackr (0.0.69) - erubi (~> 1.12) - oj (~> 3.15) - rack (>= 2.0, < 4.0) - -GEM - remote: https://rubygems.org/ - specs: - ast (2.4.3) - bigdecimal (4.0.1) - byebug (13.0.0) - reline (>= 0.6.0) - coderay (1.1.3) - diff-lcs (1.6.2) - erubi (1.13.1) - ffi (1.17.3) - ffi (1.17.3-aarch64-linux-gnu) - ffi (1.17.3-aarch64-linux-musl) - ffi (1.17.3-arm-linux-gnu) - ffi (1.17.3-arm-linux-musl) - ffi (1.17.3-arm64-darwin) - ffi (1.17.3-x86-linux-gnu) - ffi (1.17.3-x86-linux-musl) - ffi (1.17.3-x86_64-darwin) - ffi (1.17.3-x86_64-linux-gnu) - ffi (1.17.3-x86_64-linux-musl) - io-console (0.8.2) - json (2.18.1) - language_server-protocol (3.17.0.5) - lint_roller (1.1.0) - listen (3.10.0) - logger - rb-fsevent (~> 0.10, >= 0.10.3) - rb-inotify (~> 0.9, >= 0.9.10) - logger (1.7.0) - method_source (0.9.2) - oj (3.16.15) - bigdecimal (>= 3.0) - ostruct (>= 0.2) - ostruct (0.6.3) - parallel (1.27.0) - parser (3.3.10.2) - ast (~> 2.4.1) - racc - prism (1.9.0) - pry (0.12.2) - coderay (~> 1.1.0) - method_source (~> 0.9.0) - racc (1.8.1) - rack (3.2.5) - rainbow (3.1.1) - rake (13.3.1) - rb-fsevent (0.11.2) - rb-inotify (0.11.1) - ffi (~> 1.0) - regexp_parser (2.11.3) - reline (0.6.3) - io-console (~> 0.5) - rerun (0.14.0) - listen (~> 3.0) - rspec (3.13.2) - rspec-core (~> 3.13.0) - rspec-expectations (~> 3.13.0) - rspec-mocks (~> 3.13.0) - rspec-core (3.13.6) - rspec-support (~> 3.13.0) - rspec-expectations (3.13.5) - diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.13.0) - rspec-mocks (3.13.7) - diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.13.0) - rspec-support (3.13.7) - rubocop (1.84.2) - json (~> 2.3) - language_server-protocol (~> 3.17.0.2) - lint_roller (~> 1.1.0) - parallel (~> 1.10) - parser (>= 3.3.0.2) - rainbow (>= 2.2.2, < 4.0) - regexp_parser (>= 2.9.3, < 3.0) - rubocop-ast (>= 1.49.0, < 2.0) - ruby-progressbar (~> 1.7) - unicode-display_width (>= 2.4.0, < 4.0) - rubocop-ast (1.49.0) - parser (>= 3.3.7.2) - prism (~> 1.7) - rubocop-performance (1.26.1) - lint_roller (~> 1.1) - rubocop (>= 1.75.0, < 2.0) - rubocop-ast (>= 1.47.1, < 2.0) - ruby-progressbar (1.13.0) - unicode-display_width (3.2.0) - unicode-emoji (~> 4.1) - unicode-emoji (4.2.0) - -PLATFORMS - aarch64-linux-gnu - aarch64-linux-musl - arm-linux-gnu - arm-linux-musl - arm64-darwin - ruby - x86-linux-gnu - x86-linux-musl - x86_64-darwin - x86_64-linux-gnu - x86_64-linux-musl - -DEPENDENCIES - byebug - erubi - oj - pry (~> 0.12.2) - rack - rackr! - rake - rerun - rspec - rubocop (~> 1.21) - rubocop-performance - -BUNDLED WITH - 2.6.6 From 3bd89d69aa20eea456e3562cbd8263c0a1e94788 Mon Sep 17 00:00:00 2001 From: "Henrique F. Teixeira" Date: Sun, 22 Feb 2026 21:02:12 -0300 Subject: [PATCH 5/5] try to fix ci --- .github/workflows/main.yml | 2 +- lib/rackr.rb | 2 +- rackr-0.0.68.gem | Bin 13824 -> 0 bytes rackr-0.0.69.gem | Bin 14336 -> 0 bytes rackr-0.0.70.gem | Bin 0 -> 14336 bytes rackr.gemspec | 4 +--- 6 files changed, 3 insertions(+), 5 deletions(-) delete mode 100644 rackr-0.0.68.gem delete mode 100644 rackr-0.0.69.gem create mode 100644 rackr-0.0.70.gem diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3d5bb8d..733affe 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -22,6 +22,6 @@ jobs: uses: ruby/setup-ruby@v1 with: ruby-version: ${{ matrix.ruby }} - bundler-cache: false + bundler-cache: true - name: Quality run: bundle exec rake diff --git a/lib/rackr.rb b/lib/rackr.rb index 8f4624a..f08756a 100644 --- a/lib/rackr.rb +++ b/lib/rackr.rb @@ -7,7 +7,7 @@ # Rackr is a simple router for Rack. class Rackr - VERSION = '0.0.69' + VERSION = '0.0.70' class NotFound < StandardError; end diff --git a/rackr-0.0.68.gem b/rackr-0.0.68.gem deleted file mode 100644 index e68a1f224857ef8ce1ef22b97d6cd9f3951a8064..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13824 zcmeHtRZu0$mL={^QMkLiQ$RtX2bTjBcCf%QgW@qQ(g<$7q z=j7n!WMk*$gE==V?;Nm4*y_^q8$NHw>31+DpQ4Apa-oE_q}d}#Re=DXWE{3acJTBF{jr8WkL0{BxS*X=SS*@}-xHdoT{R8MuhMx*ynz4* zw7|YCuqUpJ*MkYjUX7`^{hOsd?CpBp5=Z~@Oa^8cd6-O%o$yPp%yIJ4|beL1mSseu$W68KT zA+e6Oj6T)6TWsHC+mPj)J5yG$tOA`W@@0hpT7US1L}If6QslEb-d?x%%$dpsH9X7Z?}BBP@aO=(oY4xQVx|p0 zHc0Kmk;(yoV|2r;- zf8+kY81Vlc|8sEgvi&do&&kX2H~;_NNY8)r|JfHyM?&6&=Lvm(=_Z=t;?huk?MA9q zOUBfB>gFkx>XV3Vc5yUm1-Z$qA0hQPGT`^==tm=IhWLhu>c*yP3^Oi2xM?%4cESdy zR_%d8bcqr?pWF10hlj_993l6+-y~qik9FTCV_R_M`|v9|dXDhgs_#oupNN;&)e~X; z<8S?|7N&|;ko+^>Pp4)m8{O{JwwgWL%&5pW*9_FLa_NRqPztay%v4te2k^)2(;Ya) z{3|?c_Mp0lf($n8_(i>}sYwHmAc?wp&cb2r&WhDY_X&A~*C@fP6<719r!<+ljG;>L z?O+sEj?9p|e|q+i+2>Shcq@#XP1;LEU$@r~qWA+n)0*48OB7Ucq62w7?^M=?Afkjh zhRK9hX@v+1)*Q?XYKUfeJ=Q~H<@JD=SvN^K(KrhNjksxAF2qi*HT})=Y_Ut>s9ImwX1g$4Eq|6Ea6>MOxqM+UGXS0ecc@QX|M(o0xU7 zm?|u|NxLDF7%M+7rzSU0eFXSlKh958fk(Eao?v?i$&IcrUnpx7eT4W0$uE6`DNQf+ zy9LN?H?!GivlCodr}VrxFQbrUeM|hPeoHo(h>bF`J4wz?vEf4u**@}R*AlSStQt$N z*v+sU->*`UG;9YdZv4bG6p9`3d^<9}E2OI&zxGwvdZV574k|YQHeJ|fnGY>G^AtdP zkQfzcCF-Kg$#V7-Cdi#FlOfAd;3YWy~a1GlwcEj5;K-nlVNmep*y*_(8V1w_%qOE366qCma_!#JpEIj2|iOk3+ZE zkRK(}0)}?Fra1i&p<}=mG4xeu#HizLM%B zceMoi)vEfSQ~h+^@JpOOZm5Crk%EyL;nqc`9=^-A(3=}nqy_1u$ufd#xktY0u#bNw8 zKa9SkJn;yE0Bu41Y>|ikR5UUQ)ozo?O-Y~am6K8AX5kJfvRTWKyM<)A-TZqdh4dOP zoGZMPBpJ7nUI>ZR_Y!oHHHyys?9@?(ix=+PD^{!}_dEi>OI}k{*&&DTP13AxSauKO zB>xt62i>1S9z%KyOb^5i^}<0Q-@#H8EkK0C81yG(Z!QagqK&E&o4Sa_Xa$H|#41u) zaQd+7Z&sXSI5UKJ{pX7~;47HsWI(l9Brir&VFgFWcM9=yCyR@W+{7KLsW!AV9qXyf zNmWyG+6uNuV?T`rw8TW}g2fIRGY)DKG?^Dwc1+s+&DZ=5n&Mb)ZbHtzf~Dt$dYYww@%ge#V+V5VbAg`@5gfD7=bs(Q?+6uctK4-3^E7iW+(%!gIe0(~B;9bY=NVR13cAH+ zh3U*oiL2kaN##NA#kZhm6xFx`IaN=<77@lLA9ZpT?l5drn{=xXh82HKt2&Ly6gECz zbg2g;kd=9-EL2h_)eX(a`oz;2r_mW&;RSOHu67RF7Oo?6tsrdC2n*2hs%Uo`3D-Vd zT6ACv*C07MhheV#uWYr`;r>)sCT)Sgl1&93;d7IbXrN&7%^eN6?yUThH(;_PB&|n3 zqb56EX=hu5e)@A|{!5~%5@f9{^i@Bsaws7YzUYd~_}8~i=ZJ{mu(b|al{R2_Hm*x% zy!?R*)3QQa+D{y)y9a^n$;s{<#PYh&X?fNBpRj0YSrL{k-t~gH@d(Hg3`2xX8xj@U zM)0kYMQoi7;3V?rYTHJlt~m~cxYob3xxMk=!XAmsa>8CO(W`Lz)yUN?#_(62v%kpy&HE`5V0KOA+StGdDbewn0)ABWc)8-*ROxvYmDp~S?I`)t-Ho6ojGu>}VV zp^Eg*tExPNlk&fL_%n;C(IC?2jsp-?S1Bdnkk)bFtqh2T|`K<*x zn}KZf^oP>d8$YsQsIc_tdwRCB82e_Iqij++*<0%{QMVCWHGN;UOA`B5z@38p+%e}$ zxPl7(A{~)hSwG}Q#fulbXdJh+P2PaN$eTwW61Bz@fTEwJRi1D80K;-raly(sJ(Q|A znmYTA@TgQ@o{ZISa!XKP=+ZBJ{-mcq{d5Sug&mhaybijkx6S_O2z;EIyn39U5J7+< zq6?duxBlav;&iZ&hG8gcO0ZPQq%JZ(D=oYH?^Bi~BLMU^*c4d593MCv zzuOw6494;)&2ma&j9PwiQrj~Tt`=aTUQ?1Htz+l96_IPOO}QDd88L9jg=v?#D*|Mf*skDvOlBUwDKjNXc5JXE#ofY9@!{ChGKxa z_COF9;aDiU<9IqR3Df8=yL{fD$Yp8Mw-I_IqKFE%XiHZyy? z=a;>%HXPIyd|SWW)&-_xtF^V+GrsJ)L;yRI@xGR%lsaExHvR6toXHP&NoN`iL7ga> z*;{|LMUV6|(8$0^RJP-a4)ZBQK-k>#z*sLfq)4*`-uR5f zTtaZ=CS-ki)r_aN`I%`NslVq{`%^?>TqKi+1UY_%VqV5$Xx$3?-DeBy-lh1SG;N4(Hz!_ z>&eYbw26#1!HrOwG_8Nxhs?vIZ1;W@o59$p-cBs~XHjoJ;ybeI!g1K|rXcS9XvyTPScj{o7 zKC`iLqqU?A6vc?A_0cGMIKFZ-7qNr&EmO^Xs4t6Wr#pNO-Z#w^ku}KUa-?x)L2`Pn zb-8vNM@!T=*+8@PdugHp!Z)oo20k8HZogk+z!n6_dN`ogBHR!xLIcweJELVRT;ib2 z7xO*sD4aC25_c_$CD59>{CmKX_C0qnpjCs+1l~4?Uv7Z03G&MTEFfP3a4F7L|9E*A zIac5$0Q_-!5TiV8p=G?&I(-U7dFD8IbjInh8PK(~9++3HmwKDy!>4)`Cd>;!>_?~` zzhrMKnn7zRa3N)Din;H!PDTh^K zx!}n3e7AsNKcN5PXy*NnWOxU3R?G1wAe83HK^R!1=i2+T)^Ay6*R?;clo^){gNsoZ zhg^!L3-sv8iGvoFhdV6mVqTKNRH(avyTc|vv6=4C^6KN8_REBDu%is0i>2k8Lm*%V z^tN!C?B|=3$%jx?rusWa?P|$bqZlG|+~2liW>k}u5V3saq^)>wAes{ftRWp%YC(Y= zP(Hy!J(q|Ncr21fyczJk;KV%?uQ@e+1Jfeja@VfQBfi=W>GlO|-Lg#!h!u3zY5gS2 zPp2|BDNg@ZSLxrWklrSZ$@$f#1~UWMO_@?Iua$0!+PxQw7UseRGO0JIcymuZ0#RIX zpV<)tqZo$=eCpC;lt;`r(%cvuS}&FnxXTB zfQhlSce8y=wxJnkVOb56Q)zAxk3OH&;e_L$QoXQ=XxRw{+>&3YXY#Fu(diHWxDnH0 zeLjUM{7zp6^eRn17oaysTJylkBmjV=N~|sZA)+4G)8Zca5_@i*(Rv|_35@-a`I%d7 zvwL3b3V4w$JmEP$)_?c;5~`q6;#_2%l`?jOw6?Rl5pzPWg4VFPNS;9QZa}nJq=|N` z+Q)67c0BCu^9qf`xnLD!{pWSGfC>9eTu=>#lc4!$ zv*HB>y!4bp5Uj{N9oLfuo@d3-xYA*B%3vi4vzhUiFHDTv$Dk!3oq~v61x2jzi5TJ~ z2`o(%DX5vemIqR%YEeMx)dTTa0u|w`F?zb4XM&TUS&=beaCRelEVxrIGRRY{|2{DI z{9HUUOW)t_)nCvDC{e+0)-2;#g0Gu+K7M=3Je&`Fau=rjJt_EzjmNY3zCQh-{rz~O8}`ZK)i&jEJ{o-cv^ARj z{+J2^pJ!P1sO6)PVNKdbxluL$E=A;fbwsvtD#m(H_|y85d>nm0T(dP`lBDjM-GDRy zOM7lCw5JZ0f@L9ms7>%RXq!oGc}u|Ss_IK~TwsMH=T?l}3Il$fY2z5@apyg`ArV-o z&e3Sx@TYL@W|$tB+ z_XWtxG5eQlrAXd_P$(Lrr}|>!MO|q<2+=ee~b|)pfL>(x8Yw9IA&Z)G$<#%VI?r2)%?R9 zlw@(T&$>{;_UqJe765qMUQ8ehKSbyjbRccR5S$A-l3TCf`u?`t0Qzwa=X9B~|1=L0 z-4AzE!!7u^Y#_qYEhC5Px-rh{LJE9|6?qhckjWZvon+jnQu$k-Ipw9^QQO6@M$ykp zQfHM_P^zMBkXGc@H~xA$ZKfNaC1V*^wv2x*@5l?4Afi$HXc|o!`<3|~q}a}4Uatz% z)oSyn*e?F?(<@Z5h-Oq>cW&qNrQYrPxCWRXq!0RV`j)|zIe9Zk^oB~nXw9zol+(i+ zbV?0q5CdH8jj-@d_oiCtv|1Kx>q!K1Mlvetes@g5GEGl+PpoyjH#%FK#@@KaGd9k1 zQlLg>-BI1tqXX`C1)G}P+rhP3Fw9@-C2SOSNm=V~bRA@NQfM}>Tqas>GUqk{V&V@& z(B0qqRqcAFk$IPmNkr`%4)h>7;WL{UXFX9oAU1ADm+d=8(l9h=zqyZhAzYDH z2)cB$H!)pfELd_0#-cpB^IYu`nV!4XjMB_J29j=gJvOgsEIN%;!lK99T`GQ@9wyFl z_O%YYKog563en2*Xk``=hNyjvZb3}-qg)|PG?&`;E9wb^G0o)DsZBUE;+j`#bxhM_ z&vVzt7C(FWFMstEJ$&Z3^0pTUjJC9N1@NT2>W$;f9^5+Rr6Jf@Lw9w5mlPsQ^zaxs z^{g?l@cdJI2sbiVsRuXxMp6&6V$vm^(O(GDZpe< zZCk4lX5NBGA5-i-k>CAD>=_(VJ`sNlGjR$fa z-jI$j0yOhgYc#8t9%wwpHza<{r1^AR#uRWP>tTU9ga#E}>L0Nv>ldDtAA56QEGWc& zokdBbeKhtwzJ!gSFTDy+H%TRIs66d;E|7fCn<*Rjze_Q*NM46}+@EA`xHe$@IrK)Sp* zk2$$w!VJ0b$+fYz|ErbOFb!U)Xy1@g^?iLbHDeI>Z<&IqQ+By{G=(BcEB^Q}(Qt!d zlG%0?OI3)V6p5H*Mn(<_nx$VuCX6f^dyHLb;})l=vRBn3P-Dv4MD}DH^m5MWy((J@ zYQMaVp&sa1u<#4f(eNKLQAI{luk<_8&~LS<(8!5-R6k>crsawY2vr|}l&9@qMum>@ z{Lpwmzhu=lb$B0#NPb=_uOxcXL1@VQig-=<1fq*YM!7-t!0jvi9S#D*sFK%!`uNmqOw+OIe|p62J7uhgY;Kx#^BExXjA$XZ`-MlLj?V^KQ5CAJR^~^Qfm3JS}vlB`Utnfv)=06Y*r})a8s_nEA zGumm-mNY(gv$g_twj9n?#jm%DVQ|#2*o2sh)9Mj|;{FbPS=kt8uXsE;IDbUpzq&za ze49TM2#y|3jAQ|a7@3O{Y{~jAVl0hqK~pQ-u0~}>d1r^Q*u&8V^ec)*b6*=1L$b(6DXW%}b z5X10vX$)(pPMPx{Gbij*Z39)D`td&Pg9+m8uEftdOcJI`AVB@S{%I+oB`9aI!SFu zzVr2qBWNqJzbw*v8wl%*d_;HOA{r-^FVy?aaS9~jbB2@c0qyLrP0xAm{D&M?oO(3_ z6h-G6y=H7gm19bM*+MN&ypolrQk-tl-}KAi2u_k58+UzPb=@Mf2}9R6#Cm0-CRlR9458mq(9yDnl2Nx9 z03#f6y3YcJ%F=|DN-7qr3~&${fSsP`+|0(FCRUoVaaGtxP4g3D>01{R#+e_RvpJum zUk##ws$z$tU51?m-Q2(=f|?)LAkTn2?=F{0&IYK>1QKTL4=&(LN|mHX%a2Kum2yD+ z%Q*Y#lhtO)D=l`%kWc@TmctLDQpblc&I;a~);O_zC%x6m+6AcuIe88y_{?yjvxm(7 z^yM?4#C~zDbkD42#GM)OB#x-v>xGEVA&R7Uc*l(r#29mn zhm9p|&C6+7WQkU{_OqXd=dEM=jVbQFI^&+v+17GWEmUh%Ra3jYF*t$@znhX?BMA?) z3Y*Z|LL;ofy|e4gq&v;N)9o!|7!{SH#s^Ck$gRW^&_b@T2F}pSa3y$9SM^JM8L-4Q zGL3gzOYuzXrL+Qd`d2T?y6|A)mRP{Ma<$oV&&_2=TI^6$8STG9tmb#`i>#RcAS-QH+=@(93Sjfa z9_IPjA$l>=qkFGIMX#?v7p_8b!!ql?j*U4iB}JT>!RkX5a~>cRYfstmDVb}D2}9Y6 zO?SXqyt~dO2NUyB#e%gr(0viXzHfKE-r)V?#K3pK4={BX7|PMu6_JJfcT-1z-5qua z>loSv@vhwhY$;2FEZ@|X8SXQl@2{Z52imX%TsMuh8dXNH;9lF9vM-z-VlQkV2!Rgg z6qp8k6!x9?-VY@FP`H)Bml1`@YY7nWhm11BldkM0`=Py9p|a%IN_TYqK)uN~O;{p6 zuH2c|Dy$yof7-7LF;D@c5VA|@0HT0#)+Teo%$&jB{$dlE8Or0{kTpj^+%$?$=&N?y zJnB0A?fRW2yQ|)&i|uU|HS>fAs<3;x10L-i;xNL?XP)46WDt^t>z+;&z7;AE*Li?p z0ybHF@U%d&bcNsu{e#yJMQkaI?0zi&jmacvco3q^fm(>{Rn$7A z&7>t!s)wC2l7z(+C9paf$B15=_ZUMZ)swmE0!?6eY{M(B^7V;ACQmUmigbTv53eg_ zuf2;#YB;omA~ei~GQ?M*XGsC2X?AM2pz%3QRWEEU-py4mgXid3*;@ae`#kTvPs?%pyY zyp!h7g(#AqdCZwQqtFha_28iv>6or90G`l(J!V8gvY)KU`}7v#OEUBiSQO)FOu zfR?PlRWp3keTC77AbSLi3p`p_vsf3&XC~Hm<5v&@7#R{7!9}>NG}rh1ryP2KxAvUN z`u!wiw(as!XzaFcCYMFZ2V}sjS;C!{$>D>zyz5M_$HM`vcIbweU{LsueEBh?cEyoM z2np_cOiLbmCr9P_2N#S>?`}`h2&|Bw9rrJz2Z69l9Qg8n(~%J3wy1R^id;RtTXa|N zS)z;f$Ymo)XY$tRuCXw~J!ALyw<{SEzC{8>xbG%pljOp2^~!v?nYp0TDc`mFBOV36 z(@Edh2h!EUp1`hmTE)vrU;XZnnuDU2V?7q3S_>CP8$D;i*EVd2^d6EM+>7(&DMFhI zCBimEmW7S_M>!kxvr_>kl(ef?D^^3fFl*`iX|xZ5)^URHJh%@$SKbFLwu>gt2}ZXj zr(Evh2~%^i=0qw)oa~Fp2p8d5CyuIi{LXM5Paq`$f}!+Vc25H{C(3u0Wi{;5ui%yU z*Nx2_M0?}c>)qigo=WEqok^{qqUg-xY{v#dBvmlOiy7(|TA@iIwV047O7eqGoX!B5PR_Z8yVx>?EK) zTe0bnifr5g87_CPDxX^whw{@Q-t>d}*DOK&aUCT`@F1yRM)v|Td$80a~a0s$eIbG*%&7@w72 zhJum$&C8X2wo2i|q-c@ryUdIvYy$}6DYxX3C8h=B;+m*Y^Pg=+`*m_KUJk=rqB6@G zKY%(Pww5hRulu_;rX`!c7%Mzt7>XKeE=_LNheYzWJ&K*6l3#L4$@Si(CKU#s)Ps!W z%*wDZ&G-e(HdE{4-(i~NAZBUkL)zrN!rTAmo2M@F=wsF`FPOx{ohFmq7^-WoU2K-= zM^MLuyf1t$_fv)LM{kg7^{q1yuqnWr`<0KhFf}s`QM_WPC1JDX%^sFU4`<)9`aTkkC7P`Ty7w5~~dj4fA6aV@oHS-?)15eji4mVmyUe+)1BZ70SZJ`^)PQWoVI z^B57&VVcG>s$($sthmDu9U_iV?57qtqlsk^TZifV+%cWp`;?Q@%Tgy;wRyP(7r`$3 zefYzl5PUhBNE`c)ln#6!2AFhCr3k|Z?Gj~Sx4LxhNs0K}$%+m}zhv+j9161q_Ua!P zs0f(zisAbFd6%PKS1;n(rRIMIv{PycYV|fuJlJDc6RSPn0&&al#l|vG=V|I9utF82 z)esuD_OyTcQ+~6=qrjpBYyhFzVA?YrgL!{V{h1++Fz!`7g z#d#mXQ!w6~>od5Y7X9)GywnSBOF)Z$R|`@F@S2%lqYRQ51(ifqP}#?CU7ChC4fXkq zOzvu(NVXd9TWp;g8ZM?{aE}n1a+-~{@CJtTB4>X6C0G02w z(xa_^nv*Rjy_p3TH0Swq`d`OIygS9>);CtSS=Uq7+xgHtkx5zU8+L8s%0E-W*wH0n zTsUs{U*J{ue%wmbL;rZfuz7+ObS5heljD|O?LrgS9c~X*jq|K=nA+qY0FbI+CF(yr zyy6s*Jq6>u|Dj3j{H0WNw70OO_%w2weLO|qNs)r zT_T8V5V3;G%*Y^)S4j4Cckf{Ru3*D!(q9db;*8M^-Ma)#5yGN4tEWVbCVxNX(F(GpSMYjrX=#A3<} z+KFV#o#Upog}Yw40~v?fbwyOtfOI5upO%1dOP=Wbie$U%n6mQk)MB-Jqdk#vXKQWj zh>-7Ixk9`glFwe4u?#4QYwe-CpW|6bMeW1lYAs8KGU9*_5nA>^{p4teSBZ^e}FACZT}Nx#!O-`HGXhjTDG+Qpr({@^n@EY)>2 zEH>T%ZTVXeoXhO5p_hR#VpX^=?oLIsNfSJE|^NNlCwTSkGGBf4H`Q z$t)z7dfvJ#0ECzX*{z;2o>_M3k2-q`lT}9i2ug(}LU&2*E(%&{B?tw7Fk+Oz6ldM0 zu(Ryq$E|lxokvGe@>Li=R z+%3dw#Fq;A`k`;Jli9hu&pr2V;P`Pc>H0d@H~h^vGtZVb9=(FTxJLhRuV$#swD-Jp za7_XObsp~M-L)t0t>K%ZD5Y1%m>ne|c|y*wKFU +|%m#?;`9&60@pDa=%u>$HB zxfB_di)WALeV+SJf)UX|6fk=ANWGosW<7*Ojm7H6(AF#O$Y?QkM`N5zHsTnAV}Dxp zd;5&}gHoa}Ao2nzsMQA5rl#vKH@RWSag}uA%`XFsq7$t0)zB%8>gzRUhLuWn~jT`{a^Io zTs-W5>;L`}xB4G<{ipuVB>syHktl-X>z6@25G9_^aCXNXKO{;VgZv&t$<(sREF_j< zZ0yqM{nPckcX;=goGJZxOdQhd^TXVhL%cz@?}IMb5M??t>p~Gtv7z;U+JCMLeWN_3 zl&_9qDtW!>)+D`tjcmzAhkb^LNPmLhyxIQaQARk85*yd3W`JD_3r)Q5eRVNdQnK|j zg)J4c^i7lLduH@*-bDQs3Qd3(z1nVq68FgR)e3yk-Jbe1-gx(%_^u-gjYmb~EO|uo zmO)`A1Al3iyzAvB6fWhr$H_s8w(!qJ*-?5N9(=L}G?5fobQrb{rQ|8RtYW5vad17L zb~x&&T0_|Oi$*OaJNL{iw9P3lo5%VeRFP$$m+CniJ4t*Yi7lvK<{|&%fd0MmZv_5E M;BN%}KSAJs061^*vj6}9 diff --git a/rackr-0.0.69.gem b/rackr-0.0.69.gem deleted file mode 100644 index 127bf75575dc455f9c670ae40b8d0d4260b28767..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14336 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 BfX4s; literal 0 HcmV?d00001 diff --git a/rackr.gemspec b/rackr.gemspec index 3b49dfd..e8fd51b 100644 --- a/rackr.gemspec +++ b/rackr.gemspec @@ -1,10 +1,8 @@ # frozen_string_literal: true -require_relative 'lib/rackr' - Gem::Specification.new do |s| s.name = 'rackr' - s.version = Rackr::VERSION + s.version = File.read(File.expand_path("../lib/rackr.rb", __FILE__))[/VERSION = ['"](.+)['"]/, 1] s.summary = 'Rack first web framework.' s.description = 'Rack first web framework.' s.authors = ['Henrique F. Teixeira']