tina4ruby 3.13.137 → 3.13.138

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.
Files changed (160) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +36 -0
  3. data/COMMERCIAL-LICENSE.md +8 -0
  4. data/LICENSE +373 -0
  5. data/LICENSE.txt +373 -21
  6. data/NOTICE +11 -0
  7. data/README.md +11 -7
  8. data/exe/tina4ruby +6 -0
  9. data/lib/tina4/ai.rb +6 -0
  10. data/lib/tina4/ai_client.rb +10 -3
  11. data/lib/tina4/api.rb +57 -7
  12. data/lib/tina4/auth.rb +18 -12
  13. data/lib/tina4/auto_crud.rb +83 -27
  14. data/lib/tina4/background.rb +7 -1
  15. data/lib/tina4/base64.rb +59 -0
  16. data/lib/tina4/cache.rb +6 -0
  17. data/lib/tina4/cache_backends/base_backend.rb +6 -0
  18. data/lib/tina4/cache_backends/database_backend.rb +6 -0
  19. data/lib/tina4/cache_backends/file_backend.rb +6 -0
  20. data/lib/tina4/cache_backends/memcached_backend.rb +6 -0
  21. data/lib/tina4/cache_backends/memory_backend.rb +6 -0
  22. data/lib/tina4/cache_backends/mongo_backend.rb +6 -0
  23. data/lib/tina4/cache_backends/redis_backend.rb +6 -0
  24. data/lib/tina4/cache_backends/valkey_backend.rb +6 -0
  25. data/lib/tina4/cache_backends.rb +6 -0
  26. data/lib/tina4/cli.rb +22 -7
  27. data/lib/tina4/constants.rb +12 -8
  28. data/lib/tina4/container.rb +6 -0
  29. data/lib/tina4/context/chunker.rb +6 -0
  30. data/lib/tina4/context.rb +13 -5
  31. data/lib/tina4/cors.rb +66 -10
  32. data/lib/tina4/crud.rb +78 -9
  33. data/lib/tina4/database/sqlite3_adapter.rb +9 -1
  34. data/lib/tina4/database.rb +260 -44
  35. data/lib/tina4/database_adapter.rb +6 -0
  36. data/lib/tina4/database_result.rb +6 -0
  37. data/lib/tina4/database_url.rb +6 -0
  38. data/lib/tina4/debug.rb +6 -0
  39. data/lib/tina4/dev.rb +6 -0
  40. data/lib/tina4/dev_admin.rb +215 -89
  41. data/lib/tina4/dev_mailbox.rb +6 -1
  42. data/lib/tina4/dispatch_pipeline.rb +86 -1
  43. data/lib/tina4/docs.rb +6 -0
  44. data/lib/tina4/docstore.rb +23 -4
  45. data/lib/tina4/drivers/arango_graph_driver.rb +8 -1
  46. data/lib/tina4/drivers/bolt_graph_driver.rb +6 -0
  47. data/lib/tina4/drivers/firebird_driver.rb +95 -6
  48. data/lib/tina4/drivers/mongodb_driver.rb +6 -0
  49. data/lib/tina4/drivers/mssql_driver.rb +54 -39
  50. data/lib/tina4/drivers/mysql_driver.rb +6 -0
  51. data/lib/tina4/drivers/odbc_driver.rb +6 -0
  52. data/lib/tina4/drivers/postgres_driver.rb +35 -8
  53. data/lib/tina4/drivers/schema_split.rb +6 -0
  54. data/lib/tina4/drivers/sqlite_driver.rb +8 -1
  55. data/lib/tina4/drivers/ultipa_graph_driver.rb +6 -0
  56. data/lib/tina4/env.rb +6 -0
  57. data/lib/tina4/error_overlay.rb +6 -0
  58. data/lib/tina4/events.rb +6 -0
  59. data/lib/tina4/feedback.rb +9 -2
  60. data/lib/tina4/field_types.rb +6 -0
  61. data/lib/tina4/form_parser.rb +241 -0
  62. data/lib/tina4/frond.rb +196 -56
  63. data/lib/tina4/gallery/auth/src/routes/api/gallery_auth.rb +6 -0
  64. data/lib/tina4/gallery/database/src/routes/api/gallery_db.rb +6 -0
  65. data/lib/tina4/gallery/error-overlay/src/routes/api/gallery_crash.rb +6 -0
  66. data/lib/tina4/gallery/orm/src/routes/api/gallery_products.rb +6 -0
  67. data/lib/tina4/gallery/queue/src/routes/api/gallery_queue.rb +6 -0
  68. data/lib/tina4/gallery/rest-api/src/routes/api/gallery_hello.rb +6 -0
  69. data/lib/tina4/gallery/templates/src/routes/gallery_page.rb +6 -0
  70. data/lib/tina4/graph.rb +6 -0
  71. data/lib/tina4/graphql.rb +28 -27
  72. data/lib/tina4/health.rb +6 -0
  73. data/lib/tina4/html_element.rb +6 -0
  74. data/lib/tina4/http_server.rb +690 -0
  75. data/lib/tina4/imap_client.rb +352 -0
  76. data/lib/tina4/import_helper.rb +6 -0
  77. data/lib/tina4/job.rb +6 -0
  78. data/lib/tina4/localization.rb +6 -0
  79. data/lib/tina4/log.rb +6 -0
  80. data/lib/tina4/mail_socket.rb +124 -0
  81. data/lib/tina4/mcp.rb +15 -8
  82. data/lib/tina4/messenger.rb +86 -55
  83. data/lib/tina4/metrics.rb +6 -0
  84. data/lib/tina4/middleware.rb +24 -9
  85. data/lib/tina4/migration.rb +6 -0
  86. data/lib/tina4/model_collection.rb +6 -0
  87. data/lib/tina4/mqtt.rb +9 -2
  88. data/lib/tina4/mqtt_message.rb +6 -0
  89. data/lib/tina4/orm.rb +72 -16
  90. data/lib/tina4/parse_json.rb +25 -0
  91. data/lib/tina4/plan.rb +9 -2
  92. data/lib/tina4/point.rb +6 -0
  93. data/lib/tina4/port_takeover.rb +6 -0
  94. data/lib/tina4/project_index.rb +6 -0
  95. data/lib/tina4/public/THIRD-PARTY-NOTICES.md +55 -0
  96. data/lib/tina4/public/bundled-component-provenance.json +48 -0
  97. data/lib/tina4/public/js/tina4js.min.js +13 -3
  98. data/lib/tina4/public/licenses/swagger-ui-3.10.0-original-notice.txt +11 -0
  99. data/lib/tina4/public/licenses/swagger-ui-5.17.14-NOTICE.txt +2 -0
  100. data/lib/tina4/public/licenses/swagger-ui-Apache-2.0.txt +202 -0
  101. data/lib/tina4/public/licenses/tina4-css-MIT.txt +21 -0
  102. data/lib/tina4/public/licenses/tina4-dev-admin-components.json +240 -0
  103. data/lib/tina4/public/licenses/tina4-dev-admin-third-party.txt +919 -0
  104. data/lib/tina4/public/licenses/tina4-js-MIT.txt +20 -0
  105. data/lib/tina4/push.rb +9 -3
  106. data/lib/tina4/query_builder.rb +6 -0
  107. data/lib/tina4/queue.rb +6 -0
  108. data/lib/tina4/queue_backends/kafka_backend.rb +10 -2
  109. data/lib/tina4/queue_backends/lite_backend.rb +6 -0
  110. data/lib/tina4/queue_backends/mongo_backend.rb +6 -0
  111. data/lib/tina4/queue_backends/rabbitmq_backend.rb +10 -2
  112. data/lib/tina4/rack_app.rb +11 -1
  113. data/lib/tina4/rate_limiter.rb +6 -0
  114. data/lib/tina4/realtime/attachment.rb +6 -0
  115. data/lib/tina4/realtime/channel.rb +6 -0
  116. data/lib/tina4/realtime/channel_member.rb +6 -0
  117. data/lib/tina4/realtime/local_storage.rb +6 -0
  118. data/lib/tina4/realtime/message.rb +6 -0
  119. data/lib/tina4/realtime/s3_storage.rb +6 -0
  120. data/lib/tina4/realtime/storage.rb +6 -0
  121. data/lib/tina4/realtime/storage_backend.rb +6 -0
  122. data/lib/tina4/realtime/workspace.rb +6 -0
  123. data/lib/tina4/realtime.rb +10 -3
  124. data/lib/tina4/request.rb +85 -127
  125. data/lib/tina4/response.rb +71 -9
  126. data/lib/tina4/response_cache.rb +6 -0
  127. data/lib/tina4/router.rb +6 -0
  128. data/lib/tina4/secret_file.rb +34 -0
  129. data/lib/tina4/seeder.rb +9 -3
  130. data/lib/tina4/service.rb +8 -2
  131. data/lib/tina4/service_runner.rb +6 -0
  132. data/lib/tina4/session.rb +6 -0
  133. data/lib/tina4/session_handlers/database_handler.rb +6 -0
  134. data/lib/tina4/session_handlers/file_handler.rb +6 -0
  135. data/lib/tina4/session_handlers/memcached_handler.rb +6 -0
  136. data/lib/tina4/session_handlers/mongo_handler.rb +108 -39
  137. data/lib/tina4/session_handlers/mongo_wire_client.rb +23 -9
  138. data/lib/tina4/session_handlers/redis_handler.rb +6 -0
  139. data/lib/tina4/session_handlers/resp_client.rb +6 -0
  140. data/lib/tina4/session_handlers/valkey_handler.rb +6 -0
  141. data/lib/tina4/shutdown.rb +17 -14
  142. data/lib/tina4/smtp_client.rb +222 -0
  143. data/lib/tina4/sql_translator.rb +93 -0
  144. data/lib/tina4/sqlite3_gem.rb +27 -0
  145. data/lib/tina4/sso.rb +25 -8
  146. data/lib/tina4/swagger.rb +6 -0
  147. data/lib/tina4/template.rb +6 -0
  148. data/lib/tina4/test.rb +8 -2
  149. data/lib/tina4/test_client.rb +8 -1
  150. data/lib/tina4/testing.rb +8 -1
  151. data/lib/tina4/validator.rb +6 -0
  152. data/lib/tina4/version.rb +7 -1
  153. data/lib/tina4/webserver.rb +25 -143
  154. data/lib/tina4/websocket.rb +10 -4
  155. data/lib/tina4/websocket_backplane.rb +19 -2
  156. data/lib/tina4/wsdl.rb +31 -16
  157. data/lib/tina4/xml_parser.rb +259 -0
  158. data/lib/tina4.rb +87 -31
  159. data/lib/tina4ruby.rb +6 -0
  160. metadata +43 -140
