jellyfish 1.1.1 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,6 +4,8 @@ require 'uri'
4
4
  require 'stringio'
5
5
 
6
6
  describe 'from README.md' do
7
+ paste :stringio
8
+
7
9
  after do
8
10
  [:Tank, :Heater, :Protector].each do |const|
9
11
  Object.send(:remove_const, const) if Object.const_defined?(const)
@@ -11,20 +13,17 @@ describe 'from README.md' do
11
13
  Muack.verify
12
14
  end
13
15
 
14
- readme = File.read(
15
- "#{File.dirname(File.expand_path(__FILE__))}/../README.md")
16
+ readme = File.read("#{__dir__}/../README.md")
16
17
  codes = readme.scan(
17
18
  /### ([^\n]+).+?``` ruby\n(.+?)\n```\n\n<!---(.+?)-->/m)
18
19
 
19
20
  codes.each.with_index do |(title, code, test), index|
20
- next if title =~ /NewRelic/i
21
-
22
21
  would "pass from README.md #%02d #{title}" % index do
23
22
  app = Rack::Builder.app{ eval(code) }
24
23
 
25
24
  test.split("\n\n").each do |t|
26
25
  method_path, expect = t.strip.split("\n", 2)
27
- method, path = method_path.split(' ')
26
+ method, path, host = method_path.split(' ')
28
27
  uri = URI.parse(path)
29
28
  pinfo, query = uri.path, uri.query
30
29
 
@@ -32,11 +31,15 @@ describe 'from README.md' do
32
31
  status, headers, body = File.open(File::NULL) do |input|
33
32
  app.call(
34
33
  'HTTP_VERSION' => 'HTTP/1.1',
35
- 'REQUEST_METHOD' => method, 'PATH_INFO' => pinfo,
36
- 'QUERY_STRING' => query , 'SCRIPT_NAME'=> '' ,
37
- 'rack.input' => input ,
34
+ 'REQUEST_METHOD' => method,
35
+ 'HTTP_HOST' => host,
36
+ 'PATH_INFO' => pinfo,
37
+ 'SCRIPT_NAME' => '',
38
+ 'QUERY_STRING' => query,
39
+ 'rack.input' => input,
40
+ 'rack.url_scheme'=> 'http',
38
41
  'rack.hijack' => lambda{
39
- sock = StringIO.new
42
+ sock = new_stringio
40
43
  # or TypeError: no implicit conversion of StringIO into IO
41
44
  mock(IO).select([sock]){ [[sock], [], []] }
42
45
  sock
@@ -44,7 +47,7 @@ describe 'from README.md' do
44
47
  end
45
48
 
46
49
  if hijack = headers.delete('rack.hijack')
47
- sock = StringIO.new
50
+ sock = new_stringio
48
51
  hijack.call(sock)
49
52
  body = sock.string.each_line("\n\n")
50
53
  end
@@ -0,0 +1,64 @@
1
+
2
+ require 'jellyfish/test'
3
+ require 'jellyfish/urlmap'
4
+
5
+ describe Jellyfish::URLMap do
6
+ paste :jellyfish
7
+
8
+ lam = lambda{ |env| [200, {}, ["lam #{env['HTTP_HOST']}"]] }
9
+ ram = lambda{ |env| [200, {}, ["ram #{env['HTTP_HOST']}"]] }
10
+
11
+ def call app, host, path='/'
12
+ get('/', app, 'HTTP_HOST' => host, 'PATH_INFO' => path).dig(-1, 0)
13
+ end
14
+
15
+ would 'map host' do
16
+ app = Jellyfish::Builder.app do
17
+ map '/', host: 'host' do
18
+ run lam
19
+ end
20
+
21
+ run ram
22
+ end
23
+
24
+ expect(call(app, 'host')).eq 'lam host'
25
+ expect(call(app, 'lust')).eq 'ram lust'
26
+ end
27
+
28
+ would 'listen' do
29
+ app = Jellyfish::Builder.app do
30
+ listen 'host' do
31
+ run lam
32
+ end
33
+
34
+ listen 'lust' do
35
+ run ram
36
+ end
37
+ end
38
+
39
+ expect(call(app, 'host')).eq 'lam host'
40
+ expect(call(app, 'lust')).eq 'ram lust'
41
+ expect(call(app, 'boom')).eq nil
42
+ end
43
+
44
+ would 'nest' do
45
+ app = Jellyfish::Builder.app do
46
+ listen 'host' do
47
+ map '/host' do
48
+ run lam
49
+ end
50
+ end
51
+
52
+ listen 'lust' do
53
+ map '/lust' do
54
+ run ram
55
+ end
56
+ end
57
+ end
58
+
59
+ expect(call(app, 'host', '/host')).eq 'lam host'
60
+ expect(call(app, 'lust', '/lust')).eq 'ram lust'
61
+ expect(call(app, 'boom', '/host')).eq nil
62
+ expect(call(app, 'boom', '/lust')).eq nil
63
+ end
64
+ end
@@ -3,10 +3,12 @@ require 'jellyfish/test'
3
3
  require 'jellyfish/urlmap'
4
4
 
5
5
  describe Jellyfish::Rewrite do
6
+ paste :jellyfish
7
+
6
8
  lam = lambda{ |env| [200, {}, [env['PATH_INFO']]] }
7
9
 
8
- def call app, env={}
9
- app.call({'SCRIPT_NAME' => ''}.merge(env)).last.first
10
+ def call app, path
11
+ get(path, app).dig(-1, 0)
10
12
  end
11
13
 
12
14
  would 'map to' do
@@ -16,7 +18,7 @@ describe Jellyfish::Rewrite do
16
18
  end
17
19
  end
18
20
 
19
- expect(call(app, 'PATH_INFO' => '/from')).eq '/to'
21
+ expect(call(app, '/from')).eq '/to'
20
22
  end
21
23
 
22
24
  would 'rewrite and fallback' do
@@ -31,8 +33,8 @@ describe Jellyfish::Rewrite do
31
33
  end
32
34
  end
33
35
 
34
- expect(call(app, 'PATH_INFO' => '/from' )).eq ''
35
- expect(call(app, 'PATH_INFO' => '/from/inner')).eq '/to/inner'
36
- expect(call(app, 'PATH_INFO' => '/from/outer')).eq '/to/outer'
36
+ expect(call(app, '/from' )).eq ''
37
+ expect(call(app, '/from/inner')).eq '/to/inner'
38
+ expect(call(app, '/from/outer')).eq '/to/outer'
37
39
  end
38
40
  end
@@ -2,7 +2,9 @@
2
2
  require 'jellyfish/test'
3
3
  require 'stringio'
4
4
 
5
- describe Jellyfish do
5
+ describe Jellyfish::WebSocket do
6
+ paste :stringio
7
+
6
8
  after do
7
9
  Muack.verify
8
10
  end
@@ -21,6 +23,7 @@ describe Jellyfish do
21
23
 
22
24
  def create_env
23
25
  sock = StringIO.new
26
+ sock.set_encoding('ASCII-8BIT')
24
27
  mock(IO).select([sock]) do # or EOFError, not sure why?
25
28
  sock << WebSocket::Message.new('pong').to_data * 2
26
29
  [[sock], [], []]
@@ -32,13 +35,13 @@ describe Jellyfish do
32
35
  would 'ping pong' do
33
36
  env, sock = create_env
34
37
  app.call(env)
35
- sock.string.should.eq <<-HTTP.chomp
38
+ sock.string.should.eq <<-HTTP.chomp.force_encoding('ASCII-8BIT')
36
39
  HTTP/1.1 101 Switching Protocols\r
37
40
  Upgrade: websocket\r
38
41
  Connection: Upgrade\r
39
42
  Sec-WebSocket-Accept: Kfh9QIsMVZcl6xEPYxPHzW8SZ8w=\r
40
43
  \r
41
- \x81\u0004ping\x81\u0004pong\x81\u0004pong
44
+ \x81\x04ping\x81\x04pong\x81\x04pong
42
45
  HTTP
43
46
  end
44
47
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jellyfish
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lin Jen-Shin (godfat)
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-22 00:00:00.000000000 Z
11
+ date: 2018-07-14 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |-
14
14
  Pico web framework for building API-centric web applications.
@@ -35,12 +35,10 @@ files:
35
35
  - bench/bench_builder.rb
36
36
  - config.ru
37
37
  - jellyfish.gemspec
38
- - jellyfish.png
39
38
  - lib/jellyfish.rb
40
39
  - lib/jellyfish/builder.rb
41
40
  - lib/jellyfish/chunked_body.rb
42
41
  - lib/jellyfish/json.rb
43
- - lib/jellyfish/newrelic.rb
44
42
  - lib/jellyfish/normalized_params.rb
45
43
  - lib/jellyfish/normalized_path.rb
46
44
  - lib/jellyfish/public/302.html
@@ -61,6 +59,7 @@ files:
61
59
  - test/sinatra/test_routing.rb
62
60
  - test/test_from_readme.rb
63
61
  - test/test_inheritance.rb
62
+ - test/test_listen.rb
64
63
  - test/test_log.rb
65
64
  - test/test_misc.rb
66
65
  - test/test_rewrite.rb
@@ -68,7 +67,7 @@ files:
68
67
  - test/test_websocket.rb
69
68
  homepage: https://github.com/godfat/jellyfish
70
69
  licenses:
71
- - Apache License 2.0
70
+ - Apache-2.0
72
71
  metadata: {}
73
72
  post_install_message:
74
73
  rdoc_options: []
@@ -86,7 +85,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
86
85
  version: '0'
87
86
  requirements: []
88
87
  rubyforge_project:
89
- rubygems_version: 2.5.1
88
+ rubygems_version: 2.7.7
90
89
  signing_key:
91
90
  specification_version: 4
92
91
  summary: Pico web framework for building API-centric web applications.
@@ -99,6 +98,7 @@ test_files:
99
98
  - test/sinatra/test_routing.rb
100
99
  - test/test_from_readme.rb
101
100
  - test/test_inheritance.rb
101
+ - test/test_listen.rb
102
102
  - test/test_log.rb
103
103
  - test/test_misc.rb
104
104
  - test/test_rewrite.rb
Binary file
@@ -1,24 +0,0 @@
1
-
2
- require 'jellyfish'
3
- require 'rack/request'
4
- require 'new_relic/agent/instrumentation/controller_instrumentation'
5
-
6
- module Jellyfish
7
- module NewRelic
8
- include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
9
-
10
- def block_call argument, block
11
- path = if argument.respond_to?(:regexp)
12
- argument.regexp
13
- else
14
- argument
15
- end.to_s[1..-1]
16
- name = "#{env['REQUEST_METHOD']} #{path}"
17
-
18
- perform_action_with_newrelic_trace(:category => :rack ,
19
- :name => name ,
20
- :request => request,
21
- :params => request.params){super}
22
- end
23
- end
24
- end