syro 3.1.1 → 3.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.
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