syro 3.1.1 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/lib/syro.rb +18 -7
  3. data/syro.gemspec +1 -1
  4. data/test/all.rb +15 -0
  5. metadata +3 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d7b8d0d24032087e88045df823a3b61adb898e85af19d22cd17b7bf05ed50449
4
- data.tar.gz: 426037f8eb05e2f24f490d81c2f423c22e7d6ea4036e6de7bedcff3ff4ab8007
3
+ metadata.gz: 7c431564114919bd3cb431153267795d9a959a621d0cdafc20949a6b1fc23810
4
+ data.tar.gz: 3b8d7e682fec564707d320a351eb3d76f7a044e23619a4d15962cb45ac1cb2db
5
5
  SHA512:
6
- metadata.gz: 974c67998f9d13ea7999065ce3099c9980cb5014ec1baba55de43eb59eabac80f2b2f1357f799116350d2466245d9a664d63ef3e6751f749d9c0acff242f9b18
7
- data.tar.gz: a610effd762f148f833ba5de540c40015e1f583c95d3354057d9d36facdebccdca4ccf0b84f0f11382893235fff699a0dc93df4d032fa732ecc59cb38790a340
6
+ metadata.gz: aafde14a3978fa175bee9e566d2d7157e62c498dbb78bc704ee022791650eab39f22edf9b49a71de7658741e531e0d975a3738a68eb59c36d37fd2c6dd7da4a3
7
+ data.tar.gz: 16f2d0621fee223a20f1b669d61c9596577c5e23b00e50b93ed9bc5dd69fed7646bab7127ee49453a8fd6301c5475108447f7cc14d5b4a0e58836ec4a1a35095
@@ -209,11 +209,23 @@ class Syro
209
209
  end
210
210
 
211
211
  class Deck
212
- module API
213
- def initialize(code)
214
- @syro_code = code
212
+
213
+ # Attaches the supplied block to a subclass of Deck as #dispatch!
214
+ # Returns the subclassed Deck.
215
+ def self.implement(&code)
216
+ Class.new(self) do
217
+ define_method(:dispatch!, code)
218
+ private :dispatch!
219
+
220
+ # Instead of calling inspect on this anonymous class,
221
+ # defer to the superclass which is likely Syro::Deck.
222
+ define_method(:inspect) do
223
+ self.class.superclass.inspect
224
+ end
215
225
  end
226
+ end
216
227
 
228
+ module API
217
229
  def env
218
230
  @syro_env
219
231
  end
@@ -268,7 +280,7 @@ class Syro
268
280
  @syro_inbox = inbox
269
281
 
270
282
  catch(:halt) do
271
- instance_eval(&@syro_code)
283
+ dispatch!
272
284
  finish!
273
285
  end
274
286
  end
@@ -420,11 +432,10 @@ class Syro
420
432
  end
421
433
 
422
434
  def initialize(deck = Deck, &code)
423
- @deck = deck
424
- @code = code
435
+ @deck = deck.implement(&code)
425
436
  end
426
437
 
427
438
  def call(env, inbox = env.fetch(Syro::INBOX, {}))
428
- @deck.new(@code).call(env, inbox)
439
+ @deck.new.call(env, inbox)
429
440
  end
430
441
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "syro"
3
- s.version = "3.1.1"
3
+ s.version = "3.2.0"
4
4
  s.summary = "Simple router"
5
5
  s.description = "Simple router for web applications"
6
6
  s.authors = ["Michel Martens"]
@@ -117,6 +117,10 @@ script_name = Syro.new do
117
117
  end
118
118
  end
119
119
 
120
+ exception = Syro.new do
121
+ get { res.text(this_method_does_not_exist) }
122
+ end
123
+
120
124
  app = Syro.new do
121
125
  get do
122
126
  res.write "GET /"
@@ -260,6 +264,10 @@ app = Syro.new do
260
264
  on "script" do
261
265
  run(script_name)
262
266
  end
267
+
268
+ on "exception" do
269
+ run(exception)
270
+ end
263
271
  end
264
272
 
265
273
  setup do
@@ -443,3 +451,10 @@ test "script name and path info" do |f|
443
451
  assert_equal 200, f.last_response.status
444
452
  assert_equal "/script/path", f.last_response.body
445
453
  end
454
+
455
+ test "deck exceptions reference a named class" do |f|
456
+ f.get("/exception")
457
+ rescue NameError => exception
458
+ ensure
459
+ assert exception.to_s.include?("Syro::Deck")
460
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: syro
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.1
4
+ version: 3.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michel Martens
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-13 00:00:00.000000000 Z
11
+ date: 2020-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: seg
@@ -102,8 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  requirements: []
105
- rubyforge_project:
106
- rubygems_version: 2.7.6
105
+ rubygems_version: 3.0.2
107
106
  signing_key:
108
107
  specification_version: 4
109
108
  summary: Simple router