Sha256: 2dfea8321067d737e2cec476c9242356744c7c2d80031ea8ad0bcf02624ea9cf

Contents?: true

Size: 1.43 KB

Versions: 2

Compression:

Stored size: 1.43 KB

Contents

require 'fileutils'

require 'simple_migrations/version'

module SimpleMigrations
  class << self
    def sql_executor(&block)
      @sql_executor = block
    end

    def ensure_directories
      FileUtils.mkdir_p('db/migrate')
    end

    def ensure_schema_migrations
      exec('SET client_min_messages TO WARNING')
      exec('create table if not exists schema_migrations(id bigint, ran_at timestamp)')
    end

    def stub_migration(name)
      now = Time.now
      stamp = now.year.to_s + now.month.to_s.rjust(2, '0') + now.day.to_s.rjust(2, '0') + now.hour.to_s.rjust(2, '0') + now.min.to_s.rjust(2, '0') + now.sec.to_s.rjust(2, '0')
      FileUtils.touch("db/migrate/#{stamp}_#{name}.sql")
    end

    def migrate
      Dir['db/migrate/*'].each do |filename|
        basename = File.basename(filename)
        id = Integer(basename.split('_').first)
        if run_record = record_for(id)
          puts "#{basename} ran at #{run_record['ran_at']}"
        else
          puts "Running #{basename}..."
          exec('begin')
          sql = File.read(filename)
          puts sql
          exec(sql)
          exec("insert into schema_migrations(id, ran_at) values(#{id}, '#{Time.now.to_s}')")
          exec('commit')
          puts 'Done.'
        end
      end
    end

    private

    def record_for(id)
      exec("select * from schema_migrations where id = #{id}").first
    end

    def exec(sql)
      @sql_executor.call(sql)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
simple_migrations-0.1.10 lib/simple_migrations.rb
simple_migrations-0.1.9 lib/simple_migrations.rb