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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8b2c148d3977eec632a6dbaf26f9f287aa31103186aa483f0ec1344f7373bd72
4
- data.tar.gz: 984e63ba747fbafb366e08a697fdef9619a363d7972f97d44b8946e72228beb0
3
+ metadata.gz: 298505225ee6957a303e3ab1a7f0ec86d012027d4324832e2cce9babb125bf31
4
+ data.tar.gz: 47b930327e88dab753f0f93cc2644e1ad8619b74ba723950727c16ca519db4f4
5
5
  SHA512:
6
- metadata.gz: 396027b032cbc82037e8a425d55aebf54e1adf94736f24a54baa46ce6d6cda2c985177b50af3d2ce086a8767ca8ce5d7ccf5b0ff63ebfd6c1a47c92fe84bb163
7
- data.tar.gz: 1bcf294a39b094a2ab643326ec0af72230dd317cd7d21a88751030e2afe93bca3ffe75f5de16dd194d6222f72ad528976f4a61a8748b038ee22e1355362a552a
6
+ metadata.gz: 55f0be59609602f8c2ba6fea00a429c47f6733c5b9f33a7f062ea86db97a8fc4211716cc2110d94d83b52b6f235a1f6cc67989798138f18792f280816bc13de4
7
+ data.tar.gz: 6ea0c1769518a53c3b8f0b9dedaf7c120e67122b2f5c83d0e6f04cc69f92c98e7c0d402372738bfa8be69da5c490017995a461da74a5dd161ecc6fdc1455de35
@@ -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
@@ -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
@@ -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 |&block|
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 call_js(scope_id, verb, js_req, helpers, session)
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
- request = Request.new(js_req, helpers)
45
+ set_i18n(i18n)
47
46
 
48
47
  verb_up = verb.to_s.upcase
49
- handler = @registry.dig(scope_id.to_s, verb_up)
50
- 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
51
50
 
52
- handler.call(request)
51
+ request = Request.new(js_req, helpers)
52
+ entry[:handler].call(request)
53
53
  end
54
54
  end
55
55
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Session management helpers
3
+ # Session management
4
4
  module Session
5
5
  class << self
6
6
  attr_accessor :current
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Primate
4
- VERSION = '0.3.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.3.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
@@ -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.0.0
91
+ version: 3.4.0
91
92
  required_rubygems_version: !ruby/object:Gem::Requirement
92
93
  requirements:
93
94
  - - ">="