itsi-server 0.2.7 → 0.2.9

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: a903e132ef7c772c7774a05632d50cae7abb99ec7471fd7479c7c7b8ade1aadc
4
- data.tar.gz: 35770b2f19bd1273cb05dba7c4369ec416878175d53a87c45d425c2841d73e84
3
+ metadata.gz: 7de2dcacb42a3cad9986346e2acf704398e8fa5ea914c2c3172567426905b1fb
4
+ data.tar.gz: b3b899916642adc30083e4743dbf063431f6de66814e32fd078559f84f437c23
5
5
  SHA512:
6
- metadata.gz: a838b6d7d5abd5449775a31ad6be9e6323578a677eb44ce9f4c6d938601d3a8d9a6df2aa5fe7749078c2047a8e75f716f22f84d65ad95027f19abd2fb3007110
7
- data.tar.gz: 36d205941ce61387b99e98897661fdc6843ec978959e90d69ae16d45ae6255d3560585586aa244c86281c903fd60ba46fb1dd26087383ece81ed0ec6caa9055e
6
+ metadata.gz: 9f2c16a266cdeee4d70b735c9a0f63448a453a06e56aadc18ddcf5f64218c219df882e5d39961d3e77b1edd757d63117da2e5b8a60dc854b50e13e9f14f52e21
7
+ data.tar.gz: e1d71d18956970cf5c7a8ccad1e766d7266428040acef89f3d032773ebcdcfa79fa872cf741ca26de26b0e87203565390720b2c74ac89e0e783a8267199ccca3
data/Cargo.lock CHANGED
@@ -1644,7 +1644,7 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
1644
1644
 
1645
1645
  [[package]]
1646
1646
  name = "itsi-server"
