aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases/arel/support/fake_record.rb
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord/test/cases/arel/support/fake_record.rb')
-rw-r--r--activerecord/test/cases/arel/support/fake_record.rb129
1 files changed, 129 insertions, 0 deletions
diff --git a/activerecord/test/cases/arel/support/fake_record.rb b/activerecord/test/cases/arel/support/fake_record.rb
new file mode 100644
index 0000000000..75ac1e072f
--- /dev/null
+++ b/activerecord/test/cases/arel/support/fake_record.rb
@@ -0,0 +1,129 @@
+# frozen_string_literal: true
+
+require 'date'
+module FakeRecord
+ class Column < Struct.new(:name, :type)
+ end
+
+ class Connection
+ attr_reader :tables
+ attr_accessor :visitor
+
+ def initialize(visitor = nil)
+ @tables = %w{ users photos developers products}
+ @columns = {
+ 'users' => [
+ Column.new('id', :integer),
+ Column.new('name', :string),
+ Column.new('bool', :boolean),
+ Column.new('created_at', :date)
+ ],
+ 'products' => [
+ Column.new('id', :integer),
+ Column.new('price', :decimal)
+ ]
+ }
+ @columns_hash = {
+ 'users' => Hash[@columns['users'].map { |x| [x.name, x] }],
+ 'products' => Hash[@columns['products'].map { |x| [x.name, x] }]
+ }
+ @primary_keys = {
+ 'users' => 'id',
+ 'products' => 'id'
+ }
+ @visitor = visitor
+ end
+
+ def columns_hash table_name
+ @columns_hash[table_name]
+ end
+
+ def primary_key name
+ @primary_keys[name.to_s]
+ end
+
+ def data_source_exists? name
+ @tables.include? name.to_s
+ end
+
+ def columns name, message = nil
+ @columns[name.to_s]
+ end
+
+ def quote_table_name name
+ "\"#{name.to_s}\""
+ end
+
+ def quote_column_name name
+ "\"#{name.to_s}\""
+ end
+
+ def schema_cache
+ self
+ end
+
+ def quote thing
+ case thing
+ when DateTime
+ "'#{thing.strftime("%Y-%m-%d %H:%M:%S")}'"
+ when Date
+ "'#{thing.strftime("%Y-%m-%d")}'"
+ when true
+ "'t'"
+ when false
+ "'f'"
+ when nil
+ 'NULL'
+ when Numeric
+ thing
+ else
+ "'#{thing.to_s.gsub("'", "\\\\'")}'"
+ end
+ end
+ end
+
+ class ConnectionPool
+ class Spec < Struct.new(:config)
+ end
+
+ attr_reader :spec, :connection
+
+ def initialize
+ @spec = Spec.new(:adapter => 'america')
+ @connection = Connection.new
+ @connection.visitor = Arel::Visitors::ToSql.new(connection)
+ end
+
+ def with_connection
+ yield connection
+ end
+
+ def table_exists? name
+ connection.tables.include? name.to_s
+ end
+
+ def columns_hash
+ connection.columns_hash
+ end
+
+ def schema_cache
+ connection
+ end
+
+ def quote thing
+ connection.quote thing
+ end
+ end
+
+ class Base
+ attr_accessor :connection_pool
+
+ def initialize
+ @connection_pool = ConnectionPool.new
+ end
+
+ def connection
+ connection_pool.connection
+ end
+ end
+end