kawaii-core 0.1.1 → 0.2.0

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: d81d0ba32a44a5b7eceec6b3979cd33f58970ec3
4
- data.tar.gz: 8da2f45e4fc4e5291372f5f5c46edfb1139e849e
3
+ metadata.gz: 34266b059482427cf4b508d369a3a82eee1c13b9
4
+ data.tar.gz: a44b19872324040f54441b625dd107452e7e88af
5
5
  SHA512:
6
- metadata.gz: 4b583cd1e65bbbc8b8f73ea402fde6e5a706d31778ebfdfd801590af617ee74dd2b3cd8985f1eaa3c42c562610f7f47b181b27a8a45fce7d53c595a9f425f1fb
7
- data.tar.gz: 368d2864fe554d1923dea8e4cb438694c522eb618316d8feca27554ba3f25578eac98dbf884463bd1e1117cce89017d70697d7a74f108b28e57d431830328294
6
+ metadata.gz: f608c27a33e224eee46f7a3f6d9adb3b9e5cda66c1d98847077ec80b6667b5aba4fbdcf953f685a879f1fdf33db9cdc195485fe541dfa24c4d1a18fc232ae3f8
7
+ data.tar.gz: 62f772e16fd0b43d6d7adfc3a038eb247a3c3100dc1999d1f6fc8abafc15be4bb714e2c8f6286c2d4c3b613493901291b76960a3bfe16fd4e1166e9ecfbbe64d
data/README.md CHANGED
@@ -348,6 +348,37 @@ end
348
348
 
349
349
  Just like with `not_found`, you need to return a well-formed Rack response Array.
350
350
 
351
+ ## Middleware
352
+
353
+ To use Rack middleware, you have two options. You can either use a rackup file or use the `use` method in a
354
+ class deriving from `Kawaii::Base`. For the former, there's plenty of information on the Internet
355
+ including this [more advanced tutorial](https://blog.engineyard.com/2015/understanding-rack-apps-and-middleware).
356
+
357
+ To use middleware in `Kawaii::Base`-derived class, use the `use` method (no pun intended). Example:
358
+
359
+ ```ruby
360
+ class AppendWorld
361
+ def initialize(app)
362
+ @app = app
363
+ end
364
+ def call(env)
365
+ status, headers, response = @app.call(env)
366
+ response[0] += 'world!' # Quick & dirty.
367
+ [status, headers, response]
368
+ end
369
+ end
370
+
371
+ class MyApp < Kawaii::Base
372
+ get '/' do
373
+ 'Hello, '
374
+ end
375
+
376
+ use AppendWorld
377
+ end
378
+ ```
379
+
380
+ Visiting the `/` path will render 'Hello, world!'.
381
+
351
382
  ## Resources
352
383
 
353
384
  1. [API reference](http://bilus.github.io/kawaii/Kawaii.html).
@@ -422,13 +453,13 @@ X Custom error handling (intercept exceptions, 404 what else?).
422
453
 
423
454
  X Rubocop-compliant.
424
455
 
425
- O Update and push.
456
+ X Update and push.
426
457
 
427
- O Code review
458
+ X Code review
428
459
 
429
- O Rack/custom global middleware.
460
+ X Rack/custom global middleware.
430
461
 
431
- O Route-specific middleware.
462
+ X Route-specific middleware.
432
463
 
433
464
  ## Known issues
434
465
 
@@ -20,8 +20,8 @@ module Kawaii
20
20
 
21
21
  # Instances of classes derived from [Kawaii::Base] are Rack applications.
22
22
  def call(env)
23
- matching = self.class.match(env)
24
- matching.call(env)
23
+ h = self.class.build(env)
24
+ h.call(env)
25
25
  rescue => e
26
26
  self.class.handle_error(e)
27
27
  end
@@ -41,8 +41,10 @@ module Kawaii
41
41
  @error_handler = block
42
42
  end
43
43
 
44
- def match(env)
45
- super(env) || not_found_handler
44
+ def build(env)
45
+ h = match(env) || not_found_handler
46
+ builder.run h
47
+ builder.to_app
46
48
  end
47
49
 
48
50
  # Make it runnable via `run MyApp`.
@@ -56,6 +58,14 @@ module Kawaii
56
58
  handler.call(e)
57
59
  end
58
60
 
61
+ def use(middleware, *args, &block)
62
+ builder.use(middleware, *args, &block)
63
+ end
64
+
65
+ def builder
66
+ @builder ||= Rack::Builder.new
67
+ end
68
+
59
69
  protected
60
70
 
61
71
  def not_found_handler
@@ -1,4 +1,4 @@
1
1
  # Gem version.
2
2
  module Kawaii
3
- VERSION = '0.1.1'
3
+ VERSION = '0.2.0'
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kawaii-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcin Bilski
@@ -199,7 +199,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
199
199
  version: '0'
200
200
  requirements: []
201
201
  rubyforge_project:
202
- rubygems_version: 2.4.8
202
+ rubygems_version: 2.2.2
203
203
  signing_key:
204
204
  specification_version: 4
205
205
  summary: A simple web framework based on Rack