jellyfish 1.2.2 → 1.3.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
2
  SHA256:
3
- metadata.gz: 40f88cf4d0c350c287fe8ed80e3bd06233e2315039fea6e36f21a10434d99ff1
4
- data.tar.gz: a9619f0b57d9ad1a277f6913c1782807089c3543bcbda741377664f90fb175f7
3
+ metadata.gz: 8f9e1adde462fe63f752d02b74395426c74022f9e8fb920ecf089a4b3bb20624
4
+ data.tar.gz: 2c4fea5a52568b9bd153c95f67c02a722634ad32177733be4c7941686eb9bfed
5
5
  SHA512:
6
- metadata.gz: 57c9c42a73f08953c5118c1c18cc9703a4528756b167bfb7ff04ef122e939062d8219c1ea5740bcdc9917a770b27715b339680a485ac01dfe9178e0a0409d46c
7
- data.tar.gz: c79d13a73c40ed4466381b97c93d8d4d2f1a4d11f89f8e2732b6366915ae0db5ffe863c6e20b6186b6cb1ea1eb8b588d59f30be7e68da516b950ea604c35f724
6
+ metadata.gz: 428fb54496fb53eb2efc363f37d0ad2b7b889edb23c3a40a22cd1acc52f20348015b8193a8d92967a9f8da1716903b68ff672ff581e4e68411d8b017b6a6a3ca
7
+ data.tar.gz: 20db48c00b68b9cb4bb3499e3a0bf8bee223f71f0f48312c16a1eeb21481cb5cb2865a2ec2331412ffcf4e88e9bfa4da4a5bc81e6a2ca206b6df4d8b211b61be
data/CHANGES.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # CHANGES
2
2
 
3
+ ## Jellyfish 1.3.0 -- 2018-11-11
4
+
5
+ ### Incompatible changes
6
+
7
+ * Interface for `Builder.app`, and `Builder#to_app`, and `Rewrite.new`
8
+ slightly changed due to fixing the bug in `Rewrite`. You shouldn't use
9
+ those directly though.
10
+ * Now all strings allocated from Jellyfish are frozen.
11
+
12
+ ### Bugs fixed
13
+
14
+ * Fixed `Jellyfish::Rewrite`. Should properly handle SCRIPT_NAME.
15
+
3
16
  ## Jellyfish 1.2.2 -- 2018-09-23
4
17
 
5
18
  ### Bugs fixed
@@ -1,14 +1,14 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: jellyfish 1.2.2 ruby lib
2
+ # stub: jellyfish 1.3.0 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "jellyfish".freeze
6
- s.version = "1.2.2"
6
+ s.version = "1.3.0"
7
7
 
8
8
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib".freeze]
10
10
  s.authors = ["Lin Jen-Shin (godfat)".freeze]
11
- s.date = "2018-09-23"
11
+ s.date = "2018-11-11"
12
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
13
  s.email = ["godfat (XD) godfat.org".freeze]
14
14
  s.files = [
@@ -56,7 +56,7 @@ Gem::Specification.new do |s|
56
56
  "test/test_websocket.rb".freeze]
57
57
  s.homepage = "https://github.com/godfat/jellyfish".freeze
58
58
  s.licenses = ["Apache-2.0".freeze]
59
- s.rubygems_version = "2.7.7".freeze
59
+ s.rubygems_version = "2.7.8".freeze
60
60
  s.summary = "Pico web framework for building API-centric web applications.".freeze
