tina4 0.3.0 → 0.5.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/tina4/version.rb +1 -1
- data/lib/tina4ruby.rb +4 -0
- metadata +14 -258
- data/CHANGELOG.md +0 -73
- data/LICENSE.txt +0 -21
- data/README.md +0 -662
- data/exe/tina4 +0 -4
- data/lib/tina4/api.rb +0 -152
- data/lib/tina4/auth.rb +0 -139
- data/lib/tina4/cli.rb +0 -243
- data/lib/tina4/crud.rb +0 -124
- data/lib/tina4/database.rb +0 -135
- data/lib/tina4/database_result.rb +0 -89
- data/lib/tina4/debug.rb +0 -83
- data/lib/tina4/dev_reload.rb +0 -68
- data/lib/tina4/drivers/firebird_driver.rb +0 -94
- data/lib/tina4/drivers/mssql_driver.rb +0 -112
- data/lib/tina4/drivers/mysql_driver.rb +0 -90
- data/lib/tina4/drivers/postgres_driver.rb +0 -99
- data/lib/tina4/drivers/sqlite_driver.rb +0 -85
- data/lib/tina4/env.rb +0 -55
- data/lib/tina4/field_types.rb +0 -84
- data/lib/tina4/graphql.rb +0 -837
- data/lib/tina4/localization.rb +0 -100
- data/lib/tina4/middleware.rb +0 -59
- data/lib/tina4/migration.rb +0 -124
- data/lib/tina4/orm.rb +0 -168
- data/lib/tina4/queue.rb +0 -117
- data/lib/tina4/queue_backends/kafka_backend.rb +0 -80
- data/lib/tina4/queue_backends/lite_backend.rb +0 -79
- data/lib/tina4/queue_backends/rabbitmq_backend.rb +0 -73
- data/lib/tina4/rack_app.rb +0 -150
- data/lib/tina4/request.rb +0 -158
- data/lib/tina4/response.rb +0 -172
- data/lib/tina4/router.rb +0 -142
- data/lib/tina4/scss_compiler.rb +0 -131
- data/lib/tina4/session.rb +0 -145
- data/lib/tina4/session_handlers/file_handler.rb +0 -55
- data/lib/tina4/session_handlers/mongo_handler.rb +0 -49
- data/lib/tina4/session_handlers/redis_handler.rb +0 -43
- data/lib/tina4/swagger.rb +0 -123
- data/lib/tina4/template.rb +0 -478
- data/lib/tina4/templates/base.twig +0 -25
- data/lib/tina4/templates/errors/403.twig +0 -22
- data/lib/tina4/templates/errors/404.twig +0 -22
- data/lib/tina4/templates/errors/500.twig +0 -22
- data/lib/tina4/testing.rb +0 -213
- data/lib/tina4/webserver.rb +0 -101
- data/lib/tina4/websocket.rb +0 -167
- data/lib/tina4/wsdl.rb +0 -164
- data/lib/tina4.rb +0 -234
data/lib/tina4.rb
DELETED
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative "tina4/version"
|
|
4
|
-
require_relative "tina4/debug"
|
|
5
|
-
require_relative "tina4/env"
|
|
6
|
-
require_relative "tina4/router"
|
|
7
|
-
require_relative "tina4/request"
|
|
8
|
-
require_relative "tina4/response"
|
|
9
|
-
require_relative "tina4/rack_app"
|
|
10
|
-
require_relative "tina4/webserver"
|
|
11
|
-
require_relative "tina4/database"
|
|
12
|
-
require_relative "tina4/database_result"
|
|
13
|
-
require_relative "tina4/drivers/sqlite_driver"
|
|
14
|
-
require_relative "tina4/drivers/postgres_driver"
|
|
15
|
-
require_relative "tina4/drivers/mysql_driver"
|
|
16
|
-
require_relative "tina4/drivers/mssql_driver"
|
|
17
|
-
require_relative "tina4/drivers/firebird_driver"
|
|
18
|
-
require_relative "tina4/field_types"
|
|
19
|
-
require_relative "tina4/orm"
|
|
20
|
-
require_relative "tina4/migration"
|
|
21
|
-
require_relative "tina4/template"
|
|
22
|
-
require_relative "tina4/auth"
|
|
23
|
-
require_relative "tina4/session"
|
|
24
|
-
require_relative "tina4/session_handlers/file_handler"
|
|
25
|
-
require_relative "tina4/session_handlers/redis_handler"
|
|
26
|
-
require_relative "tina4/session_handlers/mongo_handler"
|
|
27
|
-
require_relative "tina4/middleware"
|
|
28
|
-
require_relative "tina4/swagger"
|
|
29
|
-
require_relative "tina4/crud"
|
|
30
|
-
require_relative "tina4/api"
|
|
31
|
-
require_relative "tina4/queue"
|
|
32
|
-
require_relative "tina4/queue_backends/lite_backend"
|
|
33
|
-
require_relative "tina4/queue_backends/rabbitmq_backend"
|
|
34
|
-
require_relative "tina4/queue_backends/kafka_backend"
|
|
35
|
-
require_relative "tina4/websocket"
|
|
36
|
-
require_relative "tina4/wsdl"
|
|
37
|
-
require_relative "tina4/scss_compiler"
|
|
38
|
-
require_relative "tina4/dev_reload"
|
|
39
|
-
require_relative "tina4/localization"
|
|
40
|
-
require_relative "tina4/graphql"
|
|
41
|
-
require_relative "tina4/testing"
|
|
42
|
-
|
|
43
|
-
module Tina4
|
|
44
|
-
BANNER = <<~'BANNER'
|
|
45
|
-
|
|
46
|
-
████████╗██╗███╗ ██╗ █████╗ ██╗ ██╗
|
|
47
|
-
╚══██╔══╝██║████╗ ██║██╔══██╗██║ ██║
|
|
48
|
-
██║ ██║██╔██╗ ██║███████║███████║
|
|
49
|
-
██║ ██║██║╚██╗██║██╔══██║╚════██║
|
|
50
|
-
██║ ██║██║ ╚████║██║ ██║ ██║
|
|
51
|
-
╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝ ╚═╝
|
|
52
|
-
BANNER
|
|
53
|
-
|
|
54
|
-
class << self
|
|
55
|
-
attr_accessor :root_dir, :database
|
|
56
|
-
|
|
57
|
-
def print_banner
|
|
58
|
-
puts "\e[35m#{BANNER}\e[0m"
|
|
59
|
-
puts " \e[35mTina4 Ruby v#{VERSION} - This is not a framework\e[0m"
|
|
60
|
-
puts ""
|
|
61
|
-
rescue
|
|
62
|
-
puts "\e[35mTINA4 Ruby v#{VERSION}\e[0m"
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
def initialize!(root_dir = Dir.pwd)
|
|
66
|
-
@root_dir = root_dir
|
|
67
|
-
|
|
68
|
-
# Print banner
|
|
69
|
-
print_banner
|
|
70
|
-
|
|
71
|
-
# Load environment
|
|
72
|
-
Tina4::Env.load(root_dir)
|
|
73
|
-
|
|
74
|
-
# Setup debug logging
|
|
75
|
-
Tina4::Debug.setup(root_dir)
|
|
76
|
-
Tina4::Debug.info("Tina4 Ruby v#{VERSION} initializing...")
|
|
77
|
-
|
|
78
|
-
# Setup auth keys
|
|
79
|
-
Tina4::Auth.setup(root_dir)
|
|
80
|
-
|
|
81
|
-
# Load translations
|
|
82
|
-
Tina4::Localization.load(root_dir)
|
|
83
|
-
|
|
84
|
-
# Connect database if configured
|
|
85
|
-
setup_database
|
|
86
|
-
|
|
87
|
-
# Auto-discover routes
|
|
88
|
-
auto_discover(root_dir)
|
|
89
|
-
|
|
90
|
-
Tina4::Debug.info("Tina4 initialized successfully")
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
# DSL methods for route registration
|
|
94
|
-
# GET is public by default (matching tina4_python behavior)
|
|
95
|
-
# POST/PUT/PATCH/DELETE are secured by default — use auth: false to make public
|
|
96
|
-
def get(path, auth: nil, swagger_meta: {}, &block)
|
|
97
|
-
auth_handler = auth == false ? nil : auth
|
|
98
|
-
Tina4::Router.add_route("GET", path, block, auth_handler: auth_handler, swagger_meta: swagger_meta)
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
def post(path, auth: :default, swagger_meta: {}, &block)
|
|
102
|
-
auth_handler = resolve_auth(auth)
|
|
103
|
-
Tina4::Router.add_route("POST", path, block, auth_handler: auth_handler, swagger_meta: swagger_meta)
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
def put(path, auth: :default, swagger_meta: {}, &block)
|
|
107
|
-
auth_handler = resolve_auth(auth)
|
|
108
|
-
Tina4::Router.add_route("PUT", path, block, auth_handler: auth_handler, swagger_meta: swagger_meta)
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
def patch(path, auth: :default, swagger_meta: {}, &block)
|
|
112
|
-
auth_handler = resolve_auth(auth)
|
|
113
|
-
Tina4::Router.add_route("PATCH", path, block, auth_handler: auth_handler, swagger_meta: swagger_meta)
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
def delete(path, auth: :default, swagger_meta: {}, &block)
|
|
117
|
-
auth_handler = resolve_auth(auth)
|
|
118
|
-
Tina4::Router.add_route("DELETE", path, block, auth_handler: auth_handler, swagger_meta: swagger_meta)
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
def any(path, auth: false, swagger_meta: {}, &block)
|
|
122
|
-
auth_handler = resolve_auth(auth)
|
|
123
|
-
%w[GET POST PUT PATCH DELETE].each do |method|
|
|
124
|
-
Tina4::Router.add_route(method, path, block, auth_handler: auth_handler, swagger_meta: swagger_meta)
|
|
125
|
-
end
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
def options(path, &block)
|
|
129
|
-
Tina4::Router.add_route("OPTIONS", path, block)
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
# Explicit secure variants (always secured, regardless of HTTP method)
|
|
133
|
-
def secure_get(path, auth: nil, swagger_meta: {}, &block)
|
|
134
|
-
auth_handler = auth || Tina4::Auth.default_secure_auth
|
|
135
|
-
Tina4::Router.add_route("GET", path, block, auth_handler: auth_handler, swagger_meta: swagger_meta)
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
def secure_post(path, auth: nil, swagger_meta: {}, &block)
|
|
139
|
-
auth_handler = auth || Tina4::Auth.default_secure_auth
|
|
140
|
-
Tina4::Router.add_route("POST", path, block, auth_handler: auth_handler, swagger_meta: swagger_meta)
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
def secure_put(path, auth: nil, swagger_meta: {}, &block)
|
|
144
|
-
auth_handler = auth || Tina4::Auth.default_secure_auth
|
|
145
|
-
Tina4::Router.add_route("PUT", path, block, auth_handler: auth_handler, swagger_meta: swagger_meta)
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
def secure_patch(path, auth: nil, swagger_meta: {}, &block)
|
|
149
|
-
auth_handler = auth || Tina4::Auth.default_secure_auth
|
|
150
|
-
Tina4::Router.add_route("PATCH", path, block, auth_handler: auth_handler, swagger_meta: swagger_meta)
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
def secure_delete(path, auth: nil, swagger_meta: {}, &block)
|
|
154
|
-
auth_handler = auth || Tina4::Auth.default_secure_auth
|
|
155
|
-
Tina4::Router.add_route("DELETE", path, block, auth_handler: auth_handler, swagger_meta: swagger_meta)
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
# Route groups
|
|
159
|
-
def group(prefix, auth: nil, &block)
|
|
160
|
-
Tina4::Router.group(prefix, auth_handler: auth, &block)
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
# Middleware hooks
|
|
164
|
-
def before(pattern = nil, &block)
|
|
165
|
-
Tina4::Middleware.before(pattern, &block)
|
|
166
|
-
end
|
|
167
|
-
|
|
168
|
-
def after(pattern = nil, &block)
|
|
169
|
-
Tina4::Middleware.after(pattern, &block)
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
# Template globals
|
|
173
|
-
def template_global(key, value)
|
|
174
|
-
Tina4::Template.add_global(key, value)
|
|
175
|
-
end
|
|
176
|
-
|
|
177
|
-
# Inline test DSL
|
|
178
|
-
def describe(name, &block)
|
|
179
|
-
Tina4::Testing.describe(name, &block)
|
|
180
|
-
end
|
|
181
|
-
|
|
182
|
-
# Translation shortcut
|
|
183
|
-
def t(key, **options)
|
|
184
|
-
Tina4::Localization.t(key, **options)
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
private
|
|
188
|
-
|
|
189
|
-
# Resolve auth option for route registration
|
|
190
|
-
# :default => use bearer auth (default for POST/PUT/PATCH/DELETE)
|
|
191
|
-
# false => no auth (public route)
|
|
192
|
-
# nil => no auth
|
|
193
|
-
# Proc/Lambda => custom auth handler
|
|
194
|
-
def resolve_auth(auth)
|
|
195
|
-
case auth
|
|
196
|
-
when :default
|
|
197
|
-
Tina4::Auth.default_secure_auth
|
|
198
|
-
when false, nil
|
|
199
|
-
nil
|
|
200
|
-
else
|
|
201
|
-
auth # Custom auth handler (proc/lambda)
|
|
202
|
-
end
|
|
203
|
-
end
|
|
204
|
-
|
|
205
|
-
def setup_database
|
|
206
|
-
db_url = ENV["DATABASE_URL"] || ENV["DB_URL"]
|
|
207
|
-
if db_url && !db_url.empty?
|
|
208
|
-
begin
|
|
209
|
-
@database = Tina4::Database.new(db_url)
|
|
210
|
-
Tina4::Debug.info("Database connected: #{db_url.sub(/:[^:@]+@/, ':***@')}")
|
|
211
|
-
rescue => e
|
|
212
|
-
Tina4::Debug.error("Database connection failed: #{e.message}")
|
|
213
|
-
end
|
|
214
|
-
end
|
|
215
|
-
end
|
|
216
|
-
|
|
217
|
-
def auto_discover(root_dir)
|
|
218
|
-
route_dirs = %w[routes src/routes src/api api]
|
|
219
|
-
route_dirs.each do |dir|
|
|
220
|
-
full_dir = File.join(root_dir, dir)
|
|
221
|
-
next unless Dir.exist?(full_dir)
|
|
222
|
-
|
|
223
|
-
Dir.glob(File.join(full_dir, "**/*.rb")).sort.each do |file|
|
|
224
|
-
begin
|
|
225
|
-
load file
|
|
226
|
-
Tina4::Debug.debug("Auto-loaded: #{file}")
|
|
227
|
-
rescue => e
|
|
228
|
-
Tina4::Debug.error("Failed to load #{file}: #{e.message}")
|
|
229
|
-
end
|
|
230
|
-
end
|
|
231
|
-
end
|
|
232
|
-
end
|
|
233
|
-
end
|
|
234
|
-
end
|