primate-run 0.3.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 +4 -4
- data/lib/primate/i18n.rb +58 -0
- data/lib/primate/request.rb +0 -2
- data/lib/primate/request_body.rb +20 -25
- data/lib/primate/route.rb +13 -13
- data/lib/primate/session.rb +1 -1
- data/lib/primate/version.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 298505225ee6957a303e3ab1a7f0ec86d012027d4324832e2cce9babb125bf31
|
|
4
|
+
data.tar.gz: 47b930327e88dab753f0f93cc2644e1ad8619b74ba723950727c16ca519db4f4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 55f0be59609602f8c2ba6fea00a429c47f6733c5b9f33a7f062ea86db97a8fc4211716cc2110d94d83b52b6f235a1f6cc67989798138f18792f280816bc13de4
|
|
7
|
+
data.tar.gz: 6ea0c1769518a53c3b8f0b9dedaf7c120e67122b2f5c83d0e6f04cc69f92c98e7c0d402372738bfa8be69da5c490017995a461da74a5dd161ecc6fdc1455de35
|
data/lib/primate/i18n.rb
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Internationalization support
|
|
4
|
+
module I18N
|
|
5
|
+
@current = nil
|
|
6
|
+
|
|
7
|
+
class << self
|
|
8
|
+
# Set the current i18n instance (called by framework)
|
|
9
|
+
#
|
|
10
|
+
# @param i18n_obj [Object] JavaScript i18n object from the runtime
|
|
11
|
+
# @return [void]
|
|
12
|
+
def set_current(i18n_obj)
|
|
13
|
+
@current = i18n_obj
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Translate a key with optional parameters
|
|
17
|
+
#
|
|
18
|
+
# @param key [String] Translation key
|
|
19
|
+
# @param params [Hash] Interpolation parameters
|
|
20
|
+
# @return [String] Translated string
|
|
21
|
+
def t(key, params = nil)
|
|
22
|
+
return key unless @current
|
|
23
|
+
|
|
24
|
+
if params.nil?
|
|
25
|
+
@current.t(key)
|
|
26
|
+
else
|
|
27
|
+
@current.t(key, params.to_json)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Locale accessor
|
|
32
|
+
#
|
|
33
|
+
# @return [Locale] Locale accessor object
|
|
34
|
+
def locale
|
|
35
|
+
Locale
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Locale accessor module
|
|
40
|
+
module Locale
|
|
41
|
+
class << self
|
|
42
|
+
# Get the current locale
|
|
43
|
+
#
|
|
44
|
+
# @return [String] Current locale code
|
|
45
|
+
def get
|
|
46
|
+
I18N.instance_variable_get(:@current)&.[]('locale')
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Set the current locale
|
|
50
|
+
#
|
|
51
|
+
# @param value [String] Locale code to set
|
|
52
|
+
# @return [void]
|
|
53
|
+
def set(value)
|
|
54
|
+
I18N.instance_variable_get(:@current)&.set(value)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
data/lib/primate/request.rb
CHANGED
|
@@ -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)
|
data/lib/primate/request_body.rb
CHANGED
|
@@ -4,43 +4,38 @@ require 'json'
|
|
|
4
4
|
require_relative 'readable'
|
|
5
5
|
require_relative 'uploaded_file'
|
|
6
6
|
|
|
7
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
31
|
+
JSON.parse(@body.formSync.to_s)
|
|
37
32
|
end
|
|
38
33
|
|
|
39
|
-
def
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
Array.new(
|
|
43
|
-
f =
|
|
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
|
|
55
|
-
|
|
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
|
@@ -2,38 +2,33 @@
|
|
|
2
2
|
|
|
3
3
|
require_relative 'request'
|
|
4
4
|
require_relative 'response'
|
|
5
|
+
require_relative 'i18n'
|
|
5
6
|
require_relative '../primate'
|
|
6
7
|
|
|
7
8
|
module Route
|
|
8
|
-
# registry: { scope_id => { "GET" => Proc, "POST" => Proc, ... } }
|
|
9
9
|
@registry = Hash.new { |h, k| h[k] = {} }
|
|
10
10
|
@current_scope = "__global__"
|
|
11
11
|
|
|
12
12
|
class << self
|
|
13
|
-
# set the active scope for subsequent handler registrations
|
|
14
|
-
# (wrapper calls this before evaluating a route file)
|
|
15
13
|
def scope(id)
|
|
16
14
|
@current_scope = id.to_s
|
|
17
15
|
@registry[@current_scope]
|
|
18
16
|
end
|
|
19
17
|
|
|
20
|
-
# clear routes for a specific scope (or the current scope if none given)
|
|
21
|
-
# wrapper calls this right before (re)evaluating the route file
|
|
22
18
|
def clear(id = nil)
|
|
23
19
|
target = (id || @current_scope).to_s
|
|
24
20
|
@registry.delete(target)
|
|
25
21
|
@registry[target] = {}
|
|
26
22
|
end
|
|
27
23
|
|
|
28
|
-
# return the verb->handler map for a scope (read-only use)
|
|
29
24
|
def registry(id = nil)
|
|
30
25
|
@registry[(id || @current_scope).to_s]
|
|
31
26
|
end
|
|
32
27
|
|
|
33
28
|
%w[GET POST PUT PATCH DELETE HEAD OPTIONS CONNECT TRACE].each do |verb|
|
|
34
|
-
define_method(verb.downcase) do
|
|
29
|
+
define_method(verb.downcase) do |content_type: nil, &block|
|
|
35
30
|
raise ArgumentError, "block required" unless block
|
|
36
|
-
registry[verb] = block
|
|
31
|
+
registry[verb] = { handler: block, content_type: content_type }
|
|
37
32
|
end
|
|
38
33
|
end
|
|
39
34
|
|
|
@@ -41,15 +36,20 @@ module Route
|
|
|
41
36
|
PrimateInternal.set_session(session, helpers)
|
|
42
37
|
end
|
|
43
38
|
|
|
44
|
-
def
|
|
39
|
+
def set_i18n(i18n)
|
|
40
|
+
I18N.set_current(i18n)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def call_js(scope_id, verb, js_req, helpers, session, i18n)
|
|
45
44
|
set_session(session, helpers)
|
|
46
|
-
|
|
45
|
+
set_i18n(i18n)
|
|
47
46
|
|
|
48
47
|
verb_up = verb.to_s.upcase
|
|
49
|
-
|
|
50
|
-
return Response.error(status: 404) unless
|
|
48
|
+
entry = @registry.dig(scope_id.to_s, verb_up)
|
|
49
|
+
return Response.error(status: 404) unless entry
|
|
51
50
|
|
|
52
|
-
|
|
51
|
+
request = Request.new(js_req, helpers)
|
|
52
|
+
entry[:handler].call(request)
|
|
53
53
|
end
|
|
54
54
|
end
|
|
55
55
|
end
|
data/lib/primate/session.rb
CHANGED
data/lib/primate/version.rb
CHANGED
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.
|
|
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: '
|
|
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: '
|
|
25
|
+
version: '4.0'
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: rake
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -60,6 +60,7 @@ extensions: []
|
|
|
60
60
|
extra_rdoc_files: []
|
|
61
61
|
files:
|
|
62
62
|
- lib/primate.rb
|
|
63
|
+
- lib/primate/i18n.rb
|
|
63
64
|
- lib/primate/pema.rb
|
|
64
65
|
- lib/primate/readable.rb
|
|
65
66
|
- lib/primate/request.rb
|
|
@@ -87,7 +88,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
87
88
|
requirements:
|
|
88
89
|
- - ">="
|
|
89
90
|
- !ruby/object:Gem::Version
|
|
90
|
-
version: 3.
|
|
91
|
+
version: 3.4.0
|
|
91
92
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
92
93
|
requirements:
|
|
93
94
|
- - ">="
|