tarsier 0.1.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.
Files changed (47) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +175 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +984 -0
  5. data/exe/tarsier +7 -0
  6. data/lib/tarsier/application.rb +336 -0
  7. data/lib/tarsier/cli/commands/console.rb +87 -0
  8. data/lib/tarsier/cli/commands/generate.rb +85 -0
  9. data/lib/tarsier/cli/commands/help.rb +50 -0
  10. data/lib/tarsier/cli/commands/new.rb +59 -0
  11. data/lib/tarsier/cli/commands/routes.rb +139 -0
  12. data/lib/tarsier/cli/commands/server.rb +123 -0
  13. data/lib/tarsier/cli/commands/version.rb +14 -0
  14. data/lib/tarsier/cli/generators/app.rb +528 -0
  15. data/lib/tarsier/cli/generators/base.rb +93 -0
  16. data/lib/tarsier/cli/generators/controller.rb +91 -0
  17. data/lib/tarsier/cli/generators/middleware.rb +81 -0
  18. data/lib/tarsier/cli/generators/migration.rb +109 -0
  19. data/lib/tarsier/cli/generators/model.rb +109 -0
  20. data/lib/tarsier/cli/generators/resource.rb +27 -0
  21. data/lib/tarsier/cli/loader.rb +18 -0
  22. data/lib/tarsier/cli.rb +46 -0
  23. data/lib/tarsier/controller.rb +282 -0
  24. data/lib/tarsier/database.rb +588 -0
  25. data/lib/tarsier/errors.rb +77 -0
  26. data/lib/tarsier/middleware/base.rb +47 -0
  27. data/lib/tarsier/middleware/compression.rb +113 -0
  28. data/lib/tarsier/middleware/cors.rb +101 -0
  29. data/lib/tarsier/middleware/csrf.rb +88 -0
  30. data/lib/tarsier/middleware/logger.rb +74 -0
  31. data/lib/tarsier/middleware/rate_limit.rb +110 -0
  32. data/lib/tarsier/middleware/stack.rb +143 -0
  33. data/lib/tarsier/middleware/static.rb +124 -0
  34. data/lib/tarsier/model.rb +590 -0
  35. data/lib/tarsier/params.rb +269 -0
  36. data/lib/tarsier/query.rb +495 -0
  37. data/lib/tarsier/request.rb +274 -0
  38. data/lib/tarsier/response.rb +282 -0
  39. data/lib/tarsier/router/compiler.rb +173 -0
  40. data/lib/tarsier/router/node.rb +97 -0
  41. data/lib/tarsier/router/route.rb +119 -0
  42. data/lib/tarsier/router.rb +272 -0
  43. data/lib/tarsier/version.rb +5 -0
  44. data/lib/tarsier/websocket.rb +275 -0
  45. data/lib/tarsier.rb +167 -0
  46. data/sig/tarsier.rbs +485 -0
  47. metadata +230 -0
