aboutsummaryrefslogtreecommitdiffstats
path: root/spec/support/bare_sql.rb
blob: 03a50ef77f7b85b1d1e329b1c0a72104835ec393 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
module Support
  module BareSQL

    def insert(schema, table, values)
      execute "INSERT INTO #{schema}.#{table} (#{_keys(values)}) VALUES (#{_values values})"
    end

    def execute(sql)
      base_connection.execute(sql)
    end

    def expect_same_content(table_name)
      expected_content = get_content(source_schema, table_name)
      actual_content   = get_content(target_schema, table_name)
      expect( actual_content ).to eq(expected_content)
    end

    def expect_same_sequence_params(sequence_name)
      expected_seq = Hash.without(get_sequences(source_schema, sequence_name).first, 'log_cnt')
      actual_seq   = Hash.without(get_sequences(target_schema, sequence_name).first, 'log_cnt')
      expect( actual_seq ).to eq(expected_seq)
    end

    def get_content(schema_name, table_name)
      execute("SELECT * FROM #{schema_name}.#{table_name}").to_a
    end

    private

    def base_connection
      ActiveRecord::Base.connection
    end

    def _keys(values)
      values.keys.map(&:to_s).join(", ")
    end

    def _values(values)
      values
        .values
        .map(&method(:_format))
        .join(', ')
    end

    def _format(val)
      case val
      when String
        "'#{val}'"
      when TrueClass
        "'t'"
      when FalseClass
        "'f'"
      else
        val.to_s
      end
    end
  end
end