jellyfish 1.1.1 → 1.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
- SHA1:
3
- metadata.gz: be6525f7f0441a5863cd21be6c1e94ef5e9906b2
4
- data.tar.gz: 00a83a35b93defbd52d8d4193f0298cc6009fda4
2
+ SHA256:
3
+ metadata.gz: 8e0c9e8624941bd890772891cbccf23e550239f1f02789f52090d2835c46fb19
4
+ data.tar.gz: 586e35d54a86bfe6b9b4215259366eccaca536e5cb953251ead0c96f50010c02
5
5
  SHA512:
6
- metadata.gz: 9b3020e8a013a1a95057f9c59eb7bc8a9b05dba6a5fed1462838d8edb76b4e1d37c2daa63344b049d658361c1d60c85e603ac6a3609964a7df17f07c83c5cae7
7
- data.tar.gz: 6e7e67cd52e5b34c4c9859d2446d42a2c7de2ef5026bdf1bcb8150e0ffa646be740b4f4343a54eb9fe07b1be31e8a5a60a67bc857c50389f74a74b111b0e9f02
6
+ metadata.gz: 611380d2aedcac5ff8c85ab3ce00ea429d8151334628ef3bd216dd30606e7816178e6b8b3253e99dc8915f479ed9c3f93f0598e9bcc89101ddd15e681a3f1fbb
7
+ data.tar.gz: d3f4b682cb5913ba369b6e9e1ceb1b6a2bd20c5dc397e5d230c7741ab9c45dbbe0921e866ce1ec9acc4606d7e5253d6ef77146bb77537e6ffa7e3d5ea818d519
@@ -1,15 +1,18 @@
1
1
  sudo: false
2
2
  language: ruby
3
- rvm:
4
- - 2.0
5
- - 2.1
6
- - 2.2
7
- - rbx
8
- - jruby-9
9
3
 
10
- before_install:
11
- - rvm get head
12
- - rvm reload
13
- - rvm use --install $TRAVIS_RUBY_VERSION --binary --latest
14
- install: 'bundle install --retry=3'
4
+ install: 'gem install bundler; bundle install --retry=3'
15
5
  script: 'ruby -vr bundler/setup -S rake test'
6
+
7
+ matrix:
8
+ include:
9
+ - rvm: 2.3
10
+ - rvm: 2.4
11
+ - rvm: 2.5
12
+ - rvm: ruby-head
13
+ - rvm: jruby
14
+ env: JRUBY_OPTS=--debug
15
+ - rvm: rbx
16
+
17
+ allow_failures:
18
+ - rvm: rbx
data/CHANGES.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # CHANGES
2
2
 
3
+ ## Jellyfish 1.2.0 -- 2018-07-14
4
+
5
+ ### Incompatible changes
6
+
7
+ * `Jellyfish::NewRelic` is extracted to
8
+ [jellyfish-contrib](https://github.com/godfat/jellyfish-contrib)
9
+
10
+ ### Bugs fixed
11
+
12
+ * `Jellyfish::URLMap` would now properly handle nested maps like
13
+ `Rack::URLMap`.
14
+
15
+ ### Enhancements
16
+
17
+ * `Jellyfish::URLMap` now supports listening on a specific host like
18
+ `Rack::URLMap`. Beside prefixing `http://`, it also supports passing
19
+ `host: host` argument to `map`, and a `listen` directive which takes a
20
+ block.
21
+ * Instead of using `module_eval`, DSL is now defined via `define_method` to
22
+ make debugging easier. Performance shouldn't get hit.
23
+
3
24
  ## Jellyfish 1.1.1 -- 2015-12-22
4
25
 
5
26
  ### Enhancements
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Jellyfish [![Build Status](https://secure.travis-ci.org/godfat/jellyfish.png?branch=master)](http://travis-ci.org/godfat/jellyfish) [![Coverage Status](https://coveralls.io/repos/godfat/jellyfish/badge.png)](https://coveralls.io/r/godfat/jellyfish) [![Join the chat at https://gitter.im/godfat/jellyfish](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/godfat/jellyfish)
1
+ # Jellyfish [![Build Status](https://secure.travis-ci.org/godfat/jellyfish.png?branch=master)](http://travis-ci.org/godfat/jellyfish) [![Coverage Status](https://coveralls.io/repos/github/godfat/jellyfish/badge.png)](https://coveralls.io/github/godfat/jellyfish) [![Join the chat at https://gitter.im/godfat/jellyfish](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/godfat/jellyfish)
2
2
 
3
3
  by Lin Jen-Shin ([godfat](http://godfat.org))
4
4
 
@@ -9,6 +9,7 @@ by Lin Jen-Shin ([godfat](http://godfat.org))
9
9
  * [github](https://github.com/godfat/jellyfish)
10
10
  * [rubygems](https://rubygems.org/gems/jellyfish)
11
11
  * [rdoc](http://rdoc.info/github/godfat/jellyfish)
12
+ * [issues](https://github.com/godfat/jellyfish/issues) (feel free to ask for support)
12
13
 
13
14
  ## DESCRIPTION:
14
15
 
@@ -179,13 +180,13 @@ run Tank.new
179
180
  ```
180
181
 
181
182
  <!---
182
- GET /lookup
183
+ GET /lookup host
183
184
  body = File.read("#{File.dirname(
184
185
  File.expand_path(__FILE__))}/../lib/jellyfish/public/302.html").
185
- gsub('VAR_URL', ':///')
186
+ gsub('VAR_URL', 'http://host/')
186
187
  [302,
187
188
  {'Content-Length' => body.bytesize.to_s, 'Content-Type' => 'text/html',
188
- 'Location' => ':///'},
189
+ 'Location' => 'http://host/'},
189
190
  [body]]
190
191
  -->
191
192
 
@@ -238,7 +239,7 @@ body = case RUBY_ENGINE
238
239
  when 'jruby'
239
240
  "No one hears you: (eval):9:in `block in Tank'\n"
240
241
  when 'rbx'
241
- "No one hears you: kernel/delta/kernel.rb:78:in `yell (method_missing)'\n"
242
+ "No one hears you: core/zed.rb:1370:in `yell (method_missing)'\n"
242
243
  else
243
244
  "No one hears you: (eval):9:in `block in <class:Tank>'\n"
244
245
  end
@@ -463,10 +464,8 @@ The followings are intentional:
463
464
  * `Jellyfish::URLMap` does not modify `env`, and it would call the app with
464
465
  another instance of Hash. Mutating data is a bad idea.
465
466
 
466
- * `Jellyfish::URLMap` does not try to match on host because I am not sure
467
- if there's anyone would need this feature?
468
-
469
- * All other tests passed the same test suites for `Rack::Builder`.
467
+ * All other tests passed the same test suites for `Rack::Builder` and
468
+ `Jellyfish::URLMap`.
470
469
 
471
470
  ``` ruby
472
471
  require 'jellyfish'
@@ -583,6 +582,100 @@ Comparison:
583
582
  Rack::URLMap: 1702.0 i/s - 36.66x slower
584
583
  ```
585
584
 
585
+ #### Extension: Jellyfish::Builder#listen
586
+
587
+ `listen` is a convenient way to define routing based on the host. We could
588
+ also use `map` inside `listen` block. Here's a quick example that specifically
589
+ listen on a particular host for long-polling and all other hosts would go to
590
+ the default app.
591
+
592
+ ``` ruby
593
+ require 'jellyfish'
594
+
595
+ long_poll = lambda{ |env| [200, {}, ["long_poll #{env['HTTP_HOST']}\n"]] }
596
+ fast_app = lambda{ |env| [200, {}, ["fast_app #{env['HTTP_HOST']}\n"]] }
597
+
598
+ run Jellyfish::Builder.app{
599
+ listen 'slow-app' do
600
+ run long_poll
601
+ end
602
+
603
+ run fast_app
604
+ }
605
+ ```
606
+
607
+ <!---
608
+ GET / slow-app
609
+ [200, {}, ["long_poll slow-app\n"]]
610
+
611
+ GET / fast-app
612
+ [200, {}, ["fast_app fast-app\n"]]
613
+ -->
614
+
615
+ ##### Extension: Jellyfish::Builder#listen (`map path, host:`)
616
+
617
+ Alternatively, we could pass `host` as an argument to `map` so that the
618
+ endpoint would only listen on a specific host.
619
+
620
+ ``` ruby
621
+ require 'jellyfish'
622
+
623
+ long_poll = lambda{ |env| [200, {}, ["long_poll #{env['HTTP_HOST']}\n"]] }
624
+ fast_app = lambda{ |env| [200, {}, ["fast_app #{env['HTTP_HOST']}\n"]] }
625
+
626
+ run Jellyfish::Builder.app{
627
+ map '/', host: 'slow-app' do
628
+ run long_poll
629
+ end
630
+
631
+ run fast_app
632
+ }
633
+ ```
634
+
635
+ <!---
636
+ GET / slow-app
637
+ [200, {}, ["long_poll slow-app\n"]]
638
+
639
+ GET / fast-app
640
+ [200, {}, ["fast_app fast-app\n"]]
641
+ -->
642
+
643
+ <!---
644
+ GET / slow-app
645
+ [200, {}, ["long_poll slow-app\n"]]
646
+
647
+ GET / fast-app
648
+ [200, {}, ["fast_app fast-app\n"]]
649
+ -->
650
+
651
+ ##### Extension: Jellyfish::Builder#listen (`map "http://#{path}"`)
652
+
653
+ Or if you really prefer the `Rack::URLMap` compatible way, then you could
654
+ just add `http://host` to your path prefix. `https` works, too.
655
+
656
+ ``` ruby
657
+ require 'jellyfish'
658
+
659
+ long_poll = lambda{ |env| [200, {}, ["long_poll #{env['HTTP_HOST']}\n"]] }
660
+ fast_app = lambda{ |env| [200, {}, ["fast_app #{env['HTTP_HOST']}\n"]] }
661
+
662
+ run Jellyfish::Builder.app{
663
+ map 'http://slow-app' do
664
+ run long_poll
665
+ end
666
+
667
+ run fast_app
668
+ }
669
+ ```
670
+
671
+ <!---
672
+ GET / slow-app
673
+ [200, {}, ["long_poll slow-app\n"]]
674
+
675
+ GET / fast-app
676
+ [200, {}, ["fast_app fast-app\n"]]
677
+ -->
678
+
586
679
  #### Extension: Jellyfish::Rewrite
587
680
 
588
681
  `Jellyfish::Builder` is mostly compatible with `Rack::Builder`, and
@@ -598,11 +691,11 @@ while leaving the `/users/list` as before. We may have this:
598
691
  ``` ruby
599
692
  require 'jellyfish'
600
693
 
601
- users_api = lambda{ |env| [200, {}, ["users\n"]] }
602
- profiles_api = lambda{ |env| [200, {}, ["profiles\n"]] }
694
+ users_api = lambda{ |env| [200, {}, ["/users#{env['PATH_INFO']}\n"]] }
695
+ profiles_api = lambda{ |env| [200, {}, ["/profiles#{env['PATH_INFO']}\n"]] }
603
696
 
604
697
  run Jellyfish::Builder.app{
605
- rewrite '/users/me' => '/profiles/me' do
698
+ rewrite '/users/me' => '/me' do
606
699
  run profiles_api
607
700
  end
608
701
  map '/profiles' do
@@ -616,16 +709,16 @@ run Jellyfish::Builder.app{
616
709
 
617
710
  <!---
618
711
  GET /users/me
619
- [200, {}, ["profiles\n"]]
712
+ [200, {}, ["/profiles/me\n"]]
620
713
 
621
714
  GET /users/list
622
- [200, {}, ["users\n"]]
715
+ [200, {}, ["/users/list\n"]]
623
716
 
624
717
  GET /profiles/me
625
- [200, {}, ["profiles\n"]]
718
+ [200, {}, ["/profiles/me\n"]]
626
719
 
627
720
  GET /profiles/list
628
- [200, {}, ["profiles\n"]]
721
+ [200, {}, ["/profiles/list\n"]]
629
722
  -->
630
723
 
631
724
  This way, we would rewrite `/users/me` to `/profiles/me` and serve it with
@@ -639,11 +732,11 @@ Note that you could also use `map path, :to` if you prefer this API more:
639
732
  ``` ruby
640
733
  require 'jellyfish'
641
734
 
642
- users_api = lambda{ |env| [200, {}, ["users\n"]] }
643
- profiles_api = lambda{ |env| [200, {}, ["profiles\n"]] }
735
+ users_api = lambda{ |env| [200, {}, ["/users#{env['PATH_INFO']}\n"]] }
736
+ profiles_api = lambda{ |env| [200, {}, ["/profiles#{env['PATH_INFO']}\n"]] }
644
737
 
645
738
  run Jellyfish::Builder.app{
646
- map '/users/me', to: '/profiles/me' do
739
+ map '/users/me', to: '/me' do
647
740
  run profiles_api
648
741
  end
649
742
  map '/profiles' do
@@ -657,16 +750,16 @@ run Jellyfish::Builder.app{
657
750
 
658
751
  <!---
659
752
  GET /users/me
660
- [200, {}, ["profiles\n"]]
753
+ [200, {}, ["/profiles/me\n"]]
661
754
 
662
755
  GET /users/list
663
- [200, {}, ["users\n"]]
756
+ [200, {}, ["/users/list\n"]]
664
757
 
665
758
  GET /profiles/me
666
- [200, {}, ["profiles\n"]]
759
+ [200, {}, ["/profiles/me\n"]]
667
760
 
668
761
  GET /profiles/list
669
- [200, {}, ["profiles\n"]]
762
+ [200, {}, ["/profiles/list\n"]]
670
763
  -->
671
764
 
672
765
  ##### Extension: Jellyfish::Rewrite (`rewrite rules`)
@@ -676,11 +769,11 @@ Note that `rewrite` takes a hash which could contain more than one rule:
676
769
  ``` ruby
677
770
  require 'jellyfish'
678
771
 
679
- profiles_api = lambda{ |env| [200, {}, ["profiles\n"]] }
772
+ profiles_api = lambda{ |env| [200, {}, ["/profiles#{env['PATH_INFO']}\n"]] }
680
773
 
681
774
  run Jellyfish::Builder.app{
682
- rewrite '/users/me' => '/profiles/me',
683
- '/users/fa' => '/profiles/fa' do
775
+ rewrite '/users/me' => '/me',
776
+ '/users/fa' => '/fa' do
684
777
  run profiles_api
685
778
  end
686
779
  }
@@ -688,10 +781,10 @@ run Jellyfish::Builder.app{
688
781
 
689
782
  <!---
690
783
  GET /users/me
691
- [200, {}, ["profiles\n"]]
784
+ [200, {}, ["/profiles/me\n"]]
692
785
 
693
786
  GET /users/fa
694
- [200, {}, ["profiles\n"]]
787
+ [200, {}, ["/profiles/fa\n"]]
695
788
  -->
696
789
 
697
790
  ### Extension: NormalizedParams (with force_encoding)
@@ -742,34 +835,6 @@ GET /%E5%9B%A7
742
835
  ["/%E5%9B%A7=/\u{56e7}\n"]]
743
836
  -->
744
837
 
745
- ### Extension: NewRelic
746
-
747
- ``` ruby
748
- require 'jellyfish'
749
- class Tank
750
- include Jellyfish
751
- controller_include Jellyfish::NewRelic
752
-
753
- get '/' do
754
- "OK\n"
755
- end
756
- end
757
- use Rack::ContentLength
758
- use Rack::ContentType, 'text/plain'
759
- require 'cgi' # newrelic dev mode needs this and it won't require it itself
760
- require 'new_relic/rack/developer_mode'
761
- use NewRelic::Rack::DeveloperMode # GET /newrelic to read stats
762
- run Tank.new
763
- NewRelic::Agent.manual_start(:developer_mode => true)
764
- ```
765
-
766
- <!---
767
- GET /
768
- [200,
769
- {'Content-Length' => '3', 'Content-Type' => 'text/plain'},
770
- ["OK\n"]]
771
- -->
772
-
773
838
  ### Extension: Using multiple extensions with custom controller
774
839
 
775
840
  Note that the controller should be assigned lastly in order to include
@@ -1158,13 +1223,13 @@ run Tank.new
1158
1223
 
1159
1224
  <!---
1160
1225
  GET /echo
1161
- sock.string.should.eq <<-HTTP.chomp
1226
+ sock.string.should.eq <<-HTTP.chomp.force_encoding('ASCII-8BIT')
1162
1227
  HTTP/1.1 101 Switching Protocols\r
1163
1228
  Upgrade: websocket\r
1164
1229
  Connection: Upgrade\r
1165
1230
  Sec-WebSocket-Accept: Kfh9QIsMVZcl6xEPYxPHzW8SZ8w=\r
1166
1231
  \r
1167
- \x81\u0003Hi!
1232
+ \x81\x03Hi!
1168
1233
  HTTP
1169
1234
  [200, {}, ['']]
1170
1235
  -->
@@ -1177,9 +1242,9 @@ HTTP
1177
1242
 
1178
1243
  ## LICENSE:
1179
1244
 
1180
- Apache License 2.0
1245
+ Apache License 2.0 (Apache-2.0)
1181
1246
 
1182
- Copyright (c) 2012-2015, Lin Jen-Shin (godfat)
1247
+ Copyright (c) 2012-2018, Lin Jen-Shin (godfat)
1183
1248
 
1184
1249
  Licensed under the Apache License, Version 2.0 (the "License");
1185
1250
  you may not use this file except in compliance with the License.
data/Rakefile CHANGED
@@ -1,14 +1,14 @@
1
1
 
2
2
  begin
3
- require "#{dir = File.dirname(__FILE__)}/task/gemgem"
3
+ require "#{__dir__}/task/gemgem"
4
4
  rescue LoadError
5
- sh 'git submodule update --init'
5
+ sh 'git submodule update --init --recursive'
6
6
  exec Gem.ruby, '-S', $PROGRAM_NAME, *ARGV
7
7
  end
8
8
 
9
- Gemgem.init(dir) do |s|
9
+ Gemgem.init(__dir__) do |s|
10
10
  require 'jellyfish/version'
11
11
  s.name = 'jellyfish'
12
12
  s.version = Jellyfish::VERSION
13
- %w[].each{ |g| s.add_runtime_dependency(g) }
13
+ s.files.delete('jellyfish.png')
14
14
  end
data/TODO.md CHANGED
@@ -1 +1,3 @@
1
1
  # TODO
2
+
3
+ Warn if the same route was defined again?
@@ -1,76 +1,76 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: jellyfish 1.1.1 ruby lib
2
+ # stub: jellyfish 1.2.0 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
- s.name = "jellyfish"
6
- s.version = "1.1.1"
5
+ s.name = "jellyfish".freeze
6
+ s.version = "1.2.0"
7
7
 
8
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
9
- s.require_paths = ["lib"]
10
- s.authors = ["Lin Jen-Shin (godfat)"]
11
- s.date = "2015-12-22"
12
- s.description = "Pico web framework for building API-centric web applications.\nFor Rack applications or Rack middleware. Around 250 lines of code.\n\nCheck [jellyfish-contrib][] for extra extensions.\n\n[jellyfish-contrib]: https://github.com/godfat/jellyfish-contrib"
13
- s.email = ["godfat (XD) godfat.org"]
8
+ s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
9
+ s.require_paths = ["lib".freeze]
10
+ s.authors = ["Lin Jen-Shin (godfat)".freeze]
11
+ s.date = "2018-07-14"
12
+ s.description = "Pico web framework for building API-centric web applications.\nFor Rack applications or Rack middleware. Around 250 lines of code.\n\nCheck [jellyfish-contrib][] for extra extensions.\n\n[jellyfish-contrib]: https://github.com/godfat/jellyfish-contrib".freeze
13
+ s.email = ["godfat (XD) godfat.org".freeze]
14
14
  s.files = [
15
- ".gitignore",
16
- ".gitmodules",
17
- ".travis.yml",
18
- "CHANGES.md",
19
- "Gemfile",
20
- "LICENSE",
21
- "README.md",
22
- "Rakefile",
23
- "TODO.md",
24
- "bench/bench_builder.rb",
25
- "config.ru",
26
- "jellyfish.gemspec",
27
- "jellyfish.png",
28
- "lib/jellyfish.rb",
29
- "lib/jellyfish/builder.rb",
30
- "lib/jellyfish/chunked_body.rb",
31
- "lib/jellyfish/json.rb",
32
- "lib/jellyfish/newrelic.rb",
33
- "lib/jellyfish/normalized_params.rb",
34
- "lib/jellyfish/normalized_path.rb",
35
- "lib/jellyfish/public/302.html",
36
- "lib/jellyfish/public/404.html",
37
- "lib/jellyfish/public/500.html",
38
- "lib/jellyfish/rewrite.rb",
39
- "lib/jellyfish/test.rb",
40
- "lib/jellyfish/urlmap.rb",
41
- "lib/jellyfish/version.rb",
42
- "lib/jellyfish/websocket.rb",
43
- "task/README.md",
44
- "task/gemgem.rb",
45
- "test/rack/test_builder.rb",
46
- "test/rack/test_urlmap.rb",
47
- "test/sinatra/test_base.rb",
48
- "test/sinatra/test_chunked_body.rb",
49
- "test/sinatra/test_error.rb",
50
- "test/sinatra/test_routing.rb",
51
- "test/test_from_readme.rb",
52
- "test/test_inheritance.rb",
53
- "test/test_log.rb",
54
- "test/test_misc.rb",
55
- "test/test_rewrite.rb",
56
- "test/test_threads.rb",
57
- "test/test_websocket.rb"]
58
- s.homepage = "https://github.com/godfat/jellyfish"
59
- s.licenses = ["Apache License 2.0"]
60
- s.rubygems_version = "2.5.1"
61
- s.summary = "Pico web framework for building API-centric web applications."
15
+ ".gitignore".freeze,
16
+ ".gitmodules".freeze,
17
+ ".travis.yml".freeze,
18
+ "CHANGES.md".freeze,
19
+ "Gemfile".freeze,
20
+ "LICENSE".freeze,
21
+ "README.md".freeze,
22
+ "Rakefile".freeze,
23
+ "TODO.md".freeze,
24
+ "bench/bench_builder.rb".freeze,
25
+ "config.ru".freeze,
26
+ "jellyfish.gemspec".freeze,
27
+ "lib/jellyfish.rb".freeze,
28
+ "lib/jellyfish/builder.rb".freeze,
29
+ "lib/jellyfish/chunked_body.rb".freeze,
30
+ "lib/jellyfish/json.rb".freeze,
31
+ "lib/jellyfish/normalized_params.rb".freeze,
32
+ "lib/jellyfish/normalized_path.rb".freeze,
33
+ "lib/jellyfish/public/302.html".freeze,
34
+ "lib/jellyfish/public/404.html".freeze,
35
+ "lib/jellyfish/public/500.html".freeze,
36
+ "lib/jellyfish/rewrite.rb".freeze,
37
+ "lib/jellyfish/test.rb".freeze,
38
+ "lib/jellyfish/urlmap.rb".freeze,
39
+ "lib/jellyfish/version.rb".freeze,
40
+ "lib/jellyfish/websocket.rb".freeze,
41
+ "task/README.md".freeze,
42
+ "task/gemgem.rb".freeze,
43
+ "test/rack/test_builder.rb".freeze,
44
+ "test/rack/test_urlmap.rb".freeze,
45
+ "test/sinatra/test_base.rb".freeze,
46
+ "test/sinatra/test_chunked_body.rb".freeze,
47
+ "test/sinatra/test_error.rb".freeze,
48
+ "test/sinatra/test_routing.rb".freeze,
49
+ "test/test_from_readme.rb".freeze,
50
+ "test/test_inheritance.rb".freeze,
51
+ "test/test_listen.rb".freeze,
52
+ "test/test_log.rb".freeze,
53
+ "test/test_misc.rb".freeze,
54
+ "test/test_rewrite.rb".freeze,
55
+ "test/test_threads.rb".freeze,
56
+ "test/test_websocket.rb".freeze]
57
+ s.homepage = "https://github.com/godfat/jellyfish".freeze
58
+ s.licenses = ["Apache-2.0".freeze]
59
+ s.rubygems_version = "2.7.7".freeze
60
+ s.summary = "Pico web framework for building API-centric web applications.".freeze
62
61
  s.test_files = [
63
- "test/rack/test_builder.rb",
64
- "test/rack/test_urlmap.rb",
65
- "test/sinatra/test_base.rb",
66
- "test/sinatra/test_chunked_body.rb",
67
- "test/sinatra/test_error.rb",
68
- "test/sinatra/test_routing.rb",
69
- "test/test_from_readme.rb",
70
- "test/test_inheritance.rb",
71
- "test/test_log.rb",
72
- "test/test_misc.rb",
73
- "test/test_rewrite.rb",
74
- "test/test_threads.rb",
75
- "test/test_websocket.rb"]
62
+ "test/rack/test_builder.rb".freeze,
63
+ "test/rack/test_urlmap.rb".freeze,
64
+ "test/sinatra/test_base.rb".freeze,
65
+ "test/sinatra/test_chunked_body.rb".freeze,
66
+ "test/sinatra/test_error.rb".freeze,
67
+ "test/sinatra/test_routing.rb".freeze,
68
+ "test/test_from_readme.rb".freeze,
69
+ "test/test_inheritance.rb".freeze,
70
+ "test/test_listen.rb".freeze,
71
+ "test/test_log.rb".freeze,
72
+ "test/test_misc.rb".freeze,
73
+ "test/test_rewrite.rb".freeze,
74
+ "test/test_threads.rb".freeze,
75
+ "test/test_websocket.rb".freeze]
76
76
  end