data/lib/tina4.rb CHANGED
@@ -1,4 +1,10 @@
1
1
  # frozen_string_literal: true
2
+ # Copyright (c) 2026 Code Infinity
3
+ # SPDX-License-Identifier: MPL-2.0
4
+ # This Source Code Form is subject to the terms of the Mozilla Public
5
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
6
+ # file, You can obtain one at https://mozilla.org/MPL/2.0/.
7
+
2
8
 
3
9
  # ── Core (always loaded) ──────────────────────────────────────────────
4
10
  require_relative "tina4/version"
@@ -144,6 +150,8 @@ module Tina4
144
150
 
145
151
  # ── Lazy-loaded: web server ───────────────────────────────────────────
146
152
  autoload :WebServer, File.expand_path("tina4/webserver", __dir__)
153
+ autoload :HttpServer, File.expand_path("tina4/http_server", __dir__)
154
+ autoload :FormParser, File.expand_path("tina4/form_parser", __dir__)
147
155
 
148
156
  # ── Lazy-loaded: optional modules ─────────────────────────────────────
149
157
  autoload :Swagger, File.expand_path("tina4/swagger", __dir__)
@@ -351,6 +359,13 @@ module Tina4
351
359
  /_/ /_/_/ /_/\__,_/ /_/
352
360
  BANNER