1647
- version = "0.2.7"
1647
+ version = "0.2.9"
1648
1648
  dependencies = [
1649
1649
  "argon2",
1650
1650
  "async-channel",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "itsi-scheduler"
3
- version = "0.2.7"
3
+ version = "0.2.9"
4
4
  edition = "2021"
5
5
  authors = ["Wouter Coppieters <wc@pico.net.nz>"]
6
6
  license = "MIT"
@@ -7,7 +7,7 @@ use itsi_error::ItsiError;
7
7
  use itsi_rb_helpers::{call_without_gvl, create_ruby_thread};
8
8
  use magnus::{
9
9
  error::Result as MagnusResult,
10
- value::{InnerValue, Opaque, ReprValue},
10
+ value::{InnerValue, Lazy, LazyId, Opaque, ReprValue},
11
11
  Module, RClass, Ruby, Value,
12
12
  };
13
13
  use mio::{Events, Poll, Token, Waker};
@@ -19,7 +19,7 @@ use std::{
19
19
  time::Duration,
20
20
  };
21
21
  use timer::Timer;
22
- use tracing::{debug, info, warn};
22
+ use tracing::{debug, error, info, warn};
23
23
 
24
24
  #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
25
25
  pub(crate) struct Readiness(i16);
@@ -31,6 +31,9 @@ impl std::fmt::Debug for ItsiScheduler {
31
31
  }
32
32
 
33
33
  const WAKE_TOKEN: Token = Token(0);
34
+ static ID_CURRENT: LazyId = LazyId::new("current");
35
+ static CLASS_FIBER: Lazy<RClass> =
36
+ Lazy::new(|ruby| ruby.module_kernel().const_get("Fiber").unwrap());
34
37
 
35
38
  #[magnus::wrap(class = "Itsi::Scheduler", free_immediately, size)]
36
39
  pub(crate) struct ItsiScheduler {
@@ -225,14 +228,17 @@ impl ItsiScheduler {
225
228
  let result: Arc<RwLock<Option<T>>> = Arc::new(RwLock::new(None));
226
229
  let result_clone = Arc::clone(&result);
227
230
 
228
- let current_fiber = Opaque::from(ruby.fiber_current());
229
- let scheduler = Opaque::from(
230
- ruby.module_kernel()
231
- .const_get::<_, RClass>("Fiber")
232
- .unwrap()
233
- .funcall::<_, _, Value>("scheduler", ())
234
- .unwrap(),
235
- );
231
+ let class_fiber = ruby.get_inner(&CLASS_FIBER);
232
+ let current_fiber = ruby
233
+ .get_inner(&CLASS_FIBER)
234
+ .funcall::<_, _, Value>(*ID_CURRENT, ());
235
+
236
+ if current_fiber.is_err() {
237
+ error!("Failed to get current fiber");
238
+ return Err(ItsiError::ArgumentError("Failed to get current fiber".to_string()).into());
239
+ }
240
+ let current_fiber = Opaque::from(current_fiber.unwrap());
241
+ let scheduler = Opaque::from(class_fiber.funcall::<_, _, Value>("scheduler", ()).unwrap());
236
242
 
237
243
  create_ruby_thread(move || {
238
244
  call_without_gvl(|| {
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "itsi-server"
3
- version = "0.2.7"
3
+ version = "0.2.9"
4
4
  edition = "2021"
5
5
  authors = ["Wouter Coppieters <wc@pico.net.nz>"]
6
6
  license = "MIT"
@@ -108,16 +108,13 @@ impl HttpRequestContext {
108
108
  }
109
109
 
110
110
  pub fn set_supported_encoding_set(&self, req: &HttpRequest) {
111
- let supported_encoding_set = req
112
- .headers()
113
- .get_all(ACCEPT_ENCODING)
114
- .into_iter()
115
- .cloned()
116
- .collect::<Vec<_>>();
117
- self.inner
118
- .supported_encoding_set
119
- .set(supported_encoding_set)
120
- .unwrap();
111
+ self.inner.supported_encoding_set.get_or_init(move || {
112
+ req.headers()
113
+ .get_all(ACCEPT_ENCODING)
114
+ .into_iter()
115
+ .cloned()
116
+ .collect::<Vec<_>>()
117
+ });
121
118
  }
122
119
 
123
120
  pub fn set_origin(&self, origin: Option<String>) {
@@ -42,7 +42,16 @@ module Itsi
42
42
  end
43
43
 
44
44
  def self.included(cls) # rubocop:disable Metrics/PerceivedComplexity,Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength
45
+
46
+ class << cls
47
+ def subclasses
48
+ @subclasses ||= []
49
+ end
50
+ end
51
+
45
52
  def cls.inherited(base) # rubocop:disable Metrics/MethodLength,Lint/MissingSuper,Metrics/PerceivedComplexity
53
+ self.subclasses << base
54
+
46
55
  %i[detail documentation insert_text schema].each do |attr|
47
56
  base.define_singleton_method(attr) do |value = nil|
48
57
  @middleware_class_attrs ||= {}
@@ -35,6 +35,7 @@ module Itsi
35
35
  # 3. Default values.
36
36
  def self.build_config(args, config_file_path, builder_proc = nil)
37
37
  args.transform_keys!(&:to_sym)
38
+
38
39
  itsifile_config, errors = \
39
40
  if builder_proc
40
41
  DSL.evaluate(&builder_proc)
@@ -105,6 +106,7 @@ module Itsi
105
106
  Server.write_pid
106
107
  end
107
108
 
109
+
108
110
  srv_config = {
109
111
  workers: args.fetch(:workers) { itsifile_config.fetch(:workers, 1) },
110
112
  worker_memory_limit: args.fetch(:worker_memory_limit) { itsifile_config.fetch(:worker_memory_limit, nil) },
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Itsi
4
4
  class Server
5
- VERSION = "0.2.7"
5
+ VERSION = "0.2.9"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: itsi-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.7
4
+ version: 0.2.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wouter Coppieters
@@ -51,6 +51,20 @@ dependencies:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
53
  version: 0.9.91
54
+ - !ruby/object:Gem::Dependency
55
+ name: prism
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.4'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '1.4'
54
68
  - !ruby/object:Gem::Dependency
55
69
  name: ruby-lsp
56
70
  requirement: !ruby/object:Gem::Requirement