Class: SqlGenius::Core::Connection::FakeAdapter
- Inherits:
-
Object
- Object
- SqlGenius::Core::Connection::FakeAdapter
- Defined in:
- lib/sql_genius/core/connection/fake_adapter.rb
Overview
In-memory fake connection used by core specs. Supports stubbing queries by regex and returning canned Core::Result values, plus stubbing metadata methods. See spec/sql_genius/core/connection/ fake_adapter_spec.rb for the full surface.
Defined Under Namespace
Classes: NoStubError
Instance Attribute Summary collapse
-
#current_database ⇒ Object
readonly
Returns the value of attribute current_database.
-
#tables ⇒ Object
readonly
Returns the value of attribute tables.
Instance Method Summary collapse
- #close ⇒ Object
- #columns_for(table) ⇒ Object
-
#exec_query(sql, binds: []) ⇒ Object
—– contract —–.
- #indexes_for(table) ⇒ Object
-
#initialize ⇒ FakeAdapter
constructor
A new instance of FakeAdapter.
- #primary_key(table) ⇒ Object
- #quote(value) ⇒ Object
- #quote_table_name(name) ⇒ Object
- #select_value(sql) ⇒ Object
- #server_version ⇒ Object
- #stub_columns_for(table, columns) ⇒ Object
- #stub_current_database(name) ⇒ Object
- #stub_indexes_for(table, indexes) ⇒ Object
- #stub_primary_key(table, name) ⇒ Object
-
#stub_query(pattern, columns: [], rows: [], raises: nil) ⇒ Object
—– stub registration —–.
- #stub_server_version(version) ⇒ Object
- #stub_tables(list) ⇒ Object
Constructor Details
#initialize ⇒ FakeAdapter
Returns a new instance of FakeAdapter.
13 14 15 16 17 18 19 20 21 |
# File 'lib/sql_genius/core/connection/fake_adapter.rb', line 13 def initialize @stubs = [] @tables = [] @columns_for = {} @indexes_for = {} @primary_keys = {} @server_version = "8.0.35" @current_database = "test_db" end |
Instance Attribute Details
#current_database ⇒ Object (readonly)
Returns the value of attribute current_database.
75 76 77 |
# File 'lib/sql_genius/core/connection/fake_adapter.rb', line 75 def current_database @current_database end |
#tables ⇒ Object (readonly)
Returns the value of attribute tables.
94 95 96 |
# File 'lib/sql_genius/core/connection/fake_adapter.rb', line 94 def tables @tables end |
Instance Method Details
#close ⇒ Object
108 109 110 |
# File 'lib/sql_genius/core/connection/fake_adapter.rb', line 108 def close nil end |
#columns_for(table) ⇒ Object
96 97 98 |
# File 'lib/sql_genius/core/connection/fake_adapter.rb', line 96 def columns_for(table) @columns_for.fetch(table, []) end |
#exec_query(sql, binds: []) ⇒ Object
—– contract —–
55 56 57 58 59 60 61 62 |
# File 'lib/sql_genius/core/connection/fake_adapter.rb', line 55 def exec_query(sql, binds: []) _ = binds stub = @stubs.find { |s| s[:pattern] =~ sql } raise NoStubError, "No stub matched SQL: #{sql}" unless stub raise stub[:raises] if stub[:raises] Result.new(columns: stub[:columns], rows: stub[:rows]) end |
#indexes_for(table) ⇒ Object
100 101 102 |
# File 'lib/sql_genius/core/connection/fake_adapter.rb', line 100 def indexes_for(table) @indexes_for.fetch(table, []) end |
#primary_key(table) ⇒ Object
104 105 106 |
# File 'lib/sql_genius/core/connection/fake_adapter.rb', line 104 def primary_key(table) @primary_keys[table] end |
#quote(value) ⇒ Object
77 78 79 80 81 82 83 84 |
# File 'lib/sql_genius/core/connection/fake_adapter.rb', line 77 def quote(value) case value when nil then "NULL" when Integer, Float then value.to_s when String then "'#{value.gsub("'", "''")}'" else "'#{value.to_s.gsub("'", "''")}'" end end |
#quote_table_name(name) ⇒ Object
86 87 88 89 90 91 92 |
# File 'lib/sql_genius/core/connection/fake_adapter.rb', line 86 def quote_table_name(name) if server_version.postgresql? %("#{name.to_s.gsub('"', '""')}") else "`#{name}`" end end |
#select_value(sql) ⇒ Object
64 65 66 67 68 69 |
# File 'lib/sql_genius/core/connection/fake_adapter.rb', line 64 def select_value(sql) result = exec_query(sql) return if result.empty? result.rows.first&.first end |
#server_version ⇒ Object
71 72 73 |
# File 'lib/sql_genius/core/connection/fake_adapter.rb', line 71 def server_version ServerInfo.parse(@server_version) end |
#stub_columns_for(table, columns) ⇒ Object
41 42 43 |
# File 'lib/sql_genius/core/connection/fake_adapter.rb', line 41 def stub_columns_for(table, columns) @columns_for[table] = columns end |
#stub_current_database(name) ⇒ Object
33 34 35 |
# File 'lib/sql_genius/core/connection/fake_adapter.rb', line 33 def stub_current_database(name) @current_database = name end |
#stub_indexes_for(table, indexes) ⇒ Object
45 46 47 |
# File 'lib/sql_genius/core/connection/fake_adapter.rb', line 45 def stub_indexes_for(table, indexes) @indexes_for[table] = indexes end |
#stub_primary_key(table, name) ⇒ Object
49 50 51 |
# File 'lib/sql_genius/core/connection/fake_adapter.rb', line 49 def stub_primary_key(table, name) @primary_keys[table] = name end |
#stub_query(pattern, columns: [], rows: [], raises: nil) ⇒ Object
—– stub registration —–
25 26 27 |
# File 'lib/sql_genius/core/connection/fake_adapter.rb', line 25 def stub_query(pattern, columns: [], rows: [], raises: nil) @stubs << { pattern: pattern, columns: columns, rows: rows, raises: raises } end |
#stub_server_version(version) ⇒ Object
29 30 31 |
# File 'lib/sql_genius/core/connection/fake_adapter.rb', line 29 def stub_server_version(version) @server_version = version end |
#stub_tables(list) ⇒ Object
37 38 39 |
# File 'lib/sql_genius/core/connection/fake_adapter.rb', line 37 def stub_tables(list) @tables = list end |