353
361
 
362
+ # Environment variables that mean "this is a CI run" - the ADR-0070 union
363
+ # across the four frameworks and the CLI. No one is there to see a tab.
364
+ CI_ENV_VARS = %w[CI CONTINUOUS_INTEGRATION GITHUB_ACTIONS GITLAB_CI BUILDKITE
365
+ JENKINS_URL TF_BUILD TEAMCITY_VERSION].freeze
366
+ # A CI variable set to one of these does not mean CI (ADR-0070 ci_false).
367
+ CI_FALSE_VALUES = %w[false 0 no off].freeze
368
+
354
369
  class << self
355
370
  attr_accessor :root_dir
356
371
  attr_reader :database
@@ -404,18 +419,14 @@ module Tina4
404
419
  log_level = (ENV["TINA4_LOG_LEVEL"] || "ALL").upcase
405
420
  display = (host == "0.0.0.0" || host == "::") ? "localhost" : host
406
421
 
407
- # Auto-detect server name if not provided
422
+ # Auto-detect server name if not provided: Puma only when production
423
+ # would actually pick it (ADR-0067), otherwise Tina4's own server.
408
424
  if server_name.nil?
409
- if is_debug
410
- server_name = "WEBrick"
411
- else
412
- begin
413
- require "puma"
414
- server_name = "puma"
415
- rescue LoadError
416
- server_name = "WEBrick"
417
- end
418
- end
425
+ server_name = if !is_debug && !builtin_webserver_pinned? && puma_available?
426
+ "puma"
427
+ else
428
+ Tina4::HttpServer::SOFTWARE
429
+ end
419
430
  end
