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 +5 -5
- data/.travis.yml +14 -11
- data/CHANGES.md +21 -0
- data/README.md +125 -60
- data/Rakefile +4 -4
- data/TODO.md +2 -0
- data/jellyfish.gemspec +69 -69
- data/lib/jellyfish.rb +10 -8
- data/lib/jellyfish/builder.rb +11 -6
- data/lib/jellyfish/test.rb +10 -2
- data/lib/jellyfish/urlmap.rb +74 -9
- data/lib/jellyfish/version.rb +1 -1
- data/task/README.md +8 -8
- data/task/gemgem.rb +29 -7
- data/test/rack/test_builder.rb +1 -1
- data/test/rack/test_urlmap.rb +67 -9
- data/test/test_from_readme.rb +13 -10
- data/test/test_listen.rb +64 -0
- data/test/test_rewrite.rb +8 -6
- data/test/test_websocket.rb +6 -3
- metadata +6 -6
- data/jellyfish.png +0 -0
- data/lib/jellyfish/newrelic.rb +0 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 8e0c9e8624941bd890772891cbccf23e550239f1f02789f52090d2835c46fb19
|
4
|
+
data.tar.gz: 586e35d54a86bfe6b9b4215259366eccaca536e5cb953251ead0c96f50010c02
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 611380d2aedcac5ff8c85ab3ce00ea429d8151334628ef3bd216dd30606e7816178e6b8b3253e99dc8915f479ed9c3f93f0598e9bcc89101ddd15e681a3f1fbb
|
7
|
+
data.tar.gz: d3f4b682cb5913ba369b6e9e1ceb1b6a2bd20c5dc397e5d230c7741ab9c45dbbe0921e866ce1ec9acc4606d7e5253d6ef77146bb77537e6ffa7e3d5ea818d519
|
data/.travis.yml
CHANGED
@@ -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
|
-
|
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 [](http://travis-ci.org/godfat/jellyfish) [](https://coveralls.io/
|
1
|
+
# Jellyfish [](http://travis-ci.org/godfat/jellyfish) [](https://coveralls.io/github/godfat/jellyfish) [](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:
|
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
|
-
*
|
467
|
-
|
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' => '/
|
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: '/
|
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' => '/
|
683
|
-
'/users/fa' => '/
|
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\
|
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-
|
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 "#{
|
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(
|
9
|
+
Gemgem.init(__dir__) do |s|
|
10
10
|
require 'jellyfish/version'
|
11
11
|
s.name = 'jellyfish'
|
12
12
|
s.version = Jellyfish::VERSION
|
13
|
-
|
13
|
+
s.files.delete('jellyfish.png')
|
14
14
|
end
|
data/TODO.md
CHANGED
data/jellyfish.gemspec
CHANGED
@@ -1,76 +1,76 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: jellyfish 1.
|
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.
|
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 = "
|
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.
|
28
|
-
"lib/jellyfish.rb",
|
29
|
-
"lib/jellyfish/
|
30
|
-
"lib/jellyfish/
|
31
|
-
"lib/jellyfish/
|
32
|
-
"lib/jellyfish/
|
33
|
-
"lib/jellyfish/
|
34
|
-
"lib/jellyfish/
|
35
|
-
"lib/jellyfish/public/
|
36
|
-
"lib/jellyfish/
|
37
|
-
"lib/jellyfish/
|
38
|
-
"lib/jellyfish/
|
39
|
-
"lib/jellyfish/
|
40
|
-
"lib/jellyfish/
|
41
|
-
"
|
42
|
-
"
|
43
|
-
"
|
44
|
-
"
|
45
|
-
"test/
|
46
|
-
"test/
|
47
|
-
"test/sinatra/
|
48
|
-
"test/sinatra/
|
49
|
-
"test/
|
50
|
-
"test/
|
51
|
-
"test/
|
52
|
-
"test/
|
53
|
-
"test/
|
54
|
-
"test/
|
55
|
-
"test/
|
56
|
-
"test/
|
57
|
-
"
|
58
|
-
s.
|
59
|
-
s.
|
60
|
-
s.
|
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/
|
72
|
-
"test/
|
73
|
-
"test/
|
74
|
-
"test/
|
75
|
-
"test/
|
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
|