61
61
  s.test_files = [
62
62
  "test/rack/test_builder.rb".freeze,
@@ -1,10 +1,11 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  require 'jellyfish/urlmap'
3
4
 
4
5
  module Jellyfish
5
6
  class Builder
6
- def self.app app=nil, to=nil, &block
7
- new(app, &block).to_app(to)
7
+ def self.app app=nil, from=nil, to=nil, &block
8
+ new(app, &block).to_app(from, to)
8
9
  end
9
10
 
10
11
  def initialize app=nil, &block
@@ -43,11 +44,11 @@ module Jellyfish
43
44
  end
44
45
  end
45
46
 
46
- def to_app to=nil
47
+ def to_app from=nil, to=nil
47
48
  run = if @map then generate_map(@map, @run) else @run end
48
49
  fail 'missing run or map statement' unless run
49
50
  app = @use.inject(run){ |a, m| m.call(a) }
50
- result = if to then Rewrite.new(app, to) else app end
51
+ result = if to then Rewrite.new(app, from, to) else app end
51
52
  @warmup.call(result) if @warmup
52
53
  result
53
54
  end
@@ -56,7 +57,7 @@ module Jellyfish
56
57
  def generate_map current_map, app
57
58
  mapped = if app then {'' => app} else {} end
58
59
  current_map.each do |path, (block, to)|
59
- mapped[path] = self.class.app(app, to, &block)
60
+ mapped[path] = self.class.app(app, path, to, &block)
60
61
  end
61
62
  URLMap.new(mapped)
62
63
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  require 'jellyfish'
3
4
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  module Jellyfish; end
3
4
  module Jellyfish::Json
@@ -1,8 +1,8 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  require 'jellyfish'
3
4
  require 'rack/request'
4
5
 
5
-
6
6
  module Jellyfish
7
7
  module NormalizedParams
8
8
  attr_reader :params
@@ -1,8 +1,8 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  require 'jellyfish'
3
4
  require 'uri'
4
5
 
5
-
6
6
  module Jellyfish
7
7
  module NormalizedPath
8
8
  def path_info
@@ -1,8 +1,21 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  module Jellyfish
3
- class Rewrite < Struct.new(:app, :to)
4
+ class Rewrite < Struct.new(:app, :from, :to)
4
5
  def call env
5
- app.call(env.merge('PATH_INFO' => "#{to}#{env['PATH_INFO']}"))
6
+ app.call(env.merge(
7
+ 'SCRIPT_NAME' => delete_suffix(env['SCRIPT_NAME'], from),
8
+ 'PATH_INFO' => "#{to}#{env['PATH_INFO']}"))
9
+ end
10
+
11
+ if ''.respond_to?(:delete_suffix)
12
+ def delete_suffix str, suffix
13
+ str.delete_suffix(suffix)
14
+ end
15
+ else
16
+ def delete_suffix str, suffix
17
+ str.sub(/#{Regexp.escape(suffix)}\z/, '')
18
+ end
6
19
  end
7
20
  end
8
21
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  require 'pork/auto'
3
4
  require 'muack'
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  require 'uri'
3
4
 
@@ -46,8 +47,9 @@ module Jellyfish
46
47
  end
47
48
 
48
49
  if app = @mapped[key]
49
- app.call(env.merge('PATH_INFO' => path_info[cut_path.size..-1],
50
- 'SCRIPT_NAME' => env['SCRIPT_NAME'] + script_name))
50
+ app.call(env.merge(
51
+ 'SCRIPT_NAME' => env['SCRIPT_NAME'] + script_name,
52
+ 'PATH_INFO' => path_info[cut_path.size..-1]))
51
53
  else
52
54
  [404, {}, []]
53
55
  end
@@ -1,4 +1,5 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  module Jellyfish
3
- VERSION = '1.2.2'
4
+ VERSION = '1.3.0'
4
5
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  require 'jellyfish'
3
4
  require 'websocket_parser'
@@ -5,7 +5,9 @@ require 'jellyfish/urlmap'
5
5
  describe Jellyfish::Rewrite do
6
6
  paste :jellyfish
7
7
 
8
- lam = lambda{ |env| [200, {}, [env['PATH_INFO']]] }
8
+ lam = lambda do |env|
9
+ [200, {}, ["#{env['SCRIPT_NAME']}!#{env['PATH_INFO']}"]]
10
+ end
9
11
 
10
12
  def call app, path
11
13
  get(path, app).dig(-1, 0)
@@ -18,23 +20,25 @@ describe Jellyfish::Rewrite do
18
20
  end
19
21
  end
20
22
 
21
- expect(call(app, '/from/here')).eq '/to/here'
23
+ expect(call(app, '/from/here')).eq '!/to/here'
22
24
  end
23
25
 
24
26
  would 'rewrite and fallback' do
25
27
  app = Jellyfish::Builder.app do
26
- rewrite '/from/inner' => '/to/inner',
27
- '/from/outer' => '/to/outer' do
28
- run lam
29
- end
30
-
31
- map '/from' do
32
- run lam
28
+ map '/top' do
29
+ rewrite '/from/inner' => '/to/inner',
30
+ '/from/outer' => '/to/outer' do
31
+ run lam
32
+ end
33
+
34
+ map '/from' do
35
+ run lam
36
+ end
33
37
  end
34
38
  end
35
39
 
36
- expect(call(app, '/from' )).eq ''
37
- expect(call(app, '/from/inner')).eq '/to/inner'
38
- expect(call(app, '/from/outer')).eq '/to/outer'
40
+ expect(call(app, '/top/from/other')).eq '/top/from!/other'
41
+ expect(call(app, '/top/from/inner')).eq '/top!/to/inner'
42
+ expect(call(app, '/top/from/outer')).eq '/top!/to/outer'
39
43
  end
40
44
  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.2.2
4
+ version: 1.3.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: 2018-09-23 00:00:00.000000000 Z
11
+ date: 2018-11-11 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |-
14
14
  Pico web framework for building API-centric web applications.
@@ -85,7 +85,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
85
  version: '0'
86
86
  requirements: []
87
87
  rubyforge_project:
88
- rubygems_version: 2.7.7
88
+ rubygems_version: 2.7.8
89
89
  signing_key:
90
90
  specification_version: 4
91
91
  summary: Pico web framework for building API-centric web applications.