jeanine 0.7.0 → 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d3df31123e22ecf9f1dd465af168aa34b3199e75
4
- data.tar.gz: 9fb4883db99cbf0a30b4895064bcb10f00896c6c
3
+ metadata.gz: 88de5348121b7c5c778d523251999fdc88b6fa2b
4
+ data.tar.gz: 1032b93658f81998494037f7dc9eb1a16a1bef0f
5
5
  SHA512:
6
- metadata.gz: e871411c10b283ab9ad26c5b568870e651dc25110cb1e5ea842e607dfe1d3d28dfac640bb574cfe19ee0bb01575668e1906fdbd2c9d5304e0c85a75977d3bfd4
7
- data.tar.gz: 214f87e732bbfa864f5b64574c27b4a284c260c7447dc867af01a94da52edac49308d427da84c19846b8c540a2309ab3d81117b99b6f4330df04b194b3b5c65a
6
+ metadata.gz: 85b1a10571b6e8cf08bd8b2d1497eb4e47651dcce1f4c31546bed10368b53e3e8fb2d5f215006ab450af316e5763adb8e0640ff1fa2ddad84300947cafaab766
7
+ data.tar.gz: 357e9d198d278167a330b9ad00ff0b5adcdda551690b157adb17b4bea3e99fa4e79cca2f4b6a46bf1ff22faa12dbded50961034132d3b2387bbb7130e38043d4
data/README.md ADDED
@@ -0,0 +1,228 @@
1
+ # Jeanine
2
+
3
+ A Ruby micro-web-framework that gives you enough training wheels to be productive, while being as nearly as fast as Rack itself.
4
+
5
+ Its design (and some parts of the code) is influenced by/inherited from (thanks!) Ruby on Rails, Rack::App, Hobbit, and Cuba. Without them this is nothing.
6
+
7
+ ## Name
8
+
9
+ Named after my mom. Because she was the best.
10
+
11
+ ## Installation
12
+
13
+ Add this line to your application's Gemfile:
14
+
15
+ ```ruby
16
+ gem 'jeanine'
17
+ ```
18
+
19
+ And then execute:
20
+
21
+ $ bundle install
22
+
23
+ Or install it yourself as:
24
+
25
+ $ gem install jeanine
26
+
27
+ ## Basic usage
28
+
29
+ Drop this into `config.ru`:
30
+
31
+ ```ruby
32
+ require 'bundler/setup'
33
+ require 'jeanine'
34
+
35
+ class App < Jeanine::App
36
+ root do
37
+ "Hello world"
38
+ end
39
+ end
40
+
41
+ run App
42
+ ```
43
+
44
+ `$ rackup`
45
+
46
+ ## Advanced usage
47
+
48
+ ```ruby
49
+ class App < Jeanine::App
50
+ path "/posts" do
51
+ get do
52
+ if request.json?
53
+ render json: []
54
+ else
55
+ "Posts index"
56
+ end
57
+ end
58
+ get "new" do
59
+ "Posts new"
60
+ end
61
+ post do
62
+ "Posts post"
63
+ end
64
+ path ":id" do
65
+ get do
66
+ "Posts #{params[:id]}"
67
+ end
68
+ match via: [:put, :patch] do
69
+ "Posts #{request.via} #{params[:id]}"
70
+ end
71
+ delete do
72
+ "Posts delete #{params[:id]}"
73
+ end
74
+ path "/comments" do
75
+ get do
76
+ "Posts #{params[:id]} comments"
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
82
+ ```
83
+
84
+ ## Plugins
85
+
86
+ ### Callbacks
87
+
88
+ Supports `before` and `after` callbacks (same DSL):
89
+
90
+ ```
91
+ class App < Jeanine::App
92
+ plugin :Callbacks
93
+ before do
94
+ puts "All"
95
+ end
96
+ before /posts/ do
97
+ puts "Before posts"
98
+ end
99
+ before /posts\/\d*/, /comments\/\d*/ do
100
+ puts "Before posts/:id, comments/:id"
101
+ response.headers['X-Thing-Id'] = params[:id]
102
+ end
103
+ end
104
+ ```
105
+
106
+ ### Rendering
107
+
108
+ Basic support for rendering. Be explicit.
109
+
110
+ ```ruby
111
+ class App < Jeanine::App
112
+ plugin :Rendering
113
+ # loads views/root.html.erb and views/layouts/application.html.erb
114
+ root do
115
+ @title = "My cool app"
116
+ render template: "root.html.erb", layout: "application.html.erb"
117
+ end
118
+ end
119
+ ```
120
+
121
+ ### Sessions
122
+
123
+ Uses Rack's session management.
124
+
125
+ ```ruby
126
+ class App < Jeanine::App
127
+ plugin :Session
128
+ root do
129
+ session[:uid] = SecureRandom.hex
130
+ end
131
+ end
132
+ ```
133
+
134
+ ### Error handling
135
+
136
+ ```ruby
137
+ class App < Jeanine::App
138
+ plugin :Resucable
139
+ rescue_from NoMethodError, RuntimeError do |exception|
140
+ response.status = 500
141
+ "Oh no!"
142
+ end
143
+ rescue_from StandardError, with: :handle_error!
144
+ root do
145
+ @title = "My cool app"
146
+ raise NoMethodError
147
+ render template: "root.html.erb", layout: "application.html.erb"
148
+ end
149
+
150
+ private
151
+
152
+ def handle_error!(exception)
153
+ response.status = 500
154
+ render template: "error.html.erb"
155
+ end
156
+ end
157
+ ```
158
+
159
+ ## Development
160
+
161
+ ### Ideologies
162
+
163
+ * No meaningless metaprogramming = fast
164
+
165
+ ## Benchmarks
166
+
167
+ ### Requests/second
168
+
169
+ Benched on a Intel Core i7-8700B / 64GB RAM.
170
+
171
+ ```
172
+ Framework Requests/sec % from best
173
+ ----------------------------------------------
174
+ rack 17299.31 100.00%
175
+ jeanine 16022.71 92.62%
176
+ rack-response 15462.50 89.38%
177
+ syro 15416.13 89.11%
178
+ watts 15307.52 88.49%
179
+ roda 14550.56 84.11%
180
+ hanami-router 14342.92 82.91%
181
+ cuba 14246.23 82.35%
182
+ hobbit 14132.20 81.69%
183
+ rambutan 12526.40 72.41%
184
+ rack-app 11696.66 67.61%
185
+ flame 7931.61 45.85%
186
+ rails-metal 7761.75 44.87%
187
+ sinatra 4616.81 26.69%
188
+ grape 2401.66 13.88%
189
+ hobby 1805.93 10.44%
190
+ rails-api 1593.77 9.21%
191
+ ```
192
+
193
+ ### Memory
194
+
195
+ ```
196
+ Framework Allocs/Req Memsize/Req
197
+ --------------------------------------
198
+ rack 40 3408
199
+ roda 43 4016
200
+ syro 44 4288
201
+ cuba 44 4056
202
+ watts 46 3648
203
+ hobbit 48 4416
204
+ jeanine 52 4576
205
+ hobby 52 5416
206
+ rack-response 55 5128
207
+ rails-metal 59 5848
208
+ hanami-router 63 5184
209
+ rambutan 79 6944
210
+ rack-app 80 8424
211
+ flame 115 9648
212
+ sinatra 179 13440
213
+ grape 250 26704
214
+ rails-api 383 34949
215
+ ```
216
+
217
+ ## Todo
218
+
219
+ * Callback constraints
220
+ * File downloads
221
+
222
+ ## Contributing
223
+
224
+ Bug reports and pull requests are welcome on GitHub at https://github.com/joshmn/jeanine.
225
+
226
+ ## License
227
+
228
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -0,0 +1,9 @@
1
+ source 'https://rubygems.org'
2
+
3
+ ruby "$RUBY_VERSION$"
4
+
5
+ gem "jeanine"
6
+
7
+ group :production do
8
+ gem "puma"
9
+ end
@@ -0,0 +1,8 @@
1
+ # README
2
+
3
+ Welcome to your Jeanine app.
4
+
5
+ ## Start
6
+
7
+ `$ bundle`
8
+ `$ rackup`
@@ -0,0 +1,10 @@
1
+ require_relative 'boot'
2
+
3
+ require 'jeanine'
4
+
5
+ # Require the gems listed in Gemfile, including any gems
6
+ # you've limited to :test, :development, or :production.
7
+ Bundler.require(*Jeanine.groups)
8
+
9
+ class App < ::Jeanine::App
10
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
4
+
5
+ require 'bundler/setup' # Set up gems listed in the Gemfile.
@@ -0,0 +1 @@
1
+ require_relative '../app'
@@ -0,0 +1,35 @@
1
+ # Puma can serve each request in a thread from an internal thread pool.
2
+ # The `threads` method setting takes two numbers: a minimum and maximum.
3
+ # Any libraries that use thread pools should be configured to match
4
+ # the maximum value specified for Puma. Default is set to 5 threads for minimum
5
+ # and maximum; this matches the default thread size of Active Record.
6
+ #
7
+ max_threads_count = ENV.fetch("RACK_MAX_THREADS") { 5 }
8
+ min_threads_count = ENV.fetch("RACK_MIN_THREADS") { max_threads_count }
9
+ threads min_threads_count, max_threads_count
10
+
11
+ # Specifies the `port` that Puma will listen on to receive requests; default is 3000.
12
+ #
13
+ port ENV.fetch("PORT") { 3000 }
14
+
15
+ # Specifies the `environment` that Puma will run in.
16
+ #
17
+ environment ENV.fetch("RACK_ENV") { "development" }
18
+
19
+ # Specifies the `pidfile` that Puma will use.
20
+ pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }
21
+
22
+ # Specifies the number of `workers` to boot in clustered mode.
23
+ # Workers are forked web server processes. If using threads and workers together
24
+ # the concurrency of the application would be max `threads` * `workers`.
25
+ # Workers do not work on JRuby or Windows (both of which do not support
26
+ # processes).
27
+ #
28
+ # workers ENV.fetch("WEB_CONCURRENCY") { 2 }
29
+
30
+ # Use the `preload_app!` method when specifying a `workers` number.
31
+ # This directive tells Puma to first boot the application and load code
32
+ # before forking the application. This takes advantage of Copy On Write
33
+ # process behavior so workers use less memory.
34
+ #
35
+ # preload_app!
@@ -0,0 +1,3 @@
1
+ require_relative './app'
2
+
3
+ run App
@@ -1,3 +1,3 @@
1
1
  module Jeanine
2
- VERSION = "0.7.0"
2
+ VERSION = "0.7.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jeanine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Brody
@@ -115,6 +115,7 @@ executables: []
115
115
  extensions: []
116
116
  extra_rdoc_files: []
117
117
  files:
118
+ - README.md
118
119
  - exe/jeanine
119
120
  - lib/jeanine.rb
120
121
  - lib/jeanine/app.rb
@@ -126,6 +127,13 @@ files:
126
127
  - lib/jeanine/core_ext/nil_class.rb
127
128
  - lib/jeanine/core_ext/string.rb
128
129
  - lib/jeanine/environment.rb
130
+ - lib/jeanine/generator/new/Gemfile.tt
131
+ - lib/jeanine/generator/new/README.md.tt
132
+ - lib/jeanine/generator/new/app.rb.tt
133
+ - lib/jeanine/generator/new/config.ru.tt
134
+ - lib/jeanine/generator/new/config/boot.rb.tt
135
+ - lib/jeanine/generator/new/config/environment.rb.tt
136
+ - lib/jeanine/generator/new/config/puma.rb.tt
129
137
  - lib/jeanine/headers.rb
130
138
  - lib/jeanine/mimes.rb
131
139
  - lib/jeanine/path_proxy.rb