420
431
 
421
432
  puts "#{color}#{BANNER}#{reset}"
@@ -438,8 +449,10 @@ module Tina4
438
449
  def initialize!(root_dir = Dir.pwd)
439
450
  @root_dir = root_dir
440
451
 
441
- # Print banner
442
- print_banner
452
+ # No banner here. The server start prints it (start_puma_server,
453
+ # WebServer#start) once the bind host and port are resolved; printed from
454
+ # here it named print_banner's defaults, localhost:7147, whatever the
455
+ # server really bound. Python prints it from run() for the same reason.
443
456
 
444
457
  # Load environment. Precedence: real-env > .env.local > .env
445
458
  # (.env.local loads first, both first-wins, so a real env var always wins).
@@ -530,14 +543,48 @@ module Tina4
530
543
  start
531
544
  end
532
545
 
533
- def open_browser(url)
546
+ # Open the app in a browser only when ALL of these hold (ADR-0070):
547
+ # * development: TINA4_DEBUG is truthy - never production or Puma
548
+ # * TINA4_NO_BROWSER is not truthy (true/1/yes/on, trimmed, any case)
549
+ # * --no-browser was not passed, and no_browser: true was not given
550
+ # * no CI variable vetoes (see ci_run?)
551
+ # open_browser used to check none of it, so every app.rb booted through
552
+ # run! - and every spec that did so - popped a real tab.
553
+ def browser_launch_allowed?(argv: ARGV, no_browser: false)
554
+ return false if no_browser
555
+ return false unless Tina4::Env.is_truthy(ENV["TINA4_DEBUG"])
556
+ return false if Tina4::Env.is_truthy(ENV["TINA4_NO_BROWSER"])
557
+ return false if argv.include?("--no-browser")
558
+
559
+ !ci_run?
560
+ end
561
+
562
+ # A CI variable vetoes when it is set to a non-empty value (after
563
+ # trimming) that is not one of CI_FALSE_VALUES, case-insensitively - so
564
+ # CI=woodpecker vetoes and CI=false does not (ADR-0070).
565
+ def ci_run?
566
+ CI_ENV_VARS.any? do |name|
567
+ value = ENV[name].to_s.strip.downcase
568
+ !value.empty? && !CI_FALSE_VALUES.include?(value)
569
+ end
570
+ end
571
+
572
+ # TINA4_BROWSER_COMMAND names the launcher to run instead of the OS default
573
+ # (open / start / xdg-open); it receives the URL as its only argument.
574
+ def open_browser(url, no_browser: false)
575
+ return unless browser_launch_allowed?(no_browser: no_browser)
576
+
534
577
  require "rbconfig"
