real_data_tests 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
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