real_data_tests 0.3.3 → 0.3.4

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: 89206c96e781984f28f3efd5c3e138c15693367fcad3bf5a80bd525a7fdff88d
4
- data.tar.gz: 40af166854587b8fe9c7e446d0ac1240aa73912bc8ebf4e21a2cebe28530b6ab
3
+ metadata.gz: 2a75133368f84b08bf44ad4f2ee73ed4eaf5636a7f19dbafdc5e6c47478055d8
4
+ data.tar.gz: 7693fa53c25af6c928ce61cb33e14667bf580fb18a32182452917932ca539bf2
5
5
  SHA512:
6
- metadata.gz: 97a33efa24925c0bd452be680119d55f03a4790f1b545aa1250a2388d26cb55482b09c310094eb3d07eb2f8c0c92eadfea2f2061a7b0611d1ff15df1367680eb
7
- data.tar.gz: e4c69341c9a4a21b6d08649b393d5594d5c6e2066a8bbf981366e377a6f7b9f2bce6aac4394ccc86026853a821aa746630b2cc49a923aee5faa4da60bbf0d6c9
6
+ metadata.gz: 366de9d95f5d8582c83cebcb89e20af819a6516dc6a1a30e3e560b3ba6de5e300404a781a08fc6b1063b562dd2519ce83ce80a0976844dfd09e0ce94551641ca
7
+ data.tar.gz: be867e1b473e90ea4bcb9041704fe6e4edac3d4e371c283dda8ac6c32b2903cd2d5b81a326f4aaa6bcb36859c2125ec995d6d115b594441bb6f23b1cbc019e5b
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.3.4] - 2025-01-14
4
+ ### Added
5
+ - Alternative native SQL loading method for CI environments
6
+ - Added `load_real_test_data_native` method that doesn't rely on system commands
7
+ - Works in restricted environments like GitHub Actions
8
+ - Uses ActiveRecord's native connection for SQL execution
9
+ - Maintains same transaction and foreign key handling behavior
10
+
3
11
  ## [0.3.3] - 2025-01-14
4
12
  ### Fixed
5
13
  - Improved circular dependency handling in PgDumpGenerator for self-referential associations
@@ -3,16 +3,13 @@ module RealDataTests
3
3
  def load_real_test_data(name)
4
4
  dump_path = File.join(RealDataTests.configuration.dump_path, "#{name}.sql")
5
5
  raise Error, "Test data file not found: #{dump_path}" unless File.exist?(dump_path)
6
-
7
6
  ActiveRecord::Base.transaction do
8
7
  # Disable foreign key checks
9
8
  ActiveRecord::Base.connection.execute('SET session_replication_role = replica;')
10
-
11
9
  begin
12
10
  # Load the SQL dump quietly
13
11
  result = system("psql #{connection_options} -q < #{dump_path}")
14
12
  raise Error, "Failed to load test data: #{dump_path}" unless result
15
-
16
13
  ensure
17
14
  # Re-enable foreign key checks
18
15
  ActiveRecord::Base.connection.execute('SET session_replication_role = DEFAULT;')
@@ -20,6 +17,40 @@ module RealDataTests
20
17
  end
21
18
  end
22
19
 
20
+ # New method that doesn't rely on system commands
21
+ def load_real_test_data_native(name)
22
+ dump_path = File.join(RealDataTests.configuration.dump_path, "#{name}.sql")
23
+ raise Error, "Test data file not found: #{dump_path}" unless File.exist?(dump_path)
24
+
25
+ ActiveRecord::Base.transaction do
26
+ connection = ActiveRecord::Base.connection
27
+
28
+ # Disable foreign key checks
29
+ connection.execute('SET session_replication_role = replica;')
30
+
31
+ begin
32
+ # Read the SQL file content
33
+ sql_content = File.read(dump_path)
34
+
35
+ # Split the file into individual statements
36
+ statements = split_sql_statements(sql_content)
37
+
38
+ # Execute each statement
39
+ statements.each do |statement|
40
+ next if statement.strip.empty?
41
+ begin
42
+ connection.execute(statement)
43
+ rescue ActiveRecord::StatementInvalid => e
44
+ raise Error, "Failed to execute SQL statement: #{e.message}"
45
+ end
46
+ end
47
+ ensure
48
+ # Re-enable foreign key checks
49
+ connection.execute('SET session_replication_role = DEFAULT;')
50
+ end
51
+ end
52
+ end
53
+
23
54
  private
24
55
 
25
56
  def connection_options
@@ -28,7 +59,6 @@ module RealDataTests
28
59
  else
29
60
  ActiveRecord::Base.connection_config
30
61
  end
31
-
32
62
  options = []
33
63
  options << "-h #{config[:host]}" if config[:host]
34
64
  options << "-p #{config[:port]}" if config[:port]
@@ -37,5 +67,37 @@ module RealDataTests
37
67
  options << "-q"
38
68
  options.join(" ")
39
69
  end
70
+
71
+ def split_sql_statements(sql)
72
+ statements = []
73
+ current_statement = ''
74
+ in_string = false
75
+ escaped = false
76
+
77
+ sql.each_char do |char|
78
+ case char
79
+ when '\\'
80
+ escaped = !escaped
81
+ when "'"
82
+ in_string = !in_string unless escaped
83
+ escaped = false
84
+ when ';'
85
+ if !in_string
86
+ statements << current_statement.strip
87
+ current_statement = ''
88
+ else
89
+ current_statement << char
90
+ end
91
+ else
92
+ escaped = false
93
+ current_statement << char
94
+ end
95
+ end
96
+
97
+ # Add the last statement if it doesn't end with a semicolon
98
+ statements << current_statement.strip if current_statement.strip.length > 0
99
+
100
+ statements
101
+ end
40
102
  end
41
103
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RealDataTests
4
- VERSION = "0.3.3"
4
+ VERSION = "0.3.4"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: real_data_tests
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Dias