data/sig/tarsier.rbs ADDED
@@ -0,0 +1,485 @@
1
+ # Type signatures for Tarsier framework
2
+
3
+ module Tarsier
4
+ VERSION: String
5
+
6
+ def self.app: -> Application?
7
+ def self.app=: (Application) -> Application
8
+ def self.application: () { (Application) -> void } -> Application
9
+ def self.routes: () { (Router) -> void } -> void
10
+ def self.router: -> Router?
11
+ def self.env: -> String
12
+ def self.development?: -> bool
13
+ def self.production?: -> bool
14
+ def self.test?: -> bool
15
+
16
+ class Error < StandardError
17
+ end
18
+
19
+ class RouteNotFoundError < Error
20
+ attr_reader method: Symbol
21
+ attr_reader path: String
22
+ def initialize: (Symbol, String) -> void
23
+ end
24
+
25
+ class InvalidRouteError < Error
26
+ end
27
+
28
+ class ValidationError < Error
29
+ attr_reader errors: Hash[Symbol, Array[String]]
30
+ def initialize: (Hash[Symbol, Array[String]]) -> void
31
+ end
32
+
33
+ class MissingParameterError < ValidationError
34
+ def initialize: (Symbol) -> void
35
+ end
36
+
37
+ class TypeCoercionError < Error
38
+ attr_reader param_name: Symbol
39
+ attr_reader expected_type: Class
40
+ attr_reader actual_value: untyped
41
+ def initialize: (Symbol, Class, untyped) -> void
42
+ end
43
+
44
+ class Application
45
+ attr_reader router: Router
46
+ attr_reader middleware_stack: Middleware::Stack
47
+ attr_reader config: Configuration
48
+
49
+ def initialize: -> void
50
+ def configure: () { (Configuration) -> void } -> self
51
+ def routes: () { (Router) -> void } -> self
52
+ def use: (Class, *untyped, **untyped) -> self
53
+ def boot!: -> self
54
+ def booted?: -> bool
55
+ def call: (Hash[String, untyped]) -> [Integer, Hash[String, String], Array[String]]
56
+ def dispatch: (Request, Response) -> Response
57
+ def path_for: (Symbol, ?Hash[Symbol, untyped]) -> String
58
+ def routes_list: -> Array[Router::Route]
59
+ end
60
+
61
+ class Configuration
62
+ attr_accessor secret_key: String?
63
+ attr_accessor session_store: Symbol
64
+ attr_accessor log_level: Symbol
65
+ attr_accessor static_files: bool
66
+ attr_accessor default_format: Symbol
67
+ attr_accessor force_ssl: bool
68
+ attr_accessor host: String
69
+ attr_accessor port: Integer
70
+
71
+ def initialize: -> void
72
+ def set: (Hash[Symbol, untyped]) -> void
73
+ end
74
+
75
+ class Router
76
+ HTTP_METHODS: Array[Symbol]
77
+
78
+ attr_reader compiler: Router::Compiler
79
+
80
+ def initialize: -> void
81
+ def draw: () { -> void } -> self
82
+ def compile!: -> void
83
+ def match: (Symbol | String, String) -> [Router::Route, Hash[Symbol, String]]?
84
+ def path_for: (Symbol, ?Hash[Symbol, untyped]) -> String
85
+ def routes: -> Array[Router::Route]
86
+
87
+ def get: (String, ?to: untyped, ?as: Symbol?, ?constraints: Hash[Symbol, Regexp], **untyped) -> void
88
+ def post: (String, ?to: untyped, ?as: Symbol?, ?constraints: Hash[Symbol, Regexp], **untyped) -> void
89
+ def put: (String, ?to: untyped, ?as: Symbol?, ?constraints: Hash[Symbol, Regexp], **untyped) -> void
90
+ def patch: (String, ?to: untyped, ?as: Symbol?, ?constraints: Hash[Symbol, Regexp], **untyped) -> void
91
+ def delete: (String, ?to: untyped, ?as: Symbol?, ?constraints: Hash[Symbol, Regexp], **untyped) -> void
92
+ def head: (String, ?to: untyped, ?as: Symbol?, ?constraints: Hash[Symbol, Regexp], **untyped) -> void
93
+ def options: (String, ?to: untyped, ?as: Symbol?, ?constraints: Hash[Symbol, Regexp], **untyped) -> void
94
+
95
+ def resources: (Symbol, ?only: Array[Symbol]?, ?except: Array[Symbol]?, ?controller: Symbol?, **untyped) ?{ -> void } -> void
96
+ def resource: (Symbol, ?only: Array[Symbol]?, ?except: Array[Symbol]?, ?controller: Symbol?, **untyped) ?{ -> void } -> void
97
+ def scope: (?path: String?, ?module: Symbol?, ?as: Symbol?, **untyped) { -> void } -> void
98
+ def namespace: (Symbol, **untyped) { -> void } -> void
99
+ def mount: (untyped, at: String) -> void
100
+ def root: (to: untyped, ?as: Symbol) -> void
101
+
102
+ class Route
103
+ attr_reader method: Symbol
104
+ attr_reader path: String
105
+ attr_reader handler: untyped
106
+ attr_reader name: Symbol?
107
+ attr_reader constraints: Hash[Symbol, Regexp]
108
+ attr_reader middleware: Array[untyped]
109
+ attr_reader options: Hash[Symbol, untyped]
110
+
111
+ def initialize: (method: Symbol, path: String, handler: untyped, ?name: Symbol?, ?constraints: Hash[Symbol, Regexp], ?middleware: Array[untyped], **untyped) -> void
112
+ def segments: -> Array[Hash[Symbol, untyped]]
113
+ def param_names: -> Array[Symbol]
114
+ def dynamic?: -> bool
115
+ def generate: (?Hash[Symbol, untyped]) -> String
116
+ def controller_class: -> Class?
117
+ def action_name: -> Symbol?
118
+ def proc_handler?: -> bool
119
+ end
120
+
121
+ class Node
122
+ STATIC: Symbol
123
+ PARAM: Symbol
124
+ WILDCARD: Symbol
125
+
126
+ attr_reader segment: String
127
+ attr_reader type: Symbol
128
+ attr_reader param_name: Symbol?
129
+ attr_reader constraint: Regexp?
130
+ attr_reader children: Hash[String, Node]
131
+ attr_accessor route: Route?
132
+ attr_accessor priority: Integer
133
+
134
+ def initialize: (?String, ?type: Symbol, ?param_name: Symbol?, ?constraint: Regexp?) -> void
135
+ def add_child: (String, Node) -> Node
136
+ def find_child: (String) -> Node?
137
+ def match?: (String) -> (Hash[Symbol, String] | false)
138
+ def terminal?: -> bool
139
+ def sorted_children: -> Array[Node]
140
+ def invalidate_cache!: -> void
141
+ end
142
+
143
+ class Compiler
144
+ attr_reader trees: Hash[Symbol, Node]
145
+
146
+ def initialize: -> void
147
+ def add: (Route) -> void
148
+ def compile!: -> void
149
+ def compiled?: -> bool
150
+ def match: (Symbol, String) -> [Route, Hash[Symbol, String]]?
151
+ def named_route: (Symbol) -> Route?
152
+ def path_for: (Symbol, ?Hash[Symbol, untyped]) -> String
153
+ def routes: -> Array[Route]
154
+ end
155
+ end
156
+
157
+ class Request
158
+ HTTP_METHODS: Array[String]
159
+
160
+ attr_reader env: Hash[String, untyped]
161
+ attr_reader route_params: Hash[Symbol, String]
162
+
163
+ def initialize: (Hash[String, untyped], ?Hash[Symbol, String]) -> void
164
+ def method: -> Symbol
165
+ def path: -> String
166
+ def url: -> String
167
+ def scheme: -> String
168
+ def host: -> String
169
+ def port: -> Integer
170
+ def query_string: -> String
171
+ def query_params: -> Hash[Symbol, String]
172
+ def params: -> Params
173
+ def body: -> String
174
+ def body_params: -> Hash[Symbol, untyped]
175
+ def headers: -> Hash[String, String]
176
+ def header: (String) -> String?
177
+ def content_type: -> String?
178
+ def content_length: -> Integer?
179
+ def accept: -> String?
180
+ def accepted_types: -> Array[String]
181
+ def accepts?: (String) -> bool
182
+ def cookies: -> Hash[Symbol, String]
183
+ def user_agent: -> String?
184
+ def ip: -> String
185
+ def secure?: -> bool
186
+ def xhr?: -> bool
187
+ def json?: -> bool
188
+ def form?: -> bool
189
+ def get?: -> bool
190
+ def post?: -> bool
191
+ def put?: -> bool
192
+ def patch?: -> bool
193
+ def delete?: -> bool
194
+ def head?: -> bool
195
+ def options?: -> bool
196
+ def safe?: -> bool
197
+ def idempotent?: -> bool
198
+ end
199
+
200
+ class Response
201
+ STATUS_CODES: Hash[Integer, String]
202
+
203
+ attr_reader status: Integer
204
+ attr_reader headers: Hash[String, String]
205
+ attr_accessor body: String?
206
+
207
+ def initialize: (?status: Integer, ?headers: Hash[String, String], ?body: String?) -> void
208
+ def status=: (Integer) -> void
209
+ def set_header: (String, String) -> self
210
+ def []=: (String, String) -> self
211
+ def get_header: (String) -> String?
212
+ def []: (String) -> String?
213
+ def delete_header: (String) -> String?
214
+ def content_type=: (String, ?charset: String?) -> self
215
+ def content_length=: (Integer) -> self
216
+ def write: (String) -> self
217
+ def <<: (String) -> self
218
+ def json: (untyped, ?status: Integer) -> self
219
+ def html: (String, ?status: Integer) -> self
220
+ def text: (String, ?status: Integer) -> self
221
+ def redirect: (String, ?status: Integer) -> self
222
+ def set_cookie: (String, String, **untyped) -> self
223
+ def delete_cookie: (String, **untyped) -> self
224
+ def stream: () { (StreamWriter) -> void } -> self
225
+ def streaming?: -> bool
226
+ def sent?: -> bool
227
+ def mark_sent!: -> void
228
+ def to_rack: -> [Integer, Hash[String, String], Array[String]]
229
+ def finish: -> [Integer, Hash[String, String], Array[String]]
230
+ end
231
+
232
+ class StreamBody
233
+ def initialize: () { (StreamWriter) -> void } -> void
234
+ def each: () { (String) -> void } -> void
235
+ end
236
+
237
+ class StreamWriter
238
+ def initialize: () { (String) -> void } -> void
239
+ def write: (String) -> void
240
+ def <<: (String) -> void
241
+ end
242
+
243
+ class Params
244
+ Boolean: Object
245
+
246
+ attr_reader raw: Hash[Symbol, untyped]
247
+
248
+ def initialize: (?Hash[Symbol, untyped]) -> void
249
+ def []: (Symbol | String) -> untyped
250
+ def key?: (Symbol | String) -> bool
251
+ def has_key?: (Symbol | String) -> bool
252
+ def fetch: (Symbol | String, ?untyped) -> untyped
253
+ def require: (Symbol | String, ?type: Class?) -> untyped
254
+ def optional: (Symbol | String, ?type: Class?, ?default: untyped) -> untyped
255
+ def permit: (*Symbol) -> Hash[Symbol, untyped]
256
+ def slice: (*Symbol) -> Hash[Symbol, untyped]
257
+ def except: (*Symbol) -> Hash[Symbol, untyped]
258
+ def merge: (Hash[Symbol, untyped]) -> Params
259
+ def to_h: -> Hash[Symbol, untyped]
260
+ def to_hash: -> Hash[Symbol, untyped]
261
+ def each: () { ([Symbol, untyped]) -> void } -> void
262
+ def empty?: -> bool
263
+ def size: -> Integer
264
+ def length: -> Integer
265
+ def inspect: -> String
266
+ end
267
+
268
+ class ParamSchema
269
+ attr_reader rules: Hash[Symbol, Hash[Symbol, untyped]]
270
+
271
+ def initialize: -> void
272
+ def requires: (Symbol, type: Class, **untyped) -> void
273
+ def optional: (Symbol, type: Class, ?default: untyped, **untyped) -> void
274
+ def validate: (Params | Hash[Symbol, untyped]) -> Hash[Symbol, untyped]
275
+ end
276
+
277
+ class Controller
278
+ def self.params: () ?{ (ParamSchema) -> void } -> ParamSchema
279
+ def self.param_schema: -> ParamSchema?
280
+ def self.before_action: (Symbol, ?only: Array[Symbol]?, ?except: Array[Symbol]?) -> void
281
+ def self.after_action: (Symbol, ?only: Array[Symbol]?, ?except: Array[Symbol]?) -> void
282
+ def self.around_action: (Symbol, ?only: Array[Symbol]?, ?except: Array[Symbol]?) -> void
283
+ def self.filters: -> Hash[Symbol, Array[Hash[Symbol, untyped]]]
284
+ def self.rescue_from: (Class, with: Symbol) -> void
285
+ def self.rescue_handlers: -> Hash[Class, Symbol]
286
+ def self.skip_before_action: (Symbol, ?only: Array[Symbol]?, ?except: Array[Symbol]?) -> void
287
+ def self.skipped_filters: -> Hash[Symbol, Array[Hash[Symbol, untyped]]]
288
+
289
+ attr_reader request: Request
290
+ attr_reader response: Response
291
+ attr_reader params: Params
292
+ attr_reader action_name: Symbol
293
+
294
+ def initialize: (Request, Response, Symbol) -> void
295
+ def dispatch: -> Response
296
+ def validated_params: -> Hash[Symbol, untyped]
297
+ def render: (?json: untyped, ?html: String?, ?text: String?, ?status: Integer, **untyped) -> void
298
+ def redirect_to: (String, ?status: Integer) -> void
299
+ def send_file: (String, ?content_type: String?, ?filename: String?, ?disposition: String) -> void
300
+ def stream: () { (StreamWriter) -> void } -> void
301
+ def head: (Integer, **String) -> void
302
+ def halt!: -> void
303
+ def halted?: -> bool
304
+ def session: -> Hash[Symbol, untyped]
305
+ def flash: -> Hash[Symbol, untyped]
306
+ end
307
+
308
+ module Middleware
309
+ class Stack
310
+ attr_reader middlewares: Array[Hash[Symbol, untyped]]
311
+
312
+ def initialize: -> void
313
+ def use: (Class, *untyped, **untyped) -> self
314
+ def insert_before: (Class, Class, *untyped, **untyped) -> self
315
+ def insert_after: (Class, Class, *untyped, **untyped) -> self
316
+ def delete: (Class) -> self
317
+ def swap: (Class, Class, *untyped, **untyped) -> self
318
+ def build: (untyped) -> untyped
319
+ def call: (Request, Response, untyped) -> Response
320
+ def include?: (Class) -> bool
321
+ def size: -> Integer
322
+ def clear: -> self
323
+ end
324
+
325
+ class Base
326
+ attr_reader app: untyped
327
+ attr_reader options: Hash[Symbol, untyped]
328
+
329
+ def initialize: (untyped, **untyped) -> void
330
+ def call: (Request, Response) -> Response
331
+ end
332
+
333
+ class CORS < Base
334
+ end
335
+
336
+ class CSRF < Base
337
+ end
338
+
339
+ class RateLimit < Base
340
+ end
341
+
342
+ class Static < Base
343
+ end
344
+
345
+ class Logger < Base
346
+ end
347
+
348
+ class Compression < Base
349
+ end
350
+ end
351
+
352
+ class WebSocket
353
+ GUID: String
354
+ OPCODES: Hash[Symbol, Integer]
355
+
356
+ def self.on: (Symbol) { (*untyped) -> void } -> void
357
+ def self.handlers: -> Hash[Symbol, Proc]
358
+ def self.subscribe: (String) -> Array[WebSocket]
359
+ def self.broadcast: (String, String) -> void
360
+ def self.channels: -> Hash[String, Array[WebSocket]]
361
+
362
+ attr_reader request: Request
363
+ attr_reader params: Params
364
+ attr_reader socket: untyped
365
+
366
+ def initialize: (Request, untyped) -> void
367
+ def handshake!: -> bool
368
+ def run: -> void
369
+ def send_message: (String) -> void
370
+ def send: (String) -> void
371
+ def send_binary: (String) -> void
372
+ def close: (?code: Integer, ?reason: String) -> void
373
+ def subscribe: (String) -> void
374
+ def unsubscribe: (String) -> void
375
+ def broadcast: (String, String) -> void
376
+ def open?: -> bool
377
+ end
378
+
379
+ class SSE
380
+ attr_reader request: Request
381
+ attr_reader response: Response
382
+
383
+ def initialize: (Request, Response) -> void
384
+ def start: -> void
385
+ def send: (String, ?event: String?, ?id: String?, ?retry_ms: Integer?) -> void
386
+ def comment: (String) -> void
387
+ def close: -> void
388
+ def open?: -> bool
389
+ end
390
+
391
+ class Query[T]
392
+ include Enumerable[T]
393
+
394
+ attr_reader model: Class
395
+ attr_reader conditions: Array[Hash[Symbol, untyped]]
396
+ attr_reader order_clauses: Array[Hash[Symbol, untyped]]
397
+ attr_reader limit_value: Integer?
398
+ attr_reader offset_value: Integer?
399
+ attr_reader select_columns: Array[Symbol | String]
400
+ attr_reader join_clauses: Array[Hash[Symbol, untyped]]
401
+ attr_reader include_associations: Array[Symbol]
402
+
403
+ def initialize: (Class) -> void
404
+ def where: (?Hash[Symbol, untyped]?, **untyped) -> Query[T]
405
+ def where_not: (**untyped) -> Query[T]
406
+ def order: (*Symbol, **untyped) -> Query[T]
407
+ def limit: (Integer) -> Query[T]
408
+ def offset: (Integer) -> Query[T]
409
+ def select: (*Symbol) -> Query[T]
410
+ def joins: (Symbol | String, ?on: String?, ?type: Symbol) -> Query[T]
411
+ def includes: (*Symbol) -> Query[T]
412
+ def first: -> T?
413
+ def last: -> T?
414
+ def count: -> Integer
415
+ def exists?: -> bool
416
+ def empty?: -> bool
417
+ def find_or_create_by: (Hash[Symbol, untyped], ?create_with: Hash[Symbol, untyped]) -> T
418
+ def find_or_initialize_by: (Hash[Symbol, untyped]) -> T
419
+ def each: () { (T) -> void } -> void
420
+ def to_a: -> Array[T]
421
+ def to_sql: -> String
422
+ def pluck: (*Symbol) -> Array[untyped]
423
+ def ids: -> Array[untyped]
424
+ def update_all: (Hash[Symbol, untyped]) -> Integer
425
+ def delete_all: -> Integer
426
+ end
427
+
428
+ class Model
429
+ def self.attribute: (Symbol, Symbol, **untyped) -> void
430
+ def self.attributes: -> Hash[Symbol, Hash[Symbol, untyped]]
431
+ def self.validates: (Symbol, **untyped) -> void
432
+ def self.validations: -> Hash[Symbol, Array[Hash[Symbol, untyped]]]
433
+ def self.has_many: (Symbol, ?class_name: String?, ?foreign_key: String?, **untyped) -> void
434
+ def self.belongs_to: (Symbol, ?class_name: String?, ?foreign_key: String?, **untyped) -> void
435
+ def self.has_one: (Symbol, ?class_name: String?, ?foreign_key: String?, **untyped) -> void
436
+ def self.associations: -> Hash[Symbol, Hash[Symbol, Hash[Symbol, untyped]]]
437
+ def self.table_name: (?String?) -> String
438
+ def self.primary_key: (?Symbol?) -> Symbol
439
+ def self.find: (untyped) -> instance?
440
+ def self.find!: (untyped) -> instance
441
+ def self.find_by: (**untyped) -> instance?
442
+ def self.all: -> Array[instance]
443
+ def self.query: -> Query[instance]
444
+ def self.where: (*untyped, **untyped) -> Query[instance]
445
+ def self.order: (*untyped, **untyped) -> Query[instance]
446
+ def self.limit: (Integer) -> Query[instance]
447
+ def self.offset: (Integer) -> Query[instance]
448
+ def self.select: (*Symbol) -> Query[instance]
449
+ def self.joins: (Symbol | String, **untyped) -> Query[instance]
450
+ def self.includes: (*Symbol) -> Query[instance]
451
+ def self.create: (?Hash[Symbol, untyped]) -> instance
452
+ def self.create!: (?Hash[Symbol, untyped]) -> instance
453
+ def self.coerce: (untyped, Symbol) -> untyped
454
+ def self.connection=: (untyped) -> untyped
455
+ def self.connection: -> untyped
456
+
457
+ attr_reader errors: Hash[Symbol, Array[String]]
458
+
459
+ def initialize: (?Hash[Symbol, untyped]) -> void
460
+ def id: -> untyped
461
+ def id=: (untyped) -> void
462
+ def new_record?: -> bool
463
+ def persisted?: -> bool
464
+ def destroyed?: -> bool
465
+ def changed?: -> bool
466
+ def changed_attributes: -> Array[Symbol]
467
+ def valid?: -> bool
468
+ def save: -> bool
469
+ def save!: -> bool
470
+ def update: (Hash[Symbol, untyped]) -> bool
471
+ def update!: (Hash[Symbol, untyped]) -> bool
472
+ def destroy: -> bool
473
+ def reload: -> self
474
+ def to_h: -> Hash[Symbol, untyped]
475
+ def to_hash: -> Hash[Symbol, untyped]
476
+ def to_json: (*untyped) -> String
477
+ def inspect: -> String
478
+ end
479
+
480
+ class RecordNotFoundError < Error
481
+ attr_reader model: Class
482
+ attr_reader id: untyped
483
+ def initialize: (Class, untyped) -> void
484
+ end
485
+ end
metadata ADDED
@@ -0,0 +1,230 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tarsier
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Eira Elif
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: base64
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: rake
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '13.0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '13.0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: rspec
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '3.12'
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '3.12'
54
+ - !ruby/object:Gem::Dependency
55
+ name: yard
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '0.9'
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '0.9'
68
+ - !ruby/object:Gem::Dependency
69
+ name: rubocop
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '1.50'
75
+ type: :development
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '1.50'
82
+ - !ruby/object:Gem::Dependency
83
+ name: benchmark-ips
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '2.12'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '2.12'
96
+ - !ruby/object:Gem::Dependency
97
+ name: memory_profiler
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '1.0'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '1.0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: stackprof
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '0.2'
117
+ type: :development
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '0.2'
124
+ - !ruby/object:Gem::Dependency
125
+ name: rack
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '3.0'
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '3.0'
138
+ - !ruby/object:Gem::Dependency
139
+ name: rack-test
140
+ requirement: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '2.1'
145
+ type: :development
146
+ prerelease: false
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '2.1'
152
+ description: Tarsier is a fast, clean Ruby web framework with async support, compiled
153
+ routing, and zero runtime dependencies.
154
+ email:
155
+ - tarsier.rb@protonmail.com
156
+ executables:
157
+ - tarsier
158
+ extensions: []
159
+ extra_rdoc_files: []
160
+ files:
161
+ - CHANGELOG.md
162
+ - LICENSE.txt
163
+ - README.md
164
+ - exe/tarsier
165
+ - lib/tarsier.rb
166
+ - lib/tarsier/application.rb
167
+ - lib/tarsier/cli.rb
168
+ - lib/tarsier/cli/commands/console.rb
169
+ - lib/tarsier/cli/commands/generate.rb
170
+ - lib/tarsier/cli/commands/help.rb
171
+ - lib/tarsier/cli/commands/new.rb
172
+ - lib/tarsier/cli/commands/routes.rb
173
+ - lib/tarsier/cli/commands/server.rb
174
+ - lib/tarsier/cli/commands/version.rb
175
+ - lib/tarsier/cli/generators/app.rb
176
+ - lib/tarsier/cli/generators/base.rb
177
+ - lib/tarsier/cli/generators/controller.rb
178
+ - lib/tarsier/cli/generators/middleware.rb
179
+ - lib/tarsier/cli/generators/migration.rb
180
+ - lib/tarsier/cli/generators/model.rb
181
+ - lib/tarsier/cli/generators/resource.rb
182
+ - lib/tarsier/cli/loader.rb
183
+ - lib/tarsier/controller.rb
184
+ - lib/tarsier/database.rb
185
+ - lib/tarsier/errors.rb
186
+ - lib/tarsier/middleware/base.rb
187
+ - lib/tarsier/middleware/compression.rb
188
+ - lib/tarsier/middleware/cors.rb
189
+ - lib/tarsier/middleware/csrf.rb
190
+ - lib/tarsier/middleware/logger.rb
191
+ - lib/tarsier/middleware/rate_limit.rb
192
+ - lib/tarsier/middleware/stack.rb
193
+ - lib/tarsier/middleware/static.rb
194
+ - lib/tarsier/model.rb
195
+ - lib/tarsier/params.rb
196
+ - lib/tarsier/query.rb
197
+ - lib/tarsier/request.rb
198
+ - lib/tarsier/response.rb
199
+ - lib/tarsier/router.rb
200
+ - lib/tarsier/router/compiler.rb
201
+ - lib/tarsier/router/node.rb
202
+ - lib/tarsier/router/route.rb
203
+ - lib/tarsier/version.rb
204
+ - lib/tarsier/websocket.rb
205
+ - sig/tarsier.rbs
206
+ homepage: https://github.com/tarsier-rb/tarsier
207
+ licenses:
208
+ - MIT
209
+ metadata:
210
+ homepage_uri: https://github.com/tarsier-rb/tarsier
211
+ source_code_uri: https://github.com/tarsier-rb/tarsier
212
+ changelog_uri: https://github.com/tarsier-rb/tarsier/blob/main/CHANGELOG.md
213
+ rdoc_options: []
214
+ require_paths:
215
+ - lib
216
+ required_ruby_version: !ruby/object:Gem::Requirement
217
+ requirements:
218
+ - - ">="
219
+ - !ruby/object:Gem::Version
220
+ version: 3.3.0
221
+ required_rubygems_version: !ruby/object:Gem::Requirement
222
+ requirements:
223
+ - - ">="
224
+ - !ruby/object:Gem::Version
225
+ version: '0'
226
+ requirements: []
227
+ rubygems_version: 3.7.2
228
+ specification_version: 4
229
+ summary: A modern, high-performance Ruby web framework
230
+ test_files: []