Sha256: c9cb980a49917e99e3d85ce9bcbca1e6f49bca1b0dc1f348db00de81dc1182f3

Contents?: true

Size: 1.29 KB

Versions: 1

Compression:

Stored size: 1.29 KB

Contents

shared_examples_for "doesn't blow up on reserved words" do
  # collect and uniq reserved words
  reserved_words = ['mysql_reserved.txt', 'pg_reserved.txt'].map do |basename|
    File.expand_path("../../misc/#{basename}", __FILE__)
  end.map do |path|
    IO.readlines(path)
  end.flatten.map(&:chomp).select(&:present?).uniq

  # make lots of AR models, each of which has 10 columns named after these words
  nasties = []
  reserved_words.each_slice(10) do |words|
    eval %{
      class Nasty#{nasties.length} < ActiveRecord::Base
      end
    }
    nasty = Object.const_get("Nasty#{nasties.length}")
    nasty.class_eval do
      self.primary_key = 'fake_primary_key'
      col :fake_primary_key
      words.each do |word|
        col word
      end
    end
    nasties << [ nasty, words ]
  end
  nasties.each do |nasty, _|
    nasty.auto_upgrade!
  end

  nasties.each do |nasty, words|
    it "doesn't die on reserved words #{words.join(',')}" do
      upsert = Upsert.new connection, nasty.table_name
      random = rand(1e3).to_s
      selector = { :fake_primary_key => random, words.first => words.first }
      document = words[1..-1].inject({}) { |memo, word| memo[word] = word; memo }
      assert_creates nasty, [selector.merge(document)] do
        upsert.row selector, document
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
upsert-0.2.0 test/shared/reserved_words.rb