primate-run 0.5.0 → 0.6.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
2
  SHA256:
3
- metadata.gz: 87e509379ff99ace8be7f98839eeee30c17b5be50079fbbbfd6b7adba31a8537
4
- data.tar.gz: c329779406d4079f8dea9a40b29d1c13a14fa12879ef10b1e95bfc09e394e54f
3
+ metadata.gz: 298505225ee6957a303e3ab1a7f0ec86d012027d4324832e2cce9babb125bf31
4
+ data.tar.gz: 47b930327e88dab753f0f93cc2644e1ad8619b74ba723950727c16ca519db4f4
5
5
  SHA512:
6
- metadata.gz: d12613cb5afa41f93ff3cdba54f56c686288bd0a99014fdb48ac127f22b2e219caea6c94d2e76d4f8ef98652176f8405843a89c9e96136b0d539f2a89299e180
7
- data.tar.gz: 28e1aad880c9866b2ca0c03f19501ccb78b76c2e0774ac0fe54d4f0388656727048734030c147f6605754391305a33792e16e4ba626b7d74a25370d57021ff59
6
+ metadata.gz: 55f0be59609602f8c2ba6fea00a429c47f6733c5b9f33a7f062ea86db97a8fc4211716cc2110d94d83b52b6f235a1f6cc67989798138f18792f280816bc13de4
7
+ data.tar.gz: 6ea0c1769518a53c3b8f0b9dedaf7c120e67122b2f5c83d0e6f04cc69f92c98e7c0d402372738bfa8be69da5c490017995a461da74a5dd161ecc6fdc1455de35
@@ -7,8 +7,6 @@ require_relative 'request_body'
7
7
  class Request
8
8
  attr_reader :url, :body, :path, :query, :headers, :cookies
9
9
 
10
- # @param request [Object] JavaScript request object from the runtime
11
- # @param helpers [Object] Helper functions from JavaScript runtime
12
10
  def initialize(request, helpers)
13
11
  @url = Primate::URL.new(request['url'])
14
12
  @body = RequestBody.new(request['body'], helpers)
@@ -4,43 +4,38 @@ require 'json'
4
4
  require_relative 'readable'
5
5
  require_relative 'uploaded_file'
6
6
 
7
- # Wrapper for request body with type-specific methods
7
+ class Multipart
8
+ attr_reader :form, :files
9
+
10
+ def initialize(form, files)
11
+ @form = form
12
+ @files = files
13
+ end
14
+ end
15
+
8
16
  class RequestBody
9
- # Initialize with JavaScript body object
10
- #
11
- # @param body [Object] JavaScript body object from runtime
12
- # @param helpers [Object] Helper functions from JavaScript runtime
13
17
  def initialize(body, helpers)
14
18
  @body = body
15
19
  @helpers = helpers
16
20
  end
17
21
 
18
- # Get body as JSON (parsed hash)
19
- #
20
- # @return [Hash] Parsed JSON data
21
22
  def json
22
- JSON.parse(@body.json.to_s)
23
+ JSON.parse(@body.jsonSync.to_s)
23
24
  end
24
25
 
25
- # Get body as plain text
26
- #
27
- # @return [String] Body as string
28
26
  def text
29
- @body.text.to_s
27
+ @body.textSync.to_s
30
28
  end
31
29
 
32
- # Get form as hash
33
- #
34
- # @return [Hash] Form data
35
30
  def form
36
- JSON.parse(@body.form.to_s)
31
+ JSON.parse(@body.formSync.to_s)
37
32
  end
38
33
 
39
- def files
40
- files = @body.files
41
-
42
- Array.new(files[:length].to_i) do |i|
43
- f = files[i]
34
+ def multipart
35
+ form = JSON.parse(@body.formSync.to_s)
36
+ files_js = @body.filesSync
37
+ files = Array.new(files_js[:length].to_i) do |i|
38
+ f = files_js[i]
44
39
  Primate::UploadedFile.new(
45
40
  field: f['field'].to_s,
46
41
  name: f['name'].to_s,
@@ -49,10 +44,10 @@ class RequestBody
49
44
  bytes: f['bytes']
50
45
  )
51
46
  end
47
+ Multipart.new(form, files)
52
48
  end
53
49
 
54
- def binary
55
- binary = @body.binary
56
- Primate::Readable.new(binary['buffer'], binary['mime'].to_s)
50
+ def blob
51
+ Primate::Readable.new(@body.blobSync, @body.blobTypeSync.to_s)
57
52
  end
58
53
  end
data/lib/primate/route.rb CHANGED
@@ -10,28 +10,25 @@ module Route
10
10
  @current_scope = "__global__"
11
11
 
12
12
  class << self
13
- # set the active scope for subsequent handler registrations
14
13
  def scope(id)
15
14
  @current_scope = id.to_s
16
15
  @registry[@current_scope]
17
16
  end
18
17
 
19
- # clear routes for a specific scope (or the current scope if none given)
20
18
  def clear(id = nil)
21
19
  target = (id || @current_scope).to_s
22
20
  @registry.delete(target)
23
21
  @registry[target] = {}
24
22
  end
25
23
 
26
- # return the verb->handler map for a scope (read-only use)
27
24
  def registry(id = nil)
28
25
  @registry[(id || @current_scope).to_s]
29
26
  end
30
27
 
31
28
  %w[GET POST PUT PATCH DELETE HEAD OPTIONS CONNECT TRACE].each do |verb|
32
- define_method(verb.downcase) do |&block|
29
+ define_method(verb.downcase) do |content_type: nil, &block|
33
30
  raise ArgumentError, "block required" unless block
34
- registry[verb] = block
31
+ registry[verb] = { handler: block, content_type: content_type }
35
32
  end
36
33
  end
37
34
 
@@ -47,12 +44,12 @@ module Route
47
44
  set_session(session, helpers)
48
45
  set_i18n(i18n)
49
46
 
50
- request = Request.new(js_req, helpers)
51
47
  verb_up = verb.to_s.upcase
52
- handler = @registry.dig(scope_id.to_s, verb_up)
53
- return Response.error(status: 404) unless handler
48
+ entry = @registry.dig(scope_id.to_s, verb_up)
49
+ return Response.error(status: 404) unless entry
54
50
 
55
- handler.call(request)
51
+ request = Request.new(js_req, helpers)
52
+ entry[:handler].call(request)
56
53
  end
57
54
  end
58
55
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Primate
4
- VERSION = '0.5.0'
4
+ VERSION = '0.6.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: primate-run
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Primate Team
@@ -15,14 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - "~>"
17
17
  - !ruby/object:Gem::Version
18
- version: '2.0'
18
+ version: '4.0'
19
19
  type: :development
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - "~>"
24
24
  - !ruby/object:Gem::Version
25
- version: '2.0'
25
+ version: '4.0'
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: rake
28
28
  requirement: !ruby/object:Gem::Requirement
@@ -88,7 +88,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
88
88
  requirements:
89
89
  - - ">="
90
90
  - !ruby/object:Gem::Version
91
- version: 3.0.0
91
+ version: 3.4.0
92
92
  required_rubygems_version: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - ">="