578
+ command = ENV["TINA4_BROWSER_COMMAND"].to_s.strip
535
579
  Thread.new do
536
580
  sleep 2
537
- case RbConfig::CONFIG["host_os"]
538
- when /darwin/i then system("open", url)
539
- when /mswin|mingw/i then system("start", url)
540
- else system("xdg-open", url)
581
+ if !command.empty? then system(command, url)
582
+ else
583
+ case RbConfig::CONFIG["host_os"]
584
+ when /darwin/i then system("open", url)
585
+ when /mswin|mingw/i then system("start", url)
586
+ else system("xdg-open", url)
587
+ end
541
588
  end
542
589
  end
543
590
  end
@@ -550,18 +597,25 @@ module Tina4
550
597
  Tina4::Frond.register_live_endpoint!
551
598
  end
552
599
 
553
- def run!(root_dir = nil, port: nil, host: nil, debug: nil)
600
+ # no_browser: true keeps the browser shut (Python run(no_browser=True));
601
+ # false never forces one open (ADR-0070).
602
+ def run!(root_dir = nil, port: nil, host: nil, debug: nil, no_browser: false)
554
603
  # Handle legacy call: run!(port: 7147) where root_dir receives the hash
555
604
  if root_dir.is_a?(Hash)
556
605
  port ||= root_dir[:port]
557
606
  host ||= root_dir[:host]
558
607
  debug = root_dir[:debug] if debug.nil? && root_dir.key?(:debug)
608
+ no_browser ||= root_dir[:no_browser]
559
609
  root_dir = nil
560
610
  end
561
611
  root_dir ||= Dir.pwd
562
612
 
563
- ENV["PORT"] = port.to_s if port
564
- ENV["HOST"] = host.to_s if host
613
+ # An explicit argument beats the environment (ADR-0041), so it goes into
614
+ # the framework's own variables, which outrank everything else. Written
615
+ # into the bare PORT/HOST it lost to TINA4_PORT/TINA4_HOST and warned the
616
+ # app about a deprecated variable it never set.
617
+ ENV["TINA4_PORT"] = port.to_s if port
618
+ ENV["TINA4_HOST"] = host.to_s if host
565
619
  ENV["TINA4_DEBUG"] = debug.to_s unless debug.nil?
566
620
 
567
621
  initialize!(root_dir) unless @root_dir
@@ -603,22 +657,21 @@ module Tina4
603
657
  app = Tina4::RackApp.new(root_dir: root_dir)
604
658
  is_debug = Tina4::Env.is_truthy(ENV["TINA4_DEBUG"])
605
659
 
606
- # Try Puma first (production-grade), fall back to WEBrick
660
+ # Puma when the APPLICATION bundles it (ADR-0067), otherwise the
661
+ # built-in server - in development AND production, as in Python.
607
662
  if !is_debug && !builtin_webserver_pinned? && puma_available?
608
- open_browser(url)
609
663
  start_puma_server(app, host: host, port: port)
610
664
  return
611
665
  end
612
666
 
