kawaii-core 0.1.1 → 0.2.0

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.
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