tina4ruby 3.10.6 → 3.10.11

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: dd191b3f30b33680accbdd1d9ec578115df0c560ea57252ad19c5762831132ea
4
- data.tar.gz: 94b4368fd314aaaf0f6646d95de2f7a0fabfa886e9248446714b71114d44eac0
3
+ metadata.gz: 4966bc1955a5ee02eba12ebc9d43a72ba8f1572a2953dc285857f1f6d0f42a02
4
+ data.tar.gz: eabb1a3be1213f34353a0adf4bca93fba38f7bb7e15574ee76888e02d163f29a
5
5
  SHA512:
6
- metadata.gz: c476b4e3f7ba2fe4d05941b7fbdc8dd67ec581128c66e9875239432e97bef69ef2ee308ef8848396e6153ae5865720554ea1ded214c7383568af8fe807dad778
7
- data.tar.gz: fea44d3012227c12ccf2caea25df55e1c1ea2cf0a355cd905d175beed96c08beaaf3d88477836f03348300821579885a175fa8e5f0dc62de2e6c27dcf1689791
6
+ metadata.gz: de40973a6d1f36c8dc4b18a6a360e9647d59aa5b94803890d32a9f39bd0bd9350d208683337082f49a4df6dbde066eacdd63aaa4bb8a070dc68feddf9d0a5612
7
+ data.tar.gz: 80bbc66c2c78d07177bcee66f21fd9fb0f5ef4b4a7148284dd65b6cb4c5344f2132c9bbe4a1dae2839ab0803865f78660dad318099354625454b26b4c4cf61b6
@@ -103,16 +103,36 @@ module Tina4
103
103
 
104
104
  def ensure_tracking_table
105
105
  unless @db.table_exists?(TRACKING_TABLE)
106
- @db.execute(<<~SQL)
107
- CREATE TABLE #{TRACKING_TABLE} (
108
- id INTEGER PRIMARY KEY,
109
- migration_name VARCHAR(255) NOT NULL,
110
- description VARCHAR(255) DEFAULT '',
111
- batch INTEGER NOT NULL DEFAULT 1,
112
- executed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
113
- passed INTEGER NOT NULL DEFAULT 1
114
- )
115
- SQL
106
+ if firebird?
107
+ # Firebird: no AUTOINCREMENT, no TEXT type, use generator for IDs
108
+ begin
109
+ @db.execute("CREATE GENERATOR GEN_TINA4_MIGRATION_ID")
110
+ @db.execute("COMMIT") rescue nil
111
+ rescue
112
+ # Generator may already exist
113
+ end
114
+ @db.execute(<<~SQL)
115
+ CREATE TABLE #{TRACKING_TABLE} (
116
+ id INTEGER NOT NULL PRIMARY KEY,
117
+ migration_name VARCHAR(500) NOT NULL,
118
+ description VARCHAR(500) DEFAULT '',
119
+ batch INTEGER NOT NULL DEFAULT 1,
120
+ executed_at VARCHAR(50) DEFAULT CURRENT_TIMESTAMP,
121
+ passed INTEGER NOT NULL DEFAULT 1
122
+ )
123
+ SQL
124
+ else
125
+ @db.execute(<<~SQL)
126
+ CREATE TABLE #{TRACKING_TABLE} (
127
+ id INTEGER PRIMARY KEY,
128
+ migration_name VARCHAR(255) NOT NULL,
129
+ description VARCHAR(255) DEFAULT '',
130
+ batch INTEGER NOT NULL DEFAULT 1,
131
+ executed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
132
+ passed INTEGER NOT NULL DEFAULT 1
133
+ )
134
+ SQL
135
+ end
116
136
  Tina4::Log.info("Created migrations tracking table")
117
137
  end
118
138
  end
@@ -309,10 +329,22 @@ module Tina4
309
329
  # Extract description from filename (strip numeric prefix and extension)
310
330
  stem = File.basename(name, File.extname(name))
311
331
  desc = stem.sub(/\A\d+_/, "").tr("_", " ")
312
- @db.execute(
313
- "INSERT INTO #{TRACKING_TABLE} (migration_name, description, batch, passed) VALUES (?, ?, ?, ?)",
314
- [name, desc, batch, passed]
315
- )
332
+ if firebird?
333
+ # Firebird: generate ID from sequence
334
+ row = @db.fetch_one(
335
+ "SELECT GEN_ID(GEN_TINA4_MIGRATION_ID, 1) AS NEXT_ID FROM RDB\$DATABASE"
336
+ )
337
+ next_id = row ? (row[:NEXT_ID] || row[:next_id] || 1).to_i : 1
338
+ @db.execute(
339
+ "INSERT INTO #{TRACKING_TABLE} (id, migration_name, description, batch, passed) VALUES (?, ?, ?, ?, ?)",
340
+ [next_id, name, desc, batch, passed]
341
+ )
342
+ else
343
+ @db.execute(
344
+ "INSERT INTO #{TRACKING_TABLE} (migration_name, description, batch, passed) VALUES (?, ?, ?, ?)",
345
+ [name, desc, batch, passed]
346
+ )
347
+ end
316
348
  end
317
349
 
318
350
  def remove_migration_record(name)
@@ -537,13 +537,19 @@ module Tina4
537
537
  end
538
538
  elsif part =~ /\A(\w+)\[(.+?)\]\z/
539
539
  base = Regexp.last_match(1)
540
- index = Regexp.last_match(2)
540
+ index = Regexp.last_match(2).strip
541
541
  value = access_value(value, base)
542
- if index =~ /\A\d+\z/
542
+ if index =~ /\A["'](.*)["']\z/
543
+ # Quoted string literal — use as-is
544
+ index = Regexp.last_match(1)
545
+ value = access_value(value, index)
546
+ elsif index =~ /\A\d+\z/
543
547
  value = value[index.to_i] if value.respond_to?(:[])
544
548
  else
545
- index = index.gsub(/["']/, "")
546
- value = access_value(value, index)
549
+ # Resolve as a variable from context
550
+ resolved = resolve_variable(index)
551
+ value = access_value(value, resolved.to_s) unless resolved.nil?
552
+ value = nil if resolved.nil?
547
553
  end
548
554
  else
549
555
  value = access_value(value, part)
data/lib/tina4/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Tina4
4
- VERSION = "3.10.6"
4
+ VERSION = "3.10.11"
5
5
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tina4ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.10.6
4
+ version: 3.10.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tina4 Team
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2026-03-28 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: rack
@@ -400,7 +399,6 @@ licenses:
400
399
  - MIT
401
400
  metadata:
402
401
  homepage_uri: https://tina4.com
403
- post_install_message:
404
402
  rdoc_options: []
405
403
  require_paths:
406
404
  - lib
@@ -415,8 +413,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
415
413
  - !ruby/object:Gem::Version
416
414
  version: '0'
417
415
  requirements: []
418
- rubygems_version: 3.4.19
419
- signing_key:
416
+ rubygems_version: 4.0.3
420
417
  specification_version: 4
421
418
  summary: Simple. Fast. Human. This is not a framework.
422
419
  test_files: []