613
- Tina4::Log.info("Development server: WEBrick")
614
- open_browser(url)
667
+ open_browser(url, no_browser: no_browser)
615
668
  server = Tina4::WebServer.new(app, host: host, port: port)
616
669
  server.start
617
670
  end
618
671
 
619
- # TINA4_DEFAULT_WEBSERVER=TRUE pins Tina4's BUILT-IN server (WEBrick) even
620
- # in production, where Puma would otherwise be chosen. Unset/FALSE keeps
621
- # today's behaviour, so this is non-breaking.
672
+ # TINA4_DEFAULT_WEBSERVER=TRUE pins Tina4's BUILT-IN server even when the
673
+ # application bundles Puma, which production would otherwise pick
674
+ # (ADR-0067). Unset/FALSE: Puma if it is loadable, else the built-in server.
622
675
  #
623
676
  # This is NOT the remedy for a production shutdown problem - an operator
624
677
  # must never have to give up Puma to get their database connections closed.
@@ -628,8 +681,10 @@ module Tina4
628
681
  Tina4::Env.is_truthy(ENV["TINA4_DEFAULT_WEBSERVER"])
629
682
  end
630
683
 
631
- # Is Puma loadable? Separate from start_puma_server so the caller can fall
632
- # back to WEBrick BEFORE any side effect (opening a browser) happens.
684
+ # Is Puma loadable? Puma is NOT a Tina4 dependency (ADR-0067): it is used
685
+ # only when the application installs it (under Bundler, when its Gemfile
686
+ # lists it). Separate from start_puma_server so the caller can fall back to
687
+ # the built-in server BEFORE any side effect (opening a browser) happens.
633
688
  def puma_available?
634
689
  require "puma"
635
690
  require "puma/configuration"
@@ -674,6 +729,7 @@ module Tina4
674
729
  user_config.raise_exception_on_sigterm false
675
730
  end
676
731
 
732
+ print_banner(host: host, port: port, server_name: "puma")
677
733
  Tina4::Log.info("Production server: puma (TINA4_SHUTDOWN_TIMEOUT=#{shutdown_timeout}s)")
678
734
  begin
679
735
  Puma::Launcher.new(config).run
@@ -916,7 +972,7 @@ module Tina4
916
972
  if db_url && !db_url.empty?
917
973
  begin
918
974
  bind_database(Tina4::Database.new(db_url))
919
- Tina4::Log.info("Database connected: #{db_url.sub(/:[^:@]+@/, ':***@')}")
975
+ Tina4::Log.info("Database connected: #{Tina4::DatabaseUrl.redact(db_url)}")
920
976
  rescue => e
921
977
  Tina4::Log.error("Database connection failed: #{e.message}")
922
978
  end
data/lib/tina4ruby.rb CHANGED
@@ -1,4 +1,10 @@
1
1
  # frozen_string_literal: true
2
+ # Copyright (c) 2026 Code Infinity
3
+ # SPDX-License-Identifier: MPL-2.0
4
+ # This Source Code Form is subject to the terms of the Mozilla Public
5
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
6
+ # file, You can obtain one at https://mozilla.org/MPL/2.0/.
7
+
2
8
 
3
9
  # Alias: `require "tina4ruby"` loads the same code as `require "tina4"`
4
10
  require_relative "tina4"
