tina4ruby 3.11.8 → 3.11.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 +4 -4
- data/lib/tina4/dev.rb +0 -1
- data/lib/tina4/router.rb +3 -2
- data/lib/tina4/seeder.rb +5 -1
- data/lib/tina4/version.rb +1 -1
- data/lib/tina4/websocket.rb +15 -0
- data/lib/tina4.rb +0 -1
- metadata +2 -3
- data/lib/tina4/dev_reload.rb +0 -68
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: df3e8a44d54b3dc392460aeef376b7085198b2804b0e2457e5b90acb686369ed
|
|
4
|
+
data.tar.gz: 7005aeee87cedaa5f186102bb41ce3fcd70d3848371355e3c0cbbf85ae76b0a7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a369e8dde59dad51bade987d67477eb270a879bf0edd6d4ad4e0bce752c5a471cd89806b8a692b3eec9608eb765ceab38fa10fd52b41422bf628414302f66dbb
|
|
7
|
+
data.tar.gz: f239c1cae63624e1e399d7e9e6a804880273c4c4ef702ae9536d3adf0702e18edcdf26d8494dce5072197b8233c8a96e2ea0638605118986a4aac49d2936c4c8
|
data/lib/tina4/dev.rb
CHANGED
data/lib/tina4/router.rb
CHANGED
|
@@ -109,8 +109,9 @@ module Tina4
|
|
|
109
109
|
@param_names << { name: name.to_sym, type: "path" }
|
|
110
110
|
'(.+)'
|
|
111
111
|
elsif part == "*"
|
|
112
|
-
# Bare catch-all wildcard: captures everything after
|
|
113
|
-
|
|
112
|
+
# Bare catch-all wildcard: captures everything after under the "*" key
|
|
113
|
+
# to match Python/PHP/Node parity (docs say `request.params["*"]`).
|
|
114
|
+
@param_names << { name: :"*", type: "path" }
|
|
114
115
|
'(.+)'
|
|
115
116
|
elsif part =~ /\A\{(\w+)(?::(\w+))?\}\z/
|
|
116
117
|
# Tina4/Python-style brace params: {id} or {id:int}
|
data/lib/tina4/seeder.rb
CHANGED
|
@@ -526,8 +526,12 @@ module Tina4
|
|
|
526
526
|
|
|
527
527
|
# Run all seed files in the given folder.
|
|
528
528
|
#
|
|
529
|
+
# Parity: Python/PHP/Node use `seed(n)` to set the PRNG seed on FakeData.
|
|
530
|
+
# Ruby's FakeData.seed already does that — this folder-runner is named
|
|
531
|
+
# differently to avoid the collision.
|
|
532
|
+
#
|
|
529
533
|
# @param seed_folder [String] path to seed files (default: "seeds")
|
|
530
|
-
def self.
|
|
534
|
+
def self.run_seeds(seed_folder: "seeds", clear: false)
|
|
531
535
|
seed_dir(seed_folder: seed_folder, clear: clear)
|
|
532
536
|
end
|
|
533
537
|
|
data/lib/tina4/version.rb
CHANGED
data/lib/tina4/websocket.rb
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
require "socket"
|
|
3
3
|
require "digest"
|
|
4
4
|
require "base64"
|
|
5
|
+
require "json"
|
|
5
6
|
require "set"
|
|
6
7
|
|
|
7
8
|
module Tina4
|
|
@@ -117,6 +118,14 @@ module Tina4
|
|
|
117
118
|
(@rooms[room_name] || Set.new).size
|
|
118
119
|
end
|
|
119
120
|
|
|
121
|
+
# Return list of room names a given client/connection id belongs to.
|
|
122
|
+
# Matches PHP Tina4\WebSocket::getClientRooms($clientId).
|
|
123
|
+
def get_client_rooms(client_id)
|
|
124
|
+
@rooms.each_with_object([]) do |(name, members), acc|
|
|
125
|
+
acc << name if members.include?(client_id)
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
120
129
|
def get_room_connections(room_name)
|
|
121
130
|
ids = @rooms[room_name] || Set.new
|
|
122
131
|
ids.filter_map { |id| @connections[id] }
|
|
@@ -278,6 +287,12 @@ module Tina4
|
|
|
278
287
|
|
|
279
288
|
alias_method :send_text, :send
|
|
280
289
|
|
|
290
|
+
# Serialize a Hash/Array (or any JSON-coercible value) and send as a text frame.
|
|
291
|
+
# Matches Python/PHP send_json.
|
|
292
|
+
def send_json(data)
|
|
293
|
+
send_text(JSON.generate(data))
|
|
294
|
+
end
|
|
295
|
+
|
|
281
296
|
def send_pong(data)
|
|
282
297
|
frame = build_frame(0xA, data || "")
|
|
283
298
|
@socket.write(frame)
|
data/lib/tina4.rb
CHANGED
|
@@ -100,7 +100,6 @@ module Tina4
|
|
|
100
100
|
autoload :WebSocketConnection, File.expand_path("tina4/websocket", __dir__)
|
|
101
101
|
autoload :Testing, File.expand_path("tina4/testing", __dir__)
|
|
102
102
|
autoload :ScssCompiler, File.expand_path("tina4/scss_compiler", __dir__)
|
|
103
|
-
autoload :DevReload, File.expand_path("tina4/dev_reload", __dir__)
|
|
104
103
|
autoload :FakeData, File.expand_path("tina4/seeder", __dir__)
|
|
105
104
|
autoload :WSDL, File.expand_path("tina4/wsdl", __dir__)
|
|
106
105
|
BANNER = <<~'BANNER'
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: tina4ruby
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.11.
|
|
4
|
+
version: 3.11.9
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Tina4 Team
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-04-
|
|
11
|
+
date: 2026-04-15 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rack
|
|
@@ -294,7 +294,6 @@ files:
|
|
|
294
294
|
- lib/tina4/dev.rb
|
|
295
295
|
- lib/tina4/dev_admin.rb
|
|
296
296
|
- lib/tina4/dev_mailbox.rb
|
|
297
|
-
- lib/tina4/dev_reload.rb
|
|
298
297
|
- lib/tina4/drivers/firebird_driver.rb
|
|
299
298
|
- lib/tina4/drivers/mongodb_driver.rb
|
|
300
299
|
- lib/tina4/drivers/mssql_driver.rb
|
data/lib/tina4/dev_reload.rb
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Tina4
|
|
4
|
-
module DevReload
|
|
5
|
-
WATCH_EXTENSIONS = %w[.rb .twig .html .erb .scss .css .js].freeze
|
|
6
|
-
WATCH_DIRS = %w[src routes lib templates public].freeze
|
|
7
|
-
IGNORE_DIRS = %w[.git node_modules vendor logs sessions .queue .keys].freeze
|
|
8
|
-
|
|
9
|
-
class << self
|
|
10
|
-
def start(root_dir: Dir.pwd, &on_change)
|
|
11
|
-
require "listen"
|
|
12
|
-
|
|
13
|
-
dirs = WATCH_DIRS
|
|
14
|
-
.map { |d| File.join(root_dir, d) }
|
|
15
|
-
.select { |d| Dir.exist?(d) }
|
|
16
|
-
|
|
17
|
-
# Also watch root for .rb files
|
|
18
|
-
dirs << root_dir
|
|
19
|
-
|
|
20
|
-
Tina4::Log.info("Dev reload watching: #{dirs.join(', ')}")
|
|
21
|
-
|
|
22
|
-
@listener = Listen.to(*dirs, only: /\.(#{WATCH_EXTENSIONS.map { |e| e.delete('.') }.join('|')})$/, ignore: build_ignore_regex) do |modified, added, removed|
|
|
23
|
-
changes = { modified: modified, added: added, removed: removed }
|
|
24
|
-
all_files = modified + added + removed
|
|
25
|
-
next if all_files.empty?
|
|
26
|
-
|
|
27
|
-
Tina4::Log.info("File changes detected:")
|
|
28
|
-
modified.each { |f| Tina4::Log.debug(" Modified: #{f}") }
|
|
29
|
-
added.each { |f| Tina4::Log.debug(" Added: #{f}") }
|
|
30
|
-
removed.each { |f| Tina4::Log.debug(" Removed: #{f}") }
|
|
31
|
-
|
|
32
|
-
# Reload Ruby files
|
|
33
|
-
modified.select { |f| f.end_with?(".rb") }.each do |file|
|
|
34
|
-
begin
|
|
35
|
-
load file
|
|
36
|
-
Tina4::Log.info("Reloaded: #{file}")
|
|
37
|
-
rescue => e
|
|
38
|
-
Tina4::Log.error("Reload failed: #{file} - #{e.message}")
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
# Recompile SCSS
|
|
43
|
-
scss_changes = all_files.select { |f| f.end_with?(".scss") }
|
|
44
|
-
if scss_changes.any?
|
|
45
|
-
Tina4::ScssCompiler.compile_all(root_dir)
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
on_change&.call(changes)
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
@listener.start
|
|
52
|
-
Tina4::Log.info("Dev reload started")
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
def stop
|
|
56
|
-
@listener&.stop
|
|
57
|
-
Tina4::Log.info("Dev reload stopped")
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
private
|
|
61
|
-
|
|
62
|
-
def build_ignore_regex
|
|
63
|
-
pattern = IGNORE_DIRS.map { |d| Regexp.escape(d) }.join("|")
|
|
64
|
-
/#{pattern}/
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|