jellyfish 1.1.1 → 1.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
- 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