metadata CHANGED
@@ -1,183 +1,63 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tina4ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.13.137
4
+ version: 3.13.138
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-09-23 00:00:00.000000000 Z
11
+ date: 2026-09-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rack
14
+ name: sqlite3
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.0'
20
- type: :runtime
19
+ version: '2.0'
20
+ type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '3.0'
26
+ version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rackup
28
+ name: listen
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '2.1'
34
- type: :runtime
33
+ version: '3.8'
34
+ type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '2.1'
40
+ version: '3.8'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: puma
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '6.0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '6.0'
55
- - !ruby/object:Gem::Dependency
56
- name: net-smtp
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '0.5'
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '0.5'
69
- - !ruby/object:Gem::Dependency
70
- name: net-imap
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '0.5'
76
- type: :runtime
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '0.5'
83
- - !ruby/object:Gem::Dependency
84
- name: json
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '2.7'
90
- type: :runtime
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '2.7'
97
- - !ruby/object:Gem::Dependency
98
- name: rexml
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: '3.2'
104
- type: :runtime
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: '3.2'
111
- - !ruby/object:Gem::Dependency
112
- name: webrick
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: '1.8'
118
- type: :runtime
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: '1.8'
125
- - !ruby/object:Gem::Dependency
126
- name: logger
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: '1.6'
132
- type: :runtime
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: '1.6'
139
- - !ruby/object:Gem::Dependency
140
- name: base64
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - "~>"
144
- - !ruby/object:Gem::Version
145
- version: '0.2'
146
- type: :runtime
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - "~>"
151
- - !ruby/object:Gem::Version
152
- version: '0.2'
153
- - !ruby/object:Gem::Dependency
154
- name: sqlite3
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - "~>"
158
- - !ruby/object:Gem::Version
159
- version: '2.0'
160
- type: :runtime
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - "~>"
47
+ version: '7.2'
48
+ - - ">="
165
49
  - !ruby/object:Gem::Version
166
- version: '2.0'
167
- - !ruby/object:Gem::Dependency
168
- name: listen
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - "~>"
172
- - !ruby/object:Gem::Version
173
- version: '3.8'
50
+ version: 7.2.1
174
51
  type: :development
175
52
  prerelease: false
176
53
  version_requirements: !ruby/object:Gem::Requirement
177
54
  requirements:
178
55
  - - "~>"
179
56
  - !ruby/object:Gem::Version
180
- version: '3.8'
57
+ version: '7.2'
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 7.2.1
181
61
  - !ruby/object:Gem::Dependency
182
62
  name: mongo
183
63
  requirement: !ruby/object:Gem::Requirement
@@ -290,8 +170,9 @@ dependencies:
290
170
  - - "~>"
291
171
  - !ruby/object:Gem::Version
292
172
  version: '0.10'
293
- description: 'TINA4: The Intelligent Native Application 4ramework for Ruby. A Rack-based
294
- backend with native Ruby conventions and shared cross-language contracts.'
173
+ description: 'TINA4: The Intelligent Native Application 4ramework for Ruby. A zero-dependency
174
+ backend with its own HTTP server, native Ruby conventions and shared cross-language
175
+ contracts.'
295
176
  email:
296
177
  - info@tina4.com
297
178
  executables:
@@ -300,7 +181,10 @@ extensions: []
300
181
  extra_rdoc_files: []
301
182
  files:
302
183
  - CHANGELOG.md
184
+ - COMMERCIAL-LICENSE.md
185
+ - LICENSE
303
186
  - LICENSE.txt
187
+ - NOTICE
304
188
  - README.md
305
189
  - exe/tina4ruby
306
190
  - lib/tina4.rb
@@ -310,6 +194,7 @@ files:
310
194
  - lib/tina4/auth.rb
311
195
  - lib/tina4/auto_crud.rb
312
196
  - lib/tina4/background.rb
197
+ - lib/tina4/base64.rb
313
198
  - lib/tina4/cache.rb
314
199
  - lib/tina4/cache_backends.rb
315
200
  - lib/tina4/cache_backends/base_backend.rb
@@ -355,6 +240,7 @@ files:
355
240
  - lib/tina4/events.rb
356
241
  - lib/tina4/feedback.rb
357
242
  - lib/tina4/field_types.rb
243
+ - lib/tina4/form_parser.rb
358
244
  - lib/tina4/frond.rb
359
245
  - lib/tina4/gallery/auth/meta.json
360
246
  - lib/tina4/gallery/auth/src/routes/api/gallery_auth.rb
@@ -375,10 +261,13 @@ files:
375
261
  - lib/tina4/graphql.rb
376
262
  - lib/tina4/health.rb
377
263
  - lib/tina4/html_element.rb
264
+ - lib/tina4/http_server.rb
265
+ - lib/tina4/imap_client.rb
378
266
  - lib/tina4/import_helper.rb
379
267
  - lib/tina4/job.rb
380
268
  - lib/tina4/localization.rb
381
269
  - lib/tina4/log.rb
270
+ - lib/tina4/mail_socket.rb
382
271
  - lib/tina4/mcp.rb
383
272
  - lib/tina4/messenger.rb
384
273
  - lib/tina4/metrics.rb
@@ -388,11 +277,14 @@ files:
388
277
  - lib/tina4/mqtt.rb
389
278
  - lib/tina4/mqtt_message.rb
390
279
  - lib/tina4/orm.rb
280
+ - lib/tina4/parse_json.rb
391
281
  - lib/tina4/plan.rb
392
282
  - lib/tina4/point.rb
393
283
  - lib/tina4/port_takeover.rb
394
284
  - lib/tina4/project_index.rb
285
+ - lib/tina4/public/THIRD-PARTY-NOTICES.md
395
286
  - lib/tina4/public/__feedback/widget.js
287
+ - lib/tina4/public/bundled-component-provenance.json
396
288
  - lib/tina4/public/css/tina4.css
397
289
  - lib/tina4/public/css/tina4.min.css
398
290
  - lib/tina4/public/favicon.ico
@@ -403,6 +295,13 @@ files:
403
295
  - lib/tina4/public/js/tina4-dev-admin.min.js
404
296
  - lib/tina4/public/js/tina4.min.js
405
297
  - lib/tina4/public/js/tina4js.min.js
298
+ - lib/tina4/public/licenses/swagger-ui-3.10.0-original-notice.txt
299
+ - lib/tina4/public/licenses/swagger-ui-5.17.14-NOTICE.txt
300
+ - lib/tina4/public/licenses/swagger-ui-Apache-2.0.txt
301
+ - lib/tina4/public/licenses/tina4-css-MIT.txt
302
+ - lib/tina4/public/licenses/tina4-dev-admin-components.json
303
+ - lib/tina4/public/licenses/tina4-dev-admin-third-party.txt
304
+ - lib/tina4/public/licenses/tina4-js-MIT.txt
406
305
  - lib/tina4/public/swagger/index.html
407
306
  - lib/tina4/public/swagger/oauth2-redirect.html
408
307
  - lib/tina4/push.rb
@@ -428,6 +327,7 @@ files:
428
327
  - lib/tina4/response.rb
429
328
  - lib/tina4/response_cache.rb
430
329
  - lib/tina4/router.rb
330
+ - lib/tina4/secret_file.rb
431
331
  - lib/tina4/seeder.rb
432
332
  - lib/tina4/service.rb
433
333
  - lib/tina4/service_runner.rb
@@ -441,7 +341,9 @@ files:
441
341
  - lib/tina4/session_handlers/resp_client.rb
442
342
  - lib/tina4/session_handlers/valkey_handler.rb
443
343
  - lib/tina4/shutdown.rb
344
+ - lib/tina4/smtp_client.rb
444
345
  - lib/tina4/sql_translator.rb
346
+ - lib/tina4/sqlite3_gem.rb
445
347
  - lib/tina4/sso.rb
446
348
  - lib/tina4/swagger.rb
447
349
  - lib/tina4/template.rb
@@ -463,10 +365,11 @@ files:
463
365
  - lib/tina4/websocket.rb
464
366
  - lib/tina4/websocket_backplane.rb
465
367
  - lib/tina4/wsdl.rb
368
+ - lib/tina4/xml_parser.rb
466
369
  - lib/tina4ruby.rb
467
370
  homepage: https://tina4.com
468
371
  licenses:
469
- - MIT
372
+ - MPL-2.0
470
373
  metadata:
471
374
  homepage_uri: https://tina4.com
472
375